summaryrefslogtreecommitdiffstats
path: root/src/vnet/mpls
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/mpls')
-rw-r--r--src/vnet/mpls/mpls.api5
-rw-r--r--src/vnet/mpls/mpls.c5
-rw-r--r--src/vnet/mpls/mpls.h40
-rw-r--r--src/vnet/mpls/mpls_api.c24
4 files changed, 46 insertions, 28 deletions
diff --git a/src/vnet/mpls/mpls.api b/src/vnet/mpls/mpls.api
index bb849998ab3..36488d0c7b9 100644
--- a/src/vnet/mpls/mpls.api
+++ b/src/vnet/mpls/mpls.api
@@ -141,6 +141,9 @@ manual_endian manual_print define mpls_tunnel_details
@param context - sender context, to match reply w/ request
@param mt_table_id - The MPLS table-id the route is added in
@param mt_is_add - Is this a route add or delete
+ @param mt_name - A client provided name/tag for the table. If this
+ is not set by the client, then VPP will generate
+ something meaningfull.
*/
autoreply define mpls_table_add_del
{
@@ -148,6 +151,7 @@ autoreply define mpls_table_add_del
u32 context;
u32 mt_table_id;
u8 mt_is_add;
+ u8 mt_name[64];
};
/** \brief MPLS Route Add / del route
@@ -227,6 +231,7 @@ manual_endian manual_print define mpls_fib_details
{
u32 context;
u32 table_id;
+ u8 table_name[64];
u8 eos_bit;
u32 label;
u32 count;
diff --git a/src/vnet/mpls/mpls.c b/src/vnet/mpls/mpls.c
index 7bdfd8c7c8d..f8bbb8a955e 100644
--- a/src/vnet/mpls/mpls.c
+++ b/src/vnet/mpls/mpls.c
@@ -544,6 +544,7 @@ vnet_mpls_table_cmd (vlib_main_t * vm,
unformat_input_t _line_input, *line_input = &_line_input;
clib_error_t *error = NULL;
u32 table_id, is_add;
+ u8 *name = NULL;
is_add = 1;
table_id = ~0;
@@ -560,6 +561,8 @@ vnet_mpls_table_cmd (vlib_main_t * vm,
is_add = 0;
else if (unformat (line_input, "add"))
is_add = 1;
+ else if (unformat (line_input, "name %s", &name))
+ ;
else
{
error = unformat_parse_error (line_input);
@@ -581,7 +584,7 @@ vnet_mpls_table_cmd (vlib_main_t * vm,
{
if (is_add)
{
- mpls_table_create (table_id, 0);
+ mpls_table_create (table_id, 0, name);
}
else
{
diff --git a/src/vnet/mpls/mpls.h b/src/vnet/mpls/mpls.h
index 8dd92887c7d..cc3eeed035e 100644
--- a/src/vnet/mpls/mpls.h
+++ b/src/vnet/mpls/mpls.h
@@ -23,7 +23,8 @@
#include <vnet/fib/fib_node.h>
#include <vnet/adj/adj.h>
-typedef enum {
+typedef enum
+{
#define mpls_error(n,s) MPLS_ERROR_##n,
#include <vnet/mpls/error.def>
#undef mpls_error
@@ -34,10 +35,11 @@ typedef enum {
* @brief Definition of a callback for receiving MPLS interface state change
* notifications
*/
-typedef void (*mpls_interface_state_change_callback_t)(u32 sw_if_index,
- u32 is_enable);
+typedef void (*mpls_interface_state_change_callback_t) (u32 sw_if_index,
+ u32 is_enable);
-typedef struct {
+typedef struct
+{
/* MPLS FIB index for each software interface */
u32 *fib_index_by_sw_if_index;
@@ -55,12 +57,12 @@ typedef struct {
u8 output_feature_arc_index;
/* IP4 enabled count by software interface */
- u8 * mpls_enabled_by_sw_if_index;
+ u8 *mpls_enabled_by_sw_if_index;
} mpls_main_t;
extern mpls_main_t mpls_main;
-extern clib_error_t * mpls_feature_init(vlib_main_t * vm);
+extern clib_error_t *mpls_feature_init (vlib_main_t * vm);
format_function_t format_mpls_eos_bit;
format_function_t format_mpls_unicast_header_net_byte_order;
@@ -81,24 +83,28 @@ unformat_function_t unformat_mpls_header;
unformat_function_t unformat_pg_mpls_header;
int mpls_sw_interface_enable_disable (mpls_main_t * mm,
- u32 sw_if_index,
- u8 is_enable,
- u8 is_api);
+ u32 sw_if_index,
+ u8 is_enable, u8 is_api);
u8 mpls_sw_interface_is_enabled (u32 sw_if_index);
int mpls_fib_reset_labels (u32 fib_id);
-int
-mpls_dest_cmp(void * a1, void * a2);
+int mpls_dest_cmp (void *a1, void *a2);
-int
-mpls_fib_index_cmp(void * a1, void * a2);
+int mpls_fib_index_cmp (void *a1, void *a2);
-int
-mpls_label_cmp(void * a1, void * a2);
+int mpls_label_cmp (void *a1, void *a2);
-void mpls_table_create(u32 table_id, u8 is_api);
-void mpls_table_delete(u32 table_id, u8 is_api);
+void mpls_table_create (u32 table_id, u8 is_api, const u8 * name);
+void mpls_table_delete (u32 table_id, u8 is_api);
#endif /* included_vnet_mpls_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/mpls/mpls_api.c b/src/vnet/mpls/mpls_api.c
index 38f5b014344..988c2c98232 100644
--- a/src/vnet/mpls/mpls_api.c
+++ b/src/vnet/mpls/mpls_api.c
@@ -92,7 +92,7 @@ vl_api_mpls_table_add_del_t_handler (vl_api_mpls_table_add_del_t * mp)
vnm->api_errno = 0;
if (mp->mt_is_add)
- mpls_table_create (ntohl (mp->mt_table_id), 1);
+ mpls_table_create (ntohl (mp->mt_table_id), 1, mp->mt_name);
else
mpls_table_delete (ntohl (mp->mt_table_id), 1);
@@ -258,7 +258,7 @@ vl_api_mpls_route_add_del_t_handler (vl_api_mpls_route_add_del_t * mp)
}
void
-mpls_table_create (u32 table_id, u8 is_api)
+mpls_table_create (u32 table_id, u8 is_api, const u8 * name)
{
u32 fib_index;
@@ -276,10 +276,11 @@ mpls_table_create (u32 table_id, u8 is_api)
if (~0 == fib_index)
{
- fib_table_find_or_create_and_lock (FIB_PROTOCOL_MPLS,
- table_id,
- (is_api ?
- FIB_SOURCE_API : FIB_SOURCE_CLI));
+ fib_table_find_or_create_and_lock_w_name (FIB_PROTOCOL_MPLS,
+ table_id,
+ (is_api ?
+ FIB_SOURCE_API :
+ FIB_SOURCE_CLI), name);
}
}
@@ -424,7 +425,8 @@ vl_api_mpls_tunnel_dump_t_handler (vl_api_mpls_tunnel_dump_t * mp)
static void
send_mpls_fib_details (vpe_api_main_t * am,
unix_shared_memory_queue_t * q,
- u32 table_id, u32 label, u32 eos,
+ const fib_table_t * table,
+ u32 label, u32 eos,
fib_route_path_encode_t * api_rpaths, u32 context)
{
vl_api_mpls_fib_details_t *mp;
@@ -440,7 +442,9 @@ send_mpls_fib_details (vpe_api_main_t * am,
mp->_vl_msg_id = ntohs (VL_API_MPLS_FIB_DETAILS);
mp->context = context;
- mp->table_id = htonl (table_id);
+ mp->table_id = htonl (table->ft_table_id);
+ memcpy (mp->table_name, table->ft_desc,
+ clib_min (vec_len (table->ft_desc), sizeof (mp->table_name)));
mp->eos_bit = eos;
mp->label = htonl (label);
@@ -512,8 +516,8 @@ vl_api_mpls_fib_dump_t_handler (vl_api_mpls_fib_dump_t * mp)
api_rpaths = NULL;
fib_entry_encode (*lfeip, &api_rpaths);
send_mpls_fib_details (am, q,
- fib_table->ft_table_id,
- pfx.fp_label, pfx.fp_eos, api_rpaths, mp->context);
+ fib_table, pfx.fp_label,
+ pfx.fp_eos, api_rpaths, mp->context);
vec_free (api_rpaths);
}