]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: determine src when using nexthop objects 6136/head
authorStephen Worley <sworley@cumulusnetworks.com>
Tue, 24 Mar 2020 21:32:21 +0000 (17:32 -0400)
committerStephen Worley <sworley@cumulusnetworks.com>
Thu, 2 Apr 2020 14:59:50 +0000 (10:59 -0400)
Determine src based on nexthop data even when we are using
kernel nexthop objects.

Before, we were entirely skipping this step and just sending the
nexthop ID, ignoring src determination.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
(cherry picked from commit d8bfd8dc9a899f841967257a6b5f30910fdc17c8)

zebra/rt_netlink.c

index dcaf2155f01f637af7a654f1290fd141757a99c2..ee8ef6558f961a8e57db8e4a5882ad6749d5b0d0 100644 (file)
@@ -1666,6 +1666,23 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx)
                /* Kernel supports nexthop objects */
                addattr32(&req.n, sizeof(req), RTA_NH_ID,
                          dplane_ctx_get_nhe_id(ctx));
+
+               /* Have to determine src still */
+               for (ALL_NEXTHOPS_PTR(dplane_ctx_get_ng(ctx), nexthop)) {
+                       if (setsrc)
+                               break;
+
+                       setsrc = nexthop_set_src(nexthop, family, &src);
+               }
+
+               if (setsrc) {
+                       if (family == AF_INET)
+                               addattr_l(&req.n, sizeof(req), RTA_PREFSRC,
+                                         &src.ipv4, bytelen);
+                       else if (family == AF_INET6)
+                               addattr_l(&req.n, sizeof(req), RTA_PREFSRC,
+                                         &src.ipv6, bytelen);
+               }
                goto skip;
        }