diff options
Diffstat (limited to 'net/bridge/br_notify.c')
| -rw-r--r-- | net/bridge/br_notify.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/net/bridge/br_notify.c b/net/bridge/br_notify.c index 763a3ec292e..404d4e14c6a 100644 --- a/net/bridge/br_notify.c +++ b/net/bridge/br_notify.c @@ -32,13 +32,15 @@ struct notifier_block br_device_notifier = { static int br_device_event(struct notifier_block *unused, unsigned long event, void *ptr) { struct net_device *dev = ptr; - struct net_bridge_port *p = dev->br_port; + struct net_bridge_port *p = br_port_get(dev); struct net_bridge *br; + int err; /* not a port of a bridge */ - if (p == NULL) + if (!br_port_exists(dev)) return NOTIFY_DONE; + p = br_port_get(dev); br = p->br; switch (event) { @@ -82,6 +84,16 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v case NETDEV_UNREGISTER: br_del_if(br, dev); break; + + case NETDEV_CHANGENAME: + err = br_sysfs_renameif(p); + if (err) + return notifier_from_errno(err); + break; + + case NETDEV_PRE_TYPE_CHANGE: + /* Forbid underlaying device to change its type. */ + return NOTIFY_BAD; } /* Events that may cause spanning tree to refresh */ |
