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}
 772
 773static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
 774{
 775        struct nlattr *vf_ports;
 776        struct nlattr *vf_port;
 777        int vf;
 778        int err;
 779
 780        vf_ports = nla_nest_start(skb, IFLA_VF_PORTS);
 781        if (!vf_ports)
 782                return -EMSGSIZE;
 783
 784        for (vf = 0; vf < dev_num_vf(dev->dev.parent); vf++) {
 785                vf_port = nla_nest_start(skb, IFLA_VF_PORT);
 786                if (!vf_port)
 787                        goto nla_put_failure;
 788                if (nla_put_u32(skb, IFLA_PORT_VF, vf))
 789                        goto nla_put_failure;
 790                err = dev->netdev_ops->ndo_get_vf_port(dev, vf, skb);
 791                if (err == -EMSGSIZE)
 792                        goto nla_put_failure;
 793                if (err) {
 794                        nla_nest_cancel(skb, vf_port);
 795                        continue;
 796                }
 797                nla_nest_end(skb, vf_port);
 798        }
 799
 800        nla_nest_end(skb, vf_ports);
 801
 802        return 0;
 803
 804nla_put_failure:
 805        nla_nest_cancel(skb, vf_ports);
 806        return -EMSGSIZE;
 807}
 808
 809static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
 810{
 811        struct nlattr *port_self;
 812        int err;
 813
 814        port_self = nla_nest_start(skb, IFLA_PORT_SELF);
 815        if (!port_self)
 816                return -EMSGSIZE;
 817
 818        err = dev->netdev_ops->ndo_get_vf_port(dev, PORT_SELF_VF, skb);
 819        if (err) {
 820                nla_nest_cancel(skb, port_self);
 821                return (err == -EMSGSIZE) ? err : 0;
 822        }
 823
 824        nla_nest_end(skb, port_self);
 825
 826        return 0;
 827}
 828
 829static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev)
 830{
 831        int err;
 832
 833        if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
 834                return 0;
 835
 836        err = rtnl_port_self_fill(skb, dev);
 837        if (err)
 838                return err;
 839
 840        if (dev_num_vf(dev->dev.parent)) {
 841                err = rtnl_vf_ports_fill(skb, dev);
 842                if (err)
 843                        return err;
 844        }
 845
 846        return 0;
 847}
 848
 849static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 850                            int type, u32 pid, u32 seq, u32 change,
 851                            unsigned int flags, u32 ext_filter_mask)
 852{
 853        struct ifinfomsg *ifm;
 854        struct nlmsghdr *nlh;
 855        struct rtnl_link_stats64 temp;
 856        const struct rtnl_link_stats64 *stats;
 857        struct nlattr *attr, *af_spec;
 858        struct rtnl_af_ops *af_ops;
 859        struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
 860
 861        ASSERT_RTNL();
 862        nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);
 863        if (nlh == NULL)
 864                return -EMSGSIZE;
 865
 866        ifm = nlmsg_data(nlh);
 867        ifm->ifi_family = AF_UNSPEC;
 868        ifm->__ifi_pad = 0;
 869        ifm->ifi_type = dev->type;
 870        ifm->ifi_index = dev->ifindex;
 871        ifm->ifi_flags = dev_get_flags(dev);
 872        ifm->ifi_change = change;
 873
 874        if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
 875            nla_put_u32(skb, IFLA_TXQLEN, dev->tx_queue_len) ||
 876            nla_put_u8(skb, IFLA_OPERSTATE,
 877                       netif_running(dev) ? dev->operstate : IF_OPER_DOWN) ||
 878            nla_put_u8(skb, IFLA_LINKMODE, dev->link_mode) ||
 879            nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
 880            nla_put_u32(skb, IFLA_GROUP, dev->group) ||
 881            nla_put_u32(skb, IFLA_PROMISCUITY, dev->promiscuity) ||
 882            nla_put_u32(skb, IFLA_NUM_TX_QUEUES, dev->num_tx_queues) ||
 883#ifdef CONFIG_RPS
 884            nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) ||
 885#endif
 886            (dev->ifindex != dev->iflink &&
 887             nla_put_u32(skb, IFLA_LINK, dev->iflink)) ||
 888            (upper_dev &&
 889             nla_put_u32(skb, IFLA_MASTER, upper_dev->ifindex)) ||
 890            nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
 891            (dev->qdisc &&
 892             nla_put_string(skb, IFLA_QDISC, dev->qdisc->ops->id)) ||
 893            (dev->ifalias &&
 894             nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)))
 895                goto nla_put_failure;
 896
 897        if (1) {
 898                struct rtnl_link_ifmap map = {
 899                        .mem_start   = dev->mem_start,
 900                        .mem_end     = dev->mem_end,
 901                        .base_addr   = dev->base_addr,
 902                        .irq         = dev->irq,
 903                        .dma         = dev->dma,
 904                        .port        = dev->if_port,
 905                };
 906                if (nla_put(skb, IFLA_MAP, sizeof(map), &map))
 907                        goto nla_put_failure;
 908        }
 909
 910        if (dev->addr_len) {
 911                if (nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr) ||
 912                    nla_put(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast))
 913                        goto nla_put_failure;
 914        }
 915
 916        attr = nla_reserve(skb, IFLA_STATS,
 917                        sizeof(struct rtnl_link_stats));
 918        if (attr == NULL)
 919                goto nla_put_failure;
 920
 921        stats = dev_get_stats(dev, &temp);
 922        copy_rtnl_link_stats(nla_data(attr), stats);
 923
 924        attr = nla_reserve(skb, IFLA_STATS64,
 925                        sizeof(struct rtnl_link_stats64));
 926        if (attr == NULL)
 927                goto nla_put_failure;
 928        copy_rtnl_link_stats64(nla_data(attr), stats);
 929
 930        if (dev->dev.parent && (ext_filter_mask & RTEXT_FILTER_VF) &&
 931            nla_put_u32(skb, IFLA_NUM_VF, dev_num_vf(dev->dev.parent)))
 932                goto nla_put_failure;
 933
 934        if (dev->netdev_ops->ndo_get_vf_config && dev->dev.parent
 935            && (ext_filter_mask & RTEXT_FILTER_VF)) {
 936                int i;
 937
 938                struct nlattr *vfinfo, *vf;
 939                int num_vfs = dev_num_vf(dev->dev.parent);
 940
 941                vfinfo = nla_nest_start(skb, IFLA_VFINFO_LIST);
 942                if (!vfinfo)
 943                        goto nla_put_failure;
 944                for (i = 0; i < num_vfs; i++) {
 945                        struct ifla_vf_info ivi;
 946                        struct ifla_vf_mac vf_mac;
 947                        struct ifla_vf_vlan vf_vlan;
 948                        struct ifla_vf_tx_rate vf_tx_rate;
 949                        struct ifla_vf_spoofchk vf_spoofchk;
 950                        struct ifla_vf_link_state vf_linkstate;
 951
 952                        /*
 953                         * Not all SR-IOV capable drivers support the
 954                         * spoofcheck query.  Preset to -1 so the user
 955                         * space tool can detect that the driver didn't
 956                         * report anything.
 957                         */
 958                        ivi.spoofchk = -1;
 959                        memset(ivi.mac, 0, sizeof(ivi.mac));
 960                        /* The default value for VF link state is "auto"
 961                         * IFLA_VF_LINK_STATE_AUTO which equals zero
 962                         */
 963                        ivi.linkstate = 0;
 964                        if (dev->netdev_ops->ndo_get_vf_config(dev, i, &ivi))
 965                                break;
 966                        vf_mac.vf =
 967                                vf_vlan.vf =
 968                                vf_tx_rate.vf =
 969                                vf_spoofchk.vf =
 970                                vf_linkstate.vf = ivi.vf;
 971
 972                        memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac));
 973                        vf_vlan.vlan = ivi.vlan;
 974                        vf_vlan.qos = ivi.qos;
 975                        vf_tx_rate.rate = ivi.tx_rate;
 976                        vf_spoofchk.setting = ivi.spoofchk;
 977                        vf_linkstate.link_state = ivi.linkstate;
 978                        vf = nla_nest_start(skb, IFLA_VF_INFO);
 979                        if (!vf) {
 980                                nla_nest_cancel(skb, vfinfo);
 981                                goto nla_put_failure;
 982                        }
 983                        if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
 984                            nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
 985                            nla_put(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate),
 986                                    &vf_tx_rate) ||
 987                            nla_put(skb, IFLA_VF_SPOOFCHK, sizeof(vf_spoofchk),
 988                                    &vf_spoofchk) ||
 989                            nla_put(skb, IFLA_VF_LINK_STATE, sizeof(vf_linkstate),
 990                                    &vf_linkstate))
 991                                goto nla_put_failure;
 992                        nla_nest_end(skb, vf);
 993                }
 994                nla_nest_end(skb, vfinfo);
 995        }
 996
 997        if (rtnl_port_fill(skb, dev))
 998                goto nla_put_failure;
 999
