net: bridge: allow SW learn to take over HW fdb entries
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Thu, 23 Mar 2017 10:27:12 +0000 (12:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 24 Mar 2017 19:30:21 +0000 (12:30 -0700)
Allow to take over an entry which was previously learned via HW when it
shows up from a SW port. This is analogous to how HW takes over SW learned
entries already.

Suggested-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_fdb.c

index 6e08b7199dd7442acdbd4f85e5ef6315b121ca06..daebce89dba8815e8d4ef51e59a9a356df3d5a33 100644 (file)
@@ -594,6 +594,9 @@ void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
                                fdb->updated = now;
                        if (unlikely(added_by_user))
                                fdb->added_by_user = 1;
+                       /* Take over HW learned entry */
+                       if (unlikely(fdb->added_by_external_learn))
+                               fdb->added_by_external_learn = 0;
                        if (unlikely(fdb_modified))
                                fdb_notify(br, fdb, RTM_NEWNEIGH);
                }