• Daniel Borkmann's avatar
    packet: allow to transmit +4 byte in TX_RING slot for VLAN case · 52f1454f
    Daniel Borkmann authored
    Commit 57f89bfa ("network: Allow af_packet to transmit +4 bytes
    for VLAN packets.") added the possibility for non-mmaped frames to
    send extra 4 byte for VLAN header so the MTU increases from 1500 to
    1504 byte, for example.
    
    Commit cbd89acb ("af_packet: fix for sending VLAN frames via
    packet_mmap") attempted to fix that for the mmap part but was
    reverted as it caused regressions while using eth_type_trans()
    on output path.
    
    Lets just act analogous to 57f89bfa and add a similar logic
    to TX_RING. We presume size_max as overcharged with +4 bytes and
    later on after skb has been built by tpacket_fill_skb() check
    for ETH_P_8021Q header on packets larger than normal MTU. Can
    be easily reproduced with a slightly modified trafgen in mmap(2)
    mode, test cases:
    
     { fill(0xff, 12) const16(0x8100) fill(0xff, <1504|1505>) }
     { fill(0xff, 12) const16(0x0806) fill(0xff, <1500|1501>) }
    
    Note that we need to do the test right after tpacket_fill_skb()
    as sockets can have PACKET_LOSS set where we would not fail but
    instead just continue to traverse the ring.
    Reported-by: default avatarMathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
    Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
    Cc: Ben Greear <greearb@candelatech.com>
    Cc: Phil Sutter <phil@nwl.cc>
    Tested-by: default avatarMathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    52f1454f
af_packet.c 95.7 KB