]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Fix fpm multipath encap addition 14835/head
authorDonald Sharp <sharpd@nvidia.com>
Fri, 17 Nov 2023 21:57:20 +0000 (16:57 -0500)
committerDonald Sharp <sharpd@nvidia.com>
Mon, 20 Nov 2023 14:47:31 +0000 (09:47 -0500)
The fpm code path in building a ecmp route for evpn has
a bug that caused it to not add the encap attribute to
the netlink message.  See #f0f7b285b99dbd971400d33feea007232c0bd4a9
for the single path case being fixed.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/rt_netlink.c

index 58116c656375507246730198f57a60b2679620bf..502b6be43ac035d4872c67ea1a0c523a6de977b0 100644 (file)
@@ -2475,6 +2475,16 @@ ssize_t netlink_route_multipath_msg_encode(int cmd, struct zebra_dplane_ctx *ctx
                                            tag))
                                        return 0;
 
+                               /*
+                                * Add encapsulation information when installing via
+                                * FPM.
+                                */
+                               if (fpm) {
+                                       if (!netlink_route_nexthop_encap(
+                                                   &req->n, datalen, nexthop))
+                                               return 0;
+                               }
+
                                if (!setsrc && src1) {
                                        if (p->family == AF_INET)
                                                src.ipv4 = src1->ipv4;
@@ -2488,23 +2498,6 @@ ssize_t netlink_route_multipath_msg_encode(int cmd, struct zebra_dplane_ctx *ctx
 
                nl_attr_nest_end(&req->n, nest);
 
-               /*
-                * Add encapsulation information when installing via
-                * FPM.
-                */
-               if (fpm) {
-                       for (ALL_NEXTHOPS_PTR(dplane_ctx_get_ng(ctx),
-                                             nexthop)) {
-                               if (CHECK_FLAG(nexthop->flags,
-                                              NEXTHOP_FLAG_RECURSIVE))
-                                       continue;
-                               if (!netlink_route_nexthop_encap(
-                                           &req->n, datalen, nexthop))
-                                       return 0;
-                       }
-               }
-
-
                if (setsrc) {
                        if (p->family == AF_INET) {
                                if (!nl_attr_put(&req->n, datalen, RTA_PREFSRC,