From: Donald Sharp Date: Thu, 21 Feb 2019 21:10:56 +0000 (-0500) Subject: zebra: Re-evaluate the nexthop tracking if flags changed X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5eb3bf5d69daa220a848d9e6f771b7849f9b68e4;p=matthieu%2Ffrr.git zebra: Re-evaluate the nexthop tracking if flags changed Routing protocols are allowed ( and even encouraged ) to modify the flags that influence the nexthop tracking. As such when we modify the tracking of a nexthop to go from, say, connected force or not we must re-evaluate the nexthop and send the results up to the interested parties. Signed-off-by: Donald Sharp Signed-off-by: Donatas Abraitis --- diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index 1875fa5257..2cfd954567 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -1039,6 +1039,8 @@ static void zread_rnh_register(ZAPI_HANDLER_ARGS) uint8_t flags = 0; uint16_t type = cmd2type[hdr->command]; bool exist; + bool flag_changed = false; + uint8_t orig_flags; if (IS_ZEBRA_DEBUG_NHT) zlog_debug( @@ -1087,6 +1089,7 @@ static void zread_rnh_register(ZAPI_HANDLER_ARGS) if (!rnh) return; + orig_flags = rnh->flags; if (type == RNH_NEXTHOP_TYPE) { if (flags && !CHECK_FLAG(rnh->flags, ZEBRA_NHT_CONNECTED)) @@ -1104,9 +1107,12 @@ static void zread_rnh_register(ZAPI_HANDLER_ARGS) UNSET_FLAG(rnh->flags, ZEBRA_NHT_EXACT_MATCH); } + if (orig_flags != rnh->flags) + flag_changed = true; + zebra_add_rnh_client(rnh, client, type, zvrf_id(zvrf)); /* Anything not AF_INET/INET6 has been filtered out above */ - if (!exist) + if (!exist || flag_changed) zebra_evaluate_rnh(zvrf, p.family, 1, type, &p); }