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