xref: /openbmc/linux/net/bridge/br_private.h (revision 6db6f0ea)
1 /*
2  *	Linux ethernet bridge
3  *
4  *	Authors:
5  *	Lennert Buytenhek		<buytenh@gnu.org>
6  *
7  *	This program is free software; you can redistribute it and/or
8  *	modify it under the terms of the GNU General Public License
9  *	as published by the Free Software Foundation; either version
10  *	2 of the License, or (at your option) any later version.
11  */
12 
13 #ifndef _BR_PRIVATE_H
14 #define _BR_PRIVATE_H
15 
16 #include <linux/netdevice.h>
17 #include <linux/if_bridge.h>
18 #include <linux/netpoll.h>
19 #include <linux/u64_stats_sync.h>
20 #include <net/route.h>
21 #include <net/ip6_fib.h>
22 #include <linux/if_vlan.h>
23 #include <linux/rhashtable.h>
24 
25 #define BR_HASH_BITS 8
26 #define BR_HASH_SIZE (1 << BR_HASH_BITS)
27 
28 #define BR_HOLD_TIME (1*HZ)
29 
30 #define BR_PORT_BITS	10
31 #define BR_MAX_PORTS	(1<<BR_PORT_BITS)
32 
33 #define BR_VERSION	"2.3"
34 
35 /* Control of forwarding link local multicast */
36 #define BR_GROUPFWD_DEFAULT	0
37 /* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */
38 #define BR_GROUPFWD_RESTRICTED	0x0007u
39 /* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */
40 #define BR_GROUPFWD_8021AD	0xB801u
41 
42 /* Path to usermode spanning tree program */
43 #define BR_STP_PROG	"/sbin/bridge-stp"
44 
45 typedef struct bridge_id bridge_id;
46 typedef struct mac_addr mac_addr;
47 typedef __u16 port_id;
48 
49 struct bridge_id
50 {
51 	unsigned char	prio[2];
52 	unsigned char	addr[ETH_ALEN];
53 };
54 
55 struct mac_addr
56 {
57 	unsigned char	addr[ETH_ALEN];
58 };
59 
60 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
61 /* our own querier */
62 struct bridge_mcast_own_query {
63 	struct timer_list	timer;
64 	u32			startup_sent;
65 };
66 
67 /* other querier */
68 struct bridge_mcast_other_query {
69 	struct timer_list		timer;
70 	unsigned long			delay_time;
71 };
72 
73 /* selected querier */
74 struct bridge_mcast_querier {
75 	struct br_ip addr;
76 	struct net_bridge_port __rcu	*port;
77 };
78 
79 /* IGMP/MLD statistics */
80 struct bridge_mcast_stats {
81 	struct br_mcast_stats mstats;
82 	struct u64_stats_sync syncp;
83 };
84 #endif
85 
86 struct br_vlan_stats {
87 	u64 rx_bytes;
88 	u64 rx_packets;
89 	u64 tx_bytes;
90 	u64 tx_packets;
91 	struct u64_stats_sync syncp;
92 };
93 
94 /**
95  * struct net_bridge_vlan - per-vlan entry
96  *
97  * @vnode: rhashtable member
98  * @vid: VLAN id
99  * @flags: bridge vlan flags
100  * @stats: per-cpu VLAN statistics
101  * @br: if MASTER flag set, this points to a bridge struct
102  * @port: if MASTER flag unset, this points to a port struct
103  * @refcnt: if MASTER flag set, this is bumped for each port referencing it
104  * @brvlan: if MASTER flag unset, this points to the global per-VLAN context
105  *          for this VLAN entry
106  * @vlist: sorted list of VLAN entries
107  * @rcu: used for entry destruction
108  *
109  * This structure is shared between the global per-VLAN entries contained in
110  * the bridge rhashtable and the local per-port per-VLAN entries contained in
111  * the port's rhashtable. The union entries should be interpreted depending on
112  * the entry flags that are set.
113  */
114 struct net_bridge_vlan {
115 	struct rhash_head		vnode;
116 	u16				vid;
117 	u16				flags;
118 	struct br_vlan_stats __percpu	*stats;
119 	union {
120 		struct net_bridge	*br;
121 		struct net_bridge_port	*port;
122 	};
123 	union {
124 		atomic_t		refcnt;
125 		struct net_bridge_vlan	*brvlan;
126 	};
127 	struct list_head		vlist;
128 
129 	struct rcu_head			rcu;
130 };
131 
132 /**
133  * struct net_bridge_vlan_group
134  *
135  * @vlan_hash: VLAN entry rhashtable
136  * @vlan_list: sorted VLAN entry list
137  * @num_vlans: number of total VLAN entries
138  * @pvid: PVID VLAN id
139  *
140  * IMPORTANT: Be careful when checking if there're VLAN entries using list
141  *            primitives because the bridge can have entries in its list which
142  *            are just for global context but not for filtering, i.e. they have
143  *            the master flag set but not the brentry flag. If you have to check
144  *            if there're "real" entries in the bridge please test @num_vlans
145  */
146 struct net_bridge_vlan_group {
147 	struct rhashtable		vlan_hash;
148 	struct list_head		vlan_list;
149 	u16				num_vlans;
150 	u16				pvid;
151 };
152 
153 struct net_bridge_fdb_entry
154 {
155 	struct hlist_node		hlist;
156 	struct net_bridge_port		*dst;
157 
158 	unsigned long			updated;
159 	unsigned long			used;
160 	mac_addr			addr;
161 	__u16				vlan_id;
162 	unsigned char			is_local:1,
163 					is_static:1,
164 					added_by_user:1,
165 					added_by_external_learn:1;
166 	struct rcu_head			rcu;
167 };
168 
169 #define MDB_PG_FLAGS_PERMANENT	BIT(0)
170 #define MDB_PG_FLAGS_OFFLOAD	BIT(1)
171 
172 struct net_bridge_port_group {
173 	struct net_bridge_port		*port;
174 	struct net_bridge_port_group __rcu *next;
175 	struct hlist_node		mglist;
176 	struct rcu_head			rcu;
177 	struct timer_list		timer;
178 	struct br_ip			addr;
179 	unsigned char			flags;
180 	unsigned char			eth_addr[ETH_ALEN];
181 };
182 
183 struct net_bridge_mdb_entry
184 {
185 	struct hlist_node		hlist[2];
186 	struct net_bridge		*br;
187 	struct net_bridge_port_group __rcu *ports;
188 	struct rcu_head			rcu;
189 	struct timer_list		timer;
190 	struct br_ip			addr;
191 	bool				mglist;
192 };
193 
194 struct net_bridge_mdb_htable
195 {
196 	struct hlist_head		*mhash;
197 	struct rcu_head			rcu;
198 	struct net_bridge_mdb_htable	*old;
199 	u32				size;
200 	u32				max;
201 	u32				secret;
202 	u32				ver;
203 };
204 
205 struct net_bridge_port
206 {
207 	struct net_bridge		*br;
208 	struct net_device		*dev;
209 	struct list_head		list;
210 
211 	/* STP */
212 	u8				priority;
213 	u8				state;
214 	u16				port_no;
215 	unsigned char			topology_change_ack;
216 	unsigned char			config_pending;
217 	port_id				port_id;
218 	port_id				designated_port;
219 	bridge_id			designated_root;
220 	bridge_id			designated_bridge;
221 	u32				path_cost;
222 	u32				designated_cost;
223 	unsigned long			designated_age;
224 
225 	struct timer_list		forward_delay_timer;
226 	struct timer_list		hold_timer;
227 	struct timer_list		message_age_timer;
228 	struct kobject			kobj;
229 	struct rcu_head			rcu;
230 
231 	unsigned long 			flags;
232 
233 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
234 	struct bridge_mcast_own_query	ip4_own_query;
235 #if IS_ENABLED(CONFIG_IPV6)
236 	struct bridge_mcast_own_query	ip6_own_query;
237 #endif /* IS_ENABLED(CONFIG_IPV6) */
238 	unsigned char			multicast_router;
239 	struct bridge_mcast_stats	__percpu *mcast_stats;
240 	struct timer_list		multicast_router_timer;
241 	struct hlist_head		mglist;
242 	struct hlist_node		rlist;
243 #endif
244 
245 #ifdef CONFIG_SYSFS
246 	char				sysfs_name[IFNAMSIZ];
247 #endif
248 
249 #ifdef CONFIG_NET_POLL_CONTROLLER
250 	struct netpoll			*np;
251 #endif
252 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
253 	struct net_bridge_vlan_group	__rcu *vlgrp;
254 #endif
255 #ifdef CONFIG_NET_SWITCHDEV
256 	int				offload_fwd_mark;
257 #endif
258 };
259 
260 #define br_auto_port(p) ((p)->flags & BR_AUTO_MASK)
261 #define br_promisc_port(p) ((p)->flags & BR_PROMISC)
262 
263 #define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT)
264 
265 static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
266 {
267 	return rcu_dereference(dev->rx_handler_data);
268 }
269 
270 static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev)
271 {
272 	return br_port_exists(dev) ?
273 		rtnl_dereference(dev->rx_handler_data) : NULL;
274 }
275 
276 struct net_bridge
277 {
278 	spinlock_t			lock;
279 	struct list_head		port_list;
280 	struct net_device		*dev;
281 
282 	struct pcpu_sw_netstats		__percpu *stats;
283 	spinlock_t			hash_lock;
284 	struct hlist_head		hash[BR_HASH_SIZE];
285 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
286 	union {
287 		struct rtable		fake_rtable;
288 		struct rt6_info		fake_rt6_info;
289 	};
290 	bool				nf_call_iptables;
291 	bool				nf_call_ip6tables;
292 	bool				nf_call_arptables;
293 #endif
294 	u16				group_fwd_mask;
295 	u16				group_fwd_mask_required;
296 
297 	/* STP */
298 	bridge_id			designated_root;
299 	bridge_id			bridge_id;
300 	u32				root_path_cost;
301 	unsigned long			max_age;
302 	unsigned long			hello_time;
303 	unsigned long			forward_delay;
304 	unsigned long			ageing_time;
305 	unsigned long			bridge_max_age;
306 	unsigned long			bridge_hello_time;
307 	unsigned long			bridge_forward_delay;
308 	unsigned long			bridge_ageing_time;
309 
310 	u8				group_addr[ETH_ALEN];
311 	bool				group_addr_set;
312 	u16				root_port;
313 
314 	enum {
315 		BR_NO_STP, 		/* no spanning tree */
316 		BR_KERNEL_STP,		/* old STP in kernel */
317 		BR_USER_STP,		/* new RSTP in userspace */
318 	} stp_enabled;
319 
320 	unsigned char			topology_change;
321 	unsigned char			topology_change_detected;
322 
323 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
324 	unsigned char			multicast_router;
325 
326 	u8				multicast_disabled:1;
327 	u8				multicast_querier:1;
328 	u8				multicast_query_use_ifaddr:1;
329 	u8				has_ipv6_addr:1;
330 	u8				multicast_stats_enabled:1;
331 
332 	u32				hash_elasticity;
333 	u32				hash_max;
334 
335 	u32				multicast_last_member_count;
336 	u32				multicast_startup_query_count;
337 
338 	u8				multicast_igmp_version;
339 
340 	unsigned long			multicast_last_member_interval;
341 	unsigned long			multicast_membership_interval;
342 	unsigned long			multicast_querier_interval;
343 	unsigned long			multicast_query_interval;
344 	unsigned long			multicast_query_response_interval;
345 	unsigned long			multicast_startup_query_interval;
346 
347 	spinlock_t			multicast_lock;
348 	struct net_bridge_mdb_htable __rcu *mdb;
349 	struct hlist_head		router_list;
350 
351 	struct timer_list		multicast_router_timer;
352 	struct bridge_mcast_other_query	ip4_other_query;
353 	struct bridge_mcast_own_query	ip4_own_query;
354 	struct bridge_mcast_querier	ip4_querier;
355 	struct bridge_mcast_stats	__percpu *mcast_stats;
356 #if IS_ENABLED(CONFIG_IPV6)
357 	struct bridge_mcast_other_query	ip6_other_query;
358 	struct bridge_mcast_own_query	ip6_own_query;
359 	struct bridge_mcast_querier	ip6_querier;
360 	u8				multicast_mld_version;
361 #endif /* IS_ENABLED(CONFIG_IPV6) */
362 #endif
363 
364 	struct timer_list		hello_timer;
365 	struct timer_list		tcn_timer;
366 	struct timer_list		topology_change_timer;
367 	struct timer_list		gc_timer;
368 	struct kobject			*ifobj;
369 	u32				auto_cnt;
370 
371 #ifdef CONFIG_NET_SWITCHDEV
372 	int offload_fwd_mark;
373 #endif
374 
375 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
376 	struct net_bridge_vlan_group	__rcu *vlgrp;
377 	u8				vlan_enabled;
378 	u8				vlan_stats_enabled;
379 	__be16				vlan_proto;
380 	u16				default_pvid;
381 #endif
382 };
383 
384 struct br_input_skb_cb {
385 	struct net_device *brdev;
386 
387 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
388 	int igmp;
389 	int mrouters_only;
390 #endif
391 
392 	bool proxyarp_replied;
393 
394 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
395 	bool vlan_filtered;
396 #endif
397 
398 #ifdef CONFIG_NET_SWITCHDEV
399 	int offload_fwd_mark;
400 #endif
401 };
402 
403 #define BR_INPUT_SKB_CB(__skb)	((struct br_input_skb_cb *)(__skb)->cb)
404 
405 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
406 # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb)	(BR_INPUT_SKB_CB(__skb)->mrouters_only)
407 #else
408 # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb)	(0)
409 #endif
410 
411 #define br_printk(level, br, format, args...)	\
412 	printk(level "%s: " format, (br)->dev->name, ##args)
413 
414 #define br_err(__br, format, args...)			\
415 	br_printk(KERN_ERR, __br, format, ##args)
416 #define br_warn(__br, format, args...)			\
417 	br_printk(KERN_WARNING, __br, format, ##args)
418 #define br_notice(__br, format, args...)		\
419 	br_printk(KERN_NOTICE, __br, format, ##args)
420 #define br_info(__br, format, args...)			\
421 	br_printk(KERN_INFO, __br, format, ##args)
422 
423 #define br_debug(br, format, args...)			\
424 	pr_debug("%s: " format,  (br)->dev->name, ##args)
425 
426 /* called under bridge lock */
427 static inline int br_is_root_bridge(const struct net_bridge *br)
428 {
429 	return !memcmp(&br->bridge_id, &br->designated_root, 8);
430 }
431 
432 /* check if a VLAN entry is global */
433 static inline bool br_vlan_is_master(const struct net_bridge_vlan *v)
434 {
435 	return v->flags & BRIDGE_VLAN_INFO_MASTER;
436 }
437 
438 /* check if a VLAN entry is used by the bridge */
439 static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v)
440 {
441 	return v->flags & BRIDGE_VLAN_INFO_BRENTRY;
442 }
443 
444 /* check if we should use the vlan entry, returns false if it's only context */
445 static inline bool br_vlan_should_use(const struct net_bridge_vlan *v)
446 {
447 	if (br_vlan_is_master(v)) {
448 		if (br_vlan_is_brentry(v))
449 			return true;
450 		else
451 			return false;
452 	}
453 
454 	return true;
455 }
456 
457 /* br_device.c */
458 void br_dev_setup(struct net_device *dev);
459 void br_dev_delete(struct net_device *dev, struct list_head *list);
460 netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
461 #ifdef CONFIG_NET_POLL_CONTROLLER
462 static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
463 				       struct sk_buff *skb)
464 {
465 	struct netpoll *np = p->np;
466 
467 	if (np)
468 		netpoll_send_skb(np, skb);
469 }
470 
471 int br_netpoll_enable(struct net_bridge_port *p);
472 void br_netpoll_disable(struct net_bridge_port *p);
473 #else
474 static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
475 				       struct sk_buff *skb)
476 {
477 }
478 
479 static inline int br_netpoll_enable(struct net_bridge_port *p)
480 {
481 	return 0;
482 }
483 
484 static inline void br_netpoll_disable(struct net_bridge_port *p)
485 {
486 }
487 #endif
488 
489 /* br_fdb.c */
490 int br_fdb_init(void);
491 void br_fdb_fini(void);
492 void br_fdb_flush(struct net_bridge *br);
493 void br_fdb_find_delete_local(struct net_bridge *br,
494 			      const struct net_bridge_port *p,
495 			      const unsigned char *addr, u16 vid);
496 void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr);
497 void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
498 void br_fdb_cleanup(unsigned long arg);
499 void br_fdb_delete_by_port(struct net_bridge *br,
500 			   const struct net_bridge_port *p, u16 vid, int do_all);
501 struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br,
502 					  const unsigned char *addr, __u16 vid);
503 int br_fdb_test_addr(struct net_device *dev, unsigned char *addr);
504 int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count,
505 		   unsigned long off);
506 int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
507 		  const unsigned char *addr, u16 vid);
508 void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
509 		   const unsigned char *addr, u16 vid, bool added_by_user);
510 
511 int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
512 		  struct net_device *dev, const unsigned char *addr, u16 vid);
513 int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
514 	       const unsigned char *addr, u16 vid, u16 nlh_flags);
515 int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
516 		struct net_device *dev, struct net_device *fdev, int *idx);
517 int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
518 void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
519 int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
520 			      const unsigned char *addr, u16 vid);
521 int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p,
522 			      const unsigned char *addr, u16 vid);
523 
524 /* br_forward.c */
525 enum br_pkt_type {
526 	BR_PKT_UNICAST,
527 	BR_PKT_MULTICAST,
528 	BR_PKT_BROADCAST
529 };
530 int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb);
531 void br_forward(const struct net_bridge_port *to, struct sk_buff *skb,
532 		bool local_rcv, bool local_orig);
533 int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
534 void br_flood(struct net_bridge *br, struct sk_buff *skb,
535 	      enum br_pkt_type pkt_type, bool local_rcv, bool local_orig);
536 
537 /* br_if.c */
538 void br_port_carrier_check(struct net_bridge_port *p);
539 int br_add_bridge(struct net *net, const char *name);
540 int br_del_bridge(struct net *net, const char *name);
541 int br_add_if(struct net_bridge *br, struct net_device *dev);
542 int br_del_if(struct net_bridge *br, struct net_device *dev);
543 int br_min_mtu(const struct net_bridge *br);
544 netdev_features_t br_features_recompute(struct net_bridge *br,
545 					netdev_features_t features);
546 void br_port_flags_change(struct net_bridge_port *port, unsigned long mask);
547 void br_manage_promisc(struct net_bridge *br);
548 
549 /* br_input.c */
550 int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
551 rx_handler_result_t br_handle_frame(struct sk_buff **pskb);
552 
553 static inline bool br_rx_handler_check_rcu(const struct net_device *dev)
554 {
555 	return rcu_dereference(dev->rx_handler) == br_handle_frame;
556 }
557 
558 static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev)
559 {
560 	return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL;
561 }
562 
563 /* br_ioctl.c */
564 int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
565 int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd,
566 			     void __user *arg);
567 
568 /* br_multicast.c */
569 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
570 extern unsigned int br_mdb_rehash_seq;
571 int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port,
572 		     struct sk_buff *skb, u16 vid);
573 struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
574 					struct sk_buff *skb, u16 vid);
575 int br_multicast_add_port(struct net_bridge_port *port);
576 void br_multicast_del_port(struct net_bridge_port *port);
577 void br_multicast_enable_port(struct net_bridge_port *port);
578 void br_multicast_disable_port(struct net_bridge_port *port);
579 void br_multicast_init(struct net_bridge *br);
580 void br_multicast_open(struct net_bridge *br);
581 void br_multicast_stop(struct net_bridge *br);
582 void br_multicast_dev_del(struct net_bridge *br);
583 void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
584 			struct sk_buff *skb, bool local_rcv, bool local_orig);
585 int br_multicast_set_router(struct net_bridge *br, unsigned long val);
586 int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val);
587 int br_multicast_toggle(struct net_bridge *br, unsigned long val);
588 int br_multicast_set_querier(struct net_bridge *br, unsigned long val);
589 int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val);
590 int br_multicast_set_igmp_version(struct net_bridge *br, unsigned long val);
591 #if IS_ENABLED(CONFIG_IPV6)
592 int br_multicast_set_mld_version(struct net_bridge *br, unsigned long val);
593 #endif
594 struct net_bridge_mdb_entry *
595 br_mdb_ip_get(struct net_bridge_mdb_htable *mdb, struct br_ip *dst);
596 struct net_bridge_mdb_entry *
597 br_multicast_new_group(struct net_bridge *br, struct net_bridge_port *port,
598 		       struct br_ip *group);
599 void br_multicast_free_pg(struct rcu_head *head);
600 struct net_bridge_port_group *
601 br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
602 			    struct net_bridge_port_group __rcu *next,
603 			    unsigned char flags, const unsigned char *src);
604 void br_mdb_init(void);
605 void br_mdb_uninit(void);
606 void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
607 		   struct br_ip *group, int type, u8 flags);
608 void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port,
609 		   int type);
610 void br_multicast_count(struct net_bridge *br, const struct net_bridge_port *p,
611 			const struct sk_buff *skb, u8 type, u8 dir);
612 int br_multicast_init_stats(struct net_bridge *br);
613 void br_multicast_get_stats(const struct net_bridge *br,
614 			    const struct net_bridge_port *p,
615 			    struct br_mcast_stats *dest);
616 
617 #define mlock_dereference(X, br) \
618 	rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
619 
620 static inline bool br_multicast_is_router(struct net_bridge *br)
621 {
622 	return br->multicast_router == 2 ||
623 	       (br->multicast_router == 1 &&
624 		timer_pending(&br->multicast_router_timer));
625 }
626 
627 static inline bool
628 __br_multicast_querier_exists(struct net_bridge *br,
629 				struct bridge_mcast_other_query *querier,
630 				const bool is_ipv6)
631 {
632 	bool own_querier_enabled;
633 
634 	if (br->multicast_querier) {
635 		if (is_ipv6 && !br->has_ipv6_addr)
636 			own_querier_enabled = false;
637 		else
638 			own_querier_enabled = true;
639 	} else {
640 		own_querier_enabled = false;
641 	}
642 
643 	return time_is_before_jiffies(querier->delay_time) &&
644 	       (own_querier_enabled || timer_pending(&querier->timer));
645 }
646 
647 static inline bool br_multicast_querier_exists(struct net_bridge *br,
648 					       struct ethhdr *eth)
649 {
650 	switch (eth->h_proto) {
651 	case (htons(ETH_P_IP)):
652 		return __br_multicast_querier_exists(br,
653 			&br->ip4_other_query, false);
654 #if IS_ENABLED(CONFIG_IPV6)
655 	case (htons(ETH_P_IPV6)):
656 		return __br_multicast_querier_exists(br,
657 			&br->ip6_other_query, true);
658 #endif
659 	default:
660 		return false;
661 	}
662 }
663 
664 static inline int br_multicast_igmp_type(const struct sk_buff *skb)
665 {
666 	return BR_INPUT_SKB_CB(skb)->igmp;
667 }
668 #else
669 static inline int br_multicast_rcv(struct net_bridge *br,
670 				   struct net_bridge_port *port,
671 				   struct sk_buff *skb,
672 				   u16 vid)
673 {
674 	return 0;
675 }
676 
677 static inline struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
678 						      struct sk_buff *skb, u16 vid)
679 {
680 	return NULL;
681 }
682 
683 static inline int br_multicast_add_port(struct net_bridge_port *port)
684 {
685 	return 0;
686 }
687 
688 static inline void br_multicast_del_port(struct net_bridge_port *port)
689 {
690 }
691 
692 static inline void br_multicast_enable_port(struct net_bridge_port *port)
693 {
694 }
695 
696 static inline void br_multicast_disable_port(struct net_bridge_port *port)
697 {
698 }
699 
700 static inline void br_multicast_init(struct net_bridge *br)
701 {
702 }
703 
704 static inline void br_multicast_open(struct net_bridge *br)
705 {
706 }
707 
708 static inline void br_multicast_stop(struct net_bridge *br)
709 {
710 }
711 
712 static inline void br_multicast_dev_del(struct net_bridge *br)
713 {
714 }
715 
716 static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
717 				      struct sk_buff *skb,
718 				      bool local_rcv, bool local_orig)
719 {
720 }
721 
722 static inline bool br_multicast_is_router(struct net_bridge *br)
723 {
724 	return 0;
725 }
726 
727 static inline bool br_multicast_querier_exists(struct net_bridge *br,
728 					       struct ethhdr *eth)
729 {
730 	return false;
731 }
732 
733 static inline void br_mdb_init(void)
734 {
735 }
736 
737 static inline void br_mdb_uninit(void)
738 {
739 }
740 
741 static inline void br_multicast_count(struct net_bridge *br,
742 				      const struct net_bridge_port *p,
743 				      const struct sk_buff *skb,
744 				      u8 type, u8 dir)
745 {
746 }
747 
748 static inline int br_multicast_init_stats(struct net_bridge *br)
749 {
750 	return 0;
751 }
752 
753 static inline int br_multicast_igmp_type(const struct sk_buff *skb)
754 {
755 	return 0;
756 }
757 #endif
758 
759 /* br_vlan.c */
760 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
761 bool br_allowed_ingress(const struct net_bridge *br,
762 			struct net_bridge_vlan_group *vg, struct sk_buff *skb,
763 			u16 *vid);
764 bool br_allowed_egress(struct net_bridge_vlan_group *vg,
765 		       const struct sk_buff *skb);
766 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid);
767 struct sk_buff *br_handle_vlan(struct net_bridge *br,
768 			       struct net_bridge_vlan_group *vg,
769 			       struct sk_buff *skb);
770 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags);
771 int br_vlan_delete(struct net_bridge *br, u16 vid);
772 void br_vlan_flush(struct net_bridge *br);
773 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid);
774 void br_recalculate_fwd_mask(struct net_bridge *br);
775 int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
776 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
777 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto);
778 int br_vlan_set_proto(struct net_bridge *br, unsigned long val);
779 int br_vlan_set_stats(struct net_bridge *br, unsigned long val);
780 int br_vlan_init(struct net_bridge *br);
781 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val);
782 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid);
783 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags);
784 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid);
785 void nbp_vlan_flush(struct net_bridge_port *port);
786 int nbp_vlan_init(struct net_bridge_port *port);
787 int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask);
788 void br_vlan_get_stats(const struct net_bridge_vlan *v,
789 		       struct br_vlan_stats *stats);
790 
791 static inline struct net_bridge_vlan_group *br_vlan_group(
792 					const struct net_bridge *br)
793 {
794 	return rtnl_dereference(br->vlgrp);
795 }
796 
797 static inline struct net_bridge_vlan_group *nbp_vlan_group(
798 					const struct net_bridge_port *p)
799 {
800 	return rtnl_dereference(p->vlgrp);
801 }
802 
803 static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
804 					const struct net_bridge *br)
805 {
806 	return rcu_dereference(br->vlgrp);
807 }
808 
809 static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
810 					const struct net_bridge_port *p)
811 {
812 	return rcu_dereference(p->vlgrp);
813 }
814 
815 /* Since bridge now depends on 8021Q module, but the time bridge sees the
816  * skb, the vlan tag will always be present if the frame was tagged.
817  */
818 static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)
819 {
820 	int err = 0;
821 
822 	if (skb_vlan_tag_present(skb)) {
823 		*vid = skb_vlan_tag_get(skb) & VLAN_VID_MASK;
824 	} else {
825 		*vid = 0;
826 		err = -EINVAL;
827 	}
828 
829 	return err;
830 }
831 
832 static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
833 {
834 	if (!vg)
835 		return 0;
836 
837 	smp_rmb();
838 	return vg->pvid;
839 }
840 
841 static inline int br_vlan_enabled(struct net_bridge *br)
842 {
843 	return br->vlan_enabled;
844 }
845 #else
846 static inline bool br_allowed_ingress(const struct net_bridge *br,
847 				      struct net_bridge_vlan_group *vg,
848 				      struct sk_buff *skb,
849 				      u16 *vid)
850 {
851 	return true;
852 }
853 
854 static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg,
855 				     const struct sk_buff *skb)
856 {
857 	return true;
858 }
859 
860 static inline bool br_should_learn(struct net_bridge_port *p,
861 				   struct sk_buff *skb, u16 *vid)
862 {
863 	return true;
864 }
865 
866 static inline struct sk_buff *br_handle_vlan(struct net_bridge *br,
867 					     struct net_bridge_vlan_group *vg,
868 					     struct sk_buff *skb)
869 {
870 	return skb;
871 }
872 
873 static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)
874 {
875 	return -EOPNOTSUPP;
876 }
877 
878 static inline int br_vlan_delete(struct net_bridge *br, u16 vid)
879 {
880 	return -EOPNOTSUPP;
881 }
882 
883 static inline void br_vlan_flush(struct net_bridge *br)
884 {
885 }
886 
887 static inline void br_recalculate_fwd_mask(struct net_bridge *br)
888 {
889 }
890 
891 static inline int br_vlan_init(struct net_bridge *br)
892 {
893 	return 0;
894 }
895 
896 static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
897 {
898 	return -EOPNOTSUPP;
899 }
900 
901 static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
902 {
903 	return -EOPNOTSUPP;
904 }
905 
906 static inline void nbp_vlan_flush(struct net_bridge_port *port)
907 {
908 }
909 
910 static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg,
911 						   u16 vid)
912 {
913 	return NULL;
914 }
915 
916 static inline int nbp_vlan_init(struct net_bridge_port *port)
917 {
918 	return 0;
919 }
920 
921 static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag)
922 {
923 	return 0;
924 }
925 
926 static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
927 {
928 	return 0;
929 }
930 
931 static inline int br_vlan_enabled(struct net_bridge *br)
932 {
933 	return 0;
934 }
935 
936 static inline int __br_vlan_filter_toggle(struct net_bridge *br,
937 					  unsigned long val)
938 {
939 	return -EOPNOTSUPP;
940 }
941 
942 static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p,
943 					 u32 filter_mask)
944 {
945 	return 0;
946 }
947 
948 static inline struct net_bridge_vlan_group *br_vlan_group(
949 					const struct net_bridge *br)
950 {
951 	return NULL;
952 }
953 
954 static inline struct net_bridge_vlan_group *nbp_vlan_group(
955 					const struct net_bridge_port *p)
956 {
957 	return NULL;
958 }
959 
960 static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
961 					const struct net_bridge *br)
962 {
963 	return NULL;
964 }
965 
966 static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
967 					const struct net_bridge_port *p)
968 {
969 	return NULL;
970 }
971 
972 static inline void br_vlan_get_stats(const struct net_bridge_vlan *v,
973 				     struct br_vlan_stats *stats)
974 {
975 }
976 #endif
977 
978 struct nf_br_ops {
979 	int (*br_dev_xmit_hook)(struct sk_buff *skb);
980 };
981 extern const struct nf_br_ops __rcu *nf_br_ops;
982 
983 /* br_netfilter.c */
984 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
985 int br_nf_core_init(void);
986 void br_nf_core_fini(void);
987 void br_netfilter_rtable_init(struct net_bridge *);
988 #else
989 static inline int br_nf_core_init(void) { return 0; }
990 static inline void br_nf_core_fini(void) {}
991 #define br_netfilter_rtable_init(x)
992 #endif
993 
994 /* br_stp.c */
995 void br_set_state(struct net_bridge_port *p, unsigned int state);
996 struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
997 void br_init_port(struct net_bridge_port *p);
998 void br_become_designated_port(struct net_bridge_port *p);
999 
1000 void __br_set_forward_delay(struct net_bridge *br, unsigned long t);
1001 int br_set_forward_delay(struct net_bridge *br, unsigned long x);
1002 int br_set_hello_time(struct net_bridge *br, unsigned long x);
1003 int br_set_max_age(struct net_bridge *br, unsigned long x);
1004 int __set_ageing_time(struct net_device *dev, unsigned long t);
1005 int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time);
1006 
1007 
1008 /* br_stp_if.c */
1009 void br_stp_enable_bridge(struct net_bridge *br);
1010 void br_stp_disable_bridge(struct net_bridge *br);
1011 void br_stp_set_enabled(struct net_bridge *br, unsigned long val);
1012 void br_stp_enable_port(struct net_bridge_port *p);
1013 void br_stp_disable_port(struct net_bridge_port *p);
1014 bool br_stp_recalculate_bridge_id(struct net_bridge *br);
1015 void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a);
1016 void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio);
1017 int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio);
1018 int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost);
1019 ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id);
1020 
1021 /* br_stp_bpdu.c */
1022 struct stp_proto;
1023 void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
1024 		struct net_device *dev);
1025 
1026 /* br_stp_timer.c */
1027 void br_stp_timer_init(struct net_bridge *br);
1028 void br_stp_port_timer_init(struct net_bridge_port *p);
1029 unsigned long br_timer_value(const struct timer_list *timer);
1030 
1031 /* br.c */
1032 #if IS_ENABLED(CONFIG_ATM_LANE)
1033 extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr);
1034 #endif
1035 
1036 /* br_netlink.c */
1037 extern struct rtnl_link_ops br_link_ops;
1038 int br_netlink_init(void);
1039 void br_netlink_fini(void);
1040 void br_ifinfo_notify(int event, struct net_bridge_port *port);
1041 int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
1042 int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
1043 int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev,
1044 	       u32 filter_mask, int nlflags);
1045 
1046 #ifdef CONFIG_SYSFS
1047 /* br_sysfs_if.c */
1048 extern const struct sysfs_ops brport_sysfs_ops;
1049 int br_sysfs_addif(struct net_bridge_port *p);
1050 int br_sysfs_renameif(struct net_bridge_port *p);
1051 
1052 /* br_sysfs_br.c */
1053 int br_sysfs_addbr(struct net_device *dev);
1054 void br_sysfs_delbr(struct net_device *dev);
1055 
1056 #else
1057 
1058 static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; }
1059 static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; }
1060 static inline int br_sysfs_addbr(struct net_device *dev) { return 0; }
1061 static inline void br_sysfs_delbr(struct net_device *dev) { return; }
1062 #endif /* CONFIG_SYSFS */
1063 
1064 /* br_switchdev.c */
1065 #ifdef CONFIG_NET_SWITCHDEV
1066 int nbp_switchdev_mark_set(struct net_bridge_port *p);
1067 void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
1068 			      struct sk_buff *skb);
1069 bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
1070 				  const struct sk_buff *skb);
1071 #else
1072 static inline int nbp_switchdev_mark_set(struct net_bridge_port *p)
1073 {
1074 	return 0;
1075 }
1076 
1077 static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
1078 					    struct sk_buff *skb)
1079 {
1080 }
1081 
1082 static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
1083 						const struct sk_buff *skb)
1084 {
1085 	return true;
1086 }
1087 #endif /* CONFIG_NET_SWITCHDEV */
1088 
1089 #endif
1090