1 #include <linux/kernel.h> 2 #include <linux/netdevice.h> 3 #include <linux/rtnetlink.h> 4 #include <linux/slab.h> 5 #include <net/switchdev.h> 6 7 #include "br_private.h" 8 #include "br_private_tunnel.h" 9 10 static void nbp_vlan_set_vlan_dev_state(struct net_bridge_port *p, u16 vid); 11 12 static inline int br_vlan_cmp(struct rhashtable_compare_arg *arg, 13 const void *ptr) 14 { 15 const struct net_bridge_vlan *vle = ptr; 16 u16 vid = *(u16 *)arg->key; 17 18 return vle->vid != vid; 19 } 20 21 static const struct rhashtable_params br_vlan_rht_params = { 22 .head_offset = offsetof(struct net_bridge_vlan, vnode), 23 .key_offset = offsetof(struct net_bridge_vlan, vid), 24 .key_len = sizeof(u16), 25 .nelem_hint = 3, 26 .max_size = VLAN_N_VID, 27 .obj_cmpfn = br_vlan_cmp, 28 .automatic_shrinking = true, 29 }; 30 31 static struct net_bridge_vlan *br_vlan_lookup(struct rhashtable *tbl, u16 vid) 32 { 33 return rhashtable_lookup_fast(tbl, &vid, br_vlan_rht_params); 34 } 35 36 static bool __vlan_add_pvid(struct net_bridge_vlan_group *vg, u16 vid) 37 { 38 if (vg->pvid == vid) 39 return false; 40 41 smp_wmb(); 42 vg->pvid = vid; 43 44 return true; 45 } 46 47 static bool __vlan_delete_pvid(struct net_bridge_vlan_group *vg, u16 vid) 48 { 49 if (vg->pvid != vid) 50 return false; 51 52 smp_wmb(); 53 vg->pvid = 0; 54 55 return true; 56 } 57 58 /* return true if anything changed, false otherwise */ 59 static bool __vlan_add_flags(struct net_bridge_vlan *v, u16 flags) 60 { 61 struct net_bridge_vlan_group *vg; 62 u16 old_flags = v->flags; 63 bool ret; 64 65 if (br_vlan_is_master(v)) 66 vg = br_vlan_group(v->br); 67 else 68 vg = nbp_vlan_group(v->port); 69 70 if (flags & BRIDGE_VLAN_INFO_PVID) 71 ret = __vlan_add_pvid(vg, v->vid); 72 else 73 ret = __vlan_delete_pvid(vg, v->vid); 74 75 if (flags & BRIDGE_VLAN_INFO_UNTAGGED) 76 v->flags |= BRIDGE_VLAN_INFO_UNTAGGED; 77 else 78 v->flags &= ~BRIDGE_VLAN_INFO_UNTAGGED; 79 80 return ret || !!(old_flags ^ v->flags); 81 } 82 83 static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br, 84 struct net_bridge_vlan *v, u16 flags, 85 struct netlink_ext_ack *extack) 86 { 87 int err; 88 89 /* Try switchdev op first. In case it is not supported, fallback to 90 * 8021q add. 91 */ 92 err = br_switchdev_port_vlan_add(dev, v->vid, flags, extack); 93 if (err == -EOPNOTSUPP) 94 return vlan_vid_add(dev, br->vlan_proto, v->vid); 95 v->priv_flags |= BR_VLFLAG_ADDED_BY_SWITCHDEV; 96 return err; 97 } 98 99 static void __vlan_add_list(struct net_bridge_vlan *v) 100 { 101 struct net_bridge_vlan_group *vg; 102 struct list_head *headp, *hpos; 103 struct net_bridge_vlan *vent; 104 105 if (br_vlan_is_master(v)) 106 vg = br_vlan_group(v->br); 107 else 108 vg = nbp_vlan_group(v->port); 109 110 headp = &vg->vlan_list; 111 list_for_each_prev(hpos, headp) { 112 vent = list_entry(hpos, struct net_bridge_vlan, vlist); 113 if (v->vid < vent->vid) 114 continue; 115 else 116 break; 117 } 118 list_add_rcu(&v->vlist, hpos); 119 } 120 121 static void __vlan_del_list(struct net_bridge_vlan *v) 122 { 123 list_del_rcu(&v->vlist); 124 } 125 126 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br, 127 const struct net_bridge_vlan *v) 128 { 129 int err; 130 131 /* Try switchdev op first. In case it is not supported, fallback to 132 * 8021q del. 133 */ 134 err = br_switchdev_port_vlan_del(dev, v->vid); 135 if (!(v->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV)) 136 vlan_vid_del(dev, br->vlan_proto, v->vid); 137 return err == -EOPNOTSUPP ? 0 : err; 138 } 139 140 /* Returns a master vlan, if it didn't exist it gets created. In all cases a 141 * a reference is taken to the master vlan before returning. 142 */ 143 static struct net_bridge_vlan * 144 br_vlan_get_master(struct net_bridge *br, u16 vid, 145 struct netlink_ext_ack *extack) 146 { 147 struct net_bridge_vlan_group *vg; 148 struct net_bridge_vlan *masterv; 149 150 vg = br_vlan_group(br); 151 masterv = br_vlan_find(vg, vid); 152 if (!masterv) { 153 bool changed; 154 155 /* missing global ctx, create it now */ 156 if (br_vlan_add(br, vid, 0, &changed, extack)) 157 return NULL; 158 masterv = br_vlan_find(vg, vid); 159 if (WARN_ON(!masterv)) 160 return NULL; 161 refcount_set(&masterv->refcnt, 1); 162 return masterv; 163 } 164 refcount_inc(&masterv->refcnt); 165 166 return masterv; 167 } 168 169 static void br_master_vlan_rcu_free(struct rcu_head *rcu) 170 { 171 struct net_bridge_vlan *v; 172 173 v = container_of(rcu, struct net_bridge_vlan, rcu); 174 WARN_ON(!br_vlan_is_master(v)); 175 free_percpu(v->stats); 176 v->stats = NULL; 177 kfree(v); 178 } 179 180 static void br_vlan_put_master(struct net_bridge_vlan *masterv) 181 { 182 struct net_bridge_vlan_group *vg; 183 184 if (!br_vlan_is_master(masterv)) 185 return; 186 187 vg = br_vlan_group(masterv->br); 188 if (refcount_dec_and_test(&masterv->refcnt)) { 189 rhashtable_remove_fast(&vg->vlan_hash, 190 &masterv->vnode, br_vlan_rht_params); 191 __vlan_del_list(masterv); 192 call_rcu(&masterv->rcu, br_master_vlan_rcu_free); 193 } 194 } 195 196 static void nbp_vlan_rcu_free(struct rcu_head *rcu) 197 { 198 struct net_bridge_vlan *v; 199 200 v = container_of(rcu, struct net_bridge_vlan, rcu); 201 WARN_ON(br_vlan_is_master(v)); 202 /* if we had per-port stats configured then free them here */ 203 if (v->priv_flags & BR_VLFLAG_PER_PORT_STATS) 204 free_percpu(v->stats); 205 v->stats = NULL; 206 kfree(v); 207 } 208 209 /* This is the shared VLAN add function which works for both ports and bridge 210 * devices. There are four possible calls to this function in terms of the 211 * vlan entry type: 212 * 1. vlan is being added on a port (no master flags, global entry exists) 213 * 2. vlan is being added on a bridge (both master and brentry flags) 214 * 3. vlan is being added on a port, but a global entry didn't exist which 215 * is being created right now (master flag set, brentry flag unset), the 216 * global entry is used for global per-vlan features, but not for filtering 217 * 4. same as 3 but with both master and brentry flags set so the entry 218 * will be used for filtering in both the port and the bridge 219 */ 220 static int __vlan_add(struct net_bridge_vlan *v, u16 flags, 221 struct netlink_ext_ack *extack) 222 { 223 struct net_bridge_vlan *masterv = NULL; 224 struct net_bridge_port *p = NULL; 225 struct net_bridge_vlan_group *vg; 226 struct net_device *dev; 227 struct net_bridge *br; 228 int err; 229 230 if (br_vlan_is_master(v)) { 231 br = v->br; 232 dev = br->dev; 233 vg = br_vlan_group(br); 234 } else { 235 p = v->port; 236 br = p->br; 237 dev = p->dev; 238 vg = nbp_vlan_group(p); 239 } 240 241 if (p) { 242 /* Add VLAN to the device filter if it is supported. 243 * This ensures tagged traffic enters the bridge when 244 * promiscuous mode is disabled by br_manage_promisc(). 245 */ 246 err = __vlan_vid_add(dev, br, v, flags, extack); 247 if (err) 248 goto out; 249 250 /* need to work on the master vlan too */ 251 if (flags & BRIDGE_VLAN_INFO_MASTER) { 252 bool changed; 253 254 err = br_vlan_add(br, v->vid, 255 flags | BRIDGE_VLAN_INFO_BRENTRY, 256 &changed, extack); 257 if (err) 258 goto out_filt; 259 } 260 261 masterv = br_vlan_get_master(br, v->vid, extack); 262 if (!masterv) 263 goto out_filt; 264 v->brvlan = masterv; 265 if (br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)) { 266 v->stats = netdev_alloc_pcpu_stats(struct br_vlan_stats); 267 if (!v->stats) { 268 err = -ENOMEM; 269 goto out_filt; 270 } 271 v->priv_flags |= BR_VLFLAG_PER_PORT_STATS; 272 } else { 273 v->stats = masterv->stats; 274 } 275 } else { 276 err = br_switchdev_port_vlan_add(dev, v->vid, flags, extack); 277 if (err && err != -EOPNOTSUPP) 278 goto out; 279 } 280 281 /* Add the dev mac and count the vlan only if it's usable */ 282 if (br_vlan_should_use(v)) { 283 err = br_fdb_insert(br, p, dev->dev_addr, v->vid); 284 if (err) { 285 br_err(br, "failed insert local address into bridge forwarding table\n"); 286 goto out_filt; 287 } 288 vg->num_vlans++; 289 } 290 291 err = rhashtable_lookup_insert_fast(&vg->vlan_hash, &v->vnode, 292 br_vlan_rht_params); 293 if (err) 294 goto out_fdb_insert; 295 296 __vlan_add_list(v); 297 __vlan_add_flags(v, flags); 298 299 if (p) 300 nbp_vlan_set_vlan_dev_state(p, v->vid); 301 out: 302 return err; 303 304 out_fdb_insert: 305 if (br_vlan_should_use(v)) { 306 br_fdb_find_delete_local(br, p, dev->dev_addr, v->vid); 307 vg->num_vlans--; 308 } 309 310 out_filt: 311 if (p) { 312 __vlan_vid_del(dev, br, v); 313 if (masterv) { 314 if (v->stats && masterv->stats != v->stats) 315 free_percpu(v->stats); 316 v->stats = NULL; 317 318 br_vlan_put_master(masterv); 319 v->brvlan = NULL; 320 } 321 } else { 322 br_switchdev_port_vlan_del(dev, v->vid); 323 } 324 325 goto out; 326 } 327 328 static int __vlan_del(struct net_bridge_vlan *v) 329 { 330 struct net_bridge_vlan *masterv = v; 331 struct net_bridge_vlan_group *vg; 332 struct net_bridge_port *p = NULL; 333 int err = 0; 334 335 if (br_vlan_is_master(v)) { 336 vg = br_vlan_group(v->br); 337 } else { 338 p = v->port; 339 vg = nbp_vlan_group(v->port); 340 masterv = v->brvlan; 341 } 342 343 __vlan_delete_pvid(vg, v->vid); 344 if (p) { 345 err = __vlan_vid_del(p->dev, p->br, v); 346 if (err) 347 goto out; 348 } else { 349 err = br_switchdev_port_vlan_del(v->br->dev, v->vid); 350 if (err && err != -EOPNOTSUPP) 351 goto out; 352 err = 0; 353 } 354 355 if (br_vlan_should_use(v)) { 356 v->flags &= ~BRIDGE_VLAN_INFO_BRENTRY; 357 vg->num_vlans--; 358 } 359 360 if (masterv != v) { 361 vlan_tunnel_info_del(vg, v); 362 rhashtable_remove_fast(&vg->vlan_hash, &v->vnode, 363 br_vlan_rht_params); 364 __vlan_del_list(v); 365 nbp_vlan_set_vlan_dev_state(p, v->vid); 366 call_rcu(&v->rcu, nbp_vlan_rcu_free); 367 } 368 369 br_vlan_put_master(masterv); 370 out: 371 return err; 372 } 373 374 static void __vlan_group_free(struct net_bridge_vlan_group *vg) 375 { 376 WARN_ON(!list_empty(&vg->vlan_list)); 377 rhashtable_destroy(&vg->vlan_hash); 378 vlan_tunnel_deinit(vg); 379 kfree(vg); 380 } 381 382 static void __vlan_flush(struct net_bridge_vlan_group *vg) 383 { 384 struct net_bridge_vlan *vlan, *tmp; 385 386 __vlan_delete_pvid(vg, vg->pvid); 387 list_for_each_entry_safe(vlan, tmp, &vg->vlan_list, vlist) 388 __vlan_del(vlan); 389 } 390 391 struct sk_buff *br_handle_vlan(struct net_bridge *br, 392 const struct net_bridge_port *p, 393 struct net_bridge_vlan_group *vg, 394 struct sk_buff *skb) 395 { 396 struct br_vlan_stats *stats; 397 struct net_bridge_vlan *v; 398 u16 vid; 399 400 /* If this packet was not filtered at input, let it pass */ 401 if (!BR_INPUT_SKB_CB(skb)->vlan_filtered) 402 goto out; 403 404 /* At this point, we know that the frame was filtered and contains 405 * a valid vlan id. If the vlan id has untagged flag set, 406 * send untagged; otherwise, send tagged. 407 */ 408 br_vlan_get_tag(skb, &vid); 409 v = br_vlan_find(vg, vid); 410 /* Vlan entry must be configured at this point. The 411 * only exception is the bridge is set in promisc mode and the 412 * packet is destined for the bridge device. In this case 413 * pass the packet as is. 414 */ 415 if (!v || !br_vlan_should_use(v)) { 416 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) { 417 goto out; 418 } else { 419 kfree_skb(skb); 420 return NULL; 421 } 422 } 423 if (br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) { 424 stats = this_cpu_ptr(v->stats); 425 u64_stats_update_begin(&stats->syncp); 426 stats->tx_bytes += skb->len; 427 stats->tx_packets++; 428 u64_stats_update_end(&stats->syncp); 429 } 430 431 if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED) 432 __vlan_hwaccel_clear_tag(skb); 433 434 if (p && (p->flags & BR_VLAN_TUNNEL) && 435 br_handle_egress_vlan_tunnel(skb, v)) { 436 kfree_skb(skb); 437 return NULL; 438 } 439 out: 440 return skb; 441 } 442 443 /* Called under RCU */ 444 static bool __allowed_ingress(const struct net_bridge *br, 445 struct net_bridge_vlan_group *vg, 446 struct sk_buff *skb, u16 *vid) 447 { 448 struct br_vlan_stats *stats; 449 struct net_bridge_vlan *v; 450 bool tagged; 451 452 BR_INPUT_SKB_CB(skb)->vlan_filtered = true; 453 /* If vlan tx offload is disabled on bridge device and frame was 454 * sent from vlan device on the bridge device, it does not have 455 * HW accelerated vlan tag. 456 */ 457 if (unlikely(!skb_vlan_tag_present(skb) && 458 skb->protocol == br->vlan_proto)) { 459 skb = skb_vlan_untag(skb); 460 if (unlikely(!skb)) 461 return false; 462 } 463 464 if (!br_vlan_get_tag(skb, vid)) { 465 /* Tagged frame */ 466 if (skb->vlan_proto != br->vlan_proto) { 467 /* Protocol-mismatch, empty out vlan_tci for new tag */ 468 skb_push(skb, ETH_HLEN); 469 skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto, 470 skb_vlan_tag_get(skb)); 471 if (unlikely(!skb)) 472 return false; 473 474 skb_pull(skb, ETH_HLEN); 475 skb_reset_mac_len(skb); 476 *vid = 0; 477 tagged = false; 478 } else { 479 tagged = true; 480 } 481 } else { 482 /* Untagged frame */ 483 tagged = false; 484 } 485 486 if (!*vid) { 487 u16 pvid = br_get_pvid(vg); 488 489 /* Frame had a tag with VID 0 or did not have a tag. 490 * See if pvid is set on this port. That tells us which 491 * vlan untagged or priority-tagged traffic belongs to. 492 */ 493 if (!pvid) 494 goto drop; 495 496 /* PVID is set on this port. Any untagged or priority-tagged 497 * ingress frame is considered to belong to this vlan. 498 */ 499 *vid = pvid; 500 if (likely(!tagged)) 501 /* Untagged Frame. */ 502 __vlan_hwaccel_put_tag(skb, br->vlan_proto, pvid); 503 else 504 /* Priority-tagged Frame. 505 * At this point, we know that skb->vlan_tci VID 506 * field was 0. 507 * We update only VID field and preserve PCP field. 508 */ 509 skb->vlan_tci |= pvid; 510 511 /* if stats are disabled we can avoid the lookup */ 512 if (!br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) 513 return true; 514 } 515 v = br_vlan_find(vg, *vid); 516 if (!v || !br_vlan_should_use(v)) 517 goto drop; 518 519 if (br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) { 520 stats = this_cpu_ptr(v->stats); 521 u64_stats_update_begin(&stats->syncp); 522 stats->rx_bytes += skb->len; 523 stats->rx_packets++; 524 u64_stats_update_end(&stats->syncp); 525 } 526 527 return true; 528 529 drop: 530 kfree_skb(skb); 531 return false; 532 } 533 534 bool br_allowed_ingress(const struct net_bridge *br, 535 struct net_bridge_vlan_group *vg, struct sk_buff *skb, 536 u16 *vid) 537 { 538 /* If VLAN filtering is disabled on the bridge, all packets are 539 * permitted. 540 */ 541 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) { 542 BR_INPUT_SKB_CB(skb)->vlan_filtered = false; 543 return true; 544 } 545 546 return __allowed_ingress(br, vg, skb, vid); 547 } 548 549 /* Called under RCU. */ 550 bool br_allowed_egress(struct net_bridge_vlan_group *vg, 551 const struct sk_buff *skb) 552 { 553 const struct net_bridge_vlan *v; 554 u16 vid; 555 556 /* If this packet was not filtered at input, let it pass */ 557 if (!BR_INPUT_SKB_CB(skb)->vlan_filtered) 558 return true; 559 560 br_vlan_get_tag(skb, &vid); 561 v = br_vlan_find(vg, vid); 562 if (v && br_vlan_should_use(v)) 563 return true; 564 565 return false; 566 } 567 568 /* Called under RCU */ 569 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid) 570 { 571 struct net_bridge_vlan_group *vg; 572 struct net_bridge *br = p->br; 573 574 /* If filtering was disabled at input, let it pass. */ 575 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) 576 return true; 577 578 vg = nbp_vlan_group_rcu(p); 579 if (!vg || !vg->num_vlans) 580 return false; 581 582 if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto) 583 *vid = 0; 584 585 if (!*vid) { 586 *vid = br_get_pvid(vg); 587 if (!*vid) 588 return false; 589 590 return true; 591 } 592 593 if (br_vlan_find(vg, *vid)) 594 return true; 595 596 return false; 597 } 598 599 static int br_vlan_add_existing(struct net_bridge *br, 600 struct net_bridge_vlan_group *vg, 601 struct net_bridge_vlan *vlan, 602 u16 flags, bool *changed, 603 struct netlink_ext_ack *extack) 604 { 605 int err; 606 607 err = br_switchdev_port_vlan_add(br->dev, vlan->vid, flags, extack); 608 if (err && err != -EOPNOTSUPP) 609 return err; 610 611 if (!br_vlan_is_brentry(vlan)) { 612 /* Trying to change flags of non-existent bridge vlan */ 613 if (!(flags & BRIDGE_VLAN_INFO_BRENTRY)) { 614 err = -EINVAL; 615 goto err_flags; 616 } 617 /* It was only kept for port vlans, now make it real */ 618 err = br_fdb_insert(br, NULL, br->dev->dev_addr, 619 vlan->vid); 620 if (err) { 621 br_err(br, "failed to insert local address into bridge forwarding table\n"); 622 goto err_fdb_insert; 623 } 624 625 refcount_inc(&vlan->refcnt); 626 vlan->flags |= BRIDGE_VLAN_INFO_BRENTRY; 627 vg->num_vlans++; 628 *changed = true; 629 } 630 631 if (__vlan_add_flags(vlan, flags)) 632 *changed = true; 633 634 return 0; 635 636 err_fdb_insert: 637 err_flags: 638 br_switchdev_port_vlan_del(br->dev, vlan->vid); 639 return err; 640 } 641 642 /* Must be protected by RTNL. 643 * Must be called with vid in range from 1 to 4094 inclusive. 644 * changed must be true only if the vlan was created or updated 645 */ 646 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed, 647 struct netlink_ext_ack *extack) 648 { 649 struct net_bridge_vlan_group *vg; 650 struct net_bridge_vlan *vlan; 651 int ret; 652 653 ASSERT_RTNL(); 654 655 *changed = false; 656 vg = br_vlan_group(br); 657 vlan = br_vlan_find(vg, vid); 658 if (vlan) 659 return br_vlan_add_existing(br, vg, vlan, flags, changed, 660 extack); 661 662 vlan = kzalloc(sizeof(*vlan), GFP_KERNEL); 663 if (!vlan) 664 return -ENOMEM; 665 666 vlan->stats = netdev_alloc_pcpu_stats(struct br_vlan_stats); 667 if (!vlan->stats) { 668 kfree(vlan); 669 return -ENOMEM; 670 } 671 vlan->vid = vid; 672 vlan->flags = flags | BRIDGE_VLAN_INFO_MASTER; 673 vlan->flags &= ~BRIDGE_VLAN_INFO_PVID; 674 vlan->br = br; 675 if (flags & BRIDGE_VLAN_INFO_BRENTRY) 676 refcount_set(&vlan->refcnt, 1); 677 ret = __vlan_add(vlan, flags, extack); 678 if (ret) { 679 free_percpu(vlan->stats); 680 kfree(vlan); 681 } else { 682 *changed = true; 683 } 684 685 return ret; 686 } 687 688 /* Must be protected by RTNL. 689 * Must be called with vid in range from 1 to 4094 inclusive. 690 */ 691 int br_vlan_delete(struct net_bridge *br, u16 vid) 692 { 693 struct net_bridge_vlan_group *vg; 694 struct net_bridge_vlan *v; 695 696 ASSERT_RTNL(); 697 698 vg = br_vlan_group(br); 699 v = br_vlan_find(vg, vid); 700 if (!v || !br_vlan_is_brentry(v)) 701 return -ENOENT; 702 703 br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid); 704 br_fdb_delete_by_port(br, NULL, vid, 0); 705 706 vlan_tunnel_info_del(vg, v); 707 708 return __vlan_del(v); 709 } 710 711 void br_vlan_flush(struct net_bridge *br) 712 { 713 struct net_bridge_vlan_group *vg; 714 715 ASSERT_RTNL(); 716 717 vg = br_vlan_group(br); 718 __vlan_flush(vg); 719 RCU_INIT_POINTER(br->vlgrp, NULL); 720 synchronize_rcu(); 721 __vlan_group_free(vg); 722 } 723 724 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid) 725 { 726 if (!vg) 727 return NULL; 728 729 return br_vlan_lookup(&vg->vlan_hash, vid); 730 } 731 732 /* Must be protected by RTNL. */ 733 static void recalculate_group_addr(struct net_bridge *br) 734 { 735 if (br_opt_get(br, BROPT_GROUP_ADDR_SET)) 736 return; 737 738 spin_lock_bh(&br->lock); 739 if (!br_opt_get(br, BROPT_VLAN_ENABLED) || 740 br->vlan_proto == htons(ETH_P_8021Q)) { 741 /* Bridge Group Address */ 742 br->group_addr[5] = 0x00; 743 } else { /* vlan_enabled && ETH_P_8021AD */ 744 /* Provider Bridge Group Address */ 745 br->group_addr[5] = 0x08; 746 } 747 spin_unlock_bh(&br->lock); 748 } 749 750 /* Must be protected by RTNL. */ 751 void br_recalculate_fwd_mask(struct net_bridge *br) 752 { 753 if (!br_opt_get(br, BROPT_VLAN_ENABLED) || 754 br->vlan_proto == htons(ETH_P_8021Q)) 755 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT; 756 else /* vlan_enabled && ETH_P_8021AD */ 757 br->group_fwd_mask_required = BR_GROUPFWD_8021AD & 758 ~(1u << br->group_addr[5]); 759 } 760 761 int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val) 762 { 763 struct switchdev_attr attr = { 764 .orig_dev = br->dev, 765 .id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING, 766 .flags = SWITCHDEV_F_SKIP_EOPNOTSUPP, 767 .u.vlan_filtering = val, 768 }; 769 int err; 770 771 if (br_opt_get(br, BROPT_VLAN_ENABLED) == !!val) 772 return 0; 773 774 err = switchdev_port_attr_set(br->dev, &attr); 775 if (err && err != -EOPNOTSUPP) 776 return err; 777 778 br_opt_toggle(br, BROPT_VLAN_ENABLED, !!val); 779 br_manage_promisc(br); 780 recalculate_group_addr(br); 781 br_recalculate_fwd_mask(br); 782 783 return 0; 784 } 785 786 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val) 787 { 788 return __br_vlan_filter_toggle(br, val); 789 } 790 791 bool br_vlan_enabled(const struct net_device *dev) 792 { 793 struct net_bridge *br = netdev_priv(dev); 794 795 return br_opt_get(br, BROPT_VLAN_ENABLED); 796 } 797 EXPORT_SYMBOL_GPL(br_vlan_enabled); 798 799 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto) 800 { 801 int err = 0; 802 struct net_bridge_port *p; 803 struct net_bridge_vlan *vlan; 804 struct net_bridge_vlan_group *vg; 805 __be16 oldproto; 806 807 if (br->vlan_proto == proto) 808 return 0; 809 810 /* Add VLANs for the new proto to the device filter. */ 811 list_for_each_entry(p, &br->port_list, list) { 812 vg = nbp_vlan_group(p); 813 list_for_each_entry(vlan, &vg->vlan_list, vlist) { 814 err = vlan_vid_add(p->dev, proto, vlan->vid); 815 if (err) 816 goto err_filt; 817 } 818 } 819 820 oldproto = br->vlan_proto; 821 br->vlan_proto = proto; 822 823 recalculate_group_addr(br); 824 br_recalculate_fwd_mask(br); 825 826 /* Delete VLANs for the old proto from the device filter. */ 827 list_for_each_entry(p, &br->port_list, list) { 828 vg = nbp_vlan_group(p); 829 list_for_each_entry(vlan, &vg->vlan_list, vlist) 830 vlan_vid_del(p->dev, oldproto, vlan->vid); 831 } 832 833 return 0; 834 835 err_filt: 836 list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist) 837 vlan_vid_del(p->dev, proto, vlan->vid); 838 839 list_for_each_entry_continue_reverse(p, &br->port_list, list) { 840 vg = nbp_vlan_group(p); 841 list_for_each_entry(vlan, &vg->vlan_list, vlist) 842 vlan_vid_del(p->dev, proto, vlan->vid); 843 } 844 845 return err; 846 } 847 848 int br_vlan_set_proto(struct net_bridge *br, unsigned long val) 849 { 850 if (val != ETH_P_8021Q && val != ETH_P_8021AD) 851 return -EPROTONOSUPPORT; 852 853 return __br_vlan_set_proto(br, htons(val)); 854 } 855 856 int br_vlan_set_stats(struct net_bridge *br, unsigned long val) 857 { 858 switch (val) { 859 case 0: 860 case 1: 861 br_opt_toggle(br, BROPT_VLAN_STATS_ENABLED, !!val); 862 break; 863 default: 864 return -EINVAL; 865 } 866 867 return 0; 868 } 869 870 int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val) 871 { 872 struct net_bridge_port *p; 873 874 /* allow to change the option if there are no port vlans configured */ 875 list_for_each_entry(p, &br->port_list, list) { 876 struct net_bridge_vlan_group *vg = nbp_vlan_group(p); 877 878 if (vg->num_vlans) 879 return -EBUSY; 880 } 881 882 switch (val) { 883 case 0: 884 case 1: 885 br_opt_toggle(br, BROPT_VLAN_STATS_PER_PORT, !!val); 886 break; 887 default: 888 return -EINVAL; 889 } 890 891 return 0; 892 } 893 894 static bool vlan_default_pvid(struct net_bridge_vlan_group *vg, u16 vid) 895 { 896 struct net_bridge_vlan *v; 897 898 if (vid != vg->pvid) 899 return false; 900 901 v = br_vlan_lookup(&vg->vlan_hash, vid); 902 if (v && br_vlan_should_use(v) && 903 (v->flags & BRIDGE_VLAN_INFO_UNTAGGED)) 904 return true; 905 906 return false; 907 } 908 909 static void br_vlan_disable_default_pvid(struct net_bridge *br) 910 { 911 struct net_bridge_port *p; 912 u16 pvid = br->default_pvid; 913 914 /* Disable default_pvid on all ports where it is still 915 * configured. 916 */ 917 if (vlan_default_pvid(br_vlan_group(br), pvid)) 918 br_vlan_delete(br, pvid); 919 920 list_for_each_entry(p, &br->port_list, list) { 921 if (vlan_default_pvid(nbp_vlan_group(p), pvid)) 922 nbp_vlan_delete(p, pvid); 923 } 924 925 br->default_pvid = 0; 926 } 927 928 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid, 929 struct netlink_ext_ack *extack) 930 { 931 const struct net_bridge_vlan *pvent; 932 struct net_bridge_vlan_group *vg; 933 struct net_bridge_port *p; 934 unsigned long *changed; 935 bool vlchange; 936 u16 old_pvid; 937 int err = 0; 938 939 if (!pvid) { 940 br_vlan_disable_default_pvid(br); 941 return 0; 942 } 943 944 changed = bitmap_zalloc(BR_MAX_PORTS, GFP_KERNEL); 945 if (!changed) 946 return -ENOMEM; 947 948 old_pvid = br->default_pvid; 949 950 /* Update default_pvid config only if we do not conflict with 951 * user configuration. 952 */ 953 vg = br_vlan_group(br); 954 pvent = br_vlan_find(vg, pvid); 955 if ((!old_pvid || vlan_default_pvid(vg, old_pvid)) && 956 (!pvent || !br_vlan_should_use(pvent))) { 957 err = br_vlan_add(br, pvid, 958 BRIDGE_VLAN_INFO_PVID | 959 BRIDGE_VLAN_INFO_UNTAGGED | 960 BRIDGE_VLAN_INFO_BRENTRY, 961 &vlchange, extack); 962 if (err) 963 goto out; 964 br_vlan_delete(br, old_pvid); 965 set_bit(0, changed); 966 } 967 968 list_for_each_entry(p, &br->port_list, list) { 969 /* Update default_pvid config only if we do not conflict with 970 * user configuration. 971 */ 972 vg = nbp_vlan_group(p); 973 if ((old_pvid && 974 !vlan_default_pvid(vg, old_pvid)) || 975 br_vlan_find(vg, pvid)) 976 continue; 977 978 err = nbp_vlan_add(p, pvid, 979 BRIDGE_VLAN_INFO_PVID | 980 BRIDGE_VLAN_INFO_UNTAGGED, 981 &vlchange, extack); 982 if (err) 983 goto err_port; 984 nbp_vlan_delete(p, old_pvid); 985 set_bit(p->port_no, changed); 986 } 987 988 br->default_pvid = pvid; 989 990 out: 991 bitmap_free(changed); 992 return err; 993 994 err_port: 995 list_for_each_entry_continue_reverse(p, &br->port_list, list) { 996 if (!test_bit(p->port_no, changed)) 997 continue; 998 999 if (old_pvid) 1000 nbp_vlan_add(p, old_pvid, 1001 BRIDGE_VLAN_INFO_PVID | 1002 BRIDGE_VLAN_INFO_UNTAGGED, 1003 &vlchange, NULL); 1004 nbp_vlan_delete(p, pvid); 1005 } 1006 1007 if (test_bit(0, changed)) { 1008 if (old_pvid) 1009 br_vlan_add(br, old_pvid, 1010 BRIDGE_VLAN_INFO_PVID | 1011 BRIDGE_VLAN_INFO_UNTAGGED | 1012 BRIDGE_VLAN_INFO_BRENTRY, 1013 &vlchange, NULL); 1014 br_vlan_delete(br, pvid); 1015 } 1016 goto out; 1017 } 1018 1019 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val) 1020 { 1021 u16 pvid = val; 1022 int err = 0; 1023 1024 if (val >= VLAN_VID_MASK) 1025 return -EINVAL; 1026 1027 if (pvid == br->default_pvid) 1028 goto out; 1029 1030 /* Only allow default pvid change when filtering is disabled */ 1031 if (br_opt_get(br, BROPT_VLAN_ENABLED)) { 1032 pr_info_once("Please disable vlan filtering to change default_pvid\n"); 1033 err = -EPERM; 1034 goto out; 1035 } 1036 err = __br_vlan_set_default_pvid(br, pvid, NULL); 1037 out: 1038 return err; 1039 } 1040 1041 int br_vlan_init(struct net_bridge *br) 1042 { 1043 struct net_bridge_vlan_group *vg; 1044 int ret = -ENOMEM; 1045 bool changed; 1046 1047 vg = kzalloc(sizeof(*vg), GFP_KERNEL); 1048 if (!vg) 1049 goto out; 1050 ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params); 1051 if (ret) 1052 goto err_rhtbl; 1053 ret = vlan_tunnel_init(vg); 1054 if (ret) 1055 goto err_tunnel_init; 1056 INIT_LIST_HEAD(&vg->vlan_list); 1057 br->vlan_proto = htons(ETH_P_8021Q); 1058 br->default_pvid = 1; 1059 rcu_assign_pointer(br->vlgrp, vg); 1060 ret = br_vlan_add(br, 1, 1061 BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED | 1062 BRIDGE_VLAN_INFO_BRENTRY, &changed, NULL); 1063 if (ret) 1064 goto err_vlan_add; 1065 1066 out: 1067 return ret; 1068 1069 err_vlan_add: 1070 vlan_tunnel_deinit(vg); 1071 err_tunnel_init: 1072 rhashtable_destroy(&vg->vlan_hash); 1073 err_rhtbl: 1074 kfree(vg); 1075 1076 goto out; 1077 } 1078 1079 int nbp_vlan_init(struct net_bridge_port *p, struct netlink_ext_ack *extack) 1080 { 1081 struct switchdev_attr attr = { 1082 .orig_dev = p->br->dev, 1083 .id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING, 1084 .flags = SWITCHDEV_F_SKIP_EOPNOTSUPP, 1085 .u.vlan_filtering = br_opt_get(p->br, BROPT_VLAN_ENABLED), 1086 }; 1087 struct net_bridge_vlan_group *vg; 1088 int ret = -ENOMEM; 1089 1090 vg = kzalloc(sizeof(struct net_bridge_vlan_group), GFP_KERNEL); 1091 if (!vg) 1092 goto out; 1093 1094 ret = switchdev_port_attr_set(p->dev, &attr); 1095 if (ret && ret != -EOPNOTSUPP) 1096 goto err_vlan_enabled; 1097 1098 ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params); 1099 if (ret) 1100 goto err_rhtbl; 1101 ret = vlan_tunnel_init(vg); 1102 if (ret) 1103 goto err_tunnel_init; 1104 INIT_LIST_HEAD(&vg->vlan_list); 1105 rcu_assign_pointer(p->vlgrp, vg); 1106 if (p->br->default_pvid) { 1107 bool changed; 1108 1109 ret = nbp_vlan_add(p, p->br->default_pvid, 1110 BRIDGE_VLAN_INFO_PVID | 1111 BRIDGE_VLAN_INFO_UNTAGGED, 1112 &changed, extack); 1113 if (ret) 1114 goto err_vlan_add; 1115 } 1116 out: 1117 return ret; 1118 1119 err_vlan_add: 1120 RCU_INIT_POINTER(p->vlgrp, NULL); 1121 synchronize_rcu(); 1122 vlan_tunnel_deinit(vg); 1123 err_tunnel_init: 1124 rhashtable_destroy(&vg->vlan_hash); 1125 err_rhtbl: 1126 err_vlan_enabled: 1127 kfree(vg); 1128 1129 goto out; 1130 } 1131 1132 /* Must be protected by RTNL. 1133 * Must be called with vid in range from 1 to 4094 inclusive. 1134 * changed must be true only if the vlan was created or updated 1135 */ 1136 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags, 1137 bool *changed, struct netlink_ext_ack *extack) 1138 { 1139 struct net_bridge_vlan *vlan; 1140 int ret; 1141 1142 ASSERT_RTNL(); 1143 1144 *changed = false; 1145 vlan = br_vlan_find(nbp_vlan_group(port), vid); 1146 if (vlan) { 1147 /* Pass the flags to the hardware bridge */ 1148 ret = br_switchdev_port_vlan_add(port->dev, vid, flags, extack); 1149 if (ret && ret != -EOPNOTSUPP) 1150 return ret; 1151 *changed = __vlan_add_flags(vlan, flags); 1152 1153 return 0; 1154 } 1155 1156 vlan = kzalloc(sizeof(*vlan), GFP_KERNEL); 1157 if (!vlan) 1158 return -ENOMEM; 1159 1160 vlan->vid = vid; 1161 vlan->port = port; 1162 ret = __vlan_add(vlan, flags, extack); 1163 if (ret) 1164 kfree(vlan); 1165 else 1166 *changed = true; 1167 1168 return ret; 1169 } 1170 1171 /* Must be protected by RTNL. 1172 * Must be called with vid in range from 1 to 4094 inclusive. 1173 */ 1174 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid) 1175 { 1176 struct net_bridge_vlan *v; 1177 1178 ASSERT_RTNL(); 1179 1180 v = br_vlan_find(nbp_vlan_group(port), vid); 1181 if (!v) 1182 return -ENOENT; 1183 br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid); 1184 br_fdb_delete_by_port(port->br, port, vid, 0); 1185 1186 return __vlan_del(v); 1187 } 1188 1189 void nbp_vlan_flush(struct net_bridge_port *port) 1190 { 1191 struct net_bridge_vlan_group *vg; 1192 1193 ASSERT_RTNL(); 1194 1195 vg = nbp_vlan_group(port); 1196 __vlan_flush(vg); 1197 RCU_INIT_POINTER(port->vlgrp, NULL); 1198 synchronize_rcu(); 1199 __vlan_group_free(vg); 1200 } 1201 1202 void br_vlan_get_stats(const struct net_bridge_vlan *v, 1203 struct br_vlan_stats *stats) 1204 { 1205 int i; 1206 1207 memset(stats, 0, sizeof(*stats)); 1208 for_each_possible_cpu(i) { 1209 u64 rxpackets, rxbytes, txpackets, txbytes; 1210 struct br_vlan_stats *cpu_stats; 1211 unsigned int start; 1212 1213 cpu_stats = per_cpu_ptr(v->stats, i); 1214 do { 1215 start = u64_stats_fetch_begin_irq(&cpu_stats->syncp); 1216 rxpackets = cpu_stats->rx_packets; 1217 rxbytes = cpu_stats->rx_bytes; 1218 txbytes = cpu_stats->tx_bytes; 1219 txpackets = cpu_stats->tx_packets; 1220 } while (u64_stats_fetch_retry_irq(&cpu_stats->syncp, start)); 1221 1222 stats->rx_packets += rxpackets; 1223 stats->rx_bytes += rxbytes; 1224 stats->tx_bytes += txbytes; 1225 stats->tx_packets += txpackets; 1226 } 1227 } 1228 1229 int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid) 1230 { 1231 struct net_bridge_vlan_group *vg; 1232 struct net_bridge_port *p; 1233 1234 ASSERT_RTNL(); 1235 p = br_port_get_check_rtnl(dev); 1236 if (p) 1237 vg = nbp_vlan_group(p); 1238 else if (netif_is_bridge_master(dev)) 1239 vg = br_vlan_group(netdev_priv(dev)); 1240 else 1241 return -EINVAL; 1242 1243 *p_pvid = br_get_pvid(vg); 1244 return 0; 1245 } 1246 EXPORT_SYMBOL_GPL(br_vlan_get_pvid); 1247 1248 int br_vlan_get_info(const struct net_device *dev, u16 vid, 1249 struct bridge_vlan_info *p_vinfo) 1250 { 1251 struct net_bridge_vlan_group *vg; 1252 struct net_bridge_vlan *v; 1253 struct net_bridge_port *p; 1254 1255 ASSERT_RTNL(); 1256 p = br_port_get_check_rtnl(dev); 1257 if (p) 1258 vg = nbp_vlan_group(p); 1259 else if (netif_is_bridge_master(dev)) 1260 vg = br_vlan_group(netdev_priv(dev)); 1261 else 1262 return -EINVAL; 1263 1264 v = br_vlan_find(vg, vid); 1265 if (!v) 1266 return -ENOENT; 1267 1268 p_vinfo->vid = vid; 1269 p_vinfo->flags = v->flags; 1270 return 0; 1271 } 1272 EXPORT_SYMBOL_GPL(br_vlan_get_info); 1273 1274 static int br_vlan_is_bind_vlan_dev(const struct net_device *dev) 1275 { 1276 return is_vlan_dev(dev) && 1277 !!(vlan_dev_priv(dev)->flags & VLAN_FLAG_BRIDGE_BINDING); 1278 } 1279 1280 static int br_vlan_is_bind_vlan_dev_fn(struct net_device *dev, 1281 __always_unused void *data) 1282 { 1283 return br_vlan_is_bind_vlan_dev(dev); 1284 } 1285 1286 static bool br_vlan_has_upper_bind_vlan_dev(struct net_device *dev) 1287 { 1288 int found; 1289 1290 rcu_read_lock(); 1291 found = netdev_walk_all_upper_dev_rcu(dev, br_vlan_is_bind_vlan_dev_fn, 1292 NULL); 1293 rcu_read_unlock(); 1294 1295 return !!found; 1296 } 1297 1298 struct br_vlan_bind_walk_data { 1299 u16 vid; 1300 struct net_device *result; 1301 }; 1302 1303 static int br_vlan_match_bind_vlan_dev_fn(struct net_device *dev, 1304 void *data_in) 1305 { 1306 struct br_vlan_bind_walk_data *data = data_in; 1307 int found = 0; 1308 1309 if (br_vlan_is_bind_vlan_dev(dev) && 1310 vlan_dev_priv(dev)->vlan_id == data->vid) { 1311 data->result = dev; 1312 found = 1; 1313 } 1314 1315 return found; 1316 } 1317 1318 static struct net_device * 1319 br_vlan_get_upper_bind_vlan_dev(struct net_device *dev, u16 vid) 1320 { 1321 struct br_vlan_bind_walk_data data = { 1322 .vid = vid, 1323 }; 1324 1325 rcu_read_lock(); 1326 netdev_walk_all_upper_dev_rcu(dev, br_vlan_match_bind_vlan_dev_fn, 1327 &data); 1328 rcu_read_unlock(); 1329 1330 return data.result; 1331 } 1332 1333 static bool br_vlan_is_dev_up(const struct net_device *dev) 1334 { 1335 return !!(dev->flags & IFF_UP) && netif_oper_up(dev); 1336 } 1337 1338 static void br_vlan_set_vlan_dev_state(const struct net_bridge *br, 1339 struct net_device *vlan_dev) 1340 { 1341 u16 vid = vlan_dev_priv(vlan_dev)->vlan_id; 1342 struct net_bridge_vlan_group *vg; 1343 struct net_bridge_port *p; 1344 bool has_carrier = false; 1345 1346 if (!netif_carrier_ok(br->dev)) { 1347 netif_carrier_off(vlan_dev); 1348 return; 1349 } 1350 1351 list_for_each_entry(p, &br->port_list, list) { 1352 vg = nbp_vlan_group(p); 1353 if (br_vlan_find(vg, vid) && br_vlan_is_dev_up(p->dev)) { 1354 has_carrier = true; 1355 break; 1356 } 1357 } 1358 1359 if (has_carrier) 1360 netif_carrier_on(vlan_dev); 1361 else 1362 netif_carrier_off(vlan_dev); 1363 } 1364 1365 static void br_vlan_set_all_vlan_dev_state(struct net_bridge_port *p) 1366 { 1367 struct net_bridge_vlan_group *vg = nbp_vlan_group(p); 1368 struct net_bridge_vlan *vlan; 1369 struct net_device *vlan_dev; 1370 1371 list_for_each_entry(vlan, &vg->vlan_list, vlist) { 1372 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, 1373 vlan->vid); 1374 if (vlan_dev) { 1375 if (br_vlan_is_dev_up(p->dev)) { 1376 if (netif_carrier_ok(p->br->dev)) 1377 netif_carrier_on(vlan_dev); 1378 } else { 1379 br_vlan_set_vlan_dev_state(p->br, vlan_dev); 1380 } 1381 } 1382 } 1383 } 1384 1385 static void br_vlan_upper_change(struct net_device *dev, 1386 struct net_device *upper_dev, 1387 bool linking) 1388 { 1389 struct net_bridge *br = netdev_priv(dev); 1390 1391 if (!br_vlan_is_bind_vlan_dev(upper_dev)) 1392 return; 1393 1394 if (linking) { 1395 br_vlan_set_vlan_dev_state(br, upper_dev); 1396 br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, true); 1397 } else { 1398 br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, 1399 br_vlan_has_upper_bind_vlan_dev(dev)); 1400 } 1401 } 1402 1403 struct br_vlan_link_state_walk_data { 1404 struct net_bridge *br; 1405 }; 1406 1407 static int br_vlan_link_state_change_fn(struct net_device *vlan_dev, 1408 void *data_in) 1409 { 1410 struct br_vlan_link_state_walk_data *data = data_in; 1411 1412 if (br_vlan_is_bind_vlan_dev(vlan_dev)) 1413 br_vlan_set_vlan_dev_state(data->br, vlan_dev); 1414 1415 return 0; 1416 } 1417 1418 static void br_vlan_link_state_change(struct net_device *dev, 1419 struct net_bridge *br) 1420 { 1421 struct br_vlan_link_state_walk_data data = { 1422 .br = br 1423 }; 1424 1425 rcu_read_lock(); 1426 netdev_walk_all_upper_dev_rcu(dev, br_vlan_link_state_change_fn, 1427 &data); 1428 rcu_read_unlock(); 1429 } 1430 1431 /* Must be protected by RTNL. */ 1432 static void nbp_vlan_set_vlan_dev_state(struct net_bridge_port *p, u16 vid) 1433 { 1434 struct net_device *vlan_dev; 1435 1436 if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING)) 1437 return; 1438 1439 vlan_dev = br_vlan_get_upper_bind_vlan_dev(p->br->dev, vid); 1440 if (vlan_dev) 1441 br_vlan_set_vlan_dev_state(p->br, vlan_dev); 1442 } 1443 1444 /* Must be protected by RTNL. */ 1445 void br_vlan_bridge_event(struct net_device *dev, unsigned long event, 1446 void *ptr) 1447 { 1448 struct netdev_notifier_changeupper_info *info; 1449 struct net_bridge *br; 1450 1451 switch (event) { 1452 case NETDEV_CHANGEUPPER: 1453 info = ptr; 1454 br_vlan_upper_change(dev, info->upper_dev, info->linking); 1455 break; 1456 1457 case NETDEV_CHANGE: 1458 case NETDEV_UP: 1459 br = netdev_priv(dev); 1460 if (!br_opt_get(br, BROPT_VLAN_BRIDGE_BINDING)) 1461 return; 1462 br_vlan_link_state_change(dev, br); 1463 break; 1464 } 1465 } 1466 1467 /* Must be protected by RTNL. */ 1468 void br_vlan_port_event(struct net_bridge_port *p, unsigned long event) 1469 { 1470 if (!br_opt_get(p->br, BROPT_VLAN_BRIDGE_BINDING)) 1471 return; 1472 1473 switch (event) { 1474 case NETDEV_CHANGE: 1475 case NETDEV_DOWN: 1476 case NETDEV_UP: 1477 br_vlan_set_all_vlan_dev_state(p); 1478 break; 1479 } 1480 } 1481