Bridging on broken Broadcom hardware.
Subsystems (3)
Greetings (first post to the list, with patch)...
The following patch is required to allow bridging to occur on an IBM x305 (1RU server) - with the tg3 module.
(This has been posted to the kernel-developers mailing list.)
Background:
- The Dual Broadcom NICs in the IBM x305 have a broken checksum routine which wants to calculate the checksum the ethernet packet where the 'source' IP address is the IP address of the sending interface.
This breaks bridging! (Upstream hosts see an invalid checksum and drop the packet.)
- I have heard of other issues with Broadcom NICs not working with IPv6 and broadcast/multicast which could be related.
I would like to get these results and the fix verified, as it will effect any hosts using this chipset. Does anyone have any pointers?
Paul Schulz <[email protected]>
--------------------------------------------------------------------
drivers/net/tg3.c +4 -0
@@ -6161,6 +6161,11 @@if (tp->pci_chip_rev_id ==CHIPREV_ID_5700_B0 ) tp->tg3_flags |=TG3_FLAG_BROKEN_CHECKSUMS ; +/* 5703 A2 have issues with checksumming too. (sarah) */ +if (tp->pci_chip_rev_id ==CHIPREV_ID_5703_A2 ) + tp->tg3_flags |=TG3_FLAG_BROKEN_CHECKSUMS ; +/* Regardless of whether checksums work or not, we configure * the StrongARM chips to not compute the pseudo header checksums * in either direction. Because of the way Linux checksum support
This looks like a network driver not bridging problem, so forwarding to the netdev list.
Quoted 42 lines · On Thu, 19 Feb 2004 09:59:05 +1030 Paul Schulz <[email protected]> wrote:
Greetings (first post to the list, with patch)...
The following patch is required to allow bridging to occur on an IBM x305 (1RU server) - with the tg3 module.
(This has been posted to the kernel-developers mailing list.)Background:
- The Dual Broadcom NICs in the IBM x305 have a broken checksum routine which wants to calculate the checksum the ethernet packet where the 'source' IP address is the IP address of the sending interface.
This breaks bridging! (Upstream hosts see an invalid checksum and drop the packet.)- I have heard of other issues with Broadcom NICs not working with IPv6 and broadcast/multicast which could be related.
I would like to get these results and the fix verified, as it will effect any hosts using this chipset. Does anyone have any pointers?
Paul Schulz <[email protected]>
--------------------------------------------------------------------
diff -Naurlinux-2.4.20/drivers/net/tg3.clinux-2.4.20-np/drivers/net/tg3.cdrivers/net/tg3.c +4
-0@@ -6161,6 +6161,11 @@if (tp->pci_chip_rev_id ==CHIPREV_ID_5700_B0 ) tp->tg3_flags |=TG3_FLAG_BROKEN_CHECKSUMS ; +/* 5703 A2 have issues with checksumming too. (sarah) */ +if (tp->pci_chip_rev_id ==CHIPREV_ID_5703_A2 ) + tp->tg3_flags |=TG3_FLAG_BROKEN_CHECKSUMS ; +/* Regardless of whether checksums work or not, we configure * the StrongARM chips to not compute the pseudo header checksums * in either direction. Because of the way Linux checksum support
Signature · 2 lines
Stephen Hemminger mailto:[email protected] Open Source Development Lab http://developer.osdl.org/shemminger
Quoted 2 lines · On Wed, 18 Feb 2004 16:16:11 -0800 Stephen Hemminger <[email protected]>…
This looks like a network driver not bridging problem, so forwarding to the netdev list.
Bridging packets, which don't come from the IP stack, won't have CHECKSUM_HW or similar set in the SKB checksum field. Therefore the chip won't be told to checksum the packet on transmit.
The firmware will not mess with the packet contents at all unless it is told to do so, and in this case (as described) it won't.
Quoted 4 lines
drivers/net/tg3.c line 6167
Quoted 4 lines
drivers/net/tg3.c +4
-0+/* 5703 A2 have issues with checksumming too. (sarah) */ +if (tp->pci_chip_rev_id ==CHIPREV_ID_5703_A2 ) + tp->tg3_flags |=TG3_FLAG_BROKEN_CHECKSUMS ; +
I'd like to see a real errata report supporting such a claim.