1000        if (dev->rtnl_link_ops) {
1001                if (rtnl_link_fill(skb, dev) < 0)
1002                        goto nla_put_failure;
1003        }
1004
1005        if (!(af_spec = nla_nest_start(skb, IFLA_AF_SPEC)))
1006                goto nla_put_failure;
1007
1008        list_for_each_entry(af_ops, &rtnl_af_ops, list) {
1009                if (af_ops->fill_link_af) {
1010                        struct nlattr *af;
1011                        int err;
1012
1013                        if (!(af = nla_nest_start(skb, af_ops->family)))
1014                                goto nla_put_failure;
1015
1016                        err = af_ops->fill_link_af(skb, dev);
1017
1018                        /*
1019                         * Caller may return ENODATA to indicate that there
1020                         * was no data to be dumped. This is not an error, it
1021                         * means we should trim the attribute header and
1022                         * continue.
1023                         */
1024                        if (err == -ENODATA)
1025                                nla_nest_cancel(skb, af);
1026                        else if (err < 0)
1027                                goto nla_put_failure;
1028
1029                        nla_nest_end(skb, af);
1030                }
1031        }
1032
1033        nla_nest_end(skb, af_spec);
1034
1035        return nlmsg_end(skb, nlh);
1036
1037nla_put_failure:
1038        nlmsg_cancel(skb, nlh);
1039        return -EMSGSIZE;
1040}
1041
1042static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
1043{
1044        struct net *net = sock_net(skb->sk);
1045        int h, s_h;
1046        int idx = 0, s_idx;
1047        struct net_device *dev;
1048        struct hlist_head *head;
1049        struct nlattr *tb[IFLA_MAX+1];
1050        u32 ext_filter_mask = 0;
1051
1052        s_h = cb->args[0];
1053        s_idx = cb->args[1];
1054
1055        rcu_read_lock();
1056        cb->seq = net->dev_base_seq;
1057
1058        if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX,
1059                        ifla_policy) >= 0) {
1060
1061                if (tb[IFLA_EXT_MASK])
1062                        ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1063        }
1064
1065        for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
1066                idx = 0;
1067                head = &net->dev_index_head[h];
1068                hlist_for_each_entry_rcu(dev, head, index_hlist) {
1069                        if (idx < s_idx)
1070                                goto cont;
1071                        if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
1072                                             NETLINK_CB(cb->skb).portid,
1073                                             cb->nlh->nlmsg_seq, 0,
1074                                             NLM_F_MULTI,
1075                                             ext_filter_mask) <= 0)
1076                                goto out;
1077
1078                        nl_dump_check_consistent(cb, nlmsg_hdr(skb));
1079cont:
1080                        idx++;
1081                }
1082        }
1083out:
1084        rcu_read_unlock();
1085        cb->args[1] = idx;
1086        cb->args[0] = h;
1087
1088        return skb->len;
1089}
1090
1091const struct nla_policy ifla_policy[IFLA_MAX+1] = {
1092        [IFLA_IFNAME]           = { .type = NLA_STRING, .len = IFNAMSIZ-1 },
1093        [IFLA_ADDRESS]          = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1094        [IFLA_BROADCAST]        = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1095        [IFLA_MAP]              = { .len = sizeof(struct rtnl_link_ifmap) },
1096        [IFLA_MTU]              = { .type = NLA_U32 },
1097        [IFLA_LINK]             = { .type = NLA_U32 },
1098        [IFLA_MASTER]           = { .type = NLA_U32 },
1099        [IFLA_CARRIER]          = { .type = NLA_U8 },
1100        [IFLA_TXQLEN]           = { .type = NLA_U32 },
1101        [IFLA_WEIGHT]           = { .type = NLA_U32 },
1102        [IFLA_OPERSTATE]        = { .type = NLA_U8 },
1103        [IFLA_LINKMODE]         = { .type = NLA_U8 },
1104        [IFLA_LINKINFO]         = { .type = NLA_NESTED },
1105        [IFLA_NET_NS_PID]       = { .type = NLA_U32 },
1106        [IFLA_NET_NS_FD]        = { .type = NLA_U32 },
1107        [IFLA_IFALIAS]          = { .type = NLA_STRING, .len = IFALIASZ-1 },
1108        [IFLA_VFINFO_LIST]      = {. type = NLA_NESTED },
1109        [IFLA_VF_PORTS]         = { .type = NLA_NESTED },
1110        [IFLA_PORT_SELF]        = { .type = NLA_NESTED },
1111        [IFLA_AF_SPEC]          = { .type = NLA_NESTED },
1112        [IFLA_EXT_MASK]         = { .type = NLA_U32 },
1113        [IFLA_PROMISCUITY]      = { .type = NLA_U32 },
1114        [IFLA_NUM_TX_QUEUES]    = { .type = NLA_U32 },
1115        [IFLA_NUM_RX_QUEUES]    = { .type = NLA_U32 },
1116};
1117EXPORT_SYMBOL(ifla_policy);
1118
1119static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
1120        [IFLA_INFO_KIND]        = { .type = NLA_STRING },
1121        [IFLA_INFO_DATA]        = { .type = NLA_NESTED },
1122};
1123
1124static const struct nla_policy ifla_vfinfo_policy[IFLA_VF_INFO_MAX+1] = {
1125        [IFLA_VF_INFO]          = { .type = NLA_NESTED },
1126};
1127
1128static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1129        [IFLA_VF_MAC]           = { .type = NLA_BINARY,
1130                                    .len = sizeof(struct ifla_vf_mac) },
1131        [IFLA_VF_VLAN]          = { .type = NLA_BINARY,
1132                                    .len = sizeof(struct ifla_vf_vlan) },
1133        [IFLA_VF_TX_RATE]       = { .type = NLA_BINARY,
1134                                    .len = sizeof(struct ifla_vf_tx_rate) },
1135        [IFLA_VF_SPOOFCHK]      = { .type = NLA_BINARY,
1136                                    .len = sizeof(struct ifla_vf_spoofchk) },
1137};
1138
1139static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
1140        [IFLA_PORT_VF]          = { .type = NLA_U32 },
1141        [IFLA_PORT_PROFILE]     = { .type = NLA_STRING,
1142                                    .len = PORT_PROFILE_MAX },
1143        [IFLA_PORT_VSI_TYPE]    = { .type = NLA_BINARY,
1144                                    .len = sizeof(struct ifla_port_vsi)},
1145        [IFLA_PORT_INSTANCE_UUID] = { .type = NLA_BINARY,
1146                                      .len = PORT_UUID_MAX },
1147        [IFLA_PORT_HOST_UUID]   = { .type = NLA_STRING,
1148                                    .len = PORT_UUID_MAX },
1149        [IFLA_PORT_REQUEST]     = { .type = NLA_U8, },
1150        [IFLA_PORT_RESPONSE]    = { .type = NLA_U16, },
1151};
1152
1153struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])
1154{
1155        struct net *net;
1156        /* Examine the link attributes and figure out which
1157         * network namespace we are talking about.
1158         */
1159        if (tb[IFLA_NET_NS_PID])
1160                net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID]));
1161        else if (tb[IFLA_NET_NS_FD])
1162                net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));
1163        else
1164                net = get_net(src_net);
1165        return net;
1166}
1167EXPORT_SYMBOL(rtnl_link_get_net);
1168
1169static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
1170{
1171        if (dev) {
1172                if (tb[IFLA_ADDRESS] &&
1173                    nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
1174                        return -EINVAL;
1175
1176                if (tb[IFLA_BROADCAST] &&
1177                    nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
1178                        return -EINVAL;
1179        }
1180
1181        if (tb[IFLA_AF_SPEC]) {
1182                struct nlattr *af;
1183                int rem, err;
1184
1185                nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1186                        const struct rtnl_af_ops *af_ops;
1187
1188                        if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1189                                return -EAFNOSUPPORT;
1190
1191                        if (!af_ops->set_link_af)
1192                                return -EOPNOTSUPP;
1193
1194                        if (af_ops->validate_link_af) {
1195                                err = af_ops->validate_link_af(dev, af);
1196                                if (err < 0)
1197                                        return err;
1198                        }
1199                }
1200        }
1201
1202        return 0;
1203}
1204
1205static int do_setvfinfo(struct net_device *dev, struct nlattr *attr)
1206{
1207        int rem, err = -EINVAL;
1208        struct nlattr *vf;
1209        const struct net_device_ops *ops = dev->netdev_ops;
1210
1211        nla_for_each_nested(vf, attr, rem) {
1212                switch (nla_type(vf)) {
1213                case IFLA_VF_MAC: {
1214                        struct ifla_vf_mac *ivm;
1215                        ivm = nla_data(vf);
1216                        err = -EOPNOTSUPP;
1217                        if (ops->ndo_set_vf_mac)
1218                                err = ops->ndo_set_vf_mac(dev, ivm->vf,
1219                                                          ivm->mac);
1220                        break;
1221                }
1222                case IFLA_VF_VLAN: {
1223                        struct ifla_vf_vlan *ivv;
1224                        ivv = nla_data(vf);
1225                        err = -EOPNOTSUPP;
1226                        if (ops->ndo_set_vf_vlan)
1227                                err = ops->ndo_set_vf_vlan(dev, ivv->vf,
1228                                                           ivv->vlan,
1229                                                           ivv->qos);
1230                        break;
1231                }
1232                case IFLA_VF_TX_RATE: {
1233                        struct ifla_vf_tx_rate *ivt;
1234                        ivt = nla_data(vf);
1235                        err = -EOPNOTSUPP;
1236                        if (ops->ndo_set_vf_tx_rate)
1237                                err = ops->ndo_set_vf_tx_rate(dev, ivt->vf,
1238                                                              ivt->rate);
1239                        break;
1240                }
1241                case IFLA_VF_SPOOFCHK: {
1242                        struct ifla_vf_spoofchk *ivs;
1243                        ivs = nla_data(vf);
1244                        err = -EOPNOTSUPP;
1245                        if (ops->ndo_set_vf_spoofchk)
1246                                err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
1247                                                               ivs->setting);
1248                        break;
1249                }
1250                case IFLA_VF_LINK_STATE: {
1251                        struct ifla_vf_link_state *ivl;
1252                        ivl = nla_data(vf);
1253                        err = -EOPNOTSUPP;
1254                        if (ops->ndo_set_vf_link_state)
1255                                err = ops->ndo_set_vf_link_state(dev, ivl->vf,
1256                                                                 ivl->link_state);
1257                        break;
1258                }
1259                default:
1260                        err = -EINVAL;
1261                        break;
1262                }
1263                if (err)
1264                        break;
1265        }
1266        return err;
1267}
1268
1269static int do_set_master(struct net_device *dev, int ifindex)
1270{
1271        struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
1272        const struct net_device_ops *ops;
1273        int err;
1274
1275        if (upper_dev) {
1276                if (upper_dev->ifindex == ifindex)
1277                        return 0;
1278                ops = upper_dev->netdev_ops;
1279                if (ops->ndo_del_slave) {
1280                        err = ops->ndo_del_slave(upper_dev, dev);
1281                        if (err)
1282                                return err;
1283                } else {
1284                        return -EOPNOTSUPP;
1285                }
1286        }
1287
1288        if (ifindex) {
1289                upper_dev = __dev_get_by_index(dev_net(dev), ifindex);
1290                if (!upper_dev)
1291                        return -EINVAL;
1292                ops = upper_dev->netdev_ops;
1293                if (ops->ndo_add_slave) {
1294                        err = ops->ndo_add_slave(upper_dev, dev);
1295                        if (err)
1296                                return err;
1297                } else {
1298                        return -EOPNOTSUPP;
1299                }
1300        }
1301        return 0;
1302}
1303
1304static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
1305                      struct nlattr **tb, char *ifname, int modified)
1306{
1307        const struct net_device_ops *ops = dev->netdev_ops;
1308        int err;
1309
1310        if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
1311                struct net *net = rtnl_link_get_net(dev_net(dev), tb);
1312                if (IS_ERR(net)) {
1313                        err = PTR_ERR(net);
1314                        goto errout;
1315                }
1316                if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) {
1317                        err = -EPERM;
1318                        goto errout;
1319                }
1320                err = dev_change_net_namespace(dev, net, ifname);
1321                put_net(net);
1322                if (err)
1323                        goto errout;
1324                modified = 1;
1325        }
1326
1327        if (tb[IFLA_MAP]) {
1328                struct rtnl_link_ifmap *u_map;
1329                struct ifmap k_map;
1330
1331                if (!ops->ndo_set_config) {
1332                        err = -EOPNOTSUPP;
1333                        goto errout;
1334                }
1335
1336                if (!netif_device_present(dev)) {
1337                        err = -ENODEV;
1338                        goto errout;
1339                }
1340
1341                u_map = nla_data(tb[IFLA_MAP]);
1342                k_map.mem_start = (unsigned long) u_map->mem_start;
1343                k_map.mem_end = (unsigned long) u_map->mem_end;
1344                k_map.base_addr = (unsigned short) u_map->base_addr;
1345                k_map.irq = (unsigned char) u_map->irq;
1346                k_map.dma = (unsigned char) u_map->dma;
1347                k_map.port = (unsigned char) u_map->port;
1348
1349                err = ops->ndo_set_config(dev, &k_map);
1350                if (err < 0)
1351                        goto errout;
1352
1353                modified = 1;
1354        }
1355
1356        if (tb[IFLA_ADDRESS]) {
1357                struct sockaddr *sa;
1358                int len;
1359
1360                len = sizeof(sa_family_t) + dev->addr_len;
1361                sa = kmalloc(len, GFP_KERNEL);
1362                if (!sa) {
1363                        err = -ENOMEM;
1364                        goto errout;
1365                }
1366                sa->sa_family = dev->type;
1367                memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
1368                       dev->addr_len);
1369                err = dev_set_mac_address(dev, sa);
1370                kfree(sa);
1371                if (err)
1372                        goto errout;
1373                modified = 1;
1374        }
1375
1376        if (tb[IFLA_MTU]) {
1377                err = dev_set_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
1378                if (err < 0)
1379                        goto errout;
1380                modified = 1;
1381        }
1382
1383        if (tb[IFLA_GROUP]) {
1384                dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1385                modified = 1;
1386        }
1387
1388        /*
1389         * Interface selected by interface index but interface
1390         * name provided implies that a name change has been
1391         * requested.
1392         */
1393        if (ifm->ifi_index > 0 && ifname[0]) {
1394                err = dev_change_name(dev, ifname);
1395                if (err < 0)
1396                        goto errout;
1397                modified = 1;
1398        }
1399
1400        if (tb[IFLA_IFALIAS]) {
1401                err = dev_set_alias(dev, nla_data(tb[IFLA_IFALIAS]),
1402                                    nla_len(tb[IFLA_IFALIAS]));
1403                if (err < 0)
1404                        goto errout;
1405                modified = 1;
1406        }
1407
1408        if (tb[IFLA_BROADCAST]) {
1409                nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
1410                call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
1411        }
1412
1413        if (ifm->ifi_flags || ifm->ifi_change) {
1414                err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
1415                if (err < 0)
1416                        goto errout;
1417        }
1418
1419        if (tb[IFLA_MASTER]) {
1420                err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
1421                if (err)
1422                        goto errout;
1423                modified = 1;
1424        }
1425
1426        if (tb[IFLA_CARRIER]) {
1427                err = dev_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER]));
1428                if (err)
1429                        goto errout;
1430                modified = 1;
1431        }
1432
1433        if (tb[IFLA_TXQLEN])
1434                dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
1435
1436        if (tb[IFLA_OPERSTATE])
1437                set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
1438
1439        if (tb[IFLA_LINKMODE]) {
1440                write_lock_bh(&dev_base_lock);
1441                dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
1442                write_unlock_bh(&dev_base_lock);
1443        }
1444
1445        if (tb[IFLA_VFINFO_LIST]) {
1446                struct nlattr *attr;
1447                int rem;
1448                nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
1449                        if (nla_type(attr) != IFLA_VF_INFO) {
1450                                err = -EINVAL;
1451                                goto errout;
1452                        }
1453                        err = do_setvfinfo(dev, attr);
1454                        if (err < 0)
1455                                goto errout;
1456                        modified = 1;
1457                }
1458        }
1459        err = 0;
1460
1461        if (tb[IFLA_VF_PORTS]) {
1462                struct nlattr *port[IFLA_PORT_MAX+1];
1463                struct nlattr *attr;
1464                int vf;
1465                int rem;
1466
1467                err = -EOPNOTSUPP;
1468                if (!ops->ndo_set_vf_port)
1469                        goto errout;
1470
1471                nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
1472                        if (nla_type(attr) != IFLA_VF_PORT)
1473                                continue;
1474                        err = nla_parse_nested(port, IFLA_PORT_MAX,
1475                                attr, ifla_port_policy);
1476                        if (err < 0)
1477                                goto errout;
1478                        if (!port[IFLA_PORT_VF]) {
1479                                err = -EOPNOTSUPP;
1480                                goto errout;
1481                        }
1482                        vf = nla_get_u32(port[IFLA_PORT_VF]);
1483                        err = ops->ndo_set_vf_port(dev, vf, port);
1484                        if (err < 0)
1485                                goto errout;
1486                        modified = 1;
1487                }
1488        }
1489        err = 0;
1490
1491        if (tb[IFLA_PORT_SELF]) {
1492                struct nlattr *port[IFLA_PORT_MAX+1];
1493
1494                err = nla_parse_nested(port, IFLA_PORT_MAX,
1495                        tb[IFLA_PORT_SELF], ifla_port_policy);
1496                if (err < 0)
1497                        goto errout;
1498
1499                err = -EOPNOTSUPP;
1500                if (ops->ndo_set_vf_port)
1501                        err = ops->ndo_set_vf_port(dev, PORT_SELF_VF, port);
1502                if (err < 0)
1503                        goto errout;
1504                modified = 1;
1505        }
1506
1507        if (tb[IFLA_AF_SPEC]) {
1508                struct nlattr *af;
1509                int rem;
1510
1511                nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1512                        const struct rtnl_af_ops *af_ops;
1513
1514                        if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1515                                BUG();
1516
1517                        err = af_ops->set_link_af(dev, af);
1518                        if (err < 0)
1519                                goto errout;
1520
1521                        modified = 1;
1522                }
1523        }
1524        err = 0;
1525
1526errout:
1527        if (err < 0 && modified)
1528                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",
1529                                     dev->name);
1530
1531        return err;
1532}
1533
1534static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
1535{
1536        struct net *net = sock_net(skb->sk);
1537        struct ifinfomsg *ifm;
1538        struct net_device *dev;
1539        int err;
1540        struct nlattr *tb[IFLA_MAX+1];
1541        char ifname[IFNAMSIZ];
1542
1543        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1544        if (err < 0)
1545                goto errout;
1546
1547        if (tb[IFLA_IFNAME])
1548                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1549        else
1550                ifname[0] = '\0';
1551
1552        err = -EINVAL;
1553        ifm = nlmsg_data(nlh);
1554        if (ifm->ifi_index > 0)
1555                dev = __dev_get_by_index(net, ifm->ifi_index);
1556        else if (tb[IFLA_IFNAME])
1557                dev = __dev_get_by_name(net, ifname);
1558        else
1559                goto errout;
1560
1561        if (dev == NULL) {
1562                err = -ENODEV;
1563                goto errout;
1564        }
1565
1566        err = validate_linkmsg(dev, tb);
1567        if (err < 0)
1568                goto errout;
1569
1570        err = do_setlink(dev, ifm, tb, ifname, 0);
1571errout:
1572        return err;
1573}
1574
1575static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
1576{
1577        struct net *net = sock_net(skb->sk);
1578        const struct rtnl_link_ops *ops;
1579        struct net_device *dev;
1580        struct ifinfomsg *ifm;
1581        char ifname[IFNAMSIZ];
1582        struct nlattr *tb[IFLA_MAX+1];
1583        int err;
1584        LIST_HEAD(list_kill);
1585
1586        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1587        if (err < 0)
1588                return err;
1589
1590        if (tb[IFLA_IFNAME])
1591                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1592
1593        ifm = nlmsg_data(nlh);
1594        if (ifm->ifi_index > 0)
1595                dev = __dev_get_by_index(net, ifm->ifi_index);
1596        else if (tb[IFLA_IFNAME])
1597                dev = __dev_get_by_name(net, ifname);
1598        else
1599                return -EINVAL;
1600
1601        if (!dev)
1602                return -ENODEV;
1603
1604        ops = dev->rtnl_link_ops;
1605        if (!ops)
1606                return -EOPNOTSUPP;
1607
1608        ops->dellink(dev, &list_kill);
1609        unregister_netdevice_many(&list_kill);
1610        list_del(&list_kill);
1611        return 0;
1612}
1613
1614int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm)
1615{
1616        unsigned int old_flags;
1617        int err;
1618
1619        old_flags = dev->flags;
1620        if (ifm && (ifm->ifi_flags || ifm->ifi_change)) {
1621                err = __dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
1622                if (err < 0)
1623                        return err;
1624        }
1625
1626        dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
1627        rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
1628
1629        __dev_notify_flags(dev, old_flags);
1630        return 0;
1631}
1632EXPORT_SYMBOL(rtnl_configure_link);
1633
1634struct net_device *rtnl_create_link(struct net *net,
1635        char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[])
1636{
1637        int err;
1638        struct net_device *dev;
1639        unsigned int num_tx_queues = 1;
1640        unsigned int num_rx_queues = 1;
1641
1642        if (tb[IFLA_NUM_TX_QUEUES])
1643                num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]);
1644        else if (ops->get_num_tx_queues)
1645                num_tx_queues = ops->get_num_tx_queues();
1646
1647        if (tb[IFLA_NUM_RX_QUEUES])
1648                num_rx_queues = nla_get_u32(tb[IFLA_NUM_RX_QUEUES]);
1649        else if (ops->get_num_rx_queues)
1650                num_rx_queues = ops->get_num_rx_queues();
1651
1652        err = -ENOMEM;
1653        dev = alloc_netdev_mqs(ops->priv_size, ifname, ops->setup,
1654                               num_tx_queues, num_rx_queues);
1655        if (!dev)
1656                goto err;
1657
1658        dev_net_set(dev, net);
1659        dev->rtnl_link_ops = ops;
1660        dev->rtnl_link_state = RTNL_LINK_INITIALIZING;
1661
1662        if (tb[IFLA_MTU])
1663                dev->mtu = nla_get_u32(tb[IFLA_MTU]);
1664        if (tb[IFLA_ADDRESS]) {
1665                memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
1666                                nla_len(tb[IFLA_ADDRESS]));
1667                dev->addr_assign_type = NET_ADDR_SET;
1668        }
1669        if (tb[IFLA_BROADCAST])
1670                memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
1671                                nla_len(tb[IFLA_BROADCAST]));
1672        if (tb[IFLA_TXQLEN])
1673                dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
1674        if (tb[IFLA_OPERSTATE])
1675                set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
1676        if (tb[IFLA_LINKMODE])
1677                dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
1678        if (tb[IFLA_GROUP])
1679                dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1680
1681        return dev;
1682
1683err:
1684        return ERR_PTR(err);
1685}
1686EXPORT_SYMBOL(rtnl_create_link);
1687
1688static int rtnl_group_changelink(struct net *net, int group,
1689                struct ifinfomsg *ifm,
1690                struct nlattr **tb)
1691{
1692        struct net_device *dev;
1693        int err;
1694
1695        for_each_netdev(net, dev) {
1696                if (dev->group == group) {
1697                        err = do_setlink(dev, ifm, tb, NULL, 0);
1698                        if (err < 0)
1699                                return err;
1700                }
1701        }
1702
1703        return 0;
1704}
1705
1706static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh)
1707{
1708        struct net *net = sock_net(skb->sk);
1709        const struct rtnl_link_ops *ops;
1710        struct net_device *dev;
1711        struct ifinfomsg *ifm;
1712        char kind[MODULE_NAME_LEN];
1713        char ifname[IFNAMSIZ];
1714        struct nlattr *tb[IFLA_MAX+1];
1715        struct nlattr *linkinfo[IFLA_INFO_MAX+1];
1716        int err;
1717
1718#ifdef CONFIG_MODULES
1719replay:
1720#endif
1721        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1722        if (err < 0)
1723                return err;
1724
1725        if (tb[IFLA_IFNAME])
1726                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1727        else
1728                ifname[0] = '\0';
1729
1730        ifm = nlmsg_data(nlh);
1731        if (ifm->ifi_index > 0)
1732                dev = __dev_get_by_index(net, ifm->ifi_index);
1733        else {
1734                if (ifname[0])
1735                        dev = __dev_get_by_name(net, ifname);
1736                else
1737                        dev = NULL;
1738        }
1739
1740        err = validate_linkmsg(dev, tb);
1741        if (err < 0)
1742                return err;
1743
1744        if (tb[IFLA_LINKINFO]) {
1745                err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
1746                                       tb[IFLA_LINKINFO], ifla_info_policy);
1747                if (err < 0)
1748                        return err;
1749        } else
1750                memset(linkinfo, 0, sizeof(linkinfo));
1751
1752        if (linkinfo[IFLA_INFO_KIND]) {
1753                nla_strlcpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
1754                ops = rtnl_link_ops_get(kind);
1755        } else {
1756                kind[0] = '\0';
1757                ops = NULL;
1758        }
1759
1760        if (1) {
1761                struct nlattr *attr[ops ? ops->maxtype + 1 : 0], **data = NULL;
1762                struct net *dest_net;
1763
1764                if (ops) {
1765                        if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
1766                                err = nla_parse_nested(attr, ops->maxtype,
1767                                                       linkinfo[IFLA_INFO_DATA],
1768                                                       ops->policy);
1769                                if (err < 0)
1770                                        return err;
1771                                data = attr;
1772                        }
1773                        if (ops->validate) {
1774                                err = ops->validate(tb, data);
1775                                if (err < 0)
1776                                        return err;
1777                        }
1778                }
1779
1780                if (dev) {
1781                        int modified = 0;
1782
1783                        if (nlh->nlmsg_flags & NLM_F_EXCL)
1784                                return -EEXIST;
1785                        if (nlh->nlmsg_flags & NLM_F_REPLACE)
1786                                return -EOPNOTSUPP;
1787
1788                        if (linkinfo[IFLA_INFO_DATA]) {
1789                                if (!ops || ops != dev->rtnl_link_ops ||
1790                                    !ops->changelink)
1791                                        return -EOPNOTSUPP;
1792
1793                                err = ops->changelink(dev, tb, data);
1794                                if (err < 0)
1795                                        return err;
1796                                modified = 1;
1797                        }
1798
1799                        return do_setlink(dev, ifm, tb, ifname, modified);
1800                }
1801
1802                if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
1803                        if (ifm->ifi_index == 0 && tb[IFLA_GROUP])
1804                                return rtnl_group_changelink(net,
1805                                                nla_get_u32(tb[IFLA_GROUP]),
1806                                                ifm, tb);
1807                        return -ENODEV;
1808                }
1809
1810                if (tb[IFLA_MAP] || tb[IFLA_MASTER] || tb[IFLA_PROTINFO])
1811                        return -EOPNOTSUPP;
1812
1813                if (!ops) {
1814#ifdef CONFIG_MODULES
1815                        if (kind[0]) {
1816                                __rtnl_unlock();
1817                                request_module("rtnl-link-%s", kind);
1818                                rtnl_lock();
1819                                ops = rtnl_link_ops_get(kind);
1820                                if (ops)
1821                                        goto replay;
1822                        }
1823#endif
1824                        return -EOPNOTSUPP;
1825                }
1826
1827                if (!ifname[0])
1828                        snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
1829
1830                dest_net = rtnl_link_get_net(net, tb);
1831                if (IS_ERR(dest_net))
1832                        return PTR_ERR(dest_net);
1833
1834                dev = rtnl_create_link(dest_net, ifname, ops, tb);
1835                if (IS_ERR(dev)) {
1836                        err = PTR_ERR(dev);
1837                        goto out;
1838                }
1839
1840                dev->ifindex = ifm->ifi_index;
1841
1842                if (ops->newlink)
1843                        err = ops->newlink(net, dev, tb, data);
1844                else
1845                        err = register_netdevice(dev);
1846
1847                if (err < 0 && !IS_ERR(dev))
1848                        free_netdev(dev);
1849                if (err < 0)
1850                        goto out;
1851
1852                err = rtnl_configure_link(dev, ifm);
1853                if (err < 0)
1854                        unregister_netdevice(dev);
1855out:
1856                put_net(dest_net);
1857                return err;
1858        }
1859}
1860
1861static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh)
1862{
1863        struct net *net = sock_net(skb->sk);
1864        struct ifinfomsg *ifm;
1865        char ifname[IFNAMSIZ];
1866        struct nlattr *tb[IFLA_MAX+1];
1867        struct net_device *dev = NULL;
1868        struct sk_buff *nskb;
1869        int err;
1870        u32 ext_filter_mask = 0;
1871
1872        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1873        if (err < 0)
1874                return err;
1875
1876        if (tb[IFLA_IFNAME])
1877                nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1878
1879        if (tb[IFLA_EXT_MASK])
1880                ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1881
1882        ifm = nlmsg_data(nlh);
1883        if (ifm->ifi_index > 0)
1884                dev = __dev_get_by_index(net, ifm->ifi_index);
1885        else if (tb[IFLA_IFNAME])
1886                dev = __dev_get_by_name(net, ifname);
1887        else
1888                return -EINVAL;
1889
1890        if (dev == NULL)
1891                return -ENODEV;
1892
1893        nskb = nlmsg_new(if_nlmsg_size(dev, ext_filter_mask), GFP_KERNEL);
1894        if (nskb == NULL)
1895                return -ENOBUFS;
1896
1897        err = rtnl_fill_ifinfo(nskb, dev, RTM_NEWLINK, NETLINK_CB(skb).portid,
1898                               nlh->nlmsg_seq, 0, 0, ext_filter_mask);
1899        if (err < 0) {
1900                /* -EMSGSIZE implies BUG in if_nlmsg_size */
1901                WARN_ON(err == -EMSGSIZE);
1902                kfree_skb(nskb);
1903        } else
1904                err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
1905
1906        return err;
1907}
1908
1909static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh)
1910{
1911        struct net *net = sock_net(skb->sk);
1912        struct net_device *dev;
1913        struct nlattr *tb[IFLA_MAX+1];
1914        u32 ext_filter_mask = 0;
1915        u16 min_ifinfo_dump_size = 0;
1916
1917        if (nlmsg_parse(nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX,
1918                        ifla_policy) >= 0) {
1919                if (tb[IFLA_EXT_MASK])
1920                        ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1921        }
1922
1923        if (!ext_filter_mask)
1924                return NLMSG_GOODSIZE;
1925        /*
1926         * traverse the list of net devices and compute the minimum
1927         * buffer size based upon the filter mask.
1928         */
1929        list_for_each_entry(dev, &net->dev_base_head, dev_list) {
1930                min_ifinfo_dump_size = max_t(u16, min_ifinfo_dump_size,
1931                                             if_nlmsg_size(dev,
1932                                                           ext_filter_mask));
1933        }
1934
1935        return min_ifinfo_dump_size;
1936}
1937
1938static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
1939{
1940        int idx;
1941        int s_idx = cb->family;
1942
1943        if (s_idx == 0)
1944                s_idx = 1;
1945        for (idx = 1; idx <= RTNL_FAMILY_MAX; idx++) {
1946                int type = cb->nlh->nlmsg_type-RTM_BASE;
1947                if (idx < s_idx || idx == PF_PACKET)
1948                        continue;
1949                if (rtnl_msg_handlers[idx] == NULL ||
1950                    rtnl_msg_handlers[idx][type].dumpit == NULL)
1951                        continue;
1952                if (idx > s_idx) {
1953                        memset(&cb->args[0], 0, sizeof(cb->args));
1954                        cb->prev_seq = 0;
1955                        cb->seq = 0;
1956                }
1957                if (rtnl_msg_handlers[idx][type].dumpit(skb, cb))
1958                        break;
1959        }
1960        cb->family = idx;
1961
1962        return skb->len;
1963}
1964
1965void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change)
1966{
1967        struct net *net = dev_net(dev);
1968        struct sk_buff *skb;
1969        int err = -ENOBUFS;
1970        size_t if_info_size;
1971
1972        skb = nlmsg_new((if_info_size = if_nlmsg_size(dev, 0)), GFP_KERNEL);
1973        if (skb == NULL)
1974                goto errout;
1975
1976        err = rtnl_fill_ifinfo(skb, dev, type, 0, 0, change, 0, 0);
1977        if (err < 0) {
1978                /* -EMSGSIZE implies BUG in if_nlmsg_size() */
1979                WARN_ON(err == -EMSGSIZE);
1980                kfree_skb(skb);
1981                goto errout;
1982        }
1983        rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_KERNEL);
1984        return;
1985errout:
1986        if (err < 0)
1987                rtnl_set_sk_err(net, RTNLGRP_LINK, err);
1988}
1989EXPORT_SYMBOL(rtmsg_ifinfo);
1990
1991static int nlmsg_populate_fdb_fill(struct sk_buff *skb,
1992                                   struct net_device *dev,
1993                                   u8 *addr, u32 pid, u32 seq,
1994                                   int type, unsigned int flags)
1995{
1996        struct nlmsghdr *nlh;
1997        struct ndmsg *ndm;
1998
1999        nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), NLM_F_MULTI);
2000        if (!nlh)
2001                return -EMSGSIZE;
2002
2003        ndm = nlmsg_data(nlh);
2004        ndm->ndm_family  = AF_BRIDGE;
2005        ndm->ndm_pad1    = 0;
2006        ndm->ndm_pad2    = 0;
2007        ndm->ndm_flags   = flags;
2008        ndm->ndm_type    = 0;
2009        ndm->ndm_ifindex = dev->ifindex;
2010        ndm->ndm_state   = NUD_PERMANENT;
2011
2012        if (nla_put(skb, NDA_LLADDR, ETH_ALEN, addr))
2013                goto nla_put_failure;
2014
2015        return nlmsg_end(skb, nlh);
2016
2017nla_put_failure:
2018        nlmsg_cancel(skb, nlh);
2019        return -EMSGSIZE;
2020}
2021
2022static inline size_t rtnl_fdb_nlmsg_size(void)
2023{
2024        return NLMSG_ALIGN(sizeof(struct ndmsg)) + nla_total_size(ETH_ALEN);
2025}
2026
2027static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, int type)
2028{
2029        struct net *net = dev_net(dev);
2030        struct sk_buff *skb;
2031        int err = -ENOBUFS;
2032
2033        skb = nlmsg_new(rtnl_fdb_nlmsg_size(), GFP_ATOMIC);
2034        if (!skb)
2035                goto errout;
2036
2037        err = nlmsg_populate_fdb_fill(skb, dev, addr, 0, 0, type, NTF_SELF);
2038        if (err < 0) {
2039                kfree_skb(skb);
2040                goto errout;
2041        }
2042
2043        rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
2044        return;
2045errout:
2046        rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
2047}
2048
2049/**
2050 * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
2051 */
2052int ndo_dflt_fdb_add(struct ndmsg *ndm,
2053                     struct nlattr *tb[],
2054                     struct net_device *dev,
2055                     const unsigned char *addr,
2056                     u16 flags)
2057{
2058        int err = -EINVAL;
2059
2060        /* If aging addresses are supported device will need to
2061         * implement its own handler for this.
2062         */
2063        if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
2064                pr_info("%s: FDB only supports static addresses\n", dev->name);
2065                return err;
2066        }
2067
2068        if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
2069                err = dev_uc_add_excl(dev, addr);
2070        else if (is_multicast_ether_addr(addr))
2071                err = dev_mc_add_excl(dev, addr);
2072
2073        /* Only return duplicate errors if NLM_F_EXCL is set */
2074        if (err == -EEXIST && !(flags & NLM_F_EXCL))
2075                err = 0;
2076
2077        return err;
2078}
2079EXPORT_SYMBOL(ndo_dflt_fdb_add);
2080
2081static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
2082{
2083        struct net *net = sock_net(skb->sk);
2084        struct ndmsg *ndm;
2085        struct nlattr *tb[NDA_MAX+1];
2086        struct net_device *dev;
2087        u8 *addr;
2088        int err;
2089
2090        err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
2091        if (err < 0)
2092                return err;
2093
2094        ndm = nlmsg_data(nlh);
2095        if (ndm->ndm_ifindex == 0) {
2096                pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid ifindex\n");
2097                return -EINVAL;
2098        }
2099
2100        dev = __dev_get_by_index(net, ndm->ndm_ifindex);
2101        if (dev == NULL) {
2102                pr_info("PF_BRIDGE: RTM_NEWNEIGH with unknown ifindex\n");
2103                return -ENODEV;
2104        }
2105
2106        if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
2107                pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid address\n");
2108                return -EINVAL;
2109        }
2110
2111        addr = nla_data(tb[NDA_LLADDR]);
2112
2113        err = -EOPNOTSUPP;
2114
2115        /* Support fdb on master device the net/bridge default case */
2116        if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
2117            (dev->priv_flags & IFF_BRIDGE_PORT)) {
2118                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2119                const struct net_device_ops *ops = br_dev->netdev_ops;
2120
2121                err = ops->ndo_fdb_add(ndm, tb, dev, addr, nlh->nlmsg_flags);
2122                if (err)
2123                        goto out;
2124                else
2125                        ndm->ndm_flags &= ~NTF_MASTER;
2126        }
2127
2128        /* Embedded bridge, macvlan, and any other device support */
2129        if ((ndm->ndm_flags & NTF_SELF)) {
2130                if (dev->netdev_ops->ndo_fdb_add)
2131                        err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr,
2132                                                           nlh->nlmsg_flags);
2133                else
2134                        err = ndo_dflt_fdb_add(ndm, tb, dev, addr,
2135                                               nlh->nlmsg_flags);
2136
2137                if (!err) {
2138                        rtnl_fdb_notify(dev, addr, RTM_NEWNEIGH);
2139                        ndm->ndm_flags &= ~NTF_SELF;
2140                }
2141        }
2142out:
2143        return err;
2144}
2145
2146/**
2147 * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
2148 */
2149int ndo_dflt_fdb_del(struct ndmsg *ndm,
2150                     struct nlattr *tb[],
2151                     struct net_device *dev,
2152                     const unsigned char *addr)
2153{
2154        int err = -EOPNOTSUPP;
2155
2156        /* If aging addresses are supported device will need to
2157         * implement its own handler for this.
2158         */
2159        if (!(ndm->ndm_state & NUD_PERMANENT)) {
2160                pr_info("%s: FDB only supports static addresses\n", dev->name);
2161                return -EINVAL;
2162        }
2163
2164        if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
2165                err = dev_uc_del(dev, addr);
2166        else if (is_multicast_ether_addr(addr))
2167                err = dev_mc_del(dev, addr);
2168        else
2169                err = -EINVAL;
2170
2171        return err;
2172}
2173EXPORT_SYMBOL(ndo_dflt_fdb_del);
2174
2175static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
2176{
2177        struct net *net = sock_net(skb->sk);
2178        struct ndmsg *ndm;
2179        struct nlattr *tb[NDA_MAX+1];
2180        struct net_device *dev;
2181        int err = -EINVAL;
2182        __u8 *addr;
2183
2184        if (!capable(CAP_NET_ADMIN))
2185                return -EPERM;
2186
2187        err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
2188        if (err < 0)
2189                return err;
2190
2191        ndm = nlmsg_data(nlh);
2192        if (ndm->ndm_ifindex == 0) {
2193                pr_info("PF_BRIDGE: RTM_DELNEIGH with invalid ifindex\n");
2194                return -EINVAL;
2195        }
2196
2197        dev = __dev_get_by_index(net, ndm->ndm_ifindex);
2198        if (dev == NULL) {
2199                pr_info("PF_BRIDGE: RTM_DELNEIGH with unknown ifindex\n");
2200                return -ENODEV;
2201        }
2202
2203        if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
2204                pr_info("PF_BRIDGE: RTM_DELNEIGH with invalid address\n");
2205                return -EINVAL;
2206        }
2207
2208        addr = nla_data(tb[NDA_LLADDR]);
2209
2210        err = -EOPNOTSUPP;
2211
2212        /* Support fdb on master device the net/bridge default case */
2213        if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
2214            (dev->priv_flags & IFF_BRIDGE_PORT)) {
2215                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2216                const struct net_device_ops *ops = br_dev->netdev_ops;
2217
2218                if (ops->ndo_fdb_del)
2219                        err = ops->ndo_fdb_del(ndm, tb, dev, addr);
2220
2221                if (err)
2222                        goto out;
2223                else
2224                        ndm->ndm_flags &= ~NTF_MASTER;
2225        }
2226
2227        /* Embedded bridge, macvlan, and any other device support */
2228        if (ndm->ndm_flags & NTF_SELF) {
2229                if (dev->netdev_ops->ndo_fdb_del)
2230                        err = dev->netdev_ops->ndo_fdb_del(ndm, tb, dev, addr);
2231                else
2232                        err = ndo_dflt_fdb_del(ndm, tb, dev, addr);
2233
2234                if (!err) {
2235                        rtnl_fdb_notify(dev, addr, RTM_DELNEIGH);
2236                        ndm->ndm_flags &= ~NTF_SELF;
2237                }
2238        }
2239out:
2240        return err;
2241}
2242
2243static int nlmsg_populate_fdb(struct sk_buff *skb,
2244                              struct netlink_callback *cb,
2245                              struct net_device *dev,
2246                              int *idx,
2247                              struct netdev_hw_addr_list *list)
2248{
2249        struct netdev_hw_addr *ha;
2250        int err;
2251        u32 portid, seq;
2252
2253        portid = NETLINK_CB(cb->skb).portid;
2254        seq = cb->nlh->nlmsg_seq;
2255
2256        list_for_each_entry(ha, &list->list, list) {
2257                if (*idx < cb->args[0])
2258                        goto skip;
2259
2260                err = nlmsg_populate_fdb_fill(skb, dev, ha->addr,
2261                                              portid, seq,
2262                                              RTM_NEWNEIGH, NTF_SELF);
2263                if (err < 0)
2264                        return err;
2265skip:
2266                *idx += 1;
2267        }
2268        return 0;
2269}
2270
2271/**
2272 * ndo_dflt_fdb_dump - default netdevice operation to dump an FDB table.
2273 * @nlh: netlink message header
2274 * @dev: netdevice
2275 *
2276 * Default netdevice operation to dump the existing unicast address list.
2277 * Returns number of addresses from list put in skb.
2278 */
2279int ndo_dflt_fdb_dump(struct sk_buff *skb,
2280                      struct netlink_callback *cb,
2281                      struct net_device *dev,
2282                      int idx)
2283{
2284        int err;
2285
2286        netif_addr_lock_bh(dev);
2287        err = nlmsg_populate_fdb(skb, cb, dev, &idx, &dev->uc);
2288        if (err)
2289                goto out;
2290        nlmsg_populate_fdb(skb, cb, dev, &idx, &dev->mc);
2291out:
2292        netif_addr_unlock_bh(dev);
2293        return idx;
2294}
2295EXPORT_SYMBOL(ndo_dflt_fdb_dump);
2296
2297static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
2298{
2299        int idx = 0;
2300        struct net *net = sock_net(skb->sk);
2301        struct net_device *dev;
2302
2303        rcu_read_lock();
2304        for_each_netdev_rcu(net, dev) {
2305                if (dev->priv_flags & IFF_BRIDGE_PORT) {
2306                        struct net_device *br_dev;
2307                        const struct net_device_ops *ops;
2308
2309                        br_dev = netdev_master_upper_dev_get(dev);
2310                        ops = br_dev->netdev_ops;
2311                        if (ops->ndo_fdb_dump)
2312                                idx = ops->ndo_fdb_dump(skb, cb, dev, idx);
2313                }
2314
2315                if (dev->netdev_ops->ndo_fdb_dump)
2316                        idx = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, idx);
2317                else
2318                        idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
2319        }
2320        rcu_read_unlock();
2321
2322        cb->args[0] = idx;
2323        return skb->len;
2324}
2325
2326int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
2327                            struct net_device *dev, u16 mode)
2328{
2329        struct nlmsghdr *nlh;
2330        struct ifinfomsg *ifm;
2331        struct nlattr *br_afspec;
2332        u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
2333        struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2334
2335        nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), NLM_F_MULTI);
2336        if (nlh == NULL)
2337                return -EMSGSIZE;
2338
2339        ifm = nlmsg_data(nlh);
2340        ifm->ifi_family = AF_BRIDGE;
2341        ifm->__ifi_pad = 0;
2342        ifm->ifi_type = dev->type;
2343        ifm->ifi_index = dev->ifindex;
2344        ifm->ifi_flags = dev_get_flags(dev);
2345        ifm->ifi_change = 0;
2346
2347
2348        if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
2349            nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
2350            nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
2351            (br_dev &&
2352             nla_put_u32(skb, IFLA_MASTER, br_dev->ifindex)) ||
2353            (dev->addr_len &&
2354             nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
2355            (dev->ifindex != dev->iflink &&
2356             nla_put_u32(skb, IFLA_LINK, dev->iflink)))
2357                goto nla_put_failure;
2358
2359        br_afspec = nla_nest_start(skb, IFLA_AF_SPEC);
2360        if (!br_afspec)
2361                goto nla_put_failure;
2362
2363        if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF) ||
2364            nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
2365                nla_nest_cancel(skb, br_afspec);
2366                goto nla_put_failure;
2367        }
2368        nla_nest_end(skb, br_afspec);
2369
2370        return nlmsg_end(skb, nlh);
2371nla_put_failure:
2372        nlmsg_cancel(skb, nlh);
2373        return -EMSGSIZE;
2374}
2375EXPORT_SYMBOL(ndo_dflt_bridge_getlink);
2376
2377static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
2378{
2379        struct net *net = sock_net(skb->sk);
2380        struct net_device *dev;
2381        int idx = 0;
2382        u32 portid = NETLINK_CB(cb->skb).portid;
2383        u32 seq = cb->nlh->nlmsg_seq;
2384        struct nlattr *extfilt;
2385        u32 filter_mask = 0;
2386
2387        extfilt = nlmsg_find_attr(cb->nlh, sizeof(struct ifinfomsg),
2388                                  IFLA_EXT_MASK);
2389        if (extfilt)
2390                filter_mask = nla_get_u32(extfilt);
2391
2392        rcu_read_lock();
2393        for_each_netdev_rcu(net, dev) {
2394                const struct net_device_ops *ops = dev->netdev_ops;
2395                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2396
2397                if (br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
2398                        if (idx >= cb->args[0] &&
2399                            br_dev->netdev_ops->ndo_bridge_getlink(
2400                                    skb, portid, seq, dev, filter_mask) < 0)
2401                                break;
2402                        idx++;
2403                }
2404
2405                if (ops->ndo_bridge_getlink) {
2406                        if (idx >= cb->args[0] &&
2407                            ops->ndo_bridge_getlink(skb, portid, seq, dev,
2408                                                    filter_mask) < 0)
2409                                break;
2410                        idx++;
2411                }
2412        }
2413        rcu_read_unlock();
2414        cb->args[0] = idx;
2415
2416        return skb->len;
2417}
2418
2419static inline size_t bridge_nlmsg_size(void)
2420{
2421        return NLMSG_ALIGN(sizeof(struct ifinfomsg))
2422                + nla_total_size(IFNAMSIZ)      /* IFLA_IFNAME */
2423                + nla_total_size(MAX_ADDR_LEN)  /* IFLA_ADDRESS */
2424                + nla_total_size(sizeof(u32))   /* IFLA_MASTER */
2425                + nla_total_size(sizeof(u32))   /* IFLA_MTU */
2426                + nla_total_size(sizeof(u32))   /* IFLA_LINK */
2427                + nla_total_size(sizeof(u32))   /* IFLA_OPERSTATE */
2428                + nla_total_size(sizeof(u8))    /* IFLA_PROTINFO */
2429                + nla_total_size(sizeof(struct nlattr)) /* IFLA_AF_SPEC */
2430                + nla_total_size(sizeof(u16))   /* IFLA_BRIDGE_FLAGS */
2431                + nla_total_size(sizeof(u16));  /* IFLA_BRIDGE_MODE */
2432}
2433
2434static int rtnl_bridge_notify(struct net_device *dev, u16 flags)
2435{
2436        struct net *net = dev_net(dev);
2437        struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2438        struct sk_buff *skb;
2439        int err = -EOPNOTSUPP;
2440
2441        skb = nlmsg_new(bridge_nlmsg_size(), GFP_ATOMIC);
2442        if (!skb) {
2443                err = -ENOMEM;
2444                goto errout;
2445        }
2446
2447        if ((!flags || (flags & BRIDGE_FLAGS_MASTER)) &&
2448            br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
2449                err = br_dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0);
2450                if (err < 0)
2451                        goto errout;
2452        }
2453
2454        if ((flags & BRIDGE_FLAGS_SELF) &&
2455            dev->netdev_ops->ndo_bridge_getlink) {
2456                err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0);
2457                if (err < 0)
2458                        goto errout;
2459        }
2460
2461        rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
2462        return 0;
2463errout:
2464        WARN_ON(err == -EMSGSIZE);
2465        kfree_skb(skb);
2466        rtnl_set_sk_err(net, RTNLGRP_LINK, err);
2467        return err;
2468}
2469
2470static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
2471{
2472        struct net *net = sock_net(skb->sk);
2473        struct ifinfomsg *ifm;
2474        struct net_device *dev;
2475        struct nlattr *br_spec, *attr = NULL;
2476        int rem, err = -EOPNOTSUPP;
2477        u16 oflags, flags = 0;
2478        bool have_flags = false;
2479
2480        if (nlmsg_len(nlh) < sizeof(*ifm))
2481                return -EINVAL;
2482
2483        ifm = nlmsg_data(nlh);
2484        if (ifm->ifi_family != AF_BRIDGE)
2485                return -EPFNOSUPPORT;
2486
2487        dev = __dev_get_by_index(net, ifm->ifi_index);
2488        if (!dev) {
2489                pr_info("PF_BRIDGE: RTM_SETLINK with unknown ifindex\n");
2490                return -ENODEV;
2491        }
2492
2493        br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
2494        if (br_spec) {
2495                nla_for_each_nested(attr, br_spec, rem) {
2496                        if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
2497                                have_flags = true;
2498                                flags = nla_get_u16(attr);
2499                                break;
2500                        }
2501                }
2502        }
2503
2504        oflags = flags;
2505
2506        if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
2507                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2508
2509                if (!br_dev || !br_dev->netdev_ops->ndo_bridge_setlink) {
2510                        err = -EOPNOTSUPP;
2511                        goto out;
2512                }
2513
2514                err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh);
2515                if (err)
2516                        goto out;
2517
2518                flags &= ~BRIDGE_FLAGS_MASTER;
2519        }
2520
2521        if ((flags & BRIDGE_FLAGS_SELF)) {
2522                if (!dev->netdev_ops->ndo_bridge_setlink)
2523                        err = -EOPNOTSUPP;
2524                else
2525                        err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh);
2526
2527                if (!err)
2528                        flags &= ~BRIDGE_FLAGS_SELF;
2529        }
2530
2531        if (have_flags)
2532                memcpy(nla_data(attr), &flags, sizeof(flags));
2533        /* Generate event to notify upper layer of bridge change */
2534        if (!err)
2535                err = rtnl_bridge_notify(dev, oflags);
2536out:
2537        return err;
2538}
2539
2540static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
2541{
2542        struct net *net = sock_net(skb->sk);
2543        struct ifinfomsg *ifm;
2544        struct net_device *dev;
2545        struct nlattr *br_spec, *attr = NULL;
2546        int rem, err = -EOPNOTSUPP;
2547        u16 oflags, flags = 0;
2548        bool have_flags = false;
2549
2550        if (nlmsg_len(nlh) < sizeof(*ifm))
2551                return -EINVAL;
2552
2553        ifm = nlmsg_data(nlh);
2554        if (ifm->ifi_family != AF_BRIDGE)
2555                return -EPFNOSUPPORT;
2556
2557        dev = __dev_get_by_index(net, ifm->ifi_index);
2558        if (!dev) {
2559                pr_info("PF_BRIDGE: RTM_SETLINK with unknown ifindex\n");
2560                return -ENODEV;
2561        }
2562
2563        br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
2564        if (br_spec) {
2565                nla_for_each_nested(attr, br_spec, rem) {
2566                        if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
2567                                have_flags = true;
2568                                flags = nla_get_u16(attr);
2569                                break;
2570                        }
2571                }
2572        }
2573
2574        oflags = flags;
2575
2576        if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
2577                struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2578
2579                if (!br_dev || !br_dev->netdev_ops->ndo_bridge_dellink) {
2580                        err = -EOPNOTSUPP;
2581                        goto out;
2582                }
2583
2584                err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh);
2585                if (err)
2586                        goto out;
2587
2588                flags &= ~BRIDGE_FLAGS_MASTER;
2589        }
2590
2591        if ((flags & BRIDGE_FLAGS_SELF)) {
2592                if (!dev->netdev_ops->ndo_bridge_dellink)
2593                        err = -EOPNOTSUPP;
2594                else
2595                        err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh);
2596
2597                if (!err)
2598                        flags &= ~BRIDGE_FLAGS_SELF;
2599        }
2600
2601        if (have_flags)
2602                memcpy(nla_data(attr), &flags, sizeof(flags));
2603        /* Generate event to notify upper layer of bridge change */
2604        if (!err)
2605                err = rtnl_bridge_notify(dev, oflags);
2606out:
2607        return err;
2608}
2609
2610/* Process one rtnetlink message. */
2611
2612static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
2613{
2614        struct net *net = sock_net(skb->sk);
2615        rtnl_doit_func doit;
2616        int sz_idx, kind;
2617        int family;
2618        int type;
2619        int err;
2620
2621        type = nlh->nlmsg_type;
2622        if (type > RTM_MAX)
2623                return -EOPNOTSUPP;
2624
2625        type -= RTM_BASE;
2626
2627        /* All the messages must have at least 1 byte length */
2628        if (nlmsg_len(nlh) < sizeof(struct rtgenmsg))
2629                return 0;
2630
2631        family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
2632        sz_idx = type>>2;
2633        kind = type&3;
2634
2635        if (kind != 2 && !ns_capable(net->user_ns, CAP_NET_ADMIN))
2636                return -EPERM;
2637
2638        if (kind == 2 && nlh->nlmsg_flags&NLM_F_DUMP) {
2639                struct sock *rtnl;
2640                rtnl_dumpit_func dumpit;
2641                rtnl_calcit_func calcit;
2642                u16 min_dump_alloc = 0;
2643
2644                dumpit = rtnl_get_dumpit(family, type);
2645                if (dumpit == NULL)
2646                        return -EOPNOTSUPP;
2647                calcit = rtnl_get_calcit(family, type);
2648                if (calcit)
2649                        min_dump_alloc = calcit(skb, nlh);
2650
2651                __rtnl_unlock();
2652                rtnl = net->rtnl;
2653                {
2654                        struct netlink_dump_control c = {
2655                                .dump           = dumpit,
2656                                .min_dump_alloc = min_dump_alloc,
2657                        };
2658                        err = netlink_dump_start(rtnl, skb, nlh, &c);
2659                }
2660                rtnl_lock();
2661                return err;
2662        }
2663
2664        doit = rtnl_get_doit(family, type);
2665        if (doit == NULL)
2666                return -EOPNOTSUPP;
2667
2668        return doit(skb, nlh);
2669}
2670
2671static void rtnetlink_rcv(struct sk_buff *skb)
2672{
2673        rtnl_lock();
2674        netlink_rcv_skb(skb, &rtnetlink_rcv_msg);
2675        rtnl_unlock();
2676}
2677
2678static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr)
2679{
2680        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2681
2682        switch (event) {
2683        case NETDEV_UP:
2684        case NETDEV_DOWN:
2685        case NETDEV_PRE_UP:
2686        case NETDEV_POST_INIT:
2687        case NETDEV_REGISTER:
2688        case NETDEV_CHANGE:
2689        case NETDEV_PRE_TYPE_CHANGE:
2690        case NETDEV_GOING_DOWN:
2691        case NETDEV_UNREGISTER:
2692        case NETDEV_UNREGISTER_FINAL:
2693        case NETDEV_RELEASE:
2694        case NETDEV_JOIN:
2695                break;
2696        default:
2697                rtmsg_ifinfo(RTM_NEWLINK, dev, 0);
2698                break;
2699        }
2700        return NOTIFY_DONE;
2701}
2702
2703static struct notifier_block rtnetlink_dev_notifier = {
2704        .notifier_call  = rtnetlink_event,
2705};
2706
2707
2708static int __net_init rtnetlink_net_init(struct net *net)
2709{
2710        struct sock *sk;
2711        struct netlink_kernel_cfg cfg = {
2712                .groups         = RTNLGRP_MAX,
2713                .input          = rtnetlink_rcv,
2714                .cb_mutex       = &rtnl_mutex,
2715                .flags          = NL_CFG_F_NONROOT_RECV,
2716        };
2717
2718        sk = netlink_kernel_create(net, NETLINK_ROUTE, &cfg);
2719        if (!sk)
2720                return -ENOMEM;
2721        net->rtnl = sk;
2722        return 0;
2723}
2724
2725static void __net_exit rtnetlink_net_exit(struct net *net)
2726{
2727        netlink_kernel_release(net->rtnl);
2728        net->rtnl = NULL;
2729}
2730
2731static struct pernet_operations rtnetlink_net_ops = {
2732        .init = rtnetlink_net_init,
2733        .exit = rtnetlink_net_exit,
2734};
2735
2736void __init rtnetlink_init(void)
2737{
2738        if (register_pernet_subsys(&rtnetlink_net_ops))
2739                panic("rtnetlink_init: cannot initialize rtnetlink\n");
2740
2741        register_netdevice_notifier(&rtnetlink_dev_notifier);
2742
2743        rtnl_register(PF_UNSPEC, RTM_GETLINK, rtnl_getlink,
2744                      rtnl_dump_ifinfo, rtnl_calcit);
2745        rtnl_register(PF_UNSPEC, RTM_SETLINK, rtnl_setlink, NULL, NULL);
2746        rtnl_register(PF_UNSPEC, RTM_NEWLINK, rtnl_newlink, NULL, NULL);
2747        rtnl_register(PF_UNSPEC, RTM_DELLINK, rtnl_dellink, NULL, NULL);
2748
2749        rtnl_register(PF_UNSPEC, RTM_GETADDR, NULL, rtnl_dump_all, NULL);
2750        rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all, NULL);
2751
2752        rtnl_register(PF_BRIDGE, RTM_NEWNEIGH, rtnl_fdb_add, NULL, NULL);
2753        rtnl_register(PF_BRIDGE, RTM_DELNEIGH, rtnl_fdb_del, NULL, NULL);
2754        rtnl_register(PF_BRIDGE, RTM_GETNEIGH, NULL, rtnl_fdb_dump, NULL);
2755
2756        rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, rtnl_bridge_getlink, NULL);
2757        rtnl_register(PF_BRIDGE, RTM_DELLINK, rtnl_bridge_dellink, NULL, NULL);
2758        rtnl_register(PF_BRIDGE, RTM_SETLINK, rtnl_bridge_setlink, NULL, NULL);
2759}
2760
2761