bridge: Add fdb dst check during fdb update
Current bridge fdb update code does not seem to update the port during fdb update. This patch adds a check for fdb dst (port) change during fdb update. Also rearranges the call to fdb_notify to send only one notification for create and update. Changelog: v2 - Change notify flag to bool Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
c39904a0ac
Коммит
b0a397fb35
|
@ -615,6 +615,7 @@ static int fdb_add_entry(struct net_bridge_port *source, const __u8 *addr,
|
|||
struct net_bridge *br = source->br;
|
||||
struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
|
||||
struct net_bridge_fdb_entry *fdb;
|
||||
bool modified = false;
|
||||
|
||||
fdb = fdb_find(head, addr, vid);
|
||||
if (fdb == NULL) {
|
||||
|
@ -624,10 +625,16 @@ static int fdb_add_entry(struct net_bridge_port *source, const __u8 *addr,
|
|||
fdb = fdb_create(head, source, addr, vid);
|
||||
if (!fdb)
|
||||
return -ENOMEM;
|
||||
fdb_notify(br, fdb, RTM_NEWNEIGH);
|
||||
|
||||
modified = true;
|
||||
} else {
|
||||
if (flags & NLM_F_EXCL)
|
||||
return -EEXIST;
|
||||
|
||||
if (fdb->dst != source) {
|
||||
fdb->dst = source;
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (fdb_to_nud(fdb) != state) {
|
||||
|
@ -639,7 +646,12 @@ static int fdb_add_entry(struct net_bridge_port *source, const __u8 *addr,
|
|||
} else
|
||||
fdb->is_local = fdb->is_static = 0;
|
||||
|
||||
fdb->updated = fdb->used = jiffies;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
fdb->used = jiffies;
|
||||
if (modified) {
|
||||
fdb->updated = jiffies;
|
||||
fdb_notify(br, fdb, RTM_NEWNEIGH);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче