Lines Matching refs:pg

83 				     struct net_bridge_port_group *pg);
209 br_multicast_pg_to_port_ctx(const struct net_bridge_port_group *pg)
211 struct net_bridge_mcast_port *pmctx = &pg->key.port->multicast_ctx;
214 lockdep_assert_held_once(&pg->key.port->br->multicast_lock);
217 if (!pg->key.addr.vid ||
218 !br_opt_get(pg->key.port->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
228 vlan = br_vlan_find(nbp_vlan_group_rcu(pg->key.port), pg->key.addr.vid);
293 struct net_bridge_port_group *pg,
302 sg_key.port = pg->key.port;
308 sg_ip, pg->eth_addr,
317 static void __fwd_del_star_excl(struct net_bridge_port_group *pg,
321 struct net_bridge *br = pg->key.port->br;
325 sg_key.port = pg->key.port;
343 void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
346 struct net_bridge *br = pg->key.port->br;
352 if (WARN_ON(!br_multicast_is_star_g(&pg->key.addr)))
355 mp = br_mdb_ip_get(br, &pg->key.addr);
358 pmctx = br_multicast_pg_to_port_ctx(pg);
363 sg_ip = pg->key.addr;
370 if (pg_lst == pg)
378 __fwd_del_star_excl(pg, &sg_ip);
381 __fwd_add_star_excl(pmctx, pg, &sg_ip);
410 struct net_bridge_port_group *pg;
418 for (pg = mlock_dereference(star_mp->ports, br);
419 pg;
420 pg = mlock_dereference(pg->next, br)) {
423 hlist_for_each_entry(src_ent, &pg->src_list, node) {
475 struct net_bridge_port_group *pg;
487 for (pg = mlock_dereference(star_mp->ports, br);
488 pg;
489 pg = mlock_dereference(pg->next, br)) {
492 if (pg == sg || pg->filter_mode == MCAST_INCLUDE)
495 sg_key.port = pg->key.port;
499 pmctx = br_multicast_pg_to_port_ctx(pg);
527 pmctx = br_multicast_pg_to_port_ctx(src->pg);
531 sg_ip = src->pg->key.addr;
535 src->pg->eth_addr, MCAST_INCLUDE, false,
549 star_mp = br_mdb_ip_get(src->br, &src->pg->key.addr);
559 struct net_bridge_port_group *p, *pg = src->pg;
565 sg_ip = pg->key.addr;
575 if (!br_port_group_equal(p, pg->key.port, pg->eth_addr))
601 sg_key.addr = src->pg->key.addr;
603 sg_key.port = src->pg->key.port;
680 struct net_bridge *br = src->pg->key.port->br;
683 src->pg->src_ents--;
792 struct net_bridge_port_group *pg;
794 pg = container_of(gc, struct net_bridge_port_group, mcast_gc);
795 WARN_ON(!hlist_unhashed(&pg->mglist));
796 WARN_ON(!hlist_empty(&pg->src_list));
798 timer_shutdown_sync(&pg->rexmit_timer);
799 timer_shutdown_sync(&pg->timer);
800 kfree_rcu(pg, rcu);
804 struct net_bridge_port_group *pg,
807 struct net_bridge *br = pg->key.port->br;
811 rcu_assign_pointer(*pp, pg->next);
812 hlist_del_init(&pg->mglist);
813 br_multicast_eht_clean_sets(pg);
814 hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
816 br_mdb_notify(br->dev, mp, pg, RTM_DELMDB);
818 rhashtable_remove_fast(&br->sg_port_tbl, &pg->rhnode,
822 br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
824 br_multicast_port_ngroups_dec(pg->key.port, pg->key.addr.vid);
825 hlist_add_head(&pg->mcast_gc.gc_node, &br->mcast_gc_list);
833 struct net_bridge_port_group *pg)
839 mp = br_mdb_ip_get(br, &pg->key.addr);
846 if (p != pg)
849 br_multicast_del_pg(mp, pg, pp);
858 struct net_bridge_port_group *pg = from_timer(pg, t, timer);
860 struct net_bridge *br = pg->key.port->br;
865 if (!netif_running(br->dev) || timer_pending(&pg->timer) ||
866 hlist_unhashed(&pg->mglist) || pg->flags & MDB_PG_FLAGS_PERMANENT)
869 changed = !!(pg->filter_mode == MCAST_EXCLUDE);
870 pg->filter_mode = MCAST_INCLUDE;
871 hlist_for_each_entry_safe(src_ent, tmp, &pg->src_list, node) {
878 if (hlist_empty(&pg->src_list)) {
879 br_multicast_find_del_pg(br, pg);
881 struct net_bridge_mdb_entry *mp = br_mdb_ip_get(br, &pg->key.addr);
883 if (changed && br_multicast_is_star_g(&pg->key.addr))
884 br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
888 br_mdb_notify(br->dev, mp, pg, RTM_NEWMDB);
927 struct net_bridge_port_group *pg,
933 struct net_bridge_port *p = pg ? pg->key.port : NULL;
950 if (pg && with_srcs) {
953 hlist_for_each_entry(ent, &pg->src_list, node) {
1037 if (!pg || !with_srcs)
1041 hlist_for_each_entry(ent, &pg->src_list, node) {
1074 struct net_bridge_port_group *pg,
1081 struct net_bridge_port *p = pg ? pg->key.port : NULL;
1100 if (pg && with_srcs) {
1103 hlist_for_each_entry(ent, &pg->src_list, node) {
1200 if (!pg || !with_srcs)
1204 hlist_for_each_entry(ent, &pg->src_list, node) {
1239 struct net_bridge_port_group *pg,
1251 return br_ip4_multicast_alloc_query(brmctx, pmctx, pg,
1266 return br_ip6_multicast_alloc_query(brmctx, pmctx, pg,
1317 struct net_bridge_port_group *pg;
1325 pg = src->pg;
1326 if (pg->filter_mode == MCAST_INCLUDE) {
1328 if (!hlist_empty(&pg->src_list))
1330 br_multicast_find_del_pg(br, pg);
1340 br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip)
1346 hlist_for_each_entry(ent, &pg->src_list, node)
1352 hlist_for_each_entry(ent, &pg->src_list, node)
1363 br_multicast_new_group_src(struct net_bridge_port_group *pg, struct br_ip *src_ip)
1367 if (unlikely(pg->src_ents >= PG_SRC_ENT_LIMIT))
1389 grp_src->pg = pg;
1390 grp_src->br = pg->key.port->br;
1395 hlist_add_head_rcu(&grp_src->node, &pg->src_list);
1396 pg->src_ents++;
1564 struct net_bridge_port_group *pg;
1568 pg = __br_multicast_add_group(brmctx, pmctx, group, src, filter_mode,
1571 err = PTR_ERR_OR_ZERO(pg);
1782 struct net_bridge_port_group *pg,
1798 skb = br_multicast_alloc_query(brmctx, pmctx, pg, ip_dst, group,
1938 struct net_bridge_port_group *pg = from_timer(pg, t, rexmit_timer);
1940 struct net_bridge *br = pg->key.port->br;
1946 if (!netif_running(br->dev) || hlist_unhashed(&pg->mglist) ||
1950 pmctx = br_multicast_pg_to_port_ctx(pg);
1957 if (pg->key.addr.proto == htons(ETH_P_IP))
1967 if (pg->grp_query_rexmit_cnt) {
1968 pg->grp_query_rexmit_cnt--;
1969 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
1970 &pg->key.addr, false, 1, NULL);
1972 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
1973 &pg->key.addr, true, 0, &need_rexmit);
1975 if (pg->grp_query_rexmit_cnt || need_rexmit)
1976 mod_timer(&pg->rexmit_timer, jiffies +
2046 struct net_bridge_port_group *pg;
2052 hlist_for_each_entry_safe(pg, n, &port->mglist, mglist)
2053 br_multicast_find_del_pg(br, pg);
2090 struct net_bridge_port_group *pg;
2101 hlist_for_each_entry(pg, &pmctx->port->mglist, mglist) {
2102 if (pg->key.addr.vid == pmctx->vlan->vid)
2120 struct net_bridge_port_group *pg;
2124 hlist_for_each_entry_safe(pg, n, &pmctx->port->mglist, mglist)
2125 if (!(pg->flags & MDB_PG_FLAGS_PERMANENT) &&
2127 pg->key.addr.vid == pmctx->vlan->vid))
2128 br_multicast_find_del_pg(pmctx->port->br, pg);
2148 static int __grp_src_delete_marked(struct net_bridge_port_group *pg)
2154 hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
2172 struct net_bridge_port_group *pg)
2183 if (pg->key.addr.proto == htons(ETH_P_IP))
2191 hlist_for_each_entry(ent, &pg->src_list, node) {
2208 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2209 &pg->key.addr, true, 1, NULL);
2212 if (!timer_pending(&pg->rexmit_timer) ||
2213 time_after(pg->rexmit_timer.expires, lmi))
2214 mod_timer(&pg->rexmit_timer, lmi);
2219 struct net_bridge_port_group *pg)
2228 if (pg->key.addr.proto == htons(ETH_P_IP))
2238 pg->grp_query_rexmit_cnt = brmctx->multicast_last_member_count - 1;
2239 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2240 &pg->key.addr, false, 0, NULL);
2241 if (!timer_pending(&pg->rexmit_timer) ||
2242 time_after(pg->rexmit_timer.expires, lmi))
2243 mod_timer(&pg->rexmit_timer, lmi);
2246 if (pg->filter_mode == MCAST_EXCLUDE &&
2247 (!timer_pending(&pg->timer) ||
2248 time_after(pg->timer.expires, now + br_multicast_lmqt(brmctx))))
2249 mod_timer(&pg->timer, now + br_multicast_lmqt(brmctx));
2258 struct net_bridge_port_group *pg, void *h_addr,
2269 src_ip.proto = pg->key.addr.proto;
2272 ent = br_multicast_find_group_src(pg, &src_ip);
2274 ent = br_multicast_new_group_src(pg, &src_ip);
2283 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2296 struct net_bridge_port_group *pg, void *h_addr,
2304 hlist_for_each_entry(ent, &pg->src_list, node)
2308 src_ip.proto = pg->key.addr.proto;
2311 ent = br_multicast_find_group_src(pg, &src_ip);
2315 ent = br_multicast_new_group_src(pg, &src_ip);
2320 br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2323 __grp_src_delete_marked(pg);
2333 struct net_bridge_port_group *pg, void *h_addr,
2343 hlist_for_each_entry(ent, &pg->src_list, node)
2347 src_ip.proto = pg->key.addr.proto;
2350 ent = br_multicast_find_group_src(pg, &src_ip);
2354 ent = br_multicast_new_group_src(pg, &src_ip);
2363 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2367 if (__grp_src_delete_marked(pg))
2374 struct net_bridge_port_group *pg, void *h_addr,
2380 switch (pg->filter_mode) {
2382 __grp_src_isexc_incl(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2384 br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
2388 changed = __grp_src_isexc_excl(brmctx, pg, h_addr, srcs, nsrcs,
2393 pg->filter_mode = MCAST_EXCLUDE;
2394 mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
2405 struct net_bridge_port_group *pg, void *h_addr,
2409 u32 src_idx, to_send = pg->src_ents;
2415 hlist_for_each_entry(ent, &pg->src_list, node)
2419 src_ip.proto = pg->key.addr.proto;
2422 ent = br_multicast_find_group_src(pg, &src_ip);
2427 ent = br_multicast_new_group_src(pg, &src_ip);
2435 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2440 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2452 struct net_bridge_port_group *pg, void *h_addr,
2456 u32 src_idx, to_send = pg->src_ents;
2462 hlist_for_each_entry(ent, &pg->src_list, node)
2467 src_ip.proto = pg->key.addr.proto;
2470 ent = br_multicast_find_group_src(pg, &src_ip);
2477 ent = br_multicast_new_group_src(pg, &src_ip);
2485 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2490 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2492 __grp_send_query_and_rexmit(brmctx, pmctx, pg);
2499 struct net_bridge_port_group *pg, void *h_addr,
2505 switch (pg->filter_mode) {
2507 changed = __grp_src_toin_incl(brmctx, pmctx, pg, h_addr, srcs,
2511 changed = __grp_src_toin_excl(brmctx, pmctx, pg, h_addr, srcs,
2516 if (br_multicast_eht_should_del_pg(pg)) {
2517 pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
2518 br_multicast_find_del_pg(pg->key.port->br, pg);
2520 * access pg after the delete so we have to return false
2536 struct net_bridge_port_group *pg, void *h_addr,
2544 hlist_for_each_entry(ent, &pg->src_list, node)
2548 src_ip.proto = pg->key.addr.proto;
2551 ent = br_multicast_find_group_src(pg, &src_ip);
2557 ent = br_multicast_new_group_src(pg, &src_ip);
2563 br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2566 __grp_src_delete_marked(pg);
2568 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2580 struct net_bridge_port_group *pg, void *h_addr,
2589 hlist_for_each_entry(ent, &pg->src_list, node)
2593 src_ip.proto = pg->key.addr.proto;
2596 ent = br_multicast_find_group_src(pg, &src_ip);
2600 ent = br_multicast_new_group_src(pg, &src_ip);
2602 __grp_src_mod_timer(ent, pg->timer.expires);
2612 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2616 if (__grp_src_delete_marked(pg))
2619 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2626 struct net_bridge_port_group *pg, void *h_addr,
2632 switch (pg->filter_mode) {
2634 __grp_src_toex_incl(brmctx, pmctx, pg, h_addr, srcs, nsrcs,
2636 br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
2640 changed = __grp_src_toex_excl(brmctx, pmctx, pg, h_addr, srcs,
2645 pg->filter_mode = MCAST_EXCLUDE;
2646 mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
2656 struct net_bridge_port_group *pg, void *h_addr,
2664 hlist_for_each_entry(ent, &pg->src_list, node)
2668 src_ip.proto = pg->key.addr.proto;
2671 ent = br_multicast_find_group_src(pg, &src_ip);
2678 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2683 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2694 struct net_bridge_port_group *pg, void *h_addr,
2702 hlist_for_each_entry(ent, &pg->src_list, node)
2706 src_ip.proto = pg->key.addr.proto;
2709 ent = br_multicast_find_group_src(pg, &src_ip);
2711 ent = br_multicast_new_group_src(pg, &src_ip);
2713 __grp_src_mod_timer(ent, pg->timer.expires);
2723 if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
2728 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2735 struct net_bridge_port_group *pg, void *h_addr,
2740 switch (pg->filter_mode) {
2742 changed = __grp_src_block_incl(brmctx, pmctx, pg, h_addr, srcs,
2746 changed = __grp_src_block_excl(brmctx, pmctx, pg, h_addr, srcs,
2751 if ((pg->filter_mode == MCAST_INCLUDE && hlist_empty(&pg->src_list)) ||
2752 br_multicast_eht_should_del_pg(pg)) {
2753 if (br_multicast_eht_should_del_pg(pg))
2754 pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
2755 br_multicast_find_del_pg(pg->key.port->br, pg);
2757 * access pg after the delete so we have to return false
2771 struct net_bridge_port_group *pg;
2773 for (pg = mlock_dereference(mp->ports, br);
2774 pg;
2775 pg = mlock_dereference(pg->next, br))
2776 if (br_port_group_equal(pg, p, src))
2777 return pg;
2789 struct net_bridge_port_group *pg;
2856 pg = br_multicast_find_port(mdst, pmctx->port, src);
2857 if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
2864 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
2869 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
2874 changed = br_multicast_isexc(brmctx, pg, h_addr,
2879 changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
2884 changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
2889 changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
2895 br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);
2911 struct net_bridge_port_group *pg;
2994 pg = br_multicast_find_port(mdst, pmctx->port, src);
2995 if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
3000 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3006 changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
3012 changed = br_multicast_isexc(brmctx, pg, h_addr,
3018 changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
3024 changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
3030 changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
3037 br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);