[dpdk-dev] [PATCH 00/12] add TSO support
Olivier MATZ
olivier.matz at 6wind.com
Tue Nov 11 10:21:15 CET 2014
This is the test report for the new TSO feature. Test done on testpmd
on x86_64-native-linuxapp-gcc
platform:
Tester (linux) <----> DUT (DPDK on westmere)
ixgbe6 port0 (ixgbe)
Run testpmd on DUT:
cd dpdk.org/
make install T=x86_64-native-linuxapp-gcc
cd x86_64-native-linuxapp-gcc/
modprobe uio
insmod kmod/igb_uio.ko
python ../tools/dpdk_nic_bind.py -b igb_uio 0000:02:00.0
echo 0 > /proc/sys/kernel/randomize_va_space
echo 1000 >
/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1000 >
/sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
mount -t hugetlbfs none /mnt/huge
./app/testpmd -c 0x55 -n 4 -m 800 -- -i --port-topology=chained
--enable-rx-cksum
Disable all offload feature on Tester, and start capture:
ethtool -K ixgbe6 rx off tx off tso off gso off gro off lro off
ip l set ixgbe6 up
tcpdump -n -e -i ixgbe6 -s 0 -w /tmp/cap
We use the following scapy script for testing (note: vxlan was not
tested because I have no i40e on my platform, but at least the test
scripts are provided if someone wants to check it):
class VXLAN(Packet):
name = 'VXLAN'
fields_desc = [
FlagsField('flags', default=1 << 3, size=8,
names=['R', 'R', 'R', 'R', 'I', 'R', 'R', 'R']),
XBitField('reserved1', default=0x000000, size=24),
BitField('vni', None, size=24),
XBitField('reserved2', default=0x00, size=8),
]
overload_fields = {
UDP: {'sport': 4789, 'dport': 4789},
}
def mysummary(self):
return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
bind_layers(UDP, VXLAN, dport=4789)
bind_layers(VXLAN, Ether)
def test_v4(iface, macdst):
macsrc = get_if_hwaddr(iface)
v4 = Ether(dst=macdst, src=macsrc)/IP(src=RandIP(), dst=RandIP())
# valid TCP packet
p=v4/TCP(flags=0x10)/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# valid UDP packet
p=v4/UDP()/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# bad IP checksum
p=v4/TCP(flags=0x10)/Raw(RandString(50))
p[IP].chksum=0x1234
sendp(p, iface=iface, count=5)
# bad TCP checksum
p=v4/TCP(flags=0x10, chksum=0x1234)/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# large packet
p=v4/TCP(flags=0x10)/Raw(RandString(1400))
sendp(p, iface=iface, count=5)
def test_v6(iface, macdst):
macsrc = get_if_hwaddr(iface)
v6 = Ether(dst=macdst, src=macsrc)/IPv6(src=RandIP6(), dst=RandIP6())
# checksum TCP
p=v6/TCP(flags=0x10)/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# checksum UDP
p=v6/UDP()/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# bad TCP checksum
p=v6/TCP(flags=0x10, chksum=0x1234)/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# large packet
p=v6/TCP(flags=0x10)/Raw(RandString(1400))
sendp(p, iface=iface, count=5)
def test_vxlan(iface, macdst):
macsrc = get_if_hwaddr(iface)
vxlan = Ether(dst=macdst, src=macsrc)/IP(src=RandIP(), dst=RandIP())
vxlan /= UDP()/VXLAN(vni=1234)/Ether(dst=macdst, src=macsrc)
vxlan /= IP(src=RandIP(), dst=RandIP())
# valid packet
p=vxlan/TCP(flags=0x10)/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# bad IP checksum
p=vxlan/TCP(flags=0x10)/Raw(RandString(50))
p[IP].payload[IP].chksum=0x1234 # inner header
sendp(p, iface=iface, count=5)
# bad TCP checksum
p=vxlan/TCP(flags=0x10, chksum=0x1234)/Raw(RandString(50))
sendp(p, iface=iface, count=5)
# large TCP packet, no UDP checksum on outer
p=vxlan/TCP(flags=0x10)/Raw(RandString(1400))
p[UDP].chksum = 0
sendp(p, iface=iface, count=5)
test_v4("ixgbe6", "00:1B:21:8E:B2:30")
test_v6("ixgbe6", "00:1B:21:8E:B2:30")
test_vxlan("ixgbe6", "00:1B:21:8E:B2:30")
Test 1: rxonly fwd engine
=========================
Check that the NIC is able to decode the packet header and the bad
checksum values. The test_vxlan does not work on ixgbe as it is not able
to recognize vxlan packets.
testpmd command lines:
set fwd rxonly
set verbose 1
start
Start test_v4() in scapy. Result is:
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=92 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=92 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=92 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=92 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=92 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IP_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IP_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IP_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IP_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_IP_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=104 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=1454 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=1454 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=1454 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=1454 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x0800 -
length=1454 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV4_HDR
test_v6
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=112 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=112 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=112 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=112 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=112 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=124 - nb_segs=1 - Receive queue=0x0
PKT_RX_L4_CKSUM_BAD
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=1474 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=1474 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=1474 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=1474 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
port 0/queue 0: received 1 packets
src=90:E2:BA:2B:0F:4C - dst=00:1B:21:8E:B2:30 - type=0x86dd -
length=1474 - nb_segs=1 - Receive queue=0x0
PKT_RX_IPV6_HDR
Test 2: csum fwd engine, use sw checksum
========================================
The goal of this test is to show that the csum forward engine is able
to process checksum in software.
# hw checksum and tso are disabled for port 0
tx_checksum set ip sw 0
tx_checksum set udp sw 0
tx_checksum set tcp sw 0
tx_checksum set sctp sw 0
tx_checksum set vxlan sw 0
tso set 0 0
# set the forward engine
set verbose 1
set fwd csum
start
Start test_v4() in scapy. Result is:
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: flags=
Start test_v6() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: flags=
Start test_vxlan() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: flags=
Check the capture file (test2-cap-sw-cksum.cap)
Test 3: csum fwd engine, use hw checksum
========================================
The goal of this test is to show that the csum forward engine is able to
process checksum in hardware.
# enable hw cksum in csumonly test, disable tso
tx_checksum set ip hw 0
tx_checksum set udp hw 0
tx_checksum set tcp hw 0
tx_checksum set sctp hw 0
# set the forward engine
set verbose 1
set fwd csum
start
Start test_v4() in scapy. Result is:
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
Start test_v6() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: flags=PKT_TX_TCP_CKSUM
Start test_vxlan() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_CKSUM
Check the capture file (test3-cap-hw-cksum.cap)
Note that the outer UDP checksum is wrong when not 0. This is normal as
the software cannot calculate the checksum of the inner layer because
the checksum of the inner layer will be modified by hardware.
Test 4: csum fwd engine, use TSO
================================
The goal of this test is to verify that TSO is working properly.
# enable hw checksum
tx_checksum set ip hw 0
tx_checksum set udp hw 0
tx_checksum set tcp hw 0
tx_checksum set sctp hw 0
# enable TSO
tso set 800 0
# set fwd engine and start
set verbose 1
set fwd csum
start
Start test_v4() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=20 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
Start test_v6() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=17 l4_len=0
tx: m->l2_len=14 m->l3_len=40 m->l4_len=0
tx: m->tso_segsz=800
tx: flags=PKT_TX_UDP_CKSUM
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=86dd l3_len=40 l4_proto=6 l4_len=20
tx: m->l2_len=14 m->l3_len=40 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_TCP_SEG
Start test_vxlan() in scapy, result is:
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
-----------------
rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20
rx: outer_l2_len=14 outer_ethertype=800 outer_l3_len=20
tx: m->l2_len=64 m->l3_len=20 m->l4_len=20
tx: m->tso_segsz=800
tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG
Check the capture file (test4-cap-tso.cap)
Note that the outer UDP checksum is wrong when not 0. This is normal as
the software cannot calculate the checksum of the inner layer because
the checksum of the inner layer will be modified by hardware.
More information about the dev
mailing list