From: Stephen Worley Date: Wed, 22 Jul 2020 18:02:11 +0000 (-0400) Subject: zebra: multipath number checks with NHG proto X-Git-Tag: base_7.6~489^2~16 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e270f004ae4cc2d33108a0931d8c9db649ed47dd;p=matthieu%2Ffrr.git zebra: multipath number checks with NHG proto Get the multipath number checks working with proto-based NHG message decoding in zapi_msg.c Modify the function that checks this for routes to work without being passed a prefix as is the case with NHG creates. Signed-off-by: Stephen Worley --- diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index 21f40ce7c2..ae38b2955f 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -1445,11 +1445,14 @@ bool zserv_nexthop_num_warn(const char *caller, const struct prefix *p, if (nexthop_num > zrouter.multipath_num) { char buff[PREFIX2STR_BUFFER]; - prefix2str(p, buff, sizeof(buff)); + if (p) + prefix2str(p, buff, sizeof(buff)); + flog_warn( EC_ZEBRA_MORE_NH_THAN_MULTIPATH, "%s: Prefix %s has %d nexthops, but we can only use the first %d", - caller, buff, nexthop_num, zrouter.multipath_num); + caller, (p ? buff : "(NULL)"), nexthop_num, + zrouter.multipath_num); return true; } @@ -1767,21 +1770,17 @@ static void zread_nhg_reader(ZAPI_HANDLER_ARGS) size_t nhops, i; struct zapi_nexthop zapi_nexthops[MULTIPATH_NUM]; struct nexthop_group *nhg = NULL; - struct prefix p; uint16_t proto; struct nhg_hash_entry *nhe; - memset(&p, 0, sizeof(p)); - s = msg; STREAM_GETW(s, proto); STREAM_GETL(s, id); STREAM_GETW(s, nhops); - // TODO: Can't use this without a prefix. - // if (zserv_nexthop_num_warn(__func__, &p, nhops)) - // return; + if (zserv_nexthop_num_warn(__func__, NULL, nhops)) + return; if (nhops <= 0) { flog_warn(EC_ZEBRA_NEXTHOP_CREATION_FAILED, @@ -1800,8 +1799,8 @@ static void zread_nhg_reader(ZAPI_HANDLER_ARGS) } } - if (!zapi_read_nexthops(client, &p, zapi_nexthops, 0, 0, nhops, 0, &nhg, - NULL)) { + if (!zapi_read_nexthops(client, NULL, zapi_nexthops, 0, 0, nhops, 0, + &nhg, NULL)) { flog_warn(EC_ZEBRA_NEXTHOP_CREATION_FAILED, "%s: Nexthop Group Creation failed", __func__);