linux/net/core/rtnetlink.c
<<
>>
Prefs
   1/*
   2 * INET         An implementation of the TCP/IP protocol suite for the LINUX
   3 *              operating system.  INET is implemented using the  BSD Socket
   4 *              interface as the means of communication with the user level.
   5 *
   6 *              Routing netlink socket interface: protocol independent part.
   7 *
   8 * Authors:     Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
   9 *
  10 *              This program is free software; you can redistribute it and/or
  11 *              modify it under the terms of the GNU General Public License
  12 *              as published by the Free Software Foundation; either version
  13 *              2 of the License, or (at your option) any later version.
  14 *
  15 *      Fixes:
  16 *      Vitaly E. Lavrov                RTA_OK arithmetics was wrong.
  17 */
  18
  19#include <linux/errno.h>
  20#include <linux/module.h>
  21#include <linux/types.h>
  22#include <linux/socket.h>
  23#include <linux/kernel.h>
  24#include <linux/timer.h>
  25#include <linux/string.h>
  26#include <linux/sockios.h>
  27#include <linux/net.h>
  28#include <linux/fcntl.h>
  29#include <linux/mm.h>
  30#include <linux/slab.h>
  31#include <linux/interrupt.h>
  32#include <linux/capability.h>
  33#include <linux/skbuff.h>
  34#include <linux/init.h>
  35#include <linux/security.h>
  36#include <linux/mutex.h>
  37#include <linux/if_addr.h>
  38#include <linux/if_bridge.h>
  39#include <linux/pci.h>
  40#include <linux/etherdevice.h>
  41
  42#include <asm/uaccess.h>
  43
  44#include <linux/inet.h>
  45#include <linux/netdevice.h>
  46#include <net/ip.h>
  47#include <net/protocol.h>
  48#include <net/arp.h>
  49#include <net/route.h>
  50#include <net/udp.h>
  51#include <net/sock.h>
  52#include <net/pkt_sched.h>
  53#include <net/fib_rules.h>
  54#include <net/rtnetlink.h>
  55#include <net/net_namespace.h>
  56
  57struct rtnl_link {
  58        rtnl_doit_func          doit;
  59        rtnl_dumpit_func        dumpit;
  60        rtnl_calcit_func        calcit;
  61};
  62
  63static DEFINE_MUTEX(rtnl_mutex);
  64
  65void rtnl_lock(void)
  66{
  67        mutex_lock(&rtnl_mutex);
  68}
  69EXPORT_SYMBOL(rtnl_lock);
  70
  71void __rtnl_unlock(void)
  72{
  73        mutex_unlock(&rtnl_mutex);
  74}
  75
  76void rtnl_unlock(void)
  77{
  78        /* This fellow will unlock it for us. */
  79        netdev_run_todo();
  80}
  81EXPORT_SYMBOL(rtnl_unlock);
  82
  83int rtnl_trylock(void)
  84{
  85        return mutex_trylock(&rtnl_mutex);
  86}
  87EXPORT_SYMBOL(rtnl_trylock);
  88
  89int rtnl_is_locked(void)
  90{
  91        return mutex_is_locked(&rtnl_mutex);
  92}
  93EXPORT_SYMBOL(rtnl_is_locked);
  94
  95#ifdef CONFIG_PROVE_LOCKING
  96int lockdep_rtnl_is_held(void)
  97{
  98        return lockdep_is_held(&rtnl_mutex);
  99}
 100EXPORT_SYMBOL(lockdep_rtnl_is_held);
 101#endif /* #ifdef CONFIG_PROVE_LOCKING */
 102
 103static struct rtnl_link *rtnl_msg_handlers[RTNL_FAMILY_MAX + 1];
 104
 105static inline int rtm_msgindex(int msgtype)
 106{
 107        int msgindex = msgtype - RTM_BASE;
 108
 109        /*
 110         * msgindex < 0 implies someone tried to register a netlink
 111         * control code. msgindex >= RTM_NR_MSGTYPES may indicate that
 112         * the message type has not been added to linux/rtnetlink.h
 113         */
 114        BUG_ON(msgindex < 0 || msgindex >= RTM_NR_MSGTYPES);
 115
 116        return msgindex;
 117}
 118
 119static rtnl_doit_func rtnl_get_doit(int protocol, int msgindex)
 120{
 121        struct rtnl_link *tab;
 122
 123        if (protocol <= RTNL_FAMILY_MAX)
 124                tab = rtnl_msg_handlers[protocol];
 125        else
 126                tab = NULL;
 127
 128        if (tab == NULL || tab[msgindex].doit == NULL)
 129                tab = rtnl_msg_handlers[PF_UNSPEC];
 130
 131        return tab[msgindex].doit;
 132}
 133
 134static rtnl_dumpit_func rtnl_get_dumpit(int protocol, int msgindex)
 135{
 136        struct rtnl_link *tab;
 137
 138        if (protocol <= RTNL_FAMILY_MAX)
 139                tab = rtnl_msg_handlers[protocol];
 140        else
 141                tab = NULL;
 142
 143        if (tab == NULL || tab[msgindex].dumpit == NULL)
 144                tab = rtnl_msg_handlers[PF_UNSPEC];
 145
 146        return tab[msgindex].dumpit;
 147}
 148
 149static rtnl_calcit_func rtnl_get_calcit(int protocol, int msgindex)
 150{
 151        struct rtnl_link *tab;
 152
 153        if (protocol <= RTNL_FAMILY_MAX)
 154                tab = rtnl_msg_handlers[protocol];
 155        else
 156                tab = NULL;
 157
 158        if (tab == NULL || tab[msgindex].calcit == NULL)
 159                tab = rtnl_msg_handlers[PF_UNSPEC];
 160
 161        return tab[msgindex].calcit;
 162}
 163
 164/**
 165 * __rtnl_register - Register a rtnetlink message type
 166 * @protocol: Protocol family or PF_UNSPEC
 167 * @msgtype: rtnetlink message type
 168 * @doit: Function pointer called for each request message
 169 * @dumpit: Function pointer called for each dump request (NLM_F_DUMP) message
 170 * @calcit: Function pointer to calc size of dump message
 171 *
 172 * Registers the specified function pointers (at least one of them has
 173 * to be non-NULL) to be called whenever a request message for the
 174 * specified protocol family and message type is received.
 175 *
 176 * The special protocol family PF_UNSPEC may be used to define fallback
 177 * function pointers for the case when no entry for the specific protocol
 178 * family exists.
 179 *
 180 * Returns 0 on success or a negative error code.
 181 */
 182int __rtnl_register(int protocol, int msgtype,
 183                    rtnl_doit_func doit, rtnl_dumpit_func dumpit,
 184                    rtnl_calcit_func calcit)
 185{
 186        struct rtnl_link *tab;
 187        int msgindex;
 188
 189        BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 190        msgindex = rtm_msgindex(msgtype);
 191
 192        tab = rtnl_msg_handlers[protocol];
 193        if (tab == NULL) {
 194                tab = kcalloc(RTM_NR_MSGTYPES, sizeof(*tab), GFP_KERNEL);
 195                if (tab == NULL)
 196                        return -ENOBUFS;
 197
 198                rtnl_msg_handlers[protocol] = tab;
 199        }
 200
 201        if (doit)
 202                tab[msgindex].doit = doit;
 203
 204        if (dumpit)
 205                tab[msgindex].dumpit = dumpit;
 206
 207        if (calcit)
 208                tab[msgindex].calcit = calcit;
 209
 210        return 0;
 211}
 212EXPORT_SYMBOL_GPL(__rtnl_register);
 213
 214/**
 215 * rtnl_register - Register a rtnetlink message type
 216 *
 217 * Identical to __rtnl_register() but panics on failure. This is useful
 218 * as failure of this function is very unlikely, it can only happen due
 219 * to lack of memory when allocating the chain to store all message
 220 * handlers for a protocol. Meant for use in init functions where lack
 221 * of memory implies no sense in continuing.
 222 */
 223void rtnl_register(int protocol, int msgtype,
 224                   rtnl_doit_func doit, rtnl_dumpit_func dumpit,
 225                   rtnl_calcit_func calcit)
 226{
 227        if (__rtnl_register(protocol, msgtype, doit, dumpit, calcit) < 0)
 228                panic("Unable to register rtnetlink message handler, "
 229                      "protocol = %d, message type = %d\n",
 230                      protocol, msgtype);
 231}
 232EXPORT_SYMBOL_GPL(rtnl_register);
 233
 234/**
 235 * rtnl_unregister - Unregister a rtnetlink message type
 236 * @protocol: Protocol family or PF_UNSPEC
 237 * @msgtype: rtnetlink message type
 238 *
 239 * Returns 0 on success or a negative error code.
 240 */
 241int rtnl_unregister(int protocol, int msgtype)
 242{
 243        int msgindex;
 244
 245        BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 246        msgindex = rtm_msgindex(msgtype);
 247
 248        if (rtnl_msg_handlers[protocol] == NULL)
 249                return -ENOENT;
 250
 251        rtnl_msg_handlers[protocol][msgindex].doit = NULL;
 252        rtnl_msg_handlers[protocol][msgindex].dumpit = NULL;
 253
 254        return 0;
 255}
 256EXPORT_SYMBOL_GPL(rtnl_unregister);
 257
 258/**
 259 * rtnl_unregister_all - Unregister all rtnetlink message type of a protocol
 260 * @protocol : Protocol family or PF_UNSPEC
 261 *
 262 * Identical to calling rtnl_unregster() for all registered message types
 263 * of a certain protocol family.
 264 */
 265void rtnl_unregister_all(int protocol)
 266{
 267        BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 268
 269        kfree(rtnl_msg_handlers[protocol]);
 270        rtnl_msg_handlers[protocol] = NULL;
 271}
 272EXPORT_SYMBOL_GPL(rtnl_unregister_all);
 273
 274static LIST_HEAD(link_ops);
 275
 276static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind)
 277{
 278        const struct rtnl_link_ops *ops;
 279
 280        list_for_each_entry(ops, &link_ops, list) {
 281                if (!strcmp(ops->kind, kind))
 282                        return ops;
 283        }
 284        return NULL;
 285}
 286
 287/**
 288 * __rtnl_link_register - Register rtnl_link_ops with rtnetlink.
 289 * @ops: struct rtnl_link_ops * to register
 290 *
 291 * The caller must hold the rtnl_mutex. This function should be used
 292 * by drivers that create devices during module initialization. It
 293 * must be called before registering the devices.
 294 *
 295 * Returns 0 on success or a negative error code.
 296 */
 297int __rtnl_link_register(struct rtnl_link_ops *ops)
 298{
 299        if (rtnl_link_ops_get(ops->kind))
 300                return -EEXIST;
 301
 302        if (!ops->dellink)
 303                ops->dellink = unregister_netdevice_queue;
 304
 305        list_add_tail(&ops->list, &link_ops);
 306        return 0;
 307}
 308EXPORT_SYMBOL_GPL(__rtnl_link_register);
 309
 310/**
 311 * rtnl_link_register - Register rtnl_link_ops with rtnetlink.
 312 * @ops: struct rtnl_link_ops * to register
 313 *
 314 * Returns 0 on success or a negative error code.
 315 */
 316int rtnl_link_register(struct rtnl_link_ops *ops)
 317{
 318        int err;
 319
 320        rtnl_lock();
 321        err = __rtnl_link_register(ops);
 322        rtnl_unlock();
 323        return err;
 324}
 325EXPORT_SYMBOL_GPL(rtnl_link_register);
 326
 327static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops)
 328{
 329        struct net_device *dev;
 330        LIST_HEAD(list_kill);
 331
 332        for_each_netdev(net, dev) {
 333                if (dev->rtnl_link_ops == ops)
 334                        ops->dellink(dev, &list_kill);
 335        }
 336        unregister_netdevice_many(&list_kill);
 337}
 338
 339/**
 340 * __rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
 341 * @ops: struct rtnl_link_ops * to unregister
 342 *
 343 * The caller must hold the rtnl_mutex.
 344 */
 345void __rtnl_link_unregister(struct rtnl_link_ops *ops)
 346{
 347        struct net *net;
 348
 349        for_each_net(net) {
 350                __rtnl_kill_links(net, ops);
 351        }
 352        list_del(&ops->list);
 353}
 354EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
 355
 356/**
 357 * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
 358 * @ops: struct rtnl_link_ops * to unregister
 359 */
 360void rtnl_link_unregister(struct rtnl_link_ops *ops)
 361{
 362        rtnl_lock();
 363        __rtnl_link_unregister(ops);
 364        rtnl_unlock();
 365}
 366EXPORT_SYMBOL_GPL(rtnl_link_unregister);
 367
 368static size_t rtnl_link_get_size(const struct net_device *dev)
 369{
 370        const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
 371        size_t size;
 372
 373        if (!ops)
 374                return 0;
 375
 376        size = nla_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */
 377               nla_total_size(strlen(ops->kind) + 1);  /* IFLA_INFO_KIND */
 378
 379        if (ops->get_size)
 380                /* IFLA_INFO_DATA + nested data */
 381                size += nla_total_size(sizeof(struct nlattr)) +
 382                        ops->get_size(dev);
 383
 384        if (ops->get_xstats_size)
 385                /* IFLA_INFO_XSTATS */
 386                size += nla_total_size(ops->get_xstats_size(dev));
 387
 388        return size;
 389}
 390
 391static LIST_HEAD(rtnl_af_ops);
 392
 393static const struct rtnl_af_ops *rtnl_af_lookup(const int family)
 394{
 395        const struct rtnl_af_ops *ops;
 396
 397        list_for_each_entry(ops, &rtnl_af_ops, list) {
 398                if (ops->family == family)
 399                        return ops;
 400        }
 401
 402        return NULL;
 403}
 404
 405/**
 406 * __rtnl_af_register - Register rtnl_af_ops with rtnetlink.
 407 * @ops: struct rtnl_af_ops * to register
 408 *
 409 * The caller must hold the rtnl_mutex.
 410 *
 411 * Returns 0 on success or a negative error code.
 412 */
 413int __rtnl_af_register(struct rtnl_af_ops *ops)
 414{
 415        list_add_tail(&ops->list, &rtnl_af_ops);
 416        return 0;
 417}
 418EXPORT_SYMBOL_GPL(__rtnl_af_register);
 419
 420/**
 421 * rtnl_af_register - Register rtnl_af_ops with rtnetlink.
 422 * @ops: struct rtnl_af_ops * to register
 423 *
 424 * Returns 0 on success or a negative error code.
 425 */
 426int rtnl_af_register(struct rtnl_af_ops *ops)
 427{
 428        int err;
 429
 430        rtnl_lock();
 431        err = __rtnl_af_register(ops);
 432        rtnl_unlock();
 433        return err;
 434}
 435EXPORT_SYMBOL_GPL(rtnl_af_register);
 436
 437/**
 438 * __rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
 439 * @ops: struct rtnl_af_ops * to unregister
 440 *
 441 * The caller must hold the rtnl_mutex.
 442 */
 443void __rtnl_af_unregister(struct rtnl_af_ops *ops)
 444{
 445        list_del(&ops->list);
 446}
 447EXPORT_SYMBOL_GPL(__rtnl_af_unregister);
 448
 449/**
 450 * rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
 451 * @ops: struct rtnl_af_ops * to unregister
 452 */
 453void rtnl_af_unregister(struct rtnl_af_ops *ops)
 454{
 455        rtnl_lock();
 456        __rtnl_af_unregister(ops);
 457        rtnl_unlock();
 458}
 459EXPORT_SYMBOL_GPL(rtnl_af_unregister);
 460
 461static size_t rtnl_link_get_af_size(const struct net_device *dev)
 462{
 463        struct rtnl_af_ops *af_ops;
 464        size_t size;
 465
 466        /* IFLA_AF_SPEC */
 467        size = nla_total_size(sizeof(struct nlattr));
 468
 469        list_for_each_entry(af_ops, &rtnl_af_ops, list) {
 470                if (af_ops->get_link_af_size) {
 471                        /* AF_* + nested data */
 472                        size += nla_total_size(sizeof(struct nlattr)) +
 473                                af_ops->get_link_af_size(dev);
 474                }
 475        }
 476
 477        return size;
 478}
 479
 480static int rtnl_link_fill(struct sk_buff *skb, const struct net_device *dev)
 481{
 482        const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
 483        struct nlattr *linkinfo, *data;
 484        int err = -EMSGSIZE;
 485
 486        linkinfo = nla_nest_start(skb, IFLA_LINKINFO);
 487        if (linkinfo == NULL)
 488                goto out;
 489
 490        if (nla_put_string(skb, IFLA_INFO_KIND, ops->kind) < 0)
 491                goto err_cancel_link;
 492        if (ops->fill_xstats) {
 493                err = ops->fill_xstats(skb, dev);
 494                if (err < 0)
 495                        goto err_cancel_link;
 496        }
 497        if (ops->fill_info) {
 498                data = nla_nest_start(skb, IFLA_INFO_DATA);
 499                if (data == NULL) {
 500                        err = -EMSGSIZE;
 501                        goto err_cancel_link;
 502                }
 503                err = ops->fill_info(skb, dev);
 504                if (err < 0)
 505                        goto err_cancel_data;
 506                nla_nest_end(skb, data);
 507        }
 508
 509        nla_nest_end(skb, linkinfo);
 510        return 0;
 511
 512err_cancel_data:
 513        nla_nest_cancel(skb, data);
 514err_cancel_link:
 515        nla_nest_cancel(skb, linkinfo);
 516out:
 517        return err;
 518}
 519
 520int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned int group, int echo)
 521{
 522        struct sock *rtnl = net->rtnl;
 523        int err = 0;
 524
 525        NETLINK_CB(skb).dst_group = group;
 526        if (echo)
 527                atomic_inc(&skb->users);
 528        netlink_broadcast(rtnl, skb, pid, group, GFP_KERNEL);
 529        if (echo)
 530                err = netlink_unicast(rtnl, skb, pid, MSG_DONTWAIT);
 531        return err;
 532}
 533
 534int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid)
 535{
 536        struct sock *rtnl = net->rtnl;
 537
 538        return nlmsg_unicast(rtnl, skb, pid);
 539}
 540EXPORT_SYMBOL(rtnl_unicast);
 541
 542void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group,
 543                 struct nlmsghdr *nlh, gfp_t flags)
 544{
 545        struct sock *rtnl = net->rtnl;
 546        int report = 0;
 547
 548        if (nlh)
 549                report = nlmsg_report(nlh);
 550
 551        nlmsg_notify(rtnl, skb, pid, group, report, flags);
 552}
 553EXPORT_SYMBOL(rtnl_notify);
 554
 555void rtnl_set_sk_err(struct net *net, u32 group, int error)
 556{
 557        struct sock *rtnl = net->rtnl;
 558
 559        netlink_set_err(rtnl, 0, group, error);
 560}
 561EXPORT_SYMBOL(rtnl_set_sk_err);
 562
 563int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics)
 564{
 565        struct nlattr *mx;
 566        int i, valid = 0;
 567
 568        mx = nla_nest_start(skb, RTA_METRICS);
 569        if (mx == NULL)
 570                return -ENOBUFS;
 571
 572        for (i = 0; i < RTAX_MAX; i++) {
 573                if (metrics[i]) {
 574                        valid++;
 575                        if (nla_put_u32(skb, i+1, metrics[i]))
 576                                goto nla_put_failure;
 577                }
 578        }
 579
 580        if (!valid) {
 581                nla_nest_cancel(skb, mx);
 582                return 0;
 583        }
 584
 585        return nla_nest_end(skb, mx);
 586
 587nla_put_failure:
 588        nla_nest_cancel(skb, mx);
 589        return -EMSGSIZE;
 590}
 591EXPORT_SYMBOL(rtnetlink_put_metrics);
 592
 593int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
 594                       long expires, u32 error)
 595{
 596        struct rta_cacheinfo ci = {
 597                .rta_lastuse = jiffies_delta_to_clock_t(jiffies - dst->lastuse),
 598                .rta_used = dst->__use,
 599                .rta_clntref = atomic_read(&(dst->__refcnt)),
 600                .rta_error = error,
 601                .rta_id =  id,
 602        };
 603
 604        if (expires) {
 605                unsigned long clock;
 606
 607                clock = jiffies_to_clock_t(abs(expires));
 608                clock = min_t(unsigned long, clock, INT_MAX);
 609                ci.rta_expires = (expires > 0) ? clock : -clock;
 610        }
 611        return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci);
 612}
 613EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo);
 614
 615static void set_operstate(struct net_device *dev, unsigned char transition)
 616{
 617        unsigned char operstate = dev->operstate;
 618
 619        switch (transition) {
 620        case IF_OPER_UP:
 621                if ((operstate == IF_OPER_DORMANT ||
 622                     operstate == IF_OPER_UNKNOWN) &&
 623                    !netif_dormant(dev))
 624                        operstate = IF_OPER_UP;
 625                break;
 626
 627        case IF_OPER_DORMANT:
 628                if (operstate == IF_OPER_UP ||
 629                    operstate == IF_OPER_UNKNOWN)
 630                        operstate = IF_OPER_DORMANT;
 631                break;
 632        }
 633
 634        if (dev->operstate != operstate) {
 635                write_lock_bh(&dev_base_lock);
 636                dev->operstate = operstate;
 637                write_unlock_bh(&dev_base_lock);
 638                netdev_state_change(dev);
 639        }
 640}
 641
 642static unsigned int rtnl_dev_get_flags(const struct net_device *dev)
 643{
 644        return (dev->flags & ~(IFF_PROMISC | IFF_ALLMULTI)) |
 645               (dev->gflags & (IFF_PROMISC | IFF_ALLMULTI));
 646}
 647
 648static unsigned int rtnl_dev_combine_flags(const struct net_device *dev,
 649                                           const struct ifinfomsg *ifm)
 650{
 651        unsigned int flags = ifm->ifi_flags;
 652
 653        /* bugwards compatibility: ifi_change == 0 is treated as ~0 */
 654        if (ifm->ifi_change)
 655                flags = (flags & ifm->ifi_change) |
 656                        (rtnl_dev_get_flags(dev) & ~ifm->ifi_change);
 657
 658        return flags;
 659}
 660
 661static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
 662                                 const struct rtnl_link_stats64 *b)
 663{
 664        a->rx_packets = b->rx_packets;
 665        a->tx_packets = b->tx_packets;
 666        a->rx_bytes = b->rx_bytes;
 667        a->tx_bytes = b->tx_bytes;
 668        a->rx_errors = b->rx_errors;
 669        a->tx_errors = b->tx_errors;
 670        a->rx_dropped = b->rx_dropped;
 671        a->tx_dropped = b->tx_dropped;
 672
 673        a->multicast = b->multicast;
 674        a->collisions = b->collisions;
 675
 676        a->rx_length_errors = b->rx_length_errors;
 677        a->rx_over_errors = b->rx_over_errors;
 678        a->rx_crc_errors = b->rx_crc_errors;
 679        a->rx_frame_errors = b->rx_frame_errors;
 680        a->rx_fifo_errors = b->rx_fifo_errors;
 681        a->rx_missed_errors = b->rx_missed_errors;
 682
 683        a->tx_aborted_errors = b->tx_aborted_errors;
 684        a->tx_carrier_errors = b->tx_carrier_errors;
 685        a->tx_fifo_errors = b->tx_fifo_errors;
 686        a->tx_heartbeat_errors = b->tx_heartbeat_errors;
 687        a->tx_window_errors = b->tx_window_errors;
 688
 689        a->rx_compressed = b->rx_compressed;
 690        a->tx_compressed = b->tx_compressed;
 691}
 692
 693static void copy_rtnl_link_stats64(void *v, const struct rtnl_link_stats64 *b)
 694{
 695        memcpy(v, b, sizeof(*b));
 696}
 697
 698/* All VF info */
 699static inline int rtnl_vfinfo_size(const struct net_device *dev,
 700                                   u32 ext_filter_mask)
 701{
 702        if (dev->dev.parent && dev_is_pci(dev->dev.parent) &&
 703            (ext_filter_mask & RTEXT_FILTER_VF)) {
 704                int num_vfs = dev_num_vf(dev->dev.parent);
 705                size_t size = nla_total_size(sizeof(struct nlattr));
 706                size += nla_total_size(num_vfs * sizeof(struct nlattr));
 707                size += num_vfs *
 708                        (nla_total_size(sizeof(struct ifla_vf_mac)) +
 709                         nla_total_size(sizeof(struct ifla_vf_vlan)) +
 710                         nla_total_size(sizeof(struct ifla_vf_tx_rate)) +
 711                         nla_total_size(sizeof(struct ifla_vf_spoofchk)));
 712                return size;
 713        } else
 714                return 0;
 715}
 716
 717static size_t rtnl_port_size(const struct net_device *dev)
 718{
 719        size_t port_size = nla_total_size(4)            /* PORT_VF */
 720                + nla_total_size(PORT_PROFILE_MAX)      /* PORT_PROFILE */
 721                + nla_total_size(sizeof(struct ifla_port_vsi))
 722                                                        /* PORT_VSI_TYPE */
 723                + nla_total_size(PORT_UUID_MAX)         /* PORT_INSTANCE_UUID */
 724                + nla_total_size(PORT_UUID_MAX)         /* PORT_HOST_UUID */
 725                + nla_total_size(1)                     /* PROT_VDP_REQUEST */
 726                + nla_total_size(2);                    /* PORT_VDP_RESPONSE */
 727        size_t vf_ports_size = nla_total_size(sizeof(struct nlattr));
 728        size_t vf_port_size = nla_total_size(sizeof(struct nlattr))
 729                + port_size;
 730        size_t port_self_size = nla_total_size(sizeof(struct nlattr))
 731                + port_size;
 732
 733        if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
 734                return 0;
 735        if (dev_num_vf(dev->dev.parent))
 736                return port_self_size + vf_ports_size +
 737                        vf_port_size * dev_num_vf(dev->dev.parent);
 738        else
 739                return port_self_size;
 740}
 741
 742static noinline size_t if_nlmsg_size(const struct net_device *dev,
 743                                     u32 ext_filter_mask)
 744{
 745        return NLMSG_ALIGN(sizeof(struct ifinfomsg))
 746               + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
 747               + nla_total_size(IFALIASZ) /* IFLA_IFALIAS */
 748               + nla_total_size(IFNAMSIZ) /* IFLA_QDISC */
 749               + nla_total_size(sizeof(struct rtnl_link_ifmap))
 750               + nla_total_size(sizeof(struct rtnl_link_stats))
 751               + nla_total_size(sizeof(struct rtnl_link_stats64))
 752               + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
 753               + nla_total_size(MAX_ADDR_LEN) /* IFLA_BROADCAST */
 754               + nla_total_size(4) /* IFLA_TXQLEN */
 755               + nla_total_size(4) /* IFLA_WEIGHT */
 756               + nla_total_size(4) /* IFLA_MTU */
 757               + nla_total_size(4) /* IFLA_LINK */
 758               + nla_total_size(4) /* IFLA_MASTER */
 759               + nla_total_size(1) /* IFLA_CARRIER */
 760               + nla_total_size(4) /* IFLA_PROMISCUITY */
 761               + nla_total_size(4) /* IFLA_NUM_TX_QUEUES */
 762               + nla_total_size(4) /* IFLA_NUM_RX_QUEUES */
 763               + nla_total_size(1) /* IFLA_OPERSTATE */
 764               + nla_total_size(1) /* IFLA_LINKMODE */
 765               + nla_total_size(ext_filter_mask
 766                                & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
 767               + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
 768               + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
 769               + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
 770               + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */
 771               + nla_total_size(MAX_PHYS_PORT_ID_LEN); /* IFLA_PHYS_PORT_ID */
 772}
 773
 774static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
 775{
 776        struct nlattr *vf_ports;
 777        struct nlattr *vf_port;
 778        int vf;
 779        int err;
 780
 781        vf_ports = nla_nest_start(skb, IFLA_VF_PORTS);
 782        if (!vf_ports)
 783                return -EMSGSIZE;
 784
 785        for (vf = 0; vf < dev_num_vf(dev->dev.parent); vf++) {
 786                vf_port = nla_nest_start(skb, IFLA_VF_PORT);
 787                if (!vf_port)
 788                        goto nla_put_failure;
 789                if (nla_put_u32(skb, IFLA_PORT_VF, vf))
 790                        goto nla_put_failure;
 791                err = dev->netdev_ops->ndo_get_vf_port(dev, vf, skb);
 792                if (err == -EMSGSIZE)
 793                        goto nla_put_failure;
 794                if (err) {
 795                        nla_nest_cancel(skb, vf_port);
 796                        continue;
 797                }
 798                nla_nest_end(skb, vf_port);
 799        }
 800
 801        nla_nest_end(skb, vf_ports);
 802
 803        return 0;
 804
 805nla_put_failure:
 806        nla_nest_cancel(skb, vf_ports);
 807        return -EMSGSIZE;
 808}
 809
 810static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
 811{
 812        struct nlattr *port_self;
 813        int err;
 814
 815        port_self = nla_nest_start(skb, IFLA_PORT_SELF);
 816        if (!port_self)
 817                return -EMSGSIZE;
 818
 819        err = dev->netdev_ops->ndo_get_vf_port(dev, PORT_SELF_VF, skb);
 820        if (err) {
 821                nla_nest_cancel(skb, port_self);
 822                return (err == -EMSGSIZE) ? err : 0;
 823        }
 824
 825        nla_nest_end(skb, port_self);
 826
 827        return 0;
 828}
 829
 830static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev)
 831{
 832        int err;
 833
 834        if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
 835                return 0;
 836
 837        err = rtnl_port_self_fill(skb, dev);
 838        if (err)
 839                return err;
 840
 841        if (dev_num_vf(dev->dev.parent)) {
 842                err = rtnl_vf_ports_fill(skb, dev);
 843                if (err)
 844                        return err;
 845        }
 846
 847        return 0;
 848}
 849
 850static int rtnl_phys_port_id_fill(struct sk_buff *skb, struct net_device *dev)
 851{
 852        int err;
 853        struct netdev_phys_port_id ppid;
 854
 855        err = dev_get_phys_port_id(dev, &ppid);
 856        if (err) {
 857                if (err == -EOPNOTSUPP)
 858                        return 0;
 859                return err;
 860        }
 861
 862        if (nla_put(skb, IFLA_PHYS_PORT_ID, ppid.id_len, ppid.id))
 863                return -EMSGSIZE;
 864
 865        return 0;
 866}
 867
 868static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 869                            int type, u32 pid, u32 seq, u32 change,
 870                            unsigned int flags, u32 ext_filter_mask)
 871{
 872        struct ifinfomsg *ifm;
 873        struct nlmsghdr *nlh;
 874        struct rtnl_link_stats64 temp;
 875        const struct rtnl_link_stats64 *stats;
 876        struct nlattr *attr, *af_spec;
 877        struct rtnl_af_ops *af_ops;
 878        struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
 879
 880        ASSERT_RTNL();
 881        nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);
 882        if (nlh == NULL)
 883                return -EMSGSIZE;
 884
 885        ifm = nlmsg_data(nlh);
 886        ifm->ifi_family = AF_UNSPEC;
 887        ifm->__ifi_pad = 0;
 888        ifm->ifi_type = dev->type;
 889        ifm->ifi_index = dev->ifindex;
 890        ifm->ifi_flags = dev_get_flags(dev);
 891        ifm->ifi_change = change;
 892
 893        if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
 894            nla_put_u32(skb, IFLA_TXQLEN, dev->tx_queue_len) ||
 895            nla_put_u8(skb, IFLA_OPERSTATE,
 896                       netif_running(dev) ? dev->operstate : IF_OPER_DOWN) ||
 897            nla_put_u8(skb, IFLA_LINKMODE, dev->link_mode) ||
 898            nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
 899            nla_put_u32(skb, IFLA_GROUP, dev->group) ||
 900            nla_put_u32(skb, IFLA_PROMISCUITY, dev->promiscuity) ||
 901            nla_put_u32(skb, IFLA_NUM_TX_QUEUES, dev->num_tx_queues) ||
 902#ifdef CONFIG_RPS
 903            nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) ||
 904#endif
 905            (dev->ifindex != dev->iflink &&
 906             nla_put_u32(skb, IFLA_LINK, dev->iflink)) ||
 907            (upper_dev &&
 908             nla_put_u32(skb, IFLA_MASTER, upper_dev->ifindex)) ||
 909            nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
 910            (dev->qdisc &&
 911             nla_put_string(skb, IFLA_QDISC, dev->qdisc->ops->id)) ||
 912            (dev->ifalias &&
 913             nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)))
 914                goto nla_put_failure;
 915
 916        if (1) {
 917                struct rtnl_link_ifmap map = {
 918                        .mem_start   = dev->mem_start,
 919                        .mem_end     = dev->mem_end,
 920                        .base_addr   = dev->base_addr,
 921                        .irq         = dev->irq,
 922                        .dma         = dev->dma,
 923                        .port        = dev->if_port,
 924                };
 925                if (nla_put(skb, IFLA_MAP, sizeof(map), &map))
 926                        goto nla_put_failure;
 927        }
 928
 929        if (dev->addr_len) {
 930                if (nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr) ||
 931                    nla_put(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast))
 932                        goto nla_put_failure;
 933        }
 934
 935        if (rtnl_phys_port_id_fill(skb, dev))
 936                goto nla_put_failure;
 937
 938        attr = nla_reserve(skb, IFLA_STATS,
 939                        sizeof(struct rtnl_link_stats));
 940        if (attr == NULL)
 941                goto nla_put_failure;
 942
 943        stats = dev_get_stats(dev, &temp);
 944        copy_rtnl_link_stats(nla_data(attr), stats);
 945
 946        attr = nla_reserve(skb, IFLA_STATS64,
 947                        sizeof(struct rtnl_link_stats64));
 948        if (attr == NULL)
 949                goto nla_put_failure;
 950        copy_rtnl_link_stats64(nla_data(attr), stats);
 951
 952        if (dev->dev.parent && (ext_filter_mask & RTEXT_FILTER_VF) &&
 953            nla_put_u32(skb, IFLA_NUM_VF, dev_num_vf(dev->dev.parent)))
 954                goto nla_put_failure;
 955
 956        if (dev->netdev_ops->ndo_get_vf_config && dev->dev.parent
 957            && (ext_filter_mask & RTEXT_FILTER_VF)) {
 958                int i;
 959
 960                struct nlattr *vfinfo, *vf;
 961                int num_vfs = dev_num_vf(dev->dev.parent);
 962
 963                vfinfo = nla_nest_start(skb, IFLA_VFINFO_LIST);
 964                if (!vfinfo)
 965                        goto nla_put_failure;
 966                for (i = 0; i < num_vfs; i++) {
 967                        struct ifla_vf_info ivi;
 968                        struct ifla_vf_mac vf_mac;
 969                        struct ifla_vf_vlan vf_vlan;
 970                        struct ifla_vf_tx_rate vf_tx_rate;
 971                        struct ifla_vf_spoofchk vf_spoofchk;
 972                        struct ifla_vf_link_state vf_linkstate;
 973
 974                        /*
 975                         * Not all SR-IOV capable drivers support the
 976                         * spoofcheck query.  Preset to -1 so the user
 977                         * space tool can detect that the driver didn't
 978                         * report anything.
 979                         */
 980                        ivi.spoofchk = -1;
 981                        memset(ivi.mac, 0, sizeof(ivi.mac));
 982                        /* The default value for VF link state is "auto"
 983                         * IFLA_VF_LINK_STATE_AUTO which equals zero
 984                         */
 985                        ivi.linkstate = 0;
 986                        if (dev->netdev_ops->ndo_get_vf_config(dev, i, &ivi))
 987                                break;
 988                        vf_mac.vf =
 989                                vf_vlan.vf =
 990                                vf_tx_rate.vf =
 991                                vf_spoofchk.vf =
 992                                vf_linkstate.vf = ivi.vf;
 993
 994                        memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac));
 995                        vf_vlan.vlan = ivi.vlan;
 996                        vf_vlan.qos = ivi.qos;
 997                        vf_tx_rate.rate = ivi.tx_rate;
 998                        vf_spoofchk.setting = ivi.spoofchk;
 999                        vf_linkstate.link_state = ivi.linkstate;
