Index | Thread | Search

From:
Nick H <nickcph@gmail.com>
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

Download raw body.

Thread
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