test_data: add more tests for port_status messages
The port_desc becomes variable-length in OF 1.4, making it one of the few
variable-length embedded classes.
diff --git a/test_data/of13/port_status.data b/test_data/of13/port_status.data
index 10f7c16..e56705f 100644
--- a/test_data/of13/port_status.data
+++ b/test_data/of13/port_status.data
@@ -34,3 +34,24 @@
peer=ofp.OFPPF_100MB_FD,
curr_speed=10,
max_speed=20))
+-- c
+obj = of_port_status_new(OF_VERSION_1_3);
+of_port_status_xid_set(obj, 0x12345678);
+of_port_status_reason_set(obj, OF_PORT_CHANGE_REASON_MODIFY);
+{
+ of_object_t desc;
+ of_port_status_desc_bind(obj, &desc);
+ of_port_desc_port_no_set(&desc, 4);
+ of_mac_addr_t hw_addr = { { 1, 2, 3, 4, 5, 6 } };
+ of_port_desc_hw_addr_set(&desc, hw_addr);
+ of_port_name_t name = "foo";
+ of_port_desc_name_set(&desc, name);
+ of_port_desc_config_set(&desc, OF_PORT_CONFIG_FLAG_NO_FWD|OF_PORT_CONFIG_FLAG_NO_RECV);
+ of_port_desc_state_set(&desc, OF_PORT_STATE_FLAG_BLOCKED);
+ of_port_desc_curr_set(&desc, OF_PORT_FEATURE_FLAG_10MB_HD);
+ of_port_desc_advertised_set(&desc, OF_PORT_FEATURE_FLAG_10MB_FD);
+ of_port_desc_supported_set(&desc, OF_PORT_FEATURE_FLAG_100MB_HD);
+ of_port_desc_peer_set(&desc, OF_PORT_FEATURE_FLAG_100MB_FD);
+ of_port_desc_curr_speed_set(&desc, 10);
+ of_port_desc_max_speed_set(&desc, 20);
+}
diff --git a/test_data/of14/port_status.data b/test_data/of14/port_status.data
new file mode 100644
index 0000000..9fb5bde
--- /dev/null
+++ b/test_data/of14/port_status.data
@@ -0,0 +1,72 @@
+-- binary
+05 0c # version, type
+00 58 # length
+12 34 56 78 # xid
+02 # reason
+00 00 00 00 00 00 00 # pad
+00 00 00 04 # port_no
+00 48 # length
+00 00 # pad
+01 02 03 04 05 06 # hw_addr
+00 00 # pad
+66 6f 6f 00 00 00 00 00 # name
+00 00 00 00 00 00 00 00 # ...
+00 00 00 24 # config
+00 00 00 02 # state
+00 00 # properties[0].type (ethernet)
+00 20 # properties[0].length
+00 00 00 00 # pad
+00 00 00 01 # properties[0].curr
+00 00 00 02 # properties[0].advertised
+00 00 00 04 # properties[0].supported
+00 00 00 08 # properties[0].peer
+00 00 00 0a # properties[0].curr_speed
+00 00 00 14 # properties[0].max_speed
+-- python
+ofp.message.port_status(
+ xid=0x12345678,
+ reason=ofp.OFPPR_MODIFY,
+ desc=ofp.port_desc(
+ port_no=4,
+ hw_addr=[1,2,3,4,5,6],
+ name="foo",
+ config=ofp.OFPPC_NO_FWD|ofp.OFPPC_NO_RECV,
+ state=ofp.OFPPS_BLOCKED,
+ properties=[
+ ofp.port_desc_prop.ethernet(
+ curr=ofp.OFPPF_10MB_HD,
+ advertised=ofp.OFPPF_10MB_FD,
+ supported=ofp.OFPPF_100MB_HD,
+ peer=ofp.OFPPF_100MB_FD,
+ curr_speed=10,
+ max_speed=20)]))
+-- c
+obj = of_port_status_new(OF_VERSION_1_4);
+of_port_status_xid_set(obj, 0x12345678);
+of_port_status_reason_set(obj, OF_PORT_CHANGE_REASON_MODIFY);
+{
+ of_object_t desc;
+ of_port_status_desc_bind(obj, &desc);
+ of_port_desc_port_no_set(&desc, 4);
+ of_mac_addr_t hw_addr = { { 1, 2, 3, 4, 5, 6 } };
+ of_port_desc_hw_addr_set(&desc, hw_addr);
+ of_port_name_t name = "foo";
+ of_port_desc_name_set(&desc, name);
+ of_port_desc_config_set(&desc, OF_PORT_CONFIG_FLAG_NO_FWD|OF_PORT_CONFIG_FLAG_NO_RECV);
+ of_port_desc_state_set(&desc, OF_PORT_STATE_FLAG_BLOCKED);
+ {
+ of_list_port_desc_prop_t list;
+ of_port_desc_properties_bind(&desc, &list);
+ {
+ of_object_t *obj = of_port_desc_prop_ethernet_new(OF_VERSION_1_4);
+ of_port_desc_prop_ethernet_curr_set(obj, OF_PORT_FEATURE_FLAG_10MB_HD);
+ of_port_desc_prop_ethernet_advertised_set(obj, OF_PORT_FEATURE_FLAG_10MB_FD);
+ of_port_desc_prop_ethernet_supported_set(obj, OF_PORT_FEATURE_FLAG_100MB_HD);
+ of_port_desc_prop_ethernet_peer_set(obj, OF_PORT_FEATURE_FLAG_100MB_FD);
+ of_port_desc_prop_ethernet_curr_speed_set(obj, 10);
+ of_port_desc_prop_ethernet_max_speed_set(obj, 20);
+ of_list_append(&list, obj);
+ of_object_delete(obj);
+ }
+ }
+}