axe USB driver freezing after some traffic

Hello forum!

I have a USB gigabit ethernet adapter with ASIX Electronics AX88178 chip supported by the axe(4) driver in FreeBSD 8 (RC2).

It works, but not for long. After some serious traffic (~50Mbps) it just freezes with no more packets being received or sent. The only thing to make it work again it to re-plug the device or use a usbreset command.

Googling on the problem i found this mailinglist thread:
http://lists.freebsd.org/pipermail/freebsd-current/2009-April/005738.html

However, there doesn't seem to be a single conclusion. Even though my product ("Belkin F5D5055") seems to be supported according to the axe(4) manpage, it doesn't get detected as such, rather with a vendor id. Quoting dmesg output:

Code:
axe0: <vendor 0x050d product 0x5055, rev 2.00/0.01, addr 2> on usbus4
axe0: PHYADDR 0xe0:0x01
miibus1: <MII bus> on axe0
ue0: <USB Ethernet> on axe0

I'm on FreeBSD 8.0RC2 amd64 this time. Are there any suggestions i could try to make this driver work without freezing?

Thanks in advance,

- Sub
 
Yes, i have reported this as PR in FreeBSD's GNATS also, filed under:
http://www.freebsd.org/cgi/query-pr.cgi?pr=140883

It is not amd64 by the way, but i386. Details are in the PR.

I have been asked to enable debugging in order to try to analyse the problem. Once i do that and get some feedback, i would be able to try patches also if they were given.

I would have expected this product to work though, since it was explicitly mentioned by the manual page. Since the mentioned mailinglist thread about similar issues with axe, i wonder if other people could get their gigabit axe product working.
 
Same issue with an Ethernet Adapter D-Link DUB-E100 rev. B1

It freeze silently after some traffic (using skype make it freeze faster)
I guess constant upload produce the freeze, because i can hear friend on skype for a while, but they don't hear me, and then i lose my active connections ...

Code:
Apr  5 19:06:00 core kernel: ugen4.2: <vendor 0x2001> at usbus4
Apr  5 19:06:00 core kernel: axe0: <vendor 0x2001 product 0x3c05, rev 2.00/0.01, addr 2> on usbus4
Apr  5 19:06:00 core kernel: axe0: PHYADDR 0xe0:0x03
Apr  5 19:06:01 core kernel: miibus1: <MII bus> on axe0
Apr  5 19:06:01 core kernel: rlphy0: <IC Plus 10/100 PHY> PHY 3 on miibus1
Apr  5 19:06:01 core kernel: rlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
Apr  5 19:06:01 core kernel: ue0: <USB Ethernet> on axe0
Apr  5 19:06:01 core kernel: ue0: Ethernet address: 00:80:c8:39:cc:ec
Apr  5 19:06:01 core kernel: ue0: link state changed to DOWN
Apr  5 19:06:03 core kernel: ue0: link state changed to UP
 
I omit to write my FreeBSD release :

HTML:
FreeBSD core.home.lan 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2
 
"Me too."

Same problem, same axe driver.
Different PHY, as it's a "GWC AE2300 Gigabit USB 2.0 Ethernet Adapter".

Code:
FreeBSD garnet 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #0: Tue Jan  5 16:02:27 UTC 2010     [email]root@i386-
builder.daemonology.net[/email]:/usr/obj/usr/src/sys/GENERIC  i386

Code:
ugen4.2: <vendor 0x0b95> at usbus4
axe0: <vendor 0x0b95 product 0x1780, rev 2.00/0.01, addr 2> on usbus4
axe0: PHYADDR 0xe0:0x18
miibus1: <MII bus> on axe0
ciphy0: <Cicada VSC8211 10/100/1000TX PHY> PHY 24 on miibus1
ciphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
ue0: <USB Ethernet> on axe0
ue0: Ethernet address: 00:xx:xx:xx:xx:xx
ue0: link state changed to DOWN
ue0: link state changed to UP
 
The same problem with my Dlink Dub-e100 b1
Code:
FreeBSD M1xa1L_GW.lan 8.0-STABLE FreeBSD 8.0-STABLE #1: Sat May  8 17:22:25 MSD 2010     mihail@M1xa1L_GW.lan:/usr/src/sys/i386/compile/main_kernel_18.04.2010  i386
Code:
 ugen2.2: <D-Link> at usbus2
May 16 23:07:16 M1xa1L_GW kernel: axe0: <D-Link DUB-E100 rev B1, rev 2.00/0.01, addr 2> on usbus2
May 16 23:07:16 M1xa1L_GW kernel: axe0: PHYADDR 0xe0:0x03
May 16 23:07:17 M1xa1L_GW kernel: miibus1: <MII bus> on axe0
May 16 23:07:17 M1xa1L_GW kernel: rlphy0: <IC Plus 10/100 PHY> PHY 3 on miibus1
May 16 23:07:17 M1xa1L_GW kernel: rlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
May 16 23:07:17 M1xa1L_GW kernel: ue0: <USB Ethernet> on axe0
May 16 23:07:17 M1xa1L_GW kernel: ue0: Ethernet address: 00:80:c8:3b:8f:e6
 
(Maybe the following applies, maybe not...)

see if the command works:
in a terminal
Code:
dhclient wlan0
(or ue0 as the case may be, I don't see the
rc.conf's )
if so, make an alias
"wifireset" or somthing simpler "wr"
 
This is a wired ethernet controller; not a wireless controller.

DHCP etc. all works, it just hangs after some amount of traffic; intensive traffic appears to trigger it within 30-90 seconds.
 
Hello, dear FreeBSD developers! The same bug plagues my router! I confirm the problem on FreeBSD 7.3, 8.0 and 8.1, adapter model is TRENDnet TU2-ET100.

Code:
axe0: <vendor 0x0b95 product 0x7720, rev 2.00/0.01, addr 2> on usbus4
axe0: PHYADDR 0xe0:0x10
miibus1: <MII bus> on axe0
ukphy0: <Generic IEEE 802.3u media interface> PHY 16 on miibus1
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ue0: <USB Ethernet> on axe0
ue0: Ethernet address: 00:30:ad:b4:06:cc
ue0: link state changed to DOWN
ue0: link state changed to UP
 
A similar problem was reported in the neighbouring thread:

http://forums.freebsd.org/showthread.php?t=14702

The reporter describes the bug:

Once it's connected, after a sufficient amount of data has passed across the external interface (somewhere in the neighborhood of a gigabyte), it again loses its ability to talk to the outside. When I try to ping various IPs, I get error messages like "no buffer space available". A restart (painfully) cures this problem.

After a small discussion he makes a conclusion:

I bought a Linksys USB100TX, which uses the aue driver, and all issues were resolved. [...] no more connection dying after enough traffic across the interface. That axe drive[r] really ought to be fixed.
 
i noticed my ue0 goes down every 10 minutes, and there is nothing in the cron that has this 10 minutes cycle:

Code:
Sep 30 08:00:47 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:00:47 BSDLAP kernel: ue0: link state changed to UP
Sep 30 08:10:32 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:10:32 BSDLAP kernel: ue0: link state changed to UP
Sep 30 08:10:47 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:10:47 BSDLAP kernel: ue0: link state changed to UP
Sep 30 08:20:47 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:20:47 BSDLAP kernel: ue0: link state changed to UP
Sep 30 08:30:17 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:30:17 BSDLAP kernel: ue0: link state changed to UP
Sep 30 08:30:32 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:30:32 BSDLAP kernel: ue0: link state changed to UP
Sep 30 08:41:03 BSDLAP kernel: ue0: link state changed to DOWN
Sep 30 08:41:03 BSDLAP kernel: ue0: link state changed to UP
 
My bridge interface which my ue0 is part of (Apple Ethernet USB adapter) freezes after a while, perhaps this is related to the same problem. Difference with me is that a usbcontrol reset on the device doesn't fix it, neither does removing/inserting it back.
 
I'm seeing something similar. I use an apple usb 100TX ethernet adapter as the interface with my cable modem. If it gets "high" traffic for even a few minutes, the entire interface ceases to transmit data. This is particularly true if the adapter is put into promiscuous mode (e.g. running ntop, tcpdump, etc..) I've disabled my ntop instance and I get a bit more time of constant data transmittal, but in the end, I'm still having to reboot the machine on a regular basis. If there's a driver developer who wants to use me as a test case, I'm willing to be a guinea pig. Let me know all of the items you need.

Thanks
 
Update: I had to snag/write a cron script that checks the interface for uptime every 5 minutes and if its down, it fires the usb reset command to re-init the connection.... In short.. LAME. If anyone has any better ideas, I'm all ears.

Code:
#!/bin/sh
# add ip / hostname separated by white space
HOSTS="xxx.xxx.xxx.1"
 
# no ping request
COUNT=1
 
for myHost in $HOSTS
do
  count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
  if [ $count -eq 0 ]; then
    echo 'Firing' >> /var/log/usbreboot 
    usbconfig -u 5 -a 2 reset
  fi
done
 
I think the issue was fixed in HEAD.
You can copy if_axe.c and if_axereg.h from HEAD to 8.2-RC1 and rebuild kernel.
 
Sorry for the necromancy.

I have a D-Link DUB-E100 connected to my amd64 8.2 machine that's showing these issues.

Code:
FreeBSD erebus 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51 UTC 2011
[email]root@mason.cse.buffalo.edu[/email]:/usr/obj/usr/src/sys/GENERIC  amd64

axe0: <vendor 0x2001 product 0x3c05, rev 2.00/0.01, addr 9> on usbus4
miibus1: <MII bus> on axe0
rlphy0: <IC Plus 10/100 PHY> PHY 3 on miibus1
rlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ue0: <USB Ethernet> on axe0
ue0: Ethernet address: 00:80:c8:3b:16:b2
It seems to be related to the number of open connections not the volume of traffic. For instance I can sftp an entire file system dump (34G) to another machine without incident but if I use a p2p application like transmission the connection goes down after a few minutes with barely tens of megabytes transferred.

If I use the usbconfig configuration as demonstrated in strobe33333's post the connection does reset.

I can provide any information required and more than willing to test any changes.
 
Back
Top