Bug 84951

Summary: 8021q: kernel doesn't take into account ethernet header bytes for received packets
Product: Networking Reporter: Garri (g.djavadyan)
Component: OtherAssignee: Stephen Hemminger (stephen)
Status: NEW ---    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 3.16.1 Subsystem:
Regression: No Bisected commit-id:

Description Garri 2014-09-21 18:47:13 UTC
Statistics exported by the kernel for received packets on 802.1q subinterfaces don't consider Ethernet header bytes (dst MAC, src MAC, type). Statistics for transmitted packets is not affected. The problem is more prominent on high-speed links (>100Mb/s), as networking tools (nload, iftop, ...) display lower bandwidth utilization (>5Mb/s difference) than a report from neighboring routing device (FreeBSD, Cisco). Also, someone monitoring Linux router interfaces will find that the router generates more information than it receives.

Tested on CentOS kernel 2.6.32-431.29.2.el6.x86_64 and vanilla 3.16.1 with drivers: bnx2, atl1c and igb.

How to reproduce:

1. Create dot1q subinterfaces on two boxes (vconfig add eth0 4040).
2. Assign IP addresses to subinterfaces.
3. Check the connection using ping.
4. Check the output from ifconfig eth0.4040 or 'cat /sys/class/net/eth0.4040/statistics/rx_{packets,bytes}'.
5. Issue standard 56 byte payload ping using 'ping -c 1 neighboring_ip'.
6. Recheck statistics using step 4.

Expected results:

Received packets value should increase by 1 and received bytes value should increase by 98.

dst MAC - 6
src MAC - 6
ethertype - 2
IP header - 20
ICMP header - 8
ICMP Payload - 56
Total: 98 bytes.


Actual results:

Received packets value increases by 1 and received bytes value increases by 84 bytes.