|
@@ -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);
|
|
|
}
|
|
@@ -854,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,
|