diff options
author | Petr Machata <petrm@mellanox.com> | 2018-12-13 11:54:37 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-12-13 18:41:38 -0800 |
commit | ca935da7f41bb2186f2a007ae183b27f37c8f5a3 (patch) | |
tree | 69f29976519e26c45b6847d3846b912ff05ca095 /net/bridge/br_if.c | |
parent | d59cdf9475ad84d1f57cab1d162cf289702cfb15 (diff) | |
download | lwn-ca935da7f41bb2186f2a007ae183b27f37c8f5a3.tar.gz lwn-ca935da7f41bb2186f2a007ae183b27f37c8f5a3.zip |
net: bridge: Issue NETDEV_PRE_CHANGEADDR
When a port is attached to a bridge, the address of the bridge in
question may change as well. Even if it would not change at this
point (because the current bridge address is lower), it might end up
changing later as a result of detach of another port, which can't be
vetoed.
Therefore issue NETDEV_PRE_CHANGEADDR regardless of whether the address
will be used at this point or not, and make sure all involved parties
would agree with the change.
Signed-off-by: Petr Machata <petrm@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_if.c')
-rw-r--r-- | net/bridge/br_if.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 3b945d6369c4..41f0a696a65f 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -650,6 +650,15 @@ int br_add_if(struct net_bridge *br, struct net_device *dev, if (br_fdb_insert(br, p, dev->dev_addr, 0)) netdev_err(dev, "failed insert local address bridge forwarding table\n"); + if (br->dev->addr_assign_type != NET_ADDR_SET) { + /* Ask for permission to use this MAC address now, even if we + * don't end up choosing it below. + */ + err = dev_pre_changeaddr_notify(br->dev, dev->dev_addr, extack); + if (err) + goto err7; + } + err = nbp_vlan_init(p, extack); if (err) { netdev_err(dev, "failed to initialize vlan filtering on this port\n"); |