From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33033) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhEqF-0001wD-MW for qemu-devel@nongnu.org; Tue, 06 Sep 2016 07:47:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bhEqB-0001fu-Fz for qemu-devel@nongnu.org; Tue, 06 Sep 2016 07:47:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56038) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhEqB-0001fW-7V for qemu-devel@nongnu.org; Tue, 06 Sep 2016 07:46:59 -0400 Date: Tue, 6 Sep 2016 14:46:57 +0300 From: "Michael S. Tsirkin" Message-ID: <20160906144011-mutt-send-email-mst@kernel.org> References: <20160906125510-mutt-send-email-mst@kernel.org> <3863996b-e42d-b824-cdb3-caaaf6d6364f@ozlabs.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3863996b-e42d-b824-cdb3-caaaf6d6364f@ozlabs.ru> Subject: Re: [Qemu-devel] virtio-net & dhcp & udp checksum List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy Cc: "qemu-devel@nongnu.org" On Tue, Sep 06, 2016 at 09:00:30PM +1000, Alexey Kardashevskiy wrote: > On 06/09/16 20:03, Michael S. Tsirkin wrote: > > On Tue, Sep 06, 2016 at 02:32:27PM +1000, Alexey Kardashevskiy wrote: > >> Hi! > >> > >> I am trying DHCP between 2 guests. So I am running first guest with: > >> > >> -netdev tap,id=TAP0,helper=/home/aik/qemu-bridge-helper \ > >> -device "virtio-net-pci,id=vnet0,mac=C0:41:49:4b:ee:ee,netdev=TAP0" > >> > >> and second one with: > >> > >> -netdev tap,id=TAP0,vhost=on,helper=/home/aik/qemu-bridge-helper \ > >> -device "virtio-net-pci,id=vnet0,mac=C0:41:49:4b:00:01,netdev=TAP0" \ > >> > >> > >> Both tap are connected to br0 on the host: > >> > >> aik@fstn1-p1:~$ brctl show > >> bridge name bridge id STP enabled interfaces > >> br0 8000.fe397c73cecc no tap0 > >> tap1 > >> > >> Both guests are debian8 with v4.7 kernel, one is running Dnsmasq version > >> 2.72, the other - isc-dhclient-4.3.1. > >> > >> The very first response from dnsmasq has a bad UDP checksum: > >> > >> 04:19:04.946754 c0:41:49:4b:ee:ee > c0:41:49:4b:00:01, ethertype IPv4 (0x0800) > >> , length 346: (tos 0xc0, ttl 64, id 60635, offset 0, flags [none], proto UDP ( > >> 17), length 332) > >> 192.168.1.250.67 > 192.168.1.1.68: [bad udp cksum 0x8595 -> 0x6e44!] BOOTP > >> /DHCP, Reply, length 304, xid 0x38e6b51c, Flags [none] (0x0000) > >> > >> 0x8595 looks like a UDP header checksum. Unlike dhclient (which uses > >> PF_PACKET), dnsmasq seems to use AF_INET and DGRAM so I am wondering what > >> exactly should do this checksum calculations in this case and why it does > >> not do this? > > > > Receiver should - the packet is clearly marked as such. > > Where is that mark exactly? UDP header (unlikely)? IP header (cannot see > it)? DHCP? It's returned in the aux data. See linux commit below. > > > Of course old dhclient ignores this flag. I think Debian used to > > carry a patch to make it take it into account. > > So seeing bad UDP checksum message in tcpdump of the _source_ (dnsmasq's > tap) side is ok? Yes - no one bothered teaching tcpdump about this commit: commit 8dc4194474159660d7f37c495e3fc3f10d0db8cc Author: Herbert Xu Date: Sun Feb 4 23:31:32 2007 -0800 [PACKET]: Add optional checksum computation for recvmsg > >> > >> I read the old discussion at > >> http://www.mail-archive.com/kvm@vger.kernel.org/msg41958.html > >> > >> but it seems that in my case the broken thing is dnsmasq (which is hard to > >> believe). Running the dnsmasq's guest with > >> > >> -device virtio-net-pci,id=vnet0,csum=off,... > >> > >> fixes the problem. > >> > >> What is broken now? Thanks. > > > > Maybe debian dropped the patch from dhcp? > > http://marc.info/?l=kvm&m=129347023113779 > > > > Or you can use the host-side workaround using a checksum rule. > > Sure, I am just trying to educate myself and understand what to expect and > what is broken :) If you have the time, try adding the patch to dhcp in debian. Maybe it was ubuntu that was carrying it? You can try that ... > > > -- > Alexey