]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: When installing a new route always use REPLACE 3894/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 1 Mar 2019 18:56:12 +0000 (13:56 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 1 Mar 2019 18:56:12 +0000 (13:56 -0500)
When we install a new route into the kernel always use
REPLACE.  Else if the route is already there it can
be translated into an append with the flags we are
using.

This is especially true for the way we handle pbr
routes as that we are re-installing the same route
entry from pbr at the moment.

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

index 3868412b20bb074c81628f7315faed09153e2eef..18cf389d5e0001b83f2ade927c5d7dd29e3b4f63 100644 (file)
@@ -1466,10 +1466,9 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx)
        req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
        req.n.nlmsg_flags = NLM_F_CREATE | NLM_F_REQUEST;
 
-       if (dplane_ctx_get_op(ctx) == DPLANE_OP_ROUTE_UPDATE) {
-               if ((p->family == AF_INET) || v6_rr_semantics)
-                       req.n.nlmsg_flags |= NLM_F_REPLACE;
-       }
+       if ((cmd == RTM_NEWROUTE) &&
+           ((p->family == AF_INET) || v6_rr_semantics))
+               req.n.nlmsg_flags |= NLM_F_REPLACE;
 
        req.n.nlmsg_type = cmd;