bge on 64-bit pci: corrupt packets

From: Jonathan Chen (jon_at_freebsd.org)
Date: 07/02/04

  • Next message: John Baldwin: "Re: Debugging APIC problem (R5.2.1 vt-8235 ata failure no interrupt), need help"
    Date: Thu, 1 Jul 2004 22:48:29 -0400
    To: freebsd-hackers@freebsd.org
    
    

    Hi all,

    I've been experiencing a problem with using bge on 64-bit pci slots. After
    looking at this for the whole day, I still have no idea what the problem
    is. Perhaps one of you can help...

    The setup:
            SuperMicro P4SCT+ motherboard (E7210 Canterwood ES)
            3Com 3c996-SX (Broadcom BCM5701 rev 0x105)
            FreeBSD 5.2.1 GENERIC kernel
            Using vlan over the bge card

    The problem:

    TCP packets sent over the vlan would get corrupted while sending. Other
    packet types may or may not be corrupted -- I've only been able to catch
    TCP so far. The content of the packet would get corrupted, while the
    checksum generated remains valid for the non-corrupted packet. tcpdump on
    the sending side does not show any errors, while tcpdump on the receive
    side shows the problem. (See tcpdump output at bottom of message, bytes
    0x210-0x214 should be the string "8901" and not "0123") The corrupted 4
    bytes appear to be at the end of the buffer of a write() call.

    The problem appears to go away when a 32-bit PCI slot is used. I am also
    unable to reproduce the problem on a 64-bit PCI slot without the use of
    vlans. Not only were there no tcp checksum errors, datastreams appears
    intact after the transfer (using md5).

    In the course of trying to track down the problem, I turned off hardware
    TCP checksuming for the card (by removing CSUM_TCP from BGE_CSUM_FEATURES).
    This appears to make matters worse. Now, not only is TCP over vlans
    broken, TCP traffic over the non-vlaned bge is also corrupt in the same
    manner. Note that turning off checksuming through ifconfig -txcsum did not
    have the same effect. (NB: I think turning on/off bge checksuming through
    ifconfig/ioctl is broken? Shouldn't it set ifp->if_hwassist?)

    Since the card works fine in a 32-bit slot but breaks in a 64-bit slot, I'm
    guessing the problem is somehow related to alignment. However, I have no
    idea how I would go about realigning things, especially since the card uses
    DMA. Help?

    BTW, am I correct in assuming that transmit checksum offloading is not used
    with vlans?

    -Jon

    192.168.1.1.49178 > 192.168.1.2.5001: . [bad tcp cksum 606!] 97779257:97780701(1444) ack 1 win 33212 <nop,nop,timestamp 23564240 23581272> (DF) (ttl 64, id 19704, len 1496)
    0x0000 4500 05d8 4cf8 4000 4006 64d4 c0a8 0101 E...L.@.@.d.....
    0x0010 c0a8 0102 c01a 1389 affe cfe1 060c 82ee ................
    0x0020 8010 81bc 4f61 0000 0101 080a 0167 8fd0 ....Oa.......g..
    0x0030 0167 d258 3233 3435 3637 3839 3031 3233 .g.X234567890123
    0x0040 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0050 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0060 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0070 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0080 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0090 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x00a0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x00b0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x00c0 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x00d0 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x00e0 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x00f0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0100 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0110 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0120 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0130 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0140 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0150 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0160 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0170 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0180 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0190 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x01a0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x01b0 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x01c0 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x01d0 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x01e0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x01f0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0200 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0210 3031 3233 0000 0000 0000 0001 0000 1389 0123............
    0x0220 0000 0000 0000 0000 ffff fc18 3435 3637 ............4567
    0x0230 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0240 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0250 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0260 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0270 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0280 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0290 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x02a0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x02b0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x02c0 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x02d0 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x02e0 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x02f0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0300 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0310 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0320 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0330 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0340 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0350 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0360 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0370 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0380 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0390 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x03a0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x03b0 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x03c0 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x03d0 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x03e0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x03f0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0400 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0410 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0420 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0430 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0440 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0450 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0460 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0470 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0480 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0490 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x04a0 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x04b0 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x04c0 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x04d0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x04e0 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x04f0 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0500 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0510 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0520 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0530 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0540 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x0550 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x0560 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x0570 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x0580 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901
    0x0590 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567
    0x05a0 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
    0x05b0 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
    0x05c0 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345
    0x05d0 3637 3839 3031 3233 67890123

    [packet courtasy of iperf]

    -Jon
    _______________________________________________
    freebsd-hackers@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
    To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"


  • Next message: John Baldwin: "Re: Debugging APIC problem (R5.2.1 vt-8235 ata failure no interrupt), need help"

    Relevant Pages

    • Re: How to handle TCP checksum, if adapter support TCP checksum offloading?
      ... the TCP/IP stack calculates the TCP pseudo header checksum ... When i run my client on 172.10.10.11, the very first packet (which is SYN, ... It has only the sum of TCP pseudo header. ...
      (microsoft.public.development.device.drivers)
    • Re: NDIS passthru packet redirection
      ... I solved this with adjusting the TCP checksum. ... Now I must redirect the answer packet to the calling application. ... TCP header or TCP data isn't changed, the you don't need to update the TCP ...
      (microsoft.public.development.device.drivers)
    • Re: Wrong TCP/IP checksum on server side?
      ... One point to know is that Etherreal running on the host that sends a packet ... My TCP packets get dropped on the server ... > TCP checksum on server side is wrong? ... > modified anything in the TCP header and TCP data. ...
      (microsoft.public.development.device.drivers)
    • Re: Incremental update of TCP Checksum
      ... >>am intercepting a TCP packet, which I would like to change slightly. ... >>I changed a portion of the tcp header, I have to update the tcp checksum ... >>I tried the following algorithm but it didnt work. ...
      (Linux-Kernel)
    • alt.2600 FAQ Revision .014 (2/4)
      ... One type of firewall is the packet filtering firewall. ... Dropping packets instead of rejecting them greatly increases the time required to scan your network. ... Port scanning UDP ports is much slower than port scanning TCP ports. ... Chartreuse Use the electricity from your phone line Cheese Connect two phones to create a diverter Chrome Manipulate Traffic Signals by Remote Control ...
      (alt.2600)