]> www.infradead.org Git - users/hch/misc.git/commitdiff
rndis_host: Flag RNDIS modems as WWAN devices
authorLubomir Rintel <lkundrak@v3.sk>
Tue, 25 Mar 2025 09:58:41 +0000 (10:58 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 27 Mar 2025 17:14:44 +0000 (10:14 -0700)
Set FLAG_WWAN instead of FLAG_ETHERNET for RNDIS interfaces on Mobile
Broadband Modems, as opposed to regular Ethernet adapters.

Otherwise NetworkManager gets confused, misjudges the device type,
and wouldn't know it should connect a modem to get the device to work.
What would be the result depends on ModemManager version -- older
ModemManager would end up disconnecting a device after an unsuccessful
probe attempt (if it connected without needing to unlock a SIM), while
a newer one might spawn a separate PPP connection over a tty interface
instead, resulting in a general confusion and no end of chaos.

The only way to get this work reliably is to fix the device type
and have good enough version ModemManager (or equivalent).

Fixes: 63ba395cd7a5 ("rndis_host: support Novatel Verizon USB730L")
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Link: https://patch.msgid.link/20250325095842.1567999-1-lkundrak@v3.sk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/rndis_host.c

index 7b3739b29c8f72b7b108c5f4ae11fdfcf243237d..bb0bf1415872745aea177ce0ba7d6eb578cb4a47 100644 (file)
@@ -630,6 +630,16 @@ static const struct driver_info    zte_rndis_info = {
        .tx_fixup =     rndis_tx_fixup,
 };
 
+static const struct driver_info        wwan_rndis_info = {
+       .description =  "Mobile Broadband RNDIS device",
+       .flags =        FLAG_WWAN | FLAG_POINTTOPOINT | FLAG_FRAMING_RN | FLAG_NO_SETINT,
+       .bind =         rndis_bind,
+       .unbind =       rndis_unbind,
+       .status =       rndis_status,
+       .rx_fixup =     rndis_rx_fixup,
+       .tx_fixup =     rndis_tx_fixup,
+};
+
 /*-------------------------------------------------------------------------*/
 
 static const struct usb_device_id      products [] = {
@@ -666,9 +676,11 @@ static const struct usb_device_id  products [] = {
        USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
        .driver_info = (unsigned long) &rndis_info,
 }, {
-       /* Novatel Verizon USB730L */
+       /* Mobile Broadband Modem, seen in Novatel Verizon USB730L and
+        * Telit FN990A (RNDIS)
+        */
        USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1),
-       .driver_info = (unsigned long) &rndis_info,
+       .driver_info = (unsigned long)&wwan_rndis_info,
 },
        { },            // END
 };