--- a/drivers/leds/trigger/Kconfig +++ b/drivers/leds/trigger/Kconfig @@ -112,4 +112,11 @@ config LEDS_TRIGGER_MORSE tristate "LED Morse Trigger" depends on LEDS_TRIGGERS +config LEDS_TRIGGER_NETDEV + tristate "LED Netdev Trigger" + depends on NET && LEDS_TRIGGERS + help + This allows LEDs to be controlled by network device activity. + If unsure, say Y. + endif # LEDS_TRIGGERS --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -65,3 +65,4 @@ obj-$(CONFIG_LEDS_DAC124S085) += leds-d # LED Triggers obj-$(CONFIG_LEDS_TRIGGERS) += trigger/ obj-$(CONFIG_LEDS_TRIGGER_MORSE) += ledtrig-morse.o +obj-$(CONFIG_LEDS_TRIGGER_NETDEV) += ledtrig-netdev.o --- a/drivers/leds/ledtrig-netdev.c +++ b/drivers/leds/ledtrig-netdev.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -254,7 +253,7 @@ static int netdev_trig_notify(struct not unsigned long evt, void *dv) { - struct net_device *dev = dv; + struct net_device *dev = netdev_notifier_info_to_dev((struct netdev_notifier_info *) dv); struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier); if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER) @@ -294,8 +293,9 @@ done: static void netdev_trig_timer(unsigned long arg) { struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg; - const struct net_device_stats *dev_stats; + struct rtnl_link_stats64 *dev_stats; unsigned new_activity; + struct rtnl_link_stats64 temp; write_lock(&trigger_data->lock); @@ -305,7 +305,7 @@ static void netdev_trig_timer(unsigned l goto no_restart; } - dev_stats = dev_get_stats(trigger_data->net_dev); + dev_stats = dev_get_stats(trigger_data->net_dev, &temp); new_activity = ((trigger_data->mode & MODE_TX) ? dev_stats->tx_packets : 0) + ((trigger_data->mode & MODE_RX) ? dev_stats->rx_packets : 0);