summaryrefslogtreecommitdiffhomepage
path: root/tests/unit/ofproto/json/of15
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/ofproto/json/of15')
-rw-r--r--tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json105
-rw-r--r--tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json26
-rw-r--r--tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json234
-rw-r--r--tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json8
-rw-r--r--tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json24
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json18
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json3
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json3
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json200
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json8
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json43
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json39
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json22
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json26
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json15
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json5
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json5
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json8
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json13
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json9
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json9
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json3
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json57
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json26
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json193
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json101
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json67
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json202
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json66
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json27
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json38
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json44
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json18
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json122
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json3
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json3
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json45
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json24
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json63
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json27
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json15
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json25
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json18
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json26
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json27
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json46
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json32
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json103
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json60
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json113
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json76
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json81
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json8
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json80
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json8
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json67
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json7
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json8
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json122
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json83
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json38
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json38
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json15
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json24
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json6
-rw-r--r--tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json62
83 files changed, 3252 insertions, 0 deletions
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
+ }
+ }
+ }
+}