mirror of
https://github.com/openwrt/openwrt.git
synced 2025-04-23 10:24:11 +00:00
realtek: don't add CPU port to multicast portmasks
There shouldn't be any reason to forward all multicast to the CPU. The original commit message also doesn't provide a reason for this seemingly unrelated change. The current implementation of the delete method is also broken, as it entirely removes any entry when the portmask contains only the CPU port, even if it was explicitly created. Fixes: 724e4af530cd ("realtek: Store and Restore MC memberships for port enable/disable") Signed-off-by: Jan Hoffmann <jan@3e8.eu>
This commit is contained in:
parent
3356126b82
commit
6772ae1172
@ -994,7 +994,7 @@ static int rtl83xx_mc_group_alloc(struct rtl838x_switch_priv *priv, int port)
|
||||
}
|
||||
|
||||
set_bit(mc_group, priv->mc_group_bm);
|
||||
portmask = BIT_ULL(port) | BIT_ULL(priv->cpu_port);
|
||||
portmask = BIT_ULL(port);
|
||||
priv->r->write_mcast_pmask(mc_group, portmask);
|
||||
|
||||
return mc_group;
|
||||
@ -1026,11 +1026,8 @@ static u64 rtl83xx_mc_group_del_port(struct rtl838x_switch_priv *priv, int mc_gr
|
||||
}
|
||||
portmask &= ~BIT_ULL(port);
|
||||
priv->r->write_mcast_pmask(mc_group, portmask);
|
||||
if (portmask == BIT_ULL(priv->cpu_port)) {
|
||||
portmask &= ~BIT_ULL(priv->cpu_port);
|
||||
priv->r->write_mcast_pmask(mc_group, portmask);
|
||||
if (!portmask)
|
||||
clear_bit(mc_group, priv->mc_group_bm);
|
||||
}
|
||||
|
||||
return portmask;
|
||||
}
|
||||
|
@ -981,7 +981,7 @@ static int rtl83xx_mc_group_alloc(struct rtl838x_switch_priv *priv, int port)
|
||||
}
|
||||
|
||||
set_bit(mc_group, priv->mc_group_bm);
|
||||
portmask = BIT_ULL(port) | BIT_ULL(priv->cpu_port);
|
||||
portmask = BIT_ULL(port);
|
||||
priv->r->write_mcast_pmask(mc_group, portmask);
|
||||
|
||||
return mc_group;
|
||||
@ -1013,11 +1013,8 @@ static u64 rtl83xx_mc_group_del_port(struct rtl838x_switch_priv *priv, int mc_gr
|
||||
}
|
||||
portmask &= ~BIT_ULL(port);
|
||||
priv->r->write_mcast_pmask(mc_group, portmask);
|
||||
if (portmask == BIT_ULL(priv->cpu_port)) {
|
||||
portmask &= ~BIT_ULL(priv->cpu_port);
|
||||
priv->r->write_mcast_pmask(mc_group, portmask);
|
||||
if (!portmask)
|
||||
clear_bit(mc_group, priv->mc_group_bm);
|
||||
}
|
||||
|
||||
return portmask;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user