All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] virtio-net & dhcp & udp checksum
@ 2016-09-06  4:32 Alexey Kardashevskiy
  2016-09-06 10:03 ` Michael S. Tsirkin
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Kardashevskiy @ 2016-09-06  4:32 UTC (permalink / raw)
  To: qemu-devel@nongnu.org; +Cc: Michael S. Tsirkin

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?


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.


-- 
Alexey

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] virtio-net & dhcp & udp checksum
  2016-09-06  4:32 [Qemu-devel] virtio-net & dhcp & udp checksum Alexey Kardashevskiy
@ 2016-09-06 10:03 ` Michael S. Tsirkin
  2016-09-06 11:00   ` Alexey Kardashevskiy
  0 siblings, 1 reply; 4+ messages in thread
From: Michael S. Tsirkin @ 2016-09-06 10:03 UTC (permalink / raw)
  To: Alexey Kardashevskiy; +Cc: qemu-devel@nongnu.org

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.
Of course old dhclient ignores this flag.  I think Debian used to
carry a patch to make it take it into account.

> 
> 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.

> 
> -- 
> Alexey

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] virtio-net & dhcp & udp checksum
  2016-09-06 10:03 ` Michael S. Tsirkin
@ 2016-09-06 11:00   ` Alexey Kardashevskiy
  2016-09-06 11:46     ` Michael S. Tsirkin
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Kardashevskiy @ 2016-09-06 11:00 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel@nongnu.org

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?


> 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?

>>
>> 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 :)



-- 
Alexey

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] virtio-net & dhcp & udp checksum
  2016-09-06 11:00   ` Alexey Kardashevskiy
@ 2016-09-06 11:46     ` Michael S. Tsirkin
  0 siblings, 0 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2016-09-06 11:46 UTC (permalink / raw)
  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 <herbert@gondor.apana.org.au>
    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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-09-06 11:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-06  4:32 [Qemu-devel] virtio-net & dhcp & udp checksum Alexey Kardashevskiy
2016-09-06 10:03 ` Michael S. Tsirkin
2016-09-06 11:00   ` Alexey Kardashevskiy
2016-09-06 11:46     ` Michael S. Tsirkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.