Commit d8a33ac4 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller

[BRIDGE]: features change notification

Resend of earlier patch (no changes) from Catalin used to provide
device feature change notification.

Signed-off-by: Catalin BOIE <catab at umbrella.ro>
Acked-by: default avatarStephen Hemminger <shemminger@osdl.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 45b30105
...@@ -913,6 +913,7 @@ extern void dev_mc_discard(struct net_device *dev); ...@@ -913,6 +913,7 @@ extern void dev_mc_discard(struct net_device *dev);
extern void dev_set_promiscuity(struct net_device *dev, int inc); extern void dev_set_promiscuity(struct net_device *dev, int inc);
extern void dev_set_allmulti(struct net_device *dev, int inc); extern void dev_set_allmulti(struct net_device *dev, int inc);
extern void netdev_state_change(struct net_device *dev); extern void netdev_state_change(struct net_device *dev);
extern void netdev_features_change(struct net_device *dev);
/* Load a device via the kmod */ /* Load a device via the kmod */
extern void dev_load(const char *name); extern void dev_load(const char *name);
extern void dev_mcast_init(void); extern void dev_mcast_init(void);
......
...@@ -56,6 +56,7 @@ extern int notifier_call_chain(struct notifier_block **n, unsigned long val, voi ...@@ -56,6 +56,7 @@ extern int notifier_call_chain(struct notifier_block **n, unsigned long val, voi
#define NETDEV_CHANGEADDR 0x0008 #define NETDEV_CHANGEADDR 0x0008
#define NETDEV_GOING_DOWN 0x0009 #define NETDEV_GOING_DOWN 0x0009
#define NETDEV_CHANGENAME 0x000A #define NETDEV_CHANGENAME 0x000A
#define NETDEV_FEAT_CHANGE 0x000B
#define SYS_DOWN 0x0001 /* Notify of system down */ #define SYS_DOWN 0x0001 /* Notify of system down */
#define SYS_RESTART SYS_DOWN #define SYS_RESTART SYS_DOWN
......
...@@ -760,6 +760,18 @@ int dev_change_name(struct net_device *dev, char *newname) ...@@ -760,6 +760,18 @@ int dev_change_name(struct net_device *dev, char *newname)
return err; return err;
} }
/**
* netdev_features_change - device changes fatures
* @dev: device to cause notification
*
* Called to indicate a device has changed features.
*/
void netdev_features_change(struct net_device *dev)
{
notifier_call_chain(&netdev_chain, NETDEV_FEAT_CHANGE, dev);
}
EXPORT_SYMBOL(netdev_features_change);
/** /**
* netdev_state_change - device changes state * netdev_state_change - device changes state
* @dev: device to cause notification * @dev: device to cause notification
......
...@@ -682,6 +682,7 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -682,6 +682,7 @@ int dev_ethtool(struct ifreq *ifr)
void __user *useraddr = ifr->ifr_data; void __user *useraddr = ifr->ifr_data;
u32 ethcmd; u32 ethcmd;
int rc; int rc;
int old_features;
/* /*
* XXX: This can be pushed down into the ethtool_* handlers that * XXX: This can be pushed down into the ethtool_* handlers that
...@@ -703,6 +704,8 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -703,6 +704,8 @@ int dev_ethtool(struct ifreq *ifr)
if ((rc = dev->ethtool_ops->begin(dev)) < 0) if ((rc = dev->ethtool_ops->begin(dev)) < 0)
return rc; return rc;
old_features = dev->features;
switch (ethcmd) { switch (ethcmd) {
case ETHTOOL_GSET: case ETHTOOL_GSET:
rc = ethtool_get_settings(dev, useraddr); rc = ethtool_get_settings(dev, useraddr);
...@@ -712,7 +715,6 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -712,7 +715,6 @@ int dev_ethtool(struct ifreq *ifr)
break; break;
case ETHTOOL_GDRVINFO: case ETHTOOL_GDRVINFO:
rc = ethtool_get_drvinfo(dev, useraddr); rc = ethtool_get_drvinfo(dev, useraddr);
break; break;
case ETHTOOL_GREGS: case ETHTOOL_GREGS:
rc = ethtool_get_regs(dev, useraddr); rc = ethtool_get_regs(dev, useraddr);
...@@ -801,6 +803,10 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -801,6 +803,10 @@ int dev_ethtool(struct ifreq *ifr)
if(dev->ethtool_ops->complete) if(dev->ethtool_ops->complete)
dev->ethtool_ops->complete(dev); dev->ethtool_ops->complete(dev);
if (old_features != dev->features)
netdev_features_change(dev);
return rc; return rc;
ioctl: ioctl:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment