veth: Fix the byte counters
authorEric W. Biederman <ebiederm@aristanetworks.com>
Tue, 22 Mar 2011 01:24:53 +0000 (18:24 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 22 Mar 2011 01:24:53 +0000 (18:24 -0700)
Commit 44540960 "veth: move loopback logic to common location" introduced
a bug in the packet counters.  I don't understand why that happened as it
is not explained in the comments and the mut check in dev_forward_skb
retains the assumption that skb->len is the total length of the packet.

I just measured this emperically by setting up a veth pair between two
noop network namespaces setting and attempting a telnet connection between
the two.  I saw three packets in each direction and the byte counters were
exactly 14*3 = 42 bytes high in each direction.  I got the actual
packet lengths with tcpdump.

So remove the extra ETH_HLEN from the veth byte count totals.

Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/veth.c

index 105d7f0630ccb9c0a14b12395b04b322c5362e99..2de9b90c5f8f079859b695979acb4871c5a0ea08 100644 (file)
@@ -171,7 +171,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
        if (skb->ip_summed == CHECKSUM_NONE)
                skb->ip_summed = rcv_priv->ip_summed;
 
-       length = skb->len + ETH_HLEN;
+       length = skb->len;
        if (dev_forward_skb(rcv, skb) != NET_RX_SUCCESS)
                goto rx_drop;