]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: multipath number checks with NHG proto
authorStephen Worley <sworley@cumulusnetworks.com>
Wed, 22 Jul 2020 18:02:11 +0000 (14:02 -0400)
committerStephen Worley <sworley@cumulusnetworks.com>
Mon, 28 Sep 2020 16:41:00 +0000 (12:41 -0400)
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 <sworley@cumulusnetworks.com>
zebra/zapi_msg.c

index 21f40ce7c2a3df245e6a09edb4f9f883aa263dca..ae38b2955f704faa9860d9bdbb53a7f8f7924791 100644 (file)
@@ -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__);