Lines Matching refs:pg

83 				     struct net_bridge_port_group *pg);
210 br_multicast_pg_to_port_ctx(const struct net_bridge_port_group *pg)
212 struct net_bridge_mcast_port *pmctx = &pg->key.port->multicast_ctx;
215 lockdep_assert_held_once(&pg->key.port->br->multicast_lock);
218 if (!pg->key.addr.vid ||
219 !br_opt_get(pg->key.port->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
229 vlan = br_vlan_find(nbp_vlan_group_rcu(pg->key.port), pg->key.addr.vid);
294 struct net_bridge_port_group *pg,
303 sg_key.port = pg->key.port;
309 sg_ip, pg->eth_addr,
318 static void __fwd_del_star_excl(struct net_bridge_port_group *pg,
322 struct net_bridge *br = pg->key.port->br;
326 sg_key.port = pg->key.port;
344 void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
347 struct net_bridge *br = pg->key.port->br;
353 if (WARN_ON(!br_multicast_is_star_g(&pg->key.addr)))
356 mp = br_mdb_ip_get(br, &pg->key.addr);
359 pmctx = br_multicast_pg_to_port_ctx(pg);
364 sg_ip = pg->key.addr;
371 if (pg_lst == pg)
379 __fwd_del_star_excl(pg, &sg_ip);
382 __fwd_add_star_excl(pmctx, pg, &sg_ip);
411 struct net_bridge_port_group *pg;
419 for (pg = mlock_dereference(star_mp->ports, br);
420 pg;
421 pg = mlock_dereference(pg->next, br)) {
424 hlist_for_each_entry(src_ent, &pg->src_list, node) {
476 struct net_bridge_port_group *pg;
488 for (pg = mlock_dereference(star_mp->ports, br);
489 pg;
490 pg = mlock_dereference(pg->next, br)) {
493 if (pg == sg || pg->filter_mode == MCAST_INCLUDE)
496 sg_key.port = pg->key.port;
500 pmctx = br_multicast_pg_to_port_ctx(pg);
528 pmctx = br_multicast_pg_to_port_ctx(src->pg);
532 sg_ip = src->pg->key.addr;
536 src->pg->eth_addr, MCAST_INCLUDE, false,
550 star_mp = br_mdb_ip_get(src->br, &src->pg->key.addr);
560 struct net_bridge_port_group *p, *pg = src->pg;
566 sg_ip = pg->key.addr;
576 if (!br_port_group_equal(p, pg->key.port, pg->eth_addr))
602 sg_key.addr = src->pg->key.addr;
604 sg_key.port = src->pg->key.port;
681 struct net_bridge *br = src->pg->key.port->br;
684 src->pg->src_ents--;
793 struct net_bridge_port_group *pg;
795 pg = container_of(gc, struct net_bridge_port_group, mcast_gc);
796 WARN_ON(!hlist_unhashed(&pg->mglist));
797 WARN_ON(!hlist_empty(&pg->src_list));
799 timer_shutdown_sync(&pg->rexmit_timer);
800 timer_shutdown_sync(&pg->timer);
801 kfree_rcu(pg, rcu);
805 struct net_bridge_port_group *pg,
808 struct net_bridge *br = pg->key.port->br;
812 rcu_assign_pointer(*pp, pg->next);
813 hlist_del_init(&pg->mglist);
814 br_multicast_eht_clean_sets(pg);
815 hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
817 br_mdb_notify(br->dev, mp, pg, RTM_DELMDB);
819 rhashtable_remove_fast(&br->sg_port_tbl, &pg->rhnode,
823 br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
825 br_multicast_port_ngroups_dec(pg->key.port, pg->key.addr.vid);
826 hlist_add_head(&pg->mcast_gc.gc_node, &br->mcast_gc_list);
834 struct net_bridge_port_group *pg)
840 mp = br_mdb_ip_get(br, &pg->key.addr);
847 if (p != pg)
850 br_multicast_del_pg(mp, pg, pp);
859 struct net_bridge_port_group *pg = from_timer(pg, t, timer);
861 struct net_bridge *br = pg->key.port->br;
866 if (!netif_running(br->dev) || timer_pending(&pg->timer) ||
867 hlist_unhashed(&pg->mglist) || pg->flags & MDB_PG_FLAGS_PERMANENT)
870 changed = !!(pg->filter_mode == MCAST_EXCLUDE);
871 pg->filter_mode = MCAST_INCLUDE;
872 hlist_for_each_entry_safe(src_ent, tmp, &pg->src_list, node) {
879 if (hlist_empty(&pg->src_list)) {
880 br_multicast_find_del_pg(br, pg);
882 struct net_bridge_mdb_entry *mp = br_mdb_ip_get(br, &pg->key.addr);
884 if (changed && br_multicast_is_star_g(&pg->key.addr))
885 br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
889 br_mdb_notify(br->dev, mp, pg, RTM_NEWMDB);
928 struct net_bridge_port_group *pg,
934 struct net_bridge_port *p = pg ? pg->key.port : NULL;
951 if (pg && with_srcs) {
954 hlist_for_each_entry(ent, &pg->src_list, node) {
1038 if (!pg || !with_srcs)
1042 hlist_for_each_entry(ent, &pg->src_list, node) {
1075 struct net_bridge_port_group *pg,
1082 struct net_bridge_port *p = pg ? pg->key.port : NULL;
1101 if (pg && with_srcs) {
1104 hlist_for_each_entry(ent, &pg->src_list, node) {
1201 if (!pg || !with_srcs)
1205 hlist_for_each_entry(ent, &pg->src_list, node) {
1240 struct net_bridge_port_group *pg,
1252 return br_ip4_multicast_alloc_query(brmctx, pmctx, pg,
1267 return br_ip6_multicast_alloc_query(brmctx, pmctx, pg,
1318 struct net_bridge_port_group *pg;
1326 pg = src->pg;
1327 if (pg->filter_mode == MCAST_INCLUDE) {
1329 if (!hlist_empty(&pg->src_list))
1331 br_multicast_find_del_pg(br, pg);
1341 br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip)
1347 hlist_for_each_entry(ent, &pg->src_list, node)
1353 hlist_for_each_entry(ent, &pg->src_list, node)
1364 br_multicast_new_group_src(struct net_bridge_port_group *pg, struct br_ip *src_ip)
1368 if (unlikely(pg->src_ents >= PG_SRC_ENT_LIMIT))
1390 grp_src->pg = pg;
1391 grp_src->br = pg->key.port->br;
1396 hlist_add_head_rcu(&grp_src->node, &pg->src_list);
1397 pg->src_ents++;
1565 struct net_bridge_port_group *pg;
1569 pg = __br_multicast_add_group(brmctx, pmctx, group, src, filter_mode,
1572 err = PTR_ERR_OR_ZERO(pg);
1783 struct net_bridge_port_group *pg,
1799 skb = br_multicast_alloc_query(brmctx, pmctx, pg, ip_dst, group,
1939 struct net_bridge_port_group *pg = from_timer(pg, t, rexmit_timer);
1941 struct net_bridge *br = pg->key.port->br;
1947 if (!netif_running(br->dev) || hlist_unhashed(&pg->mglist) ||
1951 pmctx = br_multicast_pg_to_port_ctx(pg);
1958 if (pg->key.addr.proto == htons(ETH_P_IP))
1968 if (pg->grp_query_rexmit_cnt) {
1969 pg->grp_query_rexmit_cnt--;
1970 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
1971 &pg->key.addr, false, 1, NULL);
1973 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
1974 &pg->key.addr, true, 0, &need_rexmit);
1976 if (pg->grp_query_rexmit_cnt || need_rexmit)
1977 mod_timer(&pg->rexmit_timer, jiffies +
2047 struct net_bridge_port_group *pg;
2053 hlist_for_each_entry_safe(pg, n, &port->mglist, mglist)
2054 br_multicast_find_del_pg(br, pg);
2091 struct net_bridge_port_group *pg;
2102 hlist_for_each_entry(pg, &pmctx->port->mglist, mglist) {
2103 if (pg->key.addr.vid == pmctx->vlan->vid)
2121 struct net_bridge_port_group *pg;
2125 hlist_for_each_entry_safe(pg, n, &pmctx->port->mglist, mglist)
2126 if (!(pg->flags & MDB_PG_FLAGS_PERMANENT) &&
2128 pg->key.addr.vid == pmctx->vlan->vid))
2129 br_multicast_find_del_pg(pmctx->port->br, pg);
2149 static int __grp_src_delete_marked(struct net_bridge_port_group *pg)
2155 hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
2173 struct net_bridge_port_group *pg)
2184 if (pg->key.addr.proto == htons(ETH_P_IP))
2192 hlist_for_each_entry(ent, &pg->src_list, node) {
2209 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2210 &pg->key.addr, true, 1, NULL);
2213 if (!timer_pending(&pg->rexmit_timer) ||
2214 time_after(pg->rexmit_timer.expires, lmi))
2215 mod_timer(&pg->rexmit_timer, lmi);
2220 struct net_bridge_port_group *pg)
2229 if (pg->key.addr.proto == htons(ETH_P_IP))
2239 pg->grp_query_rexmit_cnt = brmctx->multicast_last_member_count - 1;
2240 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2241 &pg->key.addr, false, 0, NULL);
2242 if (!timer_pending(&pg->rexmit_timer) ||
2243 time_after(pg->rexmit_timer.expires, lmi))
2244 mod_timer(&pg->rexmit_timer, lmi);
2247 if (pg->filter_mode == MCAST_EXCLUDE &&
2248 (!timer_pending(&pg->timer) ||
2249 time_after(pg->timer.expires, now + br_multicast_lmqt(brmctx))))
2250 mod_timer(&pg->timer, now + br_multicast_lmqt(brmctx));
2259 struct net_bridge_port_group *pg, void *h_addr,
2270 src_ip.proto = pg->key.addr.proto;
2273 ent = br_multicast_find_group_src(pg, &src_ip);
2275 ent = br_multicast_new_group_src(pg, &src_ip);
2284 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2297 struct net_bridge_port_group *pg, void *h_addr,
2305 hlist_for_each_entry(ent, &pg->src_list, node)
2309 src_ip.proto = pg->key.addr.proto;
2312 ent = br_multicast_find_group_src(pg, &src_ip);
2316 ent = br_multicast_new_group_src(pg, &src_ip);
2321 br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2324 __grp_src_delete_marked(pg);
2334 struct net_bridge_port_group *pg, void *h_addr,
2344 hlist_for_each_entry(ent, &pg->src_list, node)
2348 src_ip.proto = pg->key.addr.proto;
2351 ent = br_multicast_find_group_src(pg, &src_ip);
2355 ent = br_multicast_new_group_src(pg, &src_ip);
2364 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2368 if (__grp_src_delete_marked(pg))
2375 struct net_bridge_port_group *pg, void *h_addr,
2381 switch (pg->filter_mode) {
2383 __grp_src_isexc_incl(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2385 br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
2389 changed = __grp_src_isexc_excl(brmctx, pg, h_addr, srcs, nsrcs,
2394 pg->filter_mode = MCAST_EXCLUDE;
2395 mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
2406 struct net_bridge_port_group *pg, void *h_addr,
2410 u32 src_idx, to_send = pg->src_ents;
2416 hlist_for_each_entry(ent, &pg->src_list, node)
2420 src_ip.proto = pg->key.addr.proto;
2423 ent = br_multicast_find_group_src(pg, &src_ip);
2428 ent = br_multicast_new_group_src(pg, &src_ip);
2436 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2441 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2453 struct net_bridge_port_group *pg, void *h_addr,
2457 u32 src_idx, to_send = pg->src_ents;
2463 hlist_for_each_entry(ent, &pg->src_list, node)
2468 src_ip.proto = pg->key.addr.proto;
2471 ent = br_multicast_find_group_src(pg, &src_ip);
2478 ent = br_multicast_new_group_src(pg, &src_ip);
2486 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2491 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2493 __grp_send_query_and_rexmit(brmctx, pmctx, pg);
2500 struct net_bridge_port_group *pg, void *h_addr,
2506 switch (pg->filter_mode) {
2508 changed = __grp_src_toin_incl(brmctx, pmctx, pg, h_addr, srcs,
2512 changed = __grp_src_toin_excl(brmctx, pmctx, pg, h_addr, srcs,
2517 if (br_multicast_eht_should_del_pg(pg)) {
2518 pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
2519 br_multicast_find_del_pg(pg->key.port->br, pg);
2521 * access pg after the delete so we have to return false
2537 struct net_bridge_port_group *pg, void *h_addr,
2545 hlist_for_each_entry(ent, &pg->src_list, node)
2549 src_ip.proto = pg->key.addr.proto;
2552 ent = br_multicast_find_group_src(pg, &src_ip);
2558 ent = br_multicast_new_group_src(pg, &src_ip);
2564 br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2567 __grp_src_delete_marked(pg);
2569 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2581 struct net_bridge_port_group *pg, void *h_addr,
2590 hlist_for_each_entry(ent, &pg->src_list, node)
2594 src_ip.proto = pg->key.addr.proto;
2597 ent = br_multicast_find_group_src(pg, &src_ip);
2601 ent = br_multicast_new_group_src(pg, &src_ip);
2603 __grp_src_mod_timer(ent, pg->timer.expires);
2613 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2617 if (__grp_src_delete_marked(pg))
2620 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2627 struct net_bridge_port_group *pg, void *h_addr,
2633 switch (pg->filter_mode) {
2635 __grp_src_toex_incl(brmctx, pmctx, pg, h_addr, srcs, nsrcs,
2637 br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
2641 changed = __grp_src_toex_excl(brmctx, pmctx, pg, h_addr, srcs,
2646 pg->filter_mode = MCAST_EXCLUDE;
2647 mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
2657 struct net_bridge_port_group *pg, void *h_addr,
2665 hlist_for_each_entry(ent, &pg->src_list, node)
2669 src_ip.proto = pg->key.addr.proto;
2672 ent = br_multicast_find_group_src(pg, &src_ip);
2679 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2684 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2695 struct net_bridge_port_group *pg, void *h_addr,
2703 hlist_for_each_entry(ent, &pg->src_list, node)
2707 src_ip.proto = pg->key.addr.proto;
2710 ent = br_multicast_find_group_src(pg, &src_ip);
2712 ent = br_multicast_new_group_src(pg, &src_ip);
2714 __grp_src_mod_timer(ent, pg->timer.expires);
2724 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2729 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2736 struct net_bridge_port_group *pg, void *h_addr,
2741 switch (pg->filter_mode) {
2743 changed = __grp_src_block_incl(brmctx, pmctx, pg, h_addr, srcs,
2747 changed = __grp_src_block_excl(brmctx, pmctx, pg, h_addr, srcs,
2752 if ((pg->filter_mode == MCAST_INCLUDE && hlist_empty(&pg->src_list)) ||
2753 br_multicast_eht_should_del_pg(pg)) {
2754 if (br_multicast_eht_should_del_pg(pg))
2755 pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
2756 br_multicast_find_del_pg(pg->key.port->br, pg);
2758 * access pg after the delete so we have to return false
2772 struct net_bridge_port_group *pg;
2774 for (pg = mlock_dereference(mp->ports, br);
2775 pg;
2776 pg = mlock_dereference(pg->next, br))
2777 if (br_port_group_equal(pg, p, src))
2778 return pg;
2790 struct net_bridge_port_group *pg;
2857 pg = br_multicast_find_port(mdst, pmctx->port, src);
2858 if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
2865 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
2870 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
2875 changed = br_multicast_isexc(brmctx, pg, h_addr,
2880 changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
2885 changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
2890 changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
2896 br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);
2912 struct net_bridge_port_group *pg;
2995 pg = br_multicast_find_port(mdst, pmctx->port, src);
2996 if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
3001 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3007 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3013 changed = br_multicast_isexc(brmctx, pg, h_addr,
3019 changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
3025 changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
3031 changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
3038 br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);