]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: fix FPM abort for unreach/prohibit routes
authorDuncan Eastoe <duncan.eastoe@att.com>
Mon, 28 Sep 2020 11:51:19 +0000 (12:51 +0100)
committerDuncan Eastoe <duncan.eastoe@att.com>
Wed, 30 Sep 2020 09:22:40 +0000 (10:22 +0100)
b0e9567ed162da708f8d0b3a3caf87cd03b62e96 fixed an issue whereby
zebra would abort while building an update for a blackhole route.

The same issue, `assert(data_len)` failing in
`zfpm_build_route_updates()`, can be observed when building updates
for unreachable and prohibit routes.

To address this `netlink_route_info_fill()` is updated to not
indicate failure, due to lack of nexthops, for any blackhole routes.

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
(cherry picked from commit 94f7786375030e08063cdae5b4577edf26adb456)

zebra/zebra_fpm_netlink.c

index 3e11d53b1678091e46d34ad1c4533487e0b35693..2c07413638667467e09e572bfe47619bd869eaab 100644 (file)
@@ -335,10 +335,18 @@ static int netlink_route_info_fill(struct netlink_route_info *ri, int cmd,
                }
        }
 
-       /* If there is no useful nexthop then return. */
-       if (ri->rtm_type != RTN_BLACKHOLE && ri->num_nhs == 0) {
-               zfpm_debug("netlink_encode_route(): No useful nexthop.");
-               return 0;
+       if (ri->num_nhs == 0) {
+               switch (ri->rtm_type) {
+               case RTN_PROHIBIT:
+               case RTN_UNREACHABLE:
+               case RTN_BLACKHOLE:
+                       break;
+               default:
+                       /* If there is no useful nexthop then return. */
+                       zfpm_debug(
+                               "netlink_encode_route(): No useful nexthop.");
+                       return 0;
+               }
        }
 
        return 1;