1000                        vf = nla_nest_start(skb, IFLA_VF_INFO);
1001                        if (!vf) {
1002                                nla_nest_cancel(skb, vfinfo);
1003                                goto nla_put_failure;
1004                        }
1005                        if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
1006                            nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
1007                            nla_put(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate),
1008                                    &vf_tx_rate) ||
1009                            nla_put(skb, IFLA_VF_SPOOFCHK, sizeof(vf_spoofchk),
1010                                    &vf_spoofchk) ||
1011                            nla_put(skb, IFLA_VF_LINK_STATE, sizeof(vf_linkstate),
1012                                    &vf_linkstate))
1013                                goto nla_put_failure;
1014                        nla_nest_end(skb, vf);
1015                }
1016                nla_nest_end(skb, vfinfo);
1017        }
1018
1019        if (rtnl_port_fill(skb, dev))
1020                goto nla_put_failure;
1021
1022        if (dev->rtnl_link_ops) {
1023                if (rtnl_link_fill(skb, dev) < 0)
1024                        goto nla_put_failure;
1025        }
1026
1027        if (!(af_spec = nla_nest_start(skb, IFLA_AF_SPEC)))
1028                goto nla_put_failure;
1029
1030        list_for_each_entry(af_ops, &rtnl_af_ops, list) {
1031                if (af_ops->fill_link_af) {
1032                        struct nlattr *af;
1033                        int err;
1034
1035                        if (!(af = nla_nest_start(skb, af_ops->family)))
1036                                goto nla_put_failure;
1037
1038                        err = af_ops->fill_link_af(skb, dev);
1039
1040                        /*
1041                         * Caller may return ENODATA to indicate that there
1042                         * was no data to be dumped. This is not an error, it
1043                         * means we should trim the attribute header and
1044                         * continue.
1045                         */
1046                        if (err == -ENODATA)
1047                                nla_nest_cancel(skb, af);
1048                        else if (err < 0)
1049                                goto nla_put_failure;
1050
1051                        nla_nest_end(skb, af);
1052                }
1053        }
1054
1055        nla_nest_end(skb, af_spec);
1056
1057        return nlmsg_end(skb, nlh);
1058
1059nla_put_failure:
1060        nlmsg_cancel(skb, nlh);
1061        return -EMSGSIZE;
1062}
1063
1064static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
1065{
1066        struct net *net = sock_net(skb->sk);
1067        int h, s_h;
1068        int idx = 0, s_idx;
1069        struct net_device *dev;
1070        struct hlist_head *head;
1071        struct nlattr *tb[IFLA_MAX+1];
1072        u32 ext_filter_mask = 0;
1073
1074        s_h = cb->args[0];
1075        s_idx = cb->args[1];
1076
1077        rcu_read_lock();
1078        cb->seq = net->dev_base_seq;
1079
1080        if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX,
1081                        ifla_policy) >= 0) {
1082
1083                if (tb[IFLA_EXT_MASK])
1084                        ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1085        }
1086
1087        for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
1088                idx = 0;
1089                head = &net->dev_index_head[h];
1090                hlist_for_each_entry_rcu(dev, head, index_hlist) {
1091                        if (idx < s_idx)
1092                                goto cont;
1093                        if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
1094                                             NETLINK_CB(cb->skb).portid,
1095                                             cb->nlh->nlmsg_seq, 0,
1096                                             NLM_F_MULTI,
1097                                             ext_filter_mask) <= 0)
1098                                goto out;
1099
1100                        nl_dump_check_consistent(cb, nlmsg_hdr(skb));
1101cont:
1102                        idx++;
1103                }
1104        }
1105out:
1106        rcu_read_unlock();
1107        cb->args[1] = idx;
1108        cb->args[0] = h;
1109
1110        return skb->len;
1111}
1112
1113const struct nla_policy ifla_policy[IFLA_MAX+1] = {
1114        [IFLA_IFNAME]           = { .type = NLA_STRING, .len = IFNAMSIZ-1 },
1115        [IFLA_ADDRESS]          = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1116        [IFLA_BROADCAST]        = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1117        [IFLA_MAP]              = { .len = sizeof(struct rtnl_link_ifmap) },
1118        [IFLA_MTU]              = { .type = NLA_U32 },
1119        [IFLA_LINK]             = { .type = NLA_U32 },
1120        [IFLA_MASTER]           = { .type = NLA_U32 },
1121        [IFLA_CARRIER]          = { .type = NLA_U8 },
1122        [IFLA_TXQLEN]           = { .type = NLA_U32 },
1123        [IFLA_WEIGHT]           = { .type = NLA_U32 },
1124        [IFLA_OPERSTATE]        = { .type = NLA_U8 },
1125        [IFLA_LINKMODE]         = { .type = NLA_U8 },
1126        [IFLA_LINKINFO]         = { .type = NLA_NESTED },
1127        [IFLA_NET_NS_PID]       = { .type = NLA_U32 },
1128        [IFLA_NET_NS_FD]        = { .type = NLA_U32 },
1129        [IFLA_IFALIAS]          = { .type = NLA_STRING, .len = IFALIASZ-1 },
1130        [IFLA_VFINFO_LIST]      = {. type = NLA_NESTED },
1131        [IFLA_VF_PORTS]         = { .type = NLA_NESTED },
1132        [IFLA_PORT_SELF]        = { .type = NLA_NESTED },
1133        [IFLA_AF_SPEC]          = { .type = NLA_NESTED },
1134        [IFLA_EXT_MASK]         = { .type = NLA_U32 },
1135        [IFLA_PROMISCUITY]      = { .type = NLA_U32 },
1136        [IFLA_NUM_TX_QUEUES]    = { .type = NLA_U32 },
1137        [IFLA_NUM_RX_QUEUES]    = { .type = NLA_U32 },
1138        [IFLA_PHYS_PORT_ID]     = { .type = NLA_BINARY, .len = MAX_PHYS_PORT_ID_LEN },
1139};
1140EXPORT_SYMBOL(ifla_policy);
1141
1142static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
1143        [IFLA_INFO_KIND]        = { .type = NLA_STRING },
1144        [IFLA_INFO_DATA]        = { .type = NLA_NESTED },
1145};
1146
1147static const struct nla_policy ifla_vfinfo_policy[IFLA_VF_INFO_MAX+1] = {
1148        [IFLA_VF_INFO]          = { .type = NLA_NESTED },
1149};
1150
1151static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1152        [IFLA_VF_MAC]           = { .type = NLA_BINARY,
1153                                    .len = sizeof(struct ifla_vf_mac) },
1154        [IFLA_VF_VLAN]          = { .type = NLA_BINARY,
1155                                    .len = sizeof(struct ifla_vf_vlan) },
1156        [IFLA_VF_TX_RATE]       = { .type = NLA_BINARY,
1157                                    .len = sizeof(struct ifla_vf_tx_rate) },
1158        [IFLA_VF_SPOOFCHK]      = { .type = NLA_BINARY,
1159                                    .len = sizeof(struct ifla_vf_spoofchk) },
1160};
1161
1162static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
1163        [IFLA_PORT_VF]          = { .type = NLA_U32 },
1164        [IFLA_PORT_PROFILE]     = { .type = NLA_STRING,
1165                                    .len = PORT_PROFILE_MAX },
1166        [IFLA_PORT_VSI_TYPE]    = { .type = NLA_BINARY,
1167                                    .len = sizeof(struct ifla_port_vsi)},
1168        [IFLA_PORT_INSTANCE_UUID] = { .type = NLA_BINARY,
1169                                      .len = PORT_UUID_MAX },
1170        [IFLA_PORT_HOST_UUID]   = { .type = NLA_STRING,
1171                                    .len = PORT_UUID_MAX },
1172        [IFLA_PORT_REQUEST]     = { .type = NLA_U8, },
1173        [IFLA_PORT_RESPONSE]    = { .type = NLA_U16, },
1174};
1175
1176struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])
1177{
1178        struct net *net;
1179        /* Examine the link attributes and figure out which
1180         * network namespace we are talking about.
1181         */
1182        if (tb[IFLA_NET_NS_PID])
1183                net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID]));
1184        else if (tb[IFLA_NET_NS_FD])
1185                net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));
1186        else
1187                net = get_net(src_net);
1188        return net;
1189}
1190EXPORT_SYMBOL(rtnl_link_get_net);
1191
1192static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
1193{
1194        if (dev) {
1195                if (tb[IFLA_ADDRESS] &&
1196                    nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
1197                        return -EINVAL;
1198
1199                if (tb[IFLA_BROADCAST] &&
1200                    nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
1201                        return -EINVAL;
1202        }
1203
1204        if (tb[IFLA_AF_SPEC]) {
1205                struct nlattr *af;
1206                int rem, err;
1207
1208                nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1209                        const struct rtnl_af_ops *af_ops;
1210
1211                        if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1212                                return -EAFNOSUPPORT;
1213
1214                        if (!af_ops->set_link_af)
1215                                return -EOPNOTSUPP;
1216
1217                        if (af_ops->validate_link_af) {
1218                                err = af_ops->validate_link_af(dev, af);
1219                                if (err < 0)
1220                                        return err;
1221                        }
1222                }
1223        }
1224
1225        return 0;
1226}
1227
1228static int do_setvfinfo(struct net_device *dev, struct nlattr *attr)
1229{
1230        int rem, err = -EINVAL;
1231        struct nlattr *vf;
1232        const struct net_device_ops *ops = dev->netdev_ops;
1233
1234        nla_for_each_nested(vf, attr, rem) {
1235                switch (nla_type(vf)) {
1236                case IFLA_VF_MAC: {
1237                        struct ifla_vf_mac *ivm;
1238                        ivm = nla_data(vf);
1239                        err = -EOPNOTSUPP;
1240                        if (ops->ndo_set_vf_mac)
1241                                err = ops->ndo_set_vf_mac(dev, ivm->vf,
1242                                                          ivm->mac);
1243                        break;
1244                }
1245                case IFLA_VF_VLAN: {
1246                        struct ifla_vf_vlan *ivv;
1247                        ivv = nla_data(vf);
1248                        err = -EOPNOTSUPP;
1249                        if (ops->ndo_set_vf_vlan)
1250                                err = ops->ndo_set_vf_vlan(dev, ivv->vf,
1251                                                           ivv->vlan,
1252                                                           ivv->qos);
1253                        break;
1254                }
1255                case IFLA_VF_TX_RATE: {
1256                        struct ifla_vf_tx_rate *ivt;
1257                        ivt = nla_data(vf);
1258                        err = -EOPNOTSUPP;
1259                        if (ops->ndo_set_vf_tx_rate)
1260                                err = ops->ndo_set_vf_tx_rate(dev, ivt->vf,
1261                                                              ivt->rate);
1262                        break;
1263                }
1264                case IFLA_VF_SPOOFCHK: {
1265                        struct ifla_vf_spoofchk *ivs;
1266                        ivs = nla_data(vf);
1267                        err = -EOPNOTSUPP;
1268                        if (ops->ndo_set_vf_spoofchk)
1269                                err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
1270                                                               ivs->setting);
1271                        break;
1272                }
1273                case IFLA_VF_LINK_STATE: {
1274                        struct ifla_vf_link_state *ivl;
1275                        ivl = nla_data(vf);
1276                        err = -EOPNOTSUPP;
1277                        if (ops->ndo_set_vf_link_state)
1278                                err = ops->ndo_set_vf_link_state(dev, ivl->vf,
1279                                                                 ivl->link_state);
1280                        break;
1281                }
1282                default:
1283                        err = -EINVAL;
1284                        break;
1285                }
1286                if (err)
1287                        break;
1288        }
1289        return err;
1290}
1291
1292static int do_set_master(struct net_device *dev, int ifindex)
1293{
1294        struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
1295        const struct net_device_ops *ops;
1296        int err;
1297
1298        if (upper_dev) {
1299                if (upper_dev->ifindex == ifindex)
1300                        return 0;
1301                ops = upper_dev->netdev_ops;
1302                if (ops->ndo_del_slave) {
1303                        err = ops->ndo_del_slave(upper_dev, dev);
1304                        if (err)
1305                                return err;
1306                } else {
1307                        return -EOPNOTSUPP;
1308                }
1309        }
1310
1311        if (ifindex) {
1312                upper_dev = __dev_get_by_index(dev_net(dev), ifindex);
1313                if (!upper_dev)
1314                        return -EINVAL;
1315                ops = upper_dev->netdev_ops;
1316                if (ops->ndo_add_slave) {
1317                        err = ops->ndo_add_slave(upper_dev, dev);
1318                        if (err)
1319                                return err;
1320                } else {
1321                        return -EOPNOTSUPP;
1322                }
1323        }
1324        return 0;
1325}
1326
1327static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
1328                      struct nlattr **tb, char *ifname, int modified)
1329{
1330        const struct net_device_ops *ops = dev->netdev_ops;
1331        int err;
1332
1333        if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
1334                struct net *net = rtnl_link_get_net(dev_net(dev), tb);
1335                if (IS_ERR(net)) {
1336                        err = PTR_ERR(net);
1337                        goto errout;
1338                }
1339                if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) {
1340                        err = -EPERM;
1341                        goto errout;
1342                }
1343                err = dev_change_net_namespace(dev, net, ifname);
1344                put_net(net);
1345                if (err)
1346                        goto errout;
1347                modified = 1;
1348        }
1349
1350        if (tb[IFLA_MAP]) {
1351                struct rtnl_link_ifmap *u_map;
1352                struct ifmap k_map;
1353
1354                if (!ops->ndo_set_config) {
1355                        err = -EOPNOTSUPP;
1356                        goto errout;
1357                }
1358
1359                if (!netif_device_present(dev)) {
1360                        err = -ENODEV;
1361                        goto errout;
1362                }
1363
1364                u_map = nla_data(tb[IFLA_MAP]);
1365                k_map.mem_start = (unsigned long) u_map->mem_start;
1366                k_map.mem_end = (unsigned long) u_map->mem_end;
1367                k_map.base_addr = (unsigned short) u_map->base_addr;
1368                k_map.irq = (unsigned char) u_map->irq;
1369                k_map.dma = (unsigned char) u_map->dma;
1370                k_map.port = (unsigned char) u_map->port;
1371
1372                err = ops->ndo_set_config(dev, &k_map);
1373                if (err < 0)
1374                        goto errout;
1375
1376                modified = 1;
1377        }
1378
1379        if (tb[IFLA_ADDRESS]) {
1380                struct sockaddr *sa;
1381                int len;
1382
1383                len = sizeof(sa_family_t) + dev->addr_len;
1384                sa = kmalloc(len, GFP_KERNEL);
1385                if (!sa) {
1386                        err = -ENOMEM;
1387                        goto errout;
1388                }
1389                sa->sa_family = dev->type;
1390                memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
1391                       dev->addr_len);
1392                err = dev_set_mac_address(dev, sa);
1393                kfree(sa);
1394                if (err)
1395                        goto errout;
1396                modified = 1;
1397        }
1398
1399        if (tb[IFLA_MTU]) {
1400                err = dev_set_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
1401                if (err < 0)
1402                        goto errout;
1403                modified = 1;
1404        }
1405
1406        if (tb[IFLA_GROUP]) {
1407                dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1408                modified = 1;
1409        }
1410
1411        /*
1412         * Interface selected by interface index but interface
1413         * name provided implies that a name change has been
1414         * requested.
1415         */
1416        if (ifm->ifi_index > 0 && ifname[0]) {
1417                err = dev_change_name(dev, ifname);
1418                if (err < 0)
1419                        goto errout;
1420                modified = 1;
1421        }
1422
1423        if (tb[IFLA_IFALIAS]) {
1424                err = dev_set_alias(dev, nla_data(tb[IFLA_IFALIAS]),
1425                                    nla_len(tb[IFLA_IFALIAS]));
1426                if (err < 0)
1427                        goto errout;
1428                modified = 1;
1429        }
1430
1431        if (tb[IFLA_BROADCAST]) {
1432                nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
1433                call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
1434        }
1435
1436        if (ifm->ifi_flags || ifm->ifi_change) {
1437                err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
1438                if (err < 0)
1439                        goto errout;
1440        }
1441
1442        if (tb[IFLA_MASTER]) {
1443                err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
1444                if (err)
1445                        goto errout;
1446                modified = 1;
1447        }
1448
1449        if (tb[IFLA_CARRIER]) {
1450                err = dev_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER]));
1451                if (err)
1452                        goto errout;
1453                modified = 1;
1454        }
1455
1456        if (tb[IFLA_TXQLEN])
1457                dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
1458
1459        if (tb[IFLA_OPERSTATE])
1460                set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
1461
1462        if (tb[IFLA_LINKMODE]) {
1463                write_lock_bh(&dev_base_lock);
1464                dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
1465                write_unlock_bh(&dev_base_lock);
1466        }
1467
1468        if (tb[IFLA_VFINFO_LIST]) {
1469                struct nlattr *attr;
1470                int rem;
1471                nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
1472                        if (nla_type(attr) != IFLA_VF_INFO) {
1473                                err = -EINVAL;
1474                                goto errout;
1475                        }
1476                        err = do_setvfinfo(dev, attr);
1477                        if (err < 0)
1478                                goto errout;
1479                        modified = 1;
1480                }
1481        }
1482        err = 0;
1483
1484        if (tb[IFLA_VF_PORTS]) {
1485                struct nlattr *port[IFLA_PORT_MAX+1];
1486                struct nlattr *attr;
1487                int vf;
1488                int rem;
1489
1490                err = -EOPNOTSUPP;
1491                if (!ops->ndo_set_vf_port)
1492                        goto errout;
1493
1494                nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
1495                        if (nla_type(attr) != IFLA_VF_PORT)
1496                                continue;
1497                        err = nla_parse_nested(port, IFLA_PORT_MAX,
1498                                attr, ifla_port_policy);
1499                        if (err < 0)
1500                                goto errout;
1501                        if (!port[IFLA_PORT_VF]) {
1502                                err = -EOPNOTSUPP;
1503                                goto errout;
1504                        }
1505                        vf = nla_get_u32(port[IFLA_PORT_VF]);
1506                        err = ops->ndo_set_vf_port(dev, vf, port);
1507                        if (err < 0)
1508                                goto errout;
1509                        modified = 1;
1510                }
1511        }
1512        err = 0;
1513
1514        if (tb[IFLA_PORT_SELF]) {
1515                struct nlattr *port[IFLA_PORT_MAX+1];
1516
1517                err = nla_parse_nested(port, IFLA_PORT_MAX,
1518                        tb[IFLA_PORT_SELF], ifla_port_policy);
1519                if (err < 0)
1520                        goto errout;
1521
1522                err = -EOPNOTSUPP;
1523                if (ops->ndo_set_vf_port)
1524                        err = ops->ndo_set_vf_port(dev, PORT_SELF_VF, port);
1525                if (err < 0)
1526                        goto errout;
1527                modified = 1;
1528        }
1529
1530        if (tb[IFLA_AF_SPEC]) {
1531                struct nlattr *af;
1532                int rem;
1533
1534                nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1535                        const struct rtnl_af_ops *af_ops;
1536
1537                        if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1538                                BUG();
1539
1540                        err = af_ops->set_link_af(dev, af);
1541                        if (err < 0)
1542                                goto errout;
1543
1544                        modified = 1;
1545                }
1546        }
1547        err = 0;
1548
1549errout:
1550        if (err < 0 && modified)
1551                net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
1552                                     dev->name);
1553
1554        return err;
1555}
1556
1557static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
1558{
1559        struct net *net = sock_net(skb->sk);
1560        struct ifinfomsg *ifm;
1561        struct net_device *dev;
1562        int err;
1563        struct nlattr *tb[IFLA_MAX+1];
1564        char ifname[IFNAMSIZ];
1565
1566        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1567        if (err < 0)
1568                goto errout;
1569
1570        if (tb[IFLA_IFNAME])
1571                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1572        else
1573                ifname[0] = '\0';
1574
1575        err = -EINVAL;
1576        ifm = nlmsg_data(nlh);
1577        if (ifm->ifi_index > 0)
1578                dev = __dev_get_by_index(net, ifm->ifi_index);
1579        else if (tb[IFLA_IFNAME])
1580                dev = __dev_get_by_name(net, ifname);
1581        else
1582                goto errout;
1583
1584        if (dev == NULL) {
1585                err = -ENODEV;
1586                goto errout;
1587        }
1588
1589        err = validate_linkmsg(dev, tb);
1590        if (err < 0)
1591                goto errout;
1592
1593        err = do_setlink(dev, ifm, tb, ifname, 0);
1594errout:
1595        return err;
1596}
1597
1598static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
1599{
1600        struct net *net = sock_net(skb->sk);
1601        const struct rtnl_link_ops *ops;
1602        struct net_device *dev;
1603        struct ifinfomsg *ifm;
1604        char ifname[IFNAMSIZ];
1605        struct nlattr *tb[IFLA_MAX+1];
1606        int err;
1607        LIST_HEAD(list_kill);
1608
1609        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1610        if (err < 0)
1611                return err;
1612
1613        if (tb[IFLA_IFNAME])
1614                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1615
1616        ifm = nlmsg_data(nlh);
1617        if (ifm->ifi_index > 0)
1618                dev = __dev_get_by_index(net, ifm->ifi_index);
1619        else if (tb[IFLA_IFNAME])
1620                dev = __dev_get_by_name(net, ifname);
1621        else
1622                return -EINVAL;
1623
1624        if (!dev)
1625                return -ENODEV;
1626
1627        ops = dev->rtnl_link_ops;
1628        if (!ops)
1629                return -EOPNOTSUPP;
1630
1631        ops->dellink(dev, &list_kill);
1632        unregister_netdevice_many(&list_kill);
1633        list_del(&list_kill);
1634        return 0;
1635}
1636
1637int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm)
1638{
1639        unsigned int old_flags;
1640        int err;
1641
1642        old_flags = dev->flags;
1643        if (ifm && (ifm->ifi_flags || ifm->ifi_change)) {
1644                err = __dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
1645                if (err < 0)
1646                        return err;
1647        }
1648
1649        dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
1650        rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
1651
1652        __dev_notify_flags(dev, old_flags);
1653        return 0;
1654}
1655EXPORT_SYMBOL(rtnl_configure_link);
1656
1657struct net_device *rtnl_create_link(struct net *net,
1658        char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[])
1659{
1660        int err;
1661        struct net_device *dev;
1662        unsigned int num_tx_queues = 1;
1663        unsigned int num_rx_queues = 1;
1664
1665        if (tb[IFLA_NUM_TX_QUEUES])
1666                num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]);
1667        else if (ops->get_num_tx_queues)
1668                num_tx_queues = ops->get_num_tx_queues();
1669
1670        if (tb[IFLA_NUM_RX_QUEUES])
1671                num_rx_queues = nla_get_u32(tb[IFLA_NUM_RX_QUEUES]);
1672        else if (ops->get_num_rx_queues)
1673                num_rx_queues = ops->get_num_rx_queues();
1674
1675        err = -ENOMEM;
1676        dev = alloc_netdev_mqs(ops->priv_size, ifname, ops->setup,
1677                               num_tx_queues, num_rx_queues);
1678        if (!dev)
1679                goto err;
1680
1681        dev_net_set(dev, net);
1682        dev->rtnl_link_ops = ops;
1683        dev->rtnl_link_state = RTNL_LINK_INITIALIZING;
1684
1685        if (tb[IFLA_MTU])
1686                dev->mtu = nla_get_u32(tb[IFLA_MTU]);
1687        if (tb[IFLA_ADDRESS]) {
1688                memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
1689                                nla_len(tb[IFLA_ADDRESS]));
1690                dev->addr_assign_type = NET_ADDR_SET;
1691        }
1692        if (tb[IFLA_BROADCAST])
1693                memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
1694                                nla_len(tb[IFLA_BROADCAST]));
1695        if (tb[IFLA_TXQLEN])
1696                dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
1697        if (tb[IFLA_OPERSTATE])
1698                set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
1699        if (tb[IFLA_LINKMODE])
1700                dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
1701        if (tb[IFLA_GROUP])
1702                dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1703
1704        return dev;
1705
1706err:
1707        return ERR_PTR(err);
1708}
1709EXPORT_SYMBOL(rtnl_create_link);
1710
1711static int rtnl_group_changelink(struct net *net, int group,
1712                struct ifinfomsg *ifm,
1713                struct nlattr **tb)
1714{
1715        struct net_device *dev;
1716        int err;
1717
1718        for_each_netdev(net, dev) {
1719                if (dev->group == group) {
1720                        err = do_setlink(dev, ifm, tb, NULL, 0);
1721                        if (err < 0)
1722                                return err;
1723                }
1724        }
1725
1726        return 0;
1727}
1728
1729static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh)
1730{
1731        struct net *net = sock_net(skb->sk);
1732        const struct rtnl_link_ops *ops;
1733        struct net_device *dev;
1734        struct ifinfomsg *ifm;
1735        char kind[MODULE_NAME_LEN];
1736        char ifname[IFNAMSIZ];
1737        struct nlattr *tb[IFLA_MAX+1];
1738        struct nlattr *linkinfo[IFLA_INFO_MAX+1];
1739        int err;
1740
1741#ifdef CONFIG_MODULES
1742replay:
1743#endif
1744        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1745        if (err < 0)
1746                return err;
1747
1748        if (tb[IFLA_IFNAME])
1749                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1750        else
1751                ifname[0] = '\0';
1752
1753        ifm = nlmsg_data(nlh);
1754        if (ifm->ifi_index > 0)
1755                dev = __dev_get_by_index(net, ifm->ifi_index);
1756        else {
1757                if (ifname[0])
1758                        dev = __dev_get_by_name(net, ifname);
1759                else
1760                        dev = NULL;
1761        }
1762
1763        err = validate_linkmsg(dev, tb);
1764        if (err < 0)
1765                return err;
1766
1767        if (tb[IFLA_LINKINFO]) {
1768                err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
1769                                       tb[IFLA_LINKINFO], ifla_info_policy);
1770                if (err < 0)
1771                        return err;
1772        } else
1773                memset(linkinfo, 0, sizeof(linkinfo));
1774
1775        if (linkinfo[IFLA_INFO_KIND]) {
1776                nla_strlcpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
1777                ops = rtnl_link_ops_get(kind);
1778        } else {
1779                kind[0] = '\0';
1780                ops = NULL;
1781        }
1782
1783        if (1) {
1784                struct nlattr *attr[ops ? ops->maxtype + 1 : 0], **data = NULL;
1785                struct net *dest_net;
1786
1787                if (ops) {
1788                        if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
1789                                err = nla_parse_nested(attr, ops->maxtype,
1790                                                       linkinfo[IFLA_INFO_DATA],
1791                                                       ops->policy);
1792                                if (err < 0)
1793                                        return err;
1794                                data = attr;
1795                        }
1796                        if (ops->validate) {
1797                                err = ops->validate(tb, data);
1798                                if (err < 0)
1799                                        return err;
1800                        }
1801                }
1802
1803                if (dev) {
1804                        int modified = 0;
1805
1806                        if (nlh->nlmsg_flags & NLM_F_EXCL)
1807                                return -EEXIST;
1808                        if (nlh->nlmsg_flags & NLM_F_REPLACE)
1809                                return -EOPNOTSUPP;
1810
1811                        if (linkinfo[IFLA_INFO_DATA]) {
1812                                if (!ops || ops != dev->rtnl_link_ops ||
1813                                    !ops->changelink)
1814                                        return -EOPNOTSUPP;
1815
1816                                err = ops->changelink(dev, tb, data);
1817                                if (err < 0)
1818                                        return err;
1819                                modified = 1;
1820                        }
1821
1822                        return do_setlink(dev, ifm, tb, ifname, modified);
1823                }
1824
1825                if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
1826                        if (ifm->ifi_index == 0 && tb[IFLA_GROUP])
1827                                return rtnl_group_changelink(net,
1828                                                nla_get_u32(tb[IFLA_GROUP]),
1829                                                ifm, tb);
1830                        return -ENODEV;
1831                }
1832
1833                if (tb[IFLA_MAP] || tb[IFLA_MASTER] || tb[IFLA_PROTINFO])
1834                        return -EOPNOTSUPP;
1835
1836                if (!ops) {
1837#ifdef CONFIG_MODULES
1838                        if (kind[0]) {
1839                                __rtnl_unlock();
1840                                request_module("rtnl-link-%s", kind);
1841                                rtnl_lock();
1842                                ops = rtnl_link_ops_get(kind);
1843                                if (ops)
1844                                        goto replay;
1845                        }
1846#endif
1847                        return -EOPNOTSUPP;
1848                }
1849
1850                if (!ifname[0])
1851                        snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
1852
1853                dest_net = rtnl_link_get_net(net, tb);
1854                if (IS_ERR(dest_net))
1855                        return PTR_ERR(dest_net);
1856
1857                dev = rtnl_create_link(dest_net, ifname, ops, tb);
1858                if (IS_ERR(dev)) {
1859                        err = PTR_ERR(dev);
1860                        goto out;
1861                }
1862
1863                dev->ifindex = ifm->ifi_index;
1864
1865                if (ops->newlink)
1866                        err = ops->newlink(net, dev, tb, data);
1867                else
1868                        err = register_netdevice(dev);
1869
1870                if (err < 0) {
1871                        free_netdev(dev);
1872                        goto out;
1873                }
1874
1875                err = rtnl_configure_link(dev, ifm);
1876                if (err < 0)
1877                        unregister_netdevice(dev);
1878out:
1879                put_net(dest_net);
1880                return err;
1881        }
1882}
1883
1884static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh)
1885{
1886        struct net *net = sock_net(skb->sk);
1887        struct ifinfomsg *ifm;
1888        char ifname[IFNAMSIZ];
1889        struct nlattr *tb[IFLA_MAX+1];
1890        struct net_device *dev = NULL;
1891        struct sk_buff *nskb;
1892        int err;
1893        u32 ext_filter_mask = 0;
1894
1895        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1896        if (err < 0)
1897                return err;
1898
1899        if (tb[IFLA_IFNAME])
1900                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1901
1902        if (tb[IFLA_EXT_MASK])
1903                ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1904
1905        ifm = nlmsg_data(nlh);
1906        if (ifm->ifi_index > 0)
1907                dev = __dev_get_by_index(net, ifm->ifi_index);
1908        else if (tb[IFLA_IFNAME])
1909                dev = __dev_get_by_name(net, ifname);
1910        else
1911                return -EINVAL;
1912
1913        if (dev == NULL)
1914                return -ENODEV;
1915
1916        nskb = nlmsg_new(if_nlmsg_size(dev, ext_filter_mask), GFP_KERNEL);
1917        if (nskb == NULL)
1918                return -ENOBUFS;
1919
1920        err = rtnl_fill_ifinfo(nskb, dev, RTM_NEWLINK, NETLINK_CB(skb).portid,
1921                               nlh->nlmsg_seq, 0, 0, ext_filter_mask);
1922        if (err < 0) {
1923                /* -EMSGSIZE implies BUG in if_nlmsg_size */
1924                WARN_ON(err == -EMSGSIZE);
1925                kfree_skb(nskb);
1926        } else
1927                err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
1928
1929        return err;
1930}
1931
1932static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh)
1933{
1934        struct net *net = sock_net(skb->sk);
1935        struct net_device *dev;
1936        struct nlattr *tb[IFLA_MAX+1];
1937        u32 ext_filter_mask = 0;
1938        u16 min_ifinfo_dump_size = 0;
1939
1940        if (nlmsg_parse(nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX,
1941                        ifla_policy) >= 0) {
1942                if (tb[IFLA_EXT_MASK])
1943                        ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1944        }
1945
1946        if (!ext_filter_mask)
1947                return NLMSG_GOODSIZE;
1948        /*
1949         * traverse the list of net devices and compute the minimum
1950         * buffer size based upon the filter mask.
1951         */
1952        list_for_each_entry(dev, &net->dev_base_head, dev_list) {
1953                min_ifinfo_dump_size = max_t(u16, min_ifinfo_dump_size,
1954                                             if_nlmsg_size(dev,
1955                                                           ext_filter_mask));
1956        }
1957
1958        return min_ifinfo_dump_size;
1959}
1960
1961static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
1962{
1963        int idx;
1964        int s_idx = cb->family;
1965
1966        if (s_idx == 0)
1967                s_idx = 1;
1968        for (idx = 1; idx <= RTNL_FAMILY_MAX; idx++) {
1969                int type = cb->nlh->nlmsg_type-RTM_BASE;
1970                if (idx < s_idx || idx == PF_PACKET)
1971                        continue;
1972                if (rtnl_msg_handlers[idx] == NULL ||
1973                    rtnl_msg_handlers[idx][type].dumpit == NULL)
1974                        continue;
1975                if (idx > s_idx) {
1976                        memset(&cb->args[0], 0, sizeof(cb->args));
1977                        cb->prev_seq = 0;
1978                        cb->seq = 0;
1979                }
1980                if (rtnl_msg_handlers[idx][type].dumpit(skb, cb))
1981                        break;
1982        }
1983        cb->family = idx;
1984
1985        return skb->len;
1986}
1987
1988void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change)
1989{
1990        struct net *net = dev_net(dev);
1991        struct sk_buff *skb;
1992        int err = -ENOBUFS;
1993        size_t if_info_size;
1994
1995        skb = nlmsg_new((if_info_size = if_nlmsg_size(dev, 0)), GFP_KERNEL);
1996        if (skb == NULL)
1997                goto errout;
1998
1999        err = rtnl_fill_ifinfo(skb, dev, type, 0, 0, change, 0, 0);
2000        if (err < 0) {
2001                /* -EMSGSIZE implies BUG in if_nlmsg_size() */
2002                WARN_ON(err == -EMSGSIZE);
2003                kfree_skb(skb);
2004                goto errout;
2005        }
2006        rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_KERNEL);
2007        return;
2008errout:
2009        if (err < 0)
2010                rtnl_set_sk_err(net, RTNLGRP_LINK, err);
2011}
2012EXPORT_SYMBOL(rtmsg_ifinfo);
2013
2014static int nlmsg_populate_fdb_fill(struct sk_buff *skb,
2015                                   struct net_device *dev,
2016                                   u8 *addr, u32 pid, u32 seq,
2017                                   int type, unsigned int flags)
2018{
2019        struct nlmsghdr *nlh;
2020        struct ndmsg *ndm;
2021
2022        nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), NLM_F_MULTI);
2023        if (!nlh)
2024                return -EMSGSIZE;
2025
2026        ndm = nlmsg_data(nlh);
2027        ndm->ndm_family  = AF_BRIDGE;
2028        ndm->ndm_pad1    = 0;
2029        ndm->ndm_pad2    = 0;
2030        ndm->ndm_flags   = flags;
2031        ndm->ndm_type    = 0;
2032        ndm->ndm_ifindex = dev->ifindex;
2033        ndm->ndm_state   = NUD_PERMANENT;
2034
2035        if (nla_put(skb, NDA_LLADDR, ETH_ALEN, addr))
2036                goto nla_put_failure;
2037
2038        return nlmsg_end(skb, nlh);
2039
2040nla_put_failure:
2041        nlmsg_cancel(skb, nlh);
2042        return -EMSGSIZE;
2043}
2044
2045static inline size_t rtnl_fdb_nlmsg_size(void)
2046{
2047        return NLMSG_ALIGN(sizeof(struct ndmsg)) + nla_total_size(ETH_ALEN);
2048}
2049
2050static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, int type)
2051{
2052        struct net *net = dev_net(dev);
2053        struct sk_buff *skb;
2054        int err = -ENOBUFS;
2055
2056        skb = nlmsg_new(rtnl_fdb_nlmsg_size(), GFP_ATOMIC);
2057        if (!skb)
2058                goto errout;
2059
2060        err = nlmsg_populate_fdb_fill(skb, dev, addr, 0, 0, type, NTF_SELF);
2061        if (err < 0) {
2062                kfree_skb(skb);
2063                goto errout;
2064        }
2065
2066        rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
2067        return;
2068errout:
2069        rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
2070}
2071
2072/**
2073 * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
2074 */
2075int ndo_dflt_fdb_add(struct ndmsg *ndm,
2076                     struct nlattr *tb[],
2077                     struct net_device *dev,
2078                     const unsigned char *addr,
2079                     u16 flags)
2080{
2081        int err = -EINVAL;
2082
2083        /* If aging addresses are supported device will need to
2084         * implement its own handler for this.
2085         */
2086        if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
2087                pr_info("%s: FDB only supports static addresses\n", dev->name);
2088                return err;
2089        }
2090
2091        if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
2092                err = dev_uc_add_excl(dev, addr);
2093        else if (is_multicast_ether_addr(addr))
2094                err = dev_mc_add_excl(dev, addr);
2095
2096        /* Only return duplicate errors if NLM_F_EXCL is set */
2097        if (err == -EEXIST && !(flags & NLM_F_EXCL))
2098                err = 0;
2099
2100        return err;
2101}
2102EXPORT_SYMBOL(ndo_dflt_fdb_add);
2103
2104static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
2105{
2106        struct net *net = sock_net(skb->sk);
2107        struct ndmsg *ndm;
2108        struct nlattr *tb[NDA_MAX+1];
2109        struct net_device *dev;
2110        u8 *addr;
2111        int err;
2112
2113        err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
2114        if (err < 0)
2115                return err;
2116
2117        ndm = nlmsg_data(nlh);
2118        if (ndm->ndm_ifindex == 0) {
2119                pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid ifindex\n");
2120                return -EINVAL;
2121        }
2122
2123        dev = __dev_get_by_index(net, ndm->ndm_ifindex);
2124        if (dev == NULL) {
2125                pr_info("PF_BRIDGE: RTM_NEWNEIGH with unknown ifindex\n");
2126                return -ENODEV;
2127        }
2128
2129        if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
2130                pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid address\n");
2131                return -EINVAL;
2132        }
2133
2134        addr = nla_data(tb[NDA_LLADDR]);
2135
2136        err = -EOPNOTSUPP;
2137
2138        /* Support fdb on master device the net/bridge default case */
2139        if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
2140            (dev->priv_flags & IFF_BRIDGE_PORT)) {
2141                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2142                const struct net_device_ops *ops = br_dev->netdev_ops;
2143
2144                err = ops->ndo_fdb_add(ndm, tb, dev, addr, nlh->nlmsg_flags);
2145                if (err)
2146                        goto out;
2147                else
2148                        ndm->ndm_flags &= ~NTF_MASTER;
2149        }
2150
2151        /* Embedded bridge, macvlan, and any other device support */
2152        if ((ndm->ndm_flags & NTF_SELF)) {
2153                if (dev->netdev_ops->ndo_fdb_add)
2154                        err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr,
2155                                                           nlh->nlmsg_flags);
2156                else
2157                        err = ndo_dflt_fdb_add(ndm, tb, dev, addr,
2158                                               nlh->nlmsg_flags);
2159
2160                if (!err) {
2161                        rtnl_fdb_notify(dev, addr, RTM_NEWNEIGH);
2162                        ndm->ndm_flags &= ~NTF_SELF;
2163                }
2164        }
2165out:
2166        return err;
2167}
2168
2169/**
2170 * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
2171 */
2172int ndo_dflt_fdb_del(struct ndmsg *ndm,
2173                     struct nlattr *tb[],
2174                     struct net_device *dev,
2175                     const unsigned char *addr)
2176{
2177        int err = -EOPNOTSUPP;
2178
2179        /* If aging addresses are supported device will need to
2180         * implement its own handler for this.
2181         */
2182        if (!(ndm->ndm_state & NUD_PERMANENT)) {
2183                pr_info("%s: FDB only supports static addresses\n", dev->name);
2184                return -EINVAL;
2185        }
2186
2187        if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
2188                err = dev_uc_del(dev, addr);
2189        else if (is_multicast_ether_addr(addr))
2190                err = dev_mc_del(dev, addr);
2191        else
2192                err = -EINVAL;
2193
2194        return err;
2195}
2196EXPORT_SYMBOL(ndo_dflt_fdb_del);
2197
2198static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
2199{
2200        struct net *net = sock_net(skb->sk);
2201        struct ndmsg *ndm;
2202        struct nlattr *tb[NDA_MAX+1];
2203        struct net_device *dev;
2204        int err = -EINVAL;
2205        __u8 *addr;
2206
2207        if (!capable(CAP_NET_ADMIN))
2208                return -EPERM;
2209
2210        err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
2211        if (err < 0)
2212                return err;
2213
2214        ndm = nlmsg_data(nlh);
2215        if (ndm->ndm_ifindex == 0) {
2216                pr_info("PF_BRIDGE: RTM_DELNEIGH with invalid ifindex\n");
2217                return -EINVAL;
2218        }
2219
2220        dev = __dev_get_by_index(net, ndm->ndm_ifindex);
2221        if (dev == NULL) {
2222                pr_info("PF_BRIDGE: RTM_DELNEIGH with unknown ifindex\n");
2223                return -ENODEV;
2224        }
2225
2226        if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
2227                pr_info("PF_BRIDGE: RTM_DELNEIGH with invalid address\n");
2228                return -EINVAL;
2229        }
2230
2231        addr = nla_data(tb[NDA_LLADDR]);
2232
2233        err = -EOPNOTSUPP;
2234
2235        /* Support fdb on master device the net/bridge default case */
2236        if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
2237            (dev->priv_flags & IFF_BRIDGE_PORT)) {
2238                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2239                const struct net_device_ops *ops = br_dev->netdev_ops;
2240
2241                if (ops->ndo_fdb_del)
2242                        err = ops->ndo_fdb_del(ndm, tb, dev, addr);
2243
2244                if (err)
2245                        goto out;
2246                else
2247                        ndm->ndm_flags &= ~NTF_MASTER;
2248        }
2249
2250        /* Embedded bridge, macvlan, and any other device support */
2251        if (ndm->ndm_flags & NTF_SELF) {
2252                if (dev->netdev_ops->ndo_fdb_del)
2253                        err = dev->netdev_ops->ndo_fdb_del(ndm, tb, dev, addr);
2254                else
2255                        err = ndo_dflt_fdb_del(ndm, tb, dev, addr);
2256
2257                if (!err) {
2258                        rtnl_fdb_notify(dev, addr, RTM_DELNEIGH);
2259                        ndm->ndm_flags &= ~NTF_SELF;
2260                }
2261        }
2262out:
2263        return err;
2264}
2265
2266static int nlmsg_populate_fdb(struct sk_buff *skb,
2267                              struct netlink_callback *cb,
2268                              struct net_device *dev,
2269                              int *idx,
2270                              struct netdev_hw_addr_list *list)
2271{
2272        struct netdev_hw_addr *ha;
2273        int err;
2274        u32 portid, seq;
2275
2276        portid = NETLINK_CB(cb->skb).portid;
2277        seq = cb->nlh->nlmsg_seq;
2278
2279        list_for_each_entry(ha, &list->list, list) {
2280                if (*idx < cb->args[0])
2281                        goto skip;
2282
2283                err = nlmsg_populate_fdb_fill(skb, dev, ha->addr,
2284                                              portid, seq,
2285                                              RTM_NEWNEIGH, NTF_SELF);
2286                if (err < 0)
2287                        return err;
2288skip:
2289                *idx += 1;
2290        }
2291        return 0;
2292}
2293
2294/**
2295 * ndo_dflt_fdb_dump - default netdevice operation to dump an FDB table.
2296 * @nlh: netlink message header
2297 * @dev: netdevice
2298 *
2299 * Default netdevice operation to dump the existing unicast address list.
2300 * Returns number of addresses from list put in skb.
2301 */
2302int ndo_dflt_fdb_dump(struct sk_buff *skb,
2303                      struct netlink_callback *cb,
2304                      struct net_device *dev,
2305                      int idx)
2306{
2307        int err;
2308
2309        netif_addr_lock_bh(dev);
2310        err = nlmsg_populate_fdb(skb, cb, dev, &idx, &dev->uc);
2311        if (err)
2312                goto out;
2313        nlmsg_populate_fdb(skb, cb, dev, &idx, &dev->mc);
2314out:
2315        netif_addr_unlock_bh(dev);
2316        return idx;
2317}
2318EXPORT_SYMBOL(ndo_dflt_fdb_dump);
2319
2320static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
2321{
2322        int idx = 0;
2323        struct net *net = sock_net(skb->sk);
2324        struct net_device *dev;
2325
2326        rcu_read_lock();
2327        for_each_netdev_rcu(net, dev) {
2328                if (dev->priv_flags & IFF_BRIDGE_PORT) {
2329                        struct net_device *br_dev;
2330                        const struct net_device_ops *ops;
2331
2332                        br_dev = netdev_master_upper_dev_get(dev);
2333                        ops = br_dev->netdev_ops;
2334                        if (ops->ndo_fdb_dump)
2335                                idx = ops->ndo_fdb_dump(skb, cb, dev, idx);
2336                }
2337
2338                if (dev->netdev_ops->ndo_fdb_dump)
2339                        idx = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, idx);
2340                else
2341                        idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
2342        }
2343        rcu_read_unlock();
2344
2345        cb->args[0] = idx;
2346        return skb->len;
2347}
2348
2349int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
2350                            struct net_device *dev, u16 mode)
2351{
2352        struct nlmsghdr *nlh;
2353        struct ifinfomsg *ifm;
2354        struct nlattr *br_afspec;
2355        u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
2356        struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2357
2358        nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), NLM_F_MULTI);
2359        if (nlh == NULL)
2360                return -EMSGSIZE;
2361
2362        ifm = nlmsg_data(nlh);
2363        ifm->ifi_family = AF_BRIDGE;
2364        ifm->__ifi_pad = 0;
2365        ifm->ifi_type = dev->type;
2366        ifm->ifi_index = dev->ifindex;
2367        ifm->ifi_flags = dev_get_flags(dev);
2368        ifm->ifi_change = 0;
2369
2370
2371        if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
2372            nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
2373            nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
2374            (br_dev &&
2375             nla_put_u32(skb, IFLA_MASTER, br_dev->ifindex)) ||
2376            (dev->addr_len &&
2377             nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
2378            (dev->ifindex != dev->iflink &&
2379             nla_put_u32(skb, IFLA_LINK, dev->iflink)))
2380                goto nla_put_failure;
2381
2382        br_afspec = nla_nest_start(skb, IFLA_AF_SPEC);
2383        if (!br_afspec)
2384                goto nla_put_failure;
2385
2386        if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF) ||
2387            nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
2388                nla_nest_cancel(skb, br_afspec);
2389                goto nla_put_failure;
2390        }
2391        nla_nest_end(skb, br_afspec);
2392
2393        return nlmsg_end(skb, nlh);
2394nla_put_failure:
2395        nlmsg_cancel(skb, nlh);
2396        return -EMSGSIZE;
2397}
2398EXPORT_SYMBOL(ndo_dflt_bridge_getlink);
2399
2400static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
2401{
2402        struct net *net = sock_net(skb->sk);
2403        struct net_device *dev;
2404        int idx = 0;
2405        u32 portid = NETLINK_CB(cb->skb).portid;
2406        u32 seq = cb->nlh->nlmsg_seq;
2407        struct nlattr *extfilt;
2408        u32 filter_mask = 0;
2409
2410        extfilt = nlmsg_find_attr(cb->nlh, sizeof(struct ifinfomsg),
2411                                  IFLA_EXT_MASK);
2412        if (extfilt)
2413                filter_mask = nla_get_u32(extfilt);
2414
2415        rcu_read_lock();
2416        for_each_netdev_rcu(net, dev) {
2417                const struct net_device_ops *ops = dev->netdev_ops;
2418                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2419
2420                if (br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
2421                        if (idx >= cb->args[0] &&
2422                            br_dev->netdev_ops->ndo_bridge_getlink(
2423                                    skb, portid, seq, dev, filter_mask) < 0)
2424                                break;
2425                        idx++;
2426                }
2427
2428                if (ops->ndo_bridge_getlink) {
2429                        if (idx >= cb->args[0] &&
2430                            ops->ndo_bridge_getlink(skb, portid, seq, dev,
2431                                                    filter_mask) < 0)
2432                                break;
2433                        idx++;
2434                }
2435        }
2436        rcu_read_unlock();
2437        cb->args[0] = idx;
2438
2439        return skb->len;
2440}
2441
2442static inline size_t bridge_nlmsg_size(void)
2443{
2444        return NLMSG_ALIGN(sizeof(struct ifinfomsg))
2445                + nla_total_size(IFNAMSIZ)      /* IFLA_IFNAME */
2446                + nla_total_size(MAX_ADDR_LEN)  /* IFLA_ADDRESS */
2447                + nla_total_size(sizeof(u32))   /* IFLA_MASTER */
2448                + nla_total_size(sizeof(u32))   /* IFLA_MTU */
2449                + nla_total_size(sizeof(u32))   /* IFLA_LINK */
2450                + nla_total_size(sizeof(u32))   /* IFLA_OPERSTATE */
2451                + nla_total_size(sizeof(u8))    /* IFLA_PROTINFO */
2452                + nla_total_size(sizeof(struct nlattr)) /* IFLA_AF_SPEC */
2453                + nla_total_size(sizeof(u16))   /* IFLA_BRIDGE_FLAGS */
2454                + nla_total_size(sizeof(u16));  /* IFLA_BRIDGE_MODE */
2455}
2456
2457static int rtnl_bridge_notify(struct net_device *dev, u16 flags)
2458{
2459        struct net *net = dev_net(dev);
2460        struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2461        struct sk_buff *skb;
2462        int err = -EOPNOTSUPP;
2463
2464        skb = nlmsg_new(bridge_nlmsg_size(), GFP_ATOMIC);
2465        if (!skb) {
2466                err = -ENOMEM;
2467                goto errout;
2468        }
2469
2470        if ((!flags || (flags & BRIDGE_FLAGS_MASTER)) &&
2471            br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
2472                err = br_dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0);
2473                if (err < 0)
2474                        goto errout;
2475        }
2476
2477        if ((flags & BRIDGE_FLAGS_SELF) &&
2478            dev->netdev_ops->ndo_bridge_getlink) {
2479                err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0);
2480                if (err < 0)
2481                        goto errout;
2482        }
2483
2484        rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
2485        return 0;
2486errout:
2487        WARN_ON(err == -EMSGSIZE);
2488        kfree_skb(skb);
2489        rtnl_set_sk_err(net, RTNLGRP_LINK, err);
2490        return err;
2491}
2492
2493static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
2494{
2495        struct net *net = sock_net(skb->sk);
2496        struct ifinfomsg *ifm;
2497        struct net_device *dev;
2498        struct nlattr *br_spec, *attr = NULL;
2499        int rem, err = -EOPNOTSUPP;
2500        u16 oflags, flags = 0;
2501        bool have_flags = false;
2502
2503        if (nlmsg_len(nlh) < sizeof(*ifm))
2504                return -EINVAL;
2505
2506        ifm = nlmsg_data(nlh);
2507        if (ifm->ifi_family != AF_BRIDGE)
2508                return -EPFNOSUPPORT;
2509
2510        dev = __dev_get_by_index(net, ifm->ifi_index);
2511        if (!dev) {
2512                pr_info("PF_BRIDGE: RTM_SETLINK with unknown ifindex\n");
2513                return -ENODEV;
2514        }
2515
2516        br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
2517        if (br_spec) {
2518                nla_for_each_nested(attr, br_spec, rem) {
2519                        if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
2520                                have_flags = true;
2521                                flags = nla_get_u16(attr);
2522                                break;
2523                        }
2524                }
2525        }
2526
2527        oflags = flags;
2528
2529        if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
2530                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2531
2532                if (!br_dev || !br_dev->netdev_ops->ndo_bridge_setlink) {
2533                        err = -EOPNOTSUPP;
2534                        goto out;
2535                }
2536
2537                err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh);
2538                if (err)
2539                        goto out;
2540
2541                flags &= ~BRIDGE_FLAGS_MASTER;
2542        }
2543
2544        if ((flags & BRIDGE_FLAGS_SELF)) {
2545                if (!dev->netdev_ops->ndo_bridge_setlink)
2546                        err = -EOPNOTSUPP;
2547                else
2548                        err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh);
2549
2550                if (!err)
2551                        flags &= ~BRIDGE_FLAGS_SELF;
2552        }
2553
2554        if (have_flags)
2555                memcpy(nla_data(attr), &flags, sizeof(flags));
2556        /* Generate event to notify upper layer of bridge change */
2557        if (!err)
2558                err = rtnl_bridge_notify(dev, oflags);
2559out:
2560        return err;
2561}
2562
2563static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
2564{
2565        struct net *net = sock_net(skb->sk);
2566        struct ifinfomsg *ifm;
2567        struct net_device *dev;
2568        struct nlattr *br_spec, *attr = NULL;
2569        int rem, err = -EOPNOTSUPP;
2570        u16 oflags, flags = 0;
2571        bool have_flags = false;
2572
2573        if (nlmsg_len(nlh) < sizeof(*ifm))
2574                return -EINVAL;
2575
2576        ifm = nlmsg_data(nlh);
2577        if (ifm->ifi_family != AF_BRIDGE)
2578                return -EPFNOSUPPORT;
2579
2580        dev = __dev_get_by_index(net, ifm->ifi_index);
2581        if (!dev) {
2582                pr_info("PF_BRIDGE: RTM_SETLINK with unknown ifindex\n");
2583                return -ENODEV;
2584        }
2585
2586        br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
2587        if (br_spec) {
2588                nla_for_each_nested(attr, br_spec, rem) {
2589                        if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
2590                                have_flags = true;
2591                                flags = nla_get_u16(attr);
2592                                break;
2593                        }
2594                }
2595        }
2596
2597        oflags = flags;
2598
2599        if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
2600                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2601
2602                if (!br_dev || !br_dev->netdev_ops->ndo_bridge_dellink) {
2603                        err = -EOPNOTSUPP;
2604                        goto out;
2605                }
2606
2607                err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh);
2608                if (err)
2609                        goto out;
2610
2611                flags &= ~BRIDGE_FLAGS_MASTER;
2612        }
2613
2614        if ((flags & BRIDGE_FLAGS_SELF)) {
2615                if (!dev->netdev_ops->ndo_bridge_dellink)
2616                        err = -EOPNOTSUPP;
2617                else
2618                        err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh);
2619
2620                if (!err)
2621                        flags &= ~BRIDGE_FLAGS_SELF;
2622        }
2623
2624        if (have_flags)
2625                memcpy(nla_data(attr), &flags, sizeof(flags));
2626        /* Generate event to notify upper layer of bridge change */
2627        if (!err)
2628                err = rtnl_bridge_notify(dev, oflags);
2629out:
2630        return err;
2631}
2632
2633/* Process one rtnetlink message. */
2634
2635static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
2636{
2637        struct net *net = sock_net(skb->sk);
2638        rtnl_doit_func doit;
2639        int sz_idx, kind;
2640        int family;
2641        int type;
2642        int err;
2643
2644        type = nlh->nlmsg_type;
2645        if (type > RTM_MAX)
2646                return -EOPNOTSUPP;
2647
2648        type -= RTM_BASE;
2649
2650        /* All the messages must have at least 1 byte length */
2651        if (nlmsg_len(nlh) < sizeof(struct rtgenmsg))
2652                return 0;
2653
2654        family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
2655        sz_idx = type>>2;
2656        kind = type&3;
2657
2658        if (kind != 2 && !ns_capable(net->user_ns, CAP_NET_ADMIN))
2659                return -EPERM;
2660
2661        if (kind == 2 && nlh->nlmsg_flags&NLM_F_DUMP) {
2662                struct sock *rtnl;
2663                rtnl_dumpit_func dumpit;
2664                rtnl_calcit_func calcit;
2665                u16 min_dump_alloc = 0;
2666
2667                dumpit = rtnl_get_dumpit(family, type);
2668                if (dumpit == NULL)
2669                        return -EOPNOTSUPP;
2670                calcit = rtnl_get_calcit(family, type);
2671                if (calcit)
2672                        min_dump_alloc = calcit(skb, nlh);
2673
2674                __rtnl_unlock();
2675                rtnl = net->rtnl;
2676                {
2677                        struct netlink_dump_control c = {
2678                                .dump           = dumpit,
2679                                .min_dump_alloc = min_dump_alloc,
2680                        };
2681                        err = netlink_dump_start(rtnl, skb, nlh, &c);
2682                }
2683                rtnl_lock();
2684                return err;
2685        }
2686
2687        doit = rtnl_get_doit(family, type);
2688        if (doit == NULL)
2689                return -EOPNOTSUPP;
2690
2691        return doit(skb, nlh);
2692}
2693
2694static void rtnetlink_rcv(struct sk_buff *skb)
2695{
2696        rtnl_lock();
2697        netlink_rcv_skb(skb, &rtnetlink_rcv_msg);
2698        rtnl_unlock();
2699}
2700
2701static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr)
2702{
2703        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2704
2705        switch (event) {
2706        case NETDEV_UP:
2707        case NETDEV_DOWN:
2708        case NETDEV_PRE_UP:
2709        case NETDEV_POST_INIT:
2710        case NETDEV_REGISTER:
2711        case NETDEV_CHANGE:
2712        case NETDEV_PRE_TYPE_CHANGE:
2713        case NETDEV_GOING_DOWN:
2714        case NETDEV_UNREGISTER:
2715        case NETDEV_UNREGISTER_FINAL:
2716        case NETDEV_RELEASE:
2717        case NETDEV_JOIN:
2718                break;
2719        default:
2720                rtmsg_ifinfo(RTM_NEWLINK, dev, 0);
2721                break;
2722        }
2723        return NOTIFY_DONE;
2724}
2725
2726static struct notifier_block rtnetlink_dev_notifier = {
2727        .notifier_call  = rtnetlink_event,
2728};
2729
2730
2731static int __net_init rtnetlink_net_init(struct net *net)
2732{
2733        struct sock *sk;
2734        struct netlink_kernel_cfg cfg = {
2735                .groups         = RTNLGRP_MAX,
2736                .input          = rtnetlink_rcv,
2737                .cb_mutex       = &rtnl_mutex,
2738                .flags          = NL_CFG_F_NONROOT_RECV,
2739        };
2740
2741        sk = netlink_kernel_create(net, NETLINK_ROUTE, &cfg);
2742        if (!sk)
2743                return -ENOMEM;
2744        net->rtnl = sk;
2745        return 0;
2746}
2747
2748static void __net_exit rtnetlink_net_exit(struct net *net)
2749{
2750        netlink_kernel_release(net->rtnl);
2751        net->rtnl = NULL;
2752}
2753
2754static struct pernet_operations rtnetlink_net_ops = {
2755        .init = rtnetlink_net_init,
2756        .exit = rtnetlink_net_exit,
2757};
2758
2759void __init rtnetlink_init(void)
2760{
2761        if (register_pernet_subsys(&rtnetlink_net_ops))
2762                panic("rtnetlink_init: cannot initialize rtnetlink\n");
2763
2764        register_netdevice_notifier(&rtnetlink_dev_notifier);
2765
2766        rtnl_register(PF_UNSPEC, RTM_GETLINK, rtnl_getlink,
2767                      rtnl_dump_ifinfo, rtnl_calcit);
2768        rtnl_register(PF_UNSPEC, RTM_SETLINK, rtnl_setlink, NULL, NULL);
2769        rtnl_register(PF_UNSPEC, RTM_NEWLINK, rtnl_newlink, NULL, NULL);
2770        rtnl_register(PF_UNSPEC, RTM_DELLINK, rtnl_dellink, NULL, NULL);
2771
2772        rtnl_register(PF_UNSPEC, RTM_GETADDR, NULL, rtnl_dump_all, NULL);
2773        rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all, NULL);
2774
2775        rtnl_register(PF_BRIDGE, RTM_NEWNEIGH, rtnl_fdb_add, NULL, NULL);
2776        rtnl_register(PF_BRIDGE, RTM_DELNEIGH, rtnl_fdb_del, NULL, NULL);
2777        rtnl_register(PF_BRIDGE, RTM_GETNEIGH, NULL, rtnl_fdb_dump, NULL);
2778
2779        rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, rtnl_bridge_getlink, NULL);
2780        rtnl_register(PF_BRIDGE, RTM_DELLINK, rtnl_bridge_dellink, NULL, NULL);
2781        rtnl_register(PF_BRIDGE, RTM_SETLINK, rtnl_bridge_setlink, NULL, NULL);
2782}
2783
2784