diff options
Diffstat (limited to 'src/vnet/mfib')
-rw-r--r-- | src/vnet/mfib/mfib_table.c | 44 | ||||
-rw-r--r-- | src/vnet/mfib/mfib_table.h | 25 | ||||
-rw-r--r-- | src/vnet/mfib/mfib_test.c | 2 |
3 files changed, 63 insertions, 8 deletions
diff --git a/src/vnet/mfib/mfib_table.c b/src/vnet/mfib/mfib_table.c index e5550adc8f7..838864ff7c0 100644 --- a/src/vnet/mfib/mfib_table.c +++ b/src/vnet/mfib/mfib_table.c @@ -422,10 +422,11 @@ mfib_table_find (fib_protocol_t proto, return (~0); } -u32 -mfib_table_find_or_create_and_lock (fib_protocol_t proto, - u32 table_id, - mfib_source_t src) +static u32 +mfib_table_find_or_create_and_lock_i (fib_protocol_t proto, + u32 table_id, + mfib_source_t src, + const u8 *name) { mfib_table_t *mfib_table; fib_node_index_t fi; @@ -445,13 +446,42 @@ mfib_table_find_or_create_and_lock (fib_protocol_t proto, mfib_table = mfib_table_get(fi, proto); - mfib_table->mft_desc = format(NULL, "%U-VRF:%d", - format_fib_protocol, proto, - table_id); + if (NULL == mfib_table->mft_desc) + { + if (name && name[0]) + { + mfib_table->mft_desc = format(NULL, "%s", name); + } + else + { + mfib_table->mft_desc = format(NULL, "%U-VRF:%d", + format_fib_protocol, proto, + table_id); + } + } return (fi); } +u32 +mfib_table_find_or_create_and_lock (fib_protocol_t proto, + u32 table_id, + mfib_source_t src) +{ + return (mfib_table_find_or_create_and_lock_i(proto, table_id, + src, NULL)); +} + +u32 +mfib_table_find_or_create_and_lock_w_name (fib_protocol_t proto, + u32 table_id, + mfib_source_t src, + const u8 *name) +{ + return (mfib_table_find_or_create_and_lock_i(proto, table_id, + src, name)); +} + /** * @brief Table flush context. Store the indicies of matching FIB entries * that need to be removed. diff --git a/src/vnet/mfib/mfib_table.h b/src/vnet/mfib/mfib_table.h index c6b0b0973a1..93f90dd5d1d 100644 --- a/src/vnet/mfib/mfib_table.h +++ b/src/vnet/mfib/mfib_table.h @@ -322,6 +322,31 @@ extern u32 mfib_table_find_or_create_and_lock(fib_protocol_t proto, u32 table_id, mfib_source_t source); +/** + * @brief + * Get the index of the FIB for a Table-ID. This DOES create the + * FIB if it does not exist. + * + * @paran proto + * The protocol of the FIB (and thus the entries therein) + * + * @param table-id + * The Table-ID + * + * @return fib_index + * The index of the FIB + * + * @param source + * The ID of the client/source. + * + * @param name + * The client is choosing the name they want the table to have + */ +extern u32 mfib_table_find_or_create_and_lock_w_name(fib_protocol_t proto, + u32 table_id, + mfib_source_t source, + const u8 *name); + /** * @brief diff --git a/src/vnet/mfib/mfib_test.c b/src/vnet/mfib/mfib_test.c index 3055844dd59..2562bc14b6a 100644 --- a/src/vnet/mfib/mfib_test.c +++ b/src/vnet/mfib/mfib_test.c @@ -1114,7 +1114,7 @@ mfib_test_i (fib_protocol_t PROTO, /* * MPLS enable an interface so we get the MPLS table created */ - mpls_table_create(MPLS_FIB_DEFAULT_TABLE_ID, FIB_SOURCE_API); + mpls_table_create(MPLS_FIB_DEFAULT_TABLE_ID, FIB_SOURCE_API, NULL); mpls_sw_interface_enable_disable(&mpls_main, tm->hw[0]->sw_if_index, 1, 0); |