loci: support bsn_gentable
diff --git a/c_gen/templates/loci_int.h b/c_gen/templates/loci_int.h
index 241cf7b..01ad4a8 100644
--- a/c_gen/templates/loci_int.h
+++ b/c_gen/templates/loci_int.h
@@ -277,4 +277,21 @@
((object_id) == OF_FLOW_DELETE_STRICT) || \
((object_id) == OF_FLOW_ADD))
+/**
+ * Macro to calculate variable offset of value member in of_bsn_gentable_entry_add
+ * @param obj An object of type of_bsn_gentable_entry_add_t
+ */
+
+#define _BSN_GENTABLE_ENTRY_ADD_VALUE_OFFSET(obj) \
+ (of_object_u16_get(obj, 18) + \
+ of_object_fixed_len[(obj)->version][OF_BSN_GENTABLE_ENTRY_ADD])
+
+#define _BSN_GENTABLE_ENTRY_DESC_STATS_ENTRY_VALUE_OFFSET(obj) \
+ (of_object_u16_get(obj, 2) + \
+ of_object_fixed_len[(obj)->version][OF_BSN_GENTABLE_ENTRY_DESC_STATS_ENTRY])
+
+#define _BSN_GENTABLE_ENTRY_STATS_ENTRY_STATS_OFFSET(obj) \
+ (of_object_u16_get(obj, 2) + \
+ of_object_fixed_len[(obj)->version][OF_BSN_GENTABLE_ENTRY_STATS_ENTRY])
+
#endif /* __LOCI_INT_H__ */
diff --git a/c_gen/templates/loci_show.h b/c_gen/templates/loci_show.h
index 8241f3e..1856ae5 100644
--- a/c_gen/templates/loci_show.h
+++ b/c_gen/templates/loci_show.h
@@ -375,5 +375,12 @@
#define LOCI_SHOW_u64_time_ms(writer, cookie, val) LOCI_SHOW_u64(writer, cookie, val)
#define LOCI_SHOW_desc_str_uri(writer, cookie, val) LOCI_SHOW_desc_str(writer, cookie, val)
#define LOCI_SHOW_u8_state(writer, cookie, val) LOCI_SHOW_u8(writer, cookie, val)
+#define LOCI_SHOW_u16_table_id(writer, cookie, val) LOCI_SHOW_u16(writer, cookie, val)
+#define LOCI_SHOW_u32_deleted_count(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
+#define LOCI_SHOW_u32_error_count(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
+#define LOCI_SHOW_checksum_128_checksum(writer, cookie, val) LOCI_SHOW_checksum_128(writer, cookie, val)
+#define LOCI_SHOW_checksum_128_checksum_mask(writer, cookie, val) LOCI_SHOW_checksum_128(writer, cookie, val)
+#define LOCI_SHOW_u32_buckets_size(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
+#define LOCI_SHOW_u32_entry_count(writer, cookie, val) LOCI_SHOW_u32(writer, cookie, val)
#endif /* _LOCI_SHOW_H_ */
diff --git a/c_gen/templates/of_type_maps.c b/c_gen/templates/of_type_maps.c
index 7310988..15b3816 100644
--- a/c_gen/templates/of_type_maps.c
+++ b/c_gen/templates/of_type_maps.c
@@ -446,6 +446,23 @@
ASSERT(*id != OF_OBJECT_INVALID);
}
+/**
+ * Get the object ID based on the wire buffer for a bsn_tlv object
+ * @param obj The object being referenced
+ * @param id Where to store the object ID
+ */
+
+void
+of_bsn_tlv_wire_object_id_get(of_object_t *obj, of_object_id_t *id)
+{
+ int wire_type;
+
+ of_tlv16_wire_type_get(obj, &wire_type);
+ ASSERT(wire_type >= 0 && wire_type < OF_BSN_TLV_ITEM_COUNT);
+ *id = of_bsn_tlv_type_to_id[obj->version][wire_type];
+ ASSERT(*id != OF_OBJECT_INVALID);
+}
+
/****************************************************************
* OXM type/length functions.
****************************************************************/
@@ -715,7 +732,12 @@
case OF_EXPERIMENTER_ID_BSN:
switch (subtype) {
case 1: return OF_BSN_LACP_STATS_REQUEST;
+ case 2: return OF_BSN_GENTABLE_ENTRY_DESC_STATS_REQUEST;
+ case 3: return OF_BSN_GENTABLE_ENTRY_STATS_REQUEST;
+ case 4: return OF_BSN_GENTABLE_DESC_STATS_REQUEST;
+ case 5: return OF_BSN_GENTABLE_BUCKET_STATS_REQUEST;
case 6: return OF_BSN_SWITCH_PIPELINE_STATS_REQUEST;
+ case 7: return OF_BSN_GENTABLE_STATS_REQUEST;
case 8: return OF_BSN_PORT_COUNTER_STATS_REQUEST;
case 9: return OF_BSN_VLAN_COUNTER_STATS_REQUEST;
}
@@ -730,7 +752,12 @@
case OF_EXPERIMENTER_ID_BSN:
switch (subtype) {
case 1: return OF_BSN_LACP_STATS_REPLY;
+ case 2: return OF_BSN_GENTABLE_ENTRY_DESC_STATS_REPLY;
+ case 3: return OF_BSN_GENTABLE_ENTRY_STATS_REPLY;
+ case 4: return OF_BSN_GENTABLE_DESC_STATS_REPLY;
+ case 5: return OF_BSN_GENTABLE_BUCKET_STATS_REPLY;
case 6: return OF_BSN_SWITCH_PIPELINE_STATS_REPLY;
+ case 7: return OF_BSN_GENTABLE_STATS_REPLY;
case 8: return OF_BSN_PORT_COUNTER_STATS_REPLY;
case 9: return OF_BSN_VLAN_COUNTER_STATS_REPLY;
}