[dpdk-dev] Regarding UDP checksum offload
Prashant Upadhyaya
praupadhyaya at gmail.com
Thu Jan 29 13:56:34 CET 2015
Hi Olivier,
On Wed, Jan 28, 2015 at 8:39 PM, Olivier MATZ <olivier.matz at 6wind.com>
wrote:
> Hi Prashant,
>
>
> On 01/28/2015 03:57 PM, Prashant Upadhyaya wrote:
>
>> I am using dpdk 1.6r1, intel 82599 NIC.
>>>> I have an mbuf, I have hand-constructed a UDP packet (IPv4) in
>>>> the data
>>>> portion, filled the relevant fields of the headers and I do a tx
>>>> burst. No
>>>> problems, the destination gets the packet. I filled UDP checksum
>>>> as zero
>>>> and there was no checksum offloaded in ol_flags.
>>>>
>>>> Now in the same usecase, I want to offload UDP checksum.
>>>> I am aware that the checksum field in UDP header has to be
>>>> filled with the
>>>> pseudo header checksum, I did that, duly added the
>>>> PKT_TX_UDP_CKSUM flag in
>>>> ol_flags, did a tx_burst and the packet does not reach the
>>>> destination.
>>>>
>>>> I realized that I have to fill the following fields as well (my
>>>> packet does
>>>> not have vlan tag)
>>>> mbuf->pkt.vlan_macip.f.l2_len
>>>> mbuf->pkt.vlan_macip.f.l3_len
>>>>
>>>> so I filled the l2_len as 14 and l3_len as 20 (IP header with no
>>>> options)
>>>> Yet the packet did not reach the destination.
>>>>
>>>> So my question is -- am I filling the l2_len and l3_len
>>>> properly ?
>>>> Is there anything else to be done before I can get this UDP
>>>> checksum
>>>> offload to work properly for me.
>>>>
>>>
>>>
>>>
>>> As far as I remember, this should be working on 1.6r1.
>>> When you say "did not reach the destination", do you mean that the
>>> packet is not transmitted at all? Or is it transmitted with a wrong
>>> checksum?
>>>
>>
>>
>> The packet is not transmitted to destination. I cannot see it in tcpdump
>> at wireshark.
>> If I don't do the offload and fill UDP checksum as zero, then
>> destination shows the packet in tcpdump
>> If I don't do the offload and just fill the pseudo header checksum in
>> UDP header (clearly the wrong checksum), then the destination shows the
>> packet in tcpdump and wireshark decodes it to complain of wrong UDP
>> checksum as expected.
>>
>
> This is strange. I don't see anything obvious in what you are
> describing. It looks like the packet is dropped in the driver
> or in the hardware. You can check the device statistics.
>
> Another thing you can do is to retry on the latest stable dpdk which
> is known to work (see csumonly.c in test-pmd).
>
> Let me add further, I am _just_ doing the UDP checksum offload and not
>> the IP hdr checksum offload. I calculate and set IP header checksum by
>> my own code. I hope that this is acceptable and does not interfere with
>> UDP checksum offload
>>
>
> This should not be a problem.
>
> Indeed it worked with DPDK1.7 and then I retried with DPDK1.6 and it
worked there too.
Must have been some mistake at my end, may be I did not clean properly when
I was experimenting with some values of l2_len.
Sorry for the botheration to the list.
While we are at it, a quick question -- in case I have an mbuf chain whose
payloads constitute a UDP packet, should I setup the ol_flags and the
l2_len, l3_len fields only in the first mbuf header of the chain or in all
the mbuf headers of the chain ?
> Regards,
> Olivier
>
>
More information about the dev
mailing list