Ian, thanks for the reply. Based on your you suggestions, I did some further research on this issue, as I don't yet know much about the details of checksum offloading, GSO and other stuff in combination with bridging.

From dmesg:

[ 4.069406] eth0: Tigon3 [partno(BCM95704A6) rev 2100 PHY(5704)] (PCIX:133MHz:64-bit) 10/100/1000Base-T Ethernet 00:30:48:5c:71:2c [ 4.069621] eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[1] WireSpeed[1] TSOcap[0]
[    4.069808] eth0: dma_rwctrl[769f4000] dma_mask[64-bit]

Ok, this is the hardware. I guess the second line tells about capabilities that are built in.

1) The second line in the following fragment got my attention:

[   24.152839] Bridge firewalling registered
[   24.154862] br0: Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature.
[   24.185261] device eth0 entered promiscuous mode
[   24.936053] tg3: eth0: Link is up at 100 Mbps, full duplex.
[   24.936219] tg3: eth0: Flow control is off for TX and off for RX.

I found the following post (May 2008):
https://www.redhat.com/archives/rhelv5-list/2008-May/msg00192.html

"This means that for some reason the UFO flag has been enabled on the bridge device without also enabling TX checksum offload. This is an illegal configuration which is why the kernel warns about it. As to why the UFO flag is set at all more investigation is needed on the actual machine. However, this is harmless as UFO isn't supported by Xen anyway."

Related to this (Dec 2008, 2.6.27):
http://linux.derkeiler.com/Mailing-Lists/Kernel/2008-12/msg06164.html

"The bridge device always causes a warning because when it is first created it has the no checksum flag set along with all the segmentation/fragmentation offload bits. The code in register_netdevice incorrectly checks for only hardware checksum bit and ignores no checksum bit."

Ok, so this is UDP related, not TCP+IPv6:
netdevice.h:#define NETIF_F_UFO       (SKB_GSO_UDP << NETIF_F_GSO_SHIFT)

For now, I think this can be ignored...?

2) From the kerneltrap-link Ian found:

https://kerneltrap.org/mailarchive/linux-netdev/2008/10/13/3628464

"is there something about checksum state changing done by bridging netfilter that we have to be mindful of in skb_gso_segment() and therefore not consider "!= CHECKSUM_PARTIAL" a warn-worthy case?"

As I don't use it anyway, I disabled bridge-netfilter for IPv4/6:

~# sysctl -w net.bridge.bridge-nf-call-iptables=0
~# sysctl -w net.bridge.bridge-nf-call-ip6tables=0

This eliminates mentioning br_nf* in traces, but still the warnings occur.

3) NETIF_F_IPV6_CSUM and NETIF_F_TSO6

https://kerneltrap.org/mailarchive/linux-netdev/2008/10/22/3757954
"I'm pretty sure this particular backtrace is a result of tg3
enabling NETIF_F_TSO6 without also enabling NETIF_F_IPV6_CSUM."

A search on "NETIF_F_IPV6_CSUM NETIF_F_TSO6" did show up the following post:
http://www.mail-archive.com/git-commits-h...@vger.kernel.org/msg15754.html

Subject: [NET]: IPV6 checksum offloading in network devices
Date: Thu, 12 Jul 2007 14:07:43 -0700
"The existing model for checksum offload does not correctly handle
devices that can offload IPV4 and IPV6 only. The NETIF_F_HW_CSUM flag
implies device can do any arbitrary protocol."

Hmmm, perhaps the Tigon3 here is not IPv6-ready yet?

The post on...
https://kerneltrap.org/mailarchive/linux-netdev/2008/10/13/3628554
...also notes:

"There is a known issue with IPv6 packets where the driver might
turn on TSO6 without IPv6 checksum offload."

4) Hands-on...

Ian wrote: "Based on that thread I would suggest using ethtool
to mess around with the various offload setting on the physical
interface and/or the bridge, could you have a play and see what happens?"

These are the current settings as reported:

delta:~/ hvc0-# ethtool -k eth0
Offload parameters for eth0:
Cannot get device flags: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: on
large receive offload: off

delta:~/ hvc0-# ethtool -k br0
Offload parameters for br0:
Cannot get device rx csum settings: Operation not supported
Cannot get device flags: Operation not supported
rx-checksumming: off
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off
large receive offload: off

I don't really know yet where to start 'playing' using this function with too many variables, so...

delta:~/ hvc0-# ethtool -K eth0 tso on
Cannot set device tcp segmentation offload settings: Invalid argument
delta:~/ hvc0-# ethtool -K eth0 gso off
delta:~/ hvc0-# ethtool -k eth0
Offload parameters for eth0:
Cannot get device flags: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
large receive offload: off
delta:~/ hvc0-#

Hmmm.. ok.. Now I can do a `while [ 1 ]; do echo bla; done` when being logged in via IPv6/SSH without any warnings on the console.

AFAIK I disabled seg-offloading to the eth0 NIC. It 'works', but it feels like being a dirty workaround...

Hope this helps...

Greetings,
Hans van Kranenburg



--
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to