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