linux-um archives
 help / color / mirror / Atom feed
From: BlaisorBlade <blaisorblade_spam@yahoo.it>
To: user-mode-linux-devel@lists.sourceforge.net
Cc: Lars Ellenberg <Lars.Ellenberg@linbit.com>,
	Gerd Knorr <kraxel@bytesex.org>
Subject: Re: [uml-devel] uml "ip header error" for large (fragmented) udp packets
Date: Wed, 6 Oct 2004 19:50:46 +0200	[thread overview]
Message-ID: <200410061938.06648.blaisorblade_spam@yahoo.it> (raw)
In-Reply-To: </ydgn6vAKqzNNA6XYwRcEgI=lge@web.de>

On Sunday 03 October 2004 04:36, Lars Ellenberg wrote:
> in the upcomming new heartbeat design of linux-ha, we use relatively
> large udp packets (passing large xml blobs back and forth between the
> nodes). now, cluster development and testing is convenient on UML.

> but:
>  uml seems to silently and systematically lose all fragmented
>  udp packets, that is packages larger than mtu, and 1480 byte
>  max for xml blobs just does not work out too good ...

> I investigated a little bit (using two simple perl snippets to
> generate/[not]receive the udp packets), and it turns out that:

>  sending large (up to 64K; fragmented) udp packets
>  using tuntap:
>   HOST -> UML  works.
>   UML  -> HOST nope :(
>   UML <-> UML  nope :( [ neither with mcast or other ]
>
>  looking into /proc/net/snmp on the UMLs and the HOST
>  show on the not receiving side an increase of
>  InHdrError!
>  (it never is reassembled into a proper udp packet)
>
> this is easy to reproduce (because it just happens all the time)
> tested with 2.6.6 and 2.6.8 plus respective UML patches.
>
> it seems to me that UML corrupts the ip header of
> fragmented udp packets somehow at sending time.

I've traced this with Ethereal (v0.10.5) running on tap0 and it complains that 
the IP header checksum is always incorrect when the packet is fragmented. 
This does not happen when running both programs on the host; I've set an mtu 
of 1500 for "lo" fot this test.

However, it seems that Ethereal always shows the UDP checksum, which is 
different, as incorrect for not fragmented packets, when they are sent over 
the "lo" link (on my 2.6.7 host kernel); by comparison, when sending them 
over local network it never complains. The Ethereal doc say that when 
capturing on an interface that supports TCP checksum offloading (i.e. 
hardware checksumming), this is normal for TCP checksums, so I guess this can 
happen for UDP checksums, too.

But why the loopback driver should mark itself as capable of doing "hardware 
checksum"? However, it seems that actually this is the situation. In the 
source code, the loopback driver is marked as "needing no checksum at all 
because it's safe (see NETIF_F_NO_CSUM in include/linux/skbuff.h).

Also, it seems that the UML code happily ignores specifying what checksum 
support. And this could help us.

include/linux/skbuff.h describes the Checksum flags, and UML does not use 
them: these two commands return no output.

find arch/um/ -name '*.[ch]'|xargs grep NETIF
find arch/um/ -name '*.[ch]'|xargs grep CHECKSUM

Actually I've never done any work *at all* on the networking code, so this is 
just a wild guess.
> the way it is now we probably need to reanimate some of our old
> boxes to form a real test cluster. and believe me, that is no fun :(

I've tried UML 2.4, and it does not seem to experience this bug: it does not 
increases the host error count in /proc/net/snmp, UdpRecv receives all 
packet sizes (I stopped the test at 49100 bytes), and even Ethereal shows 
correct datas. The test were run sending 
the packets from UML to the Host, as you say.

So this could help you for now, while we try to find a clue about this. Quite 
frankly, I must say that I'm not seeing any network kernel hacker here 
(correct me if I'm wrong), so it will take some time to debug it. Maybe Gerd 
Knorr is an exception, actually.

> if some kind soul would be able to fix that...
> would make cluster testing as we do it
> so much more convenient :-)

-- 
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

  parent reply	other threads:[~2004-10-06 18:02 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-03  2:36 [uml-devel] uml "ip header error" for large (fragmented) udp packets Lars Ellenberg
2004-10-03 15:11 ` BlaisorBlade
2004-10-03 19:29   ` Lars Ellenberg
2004-10-04 11:07   ` Gerd Knorr
2004-10-04 11:56     ` Henrik Nordstrom
2004-10-06 17:50 ` BlaisorBlade [this message]
2004-10-06 18:48   ` Lars Ellenberg
2004-10-06 20:35     ` Andi Kleen
2004-10-06 21:48       ` Lars Ellenberg
2004-10-07 18:41         ` BlaisorBlade
2004-10-07 18:41       ` BlaisorBlade
2004-10-07 20:24         ` Lars Ellenberg
2004-10-11 17:55           ` Lars Ellenberg
2004-10-12  0:03             ` [uml-devel] SOLVED: " Lars Ellenberg
2004-10-12  0:11               ` Andi Kleen
2004-10-12  1:10                 ` BlaisorBlade
2004-10-12  1:53                   ` Michael Richardson
2004-10-15 15:25                   ` [uml-devel] larger MTU _does_ work Lars Ellenberg
2004-10-12  0:27               ` [uml-devel] SOLVED: uml "ip header error" for large (fragmented) udp packets BlaisorBlade
2004-10-12 14:00                 ` Lars Ellenberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200410061938.06648.blaisorblade_spam@yahoo.it \
    --to=blaisorblade_spam@yahoo.it \
    --cc=Lars.Ellenberg@linbit.com \
    --cc=kraxel@bytesex.org \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox