[dpdk-dev] [PATCH 9/9] net/virtio: fix Rx handler when checksum is requested
Olivier MATZ
olivier.matz at 6wind.com
Thu Aug 31 15:51:16 CEST 2017
Platform description
--------------------
guest (dpdk)
+----------------+
| |
| |
| port0 |
+----------------+
|
| virtio
|
+----------------+
| tap0 |
| |
| |
+----------------+
host (linux, vhost-net)
Host configuration
------------------
Start qemu with:
- a ne2k management interface to avoi any conflict with dpdk
- a virtio net device, connected to a tap interface through vhost-net
- mergeable buffers disabled
/usr/bin/qemu-system-x86_64 -k fr -daemonize --enable-kvm -m 2G -cpu host \
-smp 3 -serial telnet::40564,server,nowait -serial null \
-qmp tcp::44340,server,nowait -monitor telnet::49229,server,nowait \
-device ne2k_pci,mac=de:ad:de:01:02:03,netdev=user.0,addr=03 \
-netdev user,id=user.0,hostfwd=tcp::34965-:22 \
-netdev type=tap,id=vhostnet0,script=no,vhost=on,queues=8 \
-device virtio-net-pci,mrg_rxbuf=off,netdev=vhostnet0,mq=on,vectors=17 \
-hda "${VM_PATH}/ubuntu-16.04-template.qcow2" \
-snapshot -vga none -display none
Guest configuration
-------------------
Compile dpdk:
cd dpdk.org
make config T=x86_64-native-linuxapp-gcc
sed -i 's,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=n,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=y,' build/.config
sed -i 's,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DRIVER=n,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DRIVER=y,' build/.config
make -j4
Prepare environment:
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
modprobe uio_pci_generic
python usertools/dpdk-devbind.py -b uio_pci_generic 0000:00:02.0
./build/app/testpmd -l 0,1 --log-level 7 -- --total-num-mbufs=16384 \
-i --port-topology=chained --disable-hw-vlan-filter \
--enable-rx-cksum --disable-hw-vlan-strip --txqflags=0
Without the fix, simple path is used for rx despite it does not
support rx checksum:
...
PMD: set_rxtx_funcs(): virtio: using simple Rx path on port 0
PMD: set_rxtx_funcs(): virtio: using standard Tx path on port 0
...
Configure testpmd:
set fwd rxonly
set verbose 1
start
Without the fix, the received packets don't have the proper checksum
flags (should be PKT_RX_L4_CKSUM_NONE):
port 0/queue 0: received 1 packets
src=1A:3F:FB:C6:FF:14 - dst=52:54:00:12:34:56 - type=0x0800 - length=74 - nb_segs=1 - sw ptype: L2_ETHER L3_IPV4 L4_TCP - l2_len=14 - l3_len=20 - l4_len=40 - Receive queue=0x0
ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN
With the fix, standard rx path is used and the flags are correct:
...
PMD: set_rxtx_funcs(): virtio: using standard Rx path on port 0
PMD: set_rxtx_funcs(): virtio: using standard Tx path on port 0
...
port 0/queue 0: received 1 packets
src=1A:3F:FB:C6:FF:14 - dst=52:54:00:12:34:56 - type=0x0800 - length=74 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4 L4_TCP - sw ptype: L2_ETHER L3_IPV4 L4_TCP - l2_len=14 - l3_len=20 - l4_len=40 - Receive queue=0x0
ol_flags: PKT_RX_L4_CKSUM_NONE PKT_RX_IP_CKSUM_UNKNOWN
More information about the dev
mailing list