Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Feb 2004 16:20:05 -0500 (EST)
From:      Hendrik Scholz <hendrik@scholz.net>
To:        FreeBSD-gnats-submit@freebsd.org
Cc:        freebsd-amd64@freebsd.org
Subject:   ti(4) broken on amd64
Message-ID:  <20040221212005.F423939845@slurmcan.wormulon.net>

next in thread | raw e-mail | index | archive | help

>Submitter-Id:	current-users
>Originator:	Hendrik Scholz
>Organization:	
>Confidential:	no 
>Synopsis:	ti(4) broken on amd64
>Severity:	non-critical
>Priority:	low
>Category:	amd64
>Class:		sw-bug
>Release:	FreeBSD 5.2.1-RC amd64
>Environment:
System: FreeBSD slurmcan.wormulon.net 5.2.1-RC FreeBSD 5.2.1-RC #0: Sat Jan 31 12:38:34 GMT 2004 root@ngoc.NUXI.com:/usr/obj/usr/src/sys/GENERIC amd64


	
>Description:
>Description:

ti0: <Alteon AceNIC 1000baseSX Gigabit Ethernet> mem 0xfc8bc000-0xfc8bffff irq 28 at device 1.0 on pci1
ti0: Ethernet address: 00:60:cf:20:6b:a6
(full dmesg at http://dump.wormulon.net/dmesg/MSI_K8D/dmesg.txt)

$ ifconfig ti0
ti0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
        inet6 fe80::260:cfff:fe20:6ba6%ti0 prefixlen 64 scopeid 0x1
        inet 63.223.8.203 netmask 0xffffff00 broadcast 63.223.8.255
        ether 00:60:cf:20:6b:a6
        media: Ethernet autoselect (1000baseSX <full-duplex>)
        status: active

TCP based protocols (ssh) work but scp is very slow and sometimes the
connection is dropped due to bad packets.

ICMP just misses a bunch of packets:

$ ping 63.223.8.133
PING 63.223.8.133 (63.223.8.133): 56 data bytes
64 bytes from 63.223.8.133: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 63.223.8.133: icmp_seq=3 ttl=64 time=0.200 ms
..
11 packets transmitted, 8 packets received, 27% packet loss
round-trip min/avg/max/stddev = 0.200/0.260/0.316/0.039 ms
$

Doing a tcpdump on the host itself reveals:

63.223.8.203 > 63.223.8.34: icmp: echo request (ttl 64, id 29322, len 84, bad cksum 0!)
63.223.8.34 > 63.223.8.203: icmp: echo reply (ttl 128, id 42958, len 84)
truncated-ip - 70 bytes missing! 63.223.7.6.22 > 24.30.48.121.1921: P 4294962720:4294962784(64) ack 4294964481 win 33304 <nop,nop,timestamp[|tcp]> (DF) [tos 0x10]  (ttl 64, id 29087, len 116, bad cksum 0!)
truncated-ip - 38 bytes missing! 63.223.7.6.22 > 24.30.48.121.1850: P 7760:7792(32) ack 1185 win 33304 <nop,nop,timestamp[|tcp]> (DF) [tos 0x10]  (ttl 64, id 29247, len 84, bad cksum 0!)
truncated-ip - 38 bytes missing! 63.223.7.6.22 > 24.30.48.121.1850: P 7760:7792(32) ack 1185 win 33304 <nop,nop,timestamp[|tcp]> (DF) [tos 0x10]  (ttl 64, id 29247, len 84, bad cksum 0!)
truncated-ip - 38 bytes missing! 63.223.7.6.22 > 24.30.48.121.1850: P 3808:3840(32) ack 289 win 33304 <nop,nop,timestamp[|tcp]> (DF) [tos 0x10]  (ttl 64, id 28931, len 84, bad cksum 0!)
truncated-ip - 38 bytes missing! 63.223.7.6.22 > 24.30.48.121.1850: P 4294959456:4294959488(32) ack 4294965025 win 33304 <nop,nop,timestamp[|tcp]> (DF) [tos 0x10]  (ttl 64, id 28359, len 84, bad cksum 0!)

the target sees this:

63.223.8.203 > 63.223.8.34: icmp: echo request (ttl 64, id 29269, len 84)
63.223.8.34 > 63.223.8.203: icmp: echo reply (ttl 128, id 42940, len 84, bad cksum 0!)
63.223.8.203 > 63.223.8.34: icmp: echo request (ttl 64, id 29272, len 84)
63.223.8.34 > 63.223.8.203: icmp: echo reply (ttl 128, id 42943, len 84, bad cksum 0!)
...

bad chksum is ok since its a broadcom card with enabled TXCSUM:

bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
        inet 63.223.8.34 netmask 0xffffff00 broadcast 63.223.8.255

Let's get back to the first tcpdump:

- received packets are missing data (arp is always ok!)
- the bpf sees packets that belong to another interface
$ route get 63.223.7.6
   route to: unknown63223007006.ibis7.net
destination: 63.223.7.0
       mask: 255.255.255.224
  interface: bge1

bge1 is used as main interface and the ssh session runs on this interface.
- amount of missing data reported by tcpdump for packets from other interface
  are somewhat static: 6 (very uncommon), 38, 54, 70 Bytes (all for
  ssh PSH packets)
- filtered traffic on host with ti(4):
  $ tcpdump -ntvi ti0 not arp and not host 63.223.7.6

  (outgoing request and the matching incoming reply)

63.223.8.203 > 63.223.8.133: icmp: echo request (ttl 64, id 32019, len 84, bad cksum 0!)
85:54:6e:39:6e:e2 e1:72:44:af:9e:9d d67f 60:
                         06f0 381a ff4e cd44 c5f0 bef7 d65f f8b0
                         bf1d a26b 4b19 9ce1 ddb7 85ab fef3 6f09
                         c73e c2cf 2f04 a8da 0a85 c241 c9e2

16Bytes (MAC + MAC + 08:00) + 46 Bytes data = 62 Bytes
The reply packet should be 84 Bytes long.

I reproduced this problem on two different Opteron Systems running
5.2.1-RC/amd64 with two different ti cards (same Alteon type) and different
cables.
The same configuration runs fine on FreeBSD/i386.

Hendrik

>How-To-Repeat:
	
>Fix:

	




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040221212005.F423939845>