Skip to content

Commit a088d1d

Browse files
T-Xdavem330
authored andcommitted
ipv6: Fix IPv6 packet loss in scenarios involving roaming + snooping switches
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 62f01db commit a088d1d

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

net/ipv6/addrconf.c

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

33883388
if (idev) {
3389-
if (idev->if_flags & IF_READY)
3390-
/* device is already configured. */
3389+
if (idev->if_flags & IF_READY) {
3390+
/* device is already configured -
3391+
* but resend MLD reports, we might
3392+
* have roamed and need to update
3393+
* multicast snooping switches
3394+
*/
3395+
ipv6_mc_up(idev);
33913396
break;
3397+
}
33923398
idev->if_flags |= IF_READY;
33933399
}
33943400

0 commit comments

Comments
 (0)