mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
net: bridge: multicast: use multicast contexts instead of bridge or port
Pass multicast context pointers to multicast functions instead of bridge/port. This would make it easier later to switch these contexts to their per-vlan versions. The patch is basically search and replace, no functional changes. Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d3d065c003
commit
adc47037a7
8 changed files with 575 additions and 515 deletions
|
@ -69,8 +69,10 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
|||
struct net_bridge_port *p = br_port_get_rcu(skb->dev);
|
||||
enum br_pkt_type pkt_type = BR_PKT_UNICAST;
|
||||
struct net_bridge_fdb_entry *dst = NULL;
|
||||
struct net_bridge_mcast_port *pmctx;
|
||||
struct net_bridge_mdb_entry *mdst;
|
||||
bool local_rcv, mcast_hit = false;
|
||||
struct net_bridge_mcast *brmctx;
|
||||
struct net_bridge *br;
|
||||
u16 vid = 0;
|
||||
u8 state;
|
||||
|
@ -78,6 +80,8 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
|||
if (!p || p->state == BR_STATE_DISABLED)
|
||||
goto drop;
|
||||
|
||||
brmctx = &p->br->multicast_ctx;
|
||||
pmctx = &p->multicast_ctx;
|
||||
state = p->state;
|
||||
if (!br_allowed_ingress(p->br, nbp_vlan_group_rcu(p), skb, &vid,
|
||||
&state))
|
||||
|
@ -98,7 +102,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
|||
local_rcv = true;
|
||||
} else {
|
||||
pkt_type = BR_PKT_MULTICAST;
|
||||
if (br_multicast_rcv(br, p, skb, vid))
|
||||
if (br_multicast_rcv(brmctx, pmctx, skb, vid))
|
||||
goto drop;
|
||||
}
|
||||
}
|
||||
|
@ -128,11 +132,11 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
|||
|
||||
switch (pkt_type) {
|
||||
case BR_PKT_MULTICAST:
|
||||
mdst = br_mdb_get(br, skb, vid);
|
||||
mdst = br_mdb_get(brmctx, skb, vid);
|
||||
if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) &&
|
||||
br_multicast_querier_exists(br, eth_hdr(skb), mdst)) {
|
||||
br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst)) {
|
||||
if ((mdst && mdst->host_joined) ||
|
||||
br_multicast_is_router(br, skb)) {
|
||||
br_multicast_is_router(brmctx, skb)) {
|
||||
local_rcv = true;
|
||||
br->dev->stats.multicast++;
|
||||
}
|
||||
|
@ -162,7 +166,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
|||
if (!mcast_hit)
|
||||
br_flood(br, skb, pkt_type, local_rcv, false);
|
||||
else
|
||||
br_multicast_flood(mdst, skb, local_rcv, false);
|
||||
br_multicast_flood(mdst, skb, brmctx, local_rcv, false);
|
||||
}
|
||||
|
||||
if (local_rcv)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue