• Stefano Brivio's avatar
    ip6_tunnel: Fix encapsulation layout · d4d576f5
    Stefano Brivio authored
    Commit 058214a4 ("ip6_tun: Add infrastructure for doing
    encapsulation") added the ip6_tnl_encap() call in ip6_tnl_xmit(), before
    the call to ipv6_push_frag_opts() to append the IPv6 Tunnel Encapsulation
    Limit option (option 4, RFC 2473, par. 5.1) to the outer IPv6 header.
    
    As long as the option didn't actually end up in generated packets, this
    wasn't an issue. Then commit 89a23c8b ("ip6_tunnel: Fix missing tunnel
    encapsulation limit option") fixed sending of this option, and the
    resulting layout, e.g. for FoU, is:
    
    .-------------------.------------.----------.-------------------.----- - -
    | Outer IPv6 Header | UDP header | Option 4 | Inner IPv6 Header | Payload
    '-------------------'------------'----------'-------------------'----- - -
    
    Needless to say, FoU and GUE (at least) won't work over IPv6. The option
    is appended by default, and I couldn't find a way to disable it with the
    current iproute2.
    
    Turn this into a more reasonable:
    
    .-------------------.----------.------------.-------------------.----- - -
    | Outer IPv6 Header | Option 4 | UDP header | Inner IPv6 Header | Payload
    '-------------------'----------'------------'-------------------'----- - -
    
    With this, and with 84dad559 ("udp6: fix encap return code for
    resubmitting"), FoU and GUE work again over IPv6.
    
    Fixes: 058214a4 ("ip6_tun: Add infrastructure for doing encapsulation")
    Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d4d576f5
ip6_tunnel.c 56.9 KB