X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ffib%2Ffib_entry_src_adj.c;h=04c5c8dc1f78b8f0a0d7f6155ad3022be1da5c18;hb=89541992000433b743cbbe8cb396faab42bcf6ae;hp=9ea2b17e6b9ce1c74eea6fdb5a6c6a17994de17f;hpb=bf246dff1b4ea0792c0083f7e5495930b3b225f7;p=vpp.git diff --git a/src/vnet/fib/fib_entry_src_adj.c b/src/vnet/fib/fib_entry_src_adj.c index 9ea2b17e6b9..04c5c8dc1f7 100644 --- a/src/vnet/fib/fib_entry_src_adj.c +++ b/src/vnet/fib/fib_entry_src_adj.c @@ -201,10 +201,6 @@ fib_entry_src_adj_path_list_walk (fib_node_index_t pl_index, return (FIB_PATH_LIST_WALK_CONTINUE); } -/* - * Source activate. - * Called when the source is the new longer best source on the entry - */ static int fib_entry_src_adj_activate (fib_entry_src_t *src, const fib_entry_t *fib_entry) @@ -261,6 +257,28 @@ fib_entry_src_adj_activate (fib_entry_src_t *src, return (0); } +/* + * Source re-activate. + * Called when the source path lit has changed and the source is still + * the best source + */ +static int +fib_entry_src_adj_reactivate (fib_entry_src_t *src, + const fib_entry_t *fib_entry) +{ + fib_entry_src_path_list_walk_cxt_t ctx = { + .cover_itf = fib_entry_get_resolving_interface(src->adj.fesa_cover), + .flags = FIB_PATH_EXT_ADJ_FLAG_NONE, + .src = src, + }; + + fib_path_list_walk(src->fes_pl, + fib_entry_src_adj_path_list_walk, + &ctx); + + return (FIB_PATH_EXT_ADJ_FLAG_REFINES_COVER & ctx.flags); +} + /* * Source Deactivate. * Called when the source is no longer best source on the entry @@ -291,7 +309,7 @@ static u8* fib_entry_src_adj_format (fib_entry_src_t *src, u8* s) { - return (format(s, "cover:%d", src->adj.fesa_cover)); + return (format(s, " cover:%d", src->adj.fesa_cover)); } static void @@ -368,6 +386,7 @@ const static fib_entry_src_vft_t adj_src_vft = { .fesv_remove = fib_entry_src_adj_remove, .fesv_activate = fib_entry_src_adj_activate, .fesv_deactivate = fib_entry_src_adj_deactivate, + .fesv_reactivate = fib_entry_src_adj_reactivate, .fesv_format = fib_entry_src_adj_format, .fesv_installed = fib_entry_src_adj_installed, .fesv_cover_change = fib_entry_src_adj_cover_change,