Lines Matching refs:pmctx
56 struct net_bridge_mcast_port *pmctx);
58 struct net_bridge_mcast_port *pmctx,
65 br_multicast_rport_del_notify(struct net_bridge_mcast_port *pmctx, bool deleted);
67 struct net_bridge_mcast_port *pmctx);
70 struct net_bridge_mcast_port *pmctx,
76 struct net_bridge_mcast_port *pmctx,
211 struct net_bridge_mcast_port *pmctx = &pg->key.port->multicast_ctx;
224 * multicast_lock which must be already held here, so the vlan's pmctx
230 pmctx = &vlan->port_mcast_ctx;
232 pmctx = NULL;
235 return pmctx;
241 struct net_bridge_mcast_port *pmctx = NULL;
254 pmctx = &vlan->port_mcast_ctx;
258 return pmctx;
263 * - if pmctx is non-NULL (port), check if it should be used
264 * - if pmctx is NULL (bridge), check if brmctx should be used
268 const struct net_bridge_mcast_port *pmctx)
273 if (pmctx)
274 return !br_multicast_port_ctx_state_disabled(pmctx);
292 static void __fwd_add_star_excl(struct net_bridge_mcast_port *pmctx,
301 brmctx = br_multicast_port_ctx_get_global(pmctx);
307 src_pg = __br_multicast_add_group(brmctx, pmctx,
348 struct net_bridge_mcast_port *pmctx;
358 pmctx = br_multicast_pg_to_port_ctx(pg);
359 if (!pmctx)
381 __fwd_add_star_excl(pmctx, pg, &sg_ip);
474 struct net_bridge_mcast_port *pmctx;
499 pmctx = br_multicast_pg_to_port_ctx(pg);
500 if (!pmctx)
502 brmctx = br_multicast_port_ctx_get_global(pmctx);
504 src_pg = __br_multicast_add_group(brmctx, pmctx,
518 struct net_bridge_mcast_port *pmctx;
527 pmctx = br_multicast_pg_to_port_ctx(src->pg);
528 if (!pmctx)
530 brmctx = br_multicast_port_ctx_get_global(pmctx);
534 sg = __br_multicast_add_group(brmctx, pmctx, &sg_ip,
696 br_multicast_port_ngroups_inc_one(struct net_bridge_mcast_port *pmctx,
700 u32 max = READ_ONCE(pmctx->mdb_max_entries);
701 u32 n = READ_ONCE(pmctx->mdb_n_entries);
709 WRITE_ONCE(pmctx->mdb_n_entries, n + 1);
713 static void br_multicast_port_ngroups_dec_one(struct net_bridge_mcast_port *pmctx)
715 u32 n = READ_ONCE(pmctx->mdb_n_entries);
718 WRITE_ONCE(pmctx->mdb_n_entries, n - 1);
725 struct net_bridge_mcast_port *pmctx;
744 pmctx = br_multicast_port_vid_to_port_ctx(port, group->vid);
745 if (!pmctx)
748 err = br_multicast_port_ngroups_inc_one(pmctx, extack, "Port-VLAN");
763 struct net_bridge_mcast_port *pmctx;
768 pmctx = br_multicast_port_vid_to_port_ctx(port, vid);
769 if (pmctx)
770 br_multicast_port_ngroups_dec_one(pmctx);
775 u32 br_multicast_ngroups_get(const struct net_bridge_mcast_port *pmctx)
777 return READ_ONCE(pmctx->mdb_n_entries);
780 void br_multicast_ngroups_set_max(struct net_bridge_mcast_port *pmctx, u32 max)
782 WRITE_ONCE(pmctx->mdb_max_entries, max);
785 u32 br_multicast_ngroups_get_max(const struct net_bridge_mcast_port *pmctx)
787 return READ_ONCE(pmctx->mdb_max_entries);
906 struct net_bridge_mcast_port *pmctx,
911 if (pmctx && br_multicast_port_ctx_is_vlan(pmctx))
912 vlan = pmctx->vlan;
926 struct net_bridge_mcast_port *pmctx,
975 __br_multicast_query_handle_vlan(brmctx, pmctx, skb);
1073 struct net_bridge_mcast_port *pmctx,
1125 __br_multicast_query_handle_vlan(brmctx, pmctx, skb);
1238 struct net_bridge_mcast_port *pmctx,
1251 return br_ip4_multicast_alloc_query(brmctx, pmctx, pg,
1266 return br_ip6_multicast_alloc_query(brmctx, pmctx, pg,
1504 struct net_bridge_mcast_port *pmctx,
1516 if (!br_multicast_ctx_should_use(brmctx, pmctx))
1523 if (!pmctx) {
1531 if (br_port_group_equal(p, pmctx->port, src))
1533 if ((unsigned long)p->key.port < (unsigned long)pmctx->port)
1537 p = br_multicast_new_port_group(pmctx->port, group, *pp, 0, src,
1558 struct net_bridge_mcast_port *pmctx,
1568 pg = __br_multicast_add_group(brmctx, pmctx, group, src, filter_mode,
1578 struct net_bridge_mcast_port *pmctx,
1596 return br_multicast_add_group(brmctx, pmctx, &br_group, src,
1602 struct net_bridge_mcast_port *pmctx,
1620 return br_multicast_add_group(brmctx, pmctx, &br_group, src,
1634 static bool br_ip4_multicast_rport_del(struct net_bridge_mcast_port *pmctx)
1636 return br_multicast_rport_del(&pmctx->ip4_rlist);
1639 static bool br_ip6_multicast_rport_del(struct net_bridge_mcast_port *pmctx)
1642 return br_multicast_rport_del(&pmctx->ip6_rlist);
1648 static void br_multicast_router_expired(struct net_bridge_mcast_port *pmctx,
1652 struct net_bridge *br = pmctx->port->br;
1656 if (pmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
1657 pmctx->multicast_router == MDB_RTR_TYPE_PERM ||
1662 br_multicast_rport_del_notify(pmctx, del);
1669 struct net_bridge_mcast_port *pmctx = from_timer(pmctx, t,
1672 br_multicast_router_expired(pmctx, t, &pmctx->ip4_rlist);
1678 struct net_bridge_mcast_port *pmctx = from_timer(pmctx, t,
1681 br_multicast_router_expired(pmctx, t, &pmctx->ip6_rlist);
1781 struct net_bridge_mcast_port *pmctx,
1793 if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
1798 skb = br_multicast_alloc_query(brmctx, pmctx, pg, ip_dst, group,
1804 if (pmctx) {
1805 skb->dev = pmctx->port->dev;
1806 br_multicast_count(brmctx->br, pmctx->port, skb, igmp_type,
1809 dev_net(pmctx->port->dev), NULL, skb, NULL, skb->dev,
1849 struct net_bridge_mcast_port *pmctx,
1857 if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
1864 if (pmctx ? (own_query == &pmctx->ip4_own_query) :
1881 if (!pmctx && querier->port_ifidx) {
1887 __br_multicast_send_query(brmctx, pmctx, NULL, NULL, &br_group, false,
1898 br_multicast_port_query_expired(struct net_bridge_mcast_port *pmctx,
1901 struct net_bridge *br = pmctx->port->br;
1905 if (br_multicast_port_ctx_state_stopped(pmctx))
1908 brmctx = br_multicast_port_ctx_get_global(pmctx);
1912 br_multicast_send_query(brmctx, pmctx, query);
1920 struct net_bridge_mcast_port *pmctx = from_timer(pmctx, t,
1923 br_multicast_port_query_expired(pmctx, &pmctx->ip4_own_query);
1929 struct net_bridge_mcast_port *pmctx = from_timer(pmctx, t,
1932 br_multicast_port_query_expired(pmctx, &pmctx->ip6_own_query);
1941 struct net_bridge_mcast_port *pmctx;
1950 pmctx = br_multicast_pg_to_port_ctx(pg);
1951 if (!pmctx)
1953 brmctx = br_multicast_port_ctx_get_global(pmctx);
1969 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
1972 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
1997 struct net_bridge_mcast_port *pmctx)
1999 pmctx->port = port;
2000 pmctx->vlan = vlan;
2001 pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
2002 timer_setup(&pmctx->ip4_mc_router_timer,
2004 timer_setup(&pmctx->ip4_own_query.timer,
2007 timer_setup(&pmctx->ip6_mc_router_timer,
2009 timer_setup(&pmctx->ip6_own_query.timer,
2014 void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
2017 del_timer_sync(&pmctx->ip6_mc_router_timer);
2019 del_timer_sync(&pmctx->ip4_mc_router_timer);
2070 static void __br_multicast_enable_port_ctx(struct net_bridge_mcast_port *pmctx)
2072 struct net_bridge *br = pmctx->port->br;
2075 brmctx = br_multicast_port_ctx_get_global(pmctx);
2080 br_multicast_enable(&pmctx->ip4_own_query);
2082 br_multicast_enable(&pmctx->ip6_own_query);
2084 if (pmctx->multicast_router == MDB_RTR_TYPE_PERM) {
2085 br_ip4_multicast_add_router(brmctx, pmctx);
2086 br_ip6_multicast_add_router(brmctx, pmctx);
2089 if (br_multicast_port_ctx_is_vlan(pmctx)) {
2101 hlist_for_each_entry(pg, &pmctx->port->mglist, mglist) {
2102 if (pg->key.addr.vid == pmctx->vlan->vid)
2105 WRITE_ONCE(pmctx->mdb_n_entries, n);
2118 static void __br_multicast_disable_port_ctx(struct net_bridge_mcast_port *pmctx)
2124 hlist_for_each_entry_safe(pg, n, &pmctx->port->mglist, mglist)
2126 (!br_multicast_port_ctx_is_vlan(pmctx) ||
2127 pg->key.addr.vid == pmctx->vlan->vid))
2128 br_multicast_find_del_pg(pmctx->port->br, pg);
2130 del |= br_ip4_multicast_rport_del(pmctx);
2131 del_timer(&pmctx->ip4_mc_router_timer);
2132 del_timer(&pmctx->ip4_own_query.timer);
2133 del |= br_ip6_multicast_rport_del(pmctx);
2135 del_timer(&pmctx->ip6_mc_router_timer);
2136 del_timer(&pmctx->ip6_own_query.timer);
2138 br_multicast_rport_del_notify(pmctx, del);
2171 struct net_bridge_mcast_port *pmctx,
2208 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2218 struct net_bridge_mcast_port *pmctx,
2239 __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
2404 struct net_bridge_mcast_port *pmctx,
2440 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2451 struct net_bridge_mcast_port *pmctx,
2490 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2492 __grp_send_query_and_rexmit(brmctx, pmctx, pg);
2498 struct net_bridge_mcast_port *pmctx,
2507 changed = __grp_src_toin_incl(brmctx, pmctx, pg, h_addr, srcs,
2511 changed = __grp_src_toin_excl(brmctx, pmctx, pg, h_addr, srcs,
2535 struct net_bridge_mcast_port *pmctx,
2568 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2579 struct net_bridge_mcast_port *pmctx,
2619 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2625 struct net_bridge_mcast_port *pmctx,
2634 __grp_src_toex_incl(brmctx, pmctx, pg, h_addr, srcs, nsrcs,
2640 changed = __grp_src_toex_excl(brmctx, pmctx, pg, h_addr, srcs,
2655 struct net_bridge_mcast_port *pmctx,
2683 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2693 struct net_bridge_mcast_port *pmctx,
2728 __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
2734 struct net_bridge_mcast_port *pmctx,
2742 changed = __grp_src_block_incl(brmctx, pmctx, pg, h_addr, srcs,
2746 changed = __grp_src_block_excl(brmctx, pmctx, pg, h_addr, srcs,
2783 struct net_bridge_mcast_port *pmctx,
2834 if (!pmctx || igmpv2) {
2835 br_ip4_multicast_leave_group(brmctx, pmctx,
2840 err = br_ip4_multicast_add_group(brmctx, pmctx, group,
2846 if (!pmctx || igmpv2)
2850 if (!br_multicast_ctx_should_use(brmctx, pmctx))
2856 pg = br_multicast_find_port(mdst, pmctx->port, src);
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,
2905 struct net_bridge_mcast_port *pmctx,
2970 if (!pmctx || mldv1) {
2971 br_ip6_multicast_leave_group(brmctx, pmctx,
2977 err = br_ip6_multicast_add_group(brmctx, pmctx,
2984 if (!pmctx || mldv1)
2988 if (!br_multicast_ctx_should_use(brmctx, pmctx))
2994 pg = br_multicast_find_port(mdst, pmctx->port, src);
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,
3047 struct net_bridge_mcast_port *pmctx,
3050 int port_ifidx = pmctx ? pmctx->port->dev->ifindex : 0;
3227 struct net_bridge_mcast_port *pmctx;
3231 pmctx = hlist_entry(rlist, struct net_bridge_mcast_port,
3235 pmctx = hlist_entry(rlist, struct net_bridge_mcast_port,
3238 return pmctx->port;
3263 static bool br_multicast_no_router_otherpf(struct net_bridge_mcast_port *pmctx,
3267 if (rnode != &pmctx->ip6_rlist)
3268 return hlist_unhashed(&pmctx->ip6_rlist);
3270 return hlist_unhashed(&pmctx->ip4_rlist);
3281 struct net_bridge_mcast_port *pmctx,
3290 slot = br_multicast_get_rport_slot(brmctx, pmctx->port, mc_router_list);
3301 if (br_multicast_no_router_otherpf(pmctx, rlist)) {
3302 br_rtr_notify(pmctx->port->br->dev, pmctx, RTM_NEWMDB);
3303 br_port_mc_router_state_change(pmctx->port, true);
3312 struct net_bridge_mcast_port *pmctx)
3314 br_multicast_add_router(brmctx, pmctx, &pmctx->ip4_rlist,
3323 struct net_bridge_mcast_port *pmctx)
3326 br_multicast_add_router(brmctx, pmctx, &pmctx->ip6_rlist,
3332 struct net_bridge_mcast_port *pmctx,
3339 if (!br_multicast_ctx_should_use(brmctx, pmctx))
3342 if (!pmctx) {
3352 if (pmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
3353 pmctx->multicast_router == MDB_RTR_TYPE_PERM)
3356 br_multicast_add_router(brmctx, pmctx, rlist, mc_router_list);
3361 struct net_bridge_mcast_port *pmctx)
3366 if (pmctx) {
3367 timer = &pmctx->ip4_mc_router_timer;
3368 rlist = &pmctx->ip4_rlist;
3371 br_multicast_mark_router(brmctx, pmctx, timer, rlist,
3376 struct net_bridge_mcast_port *pmctx)
3382 if (pmctx) {
3383 timer = &pmctx->ip6_mc_router_timer;
3384 rlist = &pmctx->ip6_rlist;
3387 br_multicast_mark_router(brmctx, pmctx, timer, rlist,
3394 struct net_bridge_mcast_port *pmctx,
3399 if (!br_multicast_select_querier(brmctx, pmctx, saddr))
3403 br_ip4_multicast_mark_router(brmctx, pmctx);
3409 struct net_bridge_mcast_port *pmctx,
3414 if (!br_multicast_select_querier(brmctx, pmctx, saddr))
3418 br_ip6_multicast_mark_router(brmctx, pmctx);
3423 struct net_bridge_mcast_port *pmctx,
3440 if (!br_multicast_ctx_should_use(brmctx, pmctx))
3469 br_ip4_multicast_query_received(brmctx, pmctx,
3504 struct net_bridge_mcast_port *pmctx,
3523 if (!br_multicast_ctx_should_use(brmctx, pmctx))
3557 br_ip6_multicast_query_received(brmctx, pmctx,
3595 struct net_bridge_mcast_port *pmctx,
3607 if (!br_multicast_ctx_should_use(brmctx, pmctx))
3614 if (pmctx && (pmctx->port->flags & BR_MULTICAST_FAST_LEAVE)) {
3620 if (!br_port_group_equal(p, pmctx->port, src))
3636 __br_multicast_send_query(brmctx, pmctx, NULL, NULL, &mp->addr,
3645 p != NULL && pmctx != NULL;
3647 if (!br_port_group_equal(p, pmctx->port, src))
3665 if (!pmctx) {
3679 if (p->key.port != pmctx->port)
3696 struct net_bridge_mcast_port *pmctx,
3707 own_query = pmctx ? &pmctx->ip4_own_query : &brmctx->ip4_own_query;
3714 br_multicast_leave_group(brmctx, pmctx, &br_group,
3721 struct net_bridge_mcast_port *pmctx,
3732 own_query = pmctx ? &pmctx->ip6_own_query : &brmctx->ip6_own_query;
3739 br_multicast_leave_group(brmctx, pmctx, &br_group,
3779 struct net_bridge_mcast_port *pmctx,
3791 br_ip4_multicast_mark_router(brmctx, pmctx);
3796 struct net_bridge_mcast_port *pmctx,
3804 br_ip4_multicast_mark_router(brmctx, pmctx);
3811 struct net_bridge_mcast_port *pmctx,
3815 struct net_bridge_port *p = pmctx ? pmctx->port : NULL;
3827 br_multicast_pim(brmctx, pmctx, skb);
3829 br_ip4_multicast_mrd_rcv(brmctx, pmctx, skb);
3846 err = br_ip4_multicast_add_group(brmctx, pmctx, ih->group, vid,
3850 err = br_ip4_multicast_igmp3_report(brmctx, pmctx, skb, vid);
3853 br_ip4_multicast_query(brmctx, pmctx, skb, vid);
3856 br_ip4_multicast_leave_group(brmctx, pmctx, ih->group, vid, src);
3868 struct net_bridge_mcast_port *pmctx,
3875 br_ip6_multicast_mark_router(brmctx, pmctx);
3880 struct net_bridge_mcast_port *pmctx,
3884 struct net_bridge_port *p = pmctx ? pmctx->port : NULL;
3896 br_ip6_multicast_mrd_rcv(brmctx, pmctx, skb);
3911 err = br_ip6_multicast_add_group(brmctx, pmctx, &mld->mld_mca,
3915 err = br_ip6_multicast_mld2_report(brmctx, pmctx, skb, vid);
3918 err = br_ip6_multicast_query(brmctx, pmctx, skb, vid);
3922 br_ip6_multicast_leave_group(brmctx, pmctx, &mld->mld_mca, vid,
3935 struct net_bridge_mcast_port **pmctx,
3956 *pmctx = NULL;
3960 *pmctx = &vlan->port_mcast_ctx;
3969 ret = br_multicast_ipv4_rcv(*brmctx, *pmctx, skb, vid);
3973 ret = br_multicast_ipv6_rcv(*brmctx, *pmctx, skb, vid);
4409 br_multicast_rport_del_notify(struct net_bridge_mcast_port *pmctx, bool deleted)
4417 if (!hlist_unhashed(&pmctx->ip4_rlist))
4420 if (!hlist_unhashed(&pmctx->ip6_rlist))
4424 br_rtr_notify(pmctx->port->br->dev, pmctx, RTM_DELMDB);
4425 br_port_mc_router_state_change(pmctx->port, false);
4428 if (pmctx->multicast_router == MDB_RTR_TYPE_TEMP)
4429 pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
4432 int br_multicast_set_port_router(struct net_bridge_mcast_port *pmctx,
4440 brmctx = br_multicast_port_ctx_get_global(pmctx);
4442 if (pmctx->multicast_router == val) {
4444 if (pmctx->multicast_router == MDB_RTR_TYPE_TEMP) {
4445 mod_timer(&pmctx->ip4_mc_router_timer,
4448 mod_timer(&pmctx->ip6_mc_router_timer,
4457 pmctx->multicast_router = MDB_RTR_TYPE_DISABLED;
4458 del |= br_ip4_multicast_rport_del(pmctx);
4459 del_timer(&pmctx->ip4_mc_router_timer);
4460 del |= br_ip6_multicast_rport_del(pmctx);
4462 del_timer(&pmctx->ip6_mc_router_timer);
4464 br_multicast_rport_del_notify(pmctx, del);
4467 pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
4468 del |= br_ip4_multicast_rport_del(pmctx);
4469 del |= br_ip6_multicast_rport_del(pmctx);
4470 br_multicast_rport_del_notify(pmctx, del);
4473 pmctx->multicast_router = MDB_RTR_TYPE_PERM;
4474 del_timer(&pmctx->ip4_mc_router_timer);
4475 br_ip4_multicast_add_router(brmctx, pmctx);
4477 del_timer(&pmctx->ip6_mc_router_timer);
4479 br_ip6_multicast_add_router(brmctx, pmctx);
4482 pmctx->multicast_router = MDB_RTR_TYPE_TEMP;
4483 br_ip4_multicast_mark_router(brmctx, pmctx);
4484 br_ip6_multicast_mark_router(brmctx, pmctx);
4903 struct net_bridge_mcast_port *pmctx;
4916 hlist_for_each_entry_rcu(pmctx, &brmctx->ip4_mc_router_list,
4918 if (pmctx->port == port)
4927 hlist_for_each_entry_rcu(pmctx, &brmctx->ip6_mc_router_list,
4929 if (pmctx->port == port)