]> 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)
commit302b3693eb8c7056097f7ad83ecd243d518ea260
tree02ebfc013815d68086875c392d35548c409ce9c9
parent7624397d1bd7813239ae198b4f750ea9d54ae7d7
ipv4/igmp: fix v1/v2 switchback timeout based on rfc3376, 8.12

Similiar with ipv6 mcast commit dc71b41a87681 ("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