]> git.baikalelectronics.ru Git - kernel.git/commit
ipv4/igmp: fix v1/v2 switchback timeout based on rfc3376, 8.12
authorHangbin Liu <liuhangbin@gmail.com>
Fri, 26 Oct 2018 03:30:35 +0000 (11:30 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 30 Oct 2018 03:26:06 +0000 (20:26 -0700)
commit8b87db14d41c5d49458f7515d603abe1edd8f7fa
tree02ebfc013815d68086875c392d35548c409ce9c9
parentb9578f7b3995457e703d1617bafd4eb586f85274
ipv4/igmp: fix v1/v2 switchback timeout based on rfc3376, 8.12

Similiar with ipv6 mcast commit ec4f1300154aa ("net: ipv6: mld: fix v1/v2
switchback timeout to rfc3810, 9.12.")

i) RFC3376 8.12. Older Version Querier Present Timeout says:

   The Older Version Querier Interval is the time-out for transitioning
   a host back to IGMPv3 mode once an older version query is heard.
   When an older version query is received, hosts set their Older
   Version Querier Present Timer to Older Version Querier Interval.

   This value MUST be ((the Robustness Variable) times (the Query
   Interval in the last Query received)) plus (one Query Response
   Interval).

Currently we only use a hardcode value IGMP_V1/v2_ROUTER_PRESENT_TIMEOUT.
Fix it by adding two new items mr_qi(Query Interval) and mr_qri(Query Response
Interval) in struct in_device.

Now we can calculate the switchback time via (mr_qrv * mr_qi) + mr_qri.
We need update these values when receive IGMPv3 queries.

Reported-by: Ying Xu <yinxu@redhat.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/inetdevice.h
net/ipv4/igmp.c