Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Apr 2018 15:54:58 -0700
From:      Dieter BSD <dieterbsd@gmail.com>
To:        freebsd-usb@freebsd.org, freebsd-net@freebsd.org
Cc:        freebsd-drivers@freebsd.org, freebsd-hackers@freebsd.org
Subject:   AX88179 USB-to-Ethernet is slow and silently corrupts data
Message-ID:  <CAA3ZYrCW91_2NapFeELE4%2BdRBEXPdqGRpwN_UvakykHPfe3-Jw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
10.3-RELEASE
amd64 with ECC memory
VIA VL805 USB 3.0 controller
ue0 is Siig USB-to-Ethernet  Chipset: AX88179

ugen0.7: <AX88179 ASIX Elec. Corp.> at usbus0, cfg=0 md=HOST
   spd=SUPER (5.0Gbps) pwr=ON (124mA)

ue0: flags=8c43<UP,BROADCAST,RUNNING,OACTIVE,SIMPLEX,MULTICAST> metric 0
     mtu 1500
        options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
        inet 10.0.210.66 netmask 0xffffff00 broadcast 10.0.210.255
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active

If media is set to "1000baseT <full-duplex>" it "works", but slowly, and
received data is silently corrupted. :-(  Transmitted data is not
corrupted (tested with > 30 GB).

ifconfig ue0 -txcsum
"works", but still gives silent data corruption

ifconfig ue0 -rxcsum  (acts the same with or without txcsum)
  ping out
    netstat sees packets both directions, but ping doesn't see the response:
    8 packets transmitted, 0 packets received, 100.0% packet loss
  ping in
   netstat sees packets in, but no responses going out

I can see that some Ethernet controllers would not support checksum offloading,
but it seems to me that turning the checksum offloading off should always
work? (at the expense of more cpu load)

Previously (2016 May):
  # ifconfig ue0 media 100baseTX-FDX
  fixed the input error problem and the data corruption problem,
  at the expense of making it even slower.

  Sent data from machine A with 10Mbps Ethernet.  (Netgear Ethernet switch
  converts 10Mbps to 1000Mbps) Netstat did not report any input errors on
  ue0 and there was no data corruption.  So ue0 can handle gigabit data rate,
  but gets input errors if packets arrive too frequently.

  I tried moving it to a USB-2 port.  No data corruption, but USB-2 is slow.

  The chip performs a lot better for tweaktown:
  http://www.tweaktown.com/reviews/7243/vantec-cb-u300gna-usb-3-gigabit-network-adapter-review/index.html
  (Vantec CB-U300GNA with the same Asix AX88179 chip)
  "full duplex gigabit with 952 Mbps consistently across the chart"

http://www.vantecusa.com/products_detail.php?p_id=143&p_name=USB+3.0+Gigabit+Ethernet+Adapter&pc_id=21&pc_name=Network&pt_id=5&pt_name=Accessories

  Asix AX88179 chip:
  http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=131;71;112
  "Supports Jumbo frame up to 4KB"

  But ifconfig rejects any value > 1500:
  ifconfig ue0 mtu 1501
  ifconfig: ioctl SIOCSIFMTU (set mtu): Invalid argument

I tried mtu of 100, 500, 1000, 1400 but they all give
rcp: lost connection

USB disks are fast, so the USB controller seems to work ok.

I also tried a Tek Republic TUN-300 which has the same AX88179,
and it acts the same as the Siig.

So, transmit works, but is slow.  Receive works if the amount of traffic
is low enough (limit rate of data sent, limit Ethernet speed, or
use USB-2). But if data is received too fast it gets silently corrupted.
Setting -rxcsum does not work, and cannot set mtu other than 1500.

Questions:
 Why does -rxcsum not work?
 Why does attempting to set a larger mtu fail?
 Why does setting a smaller mtu make rcp fail?
 Why is the chip acting slow?
 How do I get it to work properly? (fast and without data corruption)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAA3ZYrCW91_2NapFeELE4%2BdRBEXPdqGRpwN_UvakykHPfe3-Jw>