diff options
author | IWASE Yusuke <iwase.yusuke0@gmail.com> | 2017-06-26 15:04:43 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2017-06-26 15:17:44 +0900 |
commit | a67ed2858417b9d795460f05126c01fb0cd344f9 (patch) | |
tree | 8171336c30668f8fce7d18125a591de86c322f40 /tests/unit/ofproto | |
parent | d8ae9491dab0824eb88b7e8aad044302d1463f84 (diff) |
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 <iwase.yusuke0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'tests/unit/ofproto')
353 files changed, 97823 insertions, 0 deletions
diff --git a/tests/unit/ofproto/__init__.py b/tests/unit/ofproto/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/ofproto/__init__.py 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 <yamamoto at valinux co jp> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 <yamahata at private email ne jp> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 <yamamoto at valinux co jp> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 <yamamoto at valinux co jp> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 <yamamoto at valinux co jp> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 <yamamoto at valinux co jp> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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} + + # <action>_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'] + + # <action>_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() |