Skip to content

Commit

Permalink
bridge: Add fdb dst check during fdb update
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
roopa authored and David S. Miller committed Apr 29, 2013
1 parent c39904a commit b0a397f
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions net/bridge/br_fdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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);
}

Expand Down

0 comments on commit b0a397f

Please sign in to comment.