• Shan Wei's avatar
    ipv6: allow to send packet after receiving ICMPv6 Too Big message with MTU... · f2228f78
    Shan Wei authored
    ipv6: allow to send packet after receiving ICMPv6 Too Big message with MTU field less than IPV6_MIN_MTU
    
    According to RFC2460, PMTU is set to the IPv6 Minimum Link
    MTU (1280) and a fragment header should always be included
    after a node receiving Too Big message reporting PMTU is
    less than the IPv6 Minimum Link MTU.
    
    After receiving a ICMPv6 Too Big message reporting PMTU is
    less than the IPv6 Minimum Link MTU, sctp *can't* send any
    data/control chunk that total length including IPv6 head
    and IPv6 extend head is less than IPV6_MIN_MTU(1280 bytes).
    
    The failure occured in p6_fragment(), about reason
    see following(take SHUTDOWN chunk for example):
    sctp_packet_transmit (SHUTDOWN chunk, len=16 byte)
    |------sctp_v6_xmit (local_df=0)
       |------ip6_xmit
           |------ip6_output (dst_allfrag is ture)
               |------ip6_fragment
    
    In ip6_fragment(), for local_df=0, drops the the packet
    and returns EMSGSIZE.
    
    The patch fixes it with adding check length of skb->len.
    In this case, Ipv6 not to fragment upper protocol data,
    just only add a fragment header before it.
    Signed-off-by: default avatarShan Wei <shanwei@cn.fujitsu.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f2228f78
ip6_output.c 38.4 KB