From: Nick H Subject: if_urndis: match USB RNDIS (ef/04/01) [Mudi 7 router] To: tech@openbsd.org Date: Thu, 15 Oct 2026 18:53:03 +0100 I can connect from my OpenBSD laptop to a new Mudi 7 travel router using its wired ethernet port and wireless mode, but not via urndis using the USB-C cable. The device showed in dmesg as: ugen2 at uhub1 port 4 "GL.iNet Mudi 7 (GL-E5800)" rev 3.20/5.15 addr 5 I looked at the USB descriptors for the device, it had a class of "ef", a subclass of "04", and a protocol of "01" which was not being matched and falling back to ugen. Below are patches for /usr/src/sys/dev/usb/usb.h and /usr/src/sys/dev/usb/if_urndis.c to match the additional subclass and protocol, similar to what currently exists in NetBSD. After patching, rebuilding the kernel, and rebooting, dmesg shows: urndis0 at uhub1 port 4 configuration 1 interface 0 "GL.iNet Mudi 7 (GL-E5800)" rev 3.20/5.15 addr 5 urndis0: using RNDIS over Ethernet, address 7c:84:c1:xx:xx:xx ugen2 at uhub1 port 4 configuration 1 "GL.iNet Mudi 7 (GL-E5800)" rev 3.20/5.15 addr 5 Adding "dhcp" to /etc/hostname.urndis0 and running sh /etc/netstart urndis0, the interface receives an address allocated by the Mudi and I can successfully connect to its upstream networks. Tested on a Thinkpad X1 Carbon Gen 6 running OpenBSD-CURRENT with Mudi 7 router (firmware 4.10.0, September 2026) set to USB Tethering mode. v/r Nick --- sys/dev/usb/usb.h.original Thu Oct 15 16:29:35 2026 +++ sys/dev/usb/usb.h Thu Oct 15 16:30:29 2026 @@ -588,6 +588,8 @@ typedef struct usb_port_status usb_port_status_t; #define UICLASS_MISC 0xef #define UISUBCLASS_SYNC 0x01 #define UIPROTO_ACTIVESYNC 0x01 +#define UISUBCLASS_RNDIS 0x04 +#define UIPROTO_RNDIS_ETHERNET 0x01 #define UICLASS_APPL_SPEC 0xfe #define UISUBCLASS_FIRMWARE_DOWNLOAD 1 --- sys/dev/usb/if_urndis.c.original Sun Oct 11 17:15:41 2026 +++ sys/dev/usb/if_urndis.c Thu Oct 15 16:31:29 2026 @@ -124,7 +124,8 @@ const struct urndis_class { } urndis_class[] = { { UICLASS_CDC, UISUBCLASS_ABSTRACT_CONTROL_MODEL, 0xff, "Vendor" }, { UICLASS_WIRELESS, UISUBCLASS_RF, UIPROTO_RNDIS, "RNDIS" }, - { UICLASS_MISC, UISUBCLASS_SYNC, UIPROTO_ACTIVESYNC, "Activesync" } + { UICLASS_MISC, UISUBCLASS_SYNC, UIPROTO_ACTIVESYNC, "Activesync" }, + { UICLASS_MISC, UISUBCLASS_RNDIS, UIPROTO_RNDIS_ETHERNET, "RNDIS over Ethernet"} }; usbd_status