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