linux/net/bridge/br_if.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *      Userspace interface
   4 *      Linux ethernet bridge
   5 *
   6 *      Authors:
   7 *      Lennert Buytenhek               <buytenh@gnu.org>
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/netdevice.h>
  12#include <linux/etherdevice.h>
  13#include <linux/netpoll.h>
  14#include <linux/ethtool.h>
  15#include <linux/if_arp.h>
  16#include <linux/module.h>
  17#include <linux/init.h>
  18#include <linux/rtnetlink.h>
  19#include <linux/if_ether.h>
  20#include <linux/slab.h>
  21#include <net/dsa.h>
  22#include <net/sock.h>
  23#include <linux/if_vlan.h>
  24#include <net/switchdev.h>
  25#include <net/net_namespace.h>
  26
  27#include "br_private.h"
  28
  29/*
  30 * Determine initial path cost based on speed.
  31 * using recommendations from 802.1d standard
  32 *
  33 * Since driver might sleep need to not be holding any locks.
  34 */
  35static int port_cost(struct net_device *dev)
  36{
  37        struct ethtool_link_ksettings ecmd;
  38
  39        if (!__ethtool_get_link_ksettings(dev, &ecmd)) {
  40                switch (ecmd.base.speed) {
  41                case SPEED_10000:
  42                        return 2;
  43                case SPEED_1000:
  44                        return 4;
  45                case SPEED_100:
  46                        return 19;
  47                case SPEED_10:
  48                        return 100;
  49                }
  50        }
  51
  52        /* Old silly heuristics based on name */
  53        if (!strncmp(dev->name, "lec", 3))
  54                return 7;
  55
  56        if (!strncmp(dev->name, "plip", 4))
  57                return 2500;
  58
  59        return 100;     /* assume old 10Mbps */
  60}
  61
  62
  63/* Check for port carrier transitions. */
  64void br_port_carrier_check(struct net_bridge_port *p, bool *notified)
  65{
  66        struct net_device *dev = p->dev;
  67        struct net_bridge *br = p->br;
  68
  69        if (!(p->flags & BR_ADMIN_COST) &&
  70            netif_running(dev) && netif_oper_up(dev))
  71                p->path_cost = port_cost(dev);
  72
  73        *notified = false;
  74        if (!netif_running(br->dev))
  75                return;
  76
  77        spin_lock_bh(&br->lock);
  78        if (netif_running(dev) && netif_oper_up(dev)) {
  79                if (p->state == BR_STATE_DISABLED) {
  80                        br_stp_enable_port(p);
  81                        *notified = true;
  82                }
  83        } else {
  84                if (p->state != BR_STATE_DISABLED) {
  85                        br_stp_disable_port(p);
  86                        *notified = true;
  87                }
  88        }
  89        spin_unlock_bh(&br->lock);
  90}
  91
  92static void br_port_set_promisc(struct net_bridge_port *p)
  93{
  94        int err = 0;
  95
  96        if (br_promisc_port(p))
  97                return;
  98
  99        err = dev_set_promiscuity(p->dev, 1);
 100        if (err)
 101                return;
 102
 103        br_fdb_unsync_static(p->br, p);
 104        p->flags |= BR_PROMISC;
 105}
 106
 107static void br_port_clear_promisc(struct net_bridge_port *p)
 108{
 109        int err;
 110
 111        /* Check if the port is already non-promisc or if it doesn't
 112         * support UNICAST filtering.  Without unicast filtering support
 113         * we'll end up re-enabling promisc mode anyway, so just check for
 114         * it here.
 115         */
 116        if (!br_promisc_port(p) || !(p->dev->priv_flags & IFF_UNICAST_FLT))
 117                return;
 118
 119        /* Since we'll be clearing the promisc mode, program the port
 120         * first so that we don't have interruption in traffic.
 121         */
 122        err = br_fdb_sync_static(p->br, p);
 123        if (err)
 124                return;
 125
 126        dev_set_promiscuity(p->dev, -1);
 127        p->flags &= ~BR_PROMISC;
 128}
 129
 130/* When a port is added or removed or when certain port flags
 131 * change, this function is called to automatically manage
 132 * promiscuity setting of all the bridge ports.  We are always called
 133 * under RTNL so can skip using rcu primitives.
 134 */
 135void br_manage_promisc(struct net_bridge *br)
 136{
 137        struct net_bridge_port *p;
 138        bool set_all = false;
 139
 140        /* If vlan filtering is disabled or bridge interface is placed
 141         * into promiscuous mode, place all ports in promiscuous mode.
 142         */
 143        if ((br->dev->flags & IFF_PROMISC) || !br_vlan_enabled(br->dev))
 144                set_all = true;
 145
 146        list_for_each_entry(p, &br->port_list, list) {
 147                if (set_all) {
 148                        br_port_set_promisc(p);
 149                } else {
 150                        /* If the number of auto-ports is <= 1, then all other
 151                         * ports will have their output configuration
 152                         * statically specified through fdbs.  Since ingress
 153                         * on the auto-port becomes forwarding/egress to other
 154                         * ports and egress configuration is statically known,
 155                         * we can say that ingress configuration of the
 156                         * auto-port is also statically known.
 157                         * This lets us disable promiscuous mode and write
 158                         * this config to hw.
 159                         */
 160                        if (br->auto_cnt == 0 ||
 161                            (br->auto_cnt == 1 && br_auto_port(p)))
 162                                br_port_clear_promisc(p);
 163                        else
 164                                br_port_set_promisc(p);
 165                }
 166        }
 167}
 168
 169int nbp_backup_change(struct net_bridge_port *p,
 170                      struct net_device *backup_dev)
 171{
 172        struct net_bridge_port *old_backup = rtnl_dereference(p->backup_port);
 173        struct net_bridge_port *backup_p = NULL;
 174
 175        ASSERT_RTNL();
 176
 177        if (backup_dev) {
 178                if (!netif_is_bridge_port(backup_dev))
 179                        return -ENOENT;
 180
 181                backup_p = br_port_get_rtnl(backup_dev);
 182                if (backup_p->br != p->br)
 183                        return -EINVAL;
 184        }
 185
 186        if (p == backup_p)
 187                return -EINVAL;
 188
 189        if (old_backup == backup_p)
 190                return 0;
 191
 192        /* if the backup link is already set, clear it */
 193        if (old_backup)
 194                old_backup->backup_redirected_cnt--;
 195
 196        if (backup_p)
 197                backup_p->backup_redirected_cnt++;
 198        rcu_assign_pointer(p->backup_port, backup_p);
 199
 200        return 0;
 201}
 202
 203static void nbp_backup_clear(struct net_bridge_port *p)
 204{
 205        nbp_backup_change(p, NULL);
 206        if (p->backup_redirected_cnt) {
 207                struct net_bridge_port *cur_p;
 208
 209                list_for_each_entry(cur_p, &p->br->port_list, list) {
 210                        struct net_bridge_port *backup_p;
 211
 212                        backup_p = rtnl_dereference(cur_p->backup_port);
 213                        if (backup_p == p)
 214                                nbp_backup_change(cur_p, NULL);
 215                }
 216        }
 217
 218        WARN_ON(rcu_access_pointer(p->backup_port) || p->backup_redirected_cnt);
 219}
 220
 221static void nbp_update_port_count(struct net_bridge *br)
 222{
 223        struct net_bridge_port *p;
 224        u32 cnt = 0;
 225
 226        list_for_each_entry(p, &br->port_list, list) {
 227                if (br_auto_port(p))
 228                        cnt++;
 229        }
 230        if (br->auto_cnt != cnt) {
 231                br->auto_cnt = cnt;
 232                br_manage_promisc(br);
 233        }
 234}
 235
 236static void nbp_delete_promisc(struct net_bridge_port *p)
 237{
 238        /* If port is currently promiscuous, unset promiscuity.
 239         * Otherwise, it is a static port so remove all addresses
 240         * from it.
 241         */
 242        dev_set_allmulti(p->dev, -1);
 243        if (br_promisc_port(p))
 244                dev_set_promiscuity(p->dev, -1);
 245        else
 246                br_fdb_unsync_static(p->br, p);
 247}
 248
 249static void release_nbp(struct kobject *kobj)
 250{
 251        struct net_bridge_port *p
 252                = container_of(kobj, struct net_bridge_port, kobj);
 253        kfree(p);
 254}
 255
 256static void brport_get_ownership(struct kobject *kobj, kuid_t *uid, kgid_t *gid)
 257{
 258        struct net_bridge_port *p = kobj_to_brport(kobj);
 259
 260        net_ns_get_ownership(dev_net(p->dev), uid, gid);
 261}
 262
 263static struct kobj_type brport_ktype = {
 264#ifdef CONFIG_SYSFS
 265        .sysfs_ops = &brport_sysfs_ops,
 266#endif
 267        .release = release_nbp,
 268        .get_ownership = brport_get_ownership,
 269};
 270
 271static void destroy_nbp(struct net_bridge_port *p)
 272{
 273        struct net_device *dev = p->dev;
 274
 275        p->br = NULL;
 276        p->dev = NULL;
 277        dev_put(dev);
 278
 279        kobject_put(&p->kobj);
 280}
 281
 282static void destroy_nbp_rcu(struct rcu_head *head)
 283{
 284        struct net_bridge_port *p =
 285                        container_of(head, struct net_bridge_port, rcu);
 286        destroy_nbp(p);
 287}
 288
 289static unsigned get_max_headroom(struct net_bridge *br)
 290{
 291        unsigned max_headroom = 0;
 292        struct net_bridge_port *p;
 293
 294        list_for_each_entry(p, &br->port_list, list) {
 295                unsigned dev_headroom = netdev_get_fwd_headroom(p->dev);
 296
 297                if (dev_headroom > max_headroom)
 298                        max_headroom = dev_headroom;
 299        }
 300
 301        return max_headroom;
 302}
 303
 304static void update_headroom(struct net_bridge *br, int new_hr)
 305{
 306        struct net_bridge_port *p;
 307
 308        list_for_each_entry(p, &br->port_list, list)
 309                netdev_set_rx_headroom(p->dev, new_hr);
 310
 311        br->dev->needed_headroom = new_hr;
 312}
 313
 314/* Delete port(interface) from bridge is done in two steps.
 315 * via RCU. First step, marks device as down. That deletes
 316 * all the timers and stops new packets from flowing through.
 317 *
 318 * Final cleanup doesn't occur until after all CPU's finished
 319 * processing packets.
 320 *
 321 * Protected from multiple admin operations by RTNL mutex
 322 */
 323static void del_nbp(struct net_bridge_port *p)
 324{
 325        struct net_bridge *br = p->br;
 326        struct net_device *dev = p->dev;
 327
 328        sysfs_remove_link(br->ifobj, p->dev->name);
 329
 330        nbp_delete_promisc(p);
 331
 332        spin_lock_bh(&br->lock);
 333        br_stp_disable_port(p);
 334        spin_unlock_bh(&br->lock);
 335
 336        br_mrp_port_del(br, p);
 337        br_cfm_port_del(br, p);
 338
 339        br_ifinfo_notify(RTM_DELLINK, NULL, p);
 340
 341        list_del_rcu(&p->list);
 342        if (netdev_get_fwd_headroom(dev) == br->dev->needed_headroom)
 343                update_headroom(br, get_max_headroom(br));
 344        netdev_reset_rx_headroom(dev);
 345
 346        nbp_vlan_flush(p);
 347        br_fdb_delete_by_port(br, p, 0, 1);
 348        switchdev_deferred_process();
 349        nbp_backup_clear(p);
 350
 351        nbp_update_port_count(br);
 352
 353        netdev_upper_dev_unlink(dev, br->dev);
 354
 355        dev->priv_flags &= ~IFF_BRIDGE_PORT;
 356
 357        netdev_rx_handler_unregister(dev);
 358
 359        br_multicast_del_port(p);
 360
 361        kobject_uevent(&p->kobj, KOBJ_REMOVE);
 362        kobject_del(&p->kobj);
 363
 364        br_netpoll_disable(p);
 365
 366        call_rcu(&p->rcu, destroy_nbp_rcu);
 367}
 368
 369/* Delete bridge device */
 370void br_dev_delete(struct net_device *dev, struct list_head *head)
 371{
 372        struct net_bridge *br = netdev_priv(dev);
 373        struct net_bridge_port *p, *n;
 374
 375        list_for_each_entry_safe(p, n, &br->port_list, list) {
 376                del_nbp(p);
 377        }
 378
 379        br_recalculate_neigh_suppress_enabled(br);
 380
 381        br_fdb_delete_by_port(br, NULL, 0, 1);
 382
 383        cancel_delayed_work_sync(&br->gc_work);
 384
 385        br_sysfs_delbr(br->dev);
 386        unregister_netdevice_queue(br->dev, head);
 387}
 388
 389/* find an available port number */
 390static int find_portno(struct net_bridge *br)
 391{
 392        int index;
 393        struct net_bridge_port *p;
 394        unsigned long *inuse;
 395
 396        inuse = bitmap_zalloc(BR_MAX_PORTS, GFP_KERNEL);
 397        if (!inuse)
 398                return -ENOMEM;
 399
 400        set_bit(0, inuse);      /* zero is reserved */
 401        list_for_each_entry(p, &br->port_list, list) {
 402                set_bit(p->port_no, inuse);
 403        }
 404        index = find_first_zero_bit(inuse, BR_MAX_PORTS);
 405        bitmap_free(inuse);
 406
 407        return (index >= BR_MAX_PORTS) ? -EXFULL : index;
 408}
 409
 410/* called with RTNL but without bridge lock */
 411static struct net_bridge_port *new_nbp(struct net_bridge *br,
 412                                       struct net_device *dev)
 413{
 414        struct net_bridge_port *p;
 415        int index, err;
 416
 417        index = find_portno(br);
 418        if (index < 0)
 419                return ERR_PTR(index);
 420
 421        p = kzalloc(sizeof(*p), GFP_KERNEL);
 422        if (p == NULL)
 423                return ERR_PTR(-ENOMEM);
 424
 425        p->br = br;
 426        dev_hold(dev);
 427        p->dev = dev;
 428        p->path_cost = port_cost(dev);
 429        p->priority = 0x8000 >> BR_PORT_BITS;
 430        p->port_no = index;
 431        p->flags = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD;
 432        br_init_port(p);
 433        br_set_state(p, BR_STATE_DISABLED);
 434        br_stp_port_timer_init(p);
 435        err = br_multicast_add_port(p);
 436        if (err) {
 437                dev_put(dev);
 438                kfree(p);
 439                p = ERR_PTR(err);
 440        }
 441
 442        return p;
 443}
 444
 445int br_add_bridge(struct net *net, const char *name)
 446{
 447        struct net_device *dev;
 448        int res;
 449
 450        dev = alloc_netdev(sizeof(struct net_bridge), name, NET_NAME_UNKNOWN,
 451                           br_dev_setup);
 452
 453        if (!dev)
 454                return -ENOMEM;
 455
 456        dev_net_set(dev, net);
 457        dev->rtnl_link_ops = &br_link_ops;
 458
 459        res = register_netdevice(dev);
 460        if (res)
 461                free_netdev(dev);
 462        return res;
 463}
 464
 465int br_del_bridge(struct net *net, const char *name)
 466{
 467        struct net_device *dev;
 468        int ret = 0;
 469
 470        dev = __dev_get_by_name(net, name);
 471        if (dev == NULL)
 472                ret =  -ENXIO;  /* Could not find device */
 473
 474        else if (!netif_is_bridge_master(dev)) {
 475                /* Attempt to delete non bridge device! */
 476                ret = -EPERM;
 477        }
 478
 479        else if (dev->flags & IFF_UP) {
 480                /* Not shutdown yet. */
 481                ret = -EBUSY;
 482        }
 483
 484        else
 485                br_dev_delete(dev, NULL);
 486
 487        return ret;
 488}
 489
 490/* MTU of the bridge pseudo-device: ETH_DATA_LEN or the minimum of the ports */
 491static int br_mtu_min(const struct net_bridge *br)
 492{
 493        const struct net_bridge_port *p;
 494        int ret_mtu = 0;
 495
 496        list_for_each_entry(p, &br->port_list, list)
 497                if (!ret_mtu || ret_mtu > p->dev->mtu)
 498                        ret_mtu = p->dev->mtu;
 499
 500        return ret_mtu ? ret_mtu : ETH_DATA_LEN;
 501}
 502
 503void br_mtu_auto_adjust(struct net_bridge *br)
 504{
 505        ASSERT_RTNL();
 506
 507        /* if the bridge MTU was manually configured don't mess with it */
 508        if (br_opt_get(br, BROPT_MTU_SET_BY_USER))
 509                return;
 510
 511        /* change to the minimum MTU and clear the flag which was set by
 512         * the bridge ndo_change_mtu callback
 513         */
 514        dev_set_mtu(br->dev, br_mtu_min(br));
 515        br_opt_toggle(br, BROPT_MTU_SET_BY_USER, false);
 516}
 517
 518static void br_set_gso_limits(struct net_bridge *br)
 519{
 520        unsigned int gso_max_size = GSO_MAX_SIZE;
 521        u16 gso_max_segs = GSO_MAX_SEGS;
 522        const struct net_bridge_port *p;
 523
 524        list_for_each_entry(p, &br->port_list, list) {
 525                gso_max_size = min(gso_max_size, p->dev->gso_max_size);
 526                gso_max_segs = min(gso_max_segs, p->dev->gso_max_segs);
 527        }
 528        br->dev->gso_max_size = gso_max_size;
 529        br->dev->gso_max_segs = gso_max_segs;
 530}
 531
 532/*
 533 * Recomputes features using slave's features
 534 */
 535netdev_features_t br_features_recompute(struct net_bridge *br,
 536        netdev_features_t features)
 537{
 538        struct net_bridge_port *p;
 539        netdev_features_t mask;
 540
 541        if (list_empty(&br->port_list))
 542                return features;
 543
 544        mask = features;
 545        features &= ~NETIF_F_ONE_FOR_ALL;
 546
 547        list_for_each_entry(p, &br->port_list, list) {
 548                features = netdev_increment_features(features,
 549                                                     p->dev->features, mask);
 550        }
 551        features = netdev_add_tso_features(features, mask);
 552
 553        return features;
 554}
 555
 556/* called with RTNL */
 557int br_add_if(struct net_bridge *br, struct net_device *dev,
 558              struct netlink_ext_ack *extack)
 559{
 560        struct net_bridge_port *p;
 561        int err = 0;
 562        unsigned br_hr, dev_hr;
 563        bool changed_addr, fdb_synced = false;
 564
 565        /* Don't allow bridging non-ethernet like devices. */
 566        if ((dev->flags & IFF_LOOPBACK) ||
 567            dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN ||
 568            !is_valid_ether_addr(dev->dev_addr))
 569                return -EINVAL;
 570
 571        /* Also don't allow bridging of net devices that are DSA masters, since
 572         * the bridge layer rx_handler prevents the DSA fake ethertype handler
 573         * to be invoked, so we don't get the chance to strip off and parse the
 574         * DSA switch tag protocol header (the bridge layer just returns
 575         * RX_HANDLER_CONSUMED, stopping RX processing for these frames).
 576         * The only case where that would not be an issue is when bridging can
 577         * already be offloaded, such as when the DSA master is itself a DSA
 578         * or plain switchdev port, and is bridged only with other ports from
 579         * the same hardware device.
 580         */
 581        if (netdev_uses_dsa(dev)) {
 582                list_for_each_entry(p, &br->port_list, list) {
 583                        if (!netdev_port_same_parent_id(dev, p->dev)) {
 584                                NL_SET_ERR_MSG(extack,
 585                                               "Cannot do software bridging with a DSA master");
 586                                return -EINVAL;
 587                        }
 588                }
 589        }
 590
 591        /* No bridging of bridges */
 592        if (dev->netdev_ops->ndo_start_xmit == br_dev_xmit) {
 593                NL_SET_ERR_MSG(extack,
 594                               "Can not enslave a bridge to a bridge");
 595                return -ELOOP;
 596        }
 597
 598        /* Device has master upper dev */
 599        if (netdev_master_upper_dev_get(dev))
 600                return -EBUSY;
 601
 602        /* No bridging devices that dislike that (e.g. wireless) */
 603        if (dev->priv_flags & IFF_DONT_BRIDGE) {
 604                NL_SET_ERR_MSG(extack,
 605                               "Device does not allow enslaving to a bridge");
 606                return -EOPNOTSUPP;
 607        }
 608
 609        p = new_nbp(br, dev);
 610        if (IS_ERR(p))
 611                return PTR_ERR(p);
 612
 613        call_netdevice_notifiers(NETDEV_JOIN, dev);
 614
 615        err = dev_set_allmulti(dev, 1);
 616        if (err) {
 617                br_multicast_del_port(p);
 618                kfree(p);       /* kobject not yet init'd, manually free */
 619                goto err1;
 620        }
 621
 622        err = kobject_init_and_add(&p->kobj, &brport_ktype, &(dev->dev.kobj),
 623                                   SYSFS_BRIDGE_PORT_ATTR);
 624        if (err)
 625                goto err2;
 626
 627        err = br_sysfs_addif(p);
 628        if (err)
 629                goto err2;
 630
 631        err = br_netpoll_enable(p);
 632        if (err)
 633                goto err3;
 634
 635        err = netdev_rx_handler_register(dev, br_get_rx_handler(dev), p);
 636        if (err)
 637                goto err4;
 638
 639        dev->priv_flags |= IFF_BRIDGE_PORT;
 640
 641        err = netdev_master_upper_dev_link(dev, br->dev, NULL, NULL, extack);
 642        if (err)
 643                goto err5;
 644
 645        dev_disable_lro(dev);
 646
 647        list_add_rcu(&p->list, &br->port_list);
 648
 649        nbp_update_port_count(br);
 650        if (!br_promisc_port(p) && (p->dev->priv_flags & IFF_UNICAST_FLT)) {
 651                /* When updating the port count we also update all ports'
 652                 * promiscuous mode.
 653                 * A port leaving promiscuous mode normally gets the bridge's
 654                 * fdb synced to the unicast filter (if supported), however,
 655                 * `br_port_clear_promisc` does not distinguish between
 656                 * non-promiscuous ports and *new* ports, so we need to
 657                 * sync explicitly here.
 658                 */
 659                fdb_synced = br_fdb_sync_static(br, p) == 0;
 660                if (!fdb_synced)
 661                        netdev_err(dev, "failed to sync bridge static fdb addresses to this port\n");
 662        }
 663
 664        netdev_update_features(br->dev);
 665
 666        br_hr = br->dev->needed_headroom;
 667        dev_hr = netdev_get_fwd_headroom(dev);
 668        if (br_hr < dev_hr)
 669                update_headroom(br, dev_hr);
 670        else
 671                netdev_set_rx_headroom(dev, br_hr);
 672
 673        if (br_fdb_add_local(br, p, dev->dev_addr, 0))
 674                netdev_err(dev, "failed insert local address bridge forwarding table\n");
 675
 676        if (br->dev->addr_assign_type != NET_ADDR_SET) {
 677                /* Ask for permission to use this MAC address now, even if we
 678                 * don't end up choosing it below.
 679                 */
 680                err = dev_pre_changeaddr_notify(br->dev, dev->dev_addr, extack);
 681                if (err)
 682                        goto err6;
 683        }
 684
 685        err = nbp_vlan_init(p, extack);
 686        if (err) {
 687                netdev_err(dev, "failed to initialize vlan filtering on this port\n");
 688                goto err6;
 689        }
 690
 691        spin_lock_bh(&br->lock);
 692        changed_addr = br_stp_recalculate_bridge_id(br);
 693
 694        if (netif_running(dev) && netif_oper_up(dev) &&
 695            (br->dev->flags & IFF_UP))
 696                br_stp_enable_port(p);
 697        spin_unlock_bh(&br->lock);
 698
 699        br_ifinfo_notify(RTM_NEWLINK, NULL, p);
 700
 701        if (changed_addr)
 702                call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
 703
 704        br_mtu_auto_adjust(br);
 705        br_set_gso_limits(br);
 706
 707        kobject_uevent(&p->kobj, KOBJ_ADD);
 708
 709        return 0;
 710
 711err6:
 712        if (fdb_synced)
 713                br_fdb_unsync_static(br, p);
 714        list_del_rcu(&p->list);
 715        br_fdb_delete_by_port(br, p, 0, 1);
 716        nbp_update_port_count(br);
 717        netdev_upper_dev_unlink(dev, br->dev);
 718err5:
 719        dev->priv_flags &= ~IFF_BRIDGE_PORT;
 720        netdev_rx_handler_unregister(dev);
 721err4:
 722        br_netpoll_disable(p);
 723err3:
 724        sysfs_remove_link(br->ifobj, p->dev->name);
 725err2:
 726        br_multicast_del_port(p);
 727        kobject_put(&p->kobj);
 728        dev_set_allmulti(dev, -1);
 729err1:
 730        dev_put(dev);
 731        return err;
 732}
 733
 734/* called with RTNL */
 735int br_del_if(struct net_bridge *br, struct net_device *dev)
 736{
 737        struct net_bridge_port *p;
 738        bool changed_addr;
 739
 740        p = br_port_get_rtnl(dev);
 741        if (!p || p->br != br)
 742                return -EINVAL;
 743
 744        /* Since more than one interface can be attached to a bridge,
 745         * there still maybe an alternate path for netconsole to use;
 746         * therefore there is no reason for a NETDEV_RELEASE event.
 747         */
 748        del_nbp(p);
 749
 750        br_mtu_auto_adjust(br);
 751        br_set_gso_limits(br);
 752
 753        spin_lock_bh(&br->lock);
 754        changed_addr = br_stp_recalculate_bridge_id(br);
 755        spin_unlock_bh(&br->lock);
 756
 757        if (changed_addr)
 758                call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
 759
 760        netdev_update_features(br->dev);
 761
 762        return 0;
 763}
 764
 765void br_port_flags_change(struct net_bridge_port *p, unsigned long mask)
 766{
 767        struct net_bridge *br = p->br;
 768
 769        if (mask & BR_AUTO_MASK)
 770                nbp_update_port_count(br);
 771
 772        if (mask & BR_NEIGH_SUPPRESS)
 773                br_recalculate_neigh_suppress_enabled(br);
 774}
 775
 776bool br_port_flag_is_set(const struct net_device *dev, unsigned long flag)
 777{
 778        struct net_bridge_port *p;
 779
 780        p = br_port_get_rtnl_rcu(dev);
 781        if (!p)
 782                return false;
 783
 784        return p->flags & flag;
 785}
 786EXPORT_SYMBOL_GPL(br_port_flag_is_set);
 787