Date: Wed, 27 Aug 2014 13:26:05 -0600 From: John Nielsen <lists@jnielsen.net> To: Brian Rak <brak@gameservers.com>, Bryan Venteicher <bryanv@freebsd.org> Cc: freebsd-hackers@freebsd.org Subject: Re: Bug in FreeBSD VirtIO network driver (only with pf enabled) Message-ID: <13EFC786-FFFB-479A-A65F-F33B07A78B9F@jnielsen.net> In-Reply-To: <53FE2B37.7050309@gameservers.com> References: <53FE2B37.7050309@gameservers.com>
next in thread | previous in thread | raw e-mail | index | archive | help
The virtio maintainer is bryanv (CC'ed). I have KVM+CentOS hosts available at $WORK so let me know if anyone = needs help reproducing this or testing fixes. On Aug 27, 2014, at 1:02 PM, Brian Rak <brak@gameservers.com> wrote: > I have a FreeBSD 10 x64 guest installed inside a KVM instance on = Linux. When pf is active, and the server is sending data it causes the = Linux host to report warnings related to GSO. >=20 > I've talked to some Linux developers, and they believe it to be a bug = inside the FreeBSD VirtIO drivers. Based on what I'm seeing, I'm = inclined to agree with them. >=20 > Reproduction is mildly annoying, you need: > 1) A KVM guest setup with bridged networking, with FreeBSD running = side using the VirtIO network interface. (We tested with CentOS, but = the exact distribution should not matter) > 2) pf enabled (I'm using a single rule: "scrub in all") > 3) Some method of sending a bit of traffic from the guest (I use = netcat) >=20 > So, when I do this: >=20 > # service pf start > # cat /root/test | nc vultr.com 80 >=20 > The Linux kernel on the host will report: >=20 > kernel: WARNING: CPU: 7 PID: 7772 at net/core/dev.c:2246 = skb_warn_bad_offload+0xc3/0xd0() > kernel: igb: caps=3D(0x0000000640114bb3, 0x0000000000000000) len=3D1498 = data_len=3D0 gso_size=3D1380 gso_type=3D5 ip_summed=3D0 >=20 > If I do: >=20 > # service pf stop > # cat /root/test | nc vultr.com 80 >=20 > No such warning is reported. I can only reproduce this with pf = enabled. The contents of the /root/test don't matter, I'm using 4k of = data from /dev/urandom. The test file just needs to be bigger then the = MTU of the host's network interface. >=20 > I was able to track this down to the virtio_net_hdr being sent by the = FreeBSD guest. With pf enabled, this outbound traffic has the following = header: >=20 > flags =3D 0 > gso_type =3D VIRTIO_NET_HDR_GSO_TCPV4 > hdr_len =3D 66 > gso_size =3D 1440 > csum_start =3D 0 > csum_offset =3D 0 >=20 > But, this is not a valid configuration. With VIRTIO_NET_HDR_GSO_TCPV4 = enabled, you should also be setting VIRTIO_NET_HDR_F_NEEDS_CSUM and = populating the csum_start and csum_offset fields.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?13EFC786-FFFB-479A-A65F-F33B07A78B9F>