Does Android use RNDIS by default for tethering even to Linux hosts?

891 views Asked by At

I'm trying to understand RNDIS functionality in Android.

Do Android devices use RNDIS for ethernet over USB even when connected to a Linux host, rather than using CDC NCM? Why?

1

There are 1 answers

0
MaZe On

The fundamental reason why Android devices have supported RNDIS and not NCM is that Windows supported RNDIS and not NCM.

Supporting both at the same time on the 'device/gadget' side (ie. what an Android phone is) turns out to be very tricky while still getting Windows drivers to autoload/autodetect. Hence you kind of have to choose one.

Windows 10 started supporting NCM (though this might have been unofficial), Windows 11 officially supports it.

Indeed Microsoft now even recommends NCM rather than RNDIS.

See https://learn.microsoft.com/en-us/windows-hardware/drivers/usbcon/supported-usb-classes

Mac supports NCM, but not RNDIS (though RNDIS is available via HoRNDIS non-official driver).

Linux supports both RNDIS and NCM, and in general doesn't like RNDIS.

Google Pixel 6+ switched to providing USB tethering via NCM (and away from RNDIS) nearly 3 years ago (ie. basically when this question was originally asked), but other Android phone vendors have likely been slower to switch.