]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: skip NDA_DST attr if NHG is present
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>
Tue, 27 Oct 2020 17:50:46 +0000 (10:50 -0700)
committerAnuradha Karuppiah <anuradhak@nvidia.com>
Tue, 1 Dec 2020 17:44:37 +0000 (09:44 -0800)
NHG and DST (VTEP-IP) are mutually exclusive attributes. If DST is
present the kernel ignores NHG.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
zebra/rt_netlink.c

index 3402edf467b3ec4d3b9358a49eabe73e68b883cb..b737208f4718f978e113947e1260332887ec3046 100644 (file)
@@ -2761,10 +2761,6 @@ static ssize_t netlink_neigh_update_msg_encode(
                        return 0;
        }
 
-       if (nhg_id) {
-               if (!nl_attr_put32(&req->n, datalen, NDA_NH_ID, nhg_id))
-                       return 0;
-       }
        if (nfy) {
                if (!nl_attr_put(&req->n, datalen, NDA_NOTIFY,
                                &nfy_flags, sizeof(nfy_flags)))
@@ -2777,9 +2773,16 @@ static ssize_t netlink_neigh_update_msg_encode(
                        return 0;
        }
 
-       ipa_len = IS_IPADDR_V4(ip) ? IPV4_MAX_BYTELEN : IPV6_MAX_BYTELEN;
-       if (!nl_attr_put(&req->n, datalen, NDA_DST, &ip->ip.addr, ipa_len))
-               return 0;
+       if (nhg_id) {
+               if (!nl_attr_put32(&req->n, datalen, NDA_NH_ID, nhg_id))
+                       return 0;
+       } else {
+               ipa_len =
+                       IS_IPADDR_V4(ip) ? IPV4_MAX_BYTELEN : IPV6_MAX_BYTELEN;
+               if (!nl_attr_put(&req->n, datalen, NDA_DST, &ip->ip.addr,
+                                ipa_len))
+                       return 0;
+       }
 
        if (op == DPLANE_OP_MAC_INSTALL || op == DPLANE_OP_MAC_DELETE) {
                vlanid_t vid = dplane_ctx_mac_get_vlan(ctx);