net: bridge: allow to add externally learned entries from user-space
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Thu, 23 Mar 2017 10:27:13 +0000 (12:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 24 Mar 2017 19:30:21 +0000 (12:30 -0700)
The NTF_EXT_LEARNED flag was added for switchdev and externally learned
entries, but it can also be used for entries learned via a software
in user-space which requires dynamic entries that do not expire.
One such case that we have is with quagga and evpn which need dynamic
entries but also require to age them themselves.

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 daebce89dba8815e8d4ef51e59a9a356df3d5a33..5a40a87c4f4fff9cdfa8e54ba54fe47587dc97b0 100644 (file)
@@ -857,6 +857,8 @@ static int __br_fdb_add(struct ndmsg *ndm, struct net_bridge *br,
                br_fdb_update(br, p, addr, vid, true);
                rcu_read_unlock();
                local_bh_enable();
+       } else if (ndm->ndm_flags & NTF_EXT_LEARNED) {
+               err = br_fdb_external_learn_add(br, p, addr, vid);
        } else {
                spin_lock_bh(&br->hash_lock);
                err = fdb_add_entry(br, p, addr, ndm->ndm_state,