summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/ila-plugin/ila/ila.c6
-rw-r--r--vnet/vnet/ip/lookup.h31
2 files changed, 26 insertions, 11 deletions
diff --git a/plugins/ila-plugin/ila/ila.c b/plugins/ila-plugin/ila/ila.c
index c0e6da11fac..a43aca13918 100644
--- a/plugins/ila-plugin/ila/ila.c
+++ b/plugins/ila-plugin/ila/ila.c
@@ -795,11 +795,11 @@ vlib_plugin_register (vlib_main_t * vm, vnet_plugin_handoff_t * h,
return error;
}
-u8 *ila_format_adjacency(u8 * s,
- struct ip_lookup_main_t * lm,
- ip_adjacency_t *adj)
+u8 *ila_format_adjacency(u8 * s, va_list * va)
{
ila_main_t *ilm = &ila_main;
+ __attribute((unused)) ip_lookup_main_t *lm = va_arg (*va, ip_lookup_main_t *);
+ ip_adjacency_t *adj = va_arg (*va, ip_adjacency_t *);
ila_adj_data_t * ad = (ila_adj_data_t *) & adj->opaque;
ila_entry_t *ie = pool_elt_at_index (ilm->entries, ad->entry_index);
return format(s, "idx:%d sir:%U", ad->entry_index, format_ip6_address, &ie->sir_address);
diff --git a/vnet/vnet/ip/lookup.h b/vnet/vnet/ip/lookup.h
index 808f78df807..2b682d27195 100644
--- a/vnet/vnet/ip/lookup.h
+++ b/vnet/vnet/ip/lookup.h
@@ -365,16 +365,31 @@ typedef struct {
u32 * config_index_by_sw_if_index;
} ip_config_main_t;
-//Function type used to register formatting of a custom adjacency formatting
-typedef u8 *(* ip_adjacency_format_fn)(u8 * s,
- struct ip_lookup_main_t * lm,
- ip_adjacency_t *adj);
-
+/**
+ * This structure is used to dynamically register a custom adjacency
+ * for ip lookup.
+ * Typically used with
+ * VNET_IP4_REGISTER_ADJACENCY or
+ * VNET_IP6_REGISTER_ADJACENCY macros.
+ */
typedef struct ip_adj_register_struct {
+ /** Name of the node for this registered adjacency. */
+ char *node_name;
+
+ /** Formatting function for the adjacency.
+ * Variadic arguments given to the function are:
+ * - struct ip_lookup_main_t *
+ * - ip_adjacency_t *adj
+ */
+ format_function_t *fn;
+
+ /**
+ * When the adjacency is registered, the ip-lookup next index will
+ * be written where this pointer points.
+ */
+ u32 *next_index;
+
struct ip_adj_register_struct *next;
- char *node_name; //Name of the node for this registered adjacency
- ip_adjacency_format_fn fn; //Formatting function of this adjacency
- u32 *next_index; //some place where the next index to be used will be put at init
} ip_adj_register_t;
typedef struct ip_lookup_main_t {