Subject: [PATCH] etun: Implement device statistics From: Eric W. Biederman Date: 1137568759 -0700 The is a virtual device and I don't keep interesting statistics. However this makes a convienient way to return the ifindex of the paired device. --- drivers/net/etun.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 files changed, 38 insertions(+), 3 deletions(-) 4142d08e7f69944595e82fdce9a44853f438b01e diff --git a/drivers/net/etun.c b/drivers/net/etun.c index 74f2df8..15009a8 100644 --- a/drivers/net/etun.c +++ b/drivers/net/etun.c @@ -36,6 +36,13 @@ static DEFINE_SPINLOCK(etun_lock); static LIST_HEAD(etun_list); +#define ETUN_NUM_STATS 1 +static struct { + const char string[ETH_GSTRING_LEN]; +} ethtool_stats_keys[ETUN_NUM_STATS] = { + { "rx_ifindex" }, +}; + struct etun_info { struct list_head list; struct net_device *dev; @@ -115,10 +122,38 @@ static u32 etun_get_link(struct net_devi } +static void etun_get_strings(struct net_device *dev, u32 stringset, u8 *buf) +{ + switch(stringset) { + case ETH_SS_STATS: + memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); + break; + case ETH_SS_TEST: + default: + break; + } +} + +static int etun_get_stats_count(struct net_device *dev) +{ + return ETUN_NUM_STATS; +} + +static void etun_get_ethtool_stats(struct net_device *dev, + struct ethtool_stats *stats, u64 *data) +{ + struct etun_info *info = dev->priv; + + data[0] = info->rx_dev->ifindex; +} + static struct ethtool_ops etun_ethtool_ops = { - .get_settings = etun_get_settings, - .get_drvinfo = etun_get_drvinfo, - .get_link = etun_get_link, + .get_settings = etun_get_settings, + .get_drvinfo = etun_get_drvinfo, + .get_link = etun_get_link, + .get_strings = etun_get_strings, + .get_stats_count = etun_get_stats_count, + .get_ethtool_stats = etun_get_ethtool_stats, }; static int etun_open(struct net_device *dev) -- 1.0.GIT