X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ffib%2Ffib_table.c;h=56c8f030fda298b570cfbc623f31c88dde981dfa;hb=af73eda08059f0168738d63c29ab09e0b8cf211c;hp=c37ac1dbd49145e0c798d1c59d1f2f483dae7a27;hpb=56f949b9d3d1c3ba6816169fff852a51bbe47a15;p=vpp.git diff --git a/src/vnet/fib/fib_table.c b/src/vnet/fib/fib_table.c index c37ac1dbd49..56c8f030fda 100644 --- a/src/vnet/fib/fib_table.c +++ b/src/vnet/fib/fib_table.c @@ -877,12 +877,20 @@ void fib_table_entry_delete_index (fib_node_index_t fib_entry_index, fib_source_t source) { - fib_prefix_t prefix; + const fib_prefix_t *prefix; - fib_entry_get_prefix(fib_entry_index, &prefix); + prefix = fib_entry_get_prefix(fib_entry_index); fib_table_entry_delete_i(fib_entry_get_fib_index(fib_entry_index), - fib_entry_index, &prefix, source); + fib_entry_index, prefix, source); +} + +u32 +fib_table_entry_get_stats_index (u32 fib_index, + const fib_prefix_t *prefix) +{ + return (fib_entry_get_stats_index( + fib_table_lookup_exact_match(fib_index, prefix))); } fib_node_index_t @@ -1140,7 +1148,6 @@ fib_table_create_and_lock (fib_protocol_t proto, fib_node_index_t fi; va_list ap; - va_start(ap, fmt); switch (proto) { @@ -1159,6 +1166,8 @@ fib_table_create_and_lock (fib_protocol_t proto, fib_table = fib_table_get(fi, proto); + va_start(ap, fmt); + fib_table->ft_desc = va_format(fib_table->ft_desc, fmt, &ap); va_end(ap); @@ -1235,15 +1244,6 @@ fib_table_unlock (u32 fib_index, fib_table->ft_locks[source]--; fib_table->ft_locks[FIB_TABLE_TOTAL_LOCKS]--; - if (0 == fib_table->ft_locks[source]) - { - /* - * The source no longer needs the table. flush any routes - * from it just in case - */ - fib_table_flush(fib_index, proto, source); - } - if (0 == fib_table->ft_locks[FIB_TABLE_TOTAL_LOCKS]) { /* @@ -1261,6 +1261,9 @@ fib_table_lock (u32 fib_index, fib_table_t *fib_table; fib_table = fib_table_get(fib_index, proto); + + ASSERT(fib_table->ft_locks[source] < (0xffff - 1)); + fib_table->ft_locks[source]++; fib_table->ft_locks[FIB_TABLE_TOTAL_LOCKS]++; }