Message ID | e5c5188b9787ae806609e7ca3aa2a0a501b9b5c4.1738685648.git.petrm@nvidia.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] bridge: mdb: Allow replace of a host-joined group | expand |
On 2/4/25 19:37, Petr Machata wrote: > Attempts to replace an MDB group membership of the host itself are > currently bounced: > > # ip link add name br up type bridge vlan_filtering 1 > # bridge mdb replace dev br port br grp 239.0.0.1 vid 2 > # bridge mdb replace dev br port br grp 239.0.0.1 vid 2 > Error: bridge: Group is already joined by host. > > A similar operation done on a member port would succeed. Ignore the check > for replacement of host group memberships as well. > > The bit of code that this enables is br_multicast_host_join(), which, for > already-joined groups only refreshes the MC group expiration timer, which > is desirable; and a userspace notification, also desirable. > > Change a selftest that exercises this code path from expecting a rejection > to expecting a pass. The rest of MDB selftests pass without modification. > > Signed-off-by: Petr Machata <petrm@nvidia.com> > Reviewed-by: Ido Schimmel <idosch@nvidia.com> > --- > net/bridge/br_mdb.c | 2 +- > tools/testing/selftests/net/forwarding/bridge_mdb.sh | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index 1a52a0bca086..7e1ad229e133 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -1040,7 +1040,7 @@ static int br_mdb_add_group(const struct br_mdb_config *cfg, /* host join */ if (!port) { - if (mp->host_joined) { + if (mp->host_joined && !(cfg->nlflags & NLM_F_REPLACE)) { NL_SET_ERR_MSG_MOD(extack, "Group is already joined by host"); return -EEXIST; } diff --git a/tools/testing/selftests/net/forwarding/bridge_mdb.sh b/tools/testing/selftests/net/forwarding/bridge_mdb.sh index d9d587454d20..8c1597ebc2d3 100755 --- a/tools/testing/selftests/net/forwarding/bridge_mdb.sh +++ b/tools/testing/selftests/net/forwarding/bridge_mdb.sh @@ -149,7 +149,7 @@ cfg_test_host_common() check_err $? "Failed to add $name host entry" bridge mdb replace dev br0 port br0 grp $grp $state vid 10 &> /dev/null - check_fail $? "Managed to replace $name host entry" + check_err $? "Failed to replace $name host entry" bridge mdb del dev br0 port br0 grp $grp $state vid 10 bridge mdb get dev br0 grp $grp vid 10 &> /dev/null