summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMinoru TAKAHASHI <takahashi.minoru7@gmail.com>2015-09-10 11:00:44 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-09-10 11:06:43 +0900
commit62a53a548d4871d6777f6a2e71af641df80749f0 (patch)
treeba19339dafc4aa0e11931f21861669dc95edd199
parent5b0106eb451c492716f54c55147dd83e701e9fec (diff)
test_parser: Add expected json outputs for OF1.5
Signed-off-by: Minoru TAKAHASHI <takahashi.minoru7@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json18
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json3
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json3
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json15
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json5
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json5
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json7
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json8
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json13
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json9
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json9
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json3
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json66
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json27
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json18
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json122
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json3
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json3
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json24
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json27
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json7
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json20
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json25
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json7
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json17
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json35
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json27
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json7
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json103
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json60
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json113
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json7
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json76
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json81
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json80
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json8
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json62
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json41
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json122
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json83
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json56
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json24
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json6
-rw-r--r--ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json62
50 files changed, 1553 insertions, 0 deletions
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json
new file mode 100644
index 00000000..248131fd
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json
new file mode 100644
index 00000000..11f8cfcc
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json
@@ -0,0 +1,3 @@
+{
+ "OFPBarrierReply": {}
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json
new file mode 100644
index 00000000..2aae9ec3
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json
@@ -0,0 +1,3 @@
+{
+ "OFPBarrierRequest": {}
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json
new file mode 100644
index 00000000..26e5dc2d
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json
new file mode 100644
index 00000000..5b23f8bc
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json
@@ -0,0 +1,6 @@
+{
+ "OFPDescStatsRequest": {
+ "flags": 0,
+ "type": 0
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json
new file mode 100644
index 00000000..2a573634
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json
@@ -0,0 +1,5 @@
+{
+ "OFPEchoReply": {
+ "data": "aG9nZQ=="
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json
new file mode 100644
index 00000000..e1f2af42
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json
@@ -0,0 +1,5 @@
+{
+ "OFPEchoRequest": {
+ "data": "aG9nZQ=="
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json
new file mode 100644
index 00000000..e9ab2b5e
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json
@@ -0,0 +1,7 @@
+{
+ "OFPErrorMsg": {
+ "code": 11,
+ "data": "ZnVnYWZ1Z2E=",
+ "type": 2
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json
new file mode 100644
index 00000000..37bfb6a9
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json
new file mode 100644
index 00000000..1eb06b84
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json
new file mode 100644
index 00000000..93af3039
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json
new file mode 100644
index 00000000..12e8744a
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json
new file mode 100644
index 00000000..8f48ad5a
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json
@@ -0,0 +1,3 @@
+{
+ "OFPFeaturesRequest": {}
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json
new file mode 100644
index 00000000..8c028877
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json
new file mode 100644
index 00000000..aed7ddaa
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json
new file mode 100644
index 00000000..2baccad4
--- /dev/null
+++ b/ryu/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": 1
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json
new file mode 100644
index 00000000..82c9e794
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json
new file mode 100644
index 00000000..7daa5a0f
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json
@@ -0,0 +1,3 @@
+{
+ "OFPGetAsyncRequest": {}
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json
new file mode 100644
index 00000000..62b37b4d
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json
new file mode 100644
index 00000000..06fe51f4
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json
@@ -0,0 +1,3 @@
+{
+ "OFPGetConfigRequest": {}
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json
new file mode 100644
index 00000000..f059f994
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json
new file mode 100644
index 00000000..edba5dc5
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json
@@ -0,0 +1,6 @@
+{
+ "OFPGroupFeaturesStatsRequest": {
+ "flags": 0,
+ "type": 8
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json
new file mode 100644
index 00000000..cb979e54
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json
new file mode 100644
index 00000000..b200a81c
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json
new file mode 100644
index 00000000..d03ff84b
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json
@@ -0,0 +1,20 @@
+{
+ "OFPHello": {
+ "elements": [
+ {
+ "OFPHelloElemVersionBitmap": {
+ "length": 8,
+ "type": 1,
+ "versions": [
+ 1,
+ 2,
+ 3,
+ 9,
+ 10,
+ 30
+ ]
+ }
+ }
+ ]
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json
new file mode 100644
index 00000000..4ea5bfcf
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json
new file mode 100644
index 00000000..fdc1adc9
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json
new file mode 100644
index 00000000..e3f6918f
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json
new file mode 100644
index 00000000..7363a342
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json
@@ -0,0 +1,6 @@
+{
+ "OFPMeterFeaturesStatsRequest": {
+ "flags": 0,
+ "type": 11
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json
new file mode 100644
index 00000000..eba4540a
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json
new file mode 100644
index 00000000..1bb4b39e
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json
new file mode 100644
index 00000000..8d45799b
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json
new file mode 100644
index 00000000..c281c0f8
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json
new file mode 100644
index 00000000..a255b9dd
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json
new file mode 100644
index 00000000..4ea41742
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json
new file mode 100644
index 00000000..5228710d
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json
new file mode 100644
index 00000000..b273ac22
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json
new file mode 100644
index 00000000..26c8f7d5
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json
new file mode 100644
index 00000000..2c190977
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json
new file mode 100644
index 00000000..7a12acc3
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json
@@ -0,0 +1,8 @@
+{
+ "OFPQueueStatsRequest": {
+ "flags": 0,
+ "port_no": 4294967295,
+ "queue_id": 4294967295,
+ "type": 5
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json
new file mode 100644
index 00000000..81b09f13
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json
@@ -0,0 +1,62 @@
+{
+ "OFPRequestForward": {
+ "request": {
+ "OFPGroupMod": {
+ "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"
+ }
+ }
+ }
+ }
+ ],
+ "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": 0,
+ "group_id": 1,
+ "type": 0
+ }
+ }
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json
new file mode 100644
index 00000000..08e46df3
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json
new file mode 100644
index 00000000..0802c14e
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json
new file mode 100644
index 00000000..cd5398b7
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json
new file mode 100644
index 00000000..1f3d7142
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json
new file mode 100644
index 00000000..f5a4cde0
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json
@@ -0,0 +1,6 @@
+{
+ "OFPTableDescStatsRequest": {
+ "flags": 0,
+ "type": 14
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json
new file mode 100644
index 00000000..97acd144
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json
new file mode 100644
index 00000000..94801adb
--- /dev/null
+++ b/ryu/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/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json
new file mode 100644
index 00000000..1f965d77
--- /dev/null
+++ b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json
@@ -0,0 +1,6 @@
+{
+ "OFPTableStatsRequest": {
+ "flags": 0,
+ "type": 3
+ }
+}
diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json
new file mode 100644
index 00000000..fde5fb77
--- /dev/null
+++ b/ryu/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
+ }
+ }
+ }
+}