forked from Minki/linux
bonding: fix to rejoin multicast groups immediately
The IGMP specs states that if the system receives a membership report, it shouldn't send another for the next minute. However, if a link failure happens right after that, the backup slave and the switch connected to this slave will not know about the multicast and the traffic will hang for about a minute. This patch fixes it to rejoin multicast groups immediately after a failover restoring the multicast traffic. Signed-off-by: Flavio Leitner <fleitner@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5a37e8ca85
commit
e12b453904
@ -1269,14 +1269,14 @@ void ip_mc_rejoin_group(struct ip_mc_list *im)
|
||||
if (im->multiaddr == IGMP_ALL_HOSTS)
|
||||
return;
|
||||
|
||||
if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) {
|
||||
igmp_mod_timer(im, IGMP_Initial_Report_Delay);
|
||||
return;
|
||||
}
|
||||
/* else, v3 */
|
||||
im->crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
IGMP_Unsolicited_Report_Count;
|
||||
igmp_ifc_event(in_dev);
|
||||
/* a failover is happening and switches
|
||||
* must be notified immediately */
|
||||
if (IGMP_V1_SEEN(in_dev))
|
||||
igmp_send_report(in_dev, im, IGMP_HOST_MEMBERSHIP_REPORT);
|
||||
else if (IGMP_V2_SEEN(in_dev))
|
||||
igmp_send_report(in_dev, im, IGMPV2_HOST_MEMBERSHIP_REPORT);
|
||||
else
|
||||
igmp_send_report(in_dev, im, IGMPV3_HOST_MEMBERSHIP_REPORT);
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(ip_mc_rejoin_group);
|
||||
|
Loading…
Reference in New Issue
Block a user