xref: /linux/net/core/net-sysfs.c (revision 9e8ba5f3ec35cba4fd8a8bebda548c4db2651e40)
1 /*
2  * net-sysfs.c - network device class and attributes
3  *
4  * Copyright (c) 2003 Stephen Hemminger <shemminger@osdl.org>
5  *
6  *	This program is free software; you can redistribute it and/or
7  *	modify it under the terms of the GNU General Public License
8  *	as published by the Free Software Foundation; either version
9  *	2 of the License, or (at your option) any later version.
10  */
11 
12 #include <linux/capability.h>
13 #include <linux/kernel.h>
14 #include <linux/netdevice.h>
15 #include <linux/if_arp.h>
16 #include <linux/slab.h>
17 #include <linux/nsproxy.h>
18 #include <net/sock.h>
19 #include <net/net_namespace.h>
20 #include <linux/rtnetlink.h>
21 #include <linux/wireless.h>
22 #include <linux/vmalloc.h>
23 #include <linux/export.h>
24 #include <linux/jiffies.h>
25 #include <net/wext.h>
26 
27 #include "net-sysfs.h"
28 
29 #ifdef CONFIG_SYSFS
30 static const char fmt_hex[] = "%#x\n";
31 static const char fmt_long_hex[] = "%#lx\n";
32 static const char fmt_dec[] = "%d\n";
33 static const char fmt_udec[] = "%u\n";
34 static const char fmt_ulong[] = "%lu\n";
35 static const char fmt_u64[] = "%llu\n";
36 
37 static inline int dev_isalive(const struct net_device *dev)
38 {
39 	return dev->reg_state <= NETREG_REGISTERED;
40 }
41 
42 /* use same locking rules as GIF* ioctl's */
43 static ssize_t netdev_show(const struct device *dev,
44 			   struct device_attribute *attr, char *buf,
45 			   ssize_t (*format)(const struct net_device *, char *))
46 {
47 	struct net_device *net = to_net_dev(dev);
48 	ssize_t ret = -EINVAL;
49 
50 	read_lock(&dev_base_lock);
51 	if (dev_isalive(net))
52 		ret = (*format)(net, buf);
53 	read_unlock(&dev_base_lock);
54 
55 	return ret;
56 }
57 
58 /* generate a show function for simple field */
59 #define NETDEVICE_SHOW(field, format_string)				\
60 static ssize_t format_##field(const struct net_device *net, char *buf)	\
61 {									\
62 	return sprintf(buf, format_string, net->field);			\
63 }									\
64 static ssize_t show_##field(struct device *dev,				\
65 			    struct device_attribute *attr, char *buf)	\
66 {									\
67 	return netdev_show(dev, attr, buf, format_##field);		\
68 }
69 
70 
71 /* use same locking and permission rules as SIF* ioctl's */
72 static ssize_t netdev_store(struct device *dev, struct device_attribute *attr,
73 			    const char *buf, size_t len,
74 			    int (*set)(struct net_device *, unsigned long))
75 {
76 	struct net_device *net = to_net_dev(dev);
77 	char *endp;
78 	unsigned long new;
79 	int ret = -EINVAL;
80 
81 	if (!capable(CAP_NET_ADMIN))
82 		return -EPERM;
83 
84 	new = simple_strtoul(buf, &endp, 0);
85 	if (endp == buf)
86 		goto err;
87 
88 	if (!rtnl_trylock())
89 		return restart_syscall();
90 
91 	if (dev_isalive(net)) {
92 		if ((ret = (*set)(net, new)) == 0)
93 			ret = len;
94 	}
95 	rtnl_unlock();
96  err:
97 	return ret;
98 }
99 
100 NETDEVICE_SHOW(dev_id, fmt_hex);
101 NETDEVICE_SHOW(addr_assign_type, fmt_dec);
102 NETDEVICE_SHOW(addr_len, fmt_dec);
103 NETDEVICE_SHOW(iflink, fmt_dec);
104 NETDEVICE_SHOW(ifindex, fmt_dec);
105 NETDEVICE_SHOW(type, fmt_dec);
106 NETDEVICE_SHOW(link_mode, fmt_dec);
107 
108 /* use same locking rules as GIFHWADDR ioctl's */
109 static ssize_t show_address(struct device *dev, struct device_attribute *attr,
110 			    char *buf)
111 {
112 	struct net_device *net = to_net_dev(dev);
113 	ssize_t ret = -EINVAL;
114 
115 	read_lock(&dev_base_lock);
116 	if (dev_isalive(net))
117 		ret = sysfs_format_mac(buf, net->dev_addr, net->addr_len);
118 	read_unlock(&dev_base_lock);
119 	return ret;
120 }
121 
122 static ssize_t show_broadcast(struct device *dev,
123 			    struct device_attribute *attr, char *buf)
124 {
125 	struct net_device *net = to_net_dev(dev);
126 	if (dev_isalive(net))
127 		return sysfs_format_mac(buf, net->broadcast, net->addr_len);
128 	return -EINVAL;
129 }
130 
131 static ssize_t show_carrier(struct device *dev,
132 			    struct device_attribute *attr, char *buf)
133 {
134 	struct net_device *netdev = to_net_dev(dev);
135 	if (netif_running(netdev)) {
136 		return sprintf(buf, fmt_dec, !!netif_carrier_ok(netdev));
137 	}
138 	return -EINVAL;
139 }
140 
141 static ssize_t show_speed(struct device *dev,
142 			  struct device_attribute *attr, char *buf)
143 {
144 	struct net_device *netdev = to_net_dev(dev);
145 	int ret = -EINVAL;
146 
147 	if (!rtnl_trylock())
148 		return restart_syscall();
149 
150 	if (netif_running(netdev)) {
151 		struct ethtool_cmd cmd;
152 		if (!__ethtool_get_settings(netdev, &cmd))
153 			ret = sprintf(buf, fmt_udec, ethtool_cmd_speed(&cmd));
154 	}
155 	rtnl_unlock();
156 	return ret;
157 }
158 
159 static ssize_t show_duplex(struct device *dev,
160 			   struct device_attribute *attr, char *buf)
161 {
162 	struct net_device *netdev = to_net_dev(dev);
163 	int ret = -EINVAL;
164 
165 	if (!rtnl_trylock())
166 		return restart_syscall();
167 
168 	if (netif_running(netdev)) {
169 		struct ethtool_cmd cmd;
170 		if (!__ethtool_get_settings(netdev, &cmd))
171 			ret = sprintf(buf, "%s\n",
172 				      cmd.duplex ? "full" : "half");
173 	}
174 	rtnl_unlock();
175 	return ret;
176 }
177 
178 static ssize_t show_dormant(struct device *dev,
179 			    struct device_attribute *attr, char *buf)
180 {
181 	struct net_device *netdev = to_net_dev(dev);
182 
183 	if (netif_running(netdev))
184 		return sprintf(buf, fmt_dec, !!netif_dormant(netdev));
185 
186 	return -EINVAL;
187 }
188 
189 static const char *const operstates[] = {
190 	"unknown",
191 	"notpresent", /* currently unused */
192 	"down",
193 	"lowerlayerdown",
194 	"testing", /* currently unused */
195 	"dormant",
196 	"up"
197 };
198 
199 static ssize_t show_operstate(struct device *dev,
200 			      struct device_attribute *attr, char *buf)
201 {
202 	const struct net_device *netdev = to_net_dev(dev);
203 	unsigned char operstate;
204 
205 	read_lock(&dev_base_lock);
206 	operstate = netdev->operstate;
207 	if (!netif_running(netdev))
208 		operstate = IF_OPER_DOWN;
209 	read_unlock(&dev_base_lock);
210 
211 	if (operstate >= ARRAY_SIZE(operstates))
212 		return -EINVAL; /* should not happen */
213 
214 	return sprintf(buf, "%s\n", operstates[operstate]);
215 }
216 
217 /* read-write attributes */
218 NETDEVICE_SHOW(mtu, fmt_dec);
219 
220 static int change_mtu(struct net_device *net, unsigned long new_mtu)
221 {
222 	return dev_set_mtu(net, (int) new_mtu);
223 }
224 
225 static ssize_t store_mtu(struct device *dev, struct device_attribute *attr,
226 			 const char *buf, size_t len)
227 {
228 	return netdev_store(dev, attr, buf, len, change_mtu);
229 }
230 
231 NETDEVICE_SHOW(flags, fmt_hex);
232 
233 static int change_flags(struct net_device *net, unsigned long new_flags)
234 {
235 	return dev_change_flags(net, (unsigned) new_flags);
236 }
237 
238 static ssize_t store_flags(struct device *dev, struct device_attribute *attr,
239 			   const char *buf, size_t len)
240 {
241 	return netdev_store(dev, attr, buf, len, change_flags);
242 }
243 
244 NETDEVICE_SHOW(tx_queue_len, fmt_ulong);
245 
246 static int change_tx_queue_len(struct net_device *net, unsigned long new_len)
247 {
248 	net->tx_queue_len = new_len;
249 	return 0;
250 }
251 
252 static ssize_t store_tx_queue_len(struct device *dev,
253 				  struct device_attribute *attr,
254 				  const char *buf, size_t len)
255 {
256 	return netdev_store(dev, attr, buf, len, change_tx_queue_len);
257 }
258 
259 static ssize_t store_ifalias(struct device *dev, struct device_attribute *attr,
260 			     const char *buf, size_t len)
261 {
262 	struct net_device *netdev = to_net_dev(dev);
263 	size_t count = len;
264 	ssize_t ret;
265 
266 	if (!capable(CAP_NET_ADMIN))
267 		return -EPERM;
268 
269 	/* ignore trailing newline */
270 	if (len >  0 && buf[len - 1] == '\n')
271 		--count;
272 
273 	if (!rtnl_trylock())
274 		return restart_syscall();
275 	ret = dev_set_alias(netdev, buf, count);
276 	rtnl_unlock();
277 
278 	return ret < 0 ? ret : len;
279 }
280 
281 static ssize_t show_ifalias(struct device *dev,
282 			    struct device_attribute *attr, char *buf)
283 {
284 	const struct net_device *netdev = to_net_dev(dev);
285 	ssize_t ret = 0;
286 
287 	if (!rtnl_trylock())
288 		return restart_syscall();
289 	if (netdev->ifalias)
290 		ret = sprintf(buf, "%s\n", netdev->ifalias);
291 	rtnl_unlock();
292 	return ret;
293 }
294 
295 NETDEVICE_SHOW(group, fmt_dec);
296 
297 static int change_group(struct net_device *net, unsigned long new_group)
298 {
299 	dev_set_group(net, (int) new_group);
300 	return 0;
301 }
302 
303 static ssize_t store_group(struct device *dev, struct device_attribute *attr,
304 			 const char *buf, size_t len)
305 {
306 	return netdev_store(dev, attr, buf, len, change_group);
307 }
308 
309 static struct device_attribute net_class_attributes[] = {
310 	__ATTR(addr_assign_type, S_IRUGO, show_addr_assign_type, NULL),
311 	__ATTR(addr_len, S_IRUGO, show_addr_len, NULL),
312 	__ATTR(dev_id, S_IRUGO, show_dev_id, NULL),
313 	__ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias),
314 	__ATTR(iflink, S_IRUGO, show_iflink, NULL),
315 	__ATTR(ifindex, S_IRUGO, show_ifindex, NULL),
316 	__ATTR(type, S_IRUGO, show_type, NULL),
317 	__ATTR(link_mode, S_IRUGO, show_link_mode, NULL),
318 	__ATTR(address, S_IRUGO, show_address, NULL),
319 	__ATTR(broadcast, S_IRUGO, show_broadcast, NULL),
320 	__ATTR(carrier, S_IRUGO, show_carrier, NULL),
321 	__ATTR(speed, S_IRUGO, show_speed, NULL),
322 	__ATTR(duplex, S_IRUGO, show_duplex, NULL),
323 	__ATTR(dormant, S_IRUGO, show_dormant, NULL),
324 	__ATTR(operstate, S_IRUGO, show_operstate, NULL),
325 	__ATTR(mtu, S_IRUGO | S_IWUSR, show_mtu, store_mtu),
326 	__ATTR(flags, S_IRUGO | S_IWUSR, show_flags, store_flags),
327 	__ATTR(tx_queue_len, S_IRUGO | S_IWUSR, show_tx_queue_len,
328 	       store_tx_queue_len),
329 	__ATTR(netdev_group, S_IRUGO | S_IWUSR, show_group, store_group),
330 	{}
331 };
332 
333 /* Show a given an attribute in the statistics group */
334 static ssize_t netstat_show(const struct device *d,
335 			    struct device_attribute *attr, char *buf,
336 			    unsigned long offset)
337 {
338 	struct net_device *dev = to_net_dev(d);
339 	ssize_t ret = -EINVAL;
340 
341 	WARN_ON(offset > sizeof(struct rtnl_link_stats64) ||
342 			offset % sizeof(u64) != 0);
343 
344 	read_lock(&dev_base_lock);
345 	if (dev_isalive(dev)) {
346 		struct rtnl_link_stats64 temp;
347 		const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp);
348 
349 		ret = sprintf(buf, fmt_u64, *(u64 *)(((u8 *) stats) + offset));
350 	}
351 	read_unlock(&dev_base_lock);
352 	return ret;
353 }
354 
355 /* generate a read-only statistics attribute */
356 #define NETSTAT_ENTRY(name)						\
357 static ssize_t show_##name(struct device *d,				\
358 			   struct device_attribute *attr, char *buf) 	\
359 {									\
360 	return netstat_show(d, attr, buf,				\
361 			    offsetof(struct rtnl_link_stats64, name));	\
362 }									\
363 static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
364 
365 NETSTAT_ENTRY(rx_packets);
366 NETSTAT_ENTRY(tx_packets);
367 NETSTAT_ENTRY(rx_bytes);
368 NETSTAT_ENTRY(tx_bytes);
369 NETSTAT_ENTRY(rx_errors);
370 NETSTAT_ENTRY(tx_errors);
371 NETSTAT_ENTRY(rx_dropped);
372 NETSTAT_ENTRY(tx_dropped);
373 NETSTAT_ENTRY(multicast);
374 NETSTAT_ENTRY(collisions);
375 NETSTAT_ENTRY(rx_length_errors);
376 NETSTAT_ENTRY(rx_over_errors);
377 NETSTAT_ENTRY(rx_crc_errors);
378 NETSTAT_ENTRY(rx_frame_errors);
379 NETSTAT_ENTRY(rx_fifo_errors);
380 NETSTAT_ENTRY(rx_missed_errors);
381 NETSTAT_ENTRY(tx_aborted_errors);
382 NETSTAT_ENTRY(tx_carrier_errors);
383 NETSTAT_ENTRY(tx_fifo_errors);
384 NETSTAT_ENTRY(tx_heartbeat_errors);
385 NETSTAT_ENTRY(tx_window_errors);
386 NETSTAT_ENTRY(rx_compressed);
387 NETSTAT_ENTRY(tx_compressed);
388 
389 static struct attribute *netstat_attrs[] = {
390 	&dev_attr_rx_packets.attr,
391 	&dev_attr_tx_packets.attr,
392 	&dev_attr_rx_bytes.attr,
393 	&dev_attr_tx_bytes.attr,
394 	&dev_attr_rx_errors.attr,
395 	&dev_attr_tx_errors.attr,
396 	&dev_attr_rx_dropped.attr,
397 	&dev_attr_tx_dropped.attr,
398 	&dev_attr_multicast.attr,
399 	&dev_attr_collisions.attr,
400 	&dev_attr_rx_length_errors.attr,
401 	&dev_attr_rx_over_errors.attr,
402 	&dev_attr_rx_crc_errors.attr,
403 	&dev_attr_rx_frame_errors.attr,
404 	&dev_attr_rx_fifo_errors.attr,
405 	&dev_attr_rx_missed_errors.attr,
406 	&dev_attr_tx_aborted_errors.attr,
407 	&dev_attr_tx_carrier_errors.attr,
408 	&dev_attr_tx_fifo_errors.attr,
409 	&dev_attr_tx_heartbeat_errors.attr,
410 	&dev_attr_tx_window_errors.attr,
411 	&dev_attr_rx_compressed.attr,
412 	&dev_attr_tx_compressed.attr,
413 	NULL
414 };
415 
416 
417 static struct attribute_group netstat_group = {
418 	.name  = "statistics",
419 	.attrs  = netstat_attrs,
420 };
421 
422 #ifdef CONFIG_WIRELESS_EXT_SYSFS
423 /* helper function that does all the locking etc for wireless stats */
424 static ssize_t wireless_show(struct device *d, char *buf,
425 			     ssize_t (*format)(const struct iw_statistics *,
426 					       char *))
427 {
428 	struct net_device *dev = to_net_dev(d);
429 	const struct iw_statistics *iw;
430 	ssize_t ret = -EINVAL;
431 
432 	if (!rtnl_trylock())
433 		return restart_syscall();
434 	if (dev_isalive(dev)) {
435 		iw = get_wireless_stats(dev);
436 		if (iw)
437 			ret = (*format)(iw, buf);
438 	}
439 	rtnl_unlock();
440 
441 	return ret;
442 }
443 
444 /* show function template for wireless fields */
445 #define WIRELESS_SHOW(name, field, format_string)			\
446 static ssize_t format_iw_##name(const struct iw_statistics *iw, char *buf) \
447 {									\
448 	return sprintf(buf, format_string, iw->field);			\
449 }									\
450 static ssize_t show_iw_##name(struct device *d,				\
451 			      struct device_attribute *attr, char *buf)	\
452 {									\
453 	return wireless_show(d, buf, format_iw_##name);			\
454 }									\
455 static DEVICE_ATTR(name, S_IRUGO, show_iw_##name, NULL)
456 
457 WIRELESS_SHOW(status, status, fmt_hex);
458 WIRELESS_SHOW(link, qual.qual, fmt_dec);
459 WIRELESS_SHOW(level, qual.level, fmt_dec);
460 WIRELESS_SHOW(noise, qual.noise, fmt_dec);
461 WIRELESS_SHOW(nwid, discard.nwid, fmt_dec);
462 WIRELESS_SHOW(crypt, discard.code, fmt_dec);
463 WIRELESS_SHOW(fragment, discard.fragment, fmt_dec);
464 WIRELESS_SHOW(misc, discard.misc, fmt_dec);
465 WIRELESS_SHOW(retries, discard.retries, fmt_dec);
466 WIRELESS_SHOW(beacon, miss.beacon, fmt_dec);
467 
468 static struct attribute *wireless_attrs[] = {
469 	&dev_attr_status.attr,
470 	&dev_attr_link.attr,
471 	&dev_attr_level.attr,
472 	&dev_attr_noise.attr,
473 	&dev_attr_nwid.attr,
474 	&dev_attr_crypt.attr,
475 	&dev_attr_fragment.attr,
476 	&dev_attr_retries.attr,
477 	&dev_attr_misc.attr,
478 	&dev_attr_beacon.attr,
479 	NULL
480 };
481 
482 static struct attribute_group wireless_group = {
483 	.name = "wireless",
484 	.attrs = wireless_attrs,
485 };
486 #endif
487 #endif /* CONFIG_SYSFS */
488 
489 #ifdef CONFIG_RPS
490 /*
491  * RX queue sysfs structures and functions.
492  */
493 struct rx_queue_attribute {
494 	struct attribute attr;
495 	ssize_t (*show)(struct netdev_rx_queue *queue,
496 	    struct rx_queue_attribute *attr, char *buf);
497 	ssize_t (*store)(struct netdev_rx_queue *queue,
498 	    struct rx_queue_attribute *attr, const char *buf, size_t len);
499 };
500 #define to_rx_queue_attr(_attr) container_of(_attr,		\
501     struct rx_queue_attribute, attr)
502 
503 #define to_rx_queue(obj) container_of(obj, struct netdev_rx_queue, kobj)
504 
505 static ssize_t rx_queue_attr_show(struct kobject *kobj, struct attribute *attr,
506 				  char *buf)
507 {
508 	struct rx_queue_attribute *attribute = to_rx_queue_attr(attr);
509 	struct netdev_rx_queue *queue = to_rx_queue(kobj);
510 
511 	if (!attribute->show)
512 		return -EIO;
513 
514 	return attribute->show(queue, attribute, buf);
515 }
516 
517 static ssize_t rx_queue_attr_store(struct kobject *kobj, struct attribute *attr,
518 				   const char *buf, size_t count)
519 {
520 	struct rx_queue_attribute *attribute = to_rx_queue_attr(attr);
521 	struct netdev_rx_queue *queue = to_rx_queue(kobj);
522 
523 	if (!attribute->store)
524 		return -EIO;
525 
526 	return attribute->store(queue, attribute, buf, count);
527 }
528 
529 static const struct sysfs_ops rx_queue_sysfs_ops = {
530 	.show = rx_queue_attr_show,
531 	.store = rx_queue_attr_store,
532 };
533 
534 static ssize_t show_rps_map(struct netdev_rx_queue *queue,
535 			    struct rx_queue_attribute *attribute, char *buf)
536 {
537 	struct rps_map *map;
538 	cpumask_var_t mask;
539 	size_t len = 0;
540 	int i;
541 
542 	if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
543 		return -ENOMEM;
544 
545 	rcu_read_lock();
546 	map = rcu_dereference(queue->rps_map);
547 	if (map)
548 		for (i = 0; i < map->len; i++)
549 			cpumask_set_cpu(map->cpus[i], mask);
550 
551 	len += cpumask_scnprintf(buf + len, PAGE_SIZE, mask);
552 	if (PAGE_SIZE - len < 3) {
553 		rcu_read_unlock();
554 		free_cpumask_var(mask);
555 		return -EINVAL;
556 	}
557 	rcu_read_unlock();
558 
559 	free_cpumask_var(mask);
560 	len += sprintf(buf + len, "\n");
561 	return len;
562 }
563 
564 static ssize_t store_rps_map(struct netdev_rx_queue *queue,
565 		      struct rx_queue_attribute *attribute,
566 		      const char *buf, size_t len)
567 {
568 	struct rps_map *old_map, *map;
569 	cpumask_var_t mask;
570 	int err, cpu, i;
571 	static DEFINE_SPINLOCK(rps_map_lock);
572 
573 	if (!capable(CAP_NET_ADMIN))
574 		return -EPERM;
575 
576 	if (!alloc_cpumask_var(&mask, GFP_KERNEL))
577 		return -ENOMEM;
578 
579 	err = bitmap_parse(buf, len, cpumask_bits(mask), nr_cpumask_bits);
580 	if (err) {
581 		free_cpumask_var(mask);
582 		return err;
583 	}
584 
585 	map = kzalloc(max_t(unsigned,
586 	    RPS_MAP_SIZE(cpumask_weight(mask)), L1_CACHE_BYTES),
587 	    GFP_KERNEL);
588 	if (!map) {
589 		free_cpumask_var(mask);
590 		return -ENOMEM;
591 	}
592 
593 	i = 0;
594 	for_each_cpu_and(cpu, mask, cpu_online_mask)
595 		map->cpus[i++] = cpu;
596 
597 	if (i)
598 		map->len = i;
599 	else {
600 		kfree(map);
601 		map = NULL;
602 	}
603 
604 	spin_lock(&rps_map_lock);
605 	old_map = rcu_dereference_protected(queue->rps_map,
606 					    lockdep_is_held(&rps_map_lock));
607 	rcu_assign_pointer(queue->rps_map, map);
608 	spin_unlock(&rps_map_lock);
609 
610 	if (map)
611 		jump_label_inc(&rps_needed);
612 	if (old_map) {
613 		kfree_rcu(old_map, rcu);
614 		jump_label_dec(&rps_needed);
615 	}
616 	free_cpumask_var(mask);
617 	return len;
618 }
619 
620 static ssize_t show_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
621 					   struct rx_queue_attribute *attr,
622 					   char *buf)
623 {
624 	struct rps_dev_flow_table *flow_table;
625 	unsigned int val = 0;
626 
627 	rcu_read_lock();
628 	flow_table = rcu_dereference(queue->rps_flow_table);
629 	if (flow_table)
630 		val = flow_table->mask + 1;
631 	rcu_read_unlock();
632 
633 	return sprintf(buf, "%u\n", val);
634 }
635 
636 static void rps_dev_flow_table_release_work(struct work_struct *work)
637 {
638 	struct rps_dev_flow_table *table = container_of(work,
639 	    struct rps_dev_flow_table, free_work);
640 
641 	vfree(table);
642 }
643 
644 static void rps_dev_flow_table_release(struct rcu_head *rcu)
645 {
646 	struct rps_dev_flow_table *table = container_of(rcu,
647 	    struct rps_dev_flow_table, rcu);
648 
649 	INIT_WORK(&table->free_work, rps_dev_flow_table_release_work);
650 	schedule_work(&table->free_work);
651 }
652 
653 static ssize_t store_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
654 				     struct rx_queue_attribute *attr,
655 				     const char *buf, size_t len)
656 {
657 	unsigned int count;
658 	char *endp;
659 	struct rps_dev_flow_table *table, *old_table;
660 	static DEFINE_SPINLOCK(rps_dev_flow_lock);
661 
662 	if (!capable(CAP_NET_ADMIN))
663 		return -EPERM;
664 
665 	count = simple_strtoul(buf, &endp, 0);
666 	if (endp == buf)
667 		return -EINVAL;
668 
669 	if (count) {
670 		int i;
671 
672 		if (count > 1<<30) {
673 			/* Enforce a limit to prevent overflow */
674 			return -EINVAL;
675 		}
676 		count = roundup_pow_of_two(count);
677 		table = vmalloc(RPS_DEV_FLOW_TABLE_SIZE(count));
678 		if (!table)
679 			return -ENOMEM;
680 
681 		table->mask = count - 1;
682 		for (i = 0; i < count; i++)
683 			table->flows[i].cpu = RPS_NO_CPU;
684 	} else
685 		table = NULL;
686 
687 	spin_lock(&rps_dev_flow_lock);
688 	old_table = rcu_dereference_protected(queue->rps_flow_table,
689 					      lockdep_is_held(&rps_dev_flow_lock));
690 	rcu_assign_pointer(queue->rps_flow_table, table);
691 	spin_unlock(&rps_dev_flow_lock);
692 
693 	if (old_table)
694 		call_rcu(&old_table->rcu, rps_dev_flow_table_release);
695 
696 	return len;
697 }
698 
699 static struct rx_queue_attribute rps_cpus_attribute =
700 	__ATTR(rps_cpus, S_IRUGO | S_IWUSR, show_rps_map, store_rps_map);
701 
702 
703 static struct rx_queue_attribute rps_dev_flow_table_cnt_attribute =
704 	__ATTR(rps_flow_cnt, S_IRUGO | S_IWUSR,
705 	    show_rps_dev_flow_table_cnt, store_rps_dev_flow_table_cnt);
706 
707 static struct attribute *rx_queue_default_attrs[] = {
708 	&rps_cpus_attribute.attr,
709 	&rps_dev_flow_table_cnt_attribute.attr,
710 	NULL
711 };
712 
713 static void rx_queue_release(struct kobject *kobj)
714 {
715 	struct netdev_rx_queue *queue = to_rx_queue(kobj);
716 	struct rps_map *map;
717 	struct rps_dev_flow_table *flow_table;
718 
719 
720 	map = rcu_dereference_protected(queue->rps_map, 1);
721 	if (map) {
722 		RCU_INIT_POINTER(queue->rps_map, NULL);
723 		kfree_rcu(map, rcu);
724 	}
725 
726 	flow_table = rcu_dereference_protected(queue->rps_flow_table, 1);
727 	if (flow_table) {
728 		RCU_INIT_POINTER(queue->rps_flow_table, NULL);
729 		call_rcu(&flow_table->rcu, rps_dev_flow_table_release);
730 	}
731 
732 	memset(kobj, 0, sizeof(*kobj));
733 	dev_put(queue->dev);
734 }
735 
736 static struct kobj_type rx_queue_ktype = {
737 	.sysfs_ops = &rx_queue_sysfs_ops,
738 	.release = rx_queue_release,
739 	.default_attrs = rx_queue_default_attrs,
740 };
741 
742 static int rx_queue_add_kobject(struct net_device *net, int index)
743 {
744 	struct netdev_rx_queue *queue = net->_rx + index;
745 	struct kobject *kobj = &queue->kobj;
746 	int error = 0;
747 
748 	kobj->kset = net->queues_kset;
749 	error = kobject_init_and_add(kobj, &rx_queue_ktype, NULL,
750 	    "rx-%u", index);
751 	if (error) {
752 		kobject_put(kobj);
753 		return error;
754 	}
755 
756 	kobject_uevent(kobj, KOBJ_ADD);
757 	dev_hold(queue->dev);
758 
759 	return error;
760 }
761 #endif /* CONFIG_RPS */
762 
763 int
764 net_rx_queue_update_kobjects(struct net_device *net, int old_num, int new_num)
765 {
766 #ifdef CONFIG_RPS
767 	int i;
768 	int error = 0;
769 
770 	for (i = old_num; i < new_num; i++) {
771 		error = rx_queue_add_kobject(net, i);
772 		if (error) {
773 			new_num = old_num;
774 			break;
775 		}
776 	}
777 
778 	while (--i >= new_num)
779 		kobject_put(&net->_rx[i].kobj);
780 
781 	return error;
782 #else
783 	return 0;
784 #endif
785 }
786 
787 #ifdef CONFIG_SYSFS
788 /*
789  * netdev_queue sysfs structures and functions.
790  */
791 struct netdev_queue_attribute {
792 	struct attribute attr;
793 	ssize_t (*show)(struct netdev_queue *queue,
794 	    struct netdev_queue_attribute *attr, char *buf);
795 	ssize_t (*store)(struct netdev_queue *queue,
796 	    struct netdev_queue_attribute *attr, const char *buf, size_t len);
797 };
798 #define to_netdev_queue_attr(_attr) container_of(_attr,		\
799     struct netdev_queue_attribute, attr)
800 
801 #define to_netdev_queue(obj) container_of(obj, struct netdev_queue, kobj)
802 
803 static ssize_t netdev_queue_attr_show(struct kobject *kobj,
804 				      struct attribute *attr, char *buf)
805 {
806 	struct netdev_queue_attribute *attribute = to_netdev_queue_attr(attr);
807 	struct netdev_queue *queue = to_netdev_queue(kobj);
808 
809 	if (!attribute->show)
810 		return -EIO;
811 
812 	return attribute->show(queue, attribute, buf);
813 }
814 
815 static ssize_t netdev_queue_attr_store(struct kobject *kobj,
816 				       struct attribute *attr,
817 				       const char *buf, size_t count)
818 {
819 	struct netdev_queue_attribute *attribute = to_netdev_queue_attr(attr);
820 	struct netdev_queue *queue = to_netdev_queue(kobj);
821 
822 	if (!attribute->store)
823 		return -EIO;
824 
825 	return attribute->store(queue, attribute, buf, count);
826 }
827 
828 static const struct sysfs_ops netdev_queue_sysfs_ops = {
829 	.show = netdev_queue_attr_show,
830 	.store = netdev_queue_attr_store,
831 };
832 
833 static ssize_t show_trans_timeout(struct netdev_queue *queue,
834 				  struct netdev_queue_attribute *attribute,
835 				  char *buf)
836 {
837 	unsigned long trans_timeout;
838 
839 	spin_lock_irq(&queue->_xmit_lock);
840 	trans_timeout = queue->trans_timeout;
841 	spin_unlock_irq(&queue->_xmit_lock);
842 
843 	return sprintf(buf, "%lu", trans_timeout);
844 }
845 
846 static struct netdev_queue_attribute queue_trans_timeout =
847 	__ATTR(tx_timeout, S_IRUGO, show_trans_timeout, NULL);
848 
849 #ifdef CONFIG_BQL
850 /*
851  * Byte queue limits sysfs structures and functions.
852  */
853 static ssize_t bql_show(char *buf, unsigned int value)
854 {
855 	return sprintf(buf, "%u\n", value);
856 }
857 
858 static ssize_t bql_set(const char *buf, const size_t count,
859 		       unsigned int *pvalue)
860 {
861 	unsigned int value;
862 	int err;
863 
864 	if (!strcmp(buf, "max") || !strcmp(buf, "max\n"))
865 		value = DQL_MAX_LIMIT;
866 	else {
867 		err = kstrtouint(buf, 10, &value);
868 		if (err < 0)
869 			return err;
870 		if (value > DQL_MAX_LIMIT)
871 			return -EINVAL;
872 	}
873 
874 	*pvalue = value;
875 
876 	return count;
877 }
878 
879 static ssize_t bql_show_hold_time(struct netdev_queue *queue,
880 				  struct netdev_queue_attribute *attr,
881 				  char *buf)
882 {
883 	struct dql *dql = &queue->dql;
884 
885 	return sprintf(buf, "%u\n", jiffies_to_msecs(dql->slack_hold_time));
886 }
887 
888 static ssize_t bql_set_hold_time(struct netdev_queue *queue,
889 				 struct netdev_queue_attribute *attribute,
890 				 const char *buf, size_t len)
891 {
892 	struct dql *dql = &queue->dql;
893 	unsigned value;
894 	int err;
895 
896 	err = kstrtouint(buf, 10, &value);
897 	if (err < 0)
898 		return err;
899 
900 	dql->slack_hold_time = msecs_to_jiffies(value);
901 
902 	return len;
903 }
904 
905 static struct netdev_queue_attribute bql_hold_time_attribute =
906 	__ATTR(hold_time, S_IRUGO | S_IWUSR, bql_show_hold_time,
907 	    bql_set_hold_time);
908 
909 static ssize_t bql_show_inflight(struct netdev_queue *queue,
910 				 struct netdev_queue_attribute *attr,
911 				 char *buf)
912 {
913 	struct dql *dql = &queue->dql;
914 
915 	return sprintf(buf, "%u\n", dql->num_queued - dql->num_completed);
916 }
917 
918 static struct netdev_queue_attribute bql_inflight_attribute =
919 	__ATTR(inflight, S_IRUGO | S_IWUSR, bql_show_inflight, NULL);
920 
921 #define BQL_ATTR(NAME, FIELD)						\
922 static ssize_t bql_show_ ## NAME(struct netdev_queue *queue,		\
923 				 struct netdev_queue_attribute *attr,	\
924 				 char *buf)				\
925 {									\
926 	return bql_show(buf, queue->dql.FIELD);				\
927 }									\
928 									\
929 static ssize_t bql_set_ ## NAME(struct netdev_queue *queue,		\
930 				struct netdev_queue_attribute *attr,	\
931 				const char *buf, size_t len)		\
932 {									\
933 	return bql_set(buf, len, &queue->dql.FIELD);			\
934 }									\
935 									\
936 static struct netdev_queue_attribute bql_ ## NAME ## _attribute =	\
937 	__ATTR(NAME, S_IRUGO | S_IWUSR, bql_show_ ## NAME,		\
938 	    bql_set_ ## NAME);
939 
940 BQL_ATTR(limit, limit)
941 BQL_ATTR(limit_max, max_limit)
942 BQL_ATTR(limit_min, min_limit)
943 
944 static struct attribute *dql_attrs[] = {
945 	&bql_limit_attribute.attr,
946 	&bql_limit_max_attribute.attr,
947 	&bql_limit_min_attribute.attr,
948 	&bql_hold_time_attribute.attr,
949 	&bql_inflight_attribute.attr,
950 	NULL
951 };
952 
953 static struct attribute_group dql_group = {
954 	.name  = "byte_queue_limits",
955 	.attrs  = dql_attrs,
956 };
957 #endif /* CONFIG_BQL */
958 
959 #ifdef CONFIG_XPS
960 static inline unsigned int get_netdev_queue_index(struct netdev_queue *queue)
961 {
962 	struct net_device *dev = queue->dev;
963 	int i;
964 
965 	for (i = 0; i < dev->num_tx_queues; i++)
966 		if (queue == &dev->_tx[i])
967 			break;
968 
969 	BUG_ON(i >= dev->num_tx_queues);
970 
971 	return i;
972 }
973 
974 
975 static ssize_t show_xps_map(struct netdev_queue *queue,
976 			    struct netdev_queue_attribute *attribute, char *buf)
977 {
978 	struct net_device *dev = queue->dev;
979 	struct xps_dev_maps *dev_maps;
980 	cpumask_var_t mask;
981 	unsigned long index;
982 	size_t len = 0;
983 	int i;
984 
985 	if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
986 		return -ENOMEM;
987 
988 	index = get_netdev_queue_index(queue);
989 
990 	rcu_read_lock();
991 	dev_maps = rcu_dereference(dev->xps_maps);
992 	if (dev_maps) {
993 		for_each_possible_cpu(i) {
994 			struct xps_map *map =
995 			    rcu_dereference(dev_maps->cpu_map[i]);
996 			if (map) {
997 				int j;
998 				for (j = 0; j < map->len; j++) {
999 					if (map->queues[j] == index) {
1000 						cpumask_set_cpu(i, mask);
1001 						break;
1002 					}
1003 				}
1004 			}
1005 		}
1006 	}
1007 	rcu_read_unlock();
1008 
1009 	len += cpumask_scnprintf(buf + len, PAGE_SIZE, mask);
1010 	if (PAGE_SIZE - len < 3) {
1011 		free_cpumask_var(mask);
1012 		return -EINVAL;
1013 	}
1014 
1015 	free_cpumask_var(mask);
1016 	len += sprintf(buf + len, "\n");
1017 	return len;
1018 }
1019 
1020 static DEFINE_MUTEX(xps_map_mutex);
1021 #define xmap_dereference(P)		\
1022 	rcu_dereference_protected((P), lockdep_is_held(&xps_map_mutex))
1023 
1024 static void xps_queue_release(struct netdev_queue *queue)
1025 {
1026 	struct net_device *dev = queue->dev;
1027 	struct xps_dev_maps *dev_maps;
1028 	struct xps_map *map;
1029 	unsigned long index;
1030 	int i, pos, nonempty = 0;
1031 
1032 	index = get_netdev_queue_index(queue);
1033 
1034 	mutex_lock(&xps_map_mutex);
1035 	dev_maps = xmap_dereference(dev->xps_maps);
1036 
1037 	if (dev_maps) {
1038 		for_each_possible_cpu(i) {
1039 			map = xmap_dereference(dev_maps->cpu_map[i]);
1040 			if (!map)
1041 				continue;
1042 
1043 			for (pos = 0; pos < map->len; pos++)
1044 				if (map->queues[pos] == index)
1045 					break;
1046 
1047 			if (pos < map->len) {
1048 				if (map->len > 1)
1049 					map->queues[pos] =
1050 					    map->queues[--map->len];
1051 				else {
1052 					RCU_INIT_POINTER(dev_maps->cpu_map[i],
1053 					    NULL);
1054 					kfree_rcu(map, rcu);
1055 					map = NULL;
1056 				}
1057 			}
1058 			if (map)
1059 				nonempty = 1;
1060 		}
1061 
1062 		if (!nonempty) {
1063 			RCU_INIT_POINTER(dev->xps_maps, NULL);
1064 			kfree_rcu(dev_maps, rcu);
1065 		}
1066 	}
1067 	mutex_unlock(&xps_map_mutex);
1068 }
1069 
1070 static ssize_t store_xps_map(struct netdev_queue *queue,
1071 		      struct netdev_queue_attribute *attribute,
1072 		      const char *buf, size_t len)
1073 {
1074 	struct net_device *dev = queue->dev;
1075 	cpumask_var_t mask;
1076 	int err, i, cpu, pos, map_len, alloc_len, need_set;
1077 	unsigned long index;
1078 	struct xps_map *map, *new_map;
1079 	struct xps_dev_maps *dev_maps, *new_dev_maps;
1080 	int nonempty = 0;
1081 	int numa_node_id = -2;
1082 
1083 	if (!capable(CAP_NET_ADMIN))
1084 		return -EPERM;
1085 
1086 	if (!alloc_cpumask_var(&mask, GFP_KERNEL))
1087 		return -ENOMEM;
1088 
1089 	index = get_netdev_queue_index(queue);
1090 
1091 	err = bitmap_parse(buf, len, cpumask_bits(mask), nr_cpumask_bits);
1092 	if (err) {
1093 		free_cpumask_var(mask);
1094 		return err;
1095 	}
1096 
1097 	new_dev_maps = kzalloc(max_t(unsigned,
1098 	    XPS_DEV_MAPS_SIZE, L1_CACHE_BYTES), GFP_KERNEL);
1099 	if (!new_dev_maps) {
1100 		free_cpumask_var(mask);
1101 		return -ENOMEM;
1102 	}
1103 
1104 	mutex_lock(&xps_map_mutex);
1105 
1106 	dev_maps = xmap_dereference(dev->xps_maps);
1107 
1108 	for_each_possible_cpu(cpu) {
1109 		map = dev_maps ?
1110 			xmap_dereference(dev_maps->cpu_map[cpu]) : NULL;
1111 		new_map = map;
1112 		if (map) {
1113 			for (pos = 0; pos < map->len; pos++)
1114 				if (map->queues[pos] == index)
1115 					break;
1116 			map_len = map->len;
1117 			alloc_len = map->alloc_len;
1118 		} else
1119 			pos = map_len = alloc_len = 0;
1120 
1121 		need_set = cpumask_test_cpu(cpu, mask) && cpu_online(cpu);
1122 #ifdef CONFIG_NUMA
1123 		if (need_set) {
1124 			if (numa_node_id == -2)
1125 				numa_node_id = cpu_to_node(cpu);
1126 			else if (numa_node_id != cpu_to_node(cpu))
1127 				numa_node_id = -1;
1128 		}
1129 #endif
1130 		if (need_set && pos >= map_len) {
1131 			/* Need to add queue to this CPU's map */
1132 			if (map_len >= alloc_len) {
1133 				alloc_len = alloc_len ?
1134 				    2 * alloc_len : XPS_MIN_MAP_ALLOC;
1135 				new_map = kzalloc_node(XPS_MAP_SIZE(alloc_len),
1136 						       GFP_KERNEL,
1137 						       cpu_to_node(cpu));
1138 				if (!new_map)
1139 					goto error;
1140 				new_map->alloc_len = alloc_len;
1141 				for (i = 0; i < map_len; i++)
1142 					new_map->queues[i] = map->queues[i];
1143 				new_map->len = map_len;
1144 			}
1145 			new_map->queues[new_map->len++] = index;
1146 		} else if (!need_set && pos < map_len) {
1147 			/* Need to remove queue from this CPU's map */
1148 			if (map_len > 1)
1149 				new_map->queues[pos] =
1150 				    new_map->queues[--new_map->len];
1151 			else
1152 				new_map = NULL;
1153 		}
1154 		RCU_INIT_POINTER(new_dev_maps->cpu_map[cpu], new_map);
1155 	}
1156 
1157 	/* Cleanup old maps */
1158 	for_each_possible_cpu(cpu) {
1159 		map = dev_maps ?
1160 			xmap_dereference(dev_maps->cpu_map[cpu]) : NULL;
1161 		if (map && xmap_dereference(new_dev_maps->cpu_map[cpu]) != map)
1162 			kfree_rcu(map, rcu);
1163 		if (new_dev_maps->cpu_map[cpu])
1164 			nonempty = 1;
1165 	}
1166 
1167 	if (nonempty)
1168 		RCU_INIT_POINTER(dev->xps_maps, new_dev_maps);
1169 	else {
1170 		kfree(new_dev_maps);
1171 		RCU_INIT_POINTER(dev->xps_maps, NULL);
1172 	}
1173 
1174 	if (dev_maps)
1175 		kfree_rcu(dev_maps, rcu);
1176 
1177 	netdev_queue_numa_node_write(queue, (numa_node_id >= 0) ? numa_node_id :
1178 					    NUMA_NO_NODE);
1179 
1180 	mutex_unlock(&xps_map_mutex);
1181 
1182 	free_cpumask_var(mask);
1183 	return len;
1184 
1185 error:
1186 	mutex_unlock(&xps_map_mutex);
1187 
1188 	if (new_dev_maps)
1189 		for_each_possible_cpu(i)
1190 			kfree(rcu_dereference_protected(
1191 				new_dev_maps->cpu_map[i],
1192 				1));
1193 	kfree(new_dev_maps);
1194 	free_cpumask_var(mask);
1195 	return -ENOMEM;
1196 }
1197 
1198 static struct netdev_queue_attribute xps_cpus_attribute =
1199     __ATTR(xps_cpus, S_IRUGO | S_IWUSR, show_xps_map, store_xps_map);
1200 #endif /* CONFIG_XPS */
1201 
1202 static struct attribute *netdev_queue_default_attrs[] = {
1203 	&queue_trans_timeout.attr,
1204 #ifdef CONFIG_XPS
1205 	&xps_cpus_attribute.attr,
1206 #endif
1207 	NULL
1208 };
1209 
1210 static void netdev_queue_release(struct kobject *kobj)
1211 {
1212 	struct netdev_queue *queue = to_netdev_queue(kobj);
1213 
1214 #ifdef CONFIG_XPS
1215 	xps_queue_release(queue);
1216 #endif
1217 
1218 	memset(kobj, 0, sizeof(*kobj));
1219 	dev_put(queue->dev);
1220 }
1221 
1222 static struct kobj_type netdev_queue_ktype = {
1223 	.sysfs_ops = &netdev_queue_sysfs_ops,
1224 	.release = netdev_queue_release,
1225 	.default_attrs = netdev_queue_default_attrs,
1226 };
1227 
1228 static int netdev_queue_add_kobject(struct net_device *net, int index)
1229 {
1230 	struct netdev_queue *queue = net->_tx + index;
1231 	struct kobject *kobj = &queue->kobj;
1232 	int error = 0;
1233 
1234 	kobj->kset = net->queues_kset;
1235 	error = kobject_init_and_add(kobj, &netdev_queue_ktype, NULL,
1236 	    "tx-%u", index);
1237 	if (error)
1238 		goto exit;
1239 
1240 #ifdef CONFIG_BQL
1241 	error = sysfs_create_group(kobj, &dql_group);
1242 	if (error)
1243 		goto exit;
1244 #endif
1245 
1246 	kobject_uevent(kobj, KOBJ_ADD);
1247 	dev_hold(queue->dev);
1248 
1249 	return 0;
1250 exit:
1251 	kobject_put(kobj);
1252 	return error;
1253 }
1254 #endif /* CONFIG_SYSFS */
1255 
1256 int
1257 netdev_queue_update_kobjects(struct net_device *net, int old_num, int new_num)
1258 {
1259 #ifdef CONFIG_SYSFS
1260 	int i;
1261 	int error = 0;
1262 
1263 	for (i = old_num; i < new_num; i++) {
1264 		error = netdev_queue_add_kobject(net, i);
1265 		if (error) {
1266 			new_num = old_num;
1267 			break;
1268 		}
1269 	}
1270 
1271 	while (--i >= new_num) {
1272 		struct netdev_queue *queue = net->_tx + i;
1273 
1274 #ifdef CONFIG_BQL
1275 		sysfs_remove_group(&queue->kobj, &dql_group);
1276 #endif
1277 		kobject_put(&queue->kobj);
1278 	}
1279 
1280 	return error;
1281 #else
1282 	return 0;
1283 #endif /* CONFIG_SYSFS */
1284 }
1285 
1286 static int register_queue_kobjects(struct net_device *net)
1287 {
1288 	int error = 0, txq = 0, rxq = 0, real_rx = 0, real_tx = 0;
1289 
1290 #ifdef CONFIG_SYSFS
1291 	net->queues_kset = kset_create_and_add("queues",
1292 	    NULL, &net->dev.kobj);
1293 	if (!net->queues_kset)
1294 		return -ENOMEM;
1295 #endif
1296 
1297 #ifdef CONFIG_RPS
1298 	real_rx = net->real_num_rx_queues;
1299 #endif
1300 	real_tx = net->real_num_tx_queues;
1301 
1302 	error = net_rx_queue_update_kobjects(net, 0, real_rx);
1303 	if (error)
1304 		goto error;
1305 	rxq = real_rx;
1306 
1307 	error = netdev_queue_update_kobjects(net, 0, real_tx);
1308 	if (error)
1309 		goto error;
1310 	txq = real_tx;
1311 
1312 	return 0;
1313 
1314 error:
1315 	netdev_queue_update_kobjects(net, txq, 0);
1316 	net_rx_queue_update_kobjects(net, rxq, 0);
1317 	return error;
1318 }
1319 
1320 static void remove_queue_kobjects(struct net_device *net)
1321 {
1322 	int real_rx = 0, real_tx = 0;
1323 
1324 #ifdef CONFIG_RPS
1325 	real_rx = net->real_num_rx_queues;
1326 #endif
1327 	real_tx = net->real_num_tx_queues;
1328 
1329 	net_rx_queue_update_kobjects(net, real_rx, 0);
1330 	netdev_queue_update_kobjects(net, real_tx, 0);
1331 #ifdef CONFIG_SYSFS
1332 	kset_unregister(net->queues_kset);
1333 #endif
1334 }
1335 
1336 static void *net_grab_current_ns(void)
1337 {
1338 	struct net *ns = current->nsproxy->net_ns;
1339 #ifdef CONFIG_NET_NS
1340 	if (ns)
1341 		atomic_inc(&ns->passive);
1342 #endif
1343 	return ns;
1344 }
1345 
1346 static const void *net_initial_ns(void)
1347 {
1348 	return &init_net;
1349 }
1350 
1351 static const void *net_netlink_ns(struct sock *sk)
1352 {
1353 	return sock_net(sk);
1354 }
1355 
1356 struct kobj_ns_type_operations net_ns_type_operations = {
1357 	.type = KOBJ_NS_TYPE_NET,
1358 	.grab_current_ns = net_grab_current_ns,
1359 	.netlink_ns = net_netlink_ns,
1360 	.initial_ns = net_initial_ns,
1361 	.drop_ns = net_drop_ns,
1362 };
1363 EXPORT_SYMBOL_GPL(net_ns_type_operations);
1364 
1365 #ifdef CONFIG_HOTPLUG
1366 static int netdev_uevent(struct device *d, struct kobj_uevent_env *env)
1367 {
1368 	struct net_device *dev = to_net_dev(d);
1369 	int retval;
1370 
1371 	/* pass interface to uevent. */
1372 	retval = add_uevent_var(env, "INTERFACE=%s", dev->name);
1373 	if (retval)
1374 		goto exit;
1375 
1376 	/* pass ifindex to uevent.
1377 	 * ifindex is useful as it won't change (interface name may change)
1378 	 * and is what RtNetlink uses natively. */
1379 	retval = add_uevent_var(env, "IFINDEX=%d", dev->ifindex);
1380 
1381 exit:
1382 	return retval;
1383 }
1384 #endif
1385 
1386 /*
1387  *	netdev_release -- destroy and free a dead device.
1388  *	Called when last reference to device kobject is gone.
1389  */
1390 static void netdev_release(struct device *d)
1391 {
1392 	struct net_device *dev = to_net_dev(d);
1393 
1394 	BUG_ON(dev->reg_state != NETREG_RELEASED);
1395 
1396 	kfree(dev->ifalias);
1397 	kfree((char *)dev - dev->padded);
1398 }
1399 
1400 static const void *net_namespace(struct device *d)
1401 {
1402 	struct net_device *dev;
1403 	dev = container_of(d, struct net_device, dev);
1404 	return dev_net(dev);
1405 }
1406 
1407 static struct class net_class = {
1408 	.name = "net",
1409 	.dev_release = netdev_release,
1410 #ifdef CONFIG_SYSFS
1411 	.dev_attrs = net_class_attributes,
1412 #endif /* CONFIG_SYSFS */
1413 #ifdef CONFIG_HOTPLUG
1414 	.dev_uevent = netdev_uevent,
1415 #endif
1416 	.ns_type = &net_ns_type_operations,
1417 	.namespace = net_namespace,
1418 };
1419 
1420 /* Delete sysfs entries but hold kobject reference until after all
1421  * netdev references are gone.
1422  */
1423 void netdev_unregister_kobject(struct net_device * net)
1424 {
1425 	struct device *dev = &(net->dev);
1426 
1427 	kobject_get(&dev->kobj);
1428 
1429 	remove_queue_kobjects(net);
1430 
1431 	device_del(dev);
1432 }
1433 
1434 /* Create sysfs entries for network device. */
1435 int netdev_register_kobject(struct net_device *net)
1436 {
1437 	struct device *dev = &(net->dev);
1438 	const struct attribute_group **groups = net->sysfs_groups;
1439 	int error = 0;
1440 
1441 	device_initialize(dev);
1442 	dev->class = &net_class;
1443 	dev->platform_data = net;
1444 	dev->groups = groups;
1445 
1446 	dev_set_name(dev, "%s", net->name);
1447 
1448 #ifdef CONFIG_SYSFS
1449 	/* Allow for a device specific group */
1450 	if (*groups)
1451 		groups++;
1452 
1453 	*groups++ = &netstat_group;
1454 #ifdef CONFIG_WIRELESS_EXT_SYSFS
1455 	if (net->ieee80211_ptr)
1456 		*groups++ = &wireless_group;
1457 #ifdef CONFIG_WIRELESS_EXT
1458 	else if (net->wireless_handlers)
1459 		*groups++ = &wireless_group;
1460 #endif
1461 #endif
1462 #endif /* CONFIG_SYSFS */
1463 
1464 	error = device_add(dev);
1465 	if (error)
1466 		return error;
1467 
1468 	error = register_queue_kobjects(net);
1469 	if (error) {
1470 		device_del(dev);
1471 		return error;
1472 	}
1473 
1474 	return error;
1475 }
1476 
1477 int netdev_class_create_file(struct class_attribute *class_attr)
1478 {
1479 	return class_create_file(&net_class, class_attr);
1480 }
1481 EXPORT_SYMBOL(netdev_class_create_file);
1482 
1483 void netdev_class_remove_file(struct class_attribute *class_attr)
1484 {
1485 	class_remove_file(&net_class, class_attr);
1486 }
1487 EXPORT_SYMBOL(netdev_class_remove_file);
1488 
1489 int netdev_kobject_init(void)
1490 {
1491 	kobj_ns_type_register(&net_ns_type_operations);
1492 	return class_register(&net_class);
1493 }
1494