diff options
Diffstat (limited to 'net/core/net-sysfs.c')
-rw-r--r-- | net/core/net-sysfs.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 99e7052d7323..af4dfbadf2a0 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c | |||
@@ -29,6 +29,7 @@ static const char fmt_hex[] = "%#x\n"; | |||
29 | static const char fmt_long_hex[] = "%#lx\n"; | 29 | static const char fmt_long_hex[] = "%#lx\n"; |
30 | static const char fmt_dec[] = "%d\n"; | 30 | static const char fmt_dec[] = "%d\n"; |
31 | static const char fmt_ulong[] = "%lu\n"; | 31 | static const char fmt_ulong[] = "%lu\n"; |
32 | static const char fmt_u64[] = "%llu\n"; | ||
32 | 33 | ||
33 | static inline int dev_isalive(const struct net_device *dev) | 34 | static inline int dev_isalive(const struct net_device *dev) |
34 | { | 35 | { |
@@ -94,6 +95,7 @@ static ssize_t netdev_store(struct device *dev, struct device_attribute *attr, | |||
94 | } | 95 | } |
95 | 96 | ||
96 | NETDEVICE_SHOW(dev_id, fmt_hex); | 97 | NETDEVICE_SHOW(dev_id, fmt_hex); |
98 | NETDEVICE_SHOW(addr_assign_type, fmt_dec); | ||
97 | NETDEVICE_SHOW(addr_len, fmt_dec); | 99 | NETDEVICE_SHOW(addr_len, fmt_dec); |
98 | NETDEVICE_SHOW(iflink, fmt_dec); | 100 | NETDEVICE_SHOW(iflink, fmt_dec); |
99 | NETDEVICE_SHOW(ifindex, fmt_dec); | 101 | NETDEVICE_SHOW(ifindex, fmt_dec); |
@@ -294,6 +296,7 @@ static ssize_t show_ifalias(struct device *dev, | |||
294 | } | 296 | } |
295 | 297 | ||
296 | static struct device_attribute net_class_attributes[] = { | 298 | static struct device_attribute net_class_attributes[] = { |
299 | __ATTR(addr_assign_type, S_IRUGO, show_addr_assign_type, NULL), | ||
297 | __ATTR(addr_len, S_IRUGO, show_addr_len, NULL), | 300 | __ATTR(addr_len, S_IRUGO, show_addr_len, NULL), |
298 | __ATTR(dev_id, S_IRUGO, show_dev_id, NULL), | 301 | __ATTR(dev_id, S_IRUGO, show_dev_id, NULL), |
299 | __ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias), | 302 | __ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias), |
@@ -324,14 +327,15 @@ static ssize_t netstat_show(const struct device *d, | |||
324 | struct net_device *dev = to_net_dev(d); | 327 | struct net_device *dev = to_net_dev(d); |
325 | ssize_t ret = -EINVAL; | 328 | ssize_t ret = -EINVAL; |
326 | 329 | ||
327 | WARN_ON(offset > sizeof(struct net_device_stats) || | 330 | WARN_ON(offset > sizeof(struct rtnl_link_stats64) || |
328 | offset % sizeof(unsigned long) != 0); | 331 | offset % sizeof(u64) != 0); |
329 | 332 | ||
330 | read_lock(&dev_base_lock); | 333 | read_lock(&dev_base_lock); |
331 | if (dev_isalive(dev)) { | 334 | if (dev_isalive(dev)) { |
332 | const struct net_device_stats *stats = dev_get_stats(dev); | 335 | struct rtnl_link_stats64 temp; |
333 | ret = sprintf(buf, fmt_ulong, | 336 | const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp); |
334 | *(unsigned long *)(((u8 *) stats) + offset)); | 337 | |
338 | ret = sprintf(buf, fmt_u64, *(u64 *)(((u8 *) stats) + offset)); | ||
335 | } | 339 | } |
336 | read_unlock(&dev_base_lock); | 340 | read_unlock(&dev_base_lock); |
337 | return ret; | 341 | return ret; |
@@ -343,7 +347,7 @@ static ssize_t show_##name(struct device *d, \ | |||
343 | struct device_attribute *attr, char *buf) \ | 347 | struct device_attribute *attr, char *buf) \ |
344 | { \ | 348 | { \ |
345 | return netstat_show(d, attr, buf, \ | 349 | return netstat_show(d, attr, buf, \ |
346 | offsetof(struct net_device_stats, name)); \ | 350 | offsetof(struct rtnl_link_stats64, name)); \ |
347 | } \ | 351 | } \ |
348 | static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) | 352 | static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) |
349 | 353 | ||
@@ -922,13 +926,12 @@ int netdev_class_create_file(struct class_attribute *class_attr) | |||
922 | { | 926 | { |
923 | return class_create_file(&net_class, class_attr); | 927 | return class_create_file(&net_class, class_attr); |
924 | } | 928 | } |
929 | EXPORT_SYMBOL(netdev_class_create_file); | ||
925 | 930 | ||
926 | void netdev_class_remove_file(struct class_attribute *class_attr) | 931 | void netdev_class_remove_file(struct class_attribute *class_attr) |
927 | { | 932 | { |
928 | class_remove_file(&net_class, class_attr); | 933 | class_remove_file(&net_class, class_attr); |
929 | } | 934 | } |
930 | |||
931 | EXPORT_SYMBOL(netdev_class_create_file); | ||
932 | EXPORT_SYMBOL(netdev_class_remove_file); | 935 | EXPORT_SYMBOL(netdev_class_remove_file); |
933 | 936 | ||
934 | int netdev_kobject_init(void) | 937 | int netdev_kobject_init(void) |