Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.
Hi, thanks for the report, this is not a bug, UDP fragmentation offload is not supported in any of the intel wired ethernet hardware. I think you might be confusing the rx ip fragment checksum offload calculation in hardware with the UFO feature, which is actual transmit fragmentation for IP fragments (UDP)
Maybe you can point me to the portion of the data sheet that has the issue that confused you and I can follow up with our documentation guys to see if we can get it clarified (if necessary)
Sorry if I might have used the wrong term - I'm talking about TSO,
but using UDP. I was under the impression that this feature is enabled
by using the ethtool ufo on command?
The document I'm referring to is the "Intel® 82576 Gigabit Ethernet
Controller Datasheet", section 7.2.4 (TCP/UDP Segmentation).
UFO and the way our hardware implements TSO for udp packets are different things.
We do not have software support currently for TSO of udp packets, I think that it should work and have prototyped some code for other adapters to test out this feature. It is kind of crippled in that it doesn't generate true ip fragments, it generates a unique datagram for each packet, which would mess up UDP applications that were not expecting packets to come in this way.
However if you have an application that can handle sending large chunks of data (don't need UFO) with the tso flag set in the skb, then the driver should be able to be modified to do the header replication in hardware. This of course assumes that the receiving end doesn't care that the data has a udp header per packet.
for reference, UFO is for other vendor's hardware that can generate a packet stream like:
input to driver
skb > MTU size with UDP header
output from hardware
UDP packet with MF set
Thanks for the clarification.
I am actually interested in generating a UDP header per packet, as my packets are all < MTU.
Afaik, there's great savings involved, especially when it comes to CPU utilization, PCI bus utilization, etc.
So, I figured I'd generate one big packet with a single header, and use one sendmsg() syscall
to hand it down to the stack, have the driver break it into chunks, create the headers and send
a bunch of < MTU sized UDP packets.
I would greatly appreciate any driver patches or code samples you may
have to test this feature out.
not really a bug, but a feature request, so I'm moving it over to features. I'll try to get something out shortly.
What I had working before was a pktgen.c patch and a driver patch for ixgbe to try to enable udp segementation using tso methods.
Any news on the ixgbe TSO patch front? Really looking forward to it... ;)
I've got a patch to implement the change in the driver, with a pktgen change to demo how to use it. I've also verified that it works correctly in the 82576 hardware to segment UDP frames and update the IP header for each frame.
The kernel will also need a modification to add a new NETIF_F flag to indicate the hardware can segment UDP frames with TSO style.
giladr: I'm sure you're long past this, but I still have those patches around if you never got them.