Hi everyone,
I am trying to migrate to igb driver v5.0.6 from igb driver v2.1.9 for my
82576 card. While the new driver works well with IP traffic, the receive
side does not work with LLC traffic. Note that both the drivers use Packet
Split mode. I did a mping (similar to ping, but uses LLC packets instead of
ICMP) from another system to the DUT (which is loaded with the driver under
experimentation). I am printing the contents of the ring descriptors, right
when they are being copied into the SKB. The prints are added in the
function igb_clean_rx_irq()
v5.0.6
Packet capture with mping, packet size = 1000 bytes.
[ 2781.151014] Rx1: PortType 2, skb->len = 1106, skb->data_len = 1106,
skb->truesize = 2592
[ 2781.151060] Rx1: PortType 2: [30 20 30 30 20 30.30 20 30 35 20 30.31 2e
30 30.20 30|30 20 30 30 20 30 30 20.30 36 20 30 31 2e 30 31.20 66 30 20 61
61 20 61.61 2e 30 33 20 30 30 7c|30 30 20 30 30 20 30 30 ... ]
[ 2781.151146] Rx1 Frag: [00 00 00 00 05 01.00 00 00 00 06 01.04 44 aa
aa.03 00|00
0c 01 20 00 01 00 00.00 00 04 3c 00 00 06 01.00 00 05 01 00 00 05 af.00 00
00 00 00 00 02 a2|00 00 00 00 00 00 00 00 ... ]
v2.1.9
Packet capture with mping, packet size = 8000 bytes.
[ 571.278842] Rx1 : PortType 2: [00 00 00 00 05 01.00 00 00 00 06 01.05 d8
aa aa.03 00|00 0c 01 20 00 21 00 00.00 00 05 d0 00 00 06 01.00 00 05 01 00
00 03 93.00 00 00 00 00 00 02 63|00 00 00 00 00 00 00 00 ... ]
[ 571.278926] rx_buffer_len = 1522, len = 1510
[ 571.278968] Rx1: PortType 2, skb->len = 1510, skb->data_len = 0,
skb->truesize = 1824
The buffer contents in igb driver v2.1.9 make sense, as the header
information such as MAC address and the SNAP header "AA AA 03" is visible.
In case of Igb driver v5.0.6, the buffer contents seem to be filled with
garbage. I also tried to print the fragment contents and there I see the
header information. On further studying the code, I see that there are
quite some changes in the receive path in the new driver. While the old
driver code seems to be lot more straight forward, the new driver inspects
the packet header and computes the length for IP packets and then copies
the appropriate header data. The remaining payload is attached to the SKB
as a fragment. This cannot be adapted to LLC based protocols. Adding a
skb->linearize() call after the skb is copied, populates the skb with
proper contents.
This above behavior made me feel that the ethernet controller may not be
configured the same way for both the drivers. I did a register dump of
configuration registers on both the drivers, on the same device, using
ethtool -d eth5. I see a lot of difference in the hex dump.
Questions
1. The firmware version shown on ethtool for old driver is 2.1.4. Is
this firmware compatible with the new driver?
2. The mping works well on the new driver with packet size = 150 bytes.
The buffer contents are populated correctly. This makes me believe that the
packets are not fragmented for very small packets (may be 256 bytes) and
larger packets are fragmented. This is in contrast with the older driver,
where the packets were not fragmented. Where is this configured and how can
it be reverted back?
Thanks a lot
Adarsh
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit
http://communities.intel.com/community/wired