From: Daniel Borkmann Date: Fri, 28 Feb 2014 01:22:06 +0000 (+0100) Subject: packet: allow to transmit +4 byte in TX_RING slot for VLAN case X-Git-Tag: v3.15-rc1~113^2~240 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52f1454f629fa;p=pandora-kernel.git packet: allow to transmit +4 byte in TX_RING slot for VLAN case Commit 57f89bfa2140 ("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 cbd89acb9eb2 ("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 57f89bfa2140 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: Mathias Kretschmer Signed-off-by: Daniel Borkmann Cc: Ben Greear Cc: Phil Sutter Tested-by: Mathias Kretschmer Signed-off-by: David S. Miller --- Reading git-diff-tree failed