mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
bridge: mdb: Allow replace of a host-joined group
[ Upstream commit d9e9f6d7b7 ]
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>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/e5c5188b9787ae806609e7ca3aa2a0a501b9b5c4.1738685648.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2c6d451c93
commit
48112ee3e0
@@ -1040,7 +1040,7 @@ static int br_mdb_add_group(const struct br_mdb_config *cfg,
|
|||||||
|
|
||||||
/* host join */
|
/* host join */
|
||||||
if (!port) {
|
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");
|
NL_SET_ERR_MSG_MOD(extack, "Group is already joined by host");
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ cfg_test_host_common()
|
|||||||
check_err $? "Failed to add $name host entry"
|
check_err $? "Failed to add $name host entry"
|
||||||
|
|
||||||
bridge mdb replace dev br0 port br0 grp $grp $state vid 10 &> /dev/null
|
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 del dev br0 port br0 grp $grp $state vid 10
|
||||||
bridge mdb get dev br0 grp $grp vid 10 &> /dev/null
|
bridge mdb get dev br0 grp $grp vid 10 &> /dev/null
|
||||||
|
|||||||
Reference in New Issue
Block a user