1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * net-sysfs.c - network device class and attributes
5 * Copyright (c) 2003 Stephen Hemminger <shemminger@osdl.org>
8 #include <linux/capability.h>
9 #include <linux/kernel.h>
10 #include <linux/netdevice.h>
11 #include <linux/if_arp.h>
12 #include <linux/slab.h>
13 #include <linux/sched/signal.h>
14 #include <linux/sched/isolation.h>
15 #include <linux/nsproxy.h>
17 #include <net/net_namespace.h>
18 #include <linux/rtnetlink.h>
19 #include <linux/vmalloc.h>
20 #include <linux/export.h>
21 #include <linux/jiffies.h>
22 #include <linux/pm_runtime.h>
24 #include <linux/of_net.h>
25 #include <linux/cpu.h>
27 #include "net-sysfs.h"
30 static const char fmt_hex
[] = "%#x\n";
31 static const char fmt_dec
[] = "%d\n";
32 static const char fmt_ulong
[] = "%lu\n";
33 static const char fmt_u64
[] = "%llu\n";
35 static inline int dev_isalive(const struct net_device
*dev
)
37 return dev
->reg_state
<= NETREG_REGISTERED
;
40 /* use same locking rules as GIF* ioctl's */
41 static ssize_t
netdev_show(const struct device
*dev
,
42 struct device_attribute
*attr
, char *buf
,
43 ssize_t (*format
)(const struct net_device
*, char *))
45 struct net_device
*ndev
= to_net_dev(dev
);
46 ssize_t ret
= -EINVAL
;
48 read_lock(&dev_base_lock
);
49 if (dev_isalive(ndev
))
50 ret
= (*format
)(ndev
, buf
);
51 read_unlock(&dev_base_lock
);
56 /* generate a show function for simple field */
57 #define NETDEVICE_SHOW(field, format_string) \
58 static ssize_t format_##field(const struct net_device *dev, char *buf) \
60 return sprintf(buf, format_string, dev->field); \
62 static ssize_t field##_show(struct device *dev, \
63 struct device_attribute *attr, char *buf) \
65 return netdev_show(dev, attr, buf, format_##field); \
68 #define NETDEVICE_SHOW_RO(field, format_string) \
69 NETDEVICE_SHOW(field, format_string); \
70 static DEVICE_ATTR_RO(field)
72 #define NETDEVICE_SHOW_RW(field, format_string) \
73 NETDEVICE_SHOW(field, format_string); \
74 static DEVICE_ATTR_RW(field)
76 /* use same locking and permission rules as SIF* ioctl's */
77 static ssize_t
netdev_store(struct device
*dev
, struct device_attribute
*attr
,
78 const char *buf
, size_t len
,
79 int (*set
)(struct net_device
*, unsigned long))
81 struct net_device
*netdev
= to_net_dev(dev
);
82 struct net
*net
= dev_net(netdev
);
86 if (!ns_capable(net
->user_ns
, CAP_NET_ADMIN
))
89 ret
= kstrtoul(buf
, 0, &new);
94 return restart_syscall();
96 if (dev_isalive(netdev
)) {
97 ret
= (*set
)(netdev
, new);
106 NETDEVICE_SHOW_RO(dev_id
, fmt_hex
);
107 NETDEVICE_SHOW_RO(dev_port
, fmt_dec
);
108 NETDEVICE_SHOW_RO(addr_assign_type
, fmt_dec
);
109 NETDEVICE_SHOW_RO(addr_len
, fmt_dec
);
110 NETDEVICE_SHOW_RO(ifindex
, fmt_dec
);
111 NETDEVICE_SHOW_RO(type
, fmt_dec
);
112 NETDEVICE_SHOW_RO(link_mode
, fmt_dec
);
114 static ssize_t
iflink_show(struct device
*dev
, struct device_attribute
*attr
,
117 struct net_device
*ndev
= to_net_dev(dev
);
119 return sprintf(buf
, fmt_dec
, dev_get_iflink(ndev
));
121 static DEVICE_ATTR_RO(iflink
);
123 static ssize_t
format_name_assign_type(const struct net_device
*dev
, char *buf
)
125 return sprintf(buf
, fmt_dec
, dev
->name_assign_type
);
128 static ssize_t
name_assign_type_show(struct device
*dev
,
129 struct device_attribute
*attr
,
132 struct net_device
*ndev
= to_net_dev(dev
);
133 ssize_t ret
= -EINVAL
;
135 if (ndev
->name_assign_type
!= NET_NAME_UNKNOWN
)
136 ret
= netdev_show(dev
, attr
, buf
, format_name_assign_type
);
140 static DEVICE_ATTR_RO(name_assign_type
);
142 /* use same locking rules as GIFHWADDR ioctl's */
143 static ssize_t
address_show(struct device
*dev
, struct device_attribute
*attr
,
146 struct net_device
*ndev
= to_net_dev(dev
);
147 ssize_t ret
= -EINVAL
;
149 read_lock(&dev_base_lock
);
150 if (dev_isalive(ndev
))
151 ret
= sysfs_format_mac(buf
, ndev
->dev_addr
, ndev
->addr_len
);
152 read_unlock(&dev_base_lock
);
155 static DEVICE_ATTR_RO(address
);
157 static ssize_t
broadcast_show(struct device
*dev
,
158 struct device_attribute
*attr
, char *buf
)
160 struct net_device
*ndev
= to_net_dev(dev
);
162 if (dev_isalive(ndev
))
163 return sysfs_format_mac(buf
, ndev
->broadcast
, ndev
->addr_len
);
166 static DEVICE_ATTR_RO(broadcast
);
168 static int change_carrier(struct net_device
*dev
, unsigned long new_carrier
)
170 if (!netif_running(dev
))
172 return dev_change_carrier(dev
, (bool)new_carrier
);
175 static ssize_t
carrier_store(struct device
*dev
, struct device_attribute
*attr
,
176 const char *buf
, size_t len
)
178 return netdev_store(dev
, attr
, buf
, len
, change_carrier
);
181 static ssize_t
carrier_show(struct device
*dev
,
182 struct device_attribute
*attr
, char *buf
)
184 struct net_device
*netdev
= to_net_dev(dev
);
186 if (netif_running(netdev
))
187 return sprintf(buf
, fmt_dec
, !!netif_carrier_ok(netdev
));
191 static DEVICE_ATTR_RW(carrier
);
193 static ssize_t
speed_show(struct device
*dev
,
194 struct device_attribute
*attr
, char *buf
)
196 struct net_device
*netdev
= to_net_dev(dev
);
200 return restart_syscall();
202 if (netif_running(netdev
)) {
203 struct ethtool_link_ksettings cmd
;
205 if (!__ethtool_get_link_ksettings(netdev
, &cmd
))
206 ret
= sprintf(buf
, fmt_dec
, cmd
.base
.speed
);
211 static DEVICE_ATTR_RO(speed
);
213 static ssize_t
duplex_show(struct device
*dev
,
214 struct device_attribute
*attr
, char *buf
)
216 struct net_device
*netdev
= to_net_dev(dev
);
220 return restart_syscall();
222 if (netif_running(netdev
)) {
223 struct ethtool_link_ksettings cmd
;
225 if (!__ethtool_get_link_ksettings(netdev
, &cmd
)) {
228 switch (cmd
.base
.duplex
) {
239 ret
= sprintf(buf
, "%s\n", duplex
);
245 static DEVICE_ATTR_RO(duplex
);
247 static ssize_t
testing_show(struct device
*dev
,
248 struct device_attribute
*attr
, char *buf
)
250 struct net_device
*netdev
= to_net_dev(dev
);
252 if (netif_running(netdev
))
253 return sprintf(buf
, fmt_dec
, !!netif_testing(netdev
));
257 static DEVICE_ATTR_RO(testing
);
259 static ssize_t
dormant_show(struct device
*dev
,
260 struct device_attribute
*attr
, char *buf
)
262 struct net_device
*netdev
= to_net_dev(dev
);
264 if (netif_running(netdev
))
265 return sprintf(buf
, fmt_dec
, !!netif_dormant(netdev
));
269 static DEVICE_ATTR_RO(dormant
);
271 static const char *const operstates
[] = {
273 "notpresent", /* currently unused */
281 static ssize_t
operstate_show(struct device
*dev
,
282 struct device_attribute
*attr
, char *buf
)
284 const struct net_device
*netdev
= to_net_dev(dev
);
285 unsigned char operstate
;
287 read_lock(&dev_base_lock
);
288 operstate
= netdev
->operstate
;
289 if (!netif_running(netdev
))
290 operstate
= IF_OPER_DOWN
;
291 read_unlock(&dev_base_lock
);
293 if (operstate
>= ARRAY_SIZE(operstates
))
294 return -EINVAL
; /* should not happen */
296 return sprintf(buf
, "%s\n", operstates
[operstate
]);
298 static DEVICE_ATTR_RO(operstate
);
300 static ssize_t
carrier_changes_show(struct device
*dev
,
301 struct device_attribute
*attr
,
304 struct net_device
*netdev
= to_net_dev(dev
);
306 return sprintf(buf
, fmt_dec
,
307 atomic_read(&netdev
->carrier_up_count
) +
308 atomic_read(&netdev
->carrier_down_count
));
310 static DEVICE_ATTR_RO(carrier_changes
);
312 static ssize_t
carrier_up_count_show(struct device
*dev
,
313 struct device_attribute
*attr
,
316 struct net_device
*netdev
= to_net_dev(dev
);
318 return sprintf(buf
, fmt_dec
, atomic_read(&netdev
->carrier_up_count
));
320 static DEVICE_ATTR_RO(carrier_up_count
);
322 static ssize_t
carrier_down_count_show(struct device
*dev
,
323 struct device_attribute
*attr
,
326 struct net_device
*netdev
= to_net_dev(dev
);
328 return sprintf(buf
, fmt_dec
, atomic_read(&netdev
->carrier_down_count
));
330 static DEVICE_ATTR_RO(carrier_down_count
);
332 /* read-write attributes */
334 static int change_mtu(struct net_device
*dev
, unsigned long new_mtu
)
336 return dev_set_mtu(dev
, (int)new_mtu
);
339 static ssize_t
mtu_store(struct device
*dev
, struct device_attribute
*attr
,
340 const char *buf
, size_t len
)
342 return netdev_store(dev
, attr
, buf
, len
, change_mtu
);
344 NETDEVICE_SHOW_RW(mtu
, fmt_dec
);
346 static int change_flags(struct net_device
*dev
, unsigned long new_flags
)
348 return dev_change_flags(dev
, (unsigned int)new_flags
, NULL
);
351 static ssize_t
flags_store(struct device
*dev
, struct device_attribute
*attr
,
352 const char *buf
, size_t len
)
354 return netdev_store(dev
, attr
, buf
, len
, change_flags
);
356 NETDEVICE_SHOW_RW(flags
, fmt_hex
);
358 static ssize_t
tx_queue_len_store(struct device
*dev
,
359 struct device_attribute
*attr
,
360 const char *buf
, size_t len
)
362 if (!capable(CAP_NET_ADMIN
))
365 return netdev_store(dev
, attr
, buf
, len
, dev_change_tx_queue_len
);
367 NETDEVICE_SHOW_RW(tx_queue_len
, fmt_dec
);
369 static int change_gro_flush_timeout(struct net_device
*dev
, unsigned long val
)
371 WRITE_ONCE(dev
->gro_flush_timeout
, val
);
375 static ssize_t
gro_flush_timeout_store(struct device
*dev
,
376 struct device_attribute
*attr
,
377 const char *buf
, size_t len
)
379 if (!capable(CAP_NET_ADMIN
))
382 return netdev_store(dev
, attr
, buf
, len
, change_gro_flush_timeout
);
384 NETDEVICE_SHOW_RW(gro_flush_timeout
, fmt_ulong
);
386 static int change_napi_defer_hard_irqs(struct net_device
*dev
, unsigned long val
)
388 WRITE_ONCE(dev
->napi_defer_hard_irqs
, val
);
392 static ssize_t
napi_defer_hard_irqs_store(struct device
*dev
,
393 struct device_attribute
*attr
,
394 const char *buf
, size_t len
)
396 if (!capable(CAP_NET_ADMIN
))
399 return netdev_store(dev
, attr
, buf
, len
, change_napi_defer_hard_irqs
);
401 NETDEVICE_SHOW_RW(napi_defer_hard_irqs
, fmt_dec
);
403 static ssize_t
ifalias_store(struct device
*dev
, struct device_attribute
*attr
,
404 const char *buf
, size_t len
)
406 struct net_device
*netdev
= to_net_dev(dev
);
407 struct net
*net
= dev_net(netdev
);
411 if (!ns_capable(net
->user_ns
, CAP_NET_ADMIN
))
414 /* ignore trailing newline */
415 if (len
> 0 && buf
[len
- 1] == '\n')
419 return restart_syscall();
421 if (dev_isalive(netdev
)) {
422 ret
= dev_set_alias(netdev
, buf
, count
);
426 netdev_state_change(netdev
);
434 static ssize_t
ifalias_show(struct device
*dev
,
435 struct device_attribute
*attr
, char *buf
)
437 const struct net_device
*netdev
= to_net_dev(dev
);
441 ret
= dev_get_alias(netdev
, tmp
, sizeof(tmp
));
443 ret
= sprintf(buf
, "%s\n", tmp
);
446 static DEVICE_ATTR_RW(ifalias
);
448 static int change_group(struct net_device
*dev
, unsigned long new_group
)
450 dev_set_group(dev
, (int)new_group
);
454 static ssize_t
group_store(struct device
*dev
, struct device_attribute
*attr
,
455 const char *buf
, size_t len
)
457 return netdev_store(dev
, attr
, buf
, len
, change_group
);
459 NETDEVICE_SHOW(group
, fmt_dec
);
460 static DEVICE_ATTR(netdev_group
, 0644, group_show
, group_store
);
462 static int change_proto_down(struct net_device
*dev
, unsigned long proto_down
)
464 return dev_change_proto_down(dev
, (bool)proto_down
);
467 static ssize_t
proto_down_store(struct device
*dev
,
468 struct device_attribute
*attr
,
469 const char *buf
, size_t len
)
471 return netdev_store(dev
, attr
, buf
, len
, change_proto_down
);
473 NETDEVICE_SHOW_RW(proto_down
, fmt_dec
);
475 static ssize_t
phys_port_id_show(struct device
*dev
,
476 struct device_attribute
*attr
, char *buf
)
478 struct net_device
*netdev
= to_net_dev(dev
);
479 ssize_t ret
= -EINVAL
;
482 return restart_syscall();
484 if (dev_isalive(netdev
)) {
485 struct netdev_phys_item_id ppid
;
487 ret
= dev_get_phys_port_id(netdev
, &ppid
);
489 ret
= sprintf(buf
, "%*phN\n", ppid
.id_len
, ppid
.id
);
495 static DEVICE_ATTR_RO(phys_port_id
);
497 static ssize_t
phys_port_name_show(struct device
*dev
,
498 struct device_attribute
*attr
, char *buf
)
500 struct net_device
*netdev
= to_net_dev(dev
);
501 ssize_t ret
= -EINVAL
;
504 return restart_syscall();
506 if (dev_isalive(netdev
)) {
509 ret
= dev_get_phys_port_name(netdev
, name
, sizeof(name
));
511 ret
= sprintf(buf
, "%s\n", name
);
517 static DEVICE_ATTR_RO(phys_port_name
);
519 static ssize_t
phys_switch_id_show(struct device
*dev
,
520 struct device_attribute
*attr
, char *buf
)
522 struct net_device
*netdev
= to_net_dev(dev
);
523 ssize_t ret
= -EINVAL
;
526 return restart_syscall();
528 if (dev_isalive(netdev
)) {
529 struct netdev_phys_item_id ppid
= { };
531 ret
= dev_get_port_parent_id(netdev
, &ppid
, false);
533 ret
= sprintf(buf
, "%*phN\n", ppid
.id_len
, ppid
.id
);
539 static DEVICE_ATTR_RO(phys_switch_id
);
541 static struct attribute
*net_class_attrs
[] __ro_after_init
= {
542 &dev_attr_netdev_group
.attr
,
544 &dev_attr_dev_id
.attr
,
545 &dev_attr_dev_port
.attr
,
546 &dev_attr_iflink
.attr
,
547 &dev_attr_ifindex
.attr
,
548 &dev_attr_name_assign_type
.attr
,
549 &dev_attr_addr_assign_type
.attr
,
550 &dev_attr_addr_len
.attr
,
551 &dev_attr_link_mode
.attr
,
552 &dev_attr_address
.attr
,
553 &dev_attr_broadcast
.attr
,
554 &dev_attr_speed
.attr
,
555 &dev_attr_duplex
.attr
,
556 &dev_attr_dormant
.attr
,
557 &dev_attr_testing
.attr
,
558 &dev_attr_operstate
.attr
,
559 &dev_attr_carrier_changes
.attr
,
560 &dev_attr_ifalias
.attr
,
561 &dev_attr_carrier
.attr
,
563 &dev_attr_flags
.attr
,
564 &dev_attr_tx_queue_len
.attr
,
565 &dev_attr_gro_flush_timeout
.attr
,
566 &dev_attr_napi_defer_hard_irqs
.attr
,
567 &dev_attr_phys_port_id
.attr
,
568 &dev_attr_phys_port_name
.attr
,
569 &dev_attr_phys_switch_id
.attr
,
570 &dev_attr_proto_down
.attr
,
571 &dev_attr_carrier_up_count
.attr
,
572 &dev_attr_carrier_down_count
.attr
,
575 ATTRIBUTE_GROUPS(net_class
);
577 /* Show a given an attribute in the statistics group */
578 static ssize_t
netstat_show(const struct device
*d
,
579 struct device_attribute
*attr
, char *buf
,
580 unsigned long offset
)
582 struct net_device
*dev
= to_net_dev(d
);
583 ssize_t ret
= -EINVAL
;
585 WARN_ON(offset
> sizeof(struct rtnl_link_stats64
) ||
586 offset
% sizeof(u64
) != 0);
588 read_lock(&dev_base_lock
);
589 if (dev_isalive(dev
)) {
590 struct rtnl_link_stats64 temp
;
591 const struct rtnl_link_stats64
*stats
= dev_get_stats(dev
, &temp
);
593 ret
= sprintf(buf
, fmt_u64
, *(u64
*)(((u8
*)stats
) + offset
));
595 read_unlock(&dev_base_lock
);
599 /* generate a read-only statistics attribute */
600 #define NETSTAT_ENTRY(name) \
601 static ssize_t name##_show(struct device *d, \
602 struct device_attribute *attr, char *buf) \
604 return netstat_show(d, attr, buf, \
605 offsetof(struct rtnl_link_stats64, name)); \
607 static DEVICE_ATTR_RO(name)
609 NETSTAT_ENTRY(rx_packets
);
610 NETSTAT_ENTRY(tx_packets
);
611 NETSTAT_ENTRY(rx_bytes
);
612 NETSTAT_ENTRY(tx_bytes
);
613 NETSTAT_ENTRY(rx_errors
);
614 NETSTAT_ENTRY(tx_errors
);
615 NETSTAT_ENTRY(rx_dropped
);
616 NETSTAT_ENTRY(tx_dropped
);
617 NETSTAT_ENTRY(multicast
);
618 NETSTAT_ENTRY(collisions
);
619 NETSTAT_ENTRY(rx_length_errors
);
620 NETSTAT_ENTRY(rx_over_errors
);
621 NETSTAT_ENTRY(rx_crc_errors
);
622 NETSTAT_ENTRY(rx_frame_errors
);
623 NETSTAT_ENTRY(rx_fifo_errors
);
624 NETSTAT_ENTRY(rx_missed_errors
);
625 NETSTAT_ENTRY(tx_aborted_errors
);
626 NETSTAT_ENTRY(tx_carrier_errors
);
627 NETSTAT_ENTRY(tx_fifo_errors
);
628 NETSTAT_ENTRY(tx_heartbeat_errors
);
629 NETSTAT_ENTRY(tx_window_errors
);
630 NETSTAT_ENTRY(rx_compressed
);
631 NETSTAT_ENTRY(tx_compressed
);
632 NETSTAT_ENTRY(rx_nohandler
);
634 static struct attribute
*netstat_attrs
[] __ro_after_init
= {
635 &dev_attr_rx_packets
.attr
,
636 &dev_attr_tx_packets
.attr
,
637 &dev_attr_rx_bytes
.attr
,
638 &dev_attr_tx_bytes
.attr
,
639 &dev_attr_rx_errors
.attr
,
640 &dev_attr_tx_errors
.attr
,
641 &dev_attr_rx_dropped
.attr
,
642 &dev_attr_tx_dropped
.attr
,
643 &dev_attr_multicast
.attr
,
644 &dev_attr_collisions
.attr
,
645 &dev_attr_rx_length_errors
.attr
,
646 &dev_attr_rx_over_errors
.attr
,
647 &dev_attr_rx_crc_errors
.attr
,
648 &dev_attr_rx_frame_errors
.attr
,
649 &dev_attr_rx_fifo_errors
.attr
,
650 &dev_attr_rx_missed_errors
.attr
,
651 &dev_attr_tx_aborted_errors
.attr
,
652 &dev_attr_tx_carrier_errors
.attr
,
653 &dev_attr_tx_fifo_errors
.attr
,
654 &dev_attr_tx_heartbeat_errors
.attr
,
655 &dev_attr_tx_window_errors
.attr
,
656 &dev_attr_rx_compressed
.attr
,
657 &dev_attr_tx_compressed
.attr
,
658 &dev_attr_rx_nohandler
.attr
,
662 static const struct attribute_group netstat_group
= {
663 .name
= "statistics",
664 .attrs
= netstat_attrs
,
667 #if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
668 static struct attribute
*wireless_attrs
[] = {
672 static const struct attribute_group wireless_group
= {
674 .attrs
= wireless_attrs
,
678 #else /* CONFIG_SYSFS */
679 #define net_class_groups NULL
680 #endif /* CONFIG_SYSFS */
683 #define to_rx_queue_attr(_attr) \
684 container_of(_attr, struct rx_queue_attribute, attr)
686 #define to_rx_queue(obj) container_of(obj, struct netdev_rx_queue, kobj)
688 static ssize_t
rx_queue_attr_show(struct kobject
*kobj
, struct attribute
*attr
,
691 const struct rx_queue_attribute
*attribute
= to_rx_queue_attr(attr
);
692 struct netdev_rx_queue
*queue
= to_rx_queue(kobj
);
694 if (!attribute
->show
)
697 return attribute
->show(queue
, buf
);
700 static ssize_t
rx_queue_attr_store(struct kobject
*kobj
, struct attribute
*attr
,
701 const char *buf
, size_t count
)
703 const struct rx_queue_attribute
*attribute
= to_rx_queue_attr(attr
);
704 struct netdev_rx_queue
*queue
= to_rx_queue(kobj
);
706 if (!attribute
->store
)
709 return attribute
->store(queue
, buf
, count
);
712 static const struct sysfs_ops rx_queue_sysfs_ops
= {
713 .show
= rx_queue_attr_show
,
714 .store
= rx_queue_attr_store
,
718 static ssize_t
show_rps_map(struct netdev_rx_queue
*queue
, char *buf
)
724 if (!zalloc_cpumask_var(&mask
, GFP_KERNEL
))
728 map
= rcu_dereference(queue
->rps_map
);
730 for (i
= 0; i
< map
->len
; i
++)
731 cpumask_set_cpu(map
->cpus
[i
], mask
);
733 len
= snprintf(buf
, PAGE_SIZE
, "%*pb\n", cpumask_pr_args(mask
));
735 free_cpumask_var(mask
);
737 return len
< PAGE_SIZE
? len
: -EINVAL
;
740 static ssize_t
store_rps_map(struct netdev_rx_queue
*queue
,
741 const char *buf
, size_t len
)
743 struct rps_map
*old_map
, *map
;
745 int err
, cpu
, i
, hk_flags
;
746 static DEFINE_MUTEX(rps_map_mutex
);
748 if (!capable(CAP_NET_ADMIN
))
751 if (!alloc_cpumask_var(&mask
, GFP_KERNEL
))
754 err
= bitmap_parse(buf
, len
, cpumask_bits(mask
), nr_cpumask_bits
);
756 free_cpumask_var(mask
);
760 if (!cpumask_empty(mask
)) {
761 hk_flags
= HK_FLAG_DOMAIN
| HK_FLAG_WQ
;
762 cpumask_and(mask
, mask
, housekeeping_cpumask(hk_flags
));
763 if (cpumask_empty(mask
)) {
764 free_cpumask_var(mask
);
769 map
= kzalloc(max_t(unsigned int,
770 RPS_MAP_SIZE(cpumask_weight(mask
)), L1_CACHE_BYTES
),
773 free_cpumask_var(mask
);
778 for_each_cpu_and(cpu
, mask
, cpu_online_mask
)
779 map
->cpus
[i
++] = cpu
;
788 mutex_lock(&rps_map_mutex
);
789 old_map
= rcu_dereference_protected(queue
->rps_map
,
790 mutex_is_locked(&rps_map_mutex
));
791 rcu_assign_pointer(queue
->rps_map
, map
);
794 static_branch_inc(&rps_needed
);
796 static_branch_dec(&rps_needed
);
798 mutex_unlock(&rps_map_mutex
);
801 kfree_rcu(old_map
, rcu
);
803 free_cpumask_var(mask
);
807 static ssize_t
show_rps_dev_flow_table_cnt(struct netdev_rx_queue
*queue
,
810 struct rps_dev_flow_table
*flow_table
;
811 unsigned long val
= 0;
814 flow_table
= rcu_dereference(queue
->rps_flow_table
);
816 val
= (unsigned long)flow_table
->mask
+ 1;
819 return sprintf(buf
, "%lu\n", val
);
822 static void rps_dev_flow_table_release(struct rcu_head
*rcu
)
824 struct rps_dev_flow_table
*table
= container_of(rcu
,
825 struct rps_dev_flow_table
, rcu
);
829 static ssize_t
store_rps_dev_flow_table_cnt(struct netdev_rx_queue
*queue
,
830 const char *buf
, size_t len
)
832 unsigned long mask
, count
;
833 struct rps_dev_flow_table
*table
, *old_table
;
834 static DEFINE_SPINLOCK(rps_dev_flow_lock
);
837 if (!capable(CAP_NET_ADMIN
))
840 rc
= kstrtoul(buf
, 0, &count
);
846 /* mask = roundup_pow_of_two(count) - 1;
847 * without overflows...
849 while ((mask
| (mask
>> 1)) != mask
)
851 /* On 64 bit arches, must check mask fits in table->mask (u32),
852 * and on 32bit arches, must check
853 * RPS_DEV_FLOW_TABLE_SIZE(mask + 1) doesn't overflow.
855 #if BITS_PER_LONG > 32
856 if (mask
> (unsigned long)(u32
)mask
)
859 if (mask
> (ULONG_MAX
- RPS_DEV_FLOW_TABLE_SIZE(1))
860 / sizeof(struct rps_dev_flow
)) {
861 /* Enforce a limit to prevent overflow */
865 table
= vmalloc(RPS_DEV_FLOW_TABLE_SIZE(mask
+ 1));
870 for (count
= 0; count
<= mask
; count
++)
871 table
->flows
[count
].cpu
= RPS_NO_CPU
;
876 spin_lock(&rps_dev_flow_lock
);
877 old_table
= rcu_dereference_protected(queue
->rps_flow_table
,
878 lockdep_is_held(&rps_dev_flow_lock
));
879 rcu_assign_pointer(queue
->rps_flow_table
, table
);
880 spin_unlock(&rps_dev_flow_lock
);
883 call_rcu(&old_table
->rcu
, rps_dev_flow_table_release
);
888 static struct rx_queue_attribute rps_cpus_attribute __ro_after_init
889 = __ATTR(rps_cpus
, 0644, show_rps_map
, store_rps_map
);
891 static struct rx_queue_attribute rps_dev_flow_table_cnt_attribute __ro_after_init
892 = __ATTR(rps_flow_cnt
, 0644,
893 show_rps_dev_flow_table_cnt
, store_rps_dev_flow_table_cnt
);
894 #endif /* CONFIG_RPS */
896 static struct attribute
*rx_queue_default_attrs
[] __ro_after_init
= {
898 &rps_cpus_attribute
.attr
,
899 &rps_dev_flow_table_cnt_attribute
.attr
,
903 ATTRIBUTE_GROUPS(rx_queue_default
);
905 static void rx_queue_release(struct kobject
*kobj
)
907 struct netdev_rx_queue
*queue
= to_rx_queue(kobj
);
910 struct rps_dev_flow_table
*flow_table
;
912 map
= rcu_dereference_protected(queue
->rps_map
, 1);
914 RCU_INIT_POINTER(queue
->rps_map
, NULL
);
918 flow_table
= rcu_dereference_protected(queue
->rps_flow_table
, 1);
920 RCU_INIT_POINTER(queue
->rps_flow_table
, NULL
);
921 call_rcu(&flow_table
->rcu
, rps_dev_flow_table_release
);
925 memset(kobj
, 0, sizeof(*kobj
));
929 static const void *rx_queue_namespace(struct kobject
*kobj
)
931 struct netdev_rx_queue
*queue
= to_rx_queue(kobj
);
932 struct device
*dev
= &queue
->dev
->dev
;
933 const void *ns
= NULL
;
935 if (dev
->class && dev
->class->ns_type
)
936 ns
= dev
->class->namespace(dev
);
941 static void rx_queue_get_ownership(struct kobject
*kobj
,
942 kuid_t
*uid
, kgid_t
*gid
)
944 const struct net
*net
= rx_queue_namespace(kobj
);
946 net_ns_get_ownership(net
, uid
, gid
);
949 static struct kobj_type rx_queue_ktype __ro_after_init
= {
950 .sysfs_ops
= &rx_queue_sysfs_ops
,
951 .release
= rx_queue_release
,
952 .default_groups
= rx_queue_default_groups
,
953 .namespace = rx_queue_namespace
,
954 .get_ownership
= rx_queue_get_ownership
,
957 static int rx_queue_add_kobject(struct net_device
*dev
, int index
)
959 struct netdev_rx_queue
*queue
= dev
->_rx
+ index
;
960 struct kobject
*kobj
= &queue
->kobj
;
963 /* Kobject_put later will trigger rx_queue_release call which
964 * decreases dev refcount: Take that reference here
966 dev_hold(queue
->dev
);
968 kobj
->kset
= dev
->queues_kset
;
969 error
= kobject_init_and_add(kobj
, &rx_queue_ktype
, NULL
,
974 if (dev
->sysfs_rx_queue_group
) {
975 error
= sysfs_create_group(kobj
, dev
->sysfs_rx_queue_group
);
980 kobject_uevent(kobj
, KOBJ_ADD
);
989 static int rx_queue_change_owner(struct net_device
*dev
, int index
, kuid_t kuid
,
992 struct netdev_rx_queue
*queue
= dev
->_rx
+ index
;
993 struct kobject
*kobj
= &queue
->kobj
;
996 error
= sysfs_change_owner(kobj
, kuid
, kgid
);
1000 if (dev
->sysfs_rx_queue_group
)
1001 error
= sysfs_group_change_owner(
1002 kobj
, dev
->sysfs_rx_queue_group
, kuid
, kgid
);
1006 #endif /* CONFIG_SYSFS */
1009 net_rx_queue_update_kobjects(struct net_device
*dev
, int old_num
, int new_num
)
1016 if (!dev
->sysfs_rx_queue_group
)
1019 for (i
= old_num
; i
< new_num
; i
++) {
1020 error
= rx_queue_add_kobject(dev
, i
);
1027 while (--i
>= new_num
) {
1028 struct kobject
*kobj
= &dev
->_rx
[i
].kobj
;
1030 if (!refcount_read(&dev_net(dev
)->ns
.count
))
1031 kobj
->uevent_suppress
= 1;
1032 if (dev
->sysfs_rx_queue_group
)
1033 sysfs_remove_group(kobj
, dev
->sysfs_rx_queue_group
);
1043 static int net_rx_queue_change_owner(struct net_device
*dev
, int num
,
1044 kuid_t kuid
, kgid_t kgid
)
1051 if (!dev
->sysfs_rx_queue_group
)
1054 for (i
= 0; i
< num
; i
++) {
1055 error
= rx_queue_change_owner(dev
, i
, kuid
, kgid
);
1068 * netdev_queue sysfs structures and functions.
1070 struct netdev_queue_attribute
{
1071 struct attribute attr
;
1072 ssize_t (*show
)(struct netdev_queue
*queue
, char *buf
);
1073 ssize_t (*store
)(struct netdev_queue
*queue
,
1074 const char *buf
, size_t len
);
1076 #define to_netdev_queue_attr(_attr) \
1077 container_of(_attr, struct netdev_queue_attribute, attr)
1079 #define to_netdev_queue(obj) container_of(obj, struct netdev_queue, kobj)
1081 static ssize_t
netdev_queue_attr_show(struct kobject
*kobj
,
1082 struct attribute
*attr
, char *buf
)
1084 const struct netdev_queue_attribute
*attribute
1085 = to_netdev_queue_attr(attr
);
1086 struct netdev_queue
*queue
= to_netdev_queue(kobj
);
1088 if (!attribute
->show
)
1091 return attribute
->show(queue
, buf
);
1094 static ssize_t
netdev_queue_attr_store(struct kobject
*kobj
,
1095 struct attribute
*attr
,
1096 const char *buf
, size_t count
)
1098 const struct netdev_queue_attribute
*attribute
1099 = to_netdev_queue_attr(attr
);
1100 struct netdev_queue
*queue
= to_netdev_queue(kobj
);
1102 if (!attribute
->store
)
1105 return attribute
->store(queue
, buf
, count
);
1108 static const struct sysfs_ops netdev_queue_sysfs_ops
= {
1109 .show
= netdev_queue_attr_show
,
1110 .store
= netdev_queue_attr_store
,
1113 static ssize_t
tx_timeout_show(struct netdev_queue
*queue
, char *buf
)
1115 unsigned long trans_timeout
;
1117 spin_lock_irq(&queue
->_xmit_lock
);
1118 trans_timeout
= queue
->trans_timeout
;
1119 spin_unlock_irq(&queue
->_xmit_lock
);
1121 return sprintf(buf
, fmt_ulong
, trans_timeout
);
1124 static unsigned int get_netdev_queue_index(struct netdev_queue
*queue
)
1126 struct net_device
*dev
= queue
->dev
;
1129 i
= queue
- dev
->_tx
;
1130 BUG_ON(i
>= dev
->num_tx_queues
);
1135 static ssize_t
traffic_class_show(struct netdev_queue
*queue
,
1138 struct net_device
*dev
= queue
->dev
;
1142 if (!netif_is_multiqueue(dev
))
1145 index
= get_netdev_queue_index(queue
);
1147 /* If queue belongs to subordinate dev use its TC mapping */
1148 dev
= netdev_get_tx_queue(dev
, index
)->sb_dev
? : dev
;
1150 tc
= netdev_txq_to_tc(dev
, index
);
1154 /* We can report the traffic class one of two ways:
1155 * Subordinate device traffic classes are reported with the traffic
1156 * class first, and then the subordinate class so for example TC0 on
1157 * subordinate device 2 will be reported as "0-2". If the queue
1158 * belongs to the root device it will be reported with just the
1159 * traffic class, so just "0" for TC 0 for example.
1161 return dev
->num_tc
< 0 ? sprintf(buf
, "%d%d\n", tc
, dev
->num_tc
) :
1162 sprintf(buf
, "%d\n", tc
);
1166 static ssize_t
tx_maxrate_show(struct netdev_queue
*queue
,
1169 return sprintf(buf
, "%lu\n", queue
->tx_maxrate
);
1172 static ssize_t
tx_maxrate_store(struct netdev_queue
*queue
,
1173 const char *buf
, size_t len
)
1175 struct net_device
*dev
= queue
->dev
;
1176 int err
, index
= get_netdev_queue_index(queue
);
1179 if (!capable(CAP_NET_ADMIN
))
1182 err
= kstrtou32(buf
, 10, &rate
);
1186 if (!rtnl_trylock())
1187 return restart_syscall();
1190 if (dev
->netdev_ops
->ndo_set_tx_maxrate
)
1191 err
= dev
->netdev_ops
->ndo_set_tx_maxrate(dev
, index
, rate
);
1195 queue
->tx_maxrate
= rate
;
1201 static struct netdev_queue_attribute queue_tx_maxrate __ro_after_init
1202 = __ATTR_RW(tx_maxrate
);
1205 static struct netdev_queue_attribute queue_trans_timeout __ro_after_init
1206 = __ATTR_RO(tx_timeout
);
1208 static struct netdev_queue_attribute queue_traffic_class __ro_after_init
1209 = __ATTR_RO(traffic_class
);
1213 * Byte queue limits sysfs structures and functions.
1215 static ssize_t
bql_show(char *buf
, unsigned int value
)
1217 return sprintf(buf
, "%u\n", value
);
1220 static ssize_t
bql_set(const char *buf
, const size_t count
,
1221 unsigned int *pvalue
)
1226 if (!strcmp(buf
, "max") || !strcmp(buf
, "max\n")) {
1227 value
= DQL_MAX_LIMIT
;
1229 err
= kstrtouint(buf
, 10, &value
);
1232 if (value
> DQL_MAX_LIMIT
)
1241 static ssize_t
bql_show_hold_time(struct netdev_queue
*queue
,
1244 struct dql
*dql
= &queue
->dql
;
1246 return sprintf(buf
, "%u\n", jiffies_to_msecs(dql
->slack_hold_time
));
1249 static ssize_t
bql_set_hold_time(struct netdev_queue
*queue
,
1250 const char *buf
, size_t len
)
1252 struct dql
*dql
= &queue
->dql
;
1256 err
= kstrtouint(buf
, 10, &value
);
1260 dql
->slack_hold_time
= msecs_to_jiffies(value
);
1265 static struct netdev_queue_attribute bql_hold_time_attribute __ro_after_init
1266 = __ATTR(hold_time
, 0644,
1267 bql_show_hold_time
, bql_set_hold_time
);
1269 static ssize_t
bql_show_inflight(struct netdev_queue
*queue
,
1272 struct dql
*dql
= &queue
->dql
;
1274 return sprintf(buf
, "%u\n", dql
->num_queued
- dql
->num_completed
);
1277 static struct netdev_queue_attribute bql_inflight_attribute __ro_after_init
=
1278 __ATTR(inflight
, 0444, bql_show_inflight
, NULL
);
1280 #define BQL_ATTR(NAME, FIELD) \
1281 static ssize_t bql_show_ ## NAME(struct netdev_queue *queue, \
1284 return bql_show(buf, queue->dql.FIELD); \
1287 static ssize_t bql_set_ ## NAME(struct netdev_queue *queue, \
1288 const char *buf, size_t len) \
1290 return bql_set(buf, len, &queue->dql.FIELD); \
1293 static struct netdev_queue_attribute bql_ ## NAME ## _attribute __ro_after_init \
1294 = __ATTR(NAME, 0644, \
1295 bql_show_ ## NAME, bql_set_ ## NAME)
1297 BQL_ATTR(limit
, limit
);
1298 BQL_ATTR(limit_max
, max_limit
);
1299 BQL_ATTR(limit_min
, min_limit
);
1301 static struct attribute
*dql_attrs
[] __ro_after_init
= {
1302 &bql_limit_attribute
.attr
,
1303 &bql_limit_max_attribute
.attr
,
1304 &bql_limit_min_attribute
.attr
,
1305 &bql_hold_time_attribute
.attr
,
1306 &bql_inflight_attribute
.attr
,
1310 static const struct attribute_group dql_group
= {
1311 .name
= "byte_queue_limits",
1314 #endif /* CONFIG_BQL */
1317 static ssize_t
xps_cpus_show(struct netdev_queue
*queue
,
1320 int cpu
, len
, ret
, num_tc
= 1, tc
= 0;
1321 struct net_device
*dev
= queue
->dev
;
1322 struct xps_dev_maps
*dev_maps
;
1324 unsigned long index
;
1326 if (!netif_is_multiqueue(dev
))
1329 index
= get_netdev_queue_index(queue
);
1331 if (!rtnl_trylock())
1332 return restart_syscall();
1335 /* Do not allow XPS on subordinate device directly */
1336 num_tc
= dev
->num_tc
;
1339 goto err_rtnl_unlock
;
1342 /* If queue belongs to subordinate dev use its map */
1343 dev
= netdev_get_tx_queue(dev
, index
)->sb_dev
? : dev
;
1345 tc
= netdev_txq_to_tc(dev
, index
);
1348 goto err_rtnl_unlock
;
1352 if (!zalloc_cpumask_var(&mask
, GFP_KERNEL
)) {
1354 goto err_rtnl_unlock
;
1358 dev_maps
= rcu_dereference(dev
->xps_cpus_map
);
1360 for_each_possible_cpu(cpu
) {
1361 int i
, tci
= cpu
* num_tc
+ tc
;
1362 struct xps_map
*map
;
1364 map
= rcu_dereference(dev_maps
->attr_map
[tci
]);
1368 for (i
= map
->len
; i
--;) {
1369 if (map
->queues
[i
] == index
) {
1370 cpumask_set_cpu(cpu
, mask
);
1380 len
= snprintf(buf
, PAGE_SIZE
, "%*pb\n", cpumask_pr_args(mask
));
1381 free_cpumask_var(mask
);
1382 return len
< PAGE_SIZE
? len
: -EINVAL
;
1389 static ssize_t
xps_cpus_store(struct netdev_queue
*queue
,
1390 const char *buf
, size_t len
)
1392 struct net_device
*dev
= queue
->dev
;
1393 unsigned long index
;
1397 if (!netif_is_multiqueue(dev
))
1400 if (!capable(CAP_NET_ADMIN
))
1403 if (!alloc_cpumask_var(&mask
, GFP_KERNEL
))
1406 index
= get_netdev_queue_index(queue
);
1408 err
= bitmap_parse(buf
, len
, cpumask_bits(mask
), nr_cpumask_bits
);
1410 free_cpumask_var(mask
);
1414 if (!rtnl_trylock()) {
1415 free_cpumask_var(mask
);
1416 return restart_syscall();
1419 err
= netif_set_xps_queue(dev
, mask
, index
);
1422 free_cpumask_var(mask
);
1427 static struct netdev_queue_attribute xps_cpus_attribute __ro_after_init
1428 = __ATTR_RW(xps_cpus
);
1430 static ssize_t
xps_rxqs_show(struct netdev_queue
*queue
, char *buf
)
1432 int j
, len
, ret
, num_tc
= 1, tc
= 0;
1433 struct net_device
*dev
= queue
->dev
;
1434 struct xps_dev_maps
*dev_maps
;
1435 unsigned long *mask
, index
;
1437 index
= get_netdev_queue_index(queue
);
1439 if (!rtnl_trylock())
1440 return restart_syscall();
1443 num_tc
= dev
->num_tc
;
1444 tc
= netdev_txq_to_tc(dev
, index
);
1447 goto err_rtnl_unlock
;
1450 mask
= bitmap_zalloc(dev
->num_rx_queues
, GFP_KERNEL
);
1453 goto err_rtnl_unlock
;
1457 dev_maps
= rcu_dereference(dev
->xps_rxqs_map
);
1461 for (j
= -1; j
= netif_attrmask_next(j
, NULL
, dev
->num_rx_queues
),
1462 j
< dev
->num_rx_queues
;) {
1463 int i
, tci
= j
* num_tc
+ tc
;
1464 struct xps_map
*map
;
1466 map
= rcu_dereference(dev_maps
->attr_map
[tci
]);
1470 for (i
= map
->len
; i
--;) {
1471 if (map
->queues
[i
] == index
) {
1482 len
= bitmap_print_to_pagebuf(false, buf
, mask
, dev
->num_rx_queues
);
1485 return len
< PAGE_SIZE
? len
: -EINVAL
;
1492 static ssize_t
xps_rxqs_store(struct netdev_queue
*queue
, const char *buf
,
1495 struct net_device
*dev
= queue
->dev
;
1496 struct net
*net
= dev_net(dev
);
1497 unsigned long *mask
, index
;
1500 if (!ns_capable(net
->user_ns
, CAP_NET_ADMIN
))
1503 mask
= bitmap_zalloc(dev
->num_rx_queues
, GFP_KERNEL
);
1507 index
= get_netdev_queue_index(queue
);
1509 err
= bitmap_parse(buf
, len
, mask
, dev
->num_rx_queues
);
1515 if (!rtnl_trylock()) {
1517 return restart_syscall();
1521 err
= __netif_set_xps_queue(dev
, mask
, index
, true);
1530 static struct netdev_queue_attribute xps_rxqs_attribute __ro_after_init
1531 = __ATTR_RW(xps_rxqs
);
1532 #endif /* CONFIG_XPS */
1534 static struct attribute
*netdev_queue_default_attrs
[] __ro_after_init
= {
1535 &queue_trans_timeout
.attr
,
1536 &queue_traffic_class
.attr
,
1538 &xps_cpus_attribute
.attr
,
1539 &xps_rxqs_attribute
.attr
,
1540 &queue_tx_maxrate
.attr
,
1544 ATTRIBUTE_GROUPS(netdev_queue_default
);
1546 static void netdev_queue_release(struct kobject
*kobj
)
1548 struct netdev_queue
*queue
= to_netdev_queue(kobj
);
1550 memset(kobj
, 0, sizeof(*kobj
));
1551 dev_put(queue
->dev
);
1554 static const void *netdev_queue_namespace(struct kobject
*kobj
)
1556 struct netdev_queue
*queue
= to_netdev_queue(kobj
);
1557 struct device
*dev
= &queue
->dev
->dev
;
1558 const void *ns
= NULL
;
1560 if (dev
->class && dev
->class->ns_type
)
1561 ns
= dev
->class->namespace(dev
);
1566 static void netdev_queue_get_ownership(struct kobject
*kobj
,
1567 kuid_t
*uid
, kgid_t
*gid
)
1569 const struct net
*net
= netdev_queue_namespace(kobj
);
1571 net_ns_get_ownership(net
, uid
, gid
);
1574 static struct kobj_type netdev_queue_ktype __ro_after_init
= {
1575 .sysfs_ops
= &netdev_queue_sysfs_ops
,
1576 .release
= netdev_queue_release
,
1577 .default_groups
= netdev_queue_default_groups
,
1578 .namespace = netdev_queue_namespace
,
1579 .get_ownership
= netdev_queue_get_ownership
,
1582 static int netdev_queue_add_kobject(struct net_device
*dev
, int index
)
1584 struct netdev_queue
*queue
= dev
->_tx
+ index
;
1585 struct kobject
*kobj
= &queue
->kobj
;
1588 /* Kobject_put later will trigger netdev_queue_release call
1589 * which decreases dev refcount: Take that reference here
1591 dev_hold(queue
->dev
);
1593 kobj
->kset
= dev
->queues_kset
;
1594 error
= kobject_init_and_add(kobj
, &netdev_queue_ktype
, NULL
,
1600 error
= sysfs_create_group(kobj
, &dql_group
);
1605 kobject_uevent(kobj
, KOBJ_ADD
);
1613 static int tx_queue_change_owner(struct net_device
*ndev
, int index
,
1614 kuid_t kuid
, kgid_t kgid
)
1616 struct netdev_queue
*queue
= ndev
->_tx
+ index
;
1617 struct kobject
*kobj
= &queue
->kobj
;
1620 error
= sysfs_change_owner(kobj
, kuid
, kgid
);
1625 error
= sysfs_group_change_owner(kobj
, &dql_group
, kuid
, kgid
);
1629 #endif /* CONFIG_SYSFS */
1632 netdev_queue_update_kobjects(struct net_device
*dev
, int old_num
, int new_num
)
1638 for (i
= old_num
; i
< new_num
; i
++) {
1639 error
= netdev_queue_add_kobject(dev
, i
);
1646 while (--i
>= new_num
) {
1647 struct netdev_queue
*queue
= dev
->_tx
+ i
;
1649 if (!refcount_read(&dev_net(dev
)->ns
.count
))
1650 queue
->kobj
.uevent_suppress
= 1;
1652 sysfs_remove_group(&queue
->kobj
, &dql_group
);
1654 kobject_put(&queue
->kobj
);
1660 #endif /* CONFIG_SYSFS */
1663 static int net_tx_queue_change_owner(struct net_device
*dev
, int num
,
1664 kuid_t kuid
, kgid_t kgid
)
1670 for (i
= 0; i
< num
; i
++) {
1671 error
= tx_queue_change_owner(dev
, i
, kuid
, kgid
);
1679 #endif /* CONFIG_SYSFS */
1682 static int register_queue_kobjects(struct net_device
*dev
)
1684 int error
= 0, txq
= 0, rxq
= 0, real_rx
= 0, real_tx
= 0;
1687 dev
->queues_kset
= kset_create_and_add("queues",
1688 NULL
, &dev
->dev
.kobj
);
1689 if (!dev
->queues_kset
)
1691 real_rx
= dev
->real_num_rx_queues
;
1693 real_tx
= dev
->real_num_tx_queues
;
1695 error
= net_rx_queue_update_kobjects(dev
, 0, real_rx
);
1700 error
= netdev_queue_update_kobjects(dev
, 0, real_tx
);
1708 netdev_queue_update_kobjects(dev
, txq
, 0);
1709 net_rx_queue_update_kobjects(dev
, rxq
, 0);
1711 kset_unregister(dev
->queues_kset
);
1716 static int queue_change_owner(struct net_device
*ndev
, kuid_t kuid
, kgid_t kgid
)
1718 int error
= 0, real_rx
= 0, real_tx
= 0;
1721 if (ndev
->queues_kset
) {
1722 error
= sysfs_change_owner(&ndev
->queues_kset
->kobj
, kuid
, kgid
);
1726 real_rx
= ndev
->real_num_rx_queues
;
1728 real_tx
= ndev
->real_num_tx_queues
;
1730 error
= net_rx_queue_change_owner(ndev
, real_rx
, kuid
, kgid
);
1734 error
= net_tx_queue_change_owner(ndev
, real_tx
, kuid
, kgid
);
1741 static void remove_queue_kobjects(struct net_device
*dev
)
1743 int real_rx
= 0, real_tx
= 0;
1746 real_rx
= dev
->real_num_rx_queues
;
1748 real_tx
= dev
->real_num_tx_queues
;
1750 net_rx_queue_update_kobjects(dev
, real_rx
, 0);
1751 netdev_queue_update_kobjects(dev
, real_tx
, 0);
1753 kset_unregister(dev
->queues_kset
);
1757 static bool net_current_may_mount(void)
1759 struct net
*net
= current
->nsproxy
->net_ns
;
1761 return ns_capable(net
->user_ns
, CAP_SYS_ADMIN
);
1764 static void *net_grab_current_ns(void)
1766 struct net
*ns
= current
->nsproxy
->net_ns
;
1767 #ifdef CONFIG_NET_NS
1769 refcount_inc(&ns
->passive
);
1774 static const void *net_initial_ns(void)
1779 static const void *net_netlink_ns(struct sock
*sk
)
1781 return sock_net(sk
);
1784 const struct kobj_ns_type_operations net_ns_type_operations
= {
1785 .type
= KOBJ_NS_TYPE_NET
,
1786 .current_may_mount
= net_current_may_mount
,
1787 .grab_current_ns
= net_grab_current_ns
,
1788 .netlink_ns
= net_netlink_ns
,
1789 .initial_ns
= net_initial_ns
,
1790 .drop_ns
= net_drop_ns
,
1792 EXPORT_SYMBOL_GPL(net_ns_type_operations
);
1794 static int netdev_uevent(struct device
*d
, struct kobj_uevent_env
*env
)
1796 struct net_device
*dev
= to_net_dev(d
);
1799 /* pass interface to uevent. */
1800 retval
= add_uevent_var(env
, "INTERFACE=%s", dev
->name
);
1804 /* pass ifindex to uevent.
1805 * ifindex is useful as it won't change (interface name may change)
1806 * and is what RtNetlink uses natively.
1808 retval
= add_uevent_var(env
, "IFINDEX=%d", dev
->ifindex
);
1815 * netdev_release -- destroy and free a dead device.
1816 * Called when last reference to device kobject is gone.
1818 static void netdev_release(struct device
*d
)
1820 struct net_device
*dev
= to_net_dev(d
);
1822 BUG_ON(dev
->reg_state
!= NETREG_RELEASED
);
1824 /* no need to wait for rcu grace period:
1825 * device is dead and about to be freed.
1827 kfree(rcu_access_pointer(dev
->ifalias
));
1828 netdev_freemem(dev
);
1831 static const void *net_namespace(struct device
*d
)
1833 struct net_device
*dev
= to_net_dev(d
);
1835 return dev_net(dev
);
1838 static void net_get_ownership(struct device
*d
, kuid_t
*uid
, kgid_t
*gid
)
1840 struct net_device
*dev
= to_net_dev(d
);
1841 const struct net
*net
= dev_net(dev
);
1843 net_ns_get_ownership(net
, uid
, gid
);
1846 static struct class net_class __ro_after_init
= {
1848 .dev_release
= netdev_release
,
1849 .dev_groups
= net_class_groups
,
1850 .dev_uevent
= netdev_uevent
,
1851 .ns_type
= &net_ns_type_operations
,
1852 .namespace = net_namespace
,
1853 .get_ownership
= net_get_ownership
,
1856 #ifdef CONFIG_OF_NET
1857 static int of_dev_node_match(struct device
*dev
, const void *data
)
1859 for (; dev
; dev
= dev
->parent
) {
1860 if (dev
->of_node
== data
)
1868 * of_find_net_device_by_node - lookup the net device for the device node
1869 * @np: OF device node
1871 * Looks up the net_device structure corresponding with the device node.
1872 * If successful, returns a pointer to the net_device with the embedded
1873 * struct device refcount incremented by one, or NULL on failure. The
1874 * refcount must be dropped when done with the net_device.
1876 struct net_device
*of_find_net_device_by_node(struct device_node
*np
)
1880 dev
= class_find_device(&net_class
, NULL
, np
, of_dev_node_match
);
1884 return to_net_dev(dev
);
1886 EXPORT_SYMBOL(of_find_net_device_by_node
);
1889 /* Delete sysfs entries but hold kobject reference until after all
1890 * netdev references are gone.
1892 void netdev_unregister_kobject(struct net_device
*ndev
)
1894 struct device
*dev
= &ndev
->dev
;
1896 if (!refcount_read(&dev_net(ndev
)->ns
.count
))
1897 dev_set_uevent_suppress(dev
, 1);
1899 kobject_get(&dev
->kobj
);
1901 remove_queue_kobjects(ndev
);
1903 pm_runtime_set_memalloc_noio(dev
, false);
1908 /* Create sysfs entries for network device. */
1909 int netdev_register_kobject(struct net_device
*ndev
)
1911 struct device
*dev
= &ndev
->dev
;
1912 const struct attribute_group
**groups
= ndev
->sysfs_groups
;
1915 device_initialize(dev
);
1916 dev
->class = &net_class
;
1917 dev
->platform_data
= ndev
;
1918 dev
->groups
= groups
;
1920 dev_set_name(dev
, "%s", ndev
->name
);
1923 /* Allow for a device specific group */
1927 *groups
++ = &netstat_group
;
1929 #if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
1930 if (ndev
->ieee80211_ptr
)
1931 *groups
++ = &wireless_group
;
1932 #if IS_ENABLED(CONFIG_WIRELESS_EXT)
1933 else if (ndev
->wireless_handlers
)
1934 *groups
++ = &wireless_group
;
1937 #endif /* CONFIG_SYSFS */
1939 error
= device_add(dev
);
1943 error
= register_queue_kobjects(ndev
);
1949 pm_runtime_set_memalloc_noio(dev
, true);
1954 /* Change owner for sysfs entries when moving network devices across network
1955 * namespaces owned by different user namespaces.
1957 int netdev_change_owner(struct net_device
*ndev
, const struct net
*net_old
,
1958 const struct net
*net_new
)
1960 struct device
*dev
= &ndev
->dev
;
1961 kuid_t old_uid
, new_uid
;
1962 kgid_t old_gid
, new_gid
;
1965 net_ns_get_ownership(net_old
, &old_uid
, &old_gid
);
1966 net_ns_get_ownership(net_new
, &new_uid
, &new_gid
);
1968 /* The network namespace was changed but the owning user namespace is
1969 * identical so there's no need to change the owner of sysfs entries.
1971 if (uid_eq(old_uid
, new_uid
) && gid_eq(old_gid
, new_gid
))
1974 error
= device_change_owner(dev
, new_uid
, new_gid
);
1978 error
= queue_change_owner(ndev
, new_uid
, new_gid
);
1985 int netdev_class_create_file_ns(const struct class_attribute
*class_attr
,
1988 return class_create_file_ns(&net_class
, class_attr
, ns
);
1990 EXPORT_SYMBOL(netdev_class_create_file_ns
);
1992 void netdev_class_remove_file_ns(const struct class_attribute
*class_attr
,
1995 class_remove_file_ns(&net_class
, class_attr
, ns
);
1997 EXPORT_SYMBOL(netdev_class_remove_file_ns
);
1999 int __init
netdev_kobject_init(void)
2001 kobj_ns_type_register(&net_ns_type_operations
);
2002 return class_register(&net_class
);