[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110804213605.31be6131@nehalam.ftrdhcpuser.net>
Date: Thu, 4 Aug 2011 21:36:05 -0700
From: Stephen Hemminger <shemminger@...tta.com>
To: Andrei Warkentin <andreiw@...orola.com>
Cc: netdev@...r.kernel.org
Subject: Re: [PATCHv3] Bridge: Always send NETDEV_CHANGEADDR up on br MAC
change.
On Thu, 4 Aug 2011 21:17:05 -0500
Andrei Warkentin <andreiw@...orola.com> wrote:
Half ok, half not.
> diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
> index cf09fe5..ef18070 100644
> --- a/net/bridge/br_device.c
> +++ b/net/bridge/br_device.c
> @@ -162,6 +162,7 @@ static int br_set_mac_address(struct net_device *dev, void *p)
> br->flags |= BR_SET_MAC_ADDR;
> spin_unlock_bh(&br->lock);
>
> + call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
> return 0;
> }
This is unnecessary since already done by dev_set_mac_address.
> @@ -492,10 +493,13 @@ int br_del_if(struct net_bridge *br, struct net_device *dev)
> del_nbp(p);
>
> spin_lock_bh(&br->lock);
> - br_stp_recalculate_bridge_id(br);
> + changed_addr = br_stp_recalculate_bridge_id(br);
> br_features_recompute(br);
> spin_unlock_bh(&br->lock);
>
> + if (changed_addr)
> + call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
> +
> return 0;
> }
>
Good, I forgot that case.
> diff --git a/net/bridge/br_notify.c b/net/bridge/br_notify.c
> index 404d4e1..651eac3 100644
> --- a/net/bridge/br_notify.c
> +++ b/net/bridge/br_notify.c
> @@ -34,6 +34,7 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
> struct net_device *dev = ptr;
> struct net_bridge_port *p = br_port_get(dev);
> struct net_bridge *br;
> + bool changed_addr;
> int err;
>
> /* not a port of a bridge */
> @@ -51,8 +52,11 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
> case NETDEV_CHANGEADDR:
> spin_lock_bh(&br->lock);
> br_fdb_changeaddr(p, dev->dev_addr);
> - br_stp_recalculate_bridge_id(br);
> + changed_addr = br_stp_recalculate_bridge_id(br);
> spin_unlock_bh(&br->lock);
> +
> + if (changed_addr)
> + call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
> break;
>
> case NETDEV_CHANGE:
This is also fine.
> iff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
> index c0990ba..4528e9a 100644
> --- a/net/bridge/br_stp_if.c
> +++ b/net/bridge/br_stp_if.c
> @@ -213,7 +213,7 @@ bool br_stp_recalculate_bridge_id(struct net_bridge *br)
>
> /* user has chosen a value so keep it */
> if (br->flags & BR_SET_MAC_ADDR)
> - return;
> + return false;
>
> list_for_each_entry(p, &br->port_list, list) {
> if (addr == br_mac_zero ||
This is already in net-next.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists