linux/net/core/net-sysfs.c
<<
>>
Prefs
   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 <net/switchdev.h>
  16#include <linux/if_arp.h>
  17#include <linux/slab.h>
  18#include <linux/sched/signal.h>
  19#include <linux/nsproxy.h>
  20#include <net/sock.h>
  21#include <net/net_namespace.h>
  22#include <linux/rtnetlink.h>
  23#include <linux/vmalloc.h>
  24#include <linux/export.h>
  25#include <linux/jiffies.h>
  26#include <linux/pm_runtime.h>
  27#include <linux/of.h>
  28#include <linux/of_net.h>
  29#include <linux/cpu.h>
  30
  31#include "net-sysfs.h"
  32
  33#ifdef CONFIG_SYSFS
  34static const char fmt_hex[] = "%#x\n";
  35static const char fmt_dec[] = "%d\n";
  36static const char fmt_ulong[] = "%lu\n";
  37static const char fmt_u64[] = "%llu\n";
  38
  39static inline int dev_isalive(const struct net_device *dev)
  40{
  41        return dev->reg_state <= NETREG_REGISTERED;
  42}
  43
  44/* use same locking rules as GIF* ioctl's */
  45static ssize_t netdev_show(const struct device *dev,
  46                           struct device_attribute *attr, char *buf,
  47                           ssize_t (*format)(const struct net_device *, char *))
  48{
  49        struct net_device *ndev = to_net_dev(dev);
  50        ssize_t ret = -EINVAL;
  51
  52        read_lock(&dev_base_lock);
  53        if (dev_isalive(ndev))
  54                ret = (*format)(ndev, buf);
  55        read_unlock(&dev_base_lock);
  56
  57        return ret;
  58}
  59
  60/* generate a show function for simple field */
  61#define NETDEVICE_SHOW(field, format_string)                            \
  62static ssize_t format_##field(const struct net_device *dev, char *buf)  \
  63{                                                                       \
  64        return sprintf(buf, format_string, dev->field);                 \
  65}                                                                       \
  66static ssize_t field##_show(struct device *dev,                         \
  67                            struct device_attribute *attr, char *buf)   \
  68{                                                                       \
  69        return netdev_show(dev, attr, buf, format_##field);             \
  70}                                                                       \
  71
  72#define NETDEVICE_SHOW_RO(field, format_string)                         \
  73NETDEVICE_SHOW(field, format_string);                                   \
  74static DEVICE_ATTR_RO(field)
  75
  76#define NETDEVICE_SHOW_RW(field, format_string)                         \
  77NETDEVICE_SHOW(field, format_string);                                   \
  78static DEVICE_ATTR_RW(field)
  79
  80/* use same locking and permission rules as SIF* ioctl's */
  81static ssize_t netdev_store(struct device *dev, struct device_attribute *attr,
  82                            const char *buf, size_t len,
  83                            int (*set)(struct net_device *, unsigned long))
  84{
  85        struct net_device *netdev = to_net_dev(dev);
  86        struct net *net = dev_net(netdev);
  87        unsigned long new;
  88        int ret = -EINVAL;
  89
  90        if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
  91                return -EPERM;
  92
  93        ret = kstrtoul(buf, 0, &new);
  94        if (ret)
  95                goto err;
  96
  97        if (!rtnl_trylock())
  98                return restart_syscall();
  99
 100        if (dev_isalive(netdev)) {
 101                ret = (*set)(netdev, new);
 102                if (ret == 0)
 103                        ret = len;
 104        }
 105        rtnl_unlock();
 106 err:
 107        return ret;
 108}
 109
 110NETDEVICE_SHOW_RO(dev_id, fmt_hex);
 111NETDEVICE_SHOW_RO(dev_port, fmt_dec);
 112NETDEVICE_SHOW_RO(addr_assign_type, fmt_dec);
 113NETDEVICE_SHOW_RO(addr_len, fmt_dec);
 114NETDEVICE_SHOW_RO(ifindex, fmt_dec);
 115NETDEVICE_SHOW_RO(type, fmt_dec);
 116NETDEVICE_SHOW_RO(link_mode, fmt_dec);
 117
 118static ssize_t iflink_show(struct device *dev, struct device_attribute *attr,
 119                           char *buf)
 120{
 121        struct net_device *ndev = to_net_dev(dev);
 122
 123        return sprintf(buf, fmt_dec, dev_get_iflink(ndev));
 124}
 125static DEVICE_ATTR_RO(iflink);
 126
 127static ssize_t format_name_assign_type(const struct net_device *dev, char *buf)
 128{
 129        return sprintf(buf, fmt_dec, dev->name_assign_type);
 130}
 131
 132static ssize_t name_assign_type_show(struct device *dev,
 133                                     struct device_attribute *attr,
 134                                     char *buf)
 135{
 136        struct net_device *ndev = to_net_dev(dev);
 137        ssize_t ret = -EINVAL;
 138
 139        if (ndev->name_assign_type != NET_NAME_UNKNOWN)
 140                ret = netdev_show(dev, attr, buf, format_name_assign_type);
 141
 142        return ret;
 143}
 144static DEVICE_ATTR_RO(name_assign_type);
 145
 146/* use same locking rules as GIFHWADDR ioctl's */
 147static ssize_t address_show(struct device *dev, struct device_attribute *attr,
 148                            char *buf)
 149{
 150        struct net_device *ndev = to_net_dev(dev);
 151        ssize_t ret = -EINVAL;
 152
 153        read_lock(&dev_base_lock);
 154        if (dev_isalive(ndev))
 155                ret = sysfs_format_mac(buf, ndev->dev_addr, ndev->addr_len);
 156        read_unlock(&dev_base_lock);
 157        return ret;
 158}
 159static DEVICE_ATTR_RO(address);
 160
 161static ssize_t broadcast_show(struct device *dev,
 162                              struct device_attribute *attr, char *buf)
 163{
 164        struct net_device *ndev = to_net_dev(dev);
 165
 166        if (dev_isalive(ndev))
 167                return sysfs_format_mac(buf, ndev->broadcast, ndev->addr_len);
 168        return -EINVAL;
 169}
 170static DEVICE_ATTR_RO(broadcast);
 171
 172static int change_carrier(struct net_device *dev, unsigned long new_carrier)
 173{
 174        if (!netif_running(dev))
 175                return -EINVAL;
 176        return dev_change_carrier(dev, (bool)new_carrier);
 177}
 178
 179static ssize_t carrier_store(struct device *dev, struct device_attribute *attr,
 180                             const char *buf, size_t len)
 181{
 182        return netdev_store(dev, attr, buf, len, change_carrier);
 183}
 184
 185static ssize_t carrier_show(struct device *dev,
 186                            struct device_attribute *attr, char *buf)
 187{
 188        struct net_device *netdev = to_net_dev(dev);
 189
 190        if (netif_running(netdev))
 191                return sprintf(buf, fmt_dec, !!netif_carrier_ok(netdev));
 192
 193        return -EINVAL;
 194}
 195static DEVICE_ATTR_RW(carrier);
 196
 197static ssize_t speed_show(struct device *dev,
 198                          struct device_attribute *attr, char *buf)
 199{
 200        struct net_device *netdev = to_net_dev(dev);
 201        int ret = -EINVAL;
 202
 203        if (!rtnl_trylock())
 204                return restart_syscall();
 205
 206        if (netif_running(netdev)) {
 207                struct ethtool_link_ksettings cmd;
 208
 209                if (!__ethtool_get_link_ksettings(netdev, &cmd))
 210                        ret = sprintf(buf, fmt_dec, cmd.base.speed);
 211        }
 212        rtnl_unlock();
 213        return ret;
 214}
 215static DEVICE_ATTR_RO(speed);
 216
 217static ssize_t duplex_show(struct device *dev,
 218                           struct device_attribute *attr, char *buf)
 219{
 220        struct net_device *netdev = to_net_dev(dev);
 221        int ret = -EINVAL;
 222
 223        if (!rtnl_trylock())
 224                return restart_syscall();
 225
 226        if (netif_running(netdev)) {
 227                struct ethtool_link_ksettings cmd;
 228
 229                if (!__ethtool_get_link_ksettings(netdev, &cmd)) {
 230                        const char *duplex;
 231
 232                        switch (cmd.base.duplex) {
 233                        case DUPLEX_HALF:
 234                                duplex = "half";
 235                                break;
 236                        case DUPLEX_FULL:
 237                                duplex = "full";
 238                                break;
 239                        default:
 240                                duplex = "unknown";
 241                                break;
 242                        }
 243                        ret = sprintf(buf, "%s\n", duplex);
 244                }
 245        }
 246        rtnl_unlock();
 247        return ret;
 248}
 249static DEVICE_ATTR_RO(duplex);
 250
 251static ssize_t dormant_show(struct device *dev,
 252                            struct device_attribute *attr, char *buf)
 253{
 254        struct net_device *netdev = to_net_dev(dev);
 255
 256        if (netif_running(netdev))
 257                return sprintf(buf, fmt_dec, !!netif_dormant(netdev));
 258
 259        return -EINVAL;
 260}
 261static DEVICE_ATTR_RO(dormant);
 262
 263static const char *const operstates[] = {
 264        "unknown",
 265        "notpresent", /* currently unused */
 266        "down",
 267        "lowerlayerdown",
 268        "testing", /* currently unused */
 269        "dormant",
 270        "up"
 271};
 272
 273static ssize_t operstate_show(struct device *dev,
 274                              struct device_attribute *attr, char *buf)
 275{
 276        const struct net_device *netdev = to_net_dev(dev);
 277        unsigned char operstate;
 278
 279        read_lock(&dev_base_lock);
 280        operstate = netdev->operstate;
 281        if (!netif_running(netdev))
 282                operstate = IF_OPER_DOWN;
 283        read_unlock(&dev_base_lock);
 284
 285        if (operstate >= ARRAY_SIZE(operstates))
 286                return -EINVAL; /* should not happen */
 287
 288        return sprintf(buf, "%s\n", operstates[operstate]);
 289}
 290static DEVICE_ATTR_RO(operstate);
 291
 292static ssize_t carrier_changes_show(struct device *dev,
 293                                    struct device_attribute *attr,
 294                                    char *buf)
 295{
 296        struct net_device *netdev = to_net_dev(dev);
 297
 298        return sprintf(buf, fmt_dec,
 299                       atomic_read(&netdev->carrier_up_count) +
 300                       atomic_read(&netdev->carrier_down_count));
 301}
 302static DEVICE_ATTR_RO(carrier_changes);
 303
 304static ssize_t carrier_up_count_show(struct device *dev,
 305                                     struct device_attribute *attr,
 306                                     char *buf)
 307{
 308        struct net_device *netdev = to_net_dev(dev);
 309
 310        return sprintf(buf, fmt_dec, atomic_read(&netdev->carrier_up_count));
 311}
 312static DEVICE_ATTR_RO(carrier_up_count);
 313
 314static ssize_t carrier_down_count_show(struct device *dev,
 315                                       struct device_attribute *attr,
 316                                       char *buf)
 317{
 318        struct net_device *netdev = to_net_dev(dev);
 319
 320        return sprintf(buf, fmt_dec, atomic_read(&netdev->carrier_down_count));
 321}
 322static DEVICE_ATTR_RO(carrier_down_count);
 323
 324/* read-write attributes */
 325
 326static int change_mtu(struct net_device *dev, unsigned long new_mtu)
 327{
 328        return dev_set_mtu(dev, (int)new_mtu);
 329}
 330
 331static ssize_t mtu_store(struct device *dev, struct device_attribute *attr,
 332                         const char *buf, size_t len)
 333{
 334        return netdev_store(dev, attr, buf, len, change_mtu);
 335}
 336NETDEVICE_SHOW_RW(mtu, fmt_dec);
 337
 338static int change_flags(struct net_device *dev, unsigned long new_flags)
 339{
 340        return dev_change_flags(dev, (unsigned int)new_flags);
 341}
 342
 343static ssize_t flags_store(struct device *dev, struct device_attribute *attr,
 344                           const char *buf, size_t len)
 345{
 346        return netdev_store(dev, attr, buf, len, change_flags);
 347}
 348NETDEVICE_SHOW_RW(flags, fmt_hex);
 349
 350static ssize_t tx_queue_len_store(struct device *dev,
 351                                  struct device_attribute *attr,
 352                                  const char *buf, size_t len)
 353{
 354        if (!capable(CAP_NET_ADMIN))
 355                return -EPERM;
 356
 357        return netdev_store(dev, attr, buf, len, dev_change_tx_queue_len);
 358}
 359NETDEVICE_SHOW_RW(tx_queue_len, fmt_dec);
 360
 361static int change_gro_flush_timeout(struct net_device *dev, unsigned long val)
 362{
 363        dev->gro_flush_timeout = val;
 364        return 0;
 365}
 366
 367static ssize_t gro_flush_timeout_store(struct device *dev,
 368                                       struct device_attribute *attr,
 369                                       const char *buf, size_t len)
 370{
 371        if (!capable(CAP_NET_ADMIN))
 372                return -EPERM;
 373
 374        return netdev_store(dev, attr, buf, len, change_gro_flush_timeout);
 375}
 376NETDEVICE_SHOW_RW(gro_flush_timeout, fmt_ulong);
 377
 378static ssize_t ifalias_store(struct device *dev, struct device_attribute *attr,
 379                             const char *buf, size_t len)
 380{
 381        struct net_device *netdev = to_net_dev(dev);
 382        struct net *net = dev_net(netdev);
 383        size_t count = len;
 384        ssize_t ret = 0;
 385
 386        if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
 387                return -EPERM;
 388
 389        /* ignore trailing newline */
 390        if (len >  0 && buf[len - 1] == '\n')
 391                --count;
 392
 393        if (!rtnl_trylock())
 394                return restart_syscall();
 395
 396        if (dev_isalive(netdev)) {
 397                ret = dev_set_alias(netdev, buf, count);
 398                if (ret < 0)
 399                        goto err;
 400                ret = len;
 401                netdev_state_change(netdev);
 402        }
 403err:
 404        rtnl_unlock();
 405
 406        return ret;
 407}
 408
 409static ssize_t ifalias_show(struct device *dev,
 410                            struct device_attribute *attr, char *buf)
 411{
 412        const struct net_device *netdev = to_net_dev(dev);
 413        char tmp[IFALIASZ];
 414        ssize_t ret = 0;
 415
 416        ret = dev_get_alias(netdev, tmp, sizeof(tmp));
 417        if (ret > 0)
 418                ret = sprintf(buf, "%s\n", tmp);
 419        return ret;
 420}
 421static DEVICE_ATTR_RW(ifalias);
 422
 423static int change_group(struct net_device *dev, unsigned long new_group)
 424{
 425        dev_set_group(dev, (int)new_group);
 426        return 0;
 427}
 428
 429static ssize_t group_store(struct device *dev, struct device_attribute *attr,
 430                           const char *buf, size_t len)
 431{
 432        return netdev_store(dev, attr, buf, len, change_group);
 433}
 434NETDEVICE_SHOW(group, fmt_dec);
 435static DEVICE_ATTR(netdev_group, 0644, group_show, group_store);
 436
 437static int change_proto_down(struct net_device *dev, unsigned long proto_down)
 438{
 439        return dev_change_proto_down(dev, (bool)proto_down);
 440}
 441
 442static ssize_t proto_down_store(struct device *dev,
 443                                struct device_attribute *attr,
 444                                const char *buf, size_t len)
 445{
 446        return netdev_store(dev, attr, buf, len, change_proto_down);
 447}
 448NETDEVICE_SHOW_RW(proto_down, fmt_dec);
 449
 450static ssize_t phys_port_id_show(struct device *dev,
 451                                 struct device_attribute *attr, char *buf)
 452{
 453        struct net_device *netdev = to_net_dev(dev);
 454        ssize_t ret = -EINVAL;
 455
 456        if (!rtnl_trylock())
 457                return restart_syscall();
 458
 459        if (dev_isalive(netdev)) {
 460                struct netdev_phys_item_id ppid;
 461
 462                ret = dev_get_phys_port_id(netdev, &ppid);
 463                if (!ret)
 464                        ret = sprintf(buf, "%*phN\n", ppid.id_len, ppid.id);
 465        }
 466        rtnl_unlock();
 467
 468        return ret;
 469}
 470static DEVICE_ATTR_RO(phys_port_id);
 471
 472static ssize_t phys_port_name_show(struct device *dev,
 473                                   struct device_attribute *attr, char *buf)
 474{
 475        struct net_device *netdev = to_net_dev(dev);
 476        ssize_t ret = -EINVAL;
 477
 478        if (!rtnl_trylock())
 479                return restart_syscall();
 480
 481        if (dev_isalive(netdev)) {
 482                char name[IFNAMSIZ];
 483
 484                ret = dev_get_phys_port_name(netdev, name, sizeof(name));
 485                if (!ret)
 486                        ret = sprintf(buf, "%s\n", name);
 487        }
 488        rtnl_unlock();
 489
 490        return ret;
 491}
 492static DEVICE_ATTR_RO(phys_port_name);
 493
 494static ssize_t phys_switch_id_show(struct device *dev,
 495                                   struct device_attribute *attr, char *buf)
 496{
 497        struct net_device *netdev = to_net_dev(dev);
 498        ssize_t ret = -EINVAL;
 499
 500        if (!rtnl_trylock())
 501                return restart_syscall();
 502
 503        if (dev_isalive(netdev)) {
 504                struct switchdev_attr attr = {
 505                        .orig_dev = netdev,
 506                        .id = SWITCHDEV_ATTR_ID_PORT_PARENT_ID,
 507                        .flags = SWITCHDEV_F_NO_RECURSE,
 508                };
 509
 510                ret = switchdev_port_attr_get(netdev, &attr);
 511                if (!ret)
 512                        ret = sprintf(buf, "%*phN\n", attr.u.ppid.id_len,
 513                                      attr.u.ppid.id);
 514        }
 515        rtnl_unlock();
 516
 517        return ret;
 518}
 519static DEVICE_ATTR_RO(phys_switch_id);
 520
 521static struct attribute *net_class_attrs[] __ro_after_init = {
 522        &dev_attr_netdev_group.attr,
 523        &dev_attr_type.attr,
 524        &dev_attr_dev_id.attr,
 525        &dev_attr_dev_port.attr,
 526        &dev_attr_iflink.attr,
 527        &dev_attr_ifindex.attr,
 528        &dev_attr_name_assign_type.attr,
 529        &dev_attr_addr_assign_type.attr,
 530        &dev_attr_addr_len.attr,
 531        &dev_attr_link_mode.attr,
 532        &dev_attr_address.attr,
 533        &dev_attr_broadcast.attr,
 534        &dev_attr_speed.attr,
 535        &dev_attr_duplex.attr,
 536        &dev_attr_dormant.attr,
 537        &dev_attr_operstate.attr,
 538        &dev_attr_carrier_changes.attr,
 539        &dev_attr_ifalias.attr,
 540        &dev_attr_carrier.attr,
 541        &dev_attr_mtu.attr,
 542        &dev_attr_flags.attr,
 543        &dev_attr_tx_queue_len.attr,
 544        &dev_attr_gro_flush_timeout.attr,
 545        &dev_attr_phys_port_id.attr,
 546        &dev_attr_phys_port_name.attr,
 547        &dev_attr_phys_switch_id.attr,
 548        &dev_attr_proto_down.attr,
 549        &dev_attr_carrier_up_count.attr,
 550        &dev_attr_carrier_down_count.attr,
 551        NULL,
 552};
 553ATTRIBUTE_GROUPS(net_class);
 554
 555/* Show a given an attribute in the statistics group */
 556static ssize_t netstat_show(const struct device *d,
 557                            struct device_attribute *attr, char *buf,
 558                            unsigned long offset)
 559{
 560        struct net_device *dev = to_net_dev(d);
 561        ssize_t ret = -EINVAL;
 562
 563        WARN_ON(offset > sizeof(struct rtnl_link_stats64) ||
 564                offset % sizeof(u64) != 0);
 565
 566        read_lock(&dev_base_lock);
 567        if (dev_isalive(dev)) {
 568                struct rtnl_link_stats64 temp;
 569                const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp);
 570
 571                ret = sprintf(buf, fmt_u64, *(u64 *)(((u8 *)stats) + offset));
 572        }
 573        read_unlock(&dev_base_lock);
 574        return ret;
 575}
 576
 577/* generate a read-only statistics attribute */
 578#define NETSTAT_ENTRY(name)                                             \
 579static ssize_t name##_show(struct device *d,                            \
 580                           struct device_attribute *attr, char *buf)    \
 581{                                                                       \
 582        return netstat_show(d, attr, buf,                               \
 583                            offsetof(struct rtnl_link_stats64, name));  \
 584}                                                                       \
 585static DEVICE_ATTR_RO(name)
 586
 587NETSTAT_ENTRY(rx_packets);
 588NETSTAT_ENTRY(tx_packets);
 589NETSTAT_ENTRY(rx_bytes);
 590NETSTAT_ENTRY(tx_bytes);
 591NETSTAT_ENTRY(rx_errors);
 592NETSTAT_ENTRY(tx_errors);
 593NETSTAT_ENTRY(rx_dropped);
 594NETSTAT_ENTRY(tx_dropped);
 595NETSTAT_ENTRY(multicast);
 596NETSTAT_ENTRY(collisions);
 597NETSTAT_ENTRY(rx_length_errors);
 598NETSTAT_ENTRY(rx_over_errors);
 599NETSTAT_ENTRY(rx_crc_errors);
 600NETSTAT_ENTRY(rx_frame_errors);
 601NETSTAT_ENTRY(rx_fifo_errors);
 602NETSTAT_ENTRY(rx_missed_errors);
 603NETSTAT_ENTRY(tx_aborted_errors);
 604NETSTAT_ENTRY(tx_carrier_errors);
 605NETSTAT_ENTRY(tx_fifo_errors);
 606NETSTAT_ENTRY(tx_heartbeat_errors);
 607NETSTAT_ENTRY(tx_window_errors);
 608NETSTAT_ENTRY(rx_compressed);
 609NETSTAT_ENTRY(tx_compressed);
 610NETSTAT_ENTRY(rx_nohandler);
 611
 612static struct attribute *netstat_attrs[] __ro_after_init = {
 613        &dev_attr_rx_packets.attr,
 614        &dev_attr_tx_packets.attr,
 615        &dev_attr_rx_bytes.attr,
 616        &dev_attr_tx_bytes.attr,
 617        &dev_attr_rx_errors.attr,
 618        &dev_attr_tx_errors.attr,
 619        &dev_attr_rx_dropped.attr,
 620        &dev_attr_tx_dropped.attr,
 621        &dev_attr_multicast.attr,
 622        &dev_attr_collisions.attr,
 623        &dev_attr_rx_length_errors.attr,
 624        &dev_attr_rx_over_errors.attr,
 625        &dev_attr_rx_crc_errors.attr,
 626        &dev_attr_rx_frame_errors.attr,
 627        &dev_attr_rx_fifo_errors.attr,
 628        &dev_attr_rx_missed_errors.attr,
 629        &dev_attr_tx_aborted_errors.attr,
 630        &dev_attr_tx_carrier_errors.attr,
 631        &dev_attr_tx_fifo_errors.attr,
 632        &dev_attr_tx_heartbeat_errors.attr,
 633        &dev_attr_tx_window_errors.attr,
 634        &dev_attr_rx_compressed.attr,
 635        &dev_attr_tx_compressed.attr,
 636        &dev_attr_rx_nohandler.attr,
 637        NULL
 638};
 639
 640static const struct attribute_group netstat_group = {
 641        .name  = "statistics",
 642        .attrs  = netstat_attrs,
 643};
 644
 645#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
 646static struct attribute *wireless_attrs[] = {
 647        NULL
 648};
 649
 650static const struct attribute_group wireless_group = {
 651        .name = "wireless",
 652        .attrs = wireless_attrs,
 653};
 654#endif
 655
 656#else /* CONFIG_SYSFS */
 657#define net_class_groups        NULL
 658#endif /* CONFIG_SYSFS */
 659
 660#ifdef CONFIG_SYSFS
 661#define to_rx_queue_attr(_attr) \
 662        container_of(_attr, struct rx_queue_attribute, attr)
 663
 664#define to_rx_queue(obj) container_of(obj, struct netdev_rx_queue, kobj)
 665
 666static ssize_t rx_queue_attr_show(struct kobject *kobj, struct attribute *attr,
 667                                  char *buf)
 668{
 669        const struct rx_queue_attribute *attribute = to_rx_queue_attr(attr);
 670        struct netdev_rx_queue *queue = to_rx_queue(kobj);
 671
 672        if (!attribute->show)
 673                return -EIO;
 674
 675        return attribute->show(queue, buf);
 676}
 677
 678static ssize_t rx_queue_attr_store(struct kobject *kobj, struct attribute *attr,
 679                                   const char *buf, size_t count)
 680{
 681        const struct rx_queue_attribute *attribute = to_rx_queue_attr(attr);
 682        struct netdev_rx_queue *queue = to_rx_queue(kobj);
 683
 684        if (!attribute->store)
 685                return -EIO;
 686
 687        return attribute->store(queue, buf, count);
 688}
 689
 690static const struct sysfs_ops rx_queue_sysfs_ops = {
 691        .show = rx_queue_attr_show,
 692        .store = rx_queue_attr_store,
 693};
 694
 695#ifdef CONFIG_RPS
 696static ssize_t show_rps_map(struct netdev_rx_queue *queue, char *buf)
 697{
 698        struct rps_map *map;
 699        cpumask_var_t mask;
 700        int i, len;
 701
 702        if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
 703                return -ENOMEM;
 704
 705        rcu_read_lock();
 706        map = rcu_dereference(queue->rps_map);
 707        if (map)
 708                for (i = 0; i < map->len; i++)
 709                        cpumask_set_cpu(map->cpus[i], mask);
 710
 711        len = snprintf(buf, PAGE_SIZE, "%*pb\n", cpumask_pr_args(mask));
 712        rcu_read_unlock();
 713        free_cpumask_var(mask);
 714
 715        return len < PAGE_SIZE ? len : -EINVAL;
 716}
 717
 718static ssize_t store_rps_map(struct netdev_rx_queue *queue,
 719                             const char *buf, size_t len)
 720{
 721        struct rps_map *old_map, *map;
 722        cpumask_var_t mask;
 723        int err, cpu, i;
 724        static DEFINE_MUTEX(rps_map_mutex);
 725
 726        if (!capable(CAP_NET_ADMIN))
 727                return -EPERM;
 728
 729        if (!alloc_cpumask_var(&mask, GFP_KERNEL))
 730                return -ENOMEM;
 731
 732        err = bitmap_parse(buf, len, cpumask_bits(mask), nr_cpumask_bits);
 733        if (err) {
 734                free_cpumask_var(mask);
 735                return err;
 736        }
 737
 738        map = kzalloc(max_t(unsigned int,
 739                            RPS_MAP_SIZE(cpumask_weight(mask)), L1_CACHE_BYTES),
 740                      GFP_KERNEL);
 741        if (!map) {
 742                free_cpumask_var(mask);
 743                return -ENOMEM;
 744        }
 745
 746        i = 0;
 747        for_each_cpu_and(cpu, mask, cpu_online_mask)
 748                map->cpus[i++] = cpu;
 749
 750        if (i) {
 751                map->len = i;
 752        } else {
 753                kfree(map);
 754                map = NULL;
 755        }
 756
 757        mutex_lock(&rps_map_mutex);
 758        old_map = rcu_dereference_protected(queue->rps_map,
 759                                            mutex_is_locked(&rps_map_mutex));
 760        rcu_assign_pointer(queue->rps_map, map);
 761
 762        if (map)
 763                static_key_slow_inc(&rps_needed);
 764        if (old_map)
 765                static_key_slow_dec(&rps_needed);
 766
 767        mutex_unlock(&rps_map_mutex);
 768
 769        if (old_map)
 770                kfree_rcu(old_map, rcu);
 771
 772        free_cpumask_var(mask);
 773        return len;
 774}
 775
 776static ssize_t show_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
 777                                           char *buf)
 778{
 779        struct rps_dev_flow_table *flow_table;
 780        unsigned long val = 0;
 781
 782        rcu_read_lock();
 783        flow_table = rcu_dereference(queue->rps_flow_table);
 784        if (flow_table)
 785                val = (unsigned long)flow_table->mask + 1;
 786        rcu_read_unlock();
 787
 788        return sprintf(buf, "%lu\n", val);
 789}
 790
 791static void rps_dev_flow_table_release(struct rcu_head *rcu)
 792{
 793        struct rps_dev_flow_table *table = container_of(rcu,
 794            struct rps_dev_flow_table, rcu);
 795        vfree(table);
 796}
 797
 798static ssize_t store_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
 799                                            const char *buf, size_t len)
 800{
 801        unsigned long mask, count;
 802        struct rps_dev_flow_table *table, *old_table;
 803        static DEFINE_SPINLOCK(rps_dev_flow_lock);
 804        int rc;
 805
 806        if (!capable(CAP_NET_ADMIN))
 807                return -EPERM;
 808
 809        rc = kstrtoul(buf, 0, &count);
 810        if (rc < 0)
 811                return rc;
 812
 813        if (count) {
 814                mask = count - 1;
 815                /* mask = roundup_pow_of_two(count) - 1;
 816                 * without overflows...
 817                 */
 818                while ((mask | (mask >> 1)) != mask)
 819                        mask |= (mask >> 1);
 820                /* On 64 bit arches, must check mask fits in table->mask (u32),
 821                 * and on 32bit arches, must check
 822                 * RPS_DEV_FLOW_TABLE_SIZE(mask + 1) doesn't overflow.
 823                 */
 824#if BITS_PER_LONG > 32
 825                if (mask > (unsigned long)(u32)mask)
 826                        return -EINVAL;
 827#else
 828                if (mask > (ULONG_MAX - RPS_DEV_FLOW_TABLE_SIZE(1))
 829                                / sizeof(struct rps_dev_flow)) {
 830                        /* Enforce a limit to prevent overflow */
 831                        return -EINVAL;
 832                }
 833#endif
 834                table = vmalloc(RPS_DEV_FLOW_TABLE_SIZE(mask + 1));
 835                if (!table)
 836                        return -ENOMEM;
 837
 838                table->mask = mask;
 839                for (count = 0; count <= mask; count++)
 840                        table->flows[count].cpu = RPS_NO_CPU;
 841        } else {
 842                table = NULL;
 843        }
 844
 845        spin_lock(&rps_dev_flow_lock);
 846        old_table = rcu_dereference_protected(queue->rps_flow_table,
 847                                              lockdep_is_held(&rps_dev_flow_lock));
 848        rcu_assign_pointer(queue->rps_flow_table, table);
 849        spin_unlock(&rps_dev_flow_lock);
 850
 851        if (old_table)
 852                call_rcu(&old_table->rcu, rps_dev_flow_table_release);
 853
 854        return len;
 855}
 856
 857static struct rx_queue_attribute rps_cpus_attribute __ro_after_init
 858        = __ATTR(rps_cpus, 0644, show_rps_map, store_rps_map);
 859
 860static struct rx_queue_attribute rps_dev_flow_table_cnt_attribute __ro_after_init
 861        = __ATTR(rps_flow_cnt, 0644,
 862                 show_rps_dev_flow_table_cnt, store_rps_dev_flow_table_cnt);
 863#endif /* CONFIG_RPS */
 864
 865static struct attribute *rx_queue_default_attrs[] __ro_after_init = {
 866#ifdef CONFIG_RPS
 867        &rps_cpus_attribute.attr,
 868        &rps_dev_flow_table_cnt_attribute.attr,
 869#endif
 870        NULL
 871};
 872
 873static void rx_queue_release(struct kobject *kobj)
 874{
 875        struct netdev_rx_queue *queue = to_rx_queue(kobj);
 876#ifdef CONFIG_RPS
 877        struct rps_map *map;
 878        struct rps_dev_flow_table *flow_table;
 879
 880        map = rcu_dereference_protected(queue->rps_map, 1);
 881        if (map) {
 882                RCU_INIT_POINTER(queue->rps_map, NULL);
 883                kfree_rcu(map, rcu);
 884        }
 885
 886        flow_table = rcu_dereference_protected(queue->rps_flow_table, 1);
 887        if (flow_table) {
 888                RCU_INIT_POINTER(queue->rps_flow_table, NULL);
 889                call_rcu(&flow_table->rcu, rps_dev_flow_table_release);
 890        }
 891#endif
 892
 893        memset(kobj, 0, sizeof(*kobj));
 894        dev_put(queue->dev);
 895}
 896
 897static const void *rx_queue_namespace(struct kobject *kobj)
 898{
 899        struct netdev_rx_queue *queue = to_rx_queue(kobj);
 900        struct device *dev = &queue->dev->dev;
 901        const void *ns = NULL;
 902
 903        if (dev->class && dev->class->ns_type)
 904                ns = dev->class->namespace(dev);
 905
 906        return ns;
 907}
 908
 909static void rx_queue_get_ownership(struct kobject *kobj,
 910                                   kuid_t *uid, kgid_t *gid)
 911{
 912        const struct net *net = rx_queue_namespace(kobj);
 913
 914        net_ns_get_ownership(net, uid, gid);
 915}
 916
 917static struct kobj_type rx_queue_ktype __ro_after_init = {
 918        .sysfs_ops = &rx_queue_sysfs_ops,
 919        .release = rx_queue_release,
 920        .default_attrs = rx_queue_default_attrs,
 921        .namespace = rx_queue_namespace,
 922        .get_ownership = rx_queue_get_ownership,
 923};
 924
 925static int rx_queue_add_kobject(struct net_device *dev, int index)
 926{
 927        struct netdev_rx_queue *queue = dev->_rx + index;
 928        struct kobject *kobj = &queue->kobj;
 929        int error = 0;
 930
 931        kobj->kset = dev->queues_kset;
 932        error = kobject_init_and_add(kobj, &rx_queue_ktype, NULL,
 933                                     "rx-%u", index);
 934        if (error)
 935                return error;
 936
 937        if (dev->sysfs_rx_queue_group) {
 938                error = sysfs_create_group(kobj, dev->sysfs_rx_queue_group);
 939                if (error) {
 940                        kobject_put(kobj);
 941                        return error;
 942                }
 943        }
 944
 945        kobject_uevent(kobj, KOBJ_ADD);
 946        dev_hold(queue->dev);
 947
 948        return error;
 949}
 950#endif /* CONFIG_SYSFS */
 951
 952int
 953net_rx_queue_update_kobjects(struct net_device *dev, int old_num, int new_num)
 954{
 955#ifdef CONFIG_SYSFS
 956        int i;
 957        int error = 0;
 958
 959#ifndef CONFIG_RPS
 960        if (!dev->sysfs_rx_queue_group)
 961                return 0;
 962#endif
 963        for (i = old_num; i < new_num; i++) {
 964                error = rx_queue_add_kobject(dev, i);
 965                if (error) {
 966                        new_num = old_num;
 967                        break;
 968                }
 969        }
 970
 971        while (--i >= new_num) {
 972                struct kobject *kobj = &dev->_rx[i].kobj;
 973
 974                if (!refcount_read(&dev_net(dev)->count))
 975                        kobj->uevent_suppress = 1;
 976                if (dev->sysfs_rx_queue_group)
 977                        sysfs_remove_group(kobj, dev->sysfs_rx_queue_group);
 978                kobject_put(kobj);
 979        }
 980
 981        return error;
 982#else
 983        return 0;
 984#endif
 985}
 986
 987#ifdef CONFIG_SYSFS
 988/*
 989 * netdev_queue sysfs structures and functions.
 990 */
 991struct netdev_queue_attribute {
 992        struct attribute attr;
 993        ssize_t (*show)(struct netdev_queue *queue, char *buf);
 994        ssize_t (*store)(struct netdev_queue *queue,
 995                         const char *buf, size_t len);
 996};
 997#define to_netdev_queue_attr(_attr) \
 998        container_of(_attr, struct netdev_queue_attribute, attr)
 999
1000#define to_netdev_queue(obj) container_of(obj, struct netdev_queue, kobj)
1001
1002static ssize_t netdev_queue_attr_show(struct kobject *kobj,
1003                                      struct attribute *attr, char *buf)
1004{
1005        const struct netdev_queue_attribute *attribute
1006                = to_netdev_queue_attr(attr);
1007        struct netdev_queue *queue = to_netdev_queue(kobj);
1008
1009        if (!attribute->show)
1010                return -EIO;
1011
1012        return attribute->show(queue, buf);
1013}
1014
1015static ssize_t netdev_queue_attr_store(struct kobject *kobj,
1016                                       struct attribute *attr,
1017                                       const char *buf, size_t count)
1018{
1019        const struct netdev_queue_attribute *attribute
1020                = to_netdev_queue_attr(attr);
1021        struct netdev_queue *queue = to_netdev_queue(kobj);
1022
1023        if (!attribute->store)
1024                return -EIO;
1025
1026        return attribute->store(queue, buf, count);
1027}
1028
1029static const struct sysfs_ops netdev_queue_sysfs_ops = {
1030        .show = netdev_queue_attr_show,
1031        .store = netdev_queue_attr_store,
1032};
1033
1034static ssize_t tx_timeout_show(struct netdev_queue *queue, char *buf)
1035{
1036        unsigned long trans_timeout;
1037
1038        spin_lock_irq(&queue->_xmit_lock);
1039        trans_timeout = queue->trans_timeout;
1040        spin_unlock_irq(&queue->_xmit_lock);
1041
1042        return sprintf(buf, "%lu", trans_timeout);
1043}
1044
1045static unsigned int get_netdev_queue_index(struct netdev_queue *queue)
1046{
1047        struct net_device *dev = queue->dev;
1048        unsigned int i;
1049
1050        i = queue - dev->_tx;
1051        BUG_ON(i >= dev->num_tx_queues);
1052
1053        return i;
1054}
1055
1056static ssize_t traffic_class_show(struct netdev_queue *queue,
1057                                  char *buf)
1058{
1059        struct net_device *dev = queue->dev;
1060        int index;
1061        int tc;
1062
1063        if (!netif_is_multiqueue(dev))
1064                return -ENOENT;
1065
1066        index = get_netdev_queue_index(queue);
1067
1068        /* If queue belongs to subordinate dev use its TC mapping */
1069        dev = netdev_get_tx_queue(dev, index)->sb_dev ? : dev;
1070
1071        tc = netdev_txq_to_tc(dev, index);
1072        if (tc < 0)
1073                return -EINVAL;
1074
1075        /* We can report the traffic class one of two ways:
1076         * Subordinate device traffic classes are reported with the traffic
1077         * class first, and then the subordinate class so for example TC0 on
1078         * subordinate device 2 will be reported as "0-2". If the queue
1079         * belongs to the root device it will be reported with just the
1080         * traffic class, so just "0" for TC 0 for example.
1081         */
1082        return dev->num_tc < 0 ? sprintf(buf, "%u%d\n", tc, dev->num_tc) :
1083                                 sprintf(buf, "%u\n", tc);
1084}
1085
1086#ifdef CONFIG_XPS
1087static ssize_t tx_maxrate_show(struct netdev_queue *queue,
1088                               char *buf)
1089{
1090        return sprintf(buf, "%lu\n", queue->tx_maxrate);
1091}
1092
1093static ssize_t tx_maxrate_store(struct netdev_queue *queue,
1094                                const char *buf, size_t len)
1095{
1096        struct net_device *dev = queue->dev;
1097        int err, index = get_netdev_queue_index(queue);
1098        u32 rate = 0;
1099
1100        if (!capable(CAP_NET_ADMIN))
1101                return -EPERM;
1102
1103        err = kstrtou32(buf, 10, &rate);
1104        if (err < 0)
1105                return err;
1106
1107        if (!rtnl_trylock())
1108                return restart_syscall();
1109
1110        err = -EOPNOTSUPP;
1111        if (dev->netdev_ops->ndo_set_tx_maxrate)
1112                err = dev->netdev_ops->ndo_set_tx_maxrate(dev, index, rate);
1113
1114        rtnl_unlock();
1115        if (!err) {
1116                queue->tx_maxrate = rate;
1117                return len;
1118        }
1119        return err;
1120}
1121
1122static struct netdev_queue_attribute queue_tx_maxrate __ro_after_init
1123        = __ATTR_RW(tx_maxrate);
1124#endif
1125
1126static struct netdev_queue_attribute queue_trans_timeout __ro_after_init
1127        = __ATTR_RO(tx_timeout);
1128
1129static struct netdev_queue_attribute queue_traffic_class __ro_after_init
1130        = __ATTR_RO(traffic_class);
1131
1132#ifdef CONFIG_BQL
1133/*
1134 * Byte queue limits sysfs structures and functions.
1135 */
1136static ssize_t bql_show(char *buf, unsigned int value)
1137{
1138        return sprintf(buf, "%u\n", value);
1139}
1140
1141static ssize_t bql_set(const char *buf, const size_t count,
1142                       unsigned int *pvalue)
1143{
1144        unsigned int value;
1145        int err;
1146
1147        if (!strcmp(buf, "max") || !strcmp(buf, "max\n")) {
1148                value = DQL_MAX_LIMIT;
1149        } else {
1150                err = kstrtouint(buf, 10, &value);
1151                if (err < 0)
1152                        return err;
1153                if (value > DQL_MAX_LIMIT)
1154                        return -EINVAL;
1155        }
1156
1157        *pvalue = value;
1158
1159        return count;
1160}
1161
1162static ssize_t bql_show_hold_time(struct netdev_queue *queue,
1163                                  char *buf)
1164{
1165        struct dql *dql = &queue->dql;
1166
1167        return sprintf(buf, "%u\n", jiffies_to_msecs(dql->slack_hold_time));
1168}
1169
1170static ssize_t bql_set_hold_time(struct netdev_queue *queue,
1171                                 const char *buf, size_t len)
1172{
1173        struct dql *dql = &queue->dql;
1174        unsigned int value;
1175        int err;
1176
1177        err = kstrtouint(buf, 10, &value);
1178        if (err < 0)
1179                return err;
1180
1181        dql->slack_hold_time = msecs_to_jiffies(value);
1182
1183        return len;
1184}
1185
1186static struct netdev_queue_attribute bql_hold_time_attribute __ro_after_init
1187        = __ATTR(hold_time, 0644,
1188                 bql_show_hold_time, bql_set_hold_time);
1189
1190static ssize_t bql_show_inflight(struct netdev_queue *queue,
1191                                 char *buf)
1192{
1193        struct dql *dql = &queue->dql;
1194
1195        return sprintf(buf, "%u\n", dql->num_queued - dql->num_completed);
1196}
1197
1198static struct netdev_queue_attribute bql_inflight_attribute __ro_after_init =
1199        __ATTR(inflight, 0444, bql_show_inflight, NULL);
1200
1201#define BQL_ATTR(NAME, FIELD)                                           \
1202static ssize_t bql_show_ ## NAME(struct netdev_queue *queue,            \
1203                                 char *buf)                             \
1204{                                                                       \
1205        return bql_show(buf, queue->dql.FIELD);                         \
1206}                                                                       \
1207                                                                        \
1208static ssize_t bql_set_ ## NAME(struct netdev_queue *queue,             \
1209                                const char *buf, size_t len)            \
1210{                                                                       \
1211        return bql_set(buf, len, &queue->dql.FIELD);                    \
1212}                                                                       \
1213                                                                        \
1214static struct netdev_queue_attribute bql_ ## NAME ## _attribute __ro_after_init \
1215        = __ATTR(NAME, 0644,                            \
1216                 bql_show_ ## NAME, bql_set_ ## NAME)
1217
1218BQL_ATTR(limit, limit);
1219BQL_ATTR(limit_max, max_limit);
1220BQL_ATTR(limit_min, min_limit);
1221
1222static struct attribute *dql_attrs[] __ro_after_init = {
1223        &bql_limit_attribute.attr,
1224        &bql_limit_max_attribute.attr,
1225        &bql_limit_min_attribute.attr,
1226        &bql_hold_time_attribute.attr,
1227        &bql_inflight_attribute.attr,
1228        NULL
1229};
1230
1231static const struct attribute_group dql_group = {
1232        .name  = "byte_queue_limits",
1233        .attrs  = dql_attrs,
1234};
1235#endif /* CONFIG_BQL */
1236
1237#ifdef CONFIG_XPS
1238static ssize_t xps_cpus_show(struct netdev_queue *queue,
1239                             char *buf)
1240{
1241        struct net_device *dev = queue->dev;
1242        int cpu, len, num_tc = 1, tc = 0;
1243        struct xps_dev_maps *dev_maps;
1244        cpumask_var_t mask;
1245        unsigned long index;
1246
1247        if (!netif_is_multiqueue(dev))
1248                return -ENOENT;
1249
1250        index = get_netdev_queue_index(queue);
1251
1252        if (dev->num_tc) {
1253                /* Do not allow XPS on subordinate device directly */
1254                num_tc = dev->num_tc;
1255                if (num_tc < 0)
1256                        return -EINVAL;
1257
1258                /* If queue belongs to subordinate dev use its map */
1259                dev = netdev_get_tx_queue(dev, index)->sb_dev ? : dev;
1260
1261                tc = netdev_txq_to_tc(dev, index);
1262                if (tc < 0)
1263                        return -EINVAL;
1264        }
1265
1266        if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
1267                return -ENOMEM;
1268
1269        rcu_read_lock();
1270        dev_maps = rcu_dereference(dev->xps_cpus_map);
1271        if (dev_maps) {
1272                for_each_possible_cpu(cpu) {
1273                        int i, tci = cpu * num_tc + tc;
1274                        struct xps_map *map;
1275
1276                        map = rcu_dereference(dev_maps->attr_map[tci]);
1277                        if (!map)
1278                                continue;
1279
1280                        for (i = map->len; i--;) {
1281                                if (map->queues[i] == index) {
1282                                        cpumask_set_cpu(cpu, mask);
1283                                        break;
1284                                }
1285                        }
1286                }
1287        }
1288        rcu_read_unlock();
1289
1290        len = snprintf(buf, PAGE_SIZE, "%*pb\n", cpumask_pr_args(mask));
1291        free_cpumask_var(mask);
1292        return len < PAGE_SIZE ? len : -EINVAL;
1293}
1294
1295static ssize_t xps_cpus_store(struct netdev_queue *queue,
1296                              const char *buf, size_t len)
1297{
1298        struct net_device *dev = queue->dev;
1299        unsigned long index;
1300        cpumask_var_t mask;
1301        int err;
1302
1303        if (!netif_is_multiqueue(dev))
1304                return -ENOENT;
1305
1306        if (!capable(CAP_NET_ADMIN))
1307                return -EPERM;
1308
1309        if (!alloc_cpumask_var(&mask, GFP_KERNEL))
1310                return -ENOMEM;
1311
1312        index = get_netdev_queue_index(queue);
1313
1314        err = bitmap_parse(buf, len, cpumask_bits(mask), nr_cpumask_bits);
1315        if (err) {
1316                free_cpumask_var(mask);
1317                return err;
1318        }
1319
1320        err = netif_set_xps_queue(dev, mask, index);
1321
1322        free_cpumask_var(mask);
1323
1324        return err ? : len;
1325}
1326
1327static struct netdev_queue_attribute xps_cpus_attribute __ro_after_init
1328        = __ATTR_RW(xps_cpus);
1329
1330static ssize_t xps_rxqs_show(struct netdev_queue *queue, char *buf)
1331{
1332        struct net_device *dev = queue->dev;
1333        struct xps_dev_maps *dev_maps;
1334        unsigned long *mask, index;
1335        int j, len, num_tc = 1, tc = 0;
1336
1337        index = get_netdev_queue_index(queue);
1338
1339        if (dev->num_tc) {
1340                num_tc = dev->num_tc;
1341                tc = netdev_txq_to_tc(dev, index);
1342                if (tc < 0)
1343                        return -EINVAL;
1344        }
1345        mask = kcalloc(BITS_TO_LONGS(dev->num_rx_queues), sizeof(long),
1346                       GFP_KERNEL);
1347        if (!mask)
1348                return -ENOMEM;
1349
1350        rcu_read_lock();
1351        dev_maps = rcu_dereference(dev->xps_rxqs_map);
1352        if (!dev_maps)
1353                goto out_no_maps;
1354
1355        for (j = -1; j = netif_attrmask_next(j, NULL, dev->num_rx_queues),
1356             j < dev->num_rx_queues;) {
1357                int i, tci = j * num_tc + tc;
1358                struct xps_map *map;
1359
1360                map = rcu_dereference(dev_maps->attr_map[tci]);
1361                if (!map)
1362                        continue;
1363
1364                for (i = map->len; i--;) {
1365                        if (map->queues[i] == index) {
1366                                set_bit(j, mask);
1367                                break;
1368                        }
1369                }
1370        }
1371out_no_maps:
1372        rcu_read_unlock();
1373
1374        len = bitmap_print_to_pagebuf(false, buf, mask, dev->num_rx_queues);
1375        kfree(mask);
1376
1377        return len < PAGE_SIZE ? len : -EINVAL;
1378}
1379
1380static ssize_t xps_rxqs_store(struct netdev_queue *queue, const char *buf,
1381                              size_t len)
1382{
1383        struct net_device *dev = queue->dev;
1384        struct net *net = dev_net(dev);
1385        unsigned long *mask, index;
1386        int err;
1387
1388        if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1389                return -EPERM;
1390
1391        mask = kcalloc(BITS_TO_LONGS(dev->num_rx_queues), sizeof(long),
1392                       GFP_KERNEL);
1393        if (!mask)
1394                return -ENOMEM;
1395
1396        index = get_netdev_queue_index(queue);
1397
1398        err = bitmap_parse(buf, len, mask, dev->num_rx_queues);
1399        if (err) {
1400                kfree(mask);
1401                return err;
1402        }
1403
1404        cpus_read_lock();
1405        err = __netif_set_xps_queue(dev, mask, index, true);
1406        cpus_read_unlock();
1407
1408        kfree(mask);
1409        return err ? : len;
1410}
1411
1412static struct netdev_queue_attribute xps_rxqs_attribute __ro_after_init
1413        = __ATTR_RW(xps_rxqs);
1414#endif /* CONFIG_XPS */
1415
1416static struct attribute *netdev_queue_default_attrs[] __ro_after_init = {
1417        &queue_trans_timeout.attr,
1418        &queue_traffic_class.attr,
1419#ifdef CONFIG_XPS
1420        &xps_cpus_attribute.attr,
1421        &xps_rxqs_attribute.attr,
1422        &queue_tx_maxrate.attr,
1423#endif
1424        NULL
1425};
1426
1427static void netdev_queue_release(struct kobject *kobj)
1428{
1429        struct netdev_queue *queue = to_netdev_queue(kobj);
1430
1431        memset(kobj, 0, sizeof(*kobj));
1432        dev_put(queue->dev);
1433}
1434
1435static const void *netdev_queue_namespace(struct kobject *kobj)
1436{
1437        struct netdev_queue *queue = to_netdev_queue(kobj);
1438        struct device *dev = &queue->dev->dev;
1439        const void *ns = NULL;
1440
1441        if (dev->class && dev->class->ns_type)
1442                ns = dev->class->namespace(dev);
1443
1444        return ns;
1445}
1446
1447static void netdev_queue_get_ownership(struct kobject *kobj,
1448                                       kuid_t *uid, kgid_t *gid)
1449{
1450        const struct net *net = netdev_queue_namespace(kobj);
1451
1452        net_ns_get_ownership(net, uid, gid);
1453}
1454
1455static struct kobj_type netdev_queue_ktype __ro_after_init = {
1456        .sysfs_ops = &netdev_queue_sysfs_ops,
1457        .release = netdev_queue_release,
1458        .default_attrs = netdev_queue_default_attrs,
1459        .namespace = netdev_queue_namespace,
1460        .get_ownership = netdev_queue_get_ownership,
1461};
1462
1463static int netdev_queue_add_kobject(struct net_device *dev, int index)
1464{
1465        struct netdev_queue *queue = dev->_tx + index;
1466        struct kobject *kobj = &queue->kobj;
1467        int error = 0;
1468
1469        kobj->kset = dev->queues_kset;
1470        error = kobject_init_and_add(kobj, &netdev_queue_ktype, NULL,
1471                                     "tx-%u", index);
1472        if (error)
1473                return error;
1474
1475#ifdef CONFIG_BQL
1476        error = sysfs_create_group(kobj, &dql_group);
1477        if (error) {
1478                kobject_put(kobj);
1479                return error;
1480        }
1481#endif
1482
1483        kobject_uevent(kobj, KOBJ_ADD);
1484        dev_hold(queue->dev);
1485
1486        return 0;
1487}
1488#endif /* CONFIG_SYSFS */
1489
1490int
1491netdev_queue_update_kobjects(struct net_device *dev, int old_num, int new_num)
1492{
1493#ifdef CONFIG_SYSFS
1494        int i;
1495        int error = 0;
1496
1497        for (i = old_num; i < new_num; i++) {
1498                error = netdev_queue_add_kobject(dev, i);
1499                if (error) {
1500                        new_num = old_num;
1501                        break;
1502                }
1503        }
1504
1505        while (--i >= new_num) {
1506                struct netdev_queue *queue = dev->_tx + i;
1507
1508                if (!refcount_read(&dev_net(dev)->count))
1509                        queue->kobj.uevent_suppress = 1;
1510#ifdef CONFIG_BQL
1511                sysfs_remove_group(&queue->kobj, &dql_group);
1512#endif
1513                kobject_put(&queue->kobj);
1514        }
1515
1516        return error;
1517#else
1518        return 0;
1519#endif /* CONFIG_SYSFS */
1520}
1521
1522static int register_queue_kobjects(struct net_device *dev)
1523{
1524        int error = 0, txq = 0, rxq = 0, real_rx = 0, real_tx = 0;
1525
1526#ifdef CONFIG_SYSFS
1527        dev->queues_kset = kset_create_and_add("queues",
1528                                               NULL, &dev->dev.kobj);
1529        if (!dev->queues_kset)
1530                return -ENOMEM;
1531        real_rx = dev->real_num_rx_queues;
1532#endif
1533        real_tx = dev->real_num_tx_queues;
1534
1535        error = net_rx_queue_update_kobjects(dev, 0, real_rx);
1536        if (error)
1537                goto error;
1538        rxq = real_rx;
1539
1540        error = netdev_queue_update_kobjects(dev, 0, real_tx);
1541        if (error)
1542                goto error;
1543        txq = real_tx;
1544
1545        return 0;
1546
1547error:
1548        netdev_queue_update_kobjects(dev, txq, 0);
1549        net_rx_queue_update_kobjects(dev, rxq, 0);
1550        return error;
1551}
1552
1553static void remove_queue_kobjects(struct net_device *dev)
1554{
1555        int real_rx = 0, real_tx = 0;
1556
1557#ifdef CONFIG_SYSFS
1558        real_rx = dev->real_num_rx_queues;
1559#endif
1560        real_tx = dev->real_num_tx_queues;
1561
1562        net_rx_queue_update_kobjects(dev, real_rx, 0);
1563        netdev_queue_update_kobjects(dev, real_tx, 0);
1564#ifdef CONFIG_SYSFS
1565        kset_unregister(dev->queues_kset);
1566#endif
1567}
1568
1569static bool net_current_may_mount(void)
1570{
1571        struct net *net = current->nsproxy->net_ns;
1572
1573        return ns_capable(net->user_ns, CAP_SYS_ADMIN);
1574}
1575
1576static void *net_grab_current_ns(void)
1577{
1578        struct net *ns = current->nsproxy->net_ns;
1579#ifdef CONFIG_NET_NS
1580        if (ns)
1581                refcount_inc(&ns->passive);
1582#endif
1583        return ns;
1584}
1585
1586static const void *net_initial_ns(void)
1587{
1588        return &init_net;
1589}
1590
1591static const void *net_netlink_ns(struct sock *sk)
1592{
1593        return sock_net(sk);
1594}
1595
1596const struct kobj_ns_type_operations net_ns_type_operations = {
1597        .type = KOBJ_NS_TYPE_NET,
1598        .current_may_mount = net_current_may_mount,
1599        .grab_current_ns = net_grab_current_ns,
1600        .netlink_ns = net_netlink_ns,
1601        .initial_ns = net_initial_ns,
1602        .drop_ns = net_drop_ns,
1603};
1604EXPORT_SYMBOL_GPL(net_ns_type_operations);
1605
1606static int netdev_uevent(struct device *d, struct kobj_uevent_env *env)
1607{
1608        struct net_device *dev = to_net_dev(d);
1609        int retval;
1610
1611        /* pass interface to uevent. */
1612        retval = add_uevent_var(env, "INTERFACE=%s", dev->name);
1613        if (retval)
1614                goto exit;
1615
1616        /* pass ifindex to uevent.
1617         * ifindex is useful as it won't change (interface name may change)
1618         * and is what RtNetlink uses natively.
1619         */
1620        retval = add_uevent_var(env, "IFINDEX=%d", dev->ifindex);
1621
1622exit:
1623        return retval;
1624}
1625
1626/*
1627 *      netdev_release -- destroy and free a dead device.
1628 *      Called when last reference to device kobject is gone.
1629 */
1630static void netdev_release(struct device *d)
1631{
1632        struct net_device *dev = to_net_dev(d);
1633
1634        BUG_ON(dev->reg_state != NETREG_RELEASED);
1635
1636        /* no need to wait for rcu grace period:
1637         * device is dead and about to be freed.
1638         */
1639        kfree(rcu_access_pointer(dev->ifalias));
1640        netdev_freemem(dev);
1641}
1642
1643static const void *net_namespace(struct device *d)
1644{
1645        struct net_device *dev = to_net_dev(d);
1646
1647        return dev_net(dev);
1648}
1649
1650static void net_get_ownership(struct device *d, kuid_t *uid, kgid_t *gid)
1651{
1652        struct net_device *dev = to_net_dev(d);
1653        const struct net *net = dev_net(dev);
1654
1655        net_ns_get_ownership(net, uid, gid);
1656}
1657
1658static struct class net_class __ro_after_init = {
1659        .name = "net",
1660        .dev_release = netdev_release,
1661        .dev_groups = net_class_groups,
1662        .dev_uevent = netdev_uevent,
1663        .ns_type = &net_ns_type_operations,
1664        .namespace = net_namespace,
1665        .get_ownership = net_get_ownership,
1666};
1667
1668#ifdef CONFIG_OF_NET
1669static int of_dev_node_match(struct device *dev, const void *data)
1670{
1671        int ret = 0;
1672
1673        if (dev->parent)
1674                ret = dev->parent->of_node == data;
1675
1676        return ret == 0 ? dev->of_node == data : ret;
1677}
1678
1679/*
1680 * of_find_net_device_by_node - lookup the net device for the device node
1681 * @np: OF device node
1682 *
1683 * Looks up the net_device structure corresponding with the device node.
1684 * If successful, returns a pointer to the net_device with the embedded
1685 * struct device refcount incremented by one, or NULL on failure. The
1686 * refcount must be dropped when done with the net_device.
1687 */
1688struct net_device *of_find_net_device_by_node(struct device_node *np)
1689{
1690        struct device *dev;
1691
1692        dev = class_find_device(&net_class, NULL, np, of_dev_node_match);
1693        if (!dev)
1694                return NULL;
1695
1696        return to_net_dev(dev);
1697}
1698EXPORT_SYMBOL(of_find_net_device_by_node);
1699#endif
1700
1701/* Delete sysfs entries but hold kobject reference until after all
1702 * netdev references are gone.
1703 */
1704void netdev_unregister_kobject(struct net_device *ndev)
1705{
1706        struct device *dev = &ndev->dev;
1707
1708        if (!refcount_read(&dev_net(ndev)->count))
1709                dev_set_uevent_suppress(dev, 1);
1710
1711        kobject_get(&dev->kobj);
1712
1713        remove_queue_kobjects(ndev);
1714
1715        pm_runtime_set_memalloc_noio(dev, false);
1716
1717        device_del(dev);
1718}
1719
1720/* Create sysfs entries for network device. */
1721int netdev_register_kobject(struct net_device *ndev)
1722{
1723        struct device *dev = &ndev->dev;
1724        const struct attribute_group **groups = ndev->sysfs_groups;
1725        int error = 0;
1726
1727        device_initialize(dev);
1728        dev->class = &net_class;
1729        dev->platform_data = ndev;
1730        dev->groups = groups;
1731
1732        dev_set_name(dev, "%s", ndev->name);
1733
1734#ifdef CONFIG_SYSFS
1735        /* Allow for a device specific group */
1736        if (*groups)
1737                groups++;
1738
1739        *groups++ = &netstat_group;
1740
1741#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
1742        if (ndev->ieee80211_ptr)
1743                *groups++ = &wireless_group;
1744#if IS_ENABLED(CONFIG_WIRELESS_EXT)
1745        else if (ndev->wireless_handlers)
1746                *groups++ = &wireless_group;
1747#endif
1748#endif
1749#endif /* CONFIG_SYSFS */
1750
1751        error = device_add(dev);
1752        if (error)
1753                return error;
1754
1755        error = register_queue_kobjects(ndev);
1756        if (error) {
1757                device_del(dev);
1758                return error;
1759        }
1760
1761        pm_runtime_set_memalloc_noio(dev, true);
1762
1763        return error;
1764}
1765
1766int netdev_class_create_file_ns(const struct class_attribute *class_attr,
1767                                const void *ns)
1768{
1769        return class_create_file_ns(&net_class, class_attr, ns);
1770}
1771EXPORT_SYMBOL(netdev_class_create_file_ns);
1772
1773void netdev_class_remove_file_ns(const struct class_attribute *class_attr,
1774                                 const void *ns)
1775{
1776        class_remove_file_ns(&net_class, class_attr, ns);
1777}
1778EXPORT_SYMBOL(netdev_class_remove_file_ns);
1779
1780int __init netdev_kobject_init(void)
1781{
1782        kobj_ns_type_register(&net_ns_type_operations);
1783        return class_register(&net_class);
1784}
1785