Skip to content

Commit

Permalink
[BRIDGE]: features change notification
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Stephen Hemminger authored and David S. Miller committed May 29, 2005
1 parent 45b3010 commit d8a33ac
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions include/linux/notifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 7 additions & 1 deletion net/core/ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit d8a33ac

Please sign in to comment.