Date: Thu, 28 Aug 2014 17:04:01 -0400 From: Brian Rak <brak@gameservers.com> To: Bryan Venteicher <bryanv@daemoninthecloset.org> Cc: "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org> Subject: Re: Bug in FreeBSD VirtIO network driver (only with pf enabled) Message-ID: <53FF9941.20807@gameservers.com> In-Reply-To: <CAMo0n6RkCB0aCx_G6ZMmJNXopfuAbyTw1=gnuUkTcpQxH3N%2BhQ@mail.gmail.com> References: <53FE2B37.7050309@gameservers.com> <CAMo0n6RkCB0aCx_G6ZMmJNXopfuAbyTw1=gnuUkTcpQxH3N%2BhQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Should I open a bug about this? On 8/28/2014 12:35 AM, Bryan Venteicher wrote: > > > > On Wed, Aug 27, 2014 at 2:02 PM, Brian Rak <brak@gameservers.com > <mailto: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. > > 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. > > 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) > > So, when I do this: > > # service pf start > # cat /root/test | nc vultr.com <http://vultr.com> 80 > > The Linux kernel on the host will report: > > kernel: WARNING: CPU: 7 PID: 7772 at net/core/dev.c:2246 > skb_warn_bad_offload+0xc3/0xd0() > kernel: igb: caps=(0x0000000640114bb3, 0x0000000000000000) > len=1498 data_len=0 gso_size=1380 gso_type=5 ip_summed=0 > > If I do: > > # service pf stop > # cat /root/test | nc vultr.com <http://vultr.com> 80 > > 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. > > 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: > > flags = 0 > gso_type = VIRTIO_NET_HDR_GSO_TCPV4 > hdr_len = 66 > gso_size = 1440 > csum_start = 0 > csum_offset = 0 > > 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. > > > > It would appear that somewhere in pf the CSUM_TCP flag is getting > clear for CSUM_TSO packets. I don't believe the stack otherwise sets > CSUM_TSO without CSUM_TCP. Now, it is probably safe to assume CSUM_TCP > when CSUM_TSO is set: the mbuf's m_pkthdr.csum_data better be valid in > such cases though. > > http://www.spinics.net/lists/netdev/msg293976.html gives more > detail on this. I don't fully understand this, so I'd probably > mangle the explanation if I tried to give more detail. I can > reproduce this at will now, but fixing it is beyond my abilities. > Is there a better place to report this? I'm not entirely sure who > is responsible for maintaining the virtio driver. > _______________________________________________ > freebsd-hackers@freebsd.org <mailto:freebsd-hackers@freebsd.org> > mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to > "freebsd-hackers-unsubscribe@freebsd.org > <mailto:freebsd-hackers-unsubscribe@freebsd.org>" > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53FF9941.20807>