openflow_input: add bsn_gentable extension and tests
See the documentation in openflow_input/bsn_gentable.
diff --git a/test_data/of13/bsn_gentable_desc_stats_reply.data b/test_data/of13/bsn_gentable_desc_stats_reply.data
new file mode 100644
index 0000000..52e627a
--- /dev/null
+++ b/test_data/of13/bsn_gentable_desc_stats_reply.data
@@ -0,0 +1,76 @@
+-- binary
+04 13 # version, type
+00 68 # length
+12 34 56 78 # xid
+ff ff # stats_type
+00 00 # flags
+00 00 00 00 # pad
+00 5c 16 c7 # experimenter
+00 00 00 04 # subtype
+
+# entries[0]
+00 28 # length
+00 00 # table id
+74 61 62 6c 65 20 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # name
+00 00 00 20 # buckets_size
+
+# entries[1]
+00 28 # length
+00 01 # table id
+74 61 62 6c 65 20 31 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e # name
+00 00 00 40 # buckets_size
+-- python
+ofp.message.bsn_gentable_desc_stats_reply(
+ xid=0x12345678,
+ entries=[
+ ofp.bsn_gentable_desc_stats_entry(
+ table_id=0,
+ name="table 0",
+ buckets_size=32),
+ ofp.bsn_gentable_desc_stats_entry(
+ table_id=1,
+ name="table 1".ljust(32, '.'),
+ buckets_size=64),
+ ])
+-- java
+builder.setXid(0x12345678)
+ .setEntries(
+ ImmutableList.<OFBsnGentableDescStatsEntry>of(
+ factory.buildBsnGentableDescStatsEntry()
+ .setTableId(0)
+ .setName("table 0")
+ .setBucketsSize(32)
+ .build(),
+ factory.buildBsnGentableDescStatsEntry()
+ .setTableId(1)
+ .setName("table 1.........................")
+ .setBucketsSize(64)
+ .build()
+ )
+ )
+-- c
+obj = of_bsn_gentable_desc_stats_reply_new(OF_VERSION_1_3);
+of_bsn_gentable_desc_stats_reply_xid_set(obj, 0x12345678);
+{
+ of_object_t *list = of_list_bsn_gentable_desc_stats_entry_new(OF_VERSION_1_3);
+ {
+ of_table_name_t name = "table 0";
+ of_object_t *entry = of_bsn_gentable_desc_stats_entry_new(OF_VERSION_1_3);
+ of_bsn_gentable_desc_stats_entry_table_id_set(entry, 0);
+ of_bsn_gentable_desc_stats_entry_name_set(entry, name);
+ of_bsn_gentable_desc_stats_entry_buckets_size_set(entry, 32);
+ of_list_append(list, entry);
+ of_object_delete(entry);
+ }
+ {
+ of_table_name_t name = "table 1.........................";
+ of_object_t *entry = of_bsn_gentable_desc_stats_entry_new(OF_VERSION_1_3);
+ of_bsn_gentable_desc_stats_entry_table_id_set(entry, 1);
+ of_bsn_gentable_desc_stats_entry_name_set(entry, name);
+ of_bsn_gentable_desc_stats_entry_buckets_size_set(entry, 64);
+ of_list_append(list, entry);
+ of_object_delete(entry);
+ }
+ of_bsn_gentable_desc_stats_reply_entries_set(obj, list);
+ of_object_delete(list);
+}