xref: /linux/net/bridge/br_multicast.c (revision 5a3f7a683aee56e1f15c9d53041f3236767eaae7)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Bridge multicast support.
4  *
5  * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
6  */
7 
8 #include <linux/err.h>
9 #include <linux/export.h>
10 #include <linux/if_ether.h>
11 #include <linux/igmp.h>
12 #include <linux/in.h>
13 #include <linux/jhash.h>
14 #include <linux/kernel.h>
15 #include <linux/log2.h>
16 #include <linux/netdevice.h>
17 #include <linux/netfilter_bridge.h>
18 #include <linux/random.h>
19 #include <linux/rculist.h>
20 #include <linux/skbuff.h>
21 #include <linux/slab.h>
22 #include <linux/timer.h>
23 #include <linux/inetdevice.h>
24 #include <linux/mroute.h>
25 #include <net/ip.h>
26 #include <net/switchdev.h>
27 #if IS_ENABLED(CONFIG_IPV6)
28 #include <linux/icmpv6.h>
29 #include <net/ipv6.h>
30 #include <net/mld.h>
31 #include <net/ip6_checksum.h>
32 #include <net/addrconf.h>
33 #endif
34 #include <trace/events/bridge.h>
35 
36 #include "br_private.h"
37 #include "br_private_mcast_eht.h"
38 
39 static const struct rhashtable_params br_mdb_rht_params = {
40 	.head_offset = offsetof(struct net_bridge_mdb_entry, rhnode),
41 	.key_offset = offsetof(struct net_bridge_mdb_entry, addr),
42 	.key_len = sizeof(struct br_ip),
43 	.automatic_shrinking = true,
44 };
45 
46 static const struct rhashtable_params br_sg_port_rht_params = {
47 	.head_offset = offsetof(struct net_bridge_port_group, rhnode),
48 	.key_offset = offsetof(struct net_bridge_port_group, key),
49 	.key_len = sizeof(struct net_bridge_port_group_sg_key),
50 	.automatic_shrinking = true,
51 };
52 
53 static void br_multicast_start_querier(struct net_bridge_mcast *brmctx,
54 				       struct bridge_mcast_own_query *query);
55 static void br_ip4_multicast_add_router(struct net_bridge_mcast *brmctx,
56 					struct net_bridge_mcast_port *pmctx);
57 static void br_ip4_multicast_leave_group(struct net_bridge_mcast *brmctx,
58 					 struct net_bridge_mcast_port *pmctx,
59 					 __be32 group,
60 					 __u16 vid,
61 					 const unsigned char *src);
62 static void br_multicast_port_group_rexmit(struct timer_list *t);
63 
64 static void
65 br_multicast_rport_del_notify(struct net_bridge_mcast_port *pmctx, bool deleted);
66 static void br_ip6_multicast_add_router(struct net_bridge_mcast *brmctx,
67 					struct net_bridge_mcast_port *pmctx);
68 #if IS_ENABLED(CONFIG_IPV6)
69 static void br_ip6_multicast_leave_group(struct net_bridge_mcast *brmctx,
70 					 struct net_bridge_mcast_port *pmctx,
71 					 const struct in6_addr *group,
72 					 __u16 vid, const unsigned char *src);
73 #endif
74 static struct net_bridge_port_group *
75 __br_multicast_add_group(struct net_bridge_mcast *brmctx,
76 			 struct net_bridge_mcast_port *pmctx,
77 			 struct br_ip *group,
78 			 const unsigned char *src,
79 			 u8 filter_mode,
80 			 bool igmpv2_mldv1,
81 			 bool blocked);
82 static void br_multicast_find_del_pg(struct net_bridge *br,
83 				     struct net_bridge_port_group *pg);
84 static void __br_multicast_stop(struct net_bridge_mcast *brmctx);
85 
86 static int br_mc_disabled_update(struct net_device *dev, bool value,
87 				 struct netlink_ext_ack *extack);
88 
89 static struct net_bridge_port_group *
90 br_sg_port_find(struct net_bridge *br,
91 		struct net_bridge_port_group_sg_key *sg_p)
92 {
93 	lockdep_assert_held_once(&br->multicast_lock);
94 
95 	return rhashtable_lookup_fast(&br->sg_port_tbl, sg_p,
96 				      br_sg_port_rht_params);
97 }
98 
99 static struct net_bridge_mdb_entry *br_mdb_ip_get_rcu(struct net_bridge *br,
100 						      struct br_ip *dst)
101 {
102 	return rhashtable_lookup(&br->mdb_hash_tbl, dst, br_mdb_rht_params);
103 }
104 
105 struct net_bridge_mdb_entry *br_mdb_ip_get(struct net_bridge *br,
106 					   struct br_ip *dst)
107 {
108 	struct net_bridge_mdb_entry *ent;
109 
110 	lockdep_assert_held_once(&br->multicast_lock);
111 
112 	rcu_read_lock();
113 	ent = rhashtable_lookup(&br->mdb_hash_tbl, dst, br_mdb_rht_params);
114 	rcu_read_unlock();
115 
116 	return ent;
117 }
118 
119 static struct net_bridge_mdb_entry *br_mdb_ip4_get(struct net_bridge *br,
120 						   __be32 dst, __u16 vid)
121 {
122 	struct br_ip br_dst;
123 
124 	memset(&br_dst, 0, sizeof(br_dst));
125 	br_dst.dst.ip4 = dst;
126 	br_dst.proto = htons(ETH_P_IP);
127 	br_dst.vid = vid;
128 
129 	return br_mdb_ip_get(br, &br_dst);
130 }
131 
132 #if IS_ENABLED(CONFIG_IPV6)
133 static struct net_bridge_mdb_entry *br_mdb_ip6_get(struct net_bridge *br,
134 						   const struct in6_addr *dst,
135 						   __u16 vid)
136 {
137 	struct br_ip br_dst;
138 
139 	memset(&br_dst, 0, sizeof(br_dst));
140 	br_dst.dst.ip6 = *dst;
141 	br_dst.proto = htons(ETH_P_IPV6);
142 	br_dst.vid = vid;
143 
144 	return br_mdb_ip_get(br, &br_dst);
145 }
146 #endif
147 
148 struct net_bridge_mdb_entry *
149 br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb,
150 		     u16 vid)
151 {
152 	struct net_bridge *br = brmctx->br;
153 	struct br_ip ip;
154 
155 	if (!br_opt_get(br, BROPT_MULTICAST_ENABLED) ||
156 	    br_multicast_ctx_vlan_global_disabled(brmctx))
157 		return NULL;
158 
159 	if (BR_INPUT_SKB_CB(skb)->igmp)
160 		return NULL;
161 
162 	memset(&ip, 0, sizeof(ip));
163 	ip.proto = skb->protocol;
164 	ip.vid = vid;
165 
166 	switch (skb->protocol) {
167 	case htons(ETH_P_IP):
168 		ip.dst.ip4 = ip_hdr(skb)->daddr;
169 		if (brmctx->multicast_igmp_version == 3) {
170 			struct net_bridge_mdb_entry *mdb;
171 
172 			ip.src.ip4 = ip_hdr(skb)->saddr;
173 			mdb = br_mdb_ip_get_rcu(br, &ip);
174 			if (mdb)
175 				return mdb;
176 			ip.src.ip4 = 0;
177 		}
178 		break;
179 #if IS_ENABLED(CONFIG_IPV6)
180 	case htons(ETH_P_IPV6):
181 		ip.dst.ip6 = ipv6_hdr(skb)->daddr;
182 		if (brmctx->multicast_mld_version == 2) {
183 			struct net_bridge_mdb_entry *mdb;
184 
185 			ip.src.ip6 = ipv6_hdr(skb)->saddr;
186 			mdb = br_mdb_ip_get_rcu(br, &ip);
187 			if (mdb)
188 				return mdb;
189 			memset(&ip.src.ip6, 0, sizeof(ip.src.ip6));
190 		}
191 		break;
192 #endif
193 	default:
194 		ip.proto = 0;
195 		ether_addr_copy(ip.dst.mac_addr, eth_hdr(skb)->h_dest);
196 	}
197 
198 	return br_mdb_ip_get_rcu(br, &ip);
199 }
200 
201 /* IMPORTANT: this function must be used only when the contexts cannot be
202  * passed down (e.g. timer) and must be used for read-only purposes because
203  * the vlan snooping option can change, so it can return any context
204  * (non-vlan or vlan). Its initial intended purpose is to read timer values
205  * from the *current* context based on the option. At worst that could lead
206  * to inconsistent timers when the contexts are changed, i.e. src timer
207  * which needs to re-arm with a specific delay taken from the old context
208  */
209 static struct net_bridge_mcast_port *
210 br_multicast_pg_to_port_ctx(const struct net_bridge_port_group *pg)
211 {
212 	struct net_bridge_mcast_port *pmctx = &pg->key.port->multicast_ctx;
213 	struct net_bridge_vlan *vlan;
214 
215 	lockdep_assert_held_once(&pg->key.port->br->multicast_lock);
216 
217 	/* if vlan snooping is disabled use the port's multicast context */
218 	if (!pg->key.addr.vid ||
219 	    !br_opt_get(pg->key.port->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
220 		goto out;
221 
222 	/* locking is tricky here, due to different rules for multicast and
223 	 * vlans we need to take rcu to find the vlan and make sure it has
224 	 * the BR_VLFLAG_MCAST_ENABLED flag set, it can only change under
225 	 * multicast_lock which must be already held here, so the vlan's pmctx
226 	 * can safely be used on return
227 	 */
228 	rcu_read_lock();
229 	vlan = br_vlan_find(nbp_vlan_group_rcu(pg->key.port), pg->key.addr.vid);
230 	if (vlan && !br_multicast_port_ctx_vlan_disabled(&vlan->port_mcast_ctx))
231 		pmctx = &vlan->port_mcast_ctx;
232 	else
233 		pmctx = NULL;
234 	rcu_read_unlock();
235 out:
236 	return pmctx;
237 }
238 
239 static struct net_bridge_mcast_port *
240 br_multicast_port_vid_to_port_ctx(struct net_bridge_port *port, u16 vid)
241 {
242 	struct net_bridge_mcast_port *pmctx = NULL;
243 	struct net_bridge_vlan *vlan;
244 
245 	lockdep_assert_held_once(&port->br->multicast_lock);
246 
247 	/* Take RCU to access the vlan. */
248 	rcu_read_lock();
249 
250 	vlan = br_vlan_find(nbp_vlan_group_rcu(port), vid);
251 	if (vlan)
252 		pmctx = &vlan->port_mcast_ctx;
253 
254 	rcu_read_unlock();
255 
256 	return pmctx;
257 }
258 
259 /* when snooping we need to check if the contexts should be used
260  * in the following order:
261  * - if pmctx is non-NULL (port), check if it should be used
262  * - if pmctx is NULL (bridge), check if brmctx should be used
263  */
264 static bool
265 br_multicast_ctx_should_use(const struct net_bridge_mcast *brmctx,
266 			    const struct net_bridge_mcast_port *pmctx)
267 {
268 	if (!netif_running(brmctx->br->dev))
269 		return false;
270 
271 	if (pmctx)
272 		return !br_multicast_port_ctx_state_disabled(pmctx);
273 	else
274 		return !br_multicast_ctx_vlan_disabled(brmctx);
275 }
276 
277 static bool br_port_group_equal(struct net_bridge_port_group *p,
278 				struct net_bridge_port *port,
279 				const unsigned char *src)
280 {
281 	if (p->key.port != port)
282 		return false;
283 
284 	if (!test_bit(BR_MULTICAST_TO_UNICAST_BIT, &port->flags))
285 		return true;
286 
287 	return ether_addr_equal(src, p->eth_addr);
288 }
289 
290 static void __fwd_add_star_excl(struct net_bridge_mcast_port *pmctx,
291 				struct net_bridge_port_group *pg,
292 				struct br_ip *sg_ip)
293 {
294 	struct net_bridge_port_group_sg_key sg_key;
295 	struct net_bridge_port_group *src_pg;
296 	struct net_bridge_mcast *brmctx;
297 
298 	memset(&sg_key, 0, sizeof(sg_key));
299 	brmctx = br_multicast_port_ctx_get_global(pmctx);
300 	sg_key.port = pg->key.port;
301 	sg_key.addr = *sg_ip;
302 	if (br_sg_port_find(brmctx->br, &sg_key))
303 		return;
304 
305 	src_pg = __br_multicast_add_group(brmctx, pmctx,
306 					  sg_ip, pg->eth_addr,
307 					  MCAST_INCLUDE, false, false);
308 	if (IS_ERR_OR_NULL(src_pg) ||
309 	    src_pg->rt_protocol != RTPROT_KERNEL)
310 		return;
311 
312 	src_pg->flags |= MDB_PG_FLAGS_STAR_EXCL;
313 }
314 
315 static void __fwd_del_star_excl(struct net_bridge_port_group *pg,
316 				struct br_ip *sg_ip)
317 {
318 	struct net_bridge_port_group_sg_key sg_key;
319 	struct net_bridge *br = pg->key.port->br;
320 	struct net_bridge_port_group *src_pg;
321 
322 	memset(&sg_key, 0, sizeof(sg_key));
323 	sg_key.port = pg->key.port;
324 	sg_key.addr = *sg_ip;
325 	src_pg = br_sg_port_find(br, &sg_key);
326 	if (!src_pg || !(src_pg->flags & MDB_PG_FLAGS_STAR_EXCL) ||
327 	    src_pg->rt_protocol != RTPROT_KERNEL)
328 		return;
329 
330 	br_multicast_find_del_pg(br, src_pg);
331 }
332 
333 /* When a port group transitions to (or is added as) EXCLUDE we need to add it
334  * to all other ports' S,G entries which are not blocked by the current group
335  * for proper replication, the assumption is that any S,G blocked entries
336  * are already added so the S,G,port lookup should skip them.
337  * When a port group transitions from EXCLUDE -> INCLUDE mode or is being
338  * deleted we need to remove it from all ports' S,G entries where it was
339  * automatically installed before (i.e. where it's MDB_PG_FLAGS_STAR_EXCL).
340  */
341 void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
342 				     u8 filter_mode)
343 {
344 	struct net_bridge *br = pg->key.port->br;
345 	struct net_bridge_port_group *pg_lst;
346 	struct net_bridge_mcast_port *pmctx;
347 	struct net_bridge_mdb_entry *mp;
348 	struct br_ip sg_ip;
349 
350 	if (WARN_ON(!br_multicast_is_star_g(&pg->key.addr)))
351 		return;
352 
353 	mp = br_mdb_ip_get(br, &pg->key.addr);
354 	if (!mp)
355 		return;
356 	pmctx = br_multicast_pg_to_port_ctx(pg);
357 	if (!pmctx)
358 		return;
359 
360 	memset(&sg_ip, 0, sizeof(sg_ip));
361 	sg_ip = pg->key.addr;
362 
363 	for (pg_lst = mlock_dereference(mp->ports, br);
364 	     pg_lst;
365 	     pg_lst = mlock_dereference(pg_lst->next, br)) {
366 		struct net_bridge_group_src *src_ent;
367 
368 		if (pg_lst == pg)
369 			continue;
370 		hlist_for_each_entry(src_ent, &pg_lst->src_list, node) {
371 			if (!(src_ent->flags & BR_SGRP_F_INSTALLED))
372 				continue;
373 			sg_ip.src = src_ent->addr.src;
374 			switch (filter_mode) {
375 			case MCAST_INCLUDE:
376 				__fwd_del_star_excl(pg, &sg_ip);
377 				break;
378 			case MCAST_EXCLUDE:
379 				__fwd_add_star_excl(pmctx, pg, &sg_ip);
380 				break;
381 			}
382 		}
383 	}
384 }
385 
386 /* called when adding a new S,G with host_joined == false by default */
387 static void br_multicast_sg_host_state(struct net_bridge_mdb_entry *star_mp,
388 				       struct net_bridge_port_group *sg)
389 {
390 	struct net_bridge_mdb_entry *sg_mp;
391 
392 	if (WARN_ON(!br_multicast_is_star_g(&star_mp->addr)))
393 		return;
394 	if (!star_mp->host_joined)
395 		return;
396 
397 	sg_mp = br_mdb_ip_get(star_mp->br, &sg->key.addr);
398 	if (!sg_mp)
399 		return;
400 	sg_mp->host_joined = true;
401 }
402 
403 /* set the host_joined state of all of *,G's S,G entries */
404 static void br_multicast_star_g_host_state(struct net_bridge_mdb_entry *star_mp)
405 {
406 	struct net_bridge *br = star_mp->br;
407 	struct net_bridge_mdb_entry *sg_mp;
408 	struct net_bridge_port_group *pg;
409 	struct br_ip sg_ip;
410 
411 	if (WARN_ON(!br_multicast_is_star_g(&star_mp->addr)))
412 		return;
413 
414 	memset(&sg_ip, 0, sizeof(sg_ip));
415 	sg_ip = star_mp->addr;
416 	for (pg = mlock_dereference(star_mp->ports, br);
417 	     pg;
418 	     pg = mlock_dereference(pg->next, br)) {
419 		struct net_bridge_group_src *src_ent;
420 
421 		hlist_for_each_entry(src_ent, &pg->src_list, node) {
422 			if (!(src_ent->flags & BR_SGRP_F_INSTALLED))
423 				continue;
424 			sg_ip.src = src_ent->addr.src;
425 			sg_mp = br_mdb_ip_get(br, &sg_ip);
426 			if (!sg_mp)
427 				continue;
428 			sg_mp->host_joined = star_mp->host_joined;
429 		}
430 	}
431 }
432 
433 static void br_multicast_sg_del_exclude_ports(struct net_bridge_mdb_entry *sgmp)
434 {
435 	struct net_bridge_port_group __rcu **pp;
436 	struct net_bridge_port_group *p;
437 
438 	/* *,G exclude ports are only added to S,G entries */
439 	if (WARN_ON(br_multicast_is_star_g(&sgmp->addr)))
440 		return;
441 
442 	/* we need the STAR_EXCLUDE ports if there are non-STAR_EXCLUDE ports
443 	 * we should ignore perm entries since they're managed by user-space
444 	 */
445 	for (pp = &sgmp->ports;
446 	     (p = mlock_dereference(*pp, sgmp->br)) != NULL;
447 	     pp = &p->next)
448 		if (!(p->flags & (MDB_PG_FLAGS_STAR_EXCL |
449 				  MDB_PG_FLAGS_PERMANENT)))
450 			return;
451 
452 	/* currently the host can only have joined the *,G which means
453 	 * we treat it as EXCLUDE {}, so for an S,G it's considered a
454 	 * STAR_EXCLUDE entry and we can safely leave it
455 	 */
456 	sgmp->host_joined = false;
457 
458 	for (pp = &sgmp->ports;
459 	     (p = mlock_dereference(*pp, sgmp->br)) != NULL;) {
460 		if (!(p->flags & MDB_PG_FLAGS_PERMANENT))
461 			br_multicast_del_pg(sgmp, p, pp);
462 		else
463 			pp = &p->next;
464 	}
465 }
466 
467 void br_multicast_sg_add_exclude_ports(struct net_bridge_mdb_entry *star_mp,
468 				       struct net_bridge_port_group *sg)
469 {
470 	struct net_bridge_port_group_sg_key sg_key;
471 	struct net_bridge *br = star_mp->br;
472 	struct net_bridge_mcast_port *pmctx;
473 	struct net_bridge_port_group *pg;
474 	struct net_bridge_mcast *brmctx;
475 
476 	if (WARN_ON(br_multicast_is_star_g(&sg->key.addr)))
477 		return;
478 	if (WARN_ON(!br_multicast_is_star_g(&star_mp->addr)))
479 		return;
480 
481 	br_multicast_sg_host_state(star_mp, sg);
482 	memset(&sg_key, 0, sizeof(sg_key));
483 	sg_key.addr = sg->key.addr;
484 	/* we need to add all exclude ports to the S,G */
485 	for (pg = mlock_dereference(star_mp->ports, br);
486 	     pg;
487 	     pg = mlock_dereference(pg->next, br)) {
488 		struct net_bridge_port_group *src_pg;
489 
490 		if (pg == sg || pg->filter_mode == MCAST_INCLUDE)
491 			continue;
492 
493 		sg_key.port = pg->key.port;
494 		if (br_sg_port_find(br, &sg_key))
495 			continue;
496 
497 		pmctx = br_multicast_pg_to_port_ctx(pg);
498 		if (!pmctx)
499 			continue;
500 		brmctx = br_multicast_port_ctx_get_global(pmctx);
501 
502 		src_pg = __br_multicast_add_group(brmctx, pmctx,
503 						  &sg->key.addr,
504 						  sg->eth_addr,
505 						  MCAST_INCLUDE, false, false);
506 		if (IS_ERR_OR_NULL(src_pg) ||
507 		    src_pg->rt_protocol != RTPROT_KERNEL)
508 			continue;
509 		src_pg->flags |= MDB_PG_FLAGS_STAR_EXCL;
510 	}
511 }
512 
513 static void br_multicast_fwd_src_add(struct net_bridge_group_src *src)
514 {
515 	struct net_bridge_mdb_entry *star_mp;
516 	struct net_bridge_mcast_port *pmctx;
517 	struct net_bridge_port_group *sg;
518 	struct net_bridge_mcast *brmctx;
519 	struct br_ip sg_ip;
520 
521 	if (src->flags & BR_SGRP_F_INSTALLED)
522 		return;
523 
524 	memset(&sg_ip, 0, sizeof(sg_ip));
525 	pmctx = br_multicast_pg_to_port_ctx(src->pg);
526 	if (!pmctx)
527 		return;
528 	brmctx = br_multicast_port_ctx_get_global(pmctx);
529 	sg_ip = src->pg->key.addr;
530 	sg_ip.src = src->addr.src;
531 
532 	sg = __br_multicast_add_group(brmctx, pmctx, &sg_ip,
533 				      src->pg->eth_addr, MCAST_INCLUDE, false,
534 				      !timer_pending(&src->timer));
535 	if (IS_ERR_OR_NULL(sg))
536 		return;
537 	src->flags |= BR_SGRP_F_INSTALLED;
538 	sg->flags &= ~MDB_PG_FLAGS_STAR_EXCL;
539 
540 	/* if it was added by user-space as perm we can skip next steps */
541 	if (sg->rt_protocol != RTPROT_KERNEL &&
542 	    (sg->flags & MDB_PG_FLAGS_PERMANENT))
543 		return;
544 
545 	/* the kernel is now responsible for removing this S,G */
546 	timer_delete(&sg->timer);
547 	star_mp = br_mdb_ip_get(src->br, &src->pg->key.addr);
548 	if (!star_mp)
549 		return;
550 
551 	br_multicast_sg_add_exclude_ports(star_mp, sg);
552 }
553 
554 static void br_multicast_fwd_src_remove(struct net_bridge_group_src *src,
555 					bool fastleave)
556 {
557 	struct net_bridge_port_group *p, *pg = src->pg;
558 	struct net_bridge_port_group __rcu **pp;
559 	struct net_bridge_mdb_entry *mp;
560 	struct br_ip sg_ip;
561 
562 	memset(&sg_ip, 0, sizeof(sg_ip));
563 	sg_ip = pg->key.addr;
564 	sg_ip.src = src->addr.src;
565 
566 	mp = br_mdb_ip_get(src->br, &sg_ip);
567 	if (!mp)
568 		return;
569 
570 	for (pp = &mp->ports;
571 	     (p = mlock_dereference(*pp, src->br)) != NULL;
572 	     pp = &p->next) {
573 		if (!br_port_group_equal(p, pg->key.port, pg->eth_addr))
574 			continue;
575 
576 		if (p->rt_protocol != RTPROT_KERNEL &&
577 		    (p->flags & MDB_PG_FLAGS_PERMANENT) &&
578 		    !(src->flags & BR_SGRP_F_USER_ADDED))
579 			break;
580 
581 		if (fastleave)
582 			p->flags |= MDB_PG_FLAGS_FAST_LEAVE;
583 		br_multicast_del_pg(mp, p, pp);
584 		break;
585 	}
586 	src->flags &= ~BR_SGRP_F_INSTALLED;
587 }
588 
589 /* install S,G and based on src's timer enable or disable forwarding */
590 static void br_multicast_fwd_src_handle(struct net_bridge_group_src *src)
591 {
592 	struct net_bridge_port_group_sg_key sg_key;
593 	struct net_bridge_port_group *sg;
594 	u8 old_flags;
595 
596 	br_multicast_fwd_src_add(src);
597 
598 	memset(&sg_key, 0, sizeof(sg_key));
599 	sg_key.addr = src->pg->key.addr;
600 	sg_key.addr.src = src->addr.src;
601 	sg_key.port = src->pg->key.port;
602 
603 	sg = br_sg_port_find(src->br, &sg_key);
604 	if (!sg || (sg->flags & MDB_PG_FLAGS_PERMANENT))
605 		return;
606 
607 	old_flags = sg->flags;
608 	if (timer_pending(&src->timer))
609 		sg->flags &= ~MDB_PG_FLAGS_BLOCKED;
610 	else
611 		sg->flags |= MDB_PG_FLAGS_BLOCKED;
612 
613 	if (old_flags != sg->flags) {
614 		struct net_bridge_mdb_entry *sg_mp;
615 
616 		sg_mp = br_mdb_ip_get(src->br, &sg_key.addr);
617 		if (!sg_mp)
618 			return;
619 		br_mdb_notify(src->br->dev, sg_mp, sg, RTM_NEWMDB);
620 	}
621 }
622 
623 static void br_multicast_destroy_mdb_entry(struct net_bridge_mcast_gc *gc)
624 {
625 	struct net_bridge_mdb_entry *mp;
626 
627 	mp = container_of(gc, struct net_bridge_mdb_entry, mcast_gc);
628 	WARN_ON(!hlist_unhashed(&mp->mdb_node));
629 	WARN_ON(mp->ports);
630 
631 	timer_shutdown_sync(&mp->timer);
632 	kfree_rcu(mp, rcu);
633 }
634 
635 static void br_multicast_del_mdb_entry(struct net_bridge_mdb_entry *mp)
636 {
637 	struct net_bridge *br = mp->br;
638 
639 	rhashtable_remove_fast(&br->mdb_hash_tbl, &mp->rhnode,
640 			       br_mdb_rht_params);
641 	hlist_del_init_rcu(&mp->mdb_node);
642 	hlist_add_head(&mp->mcast_gc.gc_node, &br->mcast_gc_list);
643 	queue_work(system_long_wq, &br->mcast_gc_work);
644 }
645 
646 static void br_multicast_group_expired(struct timer_list *t)
647 {
648 	struct net_bridge_mdb_entry *mp = timer_container_of(mp, t, timer);
649 	struct net_bridge *br = mp->br;
650 
651 	spin_lock(&br->multicast_lock);
652 	if (hlist_unhashed(&mp->mdb_node) || !netif_running(br->dev) ||
653 	    timer_pending(&mp->timer))
654 		goto out;
655 
656 	br_multicast_host_leave(mp, true);
657 
658 	if (mp->ports)
659 		goto out;
660 	br_multicast_del_mdb_entry(mp);
661 out:
662 	spin_unlock(&br->multicast_lock);
663 }
664 
665 static void br_multicast_destroy_group_src(struct net_bridge_mcast_gc *gc)
666 {
667 	struct net_bridge_group_src *src;
668 
669 	src = container_of(gc, struct net_bridge_group_src, mcast_gc);
670 	WARN_ON(!hlist_unhashed(&src->node));
671 
672 	timer_shutdown_sync(&src->timer);
673 	kfree_rcu(src, rcu);
674 }
675 
676 void __br_multicast_del_group_src(struct net_bridge_group_src *src)
677 {
678 	struct net_bridge *br = src->pg->key.port->br;
679 
680 	hlist_del_init_rcu(&src->node);
681 	src->pg->src_ents--;
682 	hlist_add_head(&src->mcast_gc.gc_node, &br->mcast_gc_list);
683 	queue_work(system_long_wq, &br->mcast_gc_work);
684 }
685 
686 void br_multicast_del_group_src(struct net_bridge_group_src *src,
687 				bool fastleave)
688 {
689 	br_multicast_fwd_src_remove(src, fastleave);
690 	__br_multicast_del_group_src(src);
691 }
692 
693 static int
694 br_multicast_port_ngroups_inc_one(struct net_bridge_mcast_port *pmctx,
695 				  struct netlink_ext_ack *extack,
696 				  const char *what)
697 {
698 	u32 max = READ_ONCE(pmctx->mdb_max_entries);
699 	u32 n = READ_ONCE(pmctx->mdb_n_entries);
700 
701 	/* enforce the max limit when it's a port pmctx or a port-vlan pmctx
702 	 * with snooping enabled
703 	 */
704 	if (!br_multicast_port_ctx_vlan_disabled(pmctx) && max && n >= max) {
705 		NL_SET_ERR_MSG_FMT_MOD(extack, "%s is already in %u groups, and mcast_max_groups=%u",
706 				       what, n, max);
707 		return -E2BIG;
708 	}
709 
710 	WRITE_ONCE(pmctx->mdb_n_entries, n + 1);
711 	return 0;
712 }
713 
714 static void br_multicast_port_ngroups_dec_one(struct net_bridge_mcast_port *pmctx)
715 {
716 	u32 n = READ_ONCE(pmctx->mdb_n_entries);
717 
718 	WARN_ON_ONCE(n == 0);
719 	WRITE_ONCE(pmctx->mdb_n_entries, n - 1);
720 }
721 
722 static int br_multicast_port_ngroups_inc(struct net_bridge_port *port,
723 					 const struct br_ip *group,
724 					 struct netlink_ext_ack *extack)
725 {
726 	struct net_bridge_mcast_port *pmctx;
727 	int err;
728 
729 	lockdep_assert_held_once(&port->br->multicast_lock);
730 
731 	/* Always count on the port context. */
732 	err = br_multicast_port_ngroups_inc_one(&port->multicast_ctx, extack,
733 						"Port");
734 	if (err) {
735 		trace_br_mdb_full(port->dev, group);
736 		return err;
737 	}
738 
739 	/* Only count on the VLAN context if VID is given */
740 	if (!group->vid)
741 		return 0;
742 
743 	pmctx = br_multicast_port_vid_to_port_ctx(port, group->vid);
744 	if (!pmctx)
745 		return 0;
746 
747 	err = br_multicast_port_ngroups_inc_one(pmctx, extack, "Port-VLAN");
748 	if (err) {
749 		trace_br_mdb_full(port->dev, group);
750 		goto dec_one_out;
751 	}
752 
753 	return 0;
754 
755 dec_one_out:
756 	br_multicast_port_ngroups_dec_one(&port->multicast_ctx);
757 	return err;
758 }
759 
760 static void br_multicast_port_ngroups_dec(struct net_bridge_port *port, u16 vid)
761 {
762 	struct net_bridge_mcast_port *pmctx;
763 
764 	lockdep_assert_held_once(&port->br->multicast_lock);
765 
766 	if (vid) {
767 		pmctx = br_multicast_port_vid_to_port_ctx(port, vid);
768 		if (pmctx)
769 			br_multicast_port_ngroups_dec_one(pmctx);
770 	}
771 	br_multicast_port_ngroups_dec_one(&port->multicast_ctx);
772 }
773 
774 u32 br_multicast_ngroups_get(const struct net_bridge_mcast_port *pmctx)
775 {
776 	return READ_ONCE(pmctx->mdb_n_entries);
777 }
778 
779 void br_multicast_ngroups_set_max(struct net_bridge_mcast_port *pmctx, u32 max)
780 {
781 	WRITE_ONCE(pmctx->mdb_max_entries, max);
782 }
783 
784 u32 br_multicast_ngroups_get_max(const struct net_bridge_mcast_port *pmctx)
785 {
786 	return READ_ONCE(pmctx->mdb_max_entries);
787 }
788 
789 static void br_multicast_destroy_port_group(struct net_bridge_mcast_gc *gc)
790 {
791 	struct net_bridge_port_group *pg;
792 
793 	pg = container_of(gc, struct net_bridge_port_group, mcast_gc);
794 	WARN_ON(!hlist_unhashed(&pg->mglist));
795 	WARN_ON(!hlist_empty(&pg->src_list));
796 
797 	timer_shutdown_sync(&pg->rexmit_timer);
798 	timer_shutdown_sync(&pg->timer);
799 	kfree_rcu(pg, rcu);
800 }
801 
802 void br_multicast_del_pg(struct net_bridge_mdb_entry *mp,
803 			 struct net_bridge_port_group *pg,
804 			 struct net_bridge_port_group __rcu **pp)
805 {
806 	struct net_bridge *br = pg->key.port->br;
807 	struct net_bridge_group_src *ent;
808 	struct hlist_node *tmp;
809 
810 	rcu_assign_pointer(*pp, pg->next);
811 	/* Keep ->next (held under multicast_lock, freed later by the GC work):
812 	 * a port->mglist teardown walk may have latched this node as its next,
813 	 * and deleting other groups of the same port must not truncate it.
814 	 */
815 	hlist_del_init_rcu(&pg->mglist);
816 	br_multicast_eht_clean_sets(pg);
817 	hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
818 		br_multicast_del_group_src(ent, false);
819 	br_mdb_notify(br->dev, mp, pg, RTM_DELMDB);
820 	if (!br_multicast_is_star_g(&mp->addr)) {
821 		rhashtable_remove_fast(&br->sg_port_tbl, &pg->rhnode,
822 				       br_sg_port_rht_params);
823 		br_multicast_sg_del_exclude_ports(mp);
824 	} else {
825 		br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
826 	}
827 	br_multicast_port_ngroups_dec(pg->key.port, pg->key.addr.vid);
828 	hlist_add_head(&pg->mcast_gc.gc_node, &br->mcast_gc_list);
829 	queue_work(system_long_wq, &br->mcast_gc_work);
830 
831 	if (!mp->ports && !mp->host_joined && netif_running(br->dev))
832 		mod_timer(&mp->timer, jiffies);
833 }
834 
835 static void br_multicast_find_del_pg(struct net_bridge *br,
836 				     struct net_bridge_port_group *pg)
837 {
838 	struct net_bridge_port_group __rcu **pp;
839 	struct net_bridge_mdb_entry *mp;
840 	struct net_bridge_port_group *p;
841 
842 	/* A teardown walk over port->mglist can reach a group that an earlier
843 	 * iteration already deleted as a side effect. It is off mp->ports by
844 	 * now, so skip it instead of falling through to the WARN_ON() below.
845 	 */
846 	if (hlist_unhashed(&pg->mglist))
847 		return;
848 
849 	mp = br_mdb_ip_get(br, &pg->key.addr);
850 	if (WARN_ON(!mp))
851 		return;
852 
853 	for (pp = &mp->ports;
854 	     (p = mlock_dereference(*pp, br)) != NULL;
855 	     pp = &p->next) {
856 		if (p != pg)
857 			continue;
858 
859 		br_multicast_del_pg(mp, pg, pp);
860 		return;
861 	}
862 
863 	WARN_ON(1);
864 }
865 
866 static void br_multicast_port_group_expired(struct timer_list *t)
867 {
868 	struct net_bridge_port_group *pg = timer_container_of(pg, t, timer);
869 	struct net_bridge_group_src *src_ent;
870 	struct net_bridge *br = pg->key.port->br;
871 	struct hlist_node *tmp;
872 	bool changed;
873 
874 	spin_lock(&br->multicast_lock);
875 	if (!netif_running(br->dev) || timer_pending(&pg->timer) ||
876 	    hlist_unhashed(&pg->mglist) || pg->flags & MDB_PG_FLAGS_PERMANENT)
877 		goto out;
878 
879 	changed = !!(pg->filter_mode == MCAST_EXCLUDE);
880 	pg->filter_mode = MCAST_INCLUDE;
881 	hlist_for_each_entry_safe(src_ent, tmp, &pg->src_list, node) {
882 		if (!timer_pending(&src_ent->timer)) {
883 			br_multicast_del_group_src(src_ent, false);
884 			changed = true;
885 		}
886 	}
887 
888 	if (hlist_empty(&pg->src_list)) {
889 		br_multicast_find_del_pg(br, pg);
890 	} else if (changed) {
891 		struct net_bridge_mdb_entry *mp = br_mdb_ip_get(br, &pg->key.addr);
892 
893 		if (changed && br_multicast_is_star_g(&pg->key.addr))
894 			br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
895 
896 		if (WARN_ON(!mp))
897 			goto out;
898 		br_mdb_notify(br->dev, mp, pg, RTM_NEWMDB);
899 	}
900 out:
901 	spin_unlock(&br->multicast_lock);
902 }
903 
904 static void br_multicast_gc(struct hlist_head *head)
905 {
906 	struct net_bridge_mcast_gc *gcent;
907 	struct hlist_node *tmp;
908 
909 	hlist_for_each_entry_safe(gcent, tmp, head, gc_node) {
910 		hlist_del_init(&gcent->gc_node);
911 		gcent->destroy(gcent);
912 	}
913 }
914 
915 static void __br_multicast_query_handle_vlan(struct net_bridge_mcast *brmctx,
916 					     struct net_bridge_mcast_port *pmctx,
917 					     struct sk_buff *skb)
918 {
919 	struct net_bridge_vlan *vlan = NULL;
920 
921 	if (pmctx && br_multicast_port_ctx_is_vlan(pmctx))
922 		vlan = pmctx->vlan;
923 	else if (br_multicast_ctx_is_vlan(brmctx))
924 		vlan = brmctx->vlan;
925 
926 	if (vlan && !(vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED)) {
927 		u16 vlan_proto;
928 
929 		if (br_vlan_get_proto(brmctx->br->dev, &vlan_proto) != 0)
930 			return;
931 		__vlan_hwaccel_put_tag(skb, htons(vlan_proto), vlan->vid);
932 	}
933 }
934 
935 static struct sk_buff *br_ip4_multicast_alloc_query(struct net_bridge_mcast *brmctx,
936 						    struct net_bridge_mcast_port *pmctx,
937 						    struct net_bridge_port_group *pg,
938 						    __be32 ip_dst, __be32 group,
939 						    bool with_srcs, bool over_lmqt,
940 						    u8 sflag,
941 						    bool *need_rexmit)
942 {
943 	struct net_bridge_port *p = pg ? pg->key.port : NULL;
944 	struct net_bridge_group_src *ent;
945 	size_t pkt_size, igmp_hdr_size;
946 	unsigned long now = jiffies;
947 	struct igmpv3_query *ihv3;
948 	unsigned long lmqt, mrt;
949 	void *csum_start = NULL;
950 	__sum16 *csum = NULL;
951 	struct sk_buff *skb;
952 	struct igmphdr *ih;
953 	struct ethhdr *eth;
954 	struct iphdr *iph;
955 	u16 lmqt_srcs = 0;
956 
957 	igmp_hdr_size = sizeof(*ih);
958 	if (brmctx->multicast_igmp_version == 3) {
959 		igmp_hdr_size = sizeof(*ihv3);
960 		if (pg && with_srcs) {
961 			lmqt = now + (brmctx->multicast_last_member_interval *
962 				      brmctx->multicast_last_member_count);
963 			hlist_for_each_entry(ent, &pg->src_list, node) {
964 				if (over_lmqt == time_after(ent->timer.expires,
965 							    lmqt) &&
966 				    ent->src_query_rexmit_cnt > 0)
967 					lmqt_srcs++;
968 			}
969 
970 			if (!lmqt_srcs)
971 				return NULL;
972 			igmp_hdr_size += lmqt_srcs * sizeof(__be32);
973 		}
974 	}
975 
976 	pkt_size = sizeof(*eth) + sizeof(*iph) + 4 + igmp_hdr_size;
977 	if ((p && pkt_size > p->dev->mtu) ||
978 	    pkt_size > brmctx->br->dev->mtu)
979 		return NULL;
980 
981 	skb = netdev_alloc_skb_ip_align(brmctx->br->dev, pkt_size);
982 	if (!skb)
983 		goto out;
984 
985 	__br_multicast_query_handle_vlan(brmctx, pmctx, skb);
986 	skb->protocol = htons(ETH_P_IP);
987 
988 	skb_reset_mac_header(skb);
989 	eth = eth_hdr(skb);
990 
991 	ether_addr_copy(eth->h_source, brmctx->br->dev->dev_addr);
992 	ip_eth_mc_map(ip_dst, eth->h_dest);
993 	eth->h_proto = htons(ETH_P_IP);
994 	skb_put(skb, sizeof(*eth));
995 
996 	skb_set_network_header(skb, skb->len);
997 	iph = ip_hdr(skb);
998 	iph->tot_len = htons(pkt_size - sizeof(*eth));
999 
1000 	iph->version = 4;
1001 	iph->ihl = 6;
1002 	iph->tos = 0xc0;
1003 	iph->id = 0;
1004 	iph->frag_off = htons(IP_DF);
1005 	iph->ttl = 1;
1006 	iph->protocol = IPPROTO_IGMP;
1007 	iph->saddr = br_opt_get(brmctx->br, BROPT_MULTICAST_QUERY_USE_IFADDR) ?
1008 		     inet_select_addr(brmctx->br->dev, 0, RT_SCOPE_LINK) : 0;
1009 	iph->daddr = ip_dst;
1010 	((u8 *)&iph[1])[0] = IPOPT_RA;
1011 	((u8 *)&iph[1])[1] = 4;
1012 	((u8 *)&iph[1])[2] = 0;
1013 	((u8 *)&iph[1])[3] = 0;
1014 	ip_send_check(iph);
1015 	skb_put(skb, 24);
1016 
1017 	skb_set_transport_header(skb, skb->len);
1018 	mrt = group ? brmctx->multicast_last_member_interval :
1019 		      brmctx->multicast_query_response_interval;
1020 
1021 	switch (brmctx->multicast_igmp_version) {
1022 	case 2:
1023 		ih = igmp_hdr(skb);
1024 		ih->type = IGMP_HOST_MEMBERSHIP_QUERY;
1025 		ih->code = mrt / (HZ / IGMP_TIMER_SCALE);
1026 		ih->group = group;
1027 		ih->csum = 0;
1028 		csum = &ih->csum;
1029 		csum_start = (void *)ih;
1030 		break;
1031 	case 3:
1032 		ihv3 = igmpv3_query_hdr(skb);
1033 		ihv3->type = IGMP_HOST_MEMBERSHIP_QUERY;
1034 		ihv3->code = igmpv3_mrc(mrt / (HZ / IGMP_TIMER_SCALE));
1035 		ihv3->group = group;
1036 		ihv3->qqic = igmpv3_qqic(brmctx->multicast_query_interval / HZ);
1037 		ihv3->nsrcs = htons(lmqt_srcs);
1038 		ihv3->resv = 0;
1039 		ihv3->suppress = sflag;
1040 		ihv3->qrv = 2;
1041 		ihv3->csum = 0;
1042 		csum = &ihv3->csum;
1043 		csum_start = (void *)ihv3;
1044 		if (!pg || !with_srcs)
1045 			break;
1046 
1047 		lmqt_srcs = 0;
1048 		hlist_for_each_entry(ent, &pg->src_list, node) {
1049 			if (over_lmqt == time_after(ent->timer.expires,
1050 						    lmqt) &&
1051 			    ent->src_query_rexmit_cnt > 0) {
1052 				ihv3->srcs[lmqt_srcs++] = ent->addr.src.ip4;
1053 				ent->src_query_rexmit_cnt--;
1054 				if (need_rexmit && ent->src_query_rexmit_cnt)
1055 					*need_rexmit = true;
1056 			}
1057 		}
1058 		if (WARN_ON(lmqt_srcs != ntohs(ihv3->nsrcs))) {
1059 			kfree_skb(skb);
1060 			return NULL;
1061 		}
1062 		break;
1063 	}
1064 
1065 	if (WARN_ON(!csum || !csum_start)) {
1066 		kfree_skb(skb);
1067 		return NULL;
1068 	}
1069 
1070 	*csum = ip_compute_csum(csum_start, igmp_hdr_size);
1071 	skb_put(skb, igmp_hdr_size);
1072 	__skb_pull(skb, sizeof(*eth));
1073 
1074 out:
1075 	return skb;
1076 }
1077 
1078 #if IS_ENABLED(CONFIG_IPV6)
1079 static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge_mcast *brmctx,
1080 						    struct net_bridge_mcast_port *pmctx,
1081 						    struct net_bridge_port_group *pg,
1082 						    const struct in6_addr *ip6_dst,
1083 						    const struct in6_addr *group,
1084 						    bool with_srcs, bool over_llqt,
1085 						    u8 sflag,
1086 						    bool *need_rexmit)
1087 {
1088 	struct net_bridge_port *p = pg ? pg->key.port : NULL;
1089 	struct net_bridge_group_src *ent;
1090 	size_t pkt_size, mld_hdr_size;
1091 	unsigned long now = jiffies;
1092 	struct mld2_query *mld2q;
1093 	void *csum_start = NULL;
1094 	unsigned long interval;
1095 	__sum16 *csum = NULL;
1096 	struct ipv6hdr *ip6h;
1097 	struct mld_msg *mldq;
1098 	struct sk_buff *skb;
1099 	unsigned long llqt;
1100 	struct ethhdr *eth;
1101 	u16 llqt_srcs = 0;
1102 	u8 *hopopt;
1103 
1104 	mld_hdr_size = sizeof(*mldq);
1105 	if (brmctx->multicast_mld_version == 2) {
1106 		mld_hdr_size = sizeof(*mld2q);
1107 		if (pg && with_srcs) {
1108 			llqt = now + (brmctx->multicast_last_member_interval *
1109 				      brmctx->multicast_last_member_count);
1110 			hlist_for_each_entry(ent, &pg->src_list, node) {
1111 				if (over_llqt == time_after(ent->timer.expires,
1112 							    llqt) &&
1113 				    ent->src_query_rexmit_cnt > 0)
1114 					llqt_srcs++;
1115 			}
1116 
1117 			if (!llqt_srcs)
1118 				return NULL;
1119 			mld_hdr_size += llqt_srcs * sizeof(struct in6_addr);
1120 		}
1121 	}
1122 
1123 	pkt_size = sizeof(*eth) + sizeof(*ip6h) + 8 + mld_hdr_size;
1124 	if ((p && pkt_size > p->dev->mtu) ||
1125 	    pkt_size > brmctx->br->dev->mtu)
1126 		return NULL;
1127 
1128 	skb = netdev_alloc_skb_ip_align(brmctx->br->dev, pkt_size);
1129 	if (!skb)
1130 		goto out;
1131 
1132 	__br_multicast_query_handle_vlan(brmctx, pmctx, skb);
1133 	skb->protocol = htons(ETH_P_IPV6);
1134 
1135 	/* Ethernet header */
1136 	skb_reset_mac_header(skb);
1137 	eth = eth_hdr(skb);
1138 
1139 	ether_addr_copy(eth->h_source, brmctx->br->dev->dev_addr);
1140 	eth->h_proto = htons(ETH_P_IPV6);
1141 	skb_put(skb, sizeof(*eth));
1142 
1143 	/* IPv6 header + HbH option */
1144 	skb_set_network_header(skb, skb->len);
1145 	ip6h = ipv6_hdr(skb);
1146 
1147 	*(__force __be32 *)ip6h = htonl(0x60000000);
1148 	ip6h->payload_len = htons(8 + mld_hdr_size);
1149 	ip6h->nexthdr = IPPROTO_HOPOPTS;
1150 	ip6h->hop_limit = 1;
1151 	ip6h->daddr = *ip6_dst;
1152 	if (ipv6_dev_get_saddr(dev_net(brmctx->br->dev), brmctx->br->dev,
1153 			       &ip6h->daddr, 0, &ip6h->saddr)) {
1154 		kfree_skb(skb);
1155 		br_opt_toggle(brmctx->br, BROPT_HAS_IPV6_ADDR, false);
1156 		return NULL;
1157 	}
1158 
1159 	br_opt_toggle(brmctx->br, BROPT_HAS_IPV6_ADDR, true);
1160 	ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest);
1161 
1162 	hopopt = (u8 *)(ip6h + 1);
1163 	hopopt[0] = IPPROTO_ICMPV6;		/* next hdr */
1164 	hopopt[1] = 0;				/* length of HbH */
1165 	hopopt[2] = IPV6_TLV_ROUTERALERT;	/* Router Alert */
1166 	hopopt[3] = 2;				/* Length of RA Option */
1167 	hopopt[4] = 0;				/* Type = 0x0000 (MLD) */
1168 	hopopt[5] = 0;
1169 	hopopt[6] = IPV6_TLV_PAD1;		/* Pad1 */
1170 	hopopt[7] = IPV6_TLV_PAD1;		/* Pad1 */
1171 
1172 	skb_put(skb, sizeof(*ip6h) + 8);
1173 
1174 	/* ICMPv6 */
1175 	skb_set_transport_header(skb, skb->len);
1176 	interval = ipv6_addr_any(group) ?
1177 			brmctx->multicast_query_response_interval :
1178 			brmctx->multicast_last_member_interval;
1179 	switch (brmctx->multicast_mld_version) {
1180 	case 1:
1181 		mldq = (struct mld_msg *)icmp6_hdr(skb);
1182 		mldq->mld_type = ICMPV6_MGM_QUERY;
1183 		mldq->mld_code = 0;
1184 		mldq->mld_cksum = 0;
1185 		mldq->mld_maxdelay = htons((u16)jiffies_to_msecs(interval));
1186 		mldq->mld_reserved = 0;
1187 		mldq->mld_mca = *group;
1188 		csum = &mldq->mld_cksum;
1189 		csum_start = (void *)mldq;
1190 		break;
1191 	case 2:
1192 		mld2q = (struct mld2_query *)icmp6_hdr(skb);
1193 		mld2q->mld2q_mrc = htons(mldv2_mrc(jiffies_to_msecs(interval)));
1194 		mld2q->mld2q_type = ICMPV6_MGM_QUERY;
1195 		mld2q->mld2q_code = 0;
1196 		mld2q->mld2q_cksum = 0;
1197 		mld2q->mld2q_resv1 = 0;
1198 		mld2q->mld2q_resv2 = 0;
1199 		mld2q->mld2q_suppress = sflag;
1200 		mld2q->mld2q_qrv = 2;
1201 		mld2q->mld2q_nsrcs = htons(llqt_srcs);
1202 		mld2q->mld2q_qqic = mldv2_qqic(brmctx->multicast_query_interval / HZ);
1203 		mld2q->mld2q_mca = *group;
1204 		csum = &mld2q->mld2q_cksum;
1205 		csum_start = (void *)mld2q;
1206 		if (!pg || !with_srcs)
1207 			break;
1208 
1209 		llqt_srcs = 0;
1210 		hlist_for_each_entry(ent, &pg->src_list, node) {
1211 			if (over_llqt == time_after(ent->timer.expires,
1212 						    llqt) &&
1213 			    ent->src_query_rexmit_cnt > 0) {
1214 				mld2q->mld2q_srcs[llqt_srcs++] = ent->addr.src.ip6;
1215 				ent->src_query_rexmit_cnt--;
1216 				if (need_rexmit && ent->src_query_rexmit_cnt)
1217 					*need_rexmit = true;
1218 			}
1219 		}
1220 		if (WARN_ON(llqt_srcs != ntohs(mld2q->mld2q_nsrcs))) {
1221 			kfree_skb(skb);
1222 			return NULL;
1223 		}
1224 		break;
1225 	}
1226 
1227 	if (WARN_ON(!csum || !csum_start)) {
1228 		kfree_skb(skb);
1229 		return NULL;
1230 	}
1231 
1232 	*csum = csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, mld_hdr_size,
1233 				IPPROTO_ICMPV6,
1234 				csum_partial(csum_start, mld_hdr_size, 0));
1235 	skb_put(skb, mld_hdr_size);
1236 	__skb_pull(skb, sizeof(*eth));
1237 
1238 out:
1239 	return skb;
1240 }
1241 #endif
1242 
1243 static struct sk_buff *br_multicast_alloc_query(struct net_bridge_mcast *brmctx,
1244 						struct net_bridge_mcast_port *pmctx,
1245 						struct net_bridge_port_group *pg,
1246 						struct br_ip *ip_dst,
1247 						struct br_ip *group,
1248 						bool with_srcs, bool over_lmqt,
1249 						u8 sflag, bool *need_rexmit)
1250 {
1251 	__be32 ip4_dst;
1252 
1253 	switch (group->proto) {
1254 	case htons(ETH_P_IP):
1255 		ip4_dst = ip_dst ? ip_dst->dst.ip4 : htonl(INADDR_ALLHOSTS_GROUP);
1256 		return br_ip4_multicast_alloc_query(brmctx, pmctx, pg,
1257 						    ip4_dst, group->dst.ip4,
1258 						    with_srcs, over_lmqt,
1259 						    sflag, need_rexmit);
1260 #if IS_ENABLED(CONFIG_IPV6)
1261 	case htons(ETH_P_IPV6): {
1262 		struct in6_addr ip6_dst;
1263 
1264 		if (ip_dst)
1265 			ip6_dst = ip_dst->dst.ip6;
1266 		else
1267 			ipv6_addr_set(&ip6_dst, htonl(0xff020000), 0, 0,
1268 				      htonl(1));
1269 
1270 		return br_ip6_multicast_alloc_query(brmctx, pmctx, pg,
1271 						    &ip6_dst, &group->dst.ip6,
1272 						    with_srcs, over_lmqt,
1273 						    sflag, need_rexmit);
1274 	}
1275 #endif
1276 	}
1277 	return NULL;
1278 }
1279 
1280 struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br,
1281 						    struct br_ip *group)
1282 {
1283 	struct net_bridge_mdb_entry *mp;
1284 	int err;
1285 
1286 	mp = br_mdb_ip_get(br, group);
1287 	if (mp)
1288 		return mp;
1289 
1290 	if (atomic_read(&br->mdb_hash_tbl.nelems) >= br->hash_max) {
1291 		trace_br_mdb_full(br->dev, group);
1292 		br_mc_disabled_update(br->dev, false, NULL);
1293 		br_opt_toggle(br, BROPT_MULTICAST_ENABLED, false);
1294 		return ERR_PTR(-E2BIG);
1295 	}
1296 
1297 	mp = kzalloc_obj(*mp, GFP_ATOMIC);
1298 	if (unlikely(!mp))
1299 		return ERR_PTR(-ENOMEM);
1300 
1301 	mp->br = br;
1302 	mp->addr = *group;
1303 	mp->mcast_gc.destroy = br_multicast_destroy_mdb_entry;
1304 	timer_setup(&mp->timer, br_multicast_group_expired, 0);
1305 	err = rhashtable_lookup_insert_fast(&br->mdb_hash_tbl, &mp->rhnode,
1306 					    br_mdb_rht_params);
1307 	if (err) {
1308 		kfree(mp);
1309 		mp = ERR_PTR(err);
1310 	} else {
1311 		hlist_add_head_rcu(&mp->mdb_node, &br->mdb_list);
1312 	}
1313 
1314 	return mp;
1315 }
1316 
1317 static void br_multicast_group_src_expired(struct timer_list *t)
1318 {
1319 	struct net_bridge_group_src *src = timer_container_of(src, t, timer);
1320 	struct net_bridge_port_group *pg;
1321 	struct net_bridge *br = src->br;
1322 
1323 	spin_lock(&br->multicast_lock);
1324 	if (hlist_unhashed(&src->node) || !netif_running(br->dev) ||
1325 	    timer_pending(&src->timer))
1326 		goto out;
1327 
1328 	pg = src->pg;
1329 	if (pg->filter_mode == MCAST_INCLUDE) {
1330 		br_multicast_del_group_src(src, false);
1331 		if (!hlist_empty(&pg->src_list))
1332 			goto out;
1333 		br_multicast_find_del_pg(br, pg);
1334 	} else {
1335 		br_multicast_fwd_src_handle(src);
1336 	}
1337 
1338 out:
1339 	spin_unlock(&br->multicast_lock);
1340 }
1341 
1342 struct net_bridge_group_src *
1343 br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip)
1344 {
1345 	struct net_bridge_group_src *ent;
1346 
1347 	switch (ip->proto) {
1348 	case htons(ETH_P_IP):
1349 		hlist_for_each_entry(ent, &pg->src_list, node)
1350 			if (ip->src.ip4 == ent->addr.src.ip4)
1351 				return ent;
1352 		break;
1353 #if IS_ENABLED(CONFIG_IPV6)
1354 	case htons(ETH_P_IPV6):
1355 		hlist_for_each_entry(ent, &pg->src_list, node)
1356 			if (!ipv6_addr_cmp(&ent->addr.src.ip6, &ip->src.ip6))
1357 				return ent;
1358 		break;
1359 #endif
1360 	}
1361 
1362 	return NULL;
1363 }
1364 
1365 struct net_bridge_group_src *
1366 br_multicast_new_group_src(struct net_bridge_port_group *pg, struct br_ip *src_ip)
1367 {
1368 	struct net_bridge_group_src *grp_src;
1369 
1370 	if (unlikely(pg->src_ents >= PG_SRC_ENT_LIMIT))
1371 		return NULL;
1372 
1373 	switch (src_ip->proto) {
1374 	case htons(ETH_P_IP):
1375 		if (ipv4_is_zeronet(src_ip->src.ip4) ||
1376 		    ipv4_is_multicast(src_ip->src.ip4))
1377 			return NULL;
1378 		break;
1379 #if IS_ENABLED(CONFIG_IPV6)
1380 	case htons(ETH_P_IPV6):
1381 		if (ipv6_addr_any(&src_ip->src.ip6) ||
1382 		    ipv6_addr_is_multicast(&src_ip->src.ip6))
1383 			return NULL;
1384 		break;
1385 #endif
1386 	}
1387 
1388 	grp_src = kzalloc_obj(*grp_src, GFP_ATOMIC);
1389 	if (unlikely(!grp_src))
1390 		return NULL;
1391 
1392 	grp_src->pg = pg;
1393 	grp_src->br = pg->key.port->br;
1394 	grp_src->addr = *src_ip;
1395 	grp_src->mcast_gc.destroy = br_multicast_destroy_group_src;
1396 	timer_setup(&grp_src->timer, br_multicast_group_src_expired, 0);
1397 
1398 	hlist_add_head_rcu(&grp_src->node, &pg->src_list);
1399 	pg->src_ents++;
1400 
1401 	return grp_src;
1402 }
1403 
1404 struct net_bridge_port_group *br_multicast_new_port_group(
1405 			struct net_bridge_port *port,
1406 			const struct br_ip *group,
1407 			struct net_bridge_port_group __rcu *next,
1408 			unsigned char flags,
1409 			const unsigned char *src,
1410 			u8 filter_mode,
1411 			u8 rt_protocol,
1412 			struct netlink_ext_ack *extack)
1413 {
1414 	struct net_bridge_port_group *p;
1415 	int err;
1416 
1417 	err = br_multicast_port_ngroups_inc(port, group, extack);
1418 	if (err)
1419 		return NULL;
1420 
1421 	p = kzalloc_obj(*p, GFP_ATOMIC);
1422 	if (unlikely(!p)) {
1423 		NL_SET_ERR_MSG_MOD(extack, "Couldn't allocate new port group");
1424 		goto dec_out;
1425 	}
1426 
1427 	p->key.addr = *group;
1428 	p->key.port = port;
1429 	p->flags = flags;
1430 	p->filter_mode = filter_mode;
1431 	p->rt_protocol = rt_protocol;
1432 	p->eht_host_tree = RB_ROOT;
1433 	p->eht_set_tree = RB_ROOT;
1434 	p->mcast_gc.destroy = br_multicast_destroy_port_group;
1435 	INIT_HLIST_HEAD(&p->src_list);
1436 
1437 	if (!br_multicast_is_star_g(group) &&
1438 	    rhashtable_lookup_insert_fast(&port->br->sg_port_tbl, &p->rhnode,
1439 					  br_sg_port_rht_params)) {
1440 		NL_SET_ERR_MSG_MOD(extack, "Couldn't insert new port group");
1441 		goto free_out;
1442 	}
1443 
1444 	rcu_assign_pointer(p->next, next);
1445 	timer_setup(&p->timer, br_multicast_port_group_expired, 0);
1446 	timer_setup(&p->rexmit_timer, br_multicast_port_group_rexmit, 0);
1447 	hlist_add_head(&p->mglist, &port->mglist);
1448 
1449 	if (src)
1450 		memcpy(p->eth_addr, src, ETH_ALEN);
1451 	else
1452 		eth_broadcast_addr(p->eth_addr);
1453 
1454 	return p;
1455 
1456 free_out:
1457 	kfree(p);
1458 dec_out:
1459 	br_multicast_port_ngroups_dec(port, group->vid);
1460 	return NULL;
1461 }
1462 
1463 void br_multicast_del_port_group(struct net_bridge_port_group *p)
1464 {
1465 	struct net_bridge_port *port = p->key.port;
1466 	__u16 vid = p->key.addr.vid;
1467 
1468 	hlist_del_init(&p->mglist);
1469 	if (!br_multicast_is_star_g(&p->key.addr))
1470 		rhashtable_remove_fast(&port->br->sg_port_tbl, &p->rhnode,
1471 				       br_sg_port_rht_params);
1472 	kfree(p);
1473 	br_multicast_port_ngroups_dec(port, vid);
1474 }
1475 
1476 void br_multicast_host_join(const struct net_bridge_mcast *brmctx,
1477 			    struct net_bridge_mdb_entry *mp, bool notify)
1478 {
1479 	if (!mp->host_joined) {
1480 		mp->host_joined = true;
1481 		if (br_multicast_is_star_g(&mp->addr))
1482 			br_multicast_star_g_host_state(mp);
1483 		if (notify)
1484 			br_mdb_notify(mp->br->dev, mp, NULL, RTM_NEWMDB);
1485 	}
1486 
1487 	if (br_group_is_l2(&mp->addr))
1488 		return;
1489 
1490 	mod_timer(&mp->timer, jiffies + brmctx->multicast_membership_interval);
1491 }
1492 
1493 void br_multicast_host_leave(struct net_bridge_mdb_entry *mp, bool notify)
1494 {
1495 	if (!mp->host_joined)
1496 		return;
1497 
1498 	mp->host_joined = false;
1499 	if (br_multicast_is_star_g(&mp->addr))
1500 		br_multicast_star_g_host_state(mp);
1501 	if (notify)
1502 		br_mdb_notify(mp->br->dev, mp, NULL, RTM_DELMDB);
1503 }
1504 
1505 static struct net_bridge_port_group *
1506 __br_multicast_add_group(struct net_bridge_mcast *brmctx,
1507 			 struct net_bridge_mcast_port *pmctx,
1508 			 struct br_ip *group,
1509 			 const unsigned char *src,
1510 			 u8 filter_mode,
1511 			 bool igmpv2_mldv1,
1512 			 bool blocked)
1513 {
1514 	struct net_bridge_port_group __rcu **pp;
1515 	struct net_bridge_port_group *p = NULL;
1516 	struct net_bridge_mdb_entry *mp;
1517 	unsigned long now = jiffies;
1518 
1519 	if (!br_multicast_ctx_should_use(brmctx, pmctx))
1520 		goto out;
1521 
1522 	mp = br_multicast_new_group(brmctx->br, group);
1523 	if (IS_ERR(mp))
1524 		return ERR_CAST(mp);
1525 
1526 	if (!pmctx) {
1527 		br_multicast_host_join(brmctx, mp, true);
1528 		goto out;
1529 	}
1530 
1531 	for (pp = &mp->ports;
1532 	     (p = mlock_dereference(*pp, brmctx->br)) != NULL;
1533 	     pp = &p->next) {
1534 		if (br_port_group_equal(p, pmctx->port, src))
1535 			goto found;
1536 		if ((unsigned long)p->key.port < (unsigned long)pmctx->port)
1537 			break;
1538 	}
1539 
1540 	p = br_multicast_new_port_group(pmctx->port, group, *pp, 0, src,
1541 					filter_mode, RTPROT_KERNEL, NULL);
1542 	if (unlikely(!p)) {
1543 		p = ERR_PTR(-ENOMEM);
1544 		goto out;
1545 	}
1546 	rcu_assign_pointer(*pp, p);
1547 	if (blocked)
1548 		p->flags |= MDB_PG_FLAGS_BLOCKED;
1549 	br_mdb_notify(brmctx->br->dev, mp, p, RTM_NEWMDB);
1550 
1551 found:
1552 	if (igmpv2_mldv1)
1553 		mod_timer(&p->timer,
1554 			  now + brmctx->multicast_membership_interval);
1555 
1556 out:
1557 	return p;
1558 }
1559 
1560 static int br_multicast_add_group(struct net_bridge_mcast *brmctx,
1561 				  struct net_bridge_mcast_port *pmctx,
1562 				  struct br_ip *group,
1563 				  const unsigned char *src,
1564 				  u8 filter_mode,
1565 				  bool igmpv2_mldv1)
1566 {
1567 	struct net_bridge_port_group *pg;
1568 	int err;
1569 
1570 	spin_lock(&brmctx->br->multicast_lock);
1571 	pg = __br_multicast_add_group(brmctx, pmctx, group, src, filter_mode,
1572 				      igmpv2_mldv1, false);
1573 	/* NULL is considered valid for host joined groups */
1574 	err = PTR_ERR_OR_ZERO(pg);
1575 	spin_unlock(&brmctx->br->multicast_lock);
1576 
1577 	return err;
1578 }
1579 
1580 static int br_ip4_multicast_add_group(struct net_bridge_mcast *brmctx,
1581 				      struct net_bridge_mcast_port *pmctx,
1582 				      __be32 group,
1583 				      __u16 vid,
1584 				      const unsigned char *src,
1585 				      bool igmpv2)
1586 {
1587 	struct br_ip br_group;
1588 	u8 filter_mode;
1589 
1590 	if (ipv4_is_local_multicast(group))
1591 		return 0;
1592 
1593 	memset(&br_group, 0, sizeof(br_group));
1594 	br_group.dst.ip4 = group;
1595 	br_group.proto = htons(ETH_P_IP);
1596 	br_group.vid = vid;
1597 	filter_mode = igmpv2 ? MCAST_EXCLUDE : MCAST_INCLUDE;
1598 
1599 	return br_multicast_add_group(brmctx, pmctx, &br_group, src,
1600 				      filter_mode, igmpv2);
1601 }
1602 
1603 #if IS_ENABLED(CONFIG_IPV6)
1604 static int br_ip6_multicast_add_group(struct net_bridge_mcast *brmctx,
1605 				      struct net_bridge_mcast_port *pmctx,
1606 				      const struct in6_addr *group,
1607 				      __u16 vid,
1608 				      const unsigned char *src,
1609 				      bool mldv1)
1610 {
1611 	struct br_ip br_group;
1612 	u8 filter_mode;
1613 
1614 	if (ipv6_addr_is_ll_all_nodes(group))
1615 		return 0;
1616 
1617 	memset(&br_group, 0, sizeof(br_group));
1618 	br_group.dst.ip6 = *group;
1619 	br_group.proto = htons(ETH_P_IPV6);
1620 	br_group.vid = vid;
1621 	filter_mode = mldv1 ? MCAST_EXCLUDE : MCAST_INCLUDE;
1622 
1623 	return br_multicast_add_group(brmctx, pmctx, &br_group, src,
1624 				      filter_mode, mldv1);
1625 }
1626 #endif
1627 
1628 static bool br_multicast_rport_del(struct hlist_node *rlist)
1629 {
1630 	if (hlist_unhashed(rlist))
1631 		return false;
1632 
1633 	hlist_del_init_rcu(rlist);
1634 	return true;
1635 }
1636 
1637 static bool br_ip4_multicast_rport_del(struct net_bridge_mcast_port *pmctx)
1638 {
1639 	return br_multicast_rport_del(&pmctx->ip4_rlist);
1640 }
1641 
1642 static bool br_ip6_multicast_rport_del(struct net_bridge_mcast_port *pmctx)
1643 {
1644 #if IS_ENABLED(CONFIG_IPV6)
1645 	return br_multicast_rport_del(&pmctx->ip6_rlist);
1646 #else
1647 	return false;
1648 #endif
1649 }
1650 
1651 static void br_multicast_router_expired(struct net_bridge_mcast_port *pmctx,
1652 					struct timer_list *t,
1653 					struct hlist_node *rlist)
1654 {
1655 	struct net_bridge *br = pmctx->port->br;
1656 	bool del;
1657 
1658 	spin_lock(&br->multicast_lock);
1659 	if (pmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
1660 	    pmctx->multicast_router == MDB_RTR_TYPE_PERM ||
1661 	    timer_pending(t))
1662 		goto out;
1663 
1664 	del = br_multicast_rport_del(rlist);
1665 	br_multicast_rport_del_notify(pmctx, del);
1666 out:
1667 	spin_unlock(&br->multicast_lock);
1668 }
1669 
1670 static void br_ip4_multicast_router_expired(struct timer_list *t)
1671 {
1672 	struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
1673 								 ip4_mc_router_timer);
1674 
1675 	br_multicast_router_expired(pmctx, t, &pmctx->ip4_rlist);
1676 }
1677 
1678 #if IS_ENABLED(CONFIG_IPV6)
1679 static void br_ip6_multicast_router_expired(struct timer_list *t)
1680 {
1681 	struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
1682 								 ip6_mc_router_timer);
1683 
1684 	br_multicast_router_expired(pmctx, t, &pmctx->ip6_rlist);
1685 }
1686 #endif
1687 
1688 static void br_mc_router_state_change(struct net_bridge *p,
1689 				      bool is_mc_router)
1690 {
1691 	struct switchdev_attr attr = {
1692 		.orig_dev = p->dev,
1693 		.id = SWITCHDEV_ATTR_ID_BRIDGE_MROUTER,
1694 		.flags = SWITCHDEV_F_DEFER,
1695 		.u.mrouter = is_mc_router,
1696 	};
1697 
1698 	switchdev_port_attr_set(p->dev, &attr, NULL);
1699 }
1700 
1701 static void br_multicast_local_router_expired(struct net_bridge_mcast *brmctx,
1702 					      struct timer_list *timer)
1703 {
1704 	spin_lock(&brmctx->br->multicast_lock);
1705 	if (brmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
1706 	    brmctx->multicast_router == MDB_RTR_TYPE_PERM ||
1707 	    br_ip4_multicast_is_router(brmctx) ||
1708 	    br_ip6_multicast_is_router(brmctx))
1709 		goto out;
1710 
1711 	br_mc_router_state_change(brmctx->br, false);
1712 out:
1713 	spin_unlock(&brmctx->br->multicast_lock);
1714 }
1715 
1716 static void br_ip4_multicast_local_router_expired(struct timer_list *t)
1717 {
1718 	struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
1719 							     ip4_mc_router_timer);
1720 
1721 	br_multicast_local_router_expired(brmctx, t);
1722 }
1723 
1724 #if IS_ENABLED(CONFIG_IPV6)
1725 static void br_ip6_multicast_local_router_expired(struct timer_list *t)
1726 {
1727 	struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
1728 							     ip6_mc_router_timer);
1729 
1730 	br_multicast_local_router_expired(brmctx, t);
1731 }
1732 #endif
1733 
1734 static void br_multicast_querier_expired(struct net_bridge_mcast *brmctx,
1735 					 struct bridge_mcast_own_query *query)
1736 {
1737 	spin_lock(&brmctx->br->multicast_lock);
1738 	if (!netif_running(brmctx->br->dev) ||
1739 	    br_multicast_ctx_vlan_global_disabled(brmctx) ||
1740 	    !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED))
1741 		goto out;
1742 
1743 	br_multicast_start_querier(brmctx, query);
1744 
1745 out:
1746 	spin_unlock(&brmctx->br->multicast_lock);
1747 }
1748 
1749 static void br_ip4_multicast_querier_expired(struct timer_list *t)
1750 {
1751 	struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
1752 							     ip4_other_query.timer);
1753 
1754 	br_multicast_querier_expired(brmctx, &brmctx->ip4_own_query);
1755 }
1756 
1757 #if IS_ENABLED(CONFIG_IPV6)
1758 static void br_ip6_multicast_querier_expired(struct timer_list *t)
1759 {
1760 	struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
1761 							     ip6_other_query.timer);
1762 
1763 	br_multicast_querier_expired(brmctx, &brmctx->ip6_own_query);
1764 }
1765 #endif
1766 
1767 static void br_multicast_query_delay_expired(struct timer_list *t)
1768 {
1769 }
1770 
1771 static void br_multicast_select_own_querier(struct net_bridge_mcast *brmctx,
1772 					    struct br_ip *ip,
1773 					    struct sk_buff *skb)
1774 {
1775 	if (ip->proto == htons(ETH_P_IP))
1776 		brmctx->ip4_querier.addr.src.ip4 = ip_hdr(skb)->saddr;
1777 #if IS_ENABLED(CONFIG_IPV6)
1778 	else
1779 		brmctx->ip6_querier.addr.src.ip6 = ipv6_hdr(skb)->saddr;
1780 #endif
1781 }
1782 
1783 static u8 br_multicast_query_type(const struct sk_buff *skb)
1784 {
1785 	return skb->protocol == htons(ETH_P_IP) ? IGMP_HOST_MEMBERSHIP_QUERY :
1786 						  ICMPV6_MGM_QUERY;
1787 }
1788 
1789 static void br_multicast_port_query_queue_work(struct work_struct *work)
1790 {
1791 	struct net_bridge_mcast_port *pmctx;
1792 	struct sk_buff_head list;
1793 	struct sk_buff *skb;
1794 
1795 	pmctx = container_of(work, struct net_bridge_mcast_port,
1796 			     query_queue_work);
1797 
1798 	__skb_queue_head_init(&list);
1799 	spin_lock_bh(&pmctx->query_queue.lock);
1800 	skb_queue_splice_tail_init(&pmctx->query_queue, &list);
1801 	spin_unlock_bh(&pmctx->query_queue.lock);
1802 
1803 	while ((skb = __skb_dequeue(&list))) {
1804 		u8 query_type = br_multicast_query_type(skb);
1805 
1806 		local_bh_disable();
1807 		br_multicast_count(pmctx->port->br, pmctx->port, skb,
1808 				   query_type, BR_MCAST_DIR_TX);
1809 		NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, dev_net(skb->dev),
1810 			NULL, skb, NULL, skb->dev, br_dev_queue_push_xmit);
1811 		local_bh_enable();
1812 	}
1813 }
1814 
1815 static void br_multicast_query_queue_work(struct work_struct *work)
1816 {
1817 	struct net_bridge_mcast *brmctx;
1818 	struct sk_buff_head list;
1819 	struct sk_buff *skb;
1820 
1821 	brmctx = container_of(work, struct net_bridge_mcast, query_queue_work);
1822 
1823 	__skb_queue_head_init(&list);
1824 	spin_lock_bh(&brmctx->query_queue.lock);
1825 	skb_queue_splice_tail_init(&brmctx->query_queue, &list);
1826 	spin_unlock_bh(&brmctx->query_queue.lock);
1827 
1828 	while ((skb = __skb_dequeue(&list))) {
1829 		u8 query_type = br_multicast_query_type(skb);
1830 
1831 		local_bh_disable();
1832 		br_multicast_count(brmctx->br, NULL, skb, query_type,
1833 				   BR_MCAST_DIR_RX);
1834 		netif_rx(skb);
1835 		local_bh_enable();
1836 	}
1837 }
1838 
1839 #define BR_MULTICAST_QUERY_QUEUE_LEN_MAX	1000
1840 
1841 static void __br_multicast_send_query(struct net_bridge_mcast *brmctx,
1842 				      struct net_bridge_mcast_port *pmctx,
1843 				      struct net_bridge_port_group *pg,
1844 				      struct br_ip *ip_dst,
1845 				      struct br_ip *group,
1846 				      bool with_srcs,
1847 				      u8 sflag,
1848 				      bool *need_rexmit)
1849 {
1850 	struct sk_buff_head *queue;
1851 	bool over_lmqt = !!sflag;
1852 	struct sk_buff *skb;
1853 
1854 	if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
1855 	    !br_multicast_ctx_matches_vlan_snooping(brmctx))
1856 		return;
1857 
1858 	queue = pmctx ? &pmctx->query_queue : &brmctx->query_queue;
1859 
1860 again_under_lmqt:
1861 	if (skb_queue_len_lockless(queue) >= BR_MULTICAST_QUERY_QUEUE_LEN_MAX)
1862 		return;
1863 
1864 	skb = br_multicast_alloc_query(brmctx, pmctx, pg, ip_dst, group,
1865 				       with_srcs, over_lmqt, sflag,
1866 				       need_rexmit);
1867 	if (!skb)
1868 		return;
1869 
1870 	if (pmctx) {
1871 		skb->dev = pmctx->port->dev;
1872 		skb_queue_tail(queue, skb);
1873 		queue_work(system_highpri_wq, &pmctx->query_queue_work);
1874 
1875 		if (over_lmqt && with_srcs && sflag) {
1876 			over_lmqt = false;
1877 			goto again_under_lmqt;
1878 		}
1879 	} else {
1880 		br_multicast_select_own_querier(brmctx, group, skb);
1881 		skb_queue_tail(queue, skb);
1882 		queue_work(system_highpri_wq, &brmctx->query_queue_work);
1883 	}
1884 }
1885 
1886 static void br_multicast_read_querier(const struct bridge_mcast_querier *querier,
1887 				      struct bridge_mcast_querier *dest)
1888 {
1889 	unsigned int seq;
1890 
1891 	memset(dest, 0, sizeof(*dest));
1892 	do {
1893 		seq = read_seqcount_begin(&querier->seq);
1894 		dest->port_ifidx = querier->port_ifidx;
1895 		memcpy(&dest->addr, &querier->addr, sizeof(struct br_ip));
1896 	} while (read_seqcount_retry(&querier->seq, seq));
1897 }
1898 
1899 static void br_multicast_update_querier(struct net_bridge_mcast *brmctx,
1900 					struct bridge_mcast_querier *querier,
1901 					int ifindex,
1902 					struct br_ip *saddr)
1903 {
1904 	write_seqcount_begin(&querier->seq);
1905 	querier->port_ifidx = ifindex;
1906 	memcpy(&querier->addr, saddr, sizeof(*saddr));
1907 	write_seqcount_end(&querier->seq);
1908 }
1909 
1910 static void br_multicast_send_query(struct net_bridge_mcast *brmctx,
1911 				    struct net_bridge_mcast_port *pmctx,
1912 				    struct bridge_mcast_own_query *own_query)
1913 {
1914 	struct bridge_mcast_other_query *other_query = NULL;
1915 	struct bridge_mcast_querier *querier;
1916 	struct br_ip br_group;
1917 	unsigned long time;
1918 
1919 	if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
1920 	    !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED) ||
1921 	    !brmctx->multicast_querier)
1922 		return;
1923 
1924 	memset(&br_group.dst, 0, sizeof(br_group.dst));
1925 
1926 	if (pmctx ? (own_query == &pmctx->ip4_own_query) :
1927 		    (own_query == &brmctx->ip4_own_query)) {
1928 		querier = &brmctx->ip4_querier;
1929 		other_query = &brmctx->ip4_other_query;
1930 		br_group.proto = htons(ETH_P_IP);
1931 #if IS_ENABLED(CONFIG_IPV6)
1932 	} else {
1933 		querier = &brmctx->ip6_querier;
1934 		other_query = &brmctx->ip6_other_query;
1935 		br_group.proto = htons(ETH_P_IPV6);
1936 #endif
1937 	}
1938 
1939 	if (!other_query || timer_pending(&other_query->timer))
1940 		return;
1941 
1942 	/* we're about to select ourselves as querier */
1943 	if (!pmctx && querier->port_ifidx) {
1944 		struct br_ip zeroip = {};
1945 
1946 		br_multicast_update_querier(brmctx, querier, 0, &zeroip);
1947 	}
1948 
1949 	__br_multicast_send_query(brmctx, pmctx, NULL, NULL, &br_group, false,
1950 				  0, NULL);
1951 
1952 	time = jiffies;
1953 	time += own_query->startup_sent < brmctx->multicast_startup_query_count ?
1954 		brmctx->multicast_startup_query_interval :
1955 		brmctx->multicast_query_interval;
1956 	mod_timer(&own_query->timer, time);
1957 }
1958 
1959 static void
1960 br_multicast_port_query_expired(struct net_bridge_mcast_port *pmctx,
1961 				struct bridge_mcast_own_query *query)
1962 {
1963 	struct net_bridge *br = pmctx->port->br;
1964 	struct net_bridge_mcast *brmctx;
1965 
1966 	spin_lock(&br->multicast_lock);
1967 	if (br_multicast_port_ctx_state_stopped(pmctx))
1968 		goto out;
1969 
1970 	brmctx = br_multicast_port_ctx_get_global(pmctx);
1971 	if (query->startup_sent < brmctx->multicast_startup_query_count)
1972 		query->startup_sent++;
1973 
1974 	br_multicast_send_query(brmctx, pmctx, query);
1975 
1976 out:
1977 	spin_unlock(&br->multicast_lock);
1978 }
1979 
1980 static void br_ip4_multicast_port_query_expired(struct timer_list *t)
1981 {
1982 	struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
1983 								 ip4_own_query.timer);
1984 
1985 	br_multicast_port_query_expired(pmctx, &pmctx->ip4_own_query);
1986 }
1987 
1988 #if IS_ENABLED(CONFIG_IPV6)
1989 static void br_ip6_multicast_port_query_expired(struct timer_list *t)
1990 {
1991 	struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
1992 								 ip6_own_query.timer);
1993 
1994 	br_multicast_port_query_expired(pmctx, &pmctx->ip6_own_query);
1995 }
1996 #endif
1997 
1998 static void br_multicast_port_group_rexmit(struct timer_list *t)
1999 {
2000 	struct net_bridge_port_group *pg = timer_container_of(pg, t,
2001 							      rexmit_timer);
2002 	struct bridge_mcast_other_query *other_query = NULL;
2003 	struct net_bridge *br = pg->key.port->br;
2004 	struct net_bridge_mcast_port *pmctx;
2005 	struct net_bridge_mcast *brmctx;
2006 	bool need_rexmit = false;
2007 
2008 	spin_lock(&br->multicast_lock);
2009 	if (!netif_running(br->dev) || hlist_unhashed(&pg->mglist) ||
2010 	    !br_opt_get(br, BROPT_MULTICAST_ENABLED))
2011 		goto out;
2012 
2013 	pmctx = br_multicast_pg_to_port_ctx(pg);
2014 	if (!pmctx)
2015 		goto out;
2016 	brmctx = br_multicast_port_ctx_get_global(pmctx);
2017 	if (!brmctx->multicast_querier)
2018 		goto out;
2019 
2020 	if (pg->key.addr.proto == htons(ETH_P_IP))
2021 		other_query = &brmctx->ip4_other_query;
2022 #if IS_ENABLED(CONFIG_IPV6)
2023 	else
2024 		other_query = &brmctx->ip6_other_query;
2025 #endif
2026 
2027 	if (!other_query || timer_pending(&other_query->timer))
2028 		goto out;
2029 
2030 	if (pg->grp_query_rexmit_cnt) {
2031 		pg->grp_query_rexmit_cnt--;
2032 		__br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2033 					  &pg->key.addr, false, 1, NULL);
2034 	}
2035 	__br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2036 				  &pg->key.addr, true, 0, &need_rexmit);
2037 
2038 	if (pg->grp_query_rexmit_cnt || need_rexmit)
2039 		mod_timer(&pg->rexmit_timer, jiffies +
2040 					     brmctx->multicast_last_member_interval);
2041 out:
2042 	spin_unlock(&br->multicast_lock);
2043 }
2044 
2045 static int br_mc_disabled_update(struct net_device *dev, bool value,
2046 				 struct netlink_ext_ack *extack)
2047 {
2048 	struct switchdev_attr attr = {
2049 		.orig_dev = dev,
2050 		.id = SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED,
2051 		.flags = SWITCHDEV_F_DEFER,
2052 		.u.mc_disabled = !value,
2053 	};
2054 
2055 	return switchdev_port_attr_set(dev, &attr, extack);
2056 }
2057 
2058 void br_multicast_port_ctx_init(struct net_bridge_port *port,
2059 				struct net_bridge_vlan *vlan,
2060 				struct net_bridge_mcast_port *pmctx)
2061 {
2062 	pmctx->port = port;
2063 	pmctx->vlan = vlan;
2064 	pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
2065 
2066 	skb_queue_head_init(&pmctx->query_queue);
2067 	INIT_WORK(&pmctx->query_queue_work, br_multicast_port_query_queue_work);
2068 
2069 	timer_setup(&pmctx->ip4_mc_router_timer,
2070 		    br_ip4_multicast_router_expired, 0);
2071 	timer_setup(&pmctx->ip4_own_query.timer,
2072 		    br_ip4_multicast_port_query_expired, 0);
2073 #if IS_ENABLED(CONFIG_IPV6)
2074 	timer_setup(&pmctx->ip6_mc_router_timer,
2075 		    br_ip6_multicast_router_expired, 0);
2076 	timer_setup(&pmctx->ip6_own_query.timer,
2077 		    br_ip6_multicast_port_query_expired, 0);
2078 #endif
2079 	/* initialize mdb_n_entries if a new port vlan is being created */
2080 	if (vlan) {
2081 		struct net_bridge_port_group *pg;
2082 		u32 n = 0;
2083 
2084 		spin_lock_bh(&port->br->multicast_lock);
2085 		hlist_for_each_entry(pg, &port->mglist, mglist)
2086 			if (pg->key.addr.vid == vlan->vid)
2087 				n++;
2088 		WRITE_ONCE(pmctx->mdb_n_entries, n);
2089 		spin_unlock_bh(&port->br->multicast_lock);
2090 	}
2091 }
2092 
2093 void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
2094 {
2095 	struct net_bridge *br = pmctx->port->br;
2096 	bool del = false;
2097 
2098 #if IS_ENABLED(CONFIG_IPV6)
2099 	timer_shutdown_sync(&pmctx->ip6_own_query.timer);
2100 	timer_shutdown_sync(&pmctx->ip6_mc_router_timer);
2101 #endif
2102 	timer_shutdown_sync(&pmctx->ip4_own_query.timer);
2103 	timer_shutdown_sync(&pmctx->ip4_mc_router_timer);
2104 
2105 	spin_lock_bh(&br->multicast_lock);
2106 	del |= br_ip6_multicast_rport_del(pmctx);
2107 	del |= br_ip4_multicast_rport_del(pmctx);
2108 	br_multicast_rport_del_notify(pmctx, del);
2109 	spin_unlock_bh(&br->multicast_lock);
2110 	cancel_work_sync(&pmctx->query_queue_work);
2111 	__skb_queue_purge(&pmctx->query_queue);
2112 }
2113 
2114 int br_multicast_add_port(struct net_bridge_port *port)
2115 {
2116 	int err;
2117 
2118 	port->multicast_eht_hosts_limit = BR_MCAST_DEFAULT_EHT_HOSTS_LIMIT;
2119 	br_multicast_port_ctx_init(port, NULL, &port->multicast_ctx);
2120 
2121 	err = br_mc_disabled_update(port->dev,
2122 				    br_opt_get(port->br,
2123 					       BROPT_MULTICAST_ENABLED),
2124 				    NULL);
2125 	if (err && err != -EOPNOTSUPP)
2126 		return err;
2127 
2128 	port->mcast_stats = netdev_alloc_pcpu_stats(struct bridge_mcast_stats);
2129 	if (!port->mcast_stats)
2130 		return -ENOMEM;
2131 
2132 	return 0;
2133 }
2134 
2135 void br_multicast_del_port(struct net_bridge_port *port)
2136 {
2137 	struct net_bridge *br = port->br;
2138 	struct net_bridge_port_group *pg;
2139 	struct hlist_node *n;
2140 
2141 	/* Take care of the remaining groups, only perm ones should be left */
2142 	spin_lock_bh(&br->multicast_lock);
2143 	hlist_for_each_entry_safe(pg, n, &port->mglist, mglist)
2144 		br_multicast_find_del_pg(br, pg);
2145 	spin_unlock_bh(&br->multicast_lock);
2146 	flush_work(&br->mcast_gc_work);
2147 	br_multicast_port_ctx_deinit(&port->multicast_ctx);
2148 	free_percpu(port->mcast_stats);
2149 }
2150 
2151 static void br_multicast_enable(struct bridge_mcast_own_query *query)
2152 {
2153 	query->startup_sent = 0;
2154 
2155 	if (timer_delete_sync_try(&query->timer) >= 0 ||
2156 	    timer_delete(&query->timer))
2157 		mod_timer(&query->timer, jiffies);
2158 }
2159 
2160 static void __br_multicast_enable_port_ctx(struct net_bridge_mcast_port *pmctx)
2161 {
2162 	struct net_bridge *br = pmctx->port->br;
2163 	struct net_bridge_mcast *brmctx;
2164 
2165 	brmctx = br_multicast_port_ctx_get_global(pmctx);
2166 	if (!br_opt_get(br, BROPT_MULTICAST_ENABLED) ||
2167 	    !netif_running(br->dev))
2168 		return;
2169 
2170 	br_multicast_enable(&pmctx->ip4_own_query);
2171 #if IS_ENABLED(CONFIG_IPV6)
2172 	br_multicast_enable(&pmctx->ip6_own_query);
2173 #endif
2174 	if (pmctx->multicast_router == MDB_RTR_TYPE_PERM) {
2175 		br_ip4_multicast_add_router(brmctx, pmctx);
2176 		br_ip6_multicast_add_router(brmctx, pmctx);
2177 	}
2178 }
2179 
2180 static void br_multicast_enable_port_ctx(struct net_bridge_mcast_port *pmctx)
2181 {
2182 	struct net_bridge *br = pmctx->port->br;
2183 
2184 	spin_lock_bh(&br->multicast_lock);
2185 	if (br_multicast_port_ctx_is_vlan(pmctx) &&
2186 	    !(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED)) {
2187 		spin_unlock_bh(&br->multicast_lock);
2188 		return;
2189 	}
2190 	__br_multicast_enable_port_ctx(pmctx);
2191 	spin_unlock_bh(&br->multicast_lock);
2192 }
2193 
2194 static void __br_multicast_disable_port_ctx(struct net_bridge_mcast_port *pmctx)
2195 {
2196 	struct net_bridge_port_group *pg;
2197 	struct hlist_node *n;
2198 	bool del = false;
2199 
2200 	hlist_for_each_entry_safe(pg, n, &pmctx->port->mglist, mglist)
2201 		if (!(pg->flags & MDB_PG_FLAGS_PERMANENT) &&
2202 		    (!br_multicast_port_ctx_is_vlan(pmctx) ||
2203 		     pg->key.addr.vid == pmctx->vlan->vid))
2204 			br_multicast_find_del_pg(pmctx->port->br, pg);
2205 
2206 	del |= br_ip4_multicast_rport_del(pmctx);
2207 	timer_delete(&pmctx->ip4_mc_router_timer);
2208 	timer_delete(&pmctx->ip4_own_query.timer);
2209 	del |= br_ip6_multicast_rport_del(pmctx);
2210 #if IS_ENABLED(CONFIG_IPV6)
2211 	timer_delete(&pmctx->ip6_mc_router_timer);
2212 	timer_delete(&pmctx->ip6_own_query.timer);
2213 #endif
2214 	br_multicast_rport_del_notify(pmctx, del);
2215 }
2216 
2217 static void br_multicast_disable_port_ctx(struct net_bridge_mcast_port *pmctx)
2218 {
2219 	struct net_bridge *br = pmctx->port->br;
2220 
2221 	spin_lock_bh(&br->multicast_lock);
2222 	if (br_multicast_port_ctx_is_vlan(pmctx) &&
2223 	    !(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED)) {
2224 		spin_unlock_bh(&br->multicast_lock);
2225 		return;
2226 	}
2227 
2228 	__br_multicast_disable_port_ctx(pmctx);
2229 	spin_unlock_bh(&br->multicast_lock);
2230 }
2231 
2232 static void br_multicast_toggle_port(struct net_bridge_port *port, bool on)
2233 {
2234 #if IS_ENABLED(CONFIG_BRIDGE_VLAN_FILTERING)
2235 	if (br_opt_get(port->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
2236 		struct net_bridge_vlan_group *vg;
2237 		struct net_bridge_vlan *vlan;
2238 
2239 		rcu_read_lock();
2240 		vg = nbp_vlan_group_rcu(port);
2241 		if (!vg) {
2242 			rcu_read_unlock();
2243 			return;
2244 		}
2245 
2246 		/* iterate each vlan, toggle vlan multicast context */
2247 		list_for_each_entry_rcu(vlan, &vg->vlan_list, vlist) {
2248 			struct net_bridge_mcast_port *pmctx =
2249 						&vlan->port_mcast_ctx;
2250 			u8 state = br_vlan_get_state(vlan);
2251 			/* enable vlan multicast context when state is
2252 			 * LEARNING or FORWARDING
2253 			 */
2254 			if (on && br_vlan_state_allowed(state, true))
2255 				br_multicast_enable_port_ctx(pmctx);
2256 			else
2257 				br_multicast_disable_port_ctx(pmctx);
2258 		}
2259 		rcu_read_unlock();
2260 		return;
2261 	}
2262 #endif
2263 	/* toggle port multicast context when vlan snooping is disabled */
2264 	if (on)
2265 		br_multicast_enable_port_ctx(&port->multicast_ctx);
2266 	else
2267 		br_multicast_disable_port_ctx(&port->multicast_ctx);
2268 }
2269 
2270 void br_multicast_enable_port(struct net_bridge_port *port)
2271 {
2272 	br_multicast_toggle_port(port, true);
2273 }
2274 
2275 void br_multicast_disable_port(struct net_bridge_port *port)
2276 {
2277 	br_multicast_toggle_port(port, false);
2278 }
2279 
2280 static int __grp_src_delete_marked(struct net_bridge_port_group *pg)
2281 {
2282 	struct net_bridge_group_src *ent;
2283 	struct hlist_node *tmp;
2284 	int deleted = 0;
2285 
2286 	hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
2287 		if (ent->flags & BR_SGRP_F_DELETE) {
2288 			br_multicast_del_group_src(ent, false);
2289 			deleted++;
2290 		}
2291 
2292 	return deleted;
2293 }
2294 
2295 static void __grp_src_mod_timer(struct net_bridge_group_src *src,
2296 				unsigned long expires)
2297 {
2298 	mod_timer(&src->timer, expires);
2299 	br_multicast_fwd_src_handle(src);
2300 }
2301 
2302 static void __grp_src_query_marked_and_rexmit(struct net_bridge_mcast *brmctx,
2303 					      struct net_bridge_mcast_port *pmctx,
2304 					      struct net_bridge_port_group *pg)
2305 {
2306 	struct bridge_mcast_other_query *other_query = NULL;
2307 	u32 lmqc = brmctx->multicast_last_member_count;
2308 	unsigned long lmqt, lmi, now = jiffies;
2309 	struct net_bridge_group_src *ent;
2310 
2311 	if (!netif_running(brmctx->br->dev) ||
2312 	    !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED))
2313 		return;
2314 
2315 	if (pg->key.addr.proto == htons(ETH_P_IP))
2316 		other_query = &brmctx->ip4_other_query;
2317 #if IS_ENABLED(CONFIG_IPV6)
2318 	else
2319 		other_query = &brmctx->ip6_other_query;
2320 #endif
2321 
2322 	lmqt = now + br_multicast_lmqt(brmctx);
2323 	hlist_for_each_entry(ent, &pg->src_list, node) {
2324 		if (ent->flags & BR_SGRP_F_SEND) {
2325 			ent->flags &= ~BR_SGRP_F_SEND;
2326 			if (ent->timer.expires > lmqt) {
2327 				if (brmctx->multicast_querier &&
2328 				    other_query &&
2329 				    !timer_pending(&other_query->timer))
2330 					ent->src_query_rexmit_cnt = lmqc;
2331 				__grp_src_mod_timer(ent, lmqt);
2332 			}
2333 		}
2334 	}
2335 
2336 	if (!brmctx->multicast_querier ||
2337 	    !other_query || timer_pending(&other_query->timer))
2338 		return;
2339 
2340 	__br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2341 				  &pg->key.addr, true, 1, NULL);
2342 
2343 	lmi = now + brmctx->multicast_last_member_interval;
2344 	if (!timer_pending(&pg->rexmit_timer) ||
2345 	    time_after(pg->rexmit_timer.expires, lmi))
2346 		mod_timer(&pg->rexmit_timer, lmi);
2347 }
2348 
2349 static void __grp_send_query_and_rexmit(struct net_bridge_mcast *brmctx,
2350 					struct net_bridge_mcast_port *pmctx,
2351 					struct net_bridge_port_group *pg)
2352 {
2353 	struct bridge_mcast_other_query *other_query = NULL;
2354 	unsigned long now = jiffies, lmi;
2355 
2356 	if (!netif_running(brmctx->br->dev) ||
2357 	    !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED))
2358 		return;
2359 
2360 	if (pg->key.addr.proto == htons(ETH_P_IP))
2361 		other_query = &brmctx->ip4_other_query;
2362 #if IS_ENABLED(CONFIG_IPV6)
2363 	else
2364 		other_query = &brmctx->ip6_other_query;
2365 #endif
2366 
2367 	if (brmctx->multicast_querier &&
2368 	    other_query && !timer_pending(&other_query->timer)) {
2369 		lmi = now + brmctx->multicast_last_member_interval;
2370 		pg->grp_query_rexmit_cnt = brmctx->multicast_last_member_count - 1;
2371 		__br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2372 					  &pg->key.addr, false, 0, NULL);
2373 		if (!timer_pending(&pg->rexmit_timer) ||
2374 		    time_after(pg->rexmit_timer.expires, lmi))
2375 			mod_timer(&pg->rexmit_timer, lmi);
2376 	}
2377 
2378 	if (pg->filter_mode == MCAST_EXCLUDE &&
2379 	    (!timer_pending(&pg->timer) ||
2380 	     time_after(pg->timer.expires, now + br_multicast_lmqt(brmctx))))
2381 		mod_timer(&pg->timer, now + br_multicast_lmqt(brmctx));
2382 }
2383 
2384 /* State          Msg type      New state                Actions
2385  * INCLUDE (A)    IS_IN (B)     INCLUDE (A+B)            (B)=GMI
2386  * INCLUDE (A)    ALLOW (B)     INCLUDE (A+B)            (B)=GMI
2387  * EXCLUDE (X,Y)  ALLOW (A)     EXCLUDE (X+A,Y-A)        (A)=GMI
2388  */
2389 static bool br_multicast_isinc_allow(const struct net_bridge_mcast *brmctx,
2390 				     struct net_bridge_port_group *pg, void *h_addr,
2391 				     void *srcs, u32 nsrcs, size_t addr_size,
2392 				     int grec_type)
2393 {
2394 	struct net_bridge_group_src *ent;
2395 	unsigned long now = jiffies;
2396 	bool changed = false;
2397 	struct br_ip src_ip;
2398 	u32 src_idx;
2399 
2400 	memset(&src_ip, 0, sizeof(src_ip));
2401 	src_ip.proto = pg->key.addr.proto;
2402 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2403 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2404 		ent = br_multicast_find_group_src(pg, &src_ip);
2405 		if (!ent) {
2406 			ent = br_multicast_new_group_src(pg, &src_ip);
2407 			if (ent)
2408 				changed = true;
2409 		}
2410 
2411 		if (ent)
2412 			__grp_src_mod_timer(ent, now + br_multicast_gmi(brmctx));
2413 	}
2414 
2415 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2416 				    grec_type))
2417 		changed = true;
2418 
2419 	return changed;
2420 }
2421 
2422 /* State          Msg type      New state                Actions
2423  * INCLUDE (A)    IS_EX (B)     EXCLUDE (A*B,B-A)        (B-A)=0
2424  *                                                       Delete (A-B)
2425  *                                                       Group Timer=GMI
2426  */
2427 static void __grp_src_isexc_incl(const struct net_bridge_mcast *brmctx,
2428 				 struct net_bridge_port_group *pg, void *h_addr,
2429 				 void *srcs, u32 nsrcs, size_t addr_size,
2430 				 int grec_type)
2431 {
2432 	struct net_bridge_group_src *ent;
2433 	struct br_ip src_ip;
2434 	u32 src_idx;
2435 
2436 	hlist_for_each_entry(ent, &pg->src_list, node)
2437 		ent->flags |= BR_SGRP_F_DELETE;
2438 
2439 	memset(&src_ip, 0, sizeof(src_ip));
2440 	src_ip.proto = pg->key.addr.proto;
2441 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2442 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2443 		ent = br_multicast_find_group_src(pg, &src_ip);
2444 		if (ent)
2445 			ent->flags &= ~BR_SGRP_F_DELETE;
2446 		else
2447 			ent = br_multicast_new_group_src(pg, &src_ip);
2448 		if (ent)
2449 			br_multicast_fwd_src_handle(ent);
2450 	}
2451 
2452 	br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2453 				grec_type);
2454 
2455 	__grp_src_delete_marked(pg);
2456 }
2457 
2458 /* State          Msg type      New state                Actions
2459  * EXCLUDE (X,Y)  IS_EX (A)     EXCLUDE (A-Y,Y*A)        (A-X-Y)=GMI
2460  *                                                       Delete (X-A)
2461  *                                                       Delete (Y-A)
2462  *                                                       Group Timer=GMI
2463  */
2464 static bool __grp_src_isexc_excl(const struct net_bridge_mcast *brmctx,
2465 				 struct net_bridge_port_group *pg, void *h_addr,
2466 				 void *srcs, u32 nsrcs, size_t addr_size,
2467 				 int grec_type)
2468 {
2469 	struct net_bridge_group_src *ent;
2470 	unsigned long now = jiffies;
2471 	bool changed = false;
2472 	struct br_ip src_ip;
2473 	u32 src_idx;
2474 
2475 	hlist_for_each_entry(ent, &pg->src_list, node)
2476 		ent->flags |= BR_SGRP_F_DELETE;
2477 
2478 	memset(&src_ip, 0, sizeof(src_ip));
2479 	src_ip.proto = pg->key.addr.proto;
2480 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2481 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2482 		ent = br_multicast_find_group_src(pg, &src_ip);
2483 		if (ent) {
2484 			ent->flags &= ~BR_SGRP_F_DELETE;
2485 		} else {
2486 			ent = br_multicast_new_group_src(pg, &src_ip);
2487 			if (ent) {
2488 				__grp_src_mod_timer(ent,
2489 						    now + br_multicast_gmi(brmctx));
2490 				changed = true;
2491 			}
2492 		}
2493 	}
2494 
2495 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2496 				    grec_type))
2497 		changed = true;
2498 
2499 	if (__grp_src_delete_marked(pg))
2500 		changed = true;
2501 
2502 	return changed;
2503 }
2504 
2505 static bool br_multicast_isexc(const struct net_bridge_mcast *brmctx,
2506 			       struct net_bridge_port_group *pg, void *h_addr,
2507 			       void *srcs, u32 nsrcs, size_t addr_size,
2508 			       int grec_type)
2509 {
2510 	bool changed = false;
2511 
2512 	switch (pg->filter_mode) {
2513 	case MCAST_INCLUDE:
2514 		__grp_src_isexc_incl(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2515 				     grec_type);
2516 		br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
2517 		changed = true;
2518 		break;
2519 	case MCAST_EXCLUDE:
2520 		changed = __grp_src_isexc_excl(brmctx, pg, h_addr, srcs, nsrcs,
2521 					       addr_size, grec_type);
2522 		break;
2523 	}
2524 
2525 	pg->filter_mode = MCAST_EXCLUDE;
2526 	mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
2527 
2528 	return changed;
2529 }
2530 
2531 /* State          Msg type      New state                Actions
2532  * INCLUDE (A)    TO_IN (B)     INCLUDE (A+B)            (B)=GMI
2533  *                                                       Send Q(G,A-B)
2534  */
2535 static bool __grp_src_toin_incl(struct net_bridge_mcast *brmctx,
2536 				struct net_bridge_mcast_port *pmctx,
2537 				struct net_bridge_port_group *pg, void *h_addr,
2538 				void *srcs, u32 nsrcs, size_t addr_size,
2539 				int grec_type)
2540 {
2541 	u32 src_idx, to_send = pg->src_ents;
2542 	struct net_bridge_group_src *ent;
2543 	unsigned long now = jiffies;
2544 	bool changed = false;
2545 	struct br_ip src_ip;
2546 
2547 	hlist_for_each_entry(ent, &pg->src_list, node)
2548 		ent->flags |= BR_SGRP_F_SEND;
2549 
2550 	memset(&src_ip, 0, sizeof(src_ip));
2551 	src_ip.proto = pg->key.addr.proto;
2552 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2553 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2554 		ent = br_multicast_find_group_src(pg, &src_ip);
2555 		if (ent) {
2556 			ent->flags &= ~BR_SGRP_F_SEND;
2557 			to_send--;
2558 		} else {
2559 			ent = br_multicast_new_group_src(pg, &src_ip);
2560 			if (ent)
2561 				changed = true;
2562 		}
2563 		if (ent)
2564 			__grp_src_mod_timer(ent, now + br_multicast_gmi(brmctx));
2565 	}
2566 
2567 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2568 				    grec_type))
2569 		changed = true;
2570 
2571 	if (to_send)
2572 		__grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2573 
2574 	return changed;
2575 }
2576 
2577 /* State          Msg type      New state                Actions
2578  * EXCLUDE (X,Y)  TO_IN (A)     EXCLUDE (X+A,Y-A)        (A)=GMI
2579  *                                                       Send Q(G,X-A)
2580  *                                                       Send Q(G)
2581  */
2582 static bool __grp_src_toin_excl(struct net_bridge_mcast *brmctx,
2583 				struct net_bridge_mcast_port *pmctx,
2584 				struct net_bridge_port_group *pg, void *h_addr,
2585 				void *srcs, u32 nsrcs, size_t addr_size,
2586 				int grec_type)
2587 {
2588 	u32 src_idx, to_send = pg->src_ents;
2589 	struct net_bridge_group_src *ent;
2590 	unsigned long now = jiffies;
2591 	bool changed = false;
2592 	struct br_ip src_ip;
2593 
2594 	hlist_for_each_entry(ent, &pg->src_list, node)
2595 		if (timer_pending(&ent->timer))
2596 			ent->flags |= BR_SGRP_F_SEND;
2597 
2598 	memset(&src_ip, 0, sizeof(src_ip));
2599 	src_ip.proto = pg->key.addr.proto;
2600 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2601 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2602 		ent = br_multicast_find_group_src(pg, &src_ip);
2603 		if (ent) {
2604 			if (timer_pending(&ent->timer)) {
2605 				ent->flags &= ~BR_SGRP_F_SEND;
2606 				to_send--;
2607 			}
2608 		} else {
2609 			ent = br_multicast_new_group_src(pg, &src_ip);
2610 			if (ent)
2611 				changed = true;
2612 		}
2613 		if (ent)
2614 			__grp_src_mod_timer(ent, now + br_multicast_gmi(brmctx));
2615 	}
2616 
2617 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2618 				    grec_type))
2619 		changed = true;
2620 
2621 	if (to_send)
2622 		__grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2623 
2624 	__grp_send_query_and_rexmit(brmctx, pmctx, pg);
2625 
2626 	return changed;
2627 }
2628 
2629 static bool br_multicast_toin(struct net_bridge_mcast *brmctx,
2630 			      struct net_bridge_mcast_port *pmctx,
2631 			      struct net_bridge_port_group *pg, void *h_addr,
2632 			      void *srcs, u32 nsrcs, size_t addr_size,
2633 			      int grec_type)
2634 {
2635 	bool changed = false;
2636 
2637 	switch (pg->filter_mode) {
2638 	case MCAST_INCLUDE:
2639 		changed = __grp_src_toin_incl(brmctx, pmctx, pg, h_addr, srcs,
2640 					      nsrcs, addr_size, grec_type);
2641 		break;
2642 	case MCAST_EXCLUDE:
2643 		changed = __grp_src_toin_excl(brmctx, pmctx, pg, h_addr, srcs,
2644 					      nsrcs, addr_size, grec_type);
2645 		break;
2646 	}
2647 
2648 	if (br_multicast_eht_should_del_pg(pg)) {
2649 		pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
2650 		br_multicast_find_del_pg(pg->key.port->br, pg);
2651 		/* a notification has already been sent and we shouldn't
2652 		 * access pg after the delete so we have to return false
2653 		 */
2654 		changed = false;
2655 	}
2656 
2657 	return changed;
2658 }
2659 
2660 /* State          Msg type      New state                Actions
2661  * INCLUDE (A)    TO_EX (B)     EXCLUDE (A*B,B-A)        (B-A)=0
2662  *                                                       Delete (A-B)
2663  *                                                       Send Q(G,A*B)
2664  *                                                       Group Timer=GMI
2665  */
2666 static void __grp_src_toex_incl(struct net_bridge_mcast *brmctx,
2667 				struct net_bridge_mcast_port *pmctx,
2668 				struct net_bridge_port_group *pg, void *h_addr,
2669 				void *srcs, u32 nsrcs, size_t addr_size,
2670 				int grec_type)
2671 {
2672 	struct net_bridge_group_src *ent;
2673 	u32 src_idx, to_send = 0;
2674 	struct br_ip src_ip;
2675 
2676 	hlist_for_each_entry(ent, &pg->src_list, node)
2677 		ent->flags = (ent->flags & ~BR_SGRP_F_SEND) | BR_SGRP_F_DELETE;
2678 
2679 	memset(&src_ip, 0, sizeof(src_ip));
2680 	src_ip.proto = pg->key.addr.proto;
2681 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2682 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2683 		ent = br_multicast_find_group_src(pg, &src_ip);
2684 		if (ent) {
2685 			ent->flags = (ent->flags & ~BR_SGRP_F_DELETE) |
2686 				     BR_SGRP_F_SEND;
2687 			to_send++;
2688 		} else {
2689 			ent = br_multicast_new_group_src(pg, &src_ip);
2690 		}
2691 		if (ent)
2692 			br_multicast_fwd_src_handle(ent);
2693 	}
2694 
2695 	br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2696 				grec_type);
2697 
2698 	__grp_src_delete_marked(pg);
2699 	if (to_send)
2700 		__grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2701 }
2702 
2703 /* State          Msg type      New state                Actions
2704  * EXCLUDE (X,Y)  TO_EX (A)     EXCLUDE (A-Y,Y*A)        (A-X-Y)=Group Timer
2705  *                                                       Delete (X-A)
2706  *                                                       Delete (Y-A)
2707  *                                                       Send Q(G,A-Y)
2708  *                                                       Group Timer=GMI
2709  */
2710 static bool __grp_src_toex_excl(struct net_bridge_mcast *brmctx,
2711 				struct net_bridge_mcast_port *pmctx,
2712 				struct net_bridge_port_group *pg, void *h_addr,
2713 				void *srcs, u32 nsrcs, size_t addr_size,
2714 				int grec_type)
2715 {
2716 	struct net_bridge_group_src *ent;
2717 	u32 src_idx, to_send = 0;
2718 	bool changed = false;
2719 	struct br_ip src_ip;
2720 
2721 	hlist_for_each_entry(ent, &pg->src_list, node)
2722 		ent->flags = (ent->flags & ~BR_SGRP_F_SEND) | BR_SGRP_F_DELETE;
2723 
2724 	memset(&src_ip, 0, sizeof(src_ip));
2725 	src_ip.proto = pg->key.addr.proto;
2726 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2727 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2728 		ent = br_multicast_find_group_src(pg, &src_ip);
2729 		if (ent) {
2730 			ent->flags &= ~BR_SGRP_F_DELETE;
2731 		} else {
2732 			ent = br_multicast_new_group_src(pg, &src_ip);
2733 			if (ent) {
2734 				__grp_src_mod_timer(ent, pg->timer.expires);
2735 				changed = true;
2736 			}
2737 		}
2738 		if (ent && timer_pending(&ent->timer)) {
2739 			ent->flags |= BR_SGRP_F_SEND;
2740 			to_send++;
2741 		}
2742 	}
2743 
2744 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2745 				    grec_type))
2746 		changed = true;
2747 
2748 	if (__grp_src_delete_marked(pg))
2749 		changed = true;
2750 	if (to_send)
2751 		__grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2752 
2753 	return changed;
2754 }
2755 
2756 static bool br_multicast_toex(struct net_bridge_mcast *brmctx,
2757 			      struct net_bridge_mcast_port *pmctx,
2758 			      struct net_bridge_port_group *pg, void *h_addr,
2759 			      void *srcs, u32 nsrcs, size_t addr_size,
2760 			      int grec_type)
2761 {
2762 	bool changed = false;
2763 
2764 	switch (pg->filter_mode) {
2765 	case MCAST_INCLUDE:
2766 		__grp_src_toex_incl(brmctx, pmctx, pg, h_addr, srcs, nsrcs,
2767 				    addr_size, grec_type);
2768 		br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
2769 		changed = true;
2770 		break;
2771 	case MCAST_EXCLUDE:
2772 		changed = __grp_src_toex_excl(brmctx, pmctx, pg, h_addr, srcs,
2773 					      nsrcs, addr_size, grec_type);
2774 		break;
2775 	}
2776 
2777 	pg->filter_mode = MCAST_EXCLUDE;
2778 	mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
2779 
2780 	return changed;
2781 }
2782 
2783 /* State          Msg type      New state                Actions
2784  * INCLUDE (A)    BLOCK (B)     INCLUDE (A)              Send Q(G,A*B)
2785  */
2786 static bool __grp_src_block_incl(struct net_bridge_mcast *brmctx,
2787 				 struct net_bridge_mcast_port *pmctx,
2788 				 struct net_bridge_port_group *pg, void *h_addr,
2789 				 void *srcs, u32 nsrcs, size_t addr_size, int grec_type)
2790 {
2791 	struct net_bridge_group_src *ent;
2792 	u32 src_idx, to_send = 0;
2793 	bool changed = false;
2794 	struct br_ip src_ip;
2795 
2796 	hlist_for_each_entry(ent, &pg->src_list, node)
2797 		ent->flags &= ~BR_SGRP_F_SEND;
2798 
2799 	memset(&src_ip, 0, sizeof(src_ip));
2800 	src_ip.proto = pg->key.addr.proto;
2801 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2802 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2803 		ent = br_multicast_find_group_src(pg, &src_ip);
2804 		if (ent) {
2805 			ent->flags |= BR_SGRP_F_SEND;
2806 			to_send++;
2807 		}
2808 	}
2809 
2810 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2811 				    grec_type))
2812 		changed = true;
2813 
2814 	if (to_send)
2815 		__grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2816 
2817 	return changed;
2818 }
2819 
2820 /* State          Msg type      New state                Actions
2821  * EXCLUDE (X,Y)  BLOCK (A)     EXCLUDE (X+(A-Y),Y)      (A-X-Y)=Group Timer
2822  *                                                       Send Q(G,A-Y)
2823  */
2824 static bool __grp_src_block_excl(struct net_bridge_mcast *brmctx,
2825 				 struct net_bridge_mcast_port *pmctx,
2826 				 struct net_bridge_port_group *pg, void *h_addr,
2827 				 void *srcs, u32 nsrcs, size_t addr_size, int grec_type)
2828 {
2829 	struct net_bridge_group_src *ent;
2830 	u32 src_idx, to_send = 0;
2831 	bool changed = false;
2832 	struct br_ip src_ip;
2833 
2834 	hlist_for_each_entry(ent, &pg->src_list, node)
2835 		ent->flags &= ~BR_SGRP_F_SEND;
2836 
2837 	memset(&src_ip, 0, sizeof(src_ip));
2838 	src_ip.proto = pg->key.addr.proto;
2839 	for (src_idx = 0; src_idx < nsrcs; src_idx++) {
2840 		memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
2841 		ent = br_multicast_find_group_src(pg, &src_ip);
2842 		if (!ent) {
2843 			ent = br_multicast_new_group_src(pg, &src_ip);
2844 			if (ent) {
2845 				__grp_src_mod_timer(ent, pg->timer.expires);
2846 				changed = true;
2847 			}
2848 		}
2849 		if (ent && timer_pending(&ent->timer)) {
2850 			ent->flags |= BR_SGRP_F_SEND;
2851 			to_send++;
2852 		}
2853 	}
2854 
2855 	if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2856 				    grec_type))
2857 		changed = true;
2858 
2859 	if (to_send)
2860 		__grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2861 
2862 	return changed;
2863 }
2864 
2865 static bool br_multicast_block(struct net_bridge_mcast *brmctx,
2866 			       struct net_bridge_mcast_port *pmctx,
2867 			       struct net_bridge_port_group *pg, void *h_addr,
2868 			       void *srcs, u32 nsrcs, size_t addr_size, int grec_type)
2869 {
2870 	bool changed = false;
2871 
2872 	switch (pg->filter_mode) {
2873 	case MCAST_INCLUDE:
2874 		changed = __grp_src_block_incl(brmctx, pmctx, pg, h_addr, srcs,
2875 					       nsrcs, addr_size, grec_type);
2876 		break;
2877 	case MCAST_EXCLUDE:
2878 		changed = __grp_src_block_excl(brmctx, pmctx, pg, h_addr, srcs,
2879 					       nsrcs, addr_size, grec_type);
2880 		break;
2881 	}
2882 
2883 	if ((pg->filter_mode == MCAST_INCLUDE && hlist_empty(&pg->src_list)) ||
2884 	    br_multicast_eht_should_del_pg(pg)) {
2885 		if (br_multicast_eht_should_del_pg(pg))
2886 			pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
2887 		br_multicast_find_del_pg(pg->key.port->br, pg);
2888 		/* a notification has already been sent and we shouldn't
2889 		 * access pg after the delete so we have to return false
2890 		 */
2891 		changed = false;
2892 	}
2893 
2894 	return changed;
2895 }
2896 
2897 static struct net_bridge_port_group *
2898 br_multicast_find_port(struct net_bridge_mdb_entry *mp,
2899 		       struct net_bridge_port *p,
2900 		       const unsigned char *src)
2901 {
2902 	struct net_bridge *br __maybe_unused = mp->br;
2903 	struct net_bridge_port_group *pg;
2904 
2905 	for (pg = mlock_dereference(mp->ports, br);
2906 	     pg;
2907 	     pg = mlock_dereference(pg->next, br))
2908 		if (br_port_group_equal(pg, p, src))
2909 			return pg;
2910 
2911 	return NULL;
2912 }
2913 
2914 static int br_ip4_multicast_igmp3_report(struct net_bridge_mcast *brmctx,
2915 					 struct net_bridge_mcast_port *pmctx,
2916 					 struct sk_buff *skb,
2917 					 u16 vid)
2918 {
2919 	bool igmpv2 = brmctx->multicast_igmp_version == 2;
2920 	struct net_bridge_mdb_entry *mdst;
2921 	struct net_bridge_port_group *pg;
2922 	const unsigned char *src;
2923 	struct igmpv3_report *ih;
2924 	struct igmpv3_grec *grec;
2925 	int i, len, num, type;
2926 	__be32 group, *h_addr;
2927 	bool changed = false;
2928 	int err = 0;
2929 	u16 nsrcs;
2930 
2931 	ih = igmpv3_report_hdr(skb);
2932 	num = ntohs(ih->ngrec);
2933 	len = skb_transport_offset(skb) + sizeof(*ih);
2934 
2935 	for (i = 0; i < num; i++) {
2936 		len += sizeof(*grec);
2937 		if (!ip_mc_may_pull(skb, len))
2938 			return -EINVAL;
2939 
2940 		grec = (void *)(skb->data + len - sizeof(*grec));
2941 		group = grec->grec_mca;
2942 		type = grec->grec_type;
2943 		nsrcs = ntohs(grec->grec_nsrcs);
2944 
2945 		len += nsrcs * 4;
2946 		if (!ip_mc_may_pull(skb, len))
2947 			return -EINVAL;
2948 
2949 		switch (type) {
2950 		case IGMPV3_MODE_IS_INCLUDE:
2951 		case IGMPV3_MODE_IS_EXCLUDE:
2952 		case IGMPV3_CHANGE_TO_INCLUDE:
2953 		case IGMPV3_CHANGE_TO_EXCLUDE:
2954 		case IGMPV3_ALLOW_NEW_SOURCES:
2955 		case IGMPV3_BLOCK_OLD_SOURCES:
2956 			break;
2957 
2958 		default:
2959 			continue;
2960 		}
2961 
2962 		src = eth_hdr(skb)->h_source;
2963 		if (nsrcs == 0 &&
2964 		    (type == IGMPV3_CHANGE_TO_INCLUDE ||
2965 		     type == IGMPV3_MODE_IS_INCLUDE)) {
2966 			if (!pmctx || igmpv2) {
2967 				br_ip4_multicast_leave_group(brmctx, pmctx,
2968 							     group, vid, src);
2969 				continue;
2970 			}
2971 		} else {
2972 			err = br_ip4_multicast_add_group(brmctx, pmctx, group,
2973 							 vid, src, igmpv2);
2974 			if (err)
2975 				break;
2976 		}
2977 
2978 		if (!pmctx || igmpv2)
2979 			continue;
2980 
2981 		spin_lock(&brmctx->br->multicast_lock);
2982 		if (!br_multicast_ctx_should_use(brmctx, pmctx))
2983 			goto unlock_continue;
2984 
2985 		mdst = br_mdb_ip4_get(brmctx->br, group, vid);
2986 		if (!mdst)
2987 			goto unlock_continue;
2988 		pg = br_multicast_find_port(mdst, pmctx->port, src);
2989 		if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
2990 			goto unlock_continue;
2991 		/* reload grec and host addr */
2992 		grec = (void *)(skb->data + len - sizeof(*grec) - (nsrcs * 4));
2993 		h_addr = &ip_hdr(skb)->saddr;
2994 		switch (type) {
2995 		case IGMPV3_ALLOW_NEW_SOURCES:
2996 			changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
2997 							   grec->grec_src,
2998 							   nsrcs, sizeof(__be32), type);
2999 			break;
3000 		case IGMPV3_MODE_IS_INCLUDE:
3001 			changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3002 							   grec->grec_src,
3003 							   nsrcs, sizeof(__be32), type);
3004 			break;
3005 		case IGMPV3_MODE_IS_EXCLUDE:
3006 			changed = br_multicast_isexc(brmctx, pg, h_addr,
3007 						     grec->grec_src,
3008 						     nsrcs, sizeof(__be32), type);
3009 			break;
3010 		case IGMPV3_CHANGE_TO_INCLUDE:
3011 			changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
3012 						    grec->grec_src,
3013 						    nsrcs, sizeof(__be32), type);
3014 			break;
3015 		case IGMPV3_CHANGE_TO_EXCLUDE:
3016 			changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
3017 						    grec->grec_src,
3018 						    nsrcs, sizeof(__be32), type);
3019 			break;
3020 		case IGMPV3_BLOCK_OLD_SOURCES:
3021 			changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
3022 						     grec->grec_src,
3023 						     nsrcs, sizeof(__be32), type);
3024 			break;
3025 		}
3026 		if (changed)
3027 			br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);
3028 unlock_continue:
3029 		spin_unlock(&brmctx->br->multicast_lock);
3030 	}
3031 
3032 	return err;
3033 }
3034 
3035 #if IS_ENABLED(CONFIG_IPV6)
3036 static int br_ip6_multicast_mld2_report(struct net_bridge_mcast *brmctx,
3037 					struct net_bridge_mcast_port *pmctx,
3038 					struct sk_buff *skb,
3039 					u16 vid)
3040 {
3041 	bool mldv1 = brmctx->multicast_mld_version == 1;
3042 	struct net_bridge_mdb_entry *mdst;
3043 	struct net_bridge_port_group *pg;
3044 	unsigned int nsrcs_offset;
3045 	struct mld2_report *mld2r;
3046 	const unsigned char *src;
3047 	struct in6_addr *h_addr;
3048 	struct mld2_grec *grec;
3049 	unsigned int grec_len;
3050 	bool changed = false;
3051 	int i, len, num;
3052 	int err = 0;
3053 
3054 	if (!ipv6_mc_may_pull(skb, sizeof(*mld2r)))
3055 		return -EINVAL;
3056 
3057 	mld2r = (struct mld2_report *)icmp6_hdr(skb);
3058 	num = ntohs(mld2r->mld2r_ngrec);
3059 	len = skb_transport_offset(skb) + sizeof(*mld2r);
3060 
3061 	for (i = 0; i < num; i++) {
3062 		__be16 *_nsrcs, __nsrcs;
3063 		u16 nsrcs;
3064 
3065 		nsrcs_offset = len + offsetof(struct mld2_grec, grec_nsrcs);
3066 
3067 		if (skb_transport_offset(skb) + ipv6_transport_len(skb) <
3068 		    nsrcs_offset + sizeof(__nsrcs))
3069 			return -EINVAL;
3070 
3071 		_nsrcs = skb_header_pointer(skb, nsrcs_offset,
3072 					    sizeof(__nsrcs), &__nsrcs);
3073 		if (!_nsrcs)
3074 			return -EINVAL;
3075 
3076 		nsrcs = ntohs(*_nsrcs);
3077 		grec_len = struct_size(grec, grec_src, nsrcs);
3078 
3079 		if (!ipv6_mc_may_pull(skb, len + grec_len))
3080 			return -EINVAL;
3081 
3082 		grec = (struct mld2_grec *)(skb->data + len);
3083 		len += grec_len;
3084 
3085 		switch (grec->grec_type) {
3086 		case MLD2_MODE_IS_INCLUDE:
3087 		case MLD2_MODE_IS_EXCLUDE:
3088 		case MLD2_CHANGE_TO_INCLUDE:
3089 		case MLD2_CHANGE_TO_EXCLUDE:
3090 		case MLD2_ALLOW_NEW_SOURCES:
3091 		case MLD2_BLOCK_OLD_SOURCES:
3092 			break;
3093 
3094 		default:
3095 			continue;
3096 		}
3097 
3098 		src = eth_hdr(skb)->h_source;
3099 		if ((grec->grec_type == MLD2_CHANGE_TO_INCLUDE ||
3100 		     grec->grec_type == MLD2_MODE_IS_INCLUDE) &&
3101 		    nsrcs == 0) {
3102 			if (!pmctx || mldv1) {
3103 				br_ip6_multicast_leave_group(brmctx, pmctx,
3104 							     &grec->grec_mca,
3105 							     vid, src);
3106 				continue;
3107 			}
3108 		} else {
3109 			err = br_ip6_multicast_add_group(brmctx, pmctx,
3110 							 &grec->grec_mca, vid,
3111 							 src, mldv1);
3112 			if (err)
3113 				break;
3114 		}
3115 
3116 		if (!pmctx || mldv1)
3117 			continue;
3118 
3119 		spin_lock(&brmctx->br->multicast_lock);
3120 		if (!br_multicast_ctx_should_use(brmctx, pmctx))
3121 			goto unlock_continue;
3122 
3123 		mdst = br_mdb_ip6_get(brmctx->br, &grec->grec_mca, vid);
3124 		if (!mdst)
3125 			goto unlock_continue;
3126 		pg = br_multicast_find_port(mdst, pmctx->port, src);
3127 		if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
3128 			goto unlock_continue;
3129 		h_addr = &ipv6_hdr(skb)->saddr;
3130 		switch (grec->grec_type) {
3131 		case MLD2_ALLOW_NEW_SOURCES:
3132 			changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3133 							   grec->grec_src, nsrcs,
3134 							   sizeof(struct in6_addr),
3135 							   grec->grec_type);
3136 			break;
3137 		case MLD2_MODE_IS_INCLUDE:
3138 			changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3139 							   grec->grec_src, nsrcs,
3140 							   sizeof(struct in6_addr),
3141 							   grec->grec_type);
3142 			break;
3143 		case MLD2_MODE_IS_EXCLUDE:
3144 			changed = br_multicast_isexc(brmctx, pg, h_addr,
3145 						     grec->grec_src, nsrcs,
3146 						     sizeof(struct in6_addr),
3147 						     grec->grec_type);
3148 			break;
3149 		case MLD2_CHANGE_TO_INCLUDE:
3150 			changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
3151 						    grec->grec_src, nsrcs,
3152 						    sizeof(struct in6_addr),
3153 						    grec->grec_type);
3154 			break;
3155 		case MLD2_CHANGE_TO_EXCLUDE:
3156 			changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
3157 						    grec->grec_src, nsrcs,
3158 						    sizeof(struct in6_addr),
3159 						    grec->grec_type);
3160 			break;
3161 		case MLD2_BLOCK_OLD_SOURCES:
3162 			changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
3163 						     grec->grec_src, nsrcs,
3164 						     sizeof(struct in6_addr),
3165 						     grec->grec_type);
3166 			break;
3167 		}
3168 		if (changed)
3169 			br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);
3170 unlock_continue:
3171 		spin_unlock(&brmctx->br->multicast_lock);
3172 	}
3173 
3174 	return err;
3175 }
3176 #endif
3177 
3178 static bool br_multicast_select_querier(struct net_bridge_mcast *brmctx,
3179 					struct net_bridge_mcast_port *pmctx,
3180 					struct br_ip *saddr)
3181 {
3182 	int port_ifidx = pmctx ? pmctx->port->dev->ifindex : 0;
3183 	struct timer_list *own_timer, *other_timer;
3184 	struct bridge_mcast_querier *querier;
3185 
3186 	switch (saddr->proto) {
3187 	case htons(ETH_P_IP):
3188 		querier = &brmctx->ip4_querier;
3189 		own_timer = &brmctx->ip4_own_query.timer;
3190 		other_timer = &brmctx->ip4_other_query.timer;
3191 		if (!querier->addr.src.ip4 ||
3192 		    ntohl(saddr->src.ip4) <= ntohl(querier->addr.src.ip4))
3193 			goto update;
3194 		break;
3195 #if IS_ENABLED(CONFIG_IPV6)
3196 	case htons(ETH_P_IPV6):
3197 		querier = &brmctx->ip6_querier;
3198 		own_timer = &brmctx->ip6_own_query.timer;
3199 		other_timer = &brmctx->ip6_other_query.timer;
3200 		if (ipv6_addr_cmp(&saddr->src.ip6, &querier->addr.src.ip6) <= 0)
3201 			goto update;
3202 		break;
3203 #endif
3204 	default:
3205 		return false;
3206 	}
3207 
3208 	if (!timer_pending(own_timer) && !timer_pending(other_timer))
3209 		goto update;
3210 
3211 	return false;
3212 
3213 update:
3214 	br_multicast_update_querier(brmctx, querier, port_ifidx, saddr);
3215 
3216 	return true;
3217 }
3218 
3219 static struct net_bridge_port *
3220 __br_multicast_get_querier_port(struct net_bridge *br,
3221 				const struct bridge_mcast_querier *querier)
3222 {
3223 	int port_ifidx = READ_ONCE(querier->port_ifidx);
3224 	struct net_bridge_port *p;
3225 	struct net_device *dev;
3226 
3227 	if (port_ifidx == 0)
3228 		return NULL;
3229 
3230 	dev = dev_get_by_index_rcu(dev_net(br->dev), port_ifidx);
3231 	if (!dev)
3232 		return NULL;
3233 	p = br_port_get_rtnl_rcu(dev);
3234 	if (!p || p->br != br)
3235 		return NULL;
3236 
3237 	return p;
3238 }
3239 
3240 size_t br_multicast_querier_state_size(void)
3241 {
3242 	return nla_total_size(0) +		/* nest attribute */
3243 	       nla_total_size(sizeof(__be32)) + /* BRIDGE_QUERIER_IP_ADDRESS */
3244 	       nla_total_size(sizeof(int)) +    /* BRIDGE_QUERIER_IP_PORT */
3245 	       nla_total_size_64bit(sizeof(u64)) + /* BRIDGE_QUERIER_IP_OTHER_TIMER */
3246 #if IS_ENABLED(CONFIG_IPV6)
3247 	       nla_total_size(sizeof(struct in6_addr)) + /* BRIDGE_QUERIER_IPV6_ADDRESS */
3248 	       nla_total_size(sizeof(int)) +		 /* BRIDGE_QUERIER_IPV6_PORT */
3249 	       nla_total_size_64bit(sizeof(u64)) +	 /* BRIDGE_QUERIER_IPV6_OTHER_TIMER */
3250 #endif
3251 	       0;
3252 }
3253 
3254 /* protected by rtnl or rcu */
3255 int br_multicast_dump_querier_state(struct sk_buff *skb,
3256 				    const struct net_bridge_mcast *brmctx,
3257 				    int nest_attr)
3258 {
3259 	struct bridge_mcast_querier querier = {};
3260 	struct net_bridge_port *p;
3261 	struct nlattr *nest;
3262 
3263 	if (!br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED) ||
3264 	    br_multicast_ctx_vlan_global_disabled(brmctx))
3265 		return 0;
3266 
3267 	nest = nla_nest_start(skb, nest_attr);
3268 	if (!nest)
3269 		return -EMSGSIZE;
3270 
3271 	rcu_read_lock();
3272 	if (!brmctx->multicast_querier &&
3273 	    !timer_pending(&brmctx->ip4_other_query.timer))
3274 		goto out_v6;
3275 
3276 	br_multicast_read_querier(&brmctx->ip4_querier, &querier);
3277 	if (nla_put_in_addr(skb, BRIDGE_QUERIER_IP_ADDRESS,
3278 			    querier.addr.src.ip4)) {
3279 		rcu_read_unlock();
3280 		goto out_err;
3281 	}
3282 
3283 	p = __br_multicast_get_querier_port(brmctx->br, &querier);
3284 	if (timer_pending(&brmctx->ip4_other_query.timer) &&
3285 	    (nla_put_u64_64bit(skb, BRIDGE_QUERIER_IP_OTHER_TIMER,
3286 			       br_timer_value(&brmctx->ip4_other_query.timer),
3287 			       BRIDGE_QUERIER_PAD) ||
3288 	     (p && nla_put_u32(skb, BRIDGE_QUERIER_IP_PORT, p->dev->ifindex)))) {
3289 		rcu_read_unlock();
3290 		goto out_err;
3291 	}
3292 
3293 out_v6:
3294 #if IS_ENABLED(CONFIG_IPV6)
3295 	if (!brmctx->multicast_querier &&
3296 	    !timer_pending(&brmctx->ip6_other_query.timer))
3297 		goto out;
3298 
3299 	br_multicast_read_querier(&brmctx->ip6_querier, &querier);
3300 	if (nla_put_in6_addr(skb, BRIDGE_QUERIER_IPV6_ADDRESS,
3301 			     &querier.addr.src.ip6)) {
3302 		rcu_read_unlock();
3303 		goto out_err;
3304 	}
3305 
3306 	p = __br_multicast_get_querier_port(brmctx->br, &querier);
3307 	if (timer_pending(&brmctx->ip6_other_query.timer) &&
3308 	    (nla_put_u64_64bit(skb, BRIDGE_QUERIER_IPV6_OTHER_TIMER,
3309 			       br_timer_value(&brmctx->ip6_other_query.timer),
3310 			       BRIDGE_QUERIER_PAD) ||
3311 	     (p && nla_put_u32(skb, BRIDGE_QUERIER_IPV6_PORT,
3312 			       p->dev->ifindex)))) {
3313 		rcu_read_unlock();
3314 		goto out_err;
3315 	}
3316 out:
3317 #endif
3318 	rcu_read_unlock();
3319 	nla_nest_end(skb, nest);
3320 	if (!nla_len(nest))
3321 		nla_nest_cancel(skb, nest);
3322 
3323 	return 0;
3324 
3325 out_err:
3326 	nla_nest_cancel(skb, nest);
3327 	return -EMSGSIZE;
3328 }
3329 
3330 static void
3331 br_multicast_update_query_timer(struct net_bridge_mcast *brmctx,
3332 				struct bridge_mcast_other_query *query,
3333 				unsigned long max_delay)
3334 {
3335 	if (!timer_pending(&query->timer))
3336 		mod_timer(&query->delay_timer, jiffies + max_delay);
3337 
3338 	mod_timer(&query->timer, jiffies + brmctx->multicast_querier_interval);
3339 }
3340 
3341 static void br_port_mc_router_state_change(struct net_bridge_port *p,
3342 					   bool is_mc_router)
3343 {
3344 	struct switchdev_attr attr = {
3345 		.orig_dev = p->dev,
3346 		.id = SWITCHDEV_ATTR_ID_PORT_MROUTER,
3347 		.flags = SWITCHDEV_F_DEFER,
3348 		.u.mrouter = is_mc_router,
3349 	};
3350 
3351 	switchdev_port_attr_set(p->dev, &attr, NULL);
3352 }
3353 
3354 static struct net_bridge_port *
3355 br_multicast_rport_from_node(struct net_bridge_mcast *brmctx,
3356 			     struct hlist_head *mc_router_list,
3357 			     struct hlist_node *rlist)
3358 {
3359 	struct net_bridge_mcast_port *pmctx;
3360 
3361 #if IS_ENABLED(CONFIG_IPV6)
3362 	if (mc_router_list == &brmctx->ip6_mc_router_list)
3363 		pmctx = hlist_entry(rlist, struct net_bridge_mcast_port,
3364 				    ip6_rlist);
3365 	else
3366 #endif
3367 		pmctx = hlist_entry(rlist, struct net_bridge_mcast_port,
3368 				    ip4_rlist);
3369 
3370 	return pmctx->port;
3371 }
3372 
3373 static struct hlist_node *
3374 br_multicast_get_rport_slot(struct net_bridge_mcast *brmctx,
3375 			    struct net_bridge_port *port,
3376 			    struct hlist_head *mc_router_list)
3377 
3378 {
3379 	struct hlist_node *slot = NULL;
3380 	struct net_bridge_port *p;
3381 	struct hlist_node *rlist;
3382 
3383 	hlist_for_each(rlist, mc_router_list) {
3384 		p = br_multicast_rport_from_node(brmctx, mc_router_list, rlist);
3385 
3386 		if ((unsigned long)port >= (unsigned long)p)
3387 			break;
3388 
3389 		slot = rlist;
3390 	}
3391 
3392 	return slot;
3393 }
3394 
3395 static bool br_multicast_no_router_otherpf(struct net_bridge_mcast_port *pmctx,
3396 					   struct hlist_node *rnode)
3397 {
3398 #if IS_ENABLED(CONFIG_IPV6)
3399 	if (rnode != &pmctx->ip6_rlist)
3400 		return hlist_unhashed(&pmctx->ip6_rlist);
3401 	else
3402 		return hlist_unhashed(&pmctx->ip4_rlist);
3403 #else
3404 	return true;
3405 #endif
3406 }
3407 
3408 /* Add port to router_list
3409  *  list is maintained ordered by pointer value
3410  *  and locked by br->multicast_lock and RCU
3411  */
3412 static void br_multicast_add_router(struct net_bridge_mcast *brmctx,
3413 				    struct net_bridge_mcast_port *pmctx,
3414 				    struct hlist_node *rlist,
3415 				    struct hlist_head *mc_router_list)
3416 {
3417 	struct hlist_node *slot;
3418 
3419 	if (!hlist_unhashed(rlist))
3420 		return;
3421 
3422 	slot = br_multicast_get_rport_slot(brmctx, pmctx->port, mc_router_list);
3423 
3424 	if (slot)
3425 		hlist_add_behind_rcu(rlist, slot);
3426 	else
3427 		hlist_add_head_rcu(rlist, mc_router_list);
3428 
3429 	/* For backwards compatibility for now, only notify if we
3430 	 * switched from no IPv4/IPv6 multicast router to a new
3431 	 * IPv4 or IPv6 multicast router.
3432 	 */
3433 	if (br_multicast_no_router_otherpf(pmctx, rlist)) {
3434 		br_rtr_notify(pmctx->port->br->dev, pmctx, RTM_NEWMDB);
3435 		br_port_mc_router_state_change(pmctx->port, true);
3436 	}
3437 }
3438 
3439 /* Add port to router_list
3440  *  list is maintained ordered by pointer value
3441  *  and locked by br->multicast_lock and RCU
3442  */
3443 static void br_ip4_multicast_add_router(struct net_bridge_mcast *brmctx,
3444 					struct net_bridge_mcast_port *pmctx)
3445 {
3446 	br_multicast_add_router(brmctx, pmctx, &pmctx->ip4_rlist,
3447 				&brmctx->ip4_mc_router_list);
3448 }
3449 
3450 /* Add port to router_list
3451  *  list is maintained ordered by pointer value
3452  *  and locked by br->multicast_lock and RCU
3453  */
3454 static void br_ip6_multicast_add_router(struct net_bridge_mcast *brmctx,
3455 					struct net_bridge_mcast_port *pmctx)
3456 {
3457 #if IS_ENABLED(CONFIG_IPV6)
3458 	br_multicast_add_router(brmctx, pmctx, &pmctx->ip6_rlist,
3459 				&brmctx->ip6_mc_router_list);
3460 #endif
3461 }
3462 
3463 static void br_multicast_mark_router(struct net_bridge_mcast *brmctx,
3464 				     struct net_bridge_mcast_port *pmctx,
3465 				     struct timer_list *timer,
3466 				     struct hlist_node *rlist,
3467 				     struct hlist_head *mc_router_list)
3468 {
3469 	unsigned long now = jiffies;
3470 
3471 	if (!br_multicast_ctx_should_use(brmctx, pmctx))
3472 		return;
3473 
3474 	if (!pmctx) {
3475 		if (brmctx->multicast_router == MDB_RTR_TYPE_TEMP_QUERY) {
3476 			if (!br_ip4_multicast_is_router(brmctx) &&
3477 			    !br_ip6_multicast_is_router(brmctx))
3478 				br_mc_router_state_change(brmctx->br, true);
3479 			mod_timer(timer, now + brmctx->multicast_querier_interval);
3480 		}
3481 		return;
3482 	}
3483 
3484 	if (pmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
3485 	    pmctx->multicast_router == MDB_RTR_TYPE_PERM)
3486 		return;
3487 
3488 	br_multicast_add_router(brmctx, pmctx, rlist, mc_router_list);
3489 	mod_timer(timer, now + brmctx->multicast_querier_interval);
3490 }
3491 
3492 static void br_ip4_multicast_mark_router(struct net_bridge_mcast *brmctx,
3493 					 struct net_bridge_mcast_port *pmctx)
3494 {
3495 	struct timer_list *timer = &brmctx->ip4_mc_router_timer;
3496 	struct hlist_node *rlist = NULL;
3497 
3498 	if (pmctx) {
3499 		timer = &pmctx->ip4_mc_router_timer;
3500 		rlist = &pmctx->ip4_rlist;
3501 	}
3502 
3503 	br_multicast_mark_router(brmctx, pmctx, timer, rlist,
3504 				 &brmctx->ip4_mc_router_list);
3505 }
3506 
3507 static void br_ip6_multicast_mark_router(struct net_bridge_mcast *brmctx,
3508 					 struct net_bridge_mcast_port *pmctx)
3509 {
3510 #if IS_ENABLED(CONFIG_IPV6)
3511 	struct timer_list *timer = &brmctx->ip6_mc_router_timer;
3512 	struct hlist_node *rlist = NULL;
3513 
3514 	if (pmctx) {
3515 		timer = &pmctx->ip6_mc_router_timer;
3516 		rlist = &pmctx->ip6_rlist;
3517 	}
3518 
3519 	br_multicast_mark_router(brmctx, pmctx, timer, rlist,
3520 				 &brmctx->ip6_mc_router_list);
3521 #endif
3522 }
3523 
3524 static void
3525 br_ip4_multicast_query_received(struct net_bridge_mcast *brmctx,
3526 				struct net_bridge_mcast_port *pmctx,
3527 				struct bridge_mcast_other_query *query,
3528 				struct br_ip *saddr,
3529 				unsigned long max_delay)
3530 {
3531 	if (!br_multicast_select_querier(brmctx, pmctx, saddr))
3532 		return;
3533 
3534 	br_multicast_update_query_timer(brmctx, query, max_delay);
3535 	br_ip4_multicast_mark_router(brmctx, pmctx);
3536 }
3537 
3538 #if IS_ENABLED(CONFIG_IPV6)
3539 static void
3540 br_ip6_multicast_query_received(struct net_bridge_mcast *brmctx,
3541 				struct net_bridge_mcast_port *pmctx,
3542 				struct bridge_mcast_other_query *query,
3543 				struct br_ip *saddr,
3544 				unsigned long max_delay)
3545 {
3546 	if (!br_multicast_select_querier(brmctx, pmctx, saddr))
3547 		return;
3548 
3549 	br_multicast_update_query_timer(brmctx, query, max_delay);
3550 	br_ip6_multicast_mark_router(brmctx, pmctx);
3551 }
3552 #endif
3553 
3554 static void br_ip4_multicast_query(struct net_bridge_mcast *brmctx,
3555 				   struct net_bridge_mcast_port *pmctx,
3556 				   struct sk_buff *skb,
3557 				   u16 vid)
3558 {
3559 	unsigned int transport_len = ip_transport_len(skb);
3560 	const struct iphdr *iph = ip_hdr(skb);
3561 	struct igmphdr *ih = igmp_hdr(skb);
3562 	struct net_bridge_mdb_entry *mp;
3563 	struct igmpv3_query *ih3;
3564 	struct net_bridge_port_group *p;
3565 	struct net_bridge_port_group __rcu **pp;
3566 	struct br_ip saddr = {};
3567 	unsigned long max_delay;
3568 	unsigned long now = jiffies;
3569 	__be32 group;
3570 
3571 	spin_lock(&brmctx->br->multicast_lock);
3572 	if (!br_multicast_ctx_should_use(brmctx, pmctx))
3573 		goto out;
3574 
3575 	group = ih->group;
3576 
3577 	if (transport_len == sizeof(*ih)) {
3578 		max_delay = ih->code * (HZ / IGMP_TIMER_SCALE);
3579 
3580 		if (!max_delay) {
3581 			max_delay = 10 * HZ;
3582 			group = 0;
3583 		}
3584 	} else if (transport_len >= sizeof(*ih3)) {
3585 		ih3 = igmpv3_query_hdr(skb);
3586 		if (ih3->nsrcs ||
3587 		    (brmctx->multicast_igmp_version == 3 && group &&
3588 		     ih3->suppress))
3589 			goto out;
3590 
3591 		max_delay = ih3->code ?
3592 			    igmpv3_mrt(ih3) * (HZ / IGMP_TIMER_SCALE) : 1;
3593 	} else {
3594 		goto out;
3595 	}
3596 
3597 	if (!group) {
3598 		saddr.proto = htons(ETH_P_IP);
3599 		saddr.src.ip4 = iph->saddr;
3600 
3601 		br_ip4_multicast_query_received(brmctx, pmctx,
3602 						&brmctx->ip4_other_query,
3603 						&saddr, max_delay);
3604 		goto out;
3605 	}
3606 
3607 	mp = br_mdb_ip4_get(brmctx->br, group, vid);
3608 	if (!mp)
3609 		goto out;
3610 
3611 	max_delay *= brmctx->multicast_last_member_count;
3612 
3613 	if (mp->host_joined &&
3614 	    (timer_pending(&mp->timer) ?
3615 	     time_after(mp->timer.expires, now + max_delay) :
3616 	     timer_delete_sync_try(&mp->timer) >= 0))
3617 		mod_timer(&mp->timer, now + max_delay);
3618 
3619 	for (pp = &mp->ports;
3620 	     (p = mlock_dereference(*pp, brmctx->br)) != NULL;
3621 	     pp = &p->next) {
3622 		if (timer_pending(&p->timer) ?
3623 		    time_after(p->timer.expires, now + max_delay) :
3624 		    timer_delete_sync_try(&p->timer) >= 0 &&
3625 		    (brmctx->multicast_igmp_version == 2 ||
3626 		     p->filter_mode == MCAST_EXCLUDE))
3627 			mod_timer(&p->timer, now + max_delay);
3628 	}
3629 
3630 out:
3631 	spin_unlock(&brmctx->br->multicast_lock);
3632 }
3633 
3634 #if IS_ENABLED(CONFIG_IPV6)
3635 static int br_ip6_multicast_query(struct net_bridge_mcast *brmctx,
3636 				  struct net_bridge_mcast_port *pmctx,
3637 				  struct sk_buff *skb,
3638 				  u16 vid)
3639 {
3640 	unsigned int transport_len = ipv6_transport_len(skb);
3641 	struct mld_msg *mld;
3642 	struct net_bridge_mdb_entry *mp;
3643 	struct mld2_query *mld2q;
3644 	struct net_bridge_port_group *p;
3645 	struct net_bridge_port_group __rcu **pp;
3646 	struct br_ip saddr = {};
3647 	unsigned long max_delay;
3648 	unsigned long now = jiffies;
3649 	unsigned int offset = skb_transport_offset(skb);
3650 	const struct in6_addr *group = NULL;
3651 	bool is_general_query;
3652 	int err = 0;
3653 
3654 	spin_lock(&brmctx->br->multicast_lock);
3655 	if (!br_multicast_ctx_should_use(brmctx, pmctx))
3656 		goto out;
3657 
3658 	if (transport_len == sizeof(*mld)) {
3659 		if (!pskb_may_pull(skb, offset + sizeof(*mld))) {
3660 			err = -EINVAL;
3661 			goto out;
3662 		}
3663 		mld = (struct mld_msg *) icmp6_hdr(skb);
3664 		max_delay = msecs_to_jiffies(ntohs(mld->mld_maxdelay));
3665 		if (max_delay)
3666 			group = &mld->mld_mca;
3667 	} else {
3668 		if (!pskb_may_pull(skb, offset + sizeof(*mld2q))) {
3669 			err = -EINVAL;
3670 			goto out;
3671 		}
3672 		mld2q = (struct mld2_query *)icmp6_hdr(skb);
3673 		if (!mld2q->mld2q_nsrcs)
3674 			group = &mld2q->mld2q_mca;
3675 		if (brmctx->multicast_mld_version == 2 &&
3676 		    !ipv6_addr_any(&mld2q->mld2q_mca) &&
3677 		    mld2q->mld2q_suppress)
3678 			goto out;
3679 
3680 		max_delay = max(msecs_to_jiffies(mldv2_mrd(mld2q)), 1UL);
3681 	}
3682 
3683 	is_general_query = group && ipv6_addr_any(group);
3684 
3685 	if (is_general_query) {
3686 		saddr.proto = htons(ETH_P_IPV6);
3687 		saddr.src.ip6 = ipv6_hdr(skb)->saddr;
3688 
3689 		br_ip6_multicast_query_received(brmctx, pmctx,
3690 						&brmctx->ip6_other_query,
3691 						&saddr, max_delay);
3692 		goto out;
3693 	} else if (!group) {
3694 		goto out;
3695 	}
3696 
3697 	mp = br_mdb_ip6_get(brmctx->br, group, vid);
3698 	if (!mp)
3699 		goto out;
3700 
3701 	max_delay *= brmctx->multicast_last_member_count;
3702 	if (mp->host_joined &&
3703 	    (timer_pending(&mp->timer) ?
3704 	     time_after(mp->timer.expires, now + max_delay) :
3705 	     timer_delete_sync_try(&mp->timer) >= 0))
3706 		mod_timer(&mp->timer, now + max_delay);
3707 
3708 	for (pp = &mp->ports;
3709 	     (p = mlock_dereference(*pp, brmctx->br)) != NULL;
3710 	     pp = &p->next) {
3711 		if (timer_pending(&p->timer) ?
3712 		    time_after(p->timer.expires, now + max_delay) :
3713 		    timer_delete_sync_try(&p->timer) >= 0 &&
3714 		    (brmctx->multicast_mld_version == 1 ||
3715 		     p->filter_mode == MCAST_EXCLUDE))
3716 			mod_timer(&p->timer, now + max_delay);
3717 	}
3718 
3719 out:
3720 	spin_unlock(&brmctx->br->multicast_lock);
3721 	return err;
3722 }
3723 #endif
3724 
3725 static void
3726 br_multicast_leave_group(struct net_bridge_mcast *brmctx,
3727 			 struct net_bridge_mcast_port *pmctx,
3728 			 struct br_ip *group,
3729 			 struct bridge_mcast_other_query *other_query,
3730 			 struct bridge_mcast_own_query *own_query,
3731 			 const unsigned char *src)
3732 {
3733 	struct net_bridge_mdb_entry *mp;
3734 	struct net_bridge_port_group *p;
3735 	unsigned long now;
3736 	unsigned long time;
3737 
3738 	spin_lock(&brmctx->br->multicast_lock);
3739 	if (!br_multicast_ctx_should_use(brmctx, pmctx))
3740 		goto out;
3741 
3742 	mp = br_mdb_ip_get(brmctx->br, group);
3743 	if (!mp)
3744 		goto out;
3745 
3746 	if (pmctx &&
3747 	    test_bit(BR_MULTICAST_FAST_LEAVE_BIT, &pmctx->port->flags)) {
3748 		struct net_bridge_port_group __rcu **pp;
3749 
3750 		for (pp = &mp->ports;
3751 		     (p = mlock_dereference(*pp, brmctx->br)) != NULL;
3752 		     pp = &p->next) {
3753 			if (!br_port_group_equal(p, pmctx->port, src))
3754 				continue;
3755 
3756 			if (p->flags & MDB_PG_FLAGS_PERMANENT)
3757 				break;
3758 
3759 			p->flags |= MDB_PG_FLAGS_FAST_LEAVE;
3760 			br_multicast_del_pg(mp, p, pp);
3761 			break;
3762 		}
3763 		goto out;
3764 	}
3765 
3766 	if (timer_pending(&other_query->timer))
3767 		goto out;
3768 
3769 	if (brmctx->multicast_querier) {
3770 		__br_multicast_send_query(brmctx, pmctx, NULL, NULL, &mp->addr,
3771 					  false, 0, NULL);
3772 
3773 		time = jiffies + brmctx->multicast_last_member_count *
3774 				 brmctx->multicast_last_member_interval;
3775 
3776 		mod_timer(&own_query->timer, time);
3777 
3778 		for (p = mlock_dereference(mp->ports, brmctx->br);
3779 		     p != NULL && pmctx != NULL;
3780 		     p = mlock_dereference(p->next, brmctx->br)) {
3781 			if (!br_port_group_equal(p, pmctx->port, src))
3782 				continue;
3783 
3784 			if (!hlist_unhashed(&p->mglist) &&
3785 			    (timer_pending(&p->timer) ?
3786 			     time_after(p->timer.expires, time) :
3787 			     timer_delete_sync_try(&p->timer) >= 0)) {
3788 				mod_timer(&p->timer, time);
3789 			}
3790 
3791 			break;
3792 		}
3793 	}
3794 
3795 	now = jiffies;
3796 	time = now + brmctx->multicast_last_member_count *
3797 		     brmctx->multicast_last_member_interval;
3798 
3799 	if (!pmctx) {
3800 		if (mp->host_joined &&
3801 		    (timer_pending(&mp->timer) ?
3802 		     time_after(mp->timer.expires, time) :
3803 		     timer_delete_sync_try(&mp->timer) >= 0)) {
3804 			mod_timer(&mp->timer, time);
3805 		}
3806 
3807 		goto out;
3808 	}
3809 
3810 	for (p = mlock_dereference(mp->ports, brmctx->br);
3811 	     p != NULL;
3812 	     p = mlock_dereference(p->next, brmctx->br)) {
3813 		if (p->key.port != pmctx->port)
3814 			continue;
3815 
3816 		if (!hlist_unhashed(&p->mglist) &&
3817 		    (timer_pending(&p->timer) ?
3818 		     time_after(p->timer.expires, time) :
3819 		     timer_delete_sync_try(&p->timer) >= 0)) {
3820 			mod_timer(&p->timer, time);
3821 		}
3822 
3823 		break;
3824 	}
3825 out:
3826 	spin_unlock(&brmctx->br->multicast_lock);
3827 }
3828 
3829 static void br_ip4_multicast_leave_group(struct net_bridge_mcast *brmctx,
3830 					 struct net_bridge_mcast_port *pmctx,
3831 					 __be32 group,
3832 					 __u16 vid,
3833 					 const unsigned char *src)
3834 {
3835 	struct br_ip br_group;
3836 	struct bridge_mcast_own_query *own_query;
3837 
3838 	if (ipv4_is_local_multicast(group))
3839 		return;
3840 
3841 	own_query = pmctx ? &pmctx->ip4_own_query : &brmctx->ip4_own_query;
3842 
3843 	memset(&br_group, 0, sizeof(br_group));
3844 	br_group.dst.ip4 = group;
3845 	br_group.proto = htons(ETH_P_IP);
3846 	br_group.vid = vid;
3847 
3848 	br_multicast_leave_group(brmctx, pmctx, &br_group,
3849 				 &brmctx->ip4_other_query,
3850 				 own_query, src);
3851 }
3852 
3853 #if IS_ENABLED(CONFIG_IPV6)
3854 static void br_ip6_multicast_leave_group(struct net_bridge_mcast *brmctx,
3855 					 struct net_bridge_mcast_port *pmctx,
3856 					 const struct in6_addr *group,
3857 					 __u16 vid,
3858 					 const unsigned char *src)
3859 {
3860 	struct br_ip br_group;
3861 	struct bridge_mcast_own_query *own_query;
3862 
3863 	if (ipv6_addr_is_ll_all_nodes(group))
3864 		return;
3865 
3866 	own_query = pmctx ? &pmctx->ip6_own_query : &brmctx->ip6_own_query;
3867 
3868 	memset(&br_group, 0, sizeof(br_group));
3869 	br_group.dst.ip6 = *group;
3870 	br_group.proto = htons(ETH_P_IPV6);
3871 	br_group.vid = vid;
3872 
3873 	br_multicast_leave_group(brmctx, pmctx, &br_group,
3874 				 &brmctx->ip6_other_query,
3875 				 own_query, src);
3876 }
3877 #endif
3878 
3879 static void br_multicast_err_count(const struct net_bridge *br,
3880 				   const struct net_bridge_port *p,
3881 				   __be16 proto)
3882 {
3883 	struct bridge_mcast_stats __percpu *stats;
3884 	struct bridge_mcast_stats *pstats;
3885 
3886 	if (!br_opt_get(br, BROPT_MULTICAST_STATS_ENABLED))
3887 		return;
3888 
3889 	if (p)
3890 		stats = p->mcast_stats;
3891 	else
3892 		stats = br->mcast_stats;
3893 	if (WARN_ON(!stats))
3894 		return;
3895 
3896 	pstats = this_cpu_ptr(stats);
3897 
3898 	u64_stats_update_begin(&pstats->syncp);
3899 	switch (proto) {
3900 	case htons(ETH_P_IP):
3901 		pstats->mstats.igmp_parse_errors++;
3902 		break;
3903 #if IS_ENABLED(CONFIG_IPV6)
3904 	case htons(ETH_P_IPV6):
3905 		pstats->mstats.mld_parse_errors++;
3906 		break;
3907 #endif
3908 	}
3909 	u64_stats_update_end(&pstats->syncp);
3910 }
3911 
3912 static void br_multicast_pim(struct net_bridge_mcast *brmctx,
3913 			     struct net_bridge_mcast_port *pmctx,
3914 			     const struct sk_buff *skb)
3915 {
3916 	unsigned int offset = skb_transport_offset(skb);
3917 	struct pimhdr *pimhdr, _pimhdr;
3918 
3919 	pimhdr = skb_header_pointer(skb, offset, sizeof(_pimhdr), &_pimhdr);
3920 	if (!pimhdr || pim_hdr_version(pimhdr) != PIM_VERSION ||
3921 	    pim_hdr_type(pimhdr) != PIM_TYPE_HELLO)
3922 		return;
3923 
3924 	spin_lock(&brmctx->br->multicast_lock);
3925 	br_ip4_multicast_mark_router(brmctx, pmctx);
3926 	spin_unlock(&brmctx->br->multicast_lock);
3927 }
3928 
3929 static int br_ip4_multicast_mrd_rcv(struct net_bridge_mcast *brmctx,
3930 				    struct net_bridge_mcast_port *pmctx,
3931 				    struct sk_buff *skb)
3932 {
3933 	if (ip_hdr(skb)->protocol != IPPROTO_IGMP ||
3934 	    igmp_hdr(skb)->type != IGMP_MRDISC_ADV)
3935 		return -ENOMSG;
3936 
3937 	spin_lock(&brmctx->br->multicast_lock);
3938 	br_ip4_multicast_mark_router(brmctx, pmctx);
3939 	spin_unlock(&brmctx->br->multicast_lock);
3940 
3941 	return 0;
3942 }
3943 
3944 static int br_multicast_ipv4_rcv(struct net_bridge_mcast *brmctx,
3945 				 struct net_bridge_mcast_port *pmctx,
3946 				 struct sk_buff *skb,
3947 				 u16 vid)
3948 {
3949 	struct net_bridge_port *p = pmctx ? pmctx->port : NULL;
3950 	const unsigned char *src;
3951 	struct igmphdr *ih;
3952 	int err;
3953 
3954 	err = ip_mc_check_igmp(skb);
3955 
3956 	if (err == -ENOMSG) {
3957 		if (!ipv4_is_local_multicast(ip_hdr(skb)->daddr)) {
3958 			BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
3959 		} else if (pim_ipv4_all_pim_routers(ip_hdr(skb)->daddr)) {
3960 			if (ip_hdr(skb)->protocol == IPPROTO_PIM)
3961 				br_multicast_pim(brmctx, pmctx, skb);
3962 		} else if (ipv4_is_all_snoopers(ip_hdr(skb)->daddr)) {
3963 			br_ip4_multicast_mrd_rcv(brmctx, pmctx, skb);
3964 		}
3965 
3966 		return 0;
3967 	} else if (err < 0) {
3968 		br_multicast_err_count(brmctx->br, p, skb->protocol);
3969 		return err;
3970 	}
3971 
3972 	ih = igmp_hdr(skb);
3973 	src = eth_hdr(skb)->h_source;
3974 	BR_INPUT_SKB_CB(skb)->igmp = ih->type;
3975 
3976 	switch (ih->type) {
3977 	case IGMP_HOST_MEMBERSHIP_REPORT:
3978 	case IGMPV2_HOST_MEMBERSHIP_REPORT:
3979 		BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
3980 		err = br_ip4_multicast_add_group(brmctx, pmctx, ih->group, vid,
3981 						 src, true);
3982 		break;
3983 	case IGMPV3_HOST_MEMBERSHIP_REPORT:
3984 		err = br_ip4_multicast_igmp3_report(brmctx, pmctx, skb, vid);
3985 		break;
3986 	case IGMP_HOST_MEMBERSHIP_QUERY:
3987 		br_ip4_multicast_query(brmctx, pmctx, skb, vid);
3988 		break;
3989 	case IGMP_HOST_LEAVE_MESSAGE:
3990 		br_ip4_multicast_leave_group(brmctx, pmctx, ih->group, vid, src);
3991 		break;
3992 	}
3993 
3994 	br_multicast_count(brmctx->br, p, skb, BR_INPUT_SKB_CB(skb)->igmp,
3995 			   BR_MCAST_DIR_RX);
3996 
3997 	return err;
3998 }
3999 
4000 #if IS_ENABLED(CONFIG_IPV6)
4001 static void br_ip6_multicast_mrd_rcv(struct net_bridge_mcast *brmctx,
4002 				     struct net_bridge_mcast_port *pmctx,
4003 				     struct sk_buff *skb)
4004 {
4005 	if (icmp6_hdr(skb)->icmp6_type != ICMPV6_MRDISC_ADV)
4006 		return;
4007 
4008 	spin_lock(&brmctx->br->multicast_lock);
4009 	br_ip6_multicast_mark_router(brmctx, pmctx);
4010 	spin_unlock(&brmctx->br->multicast_lock);
4011 }
4012 
4013 static int br_multicast_ipv6_rcv(struct net_bridge_mcast *brmctx,
4014 				 struct net_bridge_mcast_port *pmctx,
4015 				 struct sk_buff *skb,
4016 				 u16 vid)
4017 {
4018 	struct net_bridge_port *p = pmctx ? pmctx->port : NULL;
4019 	const unsigned char *src;
4020 	struct mld_msg *mld;
4021 	int err;
4022 
4023 	err = ipv6_mc_check_mld(skb);
4024 
4025 	if (err == -ENOMSG || err == -ENODATA) {
4026 		if (!ipv6_addr_is_ll_all_nodes(&ipv6_hdr(skb)->daddr))
4027 			BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
4028 		if (err == -ENODATA &&
4029 		    ipv6_addr_is_all_snoopers(&ipv6_hdr(skb)->daddr))
4030 			br_ip6_multicast_mrd_rcv(brmctx, pmctx, skb);
4031 
4032 		return 0;
4033 	} else if (err < 0) {
4034 		br_multicast_err_count(brmctx->br, p, skb->protocol);
4035 		return err;
4036 	}
4037 
4038 	mld = (struct mld_msg *)skb_transport_header(skb);
4039 	BR_INPUT_SKB_CB(skb)->igmp = mld->mld_type;
4040 
4041 	switch (mld->mld_type) {
4042 	case ICMPV6_MGM_REPORT:
4043 		src = eth_hdr(skb)->h_source;
4044 		BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
4045 		err = br_ip6_multicast_add_group(brmctx, pmctx, &mld->mld_mca,
4046 						 vid, src, true);
4047 		break;
4048 	case ICMPV6_MLD2_REPORT:
4049 		err = br_ip6_multicast_mld2_report(brmctx, pmctx, skb, vid);
4050 		break;
4051 	case ICMPV6_MGM_QUERY:
4052 		err = br_ip6_multicast_query(brmctx, pmctx, skb, vid);
4053 		break;
4054 	case ICMPV6_MGM_REDUCTION:
4055 		src = eth_hdr(skb)->h_source;
4056 		br_ip6_multicast_leave_group(brmctx, pmctx, &mld->mld_mca, vid,
4057 					     src);
4058 		break;
4059 	}
4060 
4061 	br_multicast_count(brmctx->br, p, skb, BR_INPUT_SKB_CB(skb)->igmp,
4062 			   BR_MCAST_DIR_RX);
4063 
4064 	return err;
4065 }
4066 #endif
4067 
4068 int br_multicast_rcv(struct net_bridge_mcast **brmctx,
4069 		     struct net_bridge_mcast_port **pmctx,
4070 		     struct net_bridge_vlan *vlan,
4071 		     struct sk_buff *skb, u16 vid)
4072 {
4073 	int ret = 0;
4074 
4075 	BR_INPUT_SKB_CB(skb)->igmp = 0;
4076 	BR_INPUT_SKB_CB(skb)->mrouters_only = 0;
4077 
4078 	if (!br_opt_get((*brmctx)->br, BROPT_MULTICAST_ENABLED))
4079 		return 0;
4080 
4081 	if (br_opt_get((*brmctx)->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) && vlan) {
4082 		const struct net_bridge_vlan *masterv;
4083 
4084 		/* the vlan has the master flag set only when transmitting
4085 		 * through the bridge device
4086 		 */
4087 		if (br_vlan_is_master(vlan)) {
4088 			masterv = vlan;
4089 			*brmctx = &vlan->br_mcast_ctx;
4090 			*pmctx = NULL;
4091 		} else {
4092 			masterv = vlan->brvlan;
4093 			*brmctx = &vlan->brvlan->br_mcast_ctx;
4094 			*pmctx = &vlan->port_mcast_ctx;
4095 		}
4096 
4097 		if (!(masterv->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED))
4098 			return 0;
4099 	}
4100 
4101 	switch (skb->protocol) {
4102 	case htons(ETH_P_IP):
4103 		ret = br_multicast_ipv4_rcv(*brmctx, *pmctx, skb, vid);
4104 		break;
4105 #if IS_ENABLED(CONFIG_IPV6)
4106 	case htons(ETH_P_IPV6):
4107 		ret = br_multicast_ipv6_rcv(*brmctx, *pmctx, skb, vid);
4108 		break;
4109 #endif
4110 	}
4111 
4112 	return ret;
4113 }
4114 
4115 static void br_multicast_query_expired(struct net_bridge_mcast *brmctx,
4116 				       struct bridge_mcast_own_query *query)
4117 {
4118 	spin_lock(&brmctx->br->multicast_lock);
4119 	if (br_multicast_ctx_vlan_disabled(brmctx))
4120 		goto out;
4121 
4122 	if (query->startup_sent < brmctx->multicast_startup_query_count)
4123 		query->startup_sent++;
4124 
4125 	br_multicast_send_query(brmctx, NULL, query);
4126 out:
4127 	spin_unlock(&brmctx->br->multicast_lock);
4128 }
4129 
4130 static void br_ip4_multicast_query_expired(struct timer_list *t)
4131 {
4132 	struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
4133 							     ip4_own_query.timer);
4134 
4135 	br_multicast_query_expired(brmctx, &brmctx->ip4_own_query);
4136 }
4137 
4138 #if IS_ENABLED(CONFIG_IPV6)
4139 static void br_ip6_multicast_query_expired(struct timer_list *t)
4140 {
4141 	struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
4142 							     ip6_own_query.timer);
4143 
4144 	br_multicast_query_expired(brmctx, &brmctx->ip6_own_query);
4145 }
4146 #endif
4147 
4148 static void br_multicast_gc_work(struct work_struct *work)
4149 {
4150 	struct net_bridge *br = container_of(work, struct net_bridge,
4151 					     mcast_gc_work);
4152 	HLIST_HEAD(deleted_head);
4153 
4154 	spin_lock_bh(&br->multicast_lock);
4155 	hlist_move_list(&br->mcast_gc_list, &deleted_head);
4156 	spin_unlock_bh(&br->multicast_lock);
4157 
4158 	br_multicast_gc(&deleted_head);
4159 }
4160 
4161 void br_multicast_ctx_init(struct net_bridge *br,
4162 			   struct net_bridge_vlan *vlan,
4163 			   struct net_bridge_mcast *brmctx)
4164 {
4165 	brmctx->br = br;
4166 	brmctx->vlan = vlan;
4167 	brmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
4168 	brmctx->multicast_last_member_count = 2;
4169 	brmctx->multicast_startup_query_count = 2;
4170 
4171 	brmctx->multicast_last_member_interval = HZ;
4172 	brmctx->multicast_query_response_interval = 10 * HZ;
4173 	brmctx->multicast_startup_query_interval = 125 * HZ / 4;
4174 	brmctx->multicast_query_interval = 125 * HZ;
4175 	brmctx->multicast_querier_interval = 255 * HZ;
4176 	brmctx->multicast_membership_interval = 260 * HZ;
4177 
4178 	brmctx->ip4_querier.port_ifidx = 0;
4179 	seqcount_spinlock_init(&brmctx->ip4_querier.seq, &br->multicast_lock);
4180 	brmctx->multicast_igmp_version = 2;
4181 #if IS_ENABLED(CONFIG_IPV6)
4182 	brmctx->multicast_mld_version = 1;
4183 	brmctx->ip6_querier.port_ifidx = 0;
4184 	seqcount_spinlock_init(&brmctx->ip6_querier.seq, &br->multicast_lock);
4185 #endif
4186 
4187 	skb_queue_head_init(&brmctx->query_queue);
4188 	INIT_WORK(&brmctx->query_queue_work, br_multicast_query_queue_work);
4189 
4190 	timer_setup(&brmctx->ip4_mc_router_timer,
4191 		    br_ip4_multicast_local_router_expired, 0);
4192 	timer_setup(&brmctx->ip4_other_query.timer,
4193 		    br_ip4_multicast_querier_expired, 0);
4194 	timer_setup(&brmctx->ip4_other_query.delay_timer,
4195 		    br_multicast_query_delay_expired, 0);
4196 	timer_setup(&brmctx->ip4_own_query.timer,
4197 		    br_ip4_multicast_query_expired, 0);
4198 #if IS_ENABLED(CONFIG_IPV6)
4199 	timer_setup(&brmctx->ip6_mc_router_timer,
4200 		    br_ip6_multicast_local_router_expired, 0);
4201 	timer_setup(&brmctx->ip6_other_query.timer,
4202 		    br_ip6_multicast_querier_expired, 0);
4203 	timer_setup(&brmctx->ip6_other_query.delay_timer,
4204 		    br_multicast_query_delay_expired, 0);
4205 	timer_setup(&brmctx->ip6_own_query.timer,
4206 		    br_ip6_multicast_query_expired, 0);
4207 #endif
4208 }
4209 
4210 void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx)
4211 {
4212 	__br_multicast_stop(brmctx);
4213 	cancel_work_sync(&brmctx->query_queue_work);
4214 	__skb_queue_purge(&brmctx->query_queue);
4215 }
4216 
4217 void br_multicast_init(struct net_bridge *br)
4218 {
4219 	br->hash_max = BR_MULTICAST_DEFAULT_HASH_MAX;
4220 
4221 	br_multicast_ctx_init(br, NULL, &br->multicast_ctx);
4222 
4223 	br_opt_toggle(br, BROPT_MULTICAST_ENABLED, true);
4224 	br_opt_toggle(br, BROPT_HAS_IPV6_ADDR, true);
4225 
4226 	spin_lock_init(&br->multicast_lock);
4227 	INIT_HLIST_HEAD(&br->mdb_list);
4228 	INIT_HLIST_HEAD(&br->mcast_gc_list);
4229 	INIT_WORK(&br->mcast_gc_work, br_multicast_gc_work);
4230 }
4231 
4232 static void br_ip4_multicast_join_snoopers(struct net_bridge *br)
4233 {
4234 	struct in_device *in_dev = in_dev_get(br->dev);
4235 
4236 	if (!in_dev)
4237 		return;
4238 
4239 	__ip_mc_inc_group(in_dev, htonl(INADDR_ALLSNOOPERS_GROUP), GFP_ATOMIC);
4240 	in_dev_put(in_dev);
4241 }
4242 
4243 #if IS_ENABLED(CONFIG_IPV6)
4244 static void br_ip6_multicast_join_snoopers(struct net_bridge *br)
4245 {
4246 	struct in6_addr addr;
4247 
4248 	ipv6_addr_set(&addr, htonl(0xff020000), 0, 0, htonl(0x6a));
4249 	ipv6_dev_mc_inc(br->dev, &addr);
4250 }
4251 #else
4252 static inline void br_ip6_multicast_join_snoopers(struct net_bridge *br)
4253 {
4254 }
4255 #endif
4256 
4257 void br_multicast_join_snoopers(struct net_bridge *br)
4258 {
4259 	br_ip4_multicast_join_snoopers(br);
4260 	br_ip6_multicast_join_snoopers(br);
4261 }
4262 
4263 static void br_ip4_multicast_leave_snoopers(struct net_bridge *br)
4264 {
4265 	struct in_device *in_dev = in_dev_get(br->dev);
4266 
4267 	if (WARN_ON(!in_dev))
4268 		return;
4269 
4270 	__ip_mc_dec_group(in_dev, htonl(INADDR_ALLSNOOPERS_GROUP), GFP_ATOMIC);
4271 	in_dev_put(in_dev);
4272 }
4273 
4274 #if IS_ENABLED(CONFIG_IPV6)
4275 static void br_ip6_multicast_leave_snoopers(struct net_bridge *br)
4276 {
4277 	struct in6_addr addr;
4278 
4279 	ipv6_addr_set(&addr, htonl(0xff020000), 0, 0, htonl(0x6a));
4280 	ipv6_dev_mc_dec(br->dev, &addr);
4281 }
4282 #else
4283 static inline void br_ip6_multicast_leave_snoopers(struct net_bridge *br)
4284 {
4285 }
4286 #endif
4287 
4288 void br_multicast_leave_snoopers(struct net_bridge *br)
4289 {
4290 	br_ip4_multicast_leave_snoopers(br);
4291 	br_ip6_multicast_leave_snoopers(br);
4292 }
4293 
4294 static void __br_multicast_open_query(struct net_bridge *br,
4295 				      struct bridge_mcast_own_query *query)
4296 {
4297 	query->startup_sent = 0;
4298 
4299 	if (!br_opt_get(br, BROPT_MULTICAST_ENABLED))
4300 		return;
4301 
4302 	mod_timer(&query->timer, jiffies);
4303 }
4304 
4305 static void __br_multicast_open(struct net_bridge_mcast *brmctx)
4306 {
4307 	__br_multicast_open_query(brmctx->br, &brmctx->ip4_own_query);
4308 #if IS_ENABLED(CONFIG_IPV6)
4309 	__br_multicast_open_query(brmctx->br, &brmctx->ip6_own_query);
4310 #endif
4311 }
4312 
4313 void br_multicast_open(struct net_bridge *br)
4314 {
4315 	ASSERT_RTNL();
4316 
4317 	if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
4318 		struct net_bridge_vlan_group *vg;
4319 		struct net_bridge_vlan *vlan;
4320 
4321 		vg = br_vlan_group(br);
4322 		if (vg) {
4323 			list_for_each_entry(vlan, &vg->vlan_list, vlist) {
4324 				struct net_bridge_mcast *brmctx;
4325 
4326 				brmctx = &vlan->br_mcast_ctx;
4327 				if (br_vlan_is_brentry(vlan) &&
4328 				    !br_multicast_ctx_vlan_disabled(brmctx))
4329 					__br_multicast_open(&vlan->br_mcast_ctx);
4330 			}
4331 		}
4332 	} else {
4333 		__br_multicast_open(&br->multicast_ctx);
4334 	}
4335 }
4336 
4337 static void __br_multicast_stop(struct net_bridge_mcast *brmctx)
4338 {
4339 	timer_delete_sync(&brmctx->ip4_mc_router_timer);
4340 	timer_delete_sync(&brmctx->ip4_other_query.timer);
4341 	timer_delete_sync(&brmctx->ip4_other_query.delay_timer);
4342 	timer_delete_sync(&brmctx->ip4_own_query.timer);
4343 #if IS_ENABLED(CONFIG_IPV6)
4344 	timer_delete_sync(&brmctx->ip6_mc_router_timer);
4345 	timer_delete_sync(&brmctx->ip6_other_query.timer);
4346 	timer_delete_sync(&brmctx->ip6_other_query.delay_timer);
4347 	timer_delete_sync(&brmctx->ip6_own_query.timer);
4348 #endif
4349 }
4350 
4351 void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v, u8 state)
4352 {
4353 #if IS_ENABLED(CONFIG_BRIDGE_VLAN_FILTERING)
4354 	struct net_bridge *br;
4355 
4356 	if (!br_vlan_should_use(v))
4357 		return;
4358 
4359 	if (br_vlan_is_master(v))
4360 		return;
4361 
4362 	br = v->port->br;
4363 
4364 	if (!br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
4365 		return;
4366 
4367 	if (br_vlan_state_allowed(state, true))
4368 		br_multicast_enable_port_ctx(&v->port_mcast_ctx);
4369 
4370 	/* Multicast is not disabled for the vlan when it goes in
4371 	 * blocking state because the timers will expire and stop by
4372 	 * themselves without sending more queries.
4373 	 */
4374 #endif
4375 }
4376 
4377 void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan, bool on)
4378 {
4379 	struct net_bridge *br;
4380 
4381 	/* it's okay to check for the flag without the multicast lock because it
4382 	 * can only change under RTNL -> multicast_lock, we need the latter to
4383 	 * sync with timers and packets
4384 	 */
4385 	if (on == !!(vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED))
4386 		return;
4387 
4388 	if (br_vlan_is_master(vlan)) {
4389 		br = vlan->br;
4390 
4391 		if (on &&
4392 		    (!br_vlan_is_brentry(vlan) ||
4393 		     br_multicast_ctx_vlan_global_disabled(&vlan->br_mcast_ctx)))
4394 			return;
4395 
4396 		spin_lock_bh(&br->multicast_lock);
4397 		vlan->priv_flags ^= BR_VLFLAG_MCAST_ENABLED;
4398 		spin_unlock_bh(&br->multicast_lock);
4399 
4400 		if (on)
4401 			__br_multicast_open(&vlan->br_mcast_ctx);
4402 		else
4403 			__br_multicast_stop(&vlan->br_mcast_ctx);
4404 	} else {
4405 		struct net_bridge_mcast *brmctx;
4406 
4407 		brmctx = br_multicast_port_ctx_get_global(&vlan->port_mcast_ctx);
4408 		if (on && br_multicast_ctx_vlan_global_disabled(brmctx))
4409 			return;
4410 
4411 		br = vlan->port->br;
4412 		spin_lock_bh(&br->multicast_lock);
4413 		vlan->priv_flags ^= BR_VLFLAG_MCAST_ENABLED;
4414 		if (on)
4415 			__br_multicast_enable_port_ctx(&vlan->port_mcast_ctx);
4416 		else
4417 			__br_multicast_disable_port_ctx(&vlan->port_mcast_ctx);
4418 		spin_unlock_bh(&br->multicast_lock);
4419 	}
4420 }
4421 
4422 static void br_multicast_toggle_vlan(struct net_bridge_vlan *vlan, bool on)
4423 {
4424 	struct net_bridge_port *p;
4425 
4426 	if (WARN_ON_ONCE(!br_vlan_is_master(vlan)))
4427 		return;
4428 
4429 	list_for_each_entry(p, &vlan->br->port_list, list) {
4430 		struct net_bridge_vlan *vport;
4431 
4432 		vport = br_vlan_find(nbp_vlan_group(p), vlan->vid);
4433 		if (!vport)
4434 			continue;
4435 		br_multicast_toggle_one_vlan(vport, on);
4436 	}
4437 
4438 	if (br_vlan_is_brentry(vlan))
4439 		br_multicast_toggle_one_vlan(vlan, on);
4440 }
4441 
4442 int br_multicast_toggle_vlan_snooping(struct net_bridge *br, bool on,
4443 				      struct netlink_ext_ack *extack)
4444 {
4445 	struct net_bridge_vlan_group *vg;
4446 	struct net_bridge_vlan *vlan;
4447 	struct net_bridge_port *p;
4448 
4449 	if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) == on)
4450 		return 0;
4451 
4452 	if (on && !br_opt_get(br, BROPT_VLAN_ENABLED)) {
4453 		NL_SET_ERR_MSG_MOD(extack, "Cannot enable multicast vlan snooping with vlan filtering disabled");
4454 		return -EINVAL;
4455 	}
4456 
4457 	vg = br_vlan_group(br);
4458 	if (!vg)
4459 		return 0;
4460 
4461 	br_opt_toggle(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED, on);
4462 
4463 	/* disable/enable non-vlan mcast contexts based on vlan snooping */
4464 	if (on)
4465 		__br_multicast_stop(&br->multicast_ctx);
4466 	else
4467 		__br_multicast_open(&br->multicast_ctx);
4468 	list_for_each_entry(p, &br->port_list, list) {
4469 		if (on)
4470 			br_multicast_disable_port_ctx(&p->multicast_ctx);
4471 		else
4472 			br_multicast_enable_port_ctx(&p->multicast_ctx);
4473 	}
4474 
4475 	list_for_each_entry(vlan, &vg->vlan_list, vlist)
4476 		br_multicast_toggle_vlan(vlan, on);
4477 
4478 	return 0;
4479 }
4480 
4481 bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan, bool on)
4482 {
4483 	ASSERT_RTNL();
4484 
4485 	/* BR_VLFLAG_GLOBAL_MCAST_ENABLED relies on eventual consistency and
4486 	 * requires only RTNL to change
4487 	 */
4488 	if (on == !!(vlan->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED))
4489 		return false;
4490 
4491 	vlan->priv_flags ^= BR_VLFLAG_GLOBAL_MCAST_ENABLED;
4492 	br_multicast_toggle_vlan(vlan, on);
4493 
4494 	return true;
4495 }
4496 
4497 void br_multicast_stop(struct net_bridge *br)
4498 {
4499 	ASSERT_RTNL();
4500 
4501 	if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
4502 		struct net_bridge_vlan_group *vg;
4503 		struct net_bridge_vlan *vlan;
4504 
4505 		vg = br_vlan_group(br);
4506 		if (vg) {
4507 			list_for_each_entry(vlan, &vg->vlan_list, vlist) {
4508 				struct net_bridge_mcast *brmctx;
4509 
4510 				brmctx = &vlan->br_mcast_ctx;
4511 				if (br_vlan_is_brentry(vlan) &&
4512 				    !br_multicast_ctx_vlan_disabled(brmctx))
4513 					__br_multicast_stop(&vlan->br_mcast_ctx);
4514 			}
4515 		}
4516 	} else {
4517 		__br_multicast_stop(&br->multicast_ctx);
4518 	}
4519 }
4520 
4521 void br_multicast_dev_del(struct net_bridge *br)
4522 {
4523 	struct net_bridge_mdb_entry *mp;
4524 	HLIST_HEAD(deleted_head);
4525 	struct hlist_node *tmp;
4526 
4527 	spin_lock_bh(&br->multicast_lock);
4528 	hlist_for_each_entry_safe(mp, tmp, &br->mdb_list, mdb_node)
4529 		br_multicast_del_mdb_entry(mp);
4530 	hlist_move_list(&br->mcast_gc_list, &deleted_head);
4531 	spin_unlock_bh(&br->multicast_lock);
4532 
4533 	br_multicast_ctx_deinit(&br->multicast_ctx);
4534 	br_multicast_gc(&deleted_head);
4535 	cancel_work_sync(&br->mcast_gc_work);
4536 }
4537 
4538 int br_multicast_set_router(struct net_bridge_mcast *brmctx, unsigned long val)
4539 {
4540 	int err = -EINVAL;
4541 
4542 	spin_lock_bh(&brmctx->br->multicast_lock);
4543 
4544 	switch (val) {
4545 	case MDB_RTR_TYPE_DISABLED:
4546 	case MDB_RTR_TYPE_PERM:
4547 		br_mc_router_state_change(brmctx->br, val == MDB_RTR_TYPE_PERM);
4548 		timer_delete(&brmctx->ip4_mc_router_timer);
4549 #if IS_ENABLED(CONFIG_IPV6)
4550 		timer_delete(&brmctx->ip6_mc_router_timer);
4551 #endif
4552 		brmctx->multicast_router = val;
4553 		err = 0;
4554 		break;
4555 	case MDB_RTR_TYPE_TEMP_QUERY:
4556 		if (brmctx->multicast_router != MDB_RTR_TYPE_TEMP_QUERY)
4557 			br_mc_router_state_change(brmctx->br, false);
4558 		brmctx->multicast_router = val;
4559 		err = 0;
4560 		break;
4561 	}
4562 
4563 	spin_unlock_bh(&brmctx->br->multicast_lock);
4564 
4565 	return err;
4566 }
4567 
4568 static void
4569 br_multicast_rport_del_notify(struct net_bridge_mcast_port *pmctx, bool deleted)
4570 {
4571 	if (!deleted)
4572 		return;
4573 
4574 	/* For backwards compatibility for now, only notify if there is
4575 	 * no multicast router anymore for both IPv4 and IPv6.
4576 	 */
4577 	if (!hlist_unhashed(&pmctx->ip4_rlist))
4578 		return;
4579 #if IS_ENABLED(CONFIG_IPV6)
4580 	if (!hlist_unhashed(&pmctx->ip6_rlist))
4581 		return;
4582 #endif
4583 
4584 	br_rtr_notify(pmctx->port->br->dev, pmctx, RTM_DELMDB);
4585 	br_port_mc_router_state_change(pmctx->port, false);
4586 
4587 	/* don't allow timer refresh */
4588 	if (pmctx->multicast_router == MDB_RTR_TYPE_TEMP)
4589 		pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
4590 }
4591 
4592 int br_multicast_set_port_router(struct net_bridge_mcast_port *pmctx,
4593 				 unsigned long val)
4594 {
4595 	struct net_bridge_mcast *brmctx;
4596 	unsigned long now = jiffies;
4597 	int err = -EINVAL;
4598 	bool del = false;
4599 
4600 	brmctx = br_multicast_port_ctx_get_global(pmctx);
4601 	spin_lock_bh(&brmctx->br->multicast_lock);
4602 	if (pmctx->multicast_router == val) {
4603 		/* Refresh the temp router port timer */
4604 		if (pmctx->multicast_router == MDB_RTR_TYPE_TEMP) {
4605 			mod_timer(&pmctx->ip4_mc_router_timer,
4606 				  now + brmctx->multicast_querier_interval);
4607 #if IS_ENABLED(CONFIG_IPV6)
4608 			mod_timer(&pmctx->ip6_mc_router_timer,
4609 				  now + brmctx->multicast_querier_interval);
4610 #endif
4611 		}
4612 		err = 0;
4613 		goto unlock;
4614 	}
4615 	switch (val) {
4616 	case MDB_RTR_TYPE_DISABLED:
4617 		pmctx->multicast_router = MDB_RTR_TYPE_DISABLED;
4618 		del |= br_ip4_multicast_rport_del(pmctx);
4619 		timer_delete(&pmctx->ip4_mc_router_timer);
4620 		del |= br_ip6_multicast_rport_del(pmctx);
4621 #if IS_ENABLED(CONFIG_IPV6)
4622 		timer_delete(&pmctx->ip6_mc_router_timer);
4623 #endif
4624 		br_multicast_rport_del_notify(pmctx, del);
4625 		break;
4626 	case MDB_RTR_TYPE_TEMP_QUERY:
4627 		pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
4628 		del |= br_ip4_multicast_rport_del(pmctx);
4629 		del |= br_ip6_multicast_rport_del(pmctx);
4630 		br_multicast_rport_del_notify(pmctx, del);
4631 		break;
4632 	case MDB_RTR_TYPE_PERM:
4633 		pmctx->multicast_router = MDB_RTR_TYPE_PERM;
4634 		timer_delete(&pmctx->ip4_mc_router_timer);
4635 		br_ip4_multicast_add_router(brmctx, pmctx);
4636 #if IS_ENABLED(CONFIG_IPV6)
4637 		timer_delete(&pmctx->ip6_mc_router_timer);
4638 #endif
4639 		br_ip6_multicast_add_router(brmctx, pmctx);
4640 		break;
4641 	case MDB_RTR_TYPE_TEMP:
4642 		pmctx->multicast_router = MDB_RTR_TYPE_TEMP;
4643 		br_ip4_multicast_mark_router(brmctx, pmctx);
4644 		br_ip6_multicast_mark_router(brmctx, pmctx);
4645 		break;
4646 	default:
4647 		goto unlock;
4648 	}
4649 	err = 0;
4650 unlock:
4651 	spin_unlock_bh(&brmctx->br->multicast_lock);
4652 
4653 	return err;
4654 }
4655 
4656 int br_multicast_set_vlan_router(struct net_bridge_vlan *v, u8 mcast_router)
4657 {
4658 	int err;
4659 
4660 	if (br_vlan_is_master(v))
4661 		err = br_multicast_set_router(&v->br_mcast_ctx, mcast_router);
4662 	else
4663 		err = br_multicast_set_port_router(&v->port_mcast_ctx,
4664 						   mcast_router);
4665 
4666 	return err;
4667 }
4668 
4669 static void br_multicast_start_querier(struct net_bridge_mcast *brmctx,
4670 				       struct bridge_mcast_own_query *query)
4671 {
4672 	struct net_bridge_port *port;
4673 
4674 	if (!br_multicast_ctx_matches_vlan_snooping(brmctx))
4675 		return;
4676 
4677 	__br_multicast_open_query(brmctx->br, query);
4678 
4679 	rcu_read_lock();
4680 	list_for_each_entry_rcu(port, &brmctx->br->port_list, list) {
4681 		struct bridge_mcast_own_query *ip4_own_query;
4682 #if IS_ENABLED(CONFIG_IPV6)
4683 		struct bridge_mcast_own_query *ip6_own_query;
4684 #endif
4685 
4686 		if (br_multicast_port_ctx_state_stopped(&port->multicast_ctx))
4687 			continue;
4688 
4689 		if (br_multicast_ctx_is_vlan(brmctx)) {
4690 			struct net_bridge_vlan *vlan;
4691 
4692 			vlan = br_vlan_find(nbp_vlan_group_rcu(port),
4693 					    brmctx->vlan->vid);
4694 			if (!vlan ||
4695 			    br_multicast_port_ctx_state_stopped(&vlan->port_mcast_ctx))
4696 				continue;
4697 
4698 			ip4_own_query = &vlan->port_mcast_ctx.ip4_own_query;
4699 #if IS_ENABLED(CONFIG_IPV6)
4700 			ip6_own_query = &vlan->port_mcast_ctx.ip6_own_query;
4701 #endif
4702 		} else {
4703 			ip4_own_query = &port->multicast_ctx.ip4_own_query;
4704 #if IS_ENABLED(CONFIG_IPV6)
4705 			ip6_own_query = &port->multicast_ctx.ip6_own_query;
4706 #endif
4707 		}
4708 
4709 		if (query == &brmctx->ip4_own_query)
4710 			br_multicast_enable(ip4_own_query);
4711 #if IS_ENABLED(CONFIG_IPV6)
4712 		else
4713 			br_multicast_enable(ip6_own_query);
4714 #endif
4715 	}
4716 	rcu_read_unlock();
4717 }
4718 
4719 static void br_multicast_enable_all_ports(struct net_bridge *br)
4720 {
4721 	struct net_bridge_port *port;
4722 
4723 	if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
4724 		return;
4725 
4726 	list_for_each_entry(port, &br->port_list, list)
4727 		__br_multicast_enable_port_ctx(&port->multicast_ctx);
4728 }
4729 
4730 static void br_multicast_disable_all_ports(struct net_bridge *br)
4731 {
4732 	struct net_bridge_port *port;
4733 
4734 	if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
4735 		return;
4736 
4737 	list_for_each_entry(port, &br->port_list, list)
4738 		__br_multicast_disable_port_ctx(&port->multicast_ctx);
4739 }
4740 
4741 int br_multicast_toggle(struct net_bridge *br, unsigned long val,
4742 			struct netlink_ext_ack *extack)
4743 {
4744 	bool change_snoopers = false;
4745 	int err = 0;
4746 
4747 	spin_lock_bh(&br->multicast_lock);
4748 	if (!!br_opt_get(br, BROPT_MULTICAST_ENABLED) == !!val)
4749 		goto unlock;
4750 
4751 	err = br_mc_disabled_update(br->dev, val, extack);
4752 	if (err == -EOPNOTSUPP)
4753 		err = 0;
4754 	if (err)
4755 		goto unlock;
4756 
4757 	br_opt_toggle(br, BROPT_MULTICAST_ENABLED, !!val);
4758 	if (!br_opt_get(br, BROPT_MULTICAST_ENABLED)) {
4759 		change_snoopers = true;
4760 		br_multicast_disable_all_ports(br);
4761 		goto unlock;
4762 	}
4763 
4764 	if (!netif_running(br->dev))
4765 		goto unlock;
4766 
4767 	br_multicast_open(br);
4768 	br_multicast_enable_all_ports(br);
4769 
4770 	change_snoopers = true;
4771 
4772 unlock:
4773 	spin_unlock_bh(&br->multicast_lock);
4774 
4775 	/* br_multicast_join_snoopers has the potential to cause
4776 	 * an MLD Report/Leave to be delivered to br_multicast_rcv,
4777 	 * which would in turn call br_multicast_add_group, which would
4778 	 * attempt to acquire multicast_lock. This function should be
4779 	 * called after the lock has been released to avoid deadlocks on
4780 	 * multicast_lock.
4781 	 *
4782 	 * br_multicast_leave_snoopers does not have the problem since
4783 	 * br_multicast_rcv first checks BROPT_MULTICAST_ENABLED, and
4784 	 * returns without calling br_multicast_ipv4/6_rcv if it's not
4785 	 * enabled. Moved both functions out just for symmetry.
4786 	 */
4787 	if (change_snoopers) {
4788 		if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
4789 			br_multicast_join_snoopers(br);
4790 		else
4791 			br_multicast_leave_snoopers(br);
4792 	}
4793 
4794 	return err;
4795 }
4796 
4797 bool br_multicast_enabled(const struct net_device *dev)
4798 {
4799 	struct net_bridge *br = netdev_priv(dev);
4800 
4801 	return !!br_opt_get(br, BROPT_MULTICAST_ENABLED);
4802 }
4803 EXPORT_SYMBOL_GPL(br_multicast_enabled);
4804 
4805 bool br_multicast_router(const struct net_device *dev)
4806 {
4807 	struct net_bridge *br = netdev_priv(dev);
4808 	bool is_router;
4809 
4810 	spin_lock_bh(&br->multicast_lock);
4811 	is_router = br_multicast_is_router(&br->multicast_ctx, NULL);
4812 	spin_unlock_bh(&br->multicast_lock);
4813 	return is_router;
4814 }
4815 EXPORT_SYMBOL_GPL(br_multicast_router);
4816 
4817 int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val)
4818 {
4819 	unsigned long max_delay;
4820 
4821 	val = !!val;
4822 
4823 	spin_lock_bh(&brmctx->br->multicast_lock);
4824 	if (brmctx->multicast_querier == val)
4825 		goto unlock;
4826 
4827 	WRITE_ONCE(brmctx->multicast_querier, val);
4828 	if (!val)
4829 		goto unlock;
4830 
4831 	max_delay = brmctx->multicast_query_response_interval;
4832 
4833 	if (!timer_pending(&brmctx->ip4_other_query.timer))
4834 		mod_timer(&brmctx->ip4_other_query.delay_timer,
4835 			  jiffies + max_delay);
4836 
4837 	br_multicast_start_querier(brmctx, &brmctx->ip4_own_query);
4838 
4839 #if IS_ENABLED(CONFIG_IPV6)
4840 	if (!timer_pending(&brmctx->ip6_other_query.timer))
4841 		mod_timer(&brmctx->ip6_other_query.delay_timer,
4842 			  jiffies + max_delay);
4843 
4844 	br_multicast_start_querier(brmctx, &brmctx->ip6_own_query);
4845 #endif
4846 
4847 unlock:
4848 	spin_unlock_bh(&brmctx->br->multicast_lock);
4849 
4850 	return 0;
4851 }
4852 
4853 int br_multicast_set_igmp_version(struct net_bridge_mcast *brmctx,
4854 				  unsigned long val)
4855 {
4856 	/* Currently we support only version 2 and 3 */
4857 	switch (val) {
4858 	case 2:
4859 	case 3:
4860 		break;
4861 	default:
4862 		return -EINVAL;
4863 	}
4864 
4865 	spin_lock_bh(&brmctx->br->multicast_lock);
4866 	brmctx->multicast_igmp_version = val;
4867 	spin_unlock_bh(&brmctx->br->multicast_lock);
4868 
4869 	return 0;
4870 }
4871 
4872 #if IS_ENABLED(CONFIG_IPV6)
4873 int br_multicast_set_mld_version(struct net_bridge_mcast *brmctx,
4874 				 unsigned long val)
4875 {
4876 	/* Currently we support version 1 and 2 */
4877 	switch (val) {
4878 	case 1:
4879 	case 2:
4880 		break;
4881 	default:
4882 		return -EINVAL;
4883 	}
4884 
4885 	spin_lock_bh(&brmctx->br->multicast_lock);
4886 	brmctx->multicast_mld_version = val;
4887 	spin_unlock_bh(&brmctx->br->multicast_lock);
4888 
4889 	return 0;
4890 }
4891 #endif
4892 
4893 void br_multicast_set_query_intvl(struct net_bridge_mcast *brmctx,
4894 				  unsigned long val)
4895 {
4896 	unsigned long intvl_jiffies = clock_t_to_jiffies(val);
4897 
4898 	if (intvl_jiffies < BR_MULTICAST_QUERY_INTVL_MIN) {
4899 		br_info(brmctx->br,
4900 			"trying to set multicast query interval below minimum, setting to %lu (%ums)\n",
4901 			jiffies_to_clock_t(BR_MULTICAST_QUERY_INTVL_MIN),
4902 			jiffies_to_msecs(BR_MULTICAST_QUERY_INTVL_MIN));
4903 		intvl_jiffies = BR_MULTICAST_QUERY_INTVL_MIN;
4904 	}
4905 
4906 	if (intvl_jiffies > BR_MULTICAST_QUERY_INTVL_MAX) {
4907 		br_info(brmctx->br,
4908 			"trying to set multicast query interval above maximum, setting to %lu (%ums)\n",
4909 			jiffies_to_clock_t(BR_MULTICAST_QUERY_INTVL_MAX),
4910 			jiffies_to_msecs(BR_MULTICAST_QUERY_INTVL_MAX));
4911 		intvl_jiffies = BR_MULTICAST_QUERY_INTVL_MAX;
4912 	}
4913 
4914 	brmctx->multicast_query_interval = intvl_jiffies;
4915 }
4916 
4917 void br_multicast_set_startup_query_intvl(struct net_bridge_mcast *brmctx,
4918 					  unsigned long val)
4919 {
4920 	unsigned long intvl_jiffies = clock_t_to_jiffies(val);
4921 
4922 	if (intvl_jiffies < BR_MULTICAST_STARTUP_QUERY_INTVL_MIN) {
4923 		br_info(brmctx->br,
4924 			"trying to set multicast startup query interval below minimum, setting to %lu (%ums)\n",
4925 			jiffies_to_clock_t(BR_MULTICAST_STARTUP_QUERY_INTVL_MIN),
4926 			jiffies_to_msecs(BR_MULTICAST_STARTUP_QUERY_INTVL_MIN));
4927 		intvl_jiffies = BR_MULTICAST_STARTUP_QUERY_INTVL_MIN;
4928 	}
4929 
4930 	if (intvl_jiffies > BR_MULTICAST_STARTUP_QUERY_INTVL_MAX) {
4931 		br_info(brmctx->br,
4932 			"trying to set multicast startup query interval above maximum, setting to %lu (%ums)\n",
4933 			jiffies_to_clock_t(BR_MULTICAST_STARTUP_QUERY_INTVL_MAX),
4934 			jiffies_to_msecs(BR_MULTICAST_STARTUP_QUERY_INTVL_MAX));
4935 		intvl_jiffies = BR_MULTICAST_STARTUP_QUERY_INTVL_MAX;
4936 	}
4937 
4938 	brmctx->multicast_startup_query_interval = intvl_jiffies;
4939 }
4940 
4941 /**
4942  * br_multicast_list_adjacent - Returns snooped multicast addresses
4943  * @dev:	The bridge port adjacent to which to retrieve addresses
4944  * @br_ip_list:	The list to store found, snooped multicast IP addresses in
4945  *
4946  * Creates a list of IP addresses (struct br_ip_list) sensed by the multicast
4947  * snooping feature on all bridge ports of dev's bridge device, excluding
4948  * the addresses from dev itself.
4949  *
4950  * Returns the number of items added to br_ip_list.
4951  *
4952  * Notes:
4953  * - br_ip_list needs to be initialized by caller
4954  * - br_ip_list might contain duplicates in the end
4955  *   (needs to be taken care of by caller)
4956  * - br_ip_list needs to be freed by caller
4957  */
4958 int br_multicast_list_adjacent(struct net_device *dev,
4959 			       struct list_head *br_ip_list)
4960 {
4961 	struct net_bridge *br;
4962 	struct net_bridge_port *port;
4963 	struct net_bridge_port_group *group;
4964 	struct br_ip_list *entry;
4965 	int count = 0;
4966 
4967 	rcu_read_lock();
4968 	if (!br_ip_list || !netif_is_bridge_port(dev))
4969 		goto unlock;
4970 
4971 	port = br_port_get_rcu(dev);
4972 	if (!port || !port->br)
4973 		goto unlock;
4974 
4975 	br = port->br;
4976 
4977 	list_for_each_entry_rcu(port, &br->port_list, list) {
4978 		if (!port->dev || port->dev == dev)
4979 			continue;
4980 
4981 		hlist_for_each_entry_rcu(group, &port->mglist, mglist) {
4982 			entry = kmalloc_obj(*entry, GFP_ATOMIC);
4983 			if (!entry)
4984 				goto unlock;
4985 
4986 			entry->addr = group->key.addr;
4987 			list_add(&entry->list, br_ip_list);
4988 			count++;
4989 		}
4990 	}
4991 
4992 unlock:
4993 	rcu_read_unlock();
4994 	return count;
4995 }
4996 EXPORT_SYMBOL_GPL(br_multicast_list_adjacent);
4997 
4998 /**
4999  * br_multicast_has_querier_anywhere - Checks for a querier on a bridge
5000  * @dev: The bridge port providing the bridge on which to check for a querier
5001  * @proto: The protocol family to check for: IGMP -> ETH_P_IP, MLD -> ETH_P_IPV6
5002  *
5003  * Checks whether the given interface has a bridge on top and if so returns
5004  * true if a valid querier exists anywhere on the bridged link layer.
5005  * Otherwise returns false.
5006  */
5007 bool br_multicast_has_querier_anywhere(struct net_device *dev, int proto)
5008 {
5009 	struct net_bridge *br;
5010 	struct net_bridge_port *port;
5011 	struct ethhdr eth;
5012 	bool ret = false;
5013 
5014 	rcu_read_lock();
5015 	if (!netif_is_bridge_port(dev))
5016 		goto unlock;
5017 
5018 	port = br_port_get_rcu(dev);
5019 	if (!port || !port->br)
5020 		goto unlock;
5021 
5022 	br = port->br;
5023 
5024 	memset(&eth, 0, sizeof(eth));
5025 	eth.h_proto = htons(proto);
5026 
5027 	ret = br_multicast_querier_exists(&br->multicast_ctx, &eth, NULL);
5028 
5029 unlock:
5030 	rcu_read_unlock();
5031 	return ret;
5032 }
5033 EXPORT_SYMBOL_GPL(br_multicast_has_querier_anywhere);
5034 
5035 /**
5036  * br_multicast_has_querier_adjacent - Checks for a querier behind a bridge port
5037  * @dev: The bridge port adjacent to which to check for a querier
5038  * @proto: The protocol family to check for: IGMP -> ETH_P_IP, MLD -> ETH_P_IPV6
5039  *
5040  * Checks whether the given interface has a bridge on top and if so returns
5041  * true if a selected querier is behind one of the other ports of this
5042  * bridge. Otherwise returns false.
5043  */
5044 bool br_multicast_has_querier_adjacent(struct net_device *dev, int proto)
5045 {
5046 	struct net_bridge_mcast *brmctx;
5047 	struct net_bridge *br;
5048 	struct net_bridge_port *port;
5049 	bool ret = false;
5050 	int port_ifidx;
5051 
5052 	rcu_read_lock();
5053 	if (!netif_is_bridge_port(dev))
5054 		goto unlock;
5055 
5056 	port = br_port_get_rcu(dev);
5057 	if (!port || !port->br)
5058 		goto unlock;
5059 
5060 	br = port->br;
5061 	brmctx = &br->multicast_ctx;
5062 
5063 	switch (proto) {
5064 	case ETH_P_IP:
5065 		port_ifidx = brmctx->ip4_querier.port_ifidx;
5066 		if (!timer_pending(&brmctx->ip4_other_query.timer) ||
5067 		    port_ifidx == port->dev->ifindex)
5068 			goto unlock;
5069 		break;
5070 #if IS_ENABLED(CONFIG_IPV6)
5071 	case ETH_P_IPV6:
5072 		port_ifidx = brmctx->ip6_querier.port_ifidx;
5073 		if (!timer_pending(&brmctx->ip6_other_query.timer) ||
5074 		    port_ifidx == port->dev->ifindex)
5075 			goto unlock;
5076 		break;
5077 #endif
5078 	default:
5079 		goto unlock;
5080 	}
5081 
5082 	ret = true;
5083 unlock:
5084 	rcu_read_unlock();
5085 	return ret;
5086 }
5087 EXPORT_SYMBOL_GPL(br_multicast_has_querier_adjacent);
5088 
5089 /**
5090  * br_multicast_has_router_adjacent - Checks for a router behind a bridge port
5091  * @dev: The bridge port adjacent to which to check for a multicast router
5092  * @proto: The protocol family to check for: IGMP -> ETH_P_IP, MLD -> ETH_P_IPV6
5093  *
5094  * Checks whether the given interface has a bridge on top and if so returns
5095  * true if a multicast router is behind one of the other ports of this
5096  * bridge. Otherwise returns false.
5097  */
5098 bool br_multicast_has_router_adjacent(struct net_device *dev, int proto)
5099 {
5100 	struct net_bridge_mcast_port *pmctx;
5101 	struct net_bridge_mcast *brmctx;
5102 	struct net_bridge_port *port;
5103 	bool ret = false;
5104 
5105 	rcu_read_lock();
5106 	port = br_port_get_check_rcu(dev);
5107 	if (!port)
5108 		goto unlock;
5109 
5110 	brmctx = &port->br->multicast_ctx;
5111 	switch (proto) {
5112 	case ETH_P_IP:
5113 		hlist_for_each_entry_rcu(pmctx, &brmctx->ip4_mc_router_list,
5114 					 ip4_rlist) {
5115 			if (pmctx->port == port)
5116 				continue;
5117 
5118 			ret = true;
5119 			goto unlock;
5120 		}
5121 		break;
5122 #if IS_ENABLED(CONFIG_IPV6)
5123 	case ETH_P_IPV6:
5124 		hlist_for_each_entry_rcu(pmctx, &brmctx->ip6_mc_router_list,
5125 					 ip6_rlist) {
5126 			if (pmctx->port == port)
5127 				continue;
5128 
5129 			ret = true;
5130 			goto unlock;
5131 		}
5132 		break;
5133 #endif
5134 	default:
5135 		/* when compiled without IPv6 support, be conservative and
5136 		 * always assume presence of an IPv6 multicast router
5137 		 */
5138 		ret = true;
5139 	}
5140 
5141 unlock:
5142 	rcu_read_unlock();
5143 	return ret;
5144 }
5145 EXPORT_SYMBOL_GPL(br_multicast_has_router_adjacent);
5146 
5147 static void br_mcast_stats_add(struct bridge_mcast_stats __percpu *stats,
5148 			       const struct sk_buff *skb, u8 type, u8 dir)
5149 {
5150 	struct bridge_mcast_stats *pstats = this_cpu_ptr(stats);
5151 	__be16 proto = skb->protocol;
5152 	unsigned int t_len;
5153 
5154 	u64_stats_update_begin(&pstats->syncp);
5155 	switch (proto) {
5156 	case htons(ETH_P_IP):
5157 		t_len = ntohs(ip_hdr(skb)->tot_len) - ip_hdrlen(skb);
5158 		switch (type) {
5159 		case IGMP_HOST_MEMBERSHIP_REPORT:
5160 			pstats->mstats.igmp_v1reports[dir]++;
5161 			break;
5162 		case IGMPV2_HOST_MEMBERSHIP_REPORT:
5163 			pstats->mstats.igmp_v2reports[dir]++;
5164 			break;
5165 		case IGMPV3_HOST_MEMBERSHIP_REPORT:
5166 			pstats->mstats.igmp_v3reports[dir]++;
5167 			break;
5168 		case IGMP_HOST_MEMBERSHIP_QUERY:
5169 			if (t_len != sizeof(struct igmphdr)) {
5170 				pstats->mstats.igmp_v3queries[dir]++;
5171 			} else {
5172 				unsigned int offset = skb_transport_offset(skb);
5173 				struct igmphdr *ih, _ihdr;
5174 
5175 				ih = skb_header_pointer(skb, offset,
5176 							sizeof(_ihdr), &_ihdr);
5177 				if (!ih)
5178 					break;
5179 				if (!ih->code)
5180 					pstats->mstats.igmp_v1queries[dir]++;
5181 				else
5182 					pstats->mstats.igmp_v2queries[dir]++;
5183 			}
5184 			break;
5185 		case IGMP_HOST_LEAVE_MESSAGE:
5186 			pstats->mstats.igmp_leaves[dir]++;
5187 			break;
5188 		}
5189 		break;
5190 #if IS_ENABLED(CONFIG_IPV6)
5191 	case htons(ETH_P_IPV6):
5192 		t_len = ntohs(ipv6_hdr(skb)->payload_len) +
5193 			sizeof(struct ipv6hdr);
5194 		t_len -= skb_network_header_len(skb);
5195 		switch (type) {
5196 		case ICMPV6_MGM_REPORT:
5197 			pstats->mstats.mld_v1reports[dir]++;
5198 			break;
5199 		case ICMPV6_MLD2_REPORT:
5200 			pstats->mstats.mld_v2reports[dir]++;
5201 			break;
5202 		case ICMPV6_MGM_QUERY:
5203 			if (t_len != sizeof(struct mld_msg))
5204 				pstats->mstats.mld_v2queries[dir]++;
5205 			else
5206 				pstats->mstats.mld_v1queries[dir]++;
5207 			break;
5208 		case ICMPV6_MGM_REDUCTION:
5209 			pstats->mstats.mld_leaves[dir]++;
5210 			break;
5211 		}
5212 		break;
5213 #endif /* CONFIG_IPV6 */
5214 	}
5215 	u64_stats_update_end(&pstats->syncp);
5216 }
5217 
5218 void br_multicast_count(struct net_bridge *br,
5219 			const struct net_bridge_port *p,
5220 			const struct sk_buff *skb, u8 type, u8 dir)
5221 {
5222 	struct bridge_mcast_stats __percpu *stats;
5223 
5224 	/* if multicast_disabled is true then igmp type can't be set */
5225 	if (!type || !br_opt_get(br, BROPT_MULTICAST_STATS_ENABLED))
5226 		return;
5227 
5228 	if (p)
5229 		stats = p->mcast_stats;
5230 	else
5231 		stats = br->mcast_stats;
5232 	if (WARN_ON(!stats))
5233 		return;
5234 
5235 	br_mcast_stats_add(stats, skb, type, dir);
5236 }
5237 
5238 int br_multicast_init_stats(struct net_bridge *br)
5239 {
5240 	br->mcast_stats = netdev_alloc_pcpu_stats(struct bridge_mcast_stats);
5241 	if (!br->mcast_stats)
5242 		return -ENOMEM;
5243 
5244 	return 0;
5245 }
5246 
5247 void br_multicast_uninit_stats(struct net_bridge *br)
5248 {
5249 	free_percpu(br->mcast_stats);
5250 }
5251 
5252 /* noinline for https://llvm.org/pr45802#c9 */
5253 static noinline_for_stack void mcast_stats_add_dir(u64 *dst, u64 *src)
5254 {
5255 	dst[BR_MCAST_DIR_RX] += src[BR_MCAST_DIR_RX];
5256 	dst[BR_MCAST_DIR_TX] += src[BR_MCAST_DIR_TX];
5257 }
5258 
5259 void br_multicast_get_stats(const struct net_bridge *br,
5260 			    const struct net_bridge_port *p,
5261 			    struct br_mcast_stats *dest)
5262 {
5263 	struct bridge_mcast_stats __percpu *stats;
5264 	struct br_mcast_stats tdst;
5265 	int i;
5266 
5267 	memset(dest, 0, sizeof(*dest));
5268 	if (p)
5269 		stats = p->mcast_stats;
5270 	else
5271 		stats = br->mcast_stats;
5272 	if (WARN_ON(!stats))
5273 		return;
5274 
5275 	memset(&tdst, 0, sizeof(tdst));
5276 	for_each_possible_cpu(i) {
5277 		struct bridge_mcast_stats *cpu_stats = per_cpu_ptr(stats, i);
5278 		struct br_mcast_stats temp;
5279 		unsigned int start;
5280 
5281 		do {
5282 			start = u64_stats_fetch_begin(&cpu_stats->syncp);
5283 			u64_stats_copy(&temp, &cpu_stats->mstats, sizeof(temp));
5284 		} while (u64_stats_fetch_retry(&cpu_stats->syncp, start));
5285 
5286 		mcast_stats_add_dir(tdst.igmp_v1queries, temp.igmp_v1queries);
5287 		mcast_stats_add_dir(tdst.igmp_v2queries, temp.igmp_v2queries);
5288 		mcast_stats_add_dir(tdst.igmp_v3queries, temp.igmp_v3queries);
5289 		mcast_stats_add_dir(tdst.igmp_leaves, temp.igmp_leaves);
5290 		mcast_stats_add_dir(tdst.igmp_v1reports, temp.igmp_v1reports);
5291 		mcast_stats_add_dir(tdst.igmp_v2reports, temp.igmp_v2reports);
5292 		mcast_stats_add_dir(tdst.igmp_v3reports, temp.igmp_v3reports);
5293 		tdst.igmp_parse_errors += temp.igmp_parse_errors;
5294 
5295 		mcast_stats_add_dir(tdst.mld_v1queries, temp.mld_v1queries);
5296 		mcast_stats_add_dir(tdst.mld_v2queries, temp.mld_v2queries);
5297 		mcast_stats_add_dir(tdst.mld_leaves, temp.mld_leaves);
5298 		mcast_stats_add_dir(tdst.mld_v1reports, temp.mld_v1reports);
5299 		mcast_stats_add_dir(tdst.mld_v2reports, temp.mld_v2reports);
5300 		tdst.mld_parse_errors += temp.mld_parse_errors;
5301 	}
5302 	memcpy(dest, &tdst, sizeof(*dest));
5303 }
5304 
5305 int br_mdb_hash_init(struct net_bridge *br)
5306 {
5307 	int err;
5308 
5309 	err = rhashtable_init(&br->sg_port_tbl, &br_sg_port_rht_params);
5310 	if (err)
5311 		return err;
5312 
5313 	err = rhashtable_init(&br->mdb_hash_tbl, &br_mdb_rht_params);
5314 	if (err) {
5315 		rhashtable_destroy(&br->sg_port_tbl);
5316 		return err;
5317 	}
5318 
5319 	return 0;
5320 }
5321 
5322 void br_mdb_hash_fini(struct net_bridge *br)
5323 {
5324 	rhashtable_destroy(&br->sg_port_tbl);
5325 	rhashtable_destroy(&br->mdb_hash_tbl);
5326 }
5327