I use usb-tethering, using a fairphone 5, to access the internet.
On Fedora 41 kde it just worked out of the box, but now that I have updated to Fedora 42 usb-tethering no longer works…
Has the rndis protocol been blacklisted or is this a bug?
I use usb-tethering, using a fairphone 5, to access the internet.
On Fedora 41 kde it just worked out of the box, but now that I have updated to Fedora 42 usb-tethering no longer works…
Has the rndis protocol been blacklisted or is this a bug?
Possibly a bug. It works out of the box on my machine (F42 + GNOME) with my Samsung Galaxy S22+.
Ok… Did a fresh install of F42 Kde and usb-tethering worked, then I installed the updates from Discovery and usb-tethering no longer works.
So must be a bug.
Tried using my backup phone, which is a Samsung A13 5G, and usb-tethering works.
So it probably has something to do with the system no longer recognizing the Fairphone 5 correctly.
How do I file a bug report?
Tried installing Rawhide kernel and the problem persists.
I have filed a bug report.
I have a Fairphone 5 too! Running Calyx OS 6.5.21. I am running Fedora Workstation 42 and I am experiencing exactly the same issue.
Could you please keep us posted here, @newuser9000?
Will do
Where did you fill that?
I have a similar issue and it seems it depends on the kernel:
I’ve got the same problem on F40 after a kernel update to 6.13.11.
This is my bug report 2360027 – Fairphone 5 USB-Tethering no longer working.
Don’t know if I did it correctly. Never filed a bug report before.
The kernel version was 6.14.0-63 on my fresh install, when tethering worked.
After the update, when tethering no longer worked, the kernel version was 6.14.2-300.
I think there was only one other kernel between those two, 6.14.1-300, but I haven’t tested if it works there.
I tried installing the Rawhide kernel, which was version 6.15.0-0.rc1, and it didn’t work there either.
In 6.14.2, this commit landed:
If you see a device starting with “ww” when you run ip link
, then we have the same problem.
Yes, it starts with ww.
wwp12s0f4u2
Not sure how the final regression fix would be looking like ( since the commit had some merit ), but I also reverted the change as a fix and only replying here to add some information. Tested as working fix on USB Tethering with a OnePlus 6T mobile phone device.
Searching through MS RNDIS documentation, it states that a misc device is supposed to be treated as an IEEE 802.3 wired Ethernet connection ( the laptop is the RNDIS Host side ).
“REMOTE_NDIS_INITIALIZE_CMPLT
This message is sent by the device in response to an initialize message.
… snip …
Medium (4 bytes): Identifies the physical medium type. MUST be set to 0x000000000, which
represents IEEE 802.3 wired Ethernet. Other values are reserved for future use.”
Not sure if I am reading this wrong, but ideally ( given that RNDIS remains in the kernel long term ), there should be a solution that is not assuming all
bInterfaceClass 239 Miscellaneous Device
bInterfaceSubClass 4
bInterfaceProtocol 1
are “Novatel Verizon USB730L” and instead look for the RNDIS response ? This relation to MISC/usb descriptor and Novatel is also assumed in usb cdc_ether driver :
static int is_novatel_rndis(struct usb_interface_descriptor *desc)
{
return (desc->bInterfaceClass == USB_CLASS_MISC &&
desc->bInterfaceSubClass == 4 &&
desc->bInterfaceProtocol == 1);
}
and thus a “Telit FN990A” ( or my OnePlus ) can also be a Novatel in that check ?
Anyway, this seems like a small mess, will generally remove the commit on my kernels from now on ( and set “rndis_host” as a module ) as it makes more documentation sense for a MISC RNDIS host to set the ETHER flag - to me.
Thanks everyone for pointing to the correct commit, made a big difference while in Holidays in a congested wifi area
Just in case anyone’s still interestedm there’s more on this here with further links in that message to the linux.org Bugzilla, and threads in the Arch and Gentoo forums as well.
The discussion at the Arch URL is particularly entertaining, and thus a recommended read.
I’ve updated the kernel to 6.14.3 and the problem still exists…
Here is a diff you can use to remove the commit if you compile from code archives, just apply and compile “rndis_host” as a module, then replace the non functioning module with the new one.
Until the maintainers decide to look into and work on how to fix the commit that broke mobile usb tethering on upstream kernels, mentioned herel , no kernel version after which it was merged will work.
diff --git a/linux-6.14.2/drivers/net/usb/rndis_host.c b/linux-6.14.3/drivers/net/usb/rndis_host.c
index bb0bf14..a103715 100644
--- a/linux-6.14.2/drivers/net/usb/rndis_host.c
+++ b/linux-6.14.3/drivers/net/usb/rndis_host.c
@@ -630,16 +630,6 @@ 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 [] = {
@@ -676,11 +666,13 @@ static const struct usb_device_id products [] = {
USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
.driver_info = (unsigned long) &rndis_info,
}, {
- /* Mobile Broadband Modem, seen in Novatel Verizon USB730L and
- * Telit FN990A (RNDIS)
- */
+ /* REGRESSION - FLAG_ETHER is needed
+ * for mobile usb tethering, use &rndis_info
+ * until fixed
+ */
+
USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1),
- .driver_info = (unsigned long)&wwan_rndis_info,
+ .driver_info = (unsigned long)&rndis_info,
},
{ }, // END
};
You might be able to work around the problem with usb_modeswitch
as I pointed out earlier:
Edit: If I’m reading the documentation correctly, the needed usb_modeswitch
command might be something like the following:
sudo usb_modeswitch -v '0xXXXX' -p '0xYYYY' -C '0xe0'
The above is just a guess. I haven’t tested it.
E.g., in Michael’s case, that would be:
sudo usb_modeswitch -v '0x05c6' -p '0x0404' -C '0xe0'
Maybe that would have to be run from a udev rule in order to run early enough though.
Thanks ! I guess you want to find a user friendlier solution that is not requiring a recompile of anything.
I could try usb_modeswitch sometime and verify your commands in order to help on this, afair my OnePlus device had multiple Interface Descriptors for rndis and there are already allowlists/denylists/quirks for multiple usb class specs, thus it is possible ( imo expected ) that usb_modeswitch will not work on all mobile devices - and is defintely not a long term hotfix ( as a mobile phone is not supposed to be a wireless controller ).
from the developer of usb_modeswitch :
In most cases, you will be able to use your device without any interaction except plugging it in.
and things used to work exactly like this before that commit lacking scope was merged…
In general, I am of the opinion that if there is a person that should have used usb_modeswitch ( and in extend udev rules ) or the much saner USB_DEVICE_AND_INTERFACE_INFO blacklisting for non cdc ether conformant devices is the one that pushed that commit which broke all usb tethering mobile devices for everyone in the planet but I will defer any judgmental calls until the maintainers decide on this and not wish to make the discussion in that direction.
Meanwhile, since I am back from vacation and already running my machines with the patched kernel I will need to find some time to revert and play with your suggestion, will be looking forward to see more updates from other people meanwhile !
In the Arch thread I point y’all to earlier, I’d found this post particularly interesting. I think that this where you’ll find the path to your answer for a fix/config adjustment.
Other parts of that thread make me believe that this is not going to be overcome with a udev rule.