1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Linux ethernet bridge 4 * 5 * Authors: 6 * Lennert Buytenhek <buytenh@gnu.org> 7 */ 8 9 #ifndef _BR_PRIVATE_H 10 #define _BR_PRIVATE_H 11 12 #include <linux/netdevice.h> 13 #include <linux/if_bridge.h> 14 #include <linux/netpoll.h> 15 #include <linux/u64_stats_sync.h> 16 #include <net/route.h> 17 #include <net/ip6_fib.h> 18 #include <net/pkt_cls.h> 19 #include <linux/if_vlan.h> 20 #include <linux/rhashtable.h> 21 #include <linux/refcount.h> 22 23 #define BR_HASH_BITS 8 24 #define BR_HASH_SIZE (1 << BR_HASH_BITS) 25 26 #define BR_HOLD_TIME (1*HZ) 27 28 #define BR_PORT_BITS 10 29 #define BR_MAX_PORTS (1<<BR_PORT_BITS) 30 31 #define BR_MULTICAST_DEFAULT_HASH_MAX 4096 32 #define BR_MULTICAST_QUERY_INTVL_MIN msecs_to_jiffies(1000) 33 #define BR_MULTICAST_STARTUP_QUERY_INTVL_MIN BR_MULTICAST_QUERY_INTVL_MIN 34 #define BR_MULTICAST_QUERY_INTVL_MAX msecs_to_jiffies(86400000) /* 24 hours */ 35 #define BR_MULTICAST_STARTUP_QUERY_INTVL_MAX BR_MULTICAST_QUERY_INTVL_MAX 36 37 #define BR_HWDOM_MAX BITS_PER_LONG 38 39 #define BR_VERSION "2.3" 40 41 /* Control of forwarding link local multicast */ 42 #define BR_GROUPFWD_DEFAULT 0 43 /* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */ 44 enum { 45 BR_GROUPFWD_STP = BIT(0), 46 BR_GROUPFWD_MACPAUSE = BIT(1), 47 BR_GROUPFWD_LACP = BIT(2), 48 }; 49 50 #define BR_GROUPFWD_RESTRICTED (BR_GROUPFWD_STP | BR_GROUPFWD_MACPAUSE | \ 51 BR_GROUPFWD_LACP) 52 /* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */ 53 #define BR_GROUPFWD_8021AD 0xB801u 54 55 /* Path to usermode spanning tree program */ 56 #define BR_STP_PROG "/sbin/bridge-stp" 57 58 #define BR_FDB_NOTIFY_SETTABLE_BITS (FDB_NOTIFY_BIT | FDB_NOTIFY_INACTIVE_BIT) 59 60 typedef struct bridge_id bridge_id; 61 typedef struct mac_addr mac_addr; 62 typedef __u16 port_id; 63 64 struct bridge_id { 65 unsigned char prio[2]; 66 unsigned char addr[ETH_ALEN]; 67 }; 68 69 struct mac_addr { 70 unsigned char addr[ETH_ALEN]; 71 }; 72 73 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 74 /* our own querier */ 75 struct bridge_mcast_own_query { 76 struct timer_list timer; 77 u32 startup_sent; 78 }; 79 80 /* other querier */ 81 struct bridge_mcast_other_query { 82 struct timer_list timer; 83 struct timer_list delay_timer; 84 }; 85 86 /* selected querier */ 87 struct bridge_mcast_querier { 88 struct br_ip addr; 89 int port_ifidx; 90 seqcount_spinlock_t seq; 91 }; 92 93 /* IGMP/MLD statistics */ 94 struct bridge_mcast_stats { 95 struct br_mcast_stats mstats; 96 struct u64_stats_sync syncp; 97 }; 98 99 struct br_mdb_src_entry { 100 struct br_ip addr; 101 }; 102 103 struct br_mdb_config { 104 struct net_bridge *br; 105 struct net_bridge_port *p; 106 struct br_mdb_entry *entry; 107 struct br_ip group; 108 bool src_entry; 109 u8 filter_mode; 110 u16 nlflags; 111 struct br_mdb_src_entry *src_entries; 112 int num_src_entries; 113 u8 rt_protocol; 114 }; 115 #endif 116 117 /* net_bridge_mcast_port must be always defined due to forwarding stubs */ 118 struct net_bridge_mcast_port { 119 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 120 struct net_bridge_port *port; 121 struct net_bridge_vlan *vlan; 122 123 struct bridge_mcast_own_query ip4_own_query; 124 struct timer_list ip4_mc_router_timer; 125 struct hlist_node ip4_rlist; 126 #if IS_ENABLED(CONFIG_IPV6) 127 struct bridge_mcast_own_query ip6_own_query; 128 struct timer_list ip6_mc_router_timer; 129 struct hlist_node ip6_rlist; 130 #endif /* IS_ENABLED(CONFIG_IPV6) */ 131 unsigned char multicast_router; 132 u32 mdb_n_entries; 133 u32 mdb_max_entries; 134 #endif /* CONFIG_BRIDGE_IGMP_SNOOPING */ 135 }; 136 137 /* net_bridge_mcast must be always defined due to forwarding stubs */ 138 struct net_bridge_mcast { 139 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 140 struct net_bridge *br; 141 struct net_bridge_vlan *vlan; 142 143 u32 multicast_last_member_count; 144 u32 multicast_startup_query_count; 145 146 u8 multicast_querier; 147 u8 multicast_igmp_version; 148 u8 multicast_router; 149 #if IS_ENABLED(CONFIG_IPV6) 150 u8 multicast_mld_version; 151 #endif 152 unsigned long multicast_last_member_interval; 153 unsigned long multicast_membership_interval; 154 unsigned long multicast_querier_interval; 155 unsigned long multicast_query_interval; 156 unsigned long multicast_query_response_interval; 157 unsigned long multicast_startup_query_interval; 158 struct hlist_head ip4_mc_router_list; 159 struct timer_list ip4_mc_router_timer; 160 struct bridge_mcast_other_query ip4_other_query; 161 struct bridge_mcast_own_query ip4_own_query; 162 struct bridge_mcast_querier ip4_querier; 163 #if IS_ENABLED(CONFIG_IPV6) 164 struct hlist_head ip6_mc_router_list; 165 struct timer_list ip6_mc_router_timer; 166 struct bridge_mcast_other_query ip6_other_query; 167 struct bridge_mcast_own_query ip6_own_query; 168 struct bridge_mcast_querier ip6_querier; 169 #endif /* IS_ENABLED(CONFIG_IPV6) */ 170 #endif /* CONFIG_BRIDGE_IGMP_SNOOPING */ 171 }; 172 173 struct br_tunnel_info { 174 __be64 tunnel_id; 175 struct metadata_dst __rcu *tunnel_dst; 176 }; 177 178 /* private vlan flags */ 179 enum { 180 BR_VLFLAG_PER_PORT_STATS = BIT(0), 181 BR_VLFLAG_ADDED_BY_SWITCHDEV = BIT(1), 182 BR_VLFLAG_MCAST_ENABLED = BIT(2), 183 BR_VLFLAG_GLOBAL_MCAST_ENABLED = BIT(3), 184 BR_VLFLAG_NEIGH_SUPPRESS_ENABLED = BIT(4), 185 BR_VLFLAG_TAGGING_BY_SWITCHDEV = BIT(5), 186 }; 187 188 /** 189 * struct net_bridge_vlan - per-vlan entry 190 * 191 * @vnode: rhashtable member 192 * @tnode: rhashtable member 193 * @vid: VLAN id 194 * @flags: bridge vlan flags 195 * @priv_flags: private (in-kernel) bridge vlan flags 196 * @state: STP state (e.g. blocking, learning, forwarding) 197 * @stats: per-cpu VLAN statistics 198 * @br: if MASTER flag set, this points to a bridge struct 199 * @port: if MASTER flag unset, this points to a port struct 200 * @refcnt: if MASTER flag set, this is bumped for each port referencing it 201 * @brvlan: if MASTER flag unset, this points to the global per-VLAN context 202 * for this VLAN entry 203 * @tinfo: bridge tunnel info 204 * @br_mcast_ctx: if MASTER flag set, this is the global vlan multicast context 205 * @port_mcast_ctx: if MASTER flag unset, this is the per-port/vlan multicast 206 * context 207 * @msti: if MASTER flag set, this holds the VLANs MST instance 208 * @vlist: sorted list of VLAN entries 209 * @rcu: used for entry destruction 210 * 211 * This structure is shared between the global per-VLAN entries contained in 212 * the bridge rhashtable and the local per-port per-VLAN entries contained in 213 * the port's rhashtable. The union entries should be interpreted depending on 214 * the entry flags that are set. 215 */ 216 struct net_bridge_vlan { 217 struct rhash_head vnode; 218 struct rhash_head tnode; 219 u16 vid; 220 u16 flags; 221 u16 priv_flags; 222 u8 state; 223 struct pcpu_sw_netstats __percpu *stats; 224 union { 225 struct net_bridge *br; 226 struct net_bridge_port *port; 227 }; 228 union { 229 refcount_t refcnt; 230 struct net_bridge_vlan *brvlan; 231 }; 232 233 struct br_tunnel_info tinfo; 234 235 union { 236 struct net_bridge_mcast br_mcast_ctx; 237 struct net_bridge_mcast_port port_mcast_ctx; 238 }; 239 240 u16 msti; 241 242 struct list_head vlist; 243 244 struct rcu_head rcu; 245 }; 246 247 /** 248 * struct net_bridge_vlan_group 249 * 250 * @vlan_hash: VLAN entry rhashtable 251 * @tunnel_hash: Hash table to map from tunnel key ID (e.g. VXLAN VNI) to VLAN 252 * @vlan_list: sorted VLAN entry list 253 * @num_vlans: number of total VLAN entries 254 * @pvid: PVID VLAN id 255 * @pvid_state: PVID's STP state (e.g. forwarding, learning, blocking) 256 * 257 * IMPORTANT: Be careful when checking if there're VLAN entries using list 258 * primitives because the bridge can have entries in its list which 259 * are just for global context but not for filtering, i.e. they have 260 * the master flag set but not the brentry flag. If you have to check 261 * if there're "real" entries in the bridge please test @num_vlans 262 */ 263 struct net_bridge_vlan_group { 264 struct rhashtable vlan_hash; 265 struct rhashtable tunnel_hash; 266 struct list_head vlan_list; 267 u16 num_vlans; 268 u16 pvid; 269 u8 pvid_state; 270 }; 271 272 /* bridge fdb flags */ 273 enum { 274 BR_FDB_LOCAL, 275 BR_FDB_STATIC, 276 BR_FDB_STICKY, 277 BR_FDB_ADDED_BY_USER, 278 BR_FDB_ADDED_BY_EXT_LEARN, 279 BR_FDB_OFFLOADED, 280 BR_FDB_NOTIFY, 281 BR_FDB_NOTIFY_INACTIVE, 282 BR_FDB_LOCKED, 283 BR_FDB_DYNAMIC_LEARNED, 284 }; 285 286 struct net_bridge_fdb_key { 287 mac_addr addr; 288 u16 vlan_id; 289 }; 290 291 struct net_bridge_fdb_entry { 292 struct rhash_head rhnode; 293 struct net_bridge_port *dst; 294 295 struct net_bridge_fdb_key key; 296 struct hlist_node fdb_node; 297 unsigned long flags; 298 299 /* write-heavy members should not affect lookups */ 300 unsigned long updated ____cacheline_aligned_in_smp; 301 unsigned long used; 302 303 struct rcu_head rcu; 304 }; 305 306 struct net_bridge_fdb_flush_desc { 307 unsigned long flags; 308 unsigned long flags_mask; 309 int port_ifindex; 310 u16 vlan_id; 311 }; 312 313 #define MDB_PG_FLAGS_PERMANENT BIT(0) 314 #define MDB_PG_FLAGS_OFFLOAD BIT(1) 315 #define MDB_PG_FLAGS_FAST_LEAVE BIT(2) 316 #define MDB_PG_FLAGS_STAR_EXCL BIT(3) 317 #define MDB_PG_FLAGS_BLOCKED BIT(4) 318 #define MDB_PG_FLAGS_OFFLOAD_FAILED BIT(5) 319 320 #define PG_SRC_ENT_LIMIT 32 321 322 #define BR_SGRP_F_DELETE BIT(0) 323 #define BR_SGRP_F_SEND BIT(1) 324 #define BR_SGRP_F_INSTALLED BIT(2) 325 #define BR_SGRP_F_USER_ADDED BIT(3) 326 327 struct net_bridge_mcast_gc { 328 struct hlist_node gc_node; 329 void (*destroy)(struct net_bridge_mcast_gc *gc); 330 }; 331 332 struct net_bridge_group_src { 333 struct hlist_node node; 334 335 struct br_ip addr; 336 struct net_bridge_port_group *pg; 337 u8 flags; 338 u8 src_query_rexmit_cnt; 339 struct timer_list timer; 340 341 struct net_bridge *br; 342 struct net_bridge_mcast_gc mcast_gc; 343 struct rcu_head rcu; 344 }; 345 346 struct net_bridge_port_group_sg_key { 347 struct net_bridge_port *port; 348 struct br_ip addr; 349 }; 350 351 struct net_bridge_port_group { 352 struct net_bridge_port_group __rcu *next; 353 struct net_bridge_port_group_sg_key key; 354 unsigned char eth_addr[ETH_ALEN] __aligned(2); 355 unsigned char flags; 356 unsigned char filter_mode; 357 unsigned char grp_query_rexmit_cnt; 358 unsigned char rt_protocol; 359 360 struct hlist_head src_list; 361 unsigned int src_ents; 362 struct timer_list timer; 363 struct timer_list rexmit_timer; 364 struct hlist_node mglist; 365 struct rb_root eht_set_tree; 366 struct rb_root eht_host_tree; 367 368 struct rhash_head rhnode; 369 struct net_bridge_mcast_gc mcast_gc; 370 struct rcu_head rcu; 371 }; 372 373 struct net_bridge_mdb_entry { 374 struct rhash_head rhnode; 375 struct net_bridge *br; 376 struct net_bridge_port_group __rcu *ports; 377 struct br_ip addr; 378 bool host_joined; 379 380 struct timer_list timer; 381 struct hlist_node mdb_node; 382 383 struct net_bridge_mcast_gc mcast_gc; 384 struct rcu_head rcu; 385 }; 386 387 struct net_bridge_port { 388 struct net_bridge *br; 389 struct net_device *dev; 390 netdevice_tracker dev_tracker; 391 struct list_head list; 392 393 unsigned long flags; 394 #ifdef CONFIG_BRIDGE_VLAN_FILTERING 395 struct net_bridge_vlan_group __rcu *vlgrp; 396 #endif 397 struct net_bridge_port __rcu *backup_port; 398 u32 backup_nhid; 399 400 /* STP */ 401 u8 priority; 402 u8 state; 403 u16 port_no; 404 unsigned char topology_change_ack; 405 unsigned char config_pending; 406 port_id port_id; 407 port_id designated_port; 408 bridge_id designated_root; 409 bridge_id designated_bridge; 410 u32 path_cost; 411 u32 designated_cost; 412 unsigned long designated_age; 413 414 struct timer_list forward_delay_timer; 415 struct timer_list hold_timer; 416 struct timer_list message_age_timer; 417 struct kobject kobj; 418 struct rcu_head rcu; 419 420 struct net_bridge_mcast_port multicast_ctx; 421 422 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 423 struct bridge_mcast_stats __percpu *mcast_stats; 424 425 u32 multicast_eht_hosts_limit; 426 u32 multicast_eht_hosts_cnt; 427 struct hlist_head mglist; 428 #endif 429 430 #ifdef CONFIG_SYSFS 431 char sysfs_name[IFNAMSIZ]; 432 #endif 433 434 #ifdef CONFIG_NET_POLL_CONTROLLER 435 struct netpoll *np; 436 #endif 437 #ifdef CONFIG_NET_SWITCHDEV 438 /* Identifier used to group ports that share the same switchdev 439 * hardware domain. 440 */ 441 int hwdom; 442 int offload_count; 443 struct netdev_phys_item_id ppid; 444 #endif 445 u16 group_fwd_mask; 446 u16 backup_redirected_cnt; 447 448 struct bridge_stp_xstats stp_xstats; 449 }; 450 451 #define kobj_to_brport(obj) container_of(obj, struct net_bridge_port, kobj) 452 453 #define br_auto_port(p) ((p)->flags & BR_AUTO_MASK) 454 #define br_promisc_port(p) ((p)->flags & BR_PROMISC) 455 456 static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev) 457 { 458 return rcu_dereference(dev->rx_handler_data); 459 } 460 461 static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev) 462 { 463 return netif_is_bridge_port(dev) ? 464 rtnl_dereference(dev->rx_handler_data) : NULL; 465 } 466 467 static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_device *dev) 468 { 469 return netif_is_bridge_port(dev) ? 470 rcu_dereference_rtnl(dev->rx_handler_data) : NULL; 471 } 472 473 enum net_bridge_opts { 474 BROPT_VLAN_ENABLED, 475 BROPT_VLAN_STATS_ENABLED, 476 BROPT_NF_CALL_IPTABLES, 477 BROPT_NF_CALL_IP6TABLES, 478 BROPT_NF_CALL_ARPTABLES, 479 BROPT_GROUP_ADDR_SET, 480 BROPT_MULTICAST_ENABLED, 481 BROPT_MULTICAST_QUERY_USE_IFADDR, 482 BROPT_MULTICAST_STATS_ENABLED, 483 BROPT_HAS_IPV6_ADDR, 484 BROPT_NEIGH_SUPPRESS_ENABLED, 485 BROPT_MTU_SET_BY_USER, 486 BROPT_VLAN_STATS_PER_PORT, 487 BROPT_NO_LL_LEARN, 488 BROPT_VLAN_BRIDGE_BINDING, 489 BROPT_MCAST_VLAN_SNOOPING_ENABLED, 490 BROPT_MST_ENABLED, 491 BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION, 492 BROPT_FDB_LOCAL_VLAN_0, 493 }; 494 495 struct net_bridge { 496 spinlock_t lock; 497 spinlock_t hash_lock; 498 struct hlist_head frame_type_list; 499 struct net_device *dev; 500 unsigned long options; 501 /* These fields are accessed on each packet */ 502 #ifdef CONFIG_BRIDGE_VLAN_FILTERING 503 __be16 vlan_proto; 504 u16 default_pvid; 505 struct net_bridge_vlan_group __rcu *vlgrp; 506 #endif 507 508 struct rhashtable fdb_hash_tbl; 509 struct list_head port_list; 510 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 511 union { 512 struct rtable fake_rtable; 513 struct rt6_info fake_rt6_info; 514 }; 515 u32 metrics[RTAX_MAX]; 516 #endif 517 u16 group_fwd_mask; 518 u16 group_fwd_mask_required; 519 520 /* STP */ 521 bridge_id designated_root; 522 bridge_id bridge_id; 523 unsigned char topology_change; 524 unsigned char topology_change_detected; 525 u16 root_port; 526 u8 stp_mode; 527 bool stp_helper_active; 528 unsigned long max_age; 529 unsigned long hello_time; 530 unsigned long forward_delay; 531 unsigned long ageing_time; 532 unsigned long bridge_max_age; 533 unsigned long bridge_hello_time; 534 unsigned long bridge_forward_delay; 535 unsigned long bridge_ageing_time; 536 u32 root_path_cost; 537 538 u8 group_addr[ETH_ALEN]; 539 540 enum { 541 BR_NO_STP, /* no spanning tree */ 542 BR_KERNEL_STP, /* old STP in kernel */ 543 BR_USER_STP, /* new RSTP in userspace */ 544 } stp_enabled; 545 546 struct net_bridge_mcast multicast_ctx; 547 548 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 549 struct bridge_mcast_stats __percpu *mcast_stats; 550 551 u32 hash_max; 552 553 spinlock_t multicast_lock; 554 555 struct rhashtable mdb_hash_tbl; 556 struct rhashtable sg_port_tbl; 557 558 struct hlist_head mcast_gc_list; 559 struct hlist_head mdb_list; 560 561 struct work_struct mcast_gc_work; 562 #endif 563 564 struct timer_list hello_timer; 565 struct timer_list tcn_timer; 566 struct timer_list topology_change_timer; 567 struct delayed_work gc_work; 568 struct kobject *ifobj; 569 u32 auto_cnt; 570 571 atomic_t fdb_n_learned; 572 u32 fdb_max_learned; 573 574 #ifdef CONFIG_NET_SWITCHDEV 575 /* Counter used to make sure that hardware domains get unique 576 * identifiers in case a bridge spans multiple switchdev instances. 577 */ 578 int last_hwdom; 579 /* Bit mask of hardware domain numbers in use */ 580 unsigned long busy_hwdoms; 581 #endif 582 struct hlist_head fdb_list; 583 584 #if IS_ENABLED(CONFIG_BRIDGE_MRP) 585 struct hlist_head mrp_list; 586 #endif 587 #if IS_ENABLED(CONFIG_BRIDGE_CFM) 588 struct hlist_head mep_list; 589 #endif 590 }; 591 592 struct br_input_skb_cb { 593 struct net_device *brdev; 594 595 u16 frag_max_size; 596 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 597 u8 igmp; 598 u8 mrouters_only:1; 599 #endif 600 u8 proxyarp_replied:1; 601 u8 src_port_isolated:1; 602 u8 promisc:1; 603 #ifdef CONFIG_BRIDGE_VLAN_FILTERING 604 u8 vlan_filtered:1; 605 #endif 606 #ifdef CONFIG_NETFILTER_FAMILY_BRIDGE 607 u8 br_netfilter_broute:1; 608 #endif 609 610 #ifdef CONFIG_NET_SWITCHDEV 611 /* Set if TX data plane offloading is used towards at least one 612 * hardware domain. 613 */ 614 u8 tx_fwd_offload:1; 615 /* The switchdev hardware domain from which this packet was received. 616 * If skb->offload_fwd_mark was set, then this packet was already 617 * forwarded by hardware to the other ports in the source hardware 618 * domain, otherwise it wasn't. 619 */ 620 int src_hwdom; 621 /* Bit mask of hardware domains towards this packet has already been 622 * transmitted using the TX data plane offload. 623 */ 624 unsigned long fwd_hwdoms; 625 #endif 626 627 u32 backup_nhid; 628 }; 629 630 #define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb) 631 632 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 633 # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (BR_INPUT_SKB_CB(__skb)->mrouters_only) 634 #else 635 # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (0) 636 #endif 637 638 #define br_printk(level, br, format, args...) \ 639 printk(level "%s: " format, (br)->dev->name, ##args) 640 641 #define br_err(__br, format, args...) \ 642 br_printk(KERN_ERR, __br, format, ##args) 643 #define br_warn(__br, format, args...) \ 644 br_printk(KERN_WARNING, __br, format, ##args) 645 #define br_notice(__br, format, args...) \ 646 br_printk(KERN_NOTICE, __br, format, ##args) 647 #define br_info(__br, format, args...) \ 648 br_printk(KERN_INFO, __br, format, ##args) 649 650 #define br_debug(br, format, args...) \ 651 pr_debug("%s: " format, (br)->dev->name, ##args) 652 653 /* called under bridge lock */ 654 static inline int br_is_root_bridge(const struct net_bridge *br) 655 { 656 return !memcmp(&br->bridge_id, &br->designated_root, 8); 657 } 658 659 /* check if a VLAN entry is global */ 660 static inline bool br_vlan_is_master(const struct net_bridge_vlan *v) 661 { 662 return v->flags & BRIDGE_VLAN_INFO_MASTER; 663 } 664 665 /* check if a VLAN entry is used by the bridge */ 666 static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v) 667 { 668 return v->flags & BRIDGE_VLAN_INFO_BRENTRY; 669 } 670 671 /* check if we should use the vlan entry, returns false if it's only context */ 672 static inline bool br_vlan_should_use(const struct net_bridge_vlan *v) 673 { 674 if (br_vlan_is_master(v)) { 675 if (br_vlan_is_brentry(v)) 676 return true; 677 else 678 return false; 679 } 680 681 return true; 682 } 683 684 static inline bool nbp_state_should_learn(const struct net_bridge_port *p) 685 { 686 return p->state == BR_STATE_LEARNING || p->state == BR_STATE_FORWARDING; 687 } 688 689 static inline bool br_vlan_valid_id(u16 vid, struct netlink_ext_ack *extack) 690 { 691 bool ret = vid > 0 && vid < VLAN_VID_MASK; 692 693 if (!ret) 694 NL_SET_ERR_MSG_MOD(extack, "Vlan id is invalid"); 695 696 return ret; 697 } 698 699 static inline bool br_vlan_valid_range(const struct bridge_vlan_info *cur, 700 const struct bridge_vlan_info *last, 701 struct netlink_ext_ack *extack) 702 { 703 /* pvid flag is not allowed in ranges */ 704 if (cur->flags & BRIDGE_VLAN_INFO_PVID) { 705 NL_SET_ERR_MSG_MOD(extack, "Pvid isn't allowed in a range"); 706 return false; 707 } 708 709 /* when cur is the range end, check if: 710 * - it has range start flag 711 * - range ids are invalid (end is equal to or before start) 712 */ 713 if (last) { 714 if (cur->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN) { 715 NL_SET_ERR_MSG_MOD(extack, "Found a new vlan range start while processing one"); 716 return false; 717 } else if (!(cur->flags & BRIDGE_VLAN_INFO_RANGE_END)) { 718 NL_SET_ERR_MSG_MOD(extack, "Vlan range end flag is missing"); 719 return false; 720 } else if (cur->vid <= last->vid) { 721 NL_SET_ERR_MSG_MOD(extack, "End vlan id is less than or equal to start vlan id"); 722 return false; 723 } 724 } 725 726 /* check for required range flags */ 727 if (!(cur->flags & (BRIDGE_VLAN_INFO_RANGE_BEGIN | 728 BRIDGE_VLAN_INFO_RANGE_END))) { 729 NL_SET_ERR_MSG_MOD(extack, "Both vlan range flags are missing"); 730 return false; 731 } 732 733 return true; 734 } 735 736 static inline u8 br_vlan_multicast_router(const struct net_bridge_vlan *v) 737 { 738 u8 mcast_router = MDB_RTR_TYPE_DISABLED; 739 740 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 741 if (!br_vlan_is_master(v)) 742 mcast_router = v->port_mcast_ctx.multicast_router; 743 else 744 mcast_router = v->br_mcast_ctx.multicast_router; 745 #endif 746 747 return mcast_router; 748 } 749 750 static inline int br_afspec_cmd_to_rtm(int cmd) 751 { 752 switch (cmd) { 753 case RTM_SETLINK: 754 return RTM_NEWVLAN; 755 case RTM_DELLINK: 756 return RTM_DELVLAN; 757 } 758 759 return 0; 760 } 761 762 static inline int br_opt_get(const struct net_bridge *br, 763 enum net_bridge_opts opt) 764 { 765 return test_bit(opt, &br->options); 766 } 767 768 int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on, 769 struct netlink_ext_ack *extack); 770 int br_boolopt_get(const struct net_bridge *br, enum br_boolopt_id opt); 771 int br_boolopt_multi_toggle(struct net_bridge *br, 772 struct br_boolopt_multi *bm, 773 struct netlink_ext_ack *extack); 774 void br_boolopt_multi_get(const struct net_bridge *br, 775 struct br_boolopt_multi *bm); 776 void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on); 777 778 #if IS_ENABLED(CONFIG_NET_TC_SKB_EXT) 779 static inline void br_tc_skb_miss_set(struct sk_buff *skb, bool miss) 780 { 781 struct tc_skb_ext *ext; 782 783 if (!tc_skb_ext_tc_enabled()) 784 return; 785 786 ext = skb_ext_find(skb, TC_SKB_EXT); 787 if (ext) { 788 ext->l2_miss = miss; 789 return; 790 } 791 if (!miss) 792 return; 793 ext = tc_skb_ext_alloc(skb); 794 if (!ext) 795 return; 796 ext->l2_miss = true; 797 } 798 #else 799 static inline void br_tc_skb_miss_set(struct sk_buff *skb, bool miss) 800 { 801 } 802 #endif 803 804 /* br_device.c */ 805 void br_dev_setup(struct net_device *dev); 806 void br_dev_delete(struct net_device *dev, struct list_head *list); 807 netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev); 808 #ifdef CONFIG_NET_POLL_CONTROLLER 809 static inline void br_netpoll_send_skb(const struct net_bridge_port *p, 810 struct sk_buff *skb) 811 { 812 netpoll_send_skb(p->np, skb); 813 } 814 815 int br_netpoll_enable(struct net_bridge_port *p); 816 void br_netpoll_disable(struct net_bridge_port *p); 817 #else 818 static inline void br_netpoll_send_skb(const struct net_bridge_port *p, 819 struct sk_buff *skb) 820 { 821 } 822 823 static inline int br_netpoll_enable(struct net_bridge_port *p) 824 { 825 return 0; 826 } 827 828 static inline void br_netpoll_disable(struct net_bridge_port *p) 829 { 830 } 831 #endif 832 833 /* br_fdb.c */ 834 #define FDB_FLUSH_IGNORED_NDM_FLAGS (NTF_MASTER | NTF_SELF) 835 #define FDB_FLUSH_ALLOWED_NDM_STATES (NUD_PERMANENT | NUD_NOARP) 836 #define FDB_FLUSH_ALLOWED_NDM_FLAGS (NTF_USE | NTF_EXT_LEARNED | \ 837 NTF_STICKY | NTF_OFFLOADED) 838 839 int br_fdb_init(void); 840 void br_fdb_fini(void); 841 int br_fdb_hash_init(struct net_bridge *br); 842 void br_fdb_hash_fini(struct net_bridge *br); 843 void br_fdb_flush(struct net_bridge *br, 844 const struct net_bridge_fdb_flush_desc *desc); 845 void br_fdb_find_delete_local(struct net_bridge *br, 846 const struct net_bridge_port *p, 847 const unsigned char *addr, u16 vid); 848 void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr); 849 void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr); 850 void br_fdb_cleanup(struct work_struct *work); 851 int br_fdb_toggle_local_vlan_0(struct net_bridge *br, bool on, 852 struct netlink_ext_ack *extack); 853 void br_fdb_delete_by_port(struct net_bridge *br, 854 const struct net_bridge_port *p, u16 vid, int do_all); 855 struct net_bridge_fdb_entry *br_fdb_find_rcu(struct net_bridge *br, 856 const unsigned char *addr, 857 __u16 vid); 858 int br_fdb_test_addr(struct net_device *dev, unsigned char *addr); 859 int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count, 860 unsigned long off); 861 int br_fdb_add_local(struct net_bridge *br, struct net_bridge_port *source, 862 const unsigned char *addr, u16 vid); 863 void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, 864 const unsigned char *addr, u16 vid, unsigned long flags); 865 866 int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], 867 struct net_device *dev, const unsigned char *addr, u16 vid, 868 bool *notified, struct netlink_ext_ack *extack); 869 int br_fdb_delete_bulk(struct nlmsghdr *nlh, struct net_device *dev, 870 struct netlink_ext_ack *extack); 871 int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev, 872 const unsigned char *addr, u16 vid, u16 nlh_flags, 873 bool *notified, struct netlink_ext_ack *extack); 874 int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, 875 struct net_device *dev, struct net_device *fdev, int *idx); 876 int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev, 877 const unsigned char *addr, u16 vid, u32 portid, u32 seq, 878 struct netlink_ext_ack *extack); 879 int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p); 880 void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p); 881 int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p, 882 const unsigned char *addr, u16 vid, 883 bool locked, bool swdev_notify); 884 int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p, 885 const unsigned char *addr, u16 vid, 886 bool swdev_notify); 887 void br_fdb_offloaded_set(struct net_bridge *br, struct net_bridge_port *p, 888 const unsigned char *addr, u16 vid, bool offloaded); 889 890 /* br_forward.c */ 891 enum br_pkt_type { 892 BR_PKT_UNICAST, 893 BR_PKT_MULTICAST, 894 BR_PKT_BROADCAST 895 }; 896 int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb); 897 void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, 898 bool local_rcv, bool local_orig); 899 int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb); 900 void br_flood(struct net_bridge *br, struct sk_buff *skb, 901 enum br_pkt_type pkt_type, bool local_rcv, bool local_orig, 902 u16 vid); 903 904 /* return true if both source port and dest port are isolated */ 905 static inline bool br_skb_isolated(const struct net_bridge_port *to, 906 const struct sk_buff *skb) 907 { 908 return BR_INPUT_SKB_CB(skb)->src_port_isolated && 909 (to->flags & BR_ISOLATED); 910 } 911 912 /* br_if.c */ 913 void br_port_carrier_check(struct net_bridge_port *p, bool *notified); 914 int br_add_bridge(struct net *net, const char *name); 915 int br_del_bridge(struct net *net, const char *name); 916 int br_add_if(struct net_bridge *br, struct net_device *dev, 917 struct netlink_ext_ack *extack); 918 int br_del_if(struct net_bridge *br, struct net_device *dev); 919 void br_mtu_auto_adjust(struct net_bridge *br); 920 netdev_features_t br_features_recompute(struct net_bridge *br, 921 netdev_features_t features); 922 void br_port_flags_change(struct net_bridge_port *port, unsigned long mask); 923 void br_manage_promisc(struct net_bridge *br); 924 int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev); 925 926 /* br_input.c */ 927 int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb); 928 rx_handler_func_t *br_get_rx_handler(const struct net_device *dev); 929 930 struct br_frame_type { 931 __be16 type; 932 int (*frame_handler)(struct net_bridge_port *port, 933 struct sk_buff *skb); 934 struct hlist_node list; 935 }; 936 937 void br_add_frame(struct net_bridge *br, struct br_frame_type *ft); 938 void br_del_frame(struct net_bridge *br, struct br_frame_type *ft); 939 940 static inline bool br_rx_handler_check_rcu(const struct net_device *dev) 941 { 942 return rcu_dereference(dev->rx_handler) == br_get_rx_handler(dev); 943 } 944 945 static inline bool br_rx_handler_check_rtnl(const struct net_device *dev) 946 { 947 return rcu_dereference_rtnl(dev->rx_handler) == br_get_rx_handler(dev); 948 } 949 950 static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev) 951 { 952 return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL; 953 } 954 955 static inline struct net_bridge_port * 956 br_port_get_check_rtnl(const struct net_device *dev) 957 { 958 return br_rx_handler_check_rtnl(dev) ? br_port_get_rtnl_rcu(dev) : NULL; 959 } 960 961 /* br_ioctl.c */ 962 int br_dev_siocdevprivate(struct net_device *dev, struct ifreq *rq, 963 void __user *data, int cmd); 964 int br_ioctl_stub(struct net *net, unsigned int cmd, void __user *uarg); 965 966 /* br_multicast.c */ 967 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING 968 int br_multicast_rcv(struct net_bridge_mcast **brmctx, 969 struct net_bridge_mcast_port **pmctx, 970 struct net_bridge_vlan *vlan, 971 struct sk_buff *skb, u16 vid); 972 struct net_bridge_mdb_entry * 973 br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb, 974 u16 vid); 975 int br_multicast_add_port(struct net_bridge_port *port); 976 void br_multicast_del_port(struct net_bridge_port *port); 977 void br_multicast_enable_port(struct net_bridge_port *port); 978 void br_multicast_disable_port(struct net_bridge_port *port); 979 void br_multicast_init(struct net_bridge *br); 980 void br_multicast_join_snoopers(struct net_bridge *br); 981 void br_multicast_leave_snoopers(struct net_bridge *br); 982 void br_multicast_open(struct net_bridge *br); 983 void br_multicast_stop(struct net_bridge *br); 984 void br_multicast_dev_del(struct net_bridge *br); 985 void br_multicast_flood(struct net_bridge_mdb_entry *mdst, struct sk_buff *skb, 986 struct net_bridge_mcast *brmctx, 987 bool local_rcv, bool local_orig); 988 int br_multicast_set_router(struct net_bridge_mcast *brmctx, unsigned long val); 989 int br_multicast_set_port_router(struct net_bridge_mcast_port *pmctx, 990 unsigned long val); 991 int br_multicast_set_vlan_router(struct net_bridge_vlan *v, u8 mcast_router); 992 int br_multicast_toggle(struct net_bridge *br, unsigned long val, 993 struct netlink_ext_ack *extack); 994 int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val); 995 int br_multicast_set_igmp_version(struct net_bridge_mcast *brmctx, 996 unsigned long val); 997 #if IS_ENABLED(CONFIG_IPV6) 998 int br_multicast_set_mld_version(struct net_bridge_mcast *brmctx, 999 unsigned long val); 1000 #endif 1001 struct net_bridge_mdb_entry * 1002 br_mdb_ip_get(struct net_bridge *br, struct br_ip *dst); 1003 struct net_bridge_mdb_entry * 1004 br_multicast_new_group(struct net_bridge *br, struct br_ip *group); 1005 struct net_bridge_port_group * 1006 br_multicast_new_port_group(struct net_bridge_port *port, 1007 const struct br_ip *group, 1008 struct net_bridge_port_group __rcu *next, 1009 unsigned char flags, const unsigned char *src, 1010 u8 filter_mode, u8 rt_protocol, 1011 struct netlink_ext_ack *extack); 1012 void br_multicast_del_port_group(struct net_bridge_port_group *p); 1013 int br_mdb_hash_init(struct net_bridge *br); 1014 void br_mdb_hash_fini(struct net_bridge *br); 1015 void br_mdb_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp, 1016 struct net_bridge_port_group *pg, int type); 1017 void br_mdb_flag_change_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp, 1018 struct net_bridge_port_group *pg); 1019 void br_rtr_notify(struct net_device *dev, struct net_bridge_mcast_port *pmctx, 1020 int type); 1021 void br_multicast_del_pg(struct net_bridge_mdb_entry *mp, 1022 struct net_bridge_port_group *pg, 1023 struct net_bridge_port_group __rcu **pp); 1024 void br_multicast_count(struct net_bridge *br, 1025 const struct net_bridge_port *p, 1026 const struct sk_buff *skb, u8 type, u8 dir); 1027 int br_multicast_init_stats(struct net_bridge *br); 1028 void br_multicast_uninit_stats(struct net_bridge *br); 1029 void br_multicast_get_stats(const struct net_bridge *br, 1030 const struct net_bridge_port *p, 1031 struct br_mcast_stats *dest); 1032 u32 br_multicast_ngroups_get(const struct net_bridge_mcast_port *pmctx); 1033 void br_multicast_ngroups_set_max(struct net_bridge_mcast_port *pmctx, u32 max); 1034 u32 br_multicast_ngroups_get_max(const struct net_bridge_mcast_port *pmctx); 1035 int br_mdb_add(struct net_device *dev, struct nlattr *tb[], u16 nlmsg_flags, 1036 struct netlink_ext_ack *extack); 1037 int br_mdb_del(struct net_device *dev, struct nlattr *tb[], 1038 struct netlink_ext_ack *extack); 1039 int br_mdb_del_bulk(struct net_device *dev, struct nlattr *tb[], 1040 struct netlink_ext_ack *extack); 1041 int br_mdb_dump(struct net_device *dev, struct sk_buff *skb, 1042 struct netlink_callback *cb); 1043 int br_mdb_get(struct net_device *dev, struct nlattr *tb[], u32 portid, u32 seq, 1044 struct netlink_ext_ack *extack); 1045 void br_multicast_host_join(const struct net_bridge_mcast *brmctx, 1046 struct net_bridge_mdb_entry *mp, bool notify); 1047 void br_multicast_host_leave(struct net_bridge_mdb_entry *mp, bool notify); 1048 void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg, 1049 u8 filter_mode); 1050 void br_multicast_sg_add_exclude_ports(struct net_bridge_mdb_entry *star_mp, 1051 struct net_bridge_port_group *sg); 1052 struct net_bridge_group_src * 1053 br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip); 1054 struct net_bridge_group_src * 1055 br_multicast_new_group_src(struct net_bridge_port_group *pg, 1056 struct br_ip *src_ip); 1057 void __br_multicast_del_group_src(struct net_bridge_group_src *src); 1058 void br_multicast_del_group_src(struct net_bridge_group_src *src, 1059 bool fastleave); 1060 void br_multicast_ctx_init(struct net_bridge *br, 1061 struct net_bridge_vlan *vlan, 1062 struct net_bridge_mcast *brmctx); 1063 void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx); 1064 void br_multicast_port_ctx_init(struct net_bridge_port *port, 1065 struct net_bridge_vlan *vlan, 1066 struct net_bridge_mcast_port *pmctx); 1067 void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx); 1068 void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v, u8 state); 1069 void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan, bool on); 1070 int br_multicast_toggle_vlan_snooping(struct net_bridge *br, bool on, 1071 struct netlink_ext_ack *extack); 1072 bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan, bool on); 1073 1074 int br_rports_fill_info(struct sk_buff *skb, 1075 const struct net_bridge_mcast *brmctx); 1076 int br_multicast_dump_querier_state(struct sk_buff *skb, 1077 const struct net_bridge_mcast *brmctx, 1078 int nest_attr); 1079 size_t br_multicast_querier_state_size(void); 1080 size_t br_rports_size(const struct net_bridge_mcast *brmctx); 1081 void br_multicast_set_query_intvl(struct net_bridge_mcast *brmctx, 1082 unsigned long val); 1083 void br_multicast_set_startup_query_intvl(struct net_bridge_mcast *brmctx, 1084 unsigned long val); 1085 1086 static inline bool br_group_is_l2(const struct br_ip *group) 1087 { 1088 return group->proto == 0; 1089 } 1090 1091 #define mlock_dereference(X, br) \ 1092 rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock)) 1093 1094 static inline struct hlist_node * 1095 br_multicast_get_first_rport_node(struct net_bridge_mcast *brmctx, 1096 struct sk_buff *skb) 1097 { 1098 #if IS_ENABLED(CONFIG_IPV6) 1099 if (skb->protocol == htons(ETH_P_IPV6)) 1100 return rcu_dereference(hlist_first_rcu(&brmctx->ip6_mc_router_list)); 1101 #endif 1102 return rcu_dereference(hlist_first_rcu(&brmctx->ip4_mc_router_list)); 1103 } 1104 1105 static inline struct net_bridge_port * 1106 br_multicast_rport_from_node_skb(struct hlist_node *rp, struct sk_buff *skb) 1107 { 1108 struct net_bridge_mcast_port *mctx; 1109 1110 #if IS_ENABLED(CONFIG_IPV6) 1111 if (skb->protocol == htons(ETH_P_IPV6)) 1112 mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port, 1113 ip6_rlist); 1114 else 1115 #endif 1116 mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port, 1117 ip4_rlist); 1118 1119 if (mctx) 1120 return mctx->port; 1121 else 1122 return NULL; 1123 } 1124 1125 static inline bool br_ip4_multicast_is_router(struct net_bridge_mcast *brmctx) 1126 { 1127 return timer_pending(&brmctx->ip4_mc_router_timer); 1128 } 1129 1130 static inline bool br_ip6_multicast_is_router(struct net_bridge_mcast *brmctx) 1131 { 1132 #if IS_ENABLED(CONFIG_IPV6) 1133 return timer_pending(&brmctx->ip6_mc_router_timer); 1134 #else 1135 return false; 1136 #endif 1137 } 1138 1139 static inline bool 1140 br_multicast_is_router(struct net_bridge_mcast *brmctx, struct sk_buff *skb) 1141 { 1142 switch (brmctx->multicast_router) { 1143 case MDB_RTR_TYPE_PERM: 1144 return true; 1145 case MDB_RTR_TYPE_TEMP_QUERY: 1146 if (skb) { 1147 if (skb->protocol == htons(ETH_P_IP)) 1148 return br_ip4_multicast_is_router(brmctx); 1149 else if (skb->protocol == htons(ETH_P_IPV6)) 1150 return br_ip6_multicast_is_router(brmctx); 1151 } else { 1152 return br_ip4_multicast_is_router(brmctx) || 1153 br_ip6_multicast_is_router(brmctx); 1154 } 1155 fallthrough; 1156 default: 1157 return false; 1158 } 1159 } 1160 1161 static inline bool 1162 __br_multicast_querier_exists(struct net_bridge_mcast *brmctx, 1163 struct bridge_mcast_other_query *querier, 1164 const bool is_ipv6) 1165 { 1166 bool own_querier_enabled; 1167 1168 if (brmctx->multicast_querier) { 1169 if (is_ipv6 && !br_opt_get(brmctx->br, BROPT_HAS_IPV6_ADDR)) 1170 own_querier_enabled = false; 1171 else 1172 own_querier_enabled = true; 1173 } else { 1174 own_querier_enabled = false; 1175 } 1176 1177 return !timer_pending(&querier->delay_timer) && 1178 (own_querier_enabled || timer_pending(&querier->timer)); 1179 } 1180 1181 static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx, 1182 struct ethhdr *eth, 1183 const struct net_bridge_mdb_entry *mdb) 1184 { 1185 switch (eth->h_proto) { 1186 case (htons(ETH_P_IP)): 1187 return __br_multicast_querier_exists(brmctx, 1188 &brmctx->ip4_other_query, false); 1189 #if IS_ENABLED(CONFIG_IPV6) 1190 case (htons(ETH_P_IPV6)): 1191 return __br_multicast_querier_exists(brmctx, 1192 &brmctx->ip6_other_query, true); 1193 #endif 1194 default: 1195 return !!mdb && br_group_is_l2(&mdb->addr); 1196 } 1197 } 1198 1199 static inline bool br_multicast_is_star_g(const struct br_ip *ip) 1200 { 1201 switch (ip->proto) { 1202 case htons(ETH_P_IP): 1203 return ipv4_is_zeronet(ip->src.ip4); 1204 #if IS_ENABLED(CONFIG_IPV6) 1205 case htons(ETH_P_IPV6): 1206 return ipv6_addr_any(&ip->src.ip6); 1207 #endif 1208 default: 1209 return false; 1210 } 1211 } 1212 1213 static inline bool 1214 br_multicast_should_handle_mode(const struct net_bridge_mcast *brmctx, 1215 __be16 proto) 1216 { 1217 switch (proto) { 1218 case htons(ETH_P_IP): 1219 return !!(brmctx->multicast_igmp_version == 3); 1220 #if IS_ENABLED(CONFIG_IPV6) 1221 case htons(ETH_P_IPV6): 1222 return !!(brmctx->multicast_mld_version == 2); 1223 #endif 1224 default: 1225 return false; 1226 } 1227 } 1228 1229 static inline int br_multicast_igmp_type(const struct sk_buff *skb) 1230 { 1231 return BR_INPUT_SKB_CB(skb)->igmp; 1232 } 1233 1234 static inline unsigned long br_multicast_lmqt(const struct net_bridge_mcast *brmctx) 1235 { 1236 return brmctx->multicast_last_member_interval * 1237 brmctx->multicast_last_member_count; 1238 } 1239 1240 static inline unsigned long br_multicast_gmi(const struct net_bridge_mcast *brmctx) 1241 { 1242 return brmctx->multicast_membership_interval; 1243 } 1244 1245 static inline bool 1246 br_multicast_ctx_is_vlan(const struct net_bridge_mcast *brmctx) 1247 { 1248 return !!brmctx->vlan; 1249 } 1250 1251 static inline bool 1252 br_multicast_port_ctx_is_vlan(const struct net_bridge_mcast_port *pmctx) 1253 { 1254 return !!pmctx->vlan; 1255 } 1256 1257 static inline struct net_bridge_mcast * 1258 br_multicast_port_ctx_get_global(const struct net_bridge_mcast_port *pmctx) 1259 { 1260 if (!br_multicast_port_ctx_is_vlan(pmctx)) 1261 return &pmctx->port->br->multicast_ctx; 1262 else 1263 return &pmctx->vlan->brvlan->br_mcast_ctx; 1264 } 1265 1266 static inline bool 1267 br_multicast_ctx_vlan_global_disabled(const struct net_bridge_mcast *brmctx) 1268 { 1269 return br_multicast_ctx_is_vlan(brmctx) && 1270 (!br_opt_get(brmctx->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) || 1271 !(brmctx->vlan->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED)); 1272 } 1273 1274 static inline bool 1275 br_multicast_ctx_vlan_disabled(const struct net_bridge_mcast *brmctx) 1276 { 1277 return br_multicast_ctx_is_vlan(brmctx) && 1278 !(brmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED); 1279 } 1280 1281 static inline bool 1282 br_multicast_port_ctx_vlan_disabled(const struct net_bridge_mcast_port *pmctx) 1283 { 1284 return br_multicast_port_ctx_is_vlan(pmctx) && 1285 !(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED); 1286 } 1287 1288 static inline bool 1289 br_multicast_port_ctx_state_disabled(const struct net_bridge_mcast_port *pmctx) 1290 { 1291 return pmctx->port->state == BR_STATE_DISABLED || 1292 (br_multicast_port_ctx_is_vlan(pmctx) && 1293 (br_multicast_port_ctx_vlan_disabled(pmctx) || 1294 pmctx->vlan->state == BR_STATE_DISABLED)); 1295 } 1296 1297 static inline bool 1298 br_multicast_port_ctx_state_stopped(const struct net_bridge_mcast_port *pmctx) 1299 { 1300 return br_multicast_port_ctx_state_disabled(pmctx) || 1301 pmctx->port->state == BR_STATE_BLOCKING || 1302 (br_multicast_port_ctx_is_vlan(pmctx) && 1303 pmctx->vlan->state == BR_STATE_BLOCKING); 1304 } 1305 1306 static inline bool 1307 br_rports_have_mc_router(const struct net_bridge_mcast *brmctx) 1308 { 1309 #if IS_ENABLED(CONFIG_IPV6) 1310 return !hlist_empty(&brmctx->ip4_mc_router_list) || 1311 !hlist_empty(&brmctx->ip6_mc_router_list); 1312 #else 1313 return !hlist_empty(&brmctx->ip4_mc_router_list); 1314 #endif 1315 } 1316 1317 static inline bool 1318 br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1, 1319 const struct net_bridge_mcast *brmctx2) 1320 { 1321 return brmctx1->multicast_igmp_version == 1322 brmctx2->multicast_igmp_version && 1323 brmctx1->multicast_last_member_count == 1324 brmctx2->multicast_last_member_count && 1325 brmctx1->multicast_startup_query_count == 1326 brmctx2->multicast_startup_query_count && 1327 brmctx1->multicast_last_member_interval == 1328 brmctx2->multicast_last_member_interval && 1329 brmctx1->multicast_membership_interval == 1330 brmctx2->multicast_membership_interval && 1331 brmctx1->multicast_querier_interval == 1332 brmctx2->multicast_querier_interval && 1333 brmctx1->multicast_query_interval == 1334 brmctx2->multicast_query_interval && 1335 brmctx1->multicast_query_response_interval == 1336 brmctx2->multicast_query_response_interval && 1337 brmctx1->multicast_startup_query_interval == 1338 brmctx2->multicast_startup_query_interval && 1339 brmctx1->multicast_querier == brmctx2->multicast_querier && 1340 brmctx1->multicast_router == brmctx2->multicast_router && 1341 !br_rports_have_mc_router(brmctx1) && 1342 !br_rports_have_mc_router(brmctx2) && 1343 #if IS_ENABLED(CONFIG_IPV6) 1344 brmctx1->multicast_mld_version == 1345 brmctx2->multicast_mld_version && 1346 #endif 1347 true; 1348 } 1349 1350 static inline bool 1351 br_multicast_port_ctx_options_equal(const struct net_bridge_mcast_port *pmctx1, 1352 const struct net_bridge_mcast_port *pmctx2) 1353 { 1354 return br_multicast_ngroups_get(pmctx1) == 1355 br_multicast_ngroups_get(pmctx2) && 1356 br_multicast_ngroups_get_max(pmctx1) == 1357 br_multicast_ngroups_get_max(pmctx2); 1358 } 1359 1360 static inline bool 1361 br_multicast_ctx_matches_vlan_snooping(const struct net_bridge_mcast *brmctx) 1362 { 1363 bool vlan_snooping_enabled; 1364 1365 vlan_snooping_enabled = !!br_opt_get(brmctx->br, 1366 BROPT_MCAST_VLAN_SNOOPING_ENABLED); 1367 1368 return !!(vlan_snooping_enabled == br_multicast_ctx_is_vlan(brmctx)); 1369 } 1370 1371 static inline void 1372 br_multicast_set_pg_offload_flags(struct net_bridge_port_group *p, 1373 bool offloaded) 1374 { 1375 p->flags &= ~(MDB_PG_FLAGS_OFFLOAD | MDB_PG_FLAGS_OFFLOAD_FAILED); 1376 p->flags |= (offloaded ? MDB_PG_FLAGS_OFFLOAD : 1377 MDB_PG_FLAGS_OFFLOAD_FAILED); 1378 } 1379 1380 static inline bool 1381 br_mdb_should_notify(const struct net_bridge *br, u8 changed_flags) 1382 { 1383 return br_opt_get(br, BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION) && 1384 (changed_flags & MDB_PG_FLAGS_OFFLOAD_FAILED); 1385 } 1386 #else 1387 static inline int br_multicast_rcv(struct net_bridge_mcast **brmctx, 1388 struct net_bridge_mcast_port **pmctx, 1389 struct net_bridge_vlan *vlan, 1390 struct sk_buff *skb, 1391 u16 vid) 1392 { 1393 return 0; 1394 } 1395 1396 static inline struct net_bridge_mdb_entry * 1397 br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb, 1398 u16 vid) 1399 { 1400 return NULL; 1401 } 1402 1403 static inline int br_multicast_add_port(struct net_bridge_port *port) 1404 { 1405 return 0; 1406 } 1407 1408 static inline void br_multicast_del_port(struct net_bridge_port *port) 1409 { 1410 } 1411 1412 static inline void br_multicast_enable_port(struct net_bridge_port *port) 1413 { 1414 } 1415 1416 static inline void br_multicast_disable_port(struct net_bridge_port *port) 1417 { 1418 } 1419 1420 static inline void br_multicast_init(struct net_bridge *br) 1421 { 1422 } 1423 1424 static inline void br_multicast_join_snoopers(struct net_bridge *br) 1425 { 1426 } 1427 1428 static inline void br_multicast_leave_snoopers(struct net_bridge *br) 1429 { 1430 } 1431 1432 static inline void br_multicast_open(struct net_bridge *br) 1433 { 1434 } 1435 1436 static inline void br_multicast_stop(struct net_bridge *br) 1437 { 1438 } 1439 1440 static inline void br_multicast_dev_del(struct net_bridge *br) 1441 { 1442 } 1443 1444 static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst, 1445 struct sk_buff *skb, 1446 struct net_bridge_mcast *brmctx, 1447 bool local_rcv, bool local_orig) 1448 { 1449 } 1450 1451 static inline bool br_multicast_is_router(struct net_bridge_mcast *brmctx, 1452 struct sk_buff *skb) 1453 { 1454 return false; 1455 } 1456 1457 static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx, 1458 struct ethhdr *eth, 1459 const struct net_bridge_mdb_entry *mdb) 1460 { 1461 return false; 1462 } 1463 1464 static inline int br_mdb_add(struct net_device *dev, struct nlattr *tb[], 1465 u16 nlmsg_flags, struct netlink_ext_ack *extack) 1466 { 1467 return -EOPNOTSUPP; 1468 } 1469 1470 static inline int br_mdb_del(struct net_device *dev, struct nlattr *tb[], 1471 struct netlink_ext_ack *extack) 1472 { 1473 return -EOPNOTSUPP; 1474 } 1475 1476 static inline int br_mdb_del_bulk(struct net_device *dev, struct nlattr *tb[], 1477 struct netlink_ext_ack *extack) 1478 { 1479 return -EOPNOTSUPP; 1480 } 1481 1482 static inline int br_mdb_dump(struct net_device *dev, struct sk_buff *skb, 1483 struct netlink_callback *cb) 1484 { 1485 return 0; 1486 } 1487 1488 static inline int br_mdb_get(struct net_device *dev, struct nlattr *tb[], 1489 u32 portid, u32 seq, 1490 struct netlink_ext_ack *extack) 1491 { 1492 return -EOPNOTSUPP; 1493 } 1494 1495 static inline int br_mdb_hash_init(struct net_bridge *br) 1496 { 1497 return 0; 1498 } 1499 1500 static inline void br_mdb_hash_fini(struct net_bridge *br) 1501 { 1502 } 1503 1504 static inline void br_multicast_count(struct net_bridge *br, 1505 const struct net_bridge_port *p, 1506 const struct sk_buff *skb, 1507 u8 type, u8 dir) 1508 { 1509 } 1510 1511 static inline int br_multicast_init_stats(struct net_bridge *br) 1512 { 1513 return 0; 1514 } 1515 1516 static inline void br_multicast_uninit_stats(struct net_bridge *br) 1517 { 1518 } 1519 1520 static inline int br_multicast_igmp_type(const struct sk_buff *skb) 1521 { 1522 return 0; 1523 } 1524 1525 static inline void br_multicast_ctx_init(struct net_bridge *br, 1526 struct net_bridge_vlan *vlan, 1527 struct net_bridge_mcast *brmctx) 1528 { 1529 } 1530 1531 static inline void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx) 1532 { 1533 } 1534 1535 static inline void br_multicast_port_ctx_init(struct net_bridge_port *port, 1536 struct net_bridge_vlan *vlan, 1537 struct net_bridge_mcast_port *pmctx) 1538 { 1539 } 1540 1541 static inline void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx) 1542 { 1543 } 1544 1545 static inline void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v, 1546 u8 state) 1547 { 1548 } 1549 1550 static inline void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan, 1551 bool on) 1552 { 1553 } 1554 1555 static inline int br_multicast_toggle_vlan_snooping(struct net_bridge *br, 1556 bool on, 1557 struct netlink_ext_ack *extack) 1558 { 1559 return -EOPNOTSUPP; 1560 } 1561 1562 static inline bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan, 1563 bool on) 1564 { 1565 return false; 1566 } 1567 1568 static inline bool 1569 br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1, 1570 const struct net_bridge_mcast *brmctx2) 1571 { 1572 return true; 1573 } 1574 #endif 1575 1576 /* br_vlan.c */ 1577 #ifdef CONFIG_BRIDGE_VLAN_FILTERING 1578 bool br_allowed_ingress(const struct net_bridge *br, 1579 struct net_bridge_vlan_group *vg, struct sk_buff *skb, 1580 u16 *vid, u8 *state, 1581 struct net_bridge_vlan **vlan); 1582 bool br_allowed_egress(struct net_bridge_vlan_group *vg, 1583 const struct sk_buff *skb); 1584 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid); 1585 struct sk_buff *br_handle_vlan(struct net_bridge *br, 1586 const struct net_bridge_port *port, 1587 struct net_bridge_vlan_group *vg, 1588 struct sk_buff *skb); 1589 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, 1590 bool *changed, struct netlink_ext_ack *extack); 1591 int br_vlan_delete(struct net_bridge *br, u16 vid); 1592 void br_vlan_flush(struct net_bridge *br); 1593 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid); 1594 void br_recalculate_fwd_mask(struct net_bridge *br); 1595 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val, 1596 struct netlink_ext_ack *extack); 1597 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto, 1598 struct netlink_ext_ack *extack); 1599 int br_vlan_set_proto(struct net_bridge *br, unsigned long val, 1600 struct netlink_ext_ack *extack); 1601 int br_vlan_set_stats(struct net_bridge *br, unsigned long val); 1602 int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val); 1603 int br_vlan_init(struct net_bridge *br); 1604 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val, 1605 struct netlink_ext_ack *extack); 1606 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid, 1607 struct netlink_ext_ack *extack); 1608 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags, 1609 bool *changed, struct netlink_ext_ack *extack); 1610 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid); 1611 void nbp_vlan_flush(struct net_bridge_port *port); 1612 int nbp_vlan_init(struct net_bridge_port *port, struct netlink_ext_ack *extack); 1613 int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask); 1614 void br_vlan_get_stats(const struct net_bridge_vlan *v, 1615 struct pcpu_sw_netstats *stats); 1616 void br_vlan_port_event(struct net_bridge_port *p, unsigned long event); 1617 int br_vlan_bridge_event(struct net_device *dev, unsigned long event, 1618 void *ptr); 1619 void br_vlan_vlan_upper_event(struct net_device *br_dev, 1620 struct net_device *vlan_dev, 1621 unsigned long event); 1622 int br_vlan_rtnl_init(void); 1623 void br_vlan_rtnl_uninit(void); 1624 void br_vlan_notify(const struct net_bridge *br, 1625 const struct net_bridge_port *p, 1626 u16 vid, u16 vid_range, 1627 int cmd); 1628 bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr, 1629 const struct net_bridge_vlan *range_end); 1630 1631 void br_vlan_fill_forward_path_pvid(struct net_bridge *br, 1632 struct net_device_path_ctx *ctx, 1633 struct net_device_path *path); 1634 int br_vlan_fill_forward_path_mode(struct net_bridge *br, 1635 struct net_bridge_port *dst, 1636 struct net_device_path *path); 1637 1638 static inline struct net_bridge_vlan_group *br_vlan_group( 1639 const struct net_bridge *br) 1640 { 1641 return rtnl_dereference(br->vlgrp); 1642 } 1643 1644 static inline struct net_bridge_vlan_group *nbp_vlan_group( 1645 const struct net_bridge_port *p) 1646 { 1647 return rtnl_dereference(p->vlgrp); 1648 } 1649 1650 static inline struct net_bridge_vlan_group *br_vlan_group_rcu( 1651 const struct net_bridge *br) 1652 { 1653 return rcu_dereference(br->vlgrp); 1654 } 1655 1656 static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu( 1657 const struct net_bridge_port *p) 1658 { 1659 return rcu_dereference(p->vlgrp); 1660 } 1661 1662 /* Since bridge now depends on 8021Q module, but the time bridge sees the 1663 * skb, the vlan tag will always be present if the frame was tagged. 1664 */ 1665 static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid) 1666 { 1667 int err = 0; 1668 1669 if (skb_vlan_tag_present(skb)) { 1670 *vid = skb_vlan_tag_get_id(skb); 1671 } else { 1672 *vid = 0; 1673 err = -EINVAL; 1674 } 1675 1676 return err; 1677 } 1678 1679 static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg) 1680 { 1681 if (!vg) 1682 return 0; 1683 1684 smp_rmb(); 1685 return vg->pvid; 1686 } 1687 1688 static inline u16 br_vlan_flags(const struct net_bridge_vlan *v, u16 pvid) 1689 { 1690 return v->vid == pvid ? v->flags | BRIDGE_VLAN_INFO_PVID : v->flags; 1691 } 1692 #else 1693 static inline bool br_allowed_ingress(const struct net_bridge *br, 1694 struct net_bridge_vlan_group *vg, 1695 struct sk_buff *skb, 1696 u16 *vid, u8 *state, 1697 struct net_bridge_vlan **vlan) 1698 1699 { 1700 *vlan = NULL; 1701 return true; 1702 } 1703 1704 static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg, 1705 const struct sk_buff *skb) 1706 { 1707 return true; 1708 } 1709 1710 static inline bool br_should_learn(struct net_bridge_port *p, 1711 struct sk_buff *skb, u16 *vid) 1712 { 1713 return true; 1714 } 1715 1716 static inline struct sk_buff *br_handle_vlan(struct net_bridge *br, 1717 const struct net_bridge_port *port, 1718 struct net_bridge_vlan_group *vg, 1719 struct sk_buff *skb) 1720 { 1721 return skb; 1722 } 1723 1724 static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, 1725 bool *changed, struct netlink_ext_ack *extack) 1726 { 1727 *changed = false; 1728 return -EOPNOTSUPP; 1729 } 1730 1731 static inline int br_vlan_delete(struct net_bridge *br, u16 vid) 1732 { 1733 return -EOPNOTSUPP; 1734 } 1735 1736 static inline void br_vlan_flush(struct net_bridge *br) 1737 { 1738 } 1739 1740 static inline void br_recalculate_fwd_mask(struct net_bridge *br) 1741 { 1742 } 1743 1744 static inline int br_vlan_init(struct net_bridge *br) 1745 { 1746 return 0; 1747 } 1748 1749 static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags, 1750 bool *changed, struct netlink_ext_ack *extack) 1751 { 1752 *changed = false; 1753 return -EOPNOTSUPP; 1754 } 1755 1756 static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid) 1757 { 1758 return -EOPNOTSUPP; 1759 } 1760 1761 static inline void nbp_vlan_flush(struct net_bridge_port *port) 1762 { 1763 } 1764 1765 static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, 1766 u16 vid) 1767 { 1768 return NULL; 1769 } 1770 1771 static inline int nbp_vlan_init(struct net_bridge_port *port, 1772 struct netlink_ext_ack *extack) 1773 { 1774 return 0; 1775 } 1776 1777 static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag) 1778 { 1779 return 0; 1780 } 1781 1782 static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg) 1783 { 1784 return 0; 1785 } 1786 1787 static inline int br_vlan_filter_toggle(struct net_bridge *br, 1788 unsigned long val, 1789 struct netlink_ext_ack *extack) 1790 { 1791 return -EOPNOTSUPP; 1792 } 1793 1794 static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p, 1795 u32 filter_mask) 1796 { 1797 return 0; 1798 } 1799 1800 static inline void br_vlan_fill_forward_path_pvid(struct net_bridge *br, 1801 struct net_device_path_ctx *ctx, 1802 struct net_device_path *path) 1803 { 1804 } 1805 1806 static inline int br_vlan_fill_forward_path_mode(struct net_bridge *br, 1807 struct net_bridge_port *dst, 1808 struct net_device_path *path) 1809 { 1810 return 0; 1811 } 1812 1813 static inline struct net_bridge_vlan_group *br_vlan_group( 1814 const struct net_bridge *br) 1815 { 1816 return NULL; 1817 } 1818 1819 static inline struct net_bridge_vlan_group *nbp_vlan_group( 1820 const struct net_bridge_port *p) 1821 { 1822 return NULL; 1823 } 1824 1825 static inline struct net_bridge_vlan_group *br_vlan_group_rcu( 1826 const struct net_bridge *br) 1827 { 1828 return NULL; 1829 } 1830 1831 static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu( 1832 const struct net_bridge_port *p) 1833 { 1834 return NULL; 1835 } 1836 1837 static inline void br_vlan_get_stats(const struct net_bridge_vlan *v, 1838 struct pcpu_sw_netstats *stats) 1839 { 1840 } 1841 1842 static inline void br_vlan_port_event(struct net_bridge_port *p, 1843 unsigned long event) 1844 { 1845 } 1846 1847 static inline int br_vlan_bridge_event(struct net_device *dev, 1848 unsigned long event, void *ptr) 1849 { 1850 return 0; 1851 } 1852 1853 static inline void br_vlan_vlan_upper_event(struct net_device *br_dev, 1854 struct net_device *vlan_dev, 1855 unsigned long event) 1856 { 1857 } 1858 1859 static inline int br_vlan_rtnl_init(void) 1860 { 1861 return 0; 1862 } 1863 1864 static inline void br_vlan_rtnl_uninit(void) 1865 { 1866 } 1867 1868 static inline void br_vlan_notify(const struct net_bridge *br, 1869 const struct net_bridge_port *p, 1870 u16 vid, u16 vid_range, 1871 int cmd) 1872 { 1873 } 1874 1875 static inline bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr, 1876 const struct net_bridge_vlan *range_end) 1877 { 1878 return true; 1879 } 1880 1881 static inline u16 br_vlan_flags(const struct net_bridge_vlan *v, u16 pvid) 1882 { 1883 return 0; 1884 } 1885 1886 #endif 1887 1888 /* br_vlan_options.c */ 1889 #ifdef CONFIG_BRIDGE_VLAN_FILTERING 1890 bool br_vlan_opts_eq_range(const struct net_bridge_vlan *v_curr, 1891 const struct net_bridge_vlan *range_end); 1892 bool br_vlan_opts_fill(struct sk_buff *skb, const struct net_bridge_vlan *v, 1893 const struct net_bridge_port *p); 1894 size_t br_vlan_opts_nl_size(void); 1895 int br_vlan_process_options(const struct net_bridge *br, 1896 const struct net_bridge_port *p, 1897 struct net_bridge_vlan *range_start, 1898 struct net_bridge_vlan *range_end, 1899 struct nlattr **tb, 1900 struct netlink_ext_ack *extack); 1901 int br_vlan_rtm_process_global_options(struct net_device *dev, 1902 const struct nlattr *attr, 1903 int cmd, 1904 struct netlink_ext_ack *extack); 1905 bool br_vlan_global_opts_can_enter_range(const struct net_bridge_vlan *v_curr, 1906 const struct net_bridge_vlan *r_end); 1907 bool br_vlan_global_opts_fill(struct sk_buff *skb, u16 vid, u16 vid_range, 1908 const struct net_bridge_vlan *v_opts); 1909 1910 /* vlan state manipulation helpers using *_ONCE to annotate lock-free access, 1911 * while br_vlan_set_state() may access data protected by multicast_lock. 1912 */ 1913 static inline u8 br_vlan_get_state(const struct net_bridge_vlan *v) 1914 { 1915 return READ_ONCE(v->state); 1916 } 1917 1918 static inline void br_vlan_set_state(struct net_bridge_vlan *v, u8 state) 1919 { 1920 WRITE_ONCE(v->state, state); 1921 br_multicast_update_vlan_mcast_ctx(v, state); 1922 } 1923 1924 static inline u8 br_vlan_get_pvid_state(const struct net_bridge_vlan_group *vg) 1925 { 1926 return READ_ONCE(vg->pvid_state); 1927 } 1928 1929 static inline void br_vlan_set_pvid_state(struct net_bridge_vlan_group *vg, 1930 u8 state) 1931 { 1932 WRITE_ONCE(vg->pvid_state, state); 1933 } 1934 1935 /* learn_allow is true at ingress and false at egress */ 1936 static inline bool br_vlan_state_allowed(u8 state, bool learn_allow) 1937 { 1938 switch (state) { 1939 case BR_STATE_LEARNING: 1940 return learn_allow; 1941 case BR_STATE_FORWARDING: 1942 return true; 1943 default: 1944 return false; 1945 } 1946 } 1947 #endif 1948 1949 /* br_mst.c */ 1950 #ifdef CONFIG_BRIDGE_VLAN_FILTERING 1951 DECLARE_STATIC_KEY_FALSE(br_mst_used); 1952 static inline bool br_mst_is_enabled(const struct net_bridge_port *p) 1953 { 1954 /* check the port's vlan group to avoid racing with port deletion */ 1955 return static_branch_unlikely(&br_mst_used) && 1956 br_opt_get(p->br, BROPT_MST_ENABLED) && 1957 rcu_access_pointer(p->vlgrp); 1958 } 1959 1960 int br_mst_set_state(struct net_bridge_port *p, u16 msti, u8 state, 1961 struct netlink_ext_ack *extack); 1962 int br_mst_vlan_set_msti(struct net_bridge_vlan *v, u16 msti); 1963 void br_mst_vlan_init_state(struct net_bridge_vlan *v); 1964 int br_mst_set_enabled(struct net_bridge *br, bool on, 1965 struct netlink_ext_ack *extack); 1966 size_t br_mst_info_size(const struct net_bridge_vlan_group *vg); 1967 int br_mst_fill_info(struct sk_buff *skb, 1968 const struct net_bridge_vlan_group *vg); 1969 int br_mst_process(struct net_bridge_port *p, const struct nlattr *mst_attr, 1970 struct netlink_ext_ack *extack); 1971 void br_mst_uninit(struct net_bridge *br); 1972 #else 1973 static inline bool br_mst_is_enabled(const struct net_bridge_port *p) 1974 { 1975 return false; 1976 } 1977 1978 static inline int br_mst_set_state(struct net_bridge_port *p, u16 msti, 1979 u8 state, struct netlink_ext_ack *extack) 1980 { 1981 return -EOPNOTSUPP; 1982 } 1983 1984 static inline int br_mst_set_enabled(struct net_bridge *br, bool on, 1985 struct netlink_ext_ack *extack) 1986 { 1987 return -EOPNOTSUPP; 1988 } 1989 1990 static inline size_t br_mst_info_size(const struct net_bridge_vlan_group *vg) 1991 { 1992 return 0; 1993 } 1994 1995 static inline int br_mst_fill_info(struct sk_buff *skb, 1996 const struct net_bridge_vlan_group *vg) 1997 { 1998 return -EOPNOTSUPP; 1999 } 2000 2001 static inline int br_mst_process(struct net_bridge_port *p, 2002 const struct nlattr *mst_attr, 2003 struct netlink_ext_ack *extack) 2004 { 2005 return -EOPNOTSUPP; 2006 } 2007 2008 static inline void br_mst_uninit(struct net_bridge *br) 2009 { 2010 } 2011 #endif 2012 2013 struct nf_br_ops { 2014 int (*br_dev_xmit_hook)(struct sk_buff *skb); 2015 }; 2016 extern const struct nf_br_ops __rcu *nf_br_ops; 2017 2018 /* br_netfilter.c */ 2019 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 2020 int br_nf_core_init(void); 2021 void br_nf_core_fini(void); 2022 void br_netfilter_rtable_init(struct net_bridge *); 2023 #else 2024 static inline int br_nf_core_init(void) { return 0; } 2025 static inline void br_nf_core_fini(void) {} 2026 #define br_netfilter_rtable_init(x) 2027 #endif 2028 2029 /* br_stp.c */ 2030 void br_set_state(struct net_bridge_port *p, unsigned int state); 2031 struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no); 2032 void br_init_port(struct net_bridge_port *p); 2033 void br_become_designated_port(struct net_bridge_port *p); 2034 2035 void __br_set_forward_delay(struct net_bridge *br, unsigned long t); 2036 int br_set_forward_delay(struct net_bridge *br, unsigned long x); 2037 int br_set_hello_time(struct net_bridge *br, unsigned long x); 2038 int br_set_max_age(struct net_bridge *br, unsigned long x); 2039 int __set_ageing_time(struct net_device *dev, unsigned long t); 2040 int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time); 2041 2042 2043 /* br_stp_if.c */ 2044 void br_stp_enable_bridge(struct net_bridge *br); 2045 void br_stp_disable_bridge(struct net_bridge *br); 2046 int br_stp_set_enabled(struct net_bridge *br, unsigned long val, 2047 struct netlink_ext_ack *extack); 2048 void br_stp_enable_port(struct net_bridge_port *p); 2049 void br_stp_disable_port(struct net_bridge_port *p); 2050 bool br_stp_recalculate_bridge_id(struct net_bridge *br); 2051 void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); 2052 void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio); 2053 int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio); 2054 int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost); 2055 ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id); 2056 2057 /* br_stp_bpdu.c */ 2058 struct stp_proto; 2059 void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb, 2060 struct net_device *dev); 2061 2062 /* br_stp_timer.c */ 2063 void br_stp_timer_init(struct net_bridge *br); 2064 void br_stp_port_timer_init(struct net_bridge_port *p); 2065 unsigned long br_timer_value(const struct timer_list *timer); 2066 2067 /* br.c */ 2068 #if IS_ENABLED(CONFIG_ATM_LANE) 2069 extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr); 2070 #endif 2071 2072 /* br_mrp.c */ 2073 #if IS_ENABLED(CONFIG_BRIDGE_MRP) 2074 int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p, 2075 struct nlattr *attr, int cmd, struct netlink_ext_ack *extack); 2076 bool br_mrp_enabled(struct net_bridge *br); 2077 void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p); 2078 int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br); 2079 #else 2080 static inline int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p, 2081 struct nlattr *attr, int cmd, 2082 struct netlink_ext_ack *extack) 2083 { 2084 return -EOPNOTSUPP; 2085 } 2086 2087 static inline bool br_mrp_enabled(struct net_bridge *br) 2088 { 2089 return false; 2090 } 2091 2092 static inline void br_mrp_port_del(struct net_bridge *br, 2093 struct net_bridge_port *p) 2094 { 2095 } 2096 2097 static inline int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br) 2098 { 2099 return 0; 2100 } 2101 2102 #endif 2103 2104 /* br_cfm.c */ 2105 #if IS_ENABLED(CONFIG_BRIDGE_CFM) 2106 int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p, 2107 struct nlattr *attr, int cmd, struct netlink_ext_ack *extack); 2108 bool br_cfm_created(struct net_bridge *br); 2109 void br_cfm_port_del(struct net_bridge *br, struct net_bridge_port *p); 2110 int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br); 2111 int br_cfm_status_fill_info(struct sk_buff *skb, 2112 struct net_bridge *br, 2113 bool getlink); 2114 int br_cfm_mep_count(struct net_bridge *br, u32 *count); 2115 int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count); 2116 #else 2117 static inline int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p, 2118 struct nlattr *attr, int cmd, 2119 struct netlink_ext_ack *extack) 2120 { 2121 return -EOPNOTSUPP; 2122 } 2123 2124 static inline bool br_cfm_created(struct net_bridge *br) 2125 { 2126 return false; 2127 } 2128 2129 static inline void br_cfm_port_del(struct net_bridge *br, 2130 struct net_bridge_port *p) 2131 { 2132 } 2133 2134 static inline int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br) 2135 { 2136 return -EOPNOTSUPP; 2137 } 2138 2139 static inline int br_cfm_status_fill_info(struct sk_buff *skb, 2140 struct net_bridge *br, 2141 bool getlink) 2142 { 2143 return -EOPNOTSUPP; 2144 } 2145 2146 static inline int br_cfm_mep_count(struct net_bridge *br, u32 *count) 2147 { 2148 *count = 0; 2149 return -EOPNOTSUPP; 2150 } 2151 2152 static inline int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count) 2153 { 2154 *count = 0; 2155 return -EOPNOTSUPP; 2156 } 2157 #endif 2158 2159 /* br_netlink.c */ 2160 extern struct rtnl_link_ops br_link_ops; 2161 int br_netlink_init(void); 2162 void br_netlink_fini(void); 2163 void br_ifinfo_notify(int event, const struct net_bridge *br, 2164 const struct net_bridge_port *port); 2165 void br_info_notify(int event, const struct net_bridge *br, 2166 const struct net_bridge_port *port, u32 filter); 2167 int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags, 2168 struct netlink_ext_ack *extack); 2169 int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags); 2170 int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev, 2171 u32 filter_mask, int nlflags); 2172 int br_process_vlan_info(struct net_bridge *br, 2173 struct net_bridge_port *p, int cmd, 2174 struct bridge_vlan_info *vinfo_curr, 2175 struct bridge_vlan_info **vinfo_last, 2176 bool *changed, 2177 struct netlink_ext_ack *extack); 2178 2179 #ifdef CONFIG_SYSFS 2180 /* br_sysfs_if.c */ 2181 extern const struct sysfs_ops brport_sysfs_ops; 2182 int br_sysfs_addif(struct net_bridge_port *p); 2183 int br_sysfs_renameif(struct net_bridge_port *p); 2184 2185 /* br_sysfs_br.c */ 2186 int br_sysfs_addbr(struct net_device *dev); 2187 void br_sysfs_delbr(struct net_device *dev); 2188 2189 #else 2190 2191 static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; } 2192 static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; } 2193 static inline int br_sysfs_addbr(struct net_device *dev) { return 0; } 2194 static inline void br_sysfs_delbr(struct net_device *dev) { return; } 2195 #endif /* CONFIG_SYSFS */ 2196 2197 /* br_switchdev.c */ 2198 #ifdef CONFIG_NET_SWITCHDEV 2199 int br_switchdev_port_offload(struct net_bridge_port *p, 2200 struct net_device *dev, const void *ctx, 2201 struct notifier_block *atomic_nb, 2202 struct notifier_block *blocking_nb, 2203 bool tx_fwd_offload, 2204 struct netlink_ext_ack *extack); 2205 2206 void br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx, 2207 struct notifier_block *atomic_nb, 2208 struct notifier_block *blocking_nb); 2209 2210 int br_switchdev_port_replay(struct net_bridge_port *p, 2211 struct net_device *dev, const void *ctx, 2212 struct notifier_block *atomic_nb, 2213 struct notifier_block *blocking_nb, 2214 struct netlink_ext_ack *extack); 2215 2216 bool br_switchdev_frame_uses_tx_fwd_offload(struct sk_buff *skb); 2217 2218 void br_switchdev_frame_set_offload_fwd_mark(struct sk_buff *skb); 2219 2220 void nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p, 2221 struct sk_buff *skb); 2222 void nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p, 2223 struct sk_buff *skb); 2224 void nbp_switchdev_frame_mark(const struct net_bridge_port *p, 2225 struct sk_buff *skb); 2226 bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, 2227 const struct sk_buff *skb); 2228 int br_switchdev_set_port_flag(struct net_bridge_port *p, 2229 unsigned long flags, 2230 unsigned long mask, 2231 struct netlink_ext_ack *extack); 2232 void br_switchdev_fdb_notify(struct net_bridge *br, 2233 const struct net_bridge_fdb_entry *fdb, int type); 2234 void br_switchdev_mdb_notify(struct net_device *dev, 2235 struct net_bridge_mdb_entry *mp, 2236 struct net_bridge_port_group *pg, 2237 int type); 2238 int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags, 2239 bool changed, struct netlink_ext_ack *extack); 2240 int br_switchdev_port_vlan_no_foreign_add(struct net_device *dev, u16 vid, u16 flags, 2241 bool changed, struct netlink_ext_ack *extack); 2242 int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid); 2243 void br_switchdev_init(struct net_bridge *br); 2244 2245 static inline void br_switchdev_frame_unmark(struct sk_buff *skb) 2246 { 2247 skb->offload_fwd_mark = 0; 2248 } 2249 #else 2250 static inline int 2251 br_switchdev_port_offload(struct net_bridge_port *p, 2252 struct net_device *dev, const void *ctx, 2253 struct notifier_block *atomic_nb, 2254 struct notifier_block *blocking_nb, 2255 bool tx_fwd_offload, 2256 struct netlink_ext_ack *extack) 2257 { 2258 return -EOPNOTSUPP; 2259 } 2260 2261 static inline void 2262 br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx, 2263 struct notifier_block *atomic_nb, 2264 struct notifier_block *blocking_nb) 2265 { 2266 } 2267 2268 static inline int 2269 br_switchdev_port_replay(struct net_bridge_port *p, 2270 struct net_device *dev, const void *ctx, 2271 struct notifier_block *atomic_nb, 2272 struct notifier_block *blocking_nb, 2273 struct netlink_ext_ack *extack) 2274 { 2275 return -EOPNOTSUPP; 2276 } 2277 2278 static inline bool br_switchdev_frame_uses_tx_fwd_offload(struct sk_buff *skb) 2279 { 2280 return false; 2281 } 2282 2283 static inline void br_switchdev_frame_set_offload_fwd_mark(struct sk_buff *skb) 2284 { 2285 } 2286 2287 static inline void 2288 nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p, 2289 struct sk_buff *skb) 2290 { 2291 } 2292 2293 static inline void 2294 nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p, 2295 struct sk_buff *skb) 2296 { 2297 } 2298 2299 static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p, 2300 struct sk_buff *skb) 2301 { 2302 } 2303 2304 static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, 2305 const struct sk_buff *skb) 2306 { 2307 return true; 2308 } 2309 2310 static inline int br_switchdev_set_port_flag(struct net_bridge_port *p, 2311 unsigned long flags, 2312 unsigned long mask, 2313 struct netlink_ext_ack *extack) 2314 { 2315 return 0; 2316 } 2317 2318 static inline int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, 2319 u16 flags, bool changed, 2320 struct netlink_ext_ack *extack) 2321 { 2322 return -EOPNOTSUPP; 2323 } 2324 2325 static inline int br_switchdev_port_vlan_no_foreign_add(struct net_device *dev, u16 vid, 2326 u16 flags, bool changed, 2327 struct netlink_ext_ack *extack) 2328 { 2329 return -EOPNOTSUPP; 2330 } 2331 2332 static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid) 2333 { 2334 return -EOPNOTSUPP; 2335 } 2336 2337 static inline void 2338 br_switchdev_fdb_notify(struct net_bridge *br, 2339 const struct net_bridge_fdb_entry *fdb, int type) 2340 { 2341 } 2342 2343 static inline void br_switchdev_mdb_notify(struct net_device *dev, 2344 struct net_bridge_mdb_entry *mp, 2345 struct net_bridge_port_group *pg, 2346 int type) 2347 { 2348 } 2349 2350 static inline void br_switchdev_frame_unmark(struct sk_buff *skb) 2351 { 2352 } 2353 2354 static inline void br_switchdev_init(struct net_bridge *br) 2355 { 2356 } 2357 2358 #endif /* CONFIG_NET_SWITCHDEV */ 2359 2360 /* br_arp_nd_proxy.c */ 2361 void br_recalculate_neigh_suppress_enabled(struct net_bridge *br); 2362 void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br, 2363 u16 vid, struct net_bridge_port *p); 2364 void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br, 2365 u16 vid, struct net_bridge_port *p, struct nd_msg *msg); 2366 struct nd_msg *br_is_nd_neigh_msg(const struct sk_buff *skb, struct nd_msg *m); 2367 bool br_is_neigh_suppress_enabled(const struct net_bridge_port *p, u16 vid); 2368 #endif 2369