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