[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: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
45b30105e7
commit
d8a33ac435
4 changed files with 21 additions and 1 deletions
|
@ -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_allmulti(struct net_device *dev, int inc);
|
||||
extern void netdev_state_change(struct net_device *dev);
|
||||
extern void netdev_features_change(struct net_device *dev);
|
||||
/* Load a device via the kmod */
|
||||
extern void dev_load(const char *name);
|
||||
extern void dev_mcast_init(void);
|
||||
|
|
|
@ -56,6 +56,7 @@ extern int notifier_call_chain(struct notifier_block **n, unsigned long val, voi
|
|||
#define NETDEV_CHANGEADDR 0x0008
|
||||
#define NETDEV_GOING_DOWN 0x0009
|
||||
#define NETDEV_CHANGENAME 0x000A
|
||||
#define NETDEV_FEAT_CHANGE 0x000B
|
||||
|
||||
#define SYS_DOWN 0x0001 /* Notify of system down */
|
||||
#define SYS_RESTART SYS_DOWN
|
||||
|
|
|
@ -760,6 +760,18 @@ int dev_change_name(struct net_device *dev, char *newname)
|
|||
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
|
||||
* @dev: device to cause notification
|
||||
|
|
|
@ -682,6 +682,7 @@ int dev_ethtool(struct ifreq *ifr)
|
|||
void __user *useraddr = ifr->ifr_data;
|
||||
u32 ethcmd;
|
||||
int rc;
|
||||
int old_features;
|
||||
|
||||
/*
|
||||
* XXX: This can be pushed down into the ethtool_* handlers that
|
||||
|
@ -703,6 +704,8 @@ int dev_ethtool(struct ifreq *ifr)
|
|||
if ((rc = dev->ethtool_ops->begin(dev)) < 0)
|
||||
return rc;
|
||||
|
||||
old_features = dev->features;
|
||||
|
||||
switch (ethcmd) {
|
||||
case ETHTOOL_GSET:
|
||||
rc = ethtool_get_settings(dev, useraddr);
|
||||
|
@ -712,7 +715,6 @@ int dev_ethtool(struct ifreq *ifr)
|
|||
break;
|
||||
case ETHTOOL_GDRVINFO:
|
||||
rc = ethtool_get_drvinfo(dev, useraddr);
|
||||
|
||||
break;
|
||||
case ETHTOOL_GREGS:
|
||||
rc = ethtool_get_regs(dev, useraddr);
|
||||
|
@ -801,6 +803,10 @@ int dev_ethtool(struct ifreq *ifr)
|
|||
|
||||
if(dev->ethtool_ops->complete)
|
||||
dev->ethtool_ops->complete(dev);
|
||||
|
||||
if (old_features != dev->features)
|
||||
netdev_features_change(dev);
|
||||
|
||||
return rc;
|
||||
|
||||
ioctl:
|
||||
|
|
Loading…
Reference in a new issue