diff -uNr -X linux-2.6.15/Documentation/dontdiff linux-2.6.15/net/core/dev.c linux-2.6.15.4/net/core/dev.c --- linux-2.6.15/net/core/dev.c 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/net/core/dev.c 2006-02-21 20:14:27.000000000 +0100 @@ -104,6 +104,7 @@ #include #include #include +#include #include #include #include @@ -742,6 +743,34 @@ } /** + * netdev_uevent - notify userspace of netdev events + * @dev: device + * @event: event for device + * + * Called to notify userspace of (de-)registering and status events + * of netdevices + */ +static inline void +netdev_uevent(struct net_device *dev, int event) +{ + kobject_action_t action = 0; + + switch (event) { + case NETDEV_CHANGE: + action = netif_carrier_ok (dev) ? KOBJ_ONLINE : KOBJ_OFFLINE; + break; + case NETDEV_REGISTER: + action = KOBJ_ADD; + break; + case NETDEV_UNREGISTER: + action = KOBJ_REMOVE; + break; + } + if (action) + kobject_uevent (&dev->class_dev.kobj, action, NULL); +} + +/** * netdev_features_change - device changes fatures * @dev: device to cause notification * @@ -765,6 +794,7 @@ { if (dev->flags & IFF_UP) { notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev); + netdev_uevent(dev, NETDEV_CHANGE); rtmsg_ifinfo(RTM_NEWLINK, dev, 0); } } @@ -2937,6 +2967,7 @@ if (err) printk(KERN_ERR "%s: failed sysfs registration (%d)\n", dev->name, err); + netdev_uevent (dev, NETDEV_REGISTER); dev->reg_state = NETREG_REGISTERED; break; @@ -3108,6 +3139,7 @@ this device. They should clean all the things. */ notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev); + netdev_uevent (dev, NETDEV_UNREGISTER); /* * Flush the multicast chain