vxlan: support NTF_USE refresh of fdb entries
authorRoopa Prabhu <roopa@cumulusnetworks.com>
Thu, 11 Oct 2018 19:35:13 +0000 (12:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Oct 2018 05:02:57 +0000 (22:02 -0700)
This makes use of NTF_USE in vxlan driver consistent
with bridge driver.

Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan.c

index fb0cdbba8d761efe3781a71db9834a4bbba5dcad..018406c4d944118c629ea72cd32d05062bc90602 100644 (file)
@@ -697,6 +697,7 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan,
                            __be16 port, __be32 src_vni, __be32 vni,
                            __u32 ifindex, __u8 ndm_flags)
 {
+       __u8 fdb_flags = (ndm_flags & ~NTF_USE);
        struct vxlan_rdst *rd = NULL;
        struct vxlan_fdb *f;
        int notify = 0;
@@ -714,8 +715,8 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan,
                        f->updated = jiffies;
                        notify = 1;
                }
-               if (f->flags != ndm_flags) {
-                       f->flags = ndm_flags;
+               if (f->flags != fdb_flags) {
+                       f->flags = fdb_flags;
                        f->updated = jiffies;
                        notify = 1;
                }
@@ -737,6 +738,9 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan,
                                return rc;
                        notify |= rc;
                }
+
+               if (ndm_flags & NTF_USE)
+                       f->used = jiffies;
        } else {
                if (!(flags & NLM_F_CREATE))
                        return -ENOENT;
@@ -748,7 +752,7 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan,
 
                netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip);
                rc = vxlan_fdb_create(vxlan, mac, ip, state, port, src_vni,
-                                     vni, ifindex, ndm_flags, &f);
+                                     vni, ifindex, fdb_flags, &f);
                if (rc < 0)
                        return rc;
                notify = 1;