AX88179B (0b95:1790) detected but no interface created on OpenWrt 25.12.2

Hi all,

I’m running into an issue with a USB Ethernet dongle( TP-Link UE306 USB 3.0 Type-A to Gigabit Ethernet Network Adapter) not creating a network interface on a custom OpenWrt build for Raspberry Pi 5.

Environment

  • Device: Raspberry Pi 5
  • OpenWrt version: 25.12.2(ImageBuilder custom build)
  • Architecture: bcm27xx / bcm2712
  • Package manager: apk

USB Device

  • Chipset: ASIX AX88179B
  • lsusb output:
0b95:1790 ASIX AX88179B

Installed Packages

apk-mbedtls base-files bcm27xx-gpu-fw bcm27xx-utils ca-bundle dnsmasq dropbear e2fsprogs firewall4 fstools kmod-fs-vfat kmod-nft-offload kmod-nls-cp437 kmod-nls-iso8859-1 kmod-sound-arm-bcm2835 kmod-sound-core kmod-usb-hid libc libgcc libustream-mbedtls logd mkf2fs mtd netifd nftables odhcp6c odhcpd-ipv6only partx-utils ppp ppp-mod-pppoe procd-ujail uci uclient-fetch urandom-seed cypress-firmware-43455-sdio brcmfmac-nvram-43455-sdio kmod-brcmfmac wpad-basic-mbedtls kmod-i2c-bcm2835 kmod-spi-bcm2835 kmod-i2c-brcmstb kmod-i2c-designware-platform kmod-spi-dw-mmio kmod-hwmon-pwmfan kmod-thermal kmod-usb-net-lan78xx kmod-usb-net-rtl8152 kmod-r8169 luci luci-app-attendedsysupgrade kmod-usb-net-asix kmod-usb-net-asix-ax88179 kmod-mii usbutils

Observed Behavior

  • USB device is detected correctly in lsusb
  • Kernel modules are present and loaded:
lsmod | grep -E 'asix|ax88179|usbnet'

shows:

  • asix
  • ax88179_178a
  • usbnet
  • However, no network interface is created:
ip link show

only shows:

  • lo
  • eth0
  • wlan0
  • br-lan
  • No eth1 , usb0 , or enx* interface appears

dmesg / logread

  • USB device is detected:
New USB device found, idVendor=0b95, idProduct=1790
Product: AX88179B
Manufacturer: ASIX
  • But there is no driver bind / interface registration message (no ax88179_178a ... ethX line)

Sysfs Observations

  • Device appears under:
/sys/bus/usb/devices/2-1:2.0
/sys/bus/usb/devices/2-1:2.1
  • Modalias:
usb:v0B95p1790d0200dc00dsc00dp00ic02isc06ip00in00
  • Manual bind attempt:
echo '0b95 1790' > /sys/bus/usb/drivers/ax88179_178a/new_id
echo '2-1:2.0' > /sys/bus/usb/drivers/ax88179_178a/bind

Result:

write error: No such device

Summary

  • USB layer works (device detected)
  • Correct kernel modules are installed and loaded
  • Driver does not bind to the device
  • No network interface is created

Notes

  • This was built using ImageBuilder with the above packages included
  • I reverted to an older OpenWrt version where the same adapter works correctly
  • This suggests a possible regression or module mismatch in 25.12.2 for AX88179B (0b95:1790)

Would appreciate any guidance or confirmation if this is a known issue.

Thanks!

Based on the PID:VID, you might need to install kmod-usb-net-cdc-mbim too.

This device is ASIX AX88179B (0b95:1790), which uses the ax88179_178a driver. It presents as CDC Ethernet (ic02/isc06), not MBIM (ic0e), so kmod-usb-net-cdc-mbim doesn’t seem applicable here.

the forum search disagrees with you, unless they're reusing the PID and VID, oh well, have fun.

The device reports as ASIX AX88179B (0b95:1790) with interface class ic02/isc06 (CDC Ethernet), not ic0e (MBIM), so kmod-usb-net-cdc-mbim does not seem applicable here. The expected driver is ax88179_178a , and those modules are present and loaded. The issue is that the driver never binds and no interface gets created. Since the same adapter works fine for me on OpenWrt 24.10.5, this points more toward a regression or build/module mismatch in the newer image than a missing MBIM package.

Could you please show the output of cat /sys/kernel/debug/usb/devices

Here is the /sys/kernel/debug/usb/devices output from a working 24.10.5 setup. I redacted only the device serial.

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 2
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 6.06
S:  Manufacturer=Linux 6.6.119 xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=xhci-hcd.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
P:  Vendor=1d6b ProdID=0003 Rev= 6.06
S:  Manufacturer=Linux 6.6.119 xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=xhci-hcd.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  3
P:  Vendor=0b95 ProdID=1790 Rev= 2.00
S:  Manufacturer=ASIX
S:  Product=AX88179B
S:  SerialNumber=[redacted]
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=184mA
I:  If#= 0 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=ff Prot=00 Driver=
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
C:* #Ifs= 2 Cfg#= 2 Atr=a0 MxPwr=184mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0d Prot=00 Driver=cdc_ncm
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
I:* If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_ncm
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_ncm
E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
C:  #Ifs= 2 Cfg#= 3 Atr=a0 MxPwr=184mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=
I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=
E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms

From the Asix website

The AX88179B is a USB 3.2 Gen1 to Gigabit Ethernet controller with integrated 10/100/1000Mbps Gigabit Ethernet PHY. AX88179B supports Windows 11/10/8.x, Linux/Android/Chrome OS, Nintendo Switch in-box drivers, and iOS/iPadOS/macOS/Linux native CDC-NCM driver for driverless, Plug & Play.

which likely means you need kmod-usb-net-cdc-ncm installed

Thanks! Any chance you can show the same from 25.12, with the same driver(s) installed ?
I think I know what to do.

This adapter has 3 USB configurations.
In the example given the active configuration is Cfg#= 2 that works with Driver=cdc_ncm.
Cfg#= 1 is vendor proprietary, see below.
Cfg#= 3 is Cls=02(comm.) Sub=06, so it should work with Driver=cdc_ether.

Assuming there is no adapter specific hotplug script in place, Cfg#= 2 is the default configuration.

There is a udev rule ("50-ax_usb_nic.rules") provided by the manufacturer with the driver sources:

ACTION!="add", GOTO="ax_usb_nic_end"
SUBSYSTEM!="usb", GOTO="ax_usb_nic_end"
ENV{DEVTYPE}!="usb_device", GOTO="ax_usb_nic_end"

ENV{PROPRIETARY_MODE}="1"

ATTR{idVendor}=="0b95", ATTR{idProduct}=="1790", ATTR{bConfigurationValue}!="$env{PROPRIETARY_MODE}", ATTR{bConfigurationValue}="$env{PROPRIETARY_MODE}"

LABEL="ax_usb_nic_end"

The logic is simple - if the current configuration is not 1, then set it to 1, and then probably the vendor-specific driver will pick it up.

So, we can easily implement the same logic in OpenWrt using hotplug and set any configuration number we want. For example, with cfg#3 set cdc_ether should be able to pick it up.

That makes sense. On 24.10.5 the device is clearly using config #2 (CDC NCM, subclass 0d) with the cdc_ncm driver, which is what brings the interface up.

It looks like in the newer build the kernel is either not selecting config #2 anymore or cdc_ncm isn’t being used, which would explain why no interface gets created.

Forcing the USB configuration via hotplug seems like a good workaround. I’ll try forcing config #2 first since that’s known to work, and if needed test config #3 with cdc_ether as a fallback.

I’ll try this in the evening and report back with results — can’t risk bringing the network down during work hours :slightly_smiling_face:

Yes, that should work. Or you could simply add a

echo 1 >/sys/bus/usb/devices/x-y/bConfigurationValue

to /etc/rc.local if the adapter always is plugged into the same port at boot (given by the x-y).

A better long term fix is creating a "cfgselector" driver for ax88179_178a similar to the one I added to r8152 a while ago:

But I really wish we weren't having these issues. If the vendors have to add these class functions as separate configurations then they could at least add some dummy class function to the first configuration. Anything would to to prevent the Linux USB core from changing the default configuration.

why not just install kmod-usb-net-cdc-ncm ?

I dont use my Ue306 directly in Openwrt. The system is a Proxmox VM but the Ue306 works OOTB and uses the cdc-ncm driver

S: Product=AX88179B
S: SerialNumber=00BE8E5A
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=184mA
I: If#= 0 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=ff Prot=00 Driver=
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=128ms
E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
C:* #Ifs= 2 Cfg#= 2 Atr=a0 MxPwr=184mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0d Prot=00 Driver=cdc_ncm
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=128ms
I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_ncm
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_ncm
E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
C: #Ifs= 2 Cfg#= 3 Atr=a0 MxPwr=184mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=128ms
I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=
I: If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=
E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms

The Proxmox system is using kernel 6.8.12 so AFAICS it should work as long as the cdc-ncm kernel module is installed

edit: it looks like cdc-ncm isnt installed by default on 25.12

It's not, it's also not a dependency to the AX88179B driver, that's why it's frequently missed.

You know what i was thinking the same. May be i should start with including that package in custom build and see if that fixes it before doing manual intervention.

I wonder if ax88179_178a can do the job once adapter is switched to Cfg#= 1.

As shown above by @bmork,

unconfigure with "0" or "-1"
echo 0 >/sys/bus/usb/devices/x-y/bConfigurationValue
then
echo 1 >/sys/bus/usb/devices/x-y/bConfigurationValue

Probably but I thought the whole idea of cdc-ncm is that you don't need the chipset specific driver

Yes, but since OP is using a custom image [with only Asix driver included], kmods cannot be added easily.

Surely you just redo the custom build without the asix modules but with the cdc-ncm module ?

I have an ASIX adapter and a test device I could use to try the workaround.
Would someone please explain more on where to modify the configuration.
Here is the output of /sys/kernel/debug/usb/devices:

And the bConfiguration value:

image

My output is different than @detroit ‘s, but same issue of no interface being created.
Also, I have these loaded:

kmod-usb-net-asix-ax88179, kmod-usb-net-cdc-ether, and kmod-usb-net-cdc-ncm