]> git.baikalelectronics.ru Git - kernel.git/commit
Merge branch 'disable-neigh-update-for-tunnels-during-pmtu-update'
authorDavid S. Miller <davem@davemloft.net>
Wed, 25 Dec 2019 06:28:55 +0000 (22:28 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Dec 2019 06:28:55 +0000 (22:28 -0800)
commitf3433e3d6b0be2a3ac0be14490c6224b85efd654
treed45b1c2d62ee09cf5b45f1ea9f6f2a9d17aacccb
parentbe4364fdfab846f6ecabbacb99fc55179d335476
parent8d32371dabdfe0c4bc302be4b923d7b902f786c9
Merge branch 'disable-neigh-update-for-tunnels-during-pmtu-update'

Hangbin Liu says:

====================
disable neigh update for tunnels during pmtu update

When we setup a pair of gretap, ping each other and create neighbour cache.
Then delete and recreate one side. We will never be able to ping6 to the new
created gretap.

The reason is when we ping6 remote via gretap, we will call like

gre_tap_xmit()
 - ip_tunnel_xmit()
   - tnl_update_pmtu()
     - skb_dst_update_pmtu()
       - ip6_rt_update_pmtu()
         - __ip6_rt_update_pmtu()
           - dst_confirm_neigh()
             - ip6_confirm_neigh()
               - __ipv6_confirm_neigh()
                 - n->confirmed = now

As the confirmed time updated, in neigh_timer_handler() the check for
NUD_DELAY confirm time will pass and the neigh state will back to
NUD_REACHABLE. So the old/wrong mac address will be used again.

If we do not update the confirmed time, the neigh state will go to
neigh->nud_state = NUD_PROBE; then go to NUD_FAILED and re-create the
neigh later, which is what IPv4 does.

We couldn't remove the ip6_confirm_neigh() directly as we still need it
for TCP flows. To fix it, we have to pass a bool parameter to
dst_ops.update_pmtu() and only disable neighbor update for tunnels.

v5: No code change, upate some commits description
v4: No code change, upate some commits description
v3: Do not remove dst_confirm_neigh, but add a new bool parameter in
    dst_ops.update_pmtu to control whether we should do neighbor confirm.
    Also split the big patch to small ones for each area.
v2: Remove dst_confirm_neigh in __ip6_rt_update_pmtu.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>