Skip to content

Commit 8d22875

Browse files
T-Xgregkh
authored andcommitted
ipv6: Fix IPv6 packet loss in scenarios involving roaming + snooping switches
[ Upstream commit a088d1d73a4bcfd7bc482f8d08375b9b665dc3e5 ] When for instance a mobile Linux device roams from one access point to another with both APs sharing the same broadcast domain and a multicast snooping switch in between: 1) (c) <~~~> (AP1) <--[SSW]--> (AP2) 2) (AP1) <--[SSW]--> (AP2) <~~~> (c) Then currently IPv6 multicast packets will get lost for (c) until an MLD Querier sends its next query message. The packet loss occurs because upon roaming the Linux host so far stayed silent regarding MLD and the snooping switch will therefore be unaware of the multicast topology change for a while. This patch fixes this by always resending MLD reports when an interface change happens, for instance from NO-CARRIER to CARRIER state. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent ee0cd47 commit 8d22875

1 file changed

Lines changed: 8 additions & 2 deletions

File tree

net/ipv6/addrconf.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3211,9 +3211,15 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
32113211
}
32123212

32133213
if (idev) {
3214-
if (idev->if_flags & IF_READY)
3215-
/* device is already configured. */
3214+
if (idev->if_flags & IF_READY) {
3215+
/* device is already configured -
3216+
* but resend MLD reports, we might
3217+
* have roamed and need to update
3218+
* multicast snooping switches
3219+
*/
3220+
ipv6_mc_up(idev);
32163221
break;
3222+
}
32173223
idev->if_flags |= IF_READY;
32183224
}
32193225

0 commit comments

Comments
 (0)