Problem with checksum offloading on RPi3 (PF + Jails involved)

Carsten Bäcker carbaecker at gmx.de
Sat Oct 31 15:06:54 UTC 2020


Am 29.10.2020 um 22:39 schrieb Kristof Provost:
>
> On 29 Oct 2020, at 22:36, John-Mark Gurney wrote:
>
>     Kristof Provost wrote this message on Thu, Oct 29, 2020 at 21:30
>     +0100:
>
>         On 29 Oct 2020, at 16:30, Carsten Bäcker wrote:
>
>             Sure, i am willing to help.
>
>             Device is a Raspberry Pi 3B (not +), using the
>             onboard-ethernet.
>             I attached a bunch of information.
>
>             Configuration is stripped down to the minimum required to
>             reproduce
>             the
>             problem.
>
>         Okay, so that???s an SMC2 LAN9514_ETH device.
>         That???s the dev/usb/net/if_smsc.c driver.
>
>         However, before we dig into that driver we should make sure
>         that we???re
>         really looking at a checksum problem.
>         It???s entirely normal for TX checksums to be incorrect when
>         logged on
>         the sending host itself (if the hardware does checksum
>         offloading the
>         checksum in the packet sent to the MAC is incorrect, and left
>         to the
>         hardware to fix).
>
>         So, can you confirm that the `"[bad udp cksum 0xe58a ->
>         0x482d!]` you
>         reported was on an inbound packet? And let???s be safe: try to
>         capture
>         packets on a different machine. That???ll give us the true
>         packet, after
>         the hardware has done checksum calculations.
>
>     One interesting point is that the smsc driver claims to not do TX
>     offload,
>     and a brief check shows that it doesn't allow a user to set the
>     TXCSUM.
>
> It does seem to do RX offload, and the comments in the driver suggest
> some .. ahem, creative hardware behaviour:
>
> |/* The checksum appears to be simplistically calculated * over the
> udp/tcp header and data up to the end of the * eth frame. Which means
> if the eth frame is padded * the csum calculation is incorrectly
> performed over * the padding bytes as well. Therefore to be safe we *
> ignore the H/W csum on frames less than or equal to * 64 bytes. * *
> Ignore H/W csum for non-IPv4 packets. */ |
>
> It’s not impossible that there’s some more issues like that in the
> hardware, or even that there are different chip revisions out there.
>
> That also matches up with |ifconfig ue0 -rxcsum| fixing things.
>
> Best regards,
> Kristof
>
Hello again,

just gave it another try, using "ping heise.de" (twice) from within the
jail.

This is the output of tcpdump:
# tcpdump -i pflog0 -vv
tcpdump: listening on pflog0, link-type PFLOG (OpenBSD pflog file),
capture size 262144 bytes
14:06:04.293996 IP (tos 0x0, ttl 64, id 19576, offset 0, flags [none],
proto UDP (17), length 54)
     PC-192-168-178-3.fritz.box.52421 > fritz.box.domain: [bad udp cksum
0xe589 -> 0x0a2c!] 64654+ A? heise.de. (26)

Netstat:
# netstat -s -p udp | grep checksum
         4 with bad checksum
         0 with no checksum

Packet-capture from the router is attached.

Best regards,
Carsten
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rxcsum.pcap
Type: application/octet-stream
Size: 276 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20201031/5b489104/attachment.obj>


More information about the freebsd-hackers mailing list