mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-16 12:14:06 +00:00
net: bridge: mcast: querier and query state affect only current context type
It is a minor optimization and better behaviour to make sure querier and query sending routines affect only the matching multicast context depending if vlan snooping is enabled (vlan ctx vs bridge ctx). It also avoids sending unnecessary extra query packets. Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4d5b4e84c7
commit
cb486ce995
2 changed files with 20 additions and 5 deletions
|
@ -1628,7 +1628,8 @@ static void __br_multicast_send_query(struct net_bridge_mcast *brmctx,
|
|||
struct sk_buff *skb;
|
||||
u8 igmp_type;
|
||||
|
||||
if (!br_multicast_ctx_should_use(brmctx, pmctx))
|
||||
if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
|
||||
!br_multicast_ctx_matches_vlan_snooping(brmctx))
|
||||
return;
|
||||
|
||||
again_under_lmqt:
|
||||
|
@ -3875,9 +3876,9 @@ void br_multicast_open(struct net_bridge *br)
|
|||
__br_multicast_open(&vlan->br_mcast_ctx);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
__br_multicast_open(&br->multicast_ctx);
|
||||
}
|
||||
|
||||
__br_multicast_open(&br->multicast_ctx);
|
||||
}
|
||||
|
||||
static void __br_multicast_stop(struct net_bridge_mcast *brmctx)
|
||||
|
@ -4028,9 +4029,9 @@ void br_multicast_stop(struct net_bridge *br)
|
|||
__br_multicast_stop(&vlan->br_mcast_ctx);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
__br_multicast_stop(&br->multicast_ctx);
|
||||
}
|
||||
|
||||
__br_multicast_stop(&br->multicast_ctx);
|
||||
}
|
||||
|
||||
void br_multicast_dev_del(struct net_bridge *br)
|
||||
|
@ -4175,6 +4176,9 @@ static void br_multicast_start_querier(struct net_bridge_mcast *brmctx,
|
|||
{
|
||||
struct net_bridge_port *port;
|
||||
|
||||
if (!br_multicast_ctx_matches_vlan_snooping(brmctx))
|
||||
return;
|
||||
|
||||
__br_multicast_open_query(brmctx->br, query);
|
||||
|
||||
rcu_read_lock();
|
||||
|
|
|
@ -1196,6 +1196,17 @@ br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1,
|
|||
#endif
|
||||
true;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
br_multicast_ctx_matches_vlan_snooping(const struct net_bridge_mcast *brmctx)
|
||||
{
|
||||
bool vlan_snooping_enabled;
|
||||
|
||||
vlan_snooping_enabled = !!br_opt_get(brmctx->br,
|
||||
BROPT_MCAST_VLAN_SNOOPING_ENABLED);
|
||||
|
||||
return !!(vlan_snooping_enabled == br_multicast_ctx_is_vlan(brmctx));
|
||||
}
|
||||
#else
|
||||
static inline int br_multicast_rcv(struct net_bridge_mcast **brmctx,
|
||||
struct net_bridge_mcast_port **pmctx,
|
||||
|
|
Loading…
Add table
Reference in a new issue