Skip to content

Commit

Permalink
bridge: allow ext learned entries to change ports
Browse files Browse the repository at this point in the history
current code silently ignores change of port in the request
message. This patch makes sure the port is modified and
notification is sent to userspace.

Fixes: cf6b8e1 ("bridge: add API to notify bridge driver of learned FBD on offloaded device")
Signed-off-by: Nikolay Aleksandrov <[email protected]>
Signed-off-by: Roopa Prabhu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Nikolay Aleksandrov authored and davem330 committed Jul 4, 2017
1 parent e05a90e commit 7597b26
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions net/bridge/br_fdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1079,8 +1079,9 @@ void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p)
int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
const unsigned char *addr, u16 vid)
{
struct hlist_head *head;
struct net_bridge_fdb_entry *fdb;
struct hlist_head *head;
bool modified = false;
int err = 0;

spin_lock_bh(&br->hash_lock);
Expand All @@ -1095,14 +1096,25 @@ int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
}
fdb->added_by_external_learn = 1;
fdb_notify(br, fdb, RTM_NEWNEIGH);
} else if (fdb->added_by_external_learn) {
/* Refresh entry */
fdb->updated = fdb->used = jiffies;
} else if (!fdb->added_by_user) {
/* Take over SW learned entry */
fdb->added_by_external_learn = 1;
} else {
fdb->updated = jiffies;
fdb_notify(br, fdb, RTM_NEWNEIGH);

if (fdb->dst != p) {
fdb->dst = p;
modified = true;
}

if (fdb->added_by_external_learn) {
/* Refresh entry */
fdb->used = jiffies;
} else if (!fdb->added_by_user) {
/* Take over SW learned entry */
fdb->added_by_external_learn = 1;
modified = true;
}

if (modified)
fdb_notify(br, fdb, RTM_NEWNEIGH);
}

err_unlock:
Expand Down

0 comments on commit 7597b26

Please sign in to comment.