diff options
author | Flavio Leitner <fleitner@redhat.com> | 2010-10-05 10:23:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-10-05 23:26:57 -0400 |
commit | e12b453904c54bbdc515778ff664d87a7f9473af (patch) | |
tree | aa0033607405521e079345d1c3f7471a67bd79ba /net/ipv4 | |
parent | 5a37e8ca8536c47871d46c82211f399adf06fd44 (diff) |
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>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/igmp.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 2a4bb76f2132..25f339672b28 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
@@ -1269,14 +1269,14 @@ void ip_mc_rejoin_group(struct ip_mc_list *im) | |||
1269 | if (im->multiaddr == IGMP_ALL_HOSTS) | 1269 | if (im->multiaddr == IGMP_ALL_HOSTS) |
1270 | return; | 1270 | return; |
1271 | 1271 | ||
1272 | if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) { | 1272 | /* a failover is happening and switches |
1273 | igmp_mod_timer(im, IGMP_Initial_Report_Delay); | 1273 | * must be notified immediately */ |
1274 | return; | 1274 | if (IGMP_V1_SEEN(in_dev)) |
1275 | } | 1275 | igmp_send_report(in_dev, im, IGMP_HOST_MEMBERSHIP_REPORT); |
1276 | /* else, v3 */ | 1276 | else if (IGMP_V2_SEEN(in_dev)) |
1277 | im->crcount = in_dev->mr_qrv ? in_dev->mr_qrv : | 1277 | igmp_send_report(in_dev, im, IGMPV2_HOST_MEMBERSHIP_REPORT); |
1278 | IGMP_Unsolicited_Report_Count; | 1278 | else |
1279 | igmp_ifc_event(in_dev); | 1279 | igmp_send_report(in_dev, im, IGMPV3_HOST_MEMBERSHIP_REPORT); |
1280 | #endif | 1280 | #endif |
1281 | } | 1281 | } |
1282 | EXPORT_SYMBOL(ip_mc_rejoin_group); | 1282 | EXPORT_SYMBOL(ip_mc_rejoin_group); |