• Willem de Bruijn's avatar
    ipv4: add IP_RECVFRAGSIZE cmsg · 70ecc248
    Willem de Bruijn authored
    The IP stack records the largest fragment of a reassembled packet
    in IPCB(skb)->frag_max_size. When reading a datagram or raw packet
    that arrived fragmented, expose the value to allow applications to
    estimate receive path MTU.
    
    Tested:
      Sent data over a veth pair of which the source has a small mtu.
      Sent data using netcat, received using a dedicated process.
    
      Verified that the cmsg IP_RECVFRAGSIZE is returned only when
      data arrives fragmented, and in that cases matches the veth mtu.
    
        ip link add veth0 type veth peer name veth1
    
        ip netns add from
        ip netns add to
    
        ip link set dev veth1 netns to
        ip netns exec to ip addr add dev veth1 192.168.10.1/24
        ip netns exec to ip link set dev veth1 up
    
        ip link set dev veth0 netns from
        ip netns exec from ip addr add dev veth0 192.168.10.2/24
        ip netns exec from ip link set dev veth0 up
        ip netns exec from ip link set dev veth0 mtu 1300
        ip netns exec from ethtool -K veth0 ufo off
    
        dd if=/dev/zero bs=1 count=1400 2>/dev/null > payload
    
        ip netns exec to ./recv_cmsg_recvfragsize -4 -u -p 6000 &
        ip netns exec from nc -q 1 -u 192.168.10.1 6000 < payload
    
      using github.com/wdebruij/kerneltools/blob/master/tests/recvfragsize.c
    Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    70ecc248
ip_sockglue.c 36.4 KB