RNDIS
The Remote Network Driver Interface Specification (RNDIS) is a Microsoft proprietary protocol used mostly on top of USB.[1] It provides a virtual Ethernet link to most versions of the Windows, Linux, and FreeBSD operating systems. Multiple revisions of a partial RNDIS specification are available from Microsoft, but Windows implementations have been observed to issue requests not included in that specification, and to have undocumented constraints.[2]
The protocol is tightly coupled to Microsoft's programming interfaces and models, most notably the Network Driver Interface Specification (NDIS), which are alien to operating systems other than Windows. This complicates implementing RNDIS on non-Microsoft operating systems,[citation needed] but Linux,[3] FreeBSD,[4] NetBSD[5] and OpenBSD[6] implement RNDIS natively.
The USB Implementers Forum (USB-IF) defines at least three non-proprietary USB communications device class (USB CDC) protocols with comparable "virtual Ethernet" functionality; one of them (CDC-ECM) predates RNDIS and is widely used for interoperability with non-Microsoft operating systems, but does not work with Windows.
Most versions of Android include RNDIS USB functionality. For example, Samsung smartphones have the capability and use RNDIS over USB to operate as a virtual Ethernet card that will connect the host PC to the mobile or Wi-Fi network in use by the phone, effectively working as a mobile broadband modem or a wireless card, for mobile hotspot tethering.[7]
Controversy
In 2022 it was suggested that support for RNDIS should be removed from Linux, claiming that is inherently and uncorrectably insecure in the presence of untrusted USB devices.[8]
See also
- Ethernet over USB
- Qualcomm MSM Interface - A Qualcomm proprietary alternative
References
- ↑ "MS-RNDIS Remote Network Driver Interface Specification (RNDIS) Protocol, revision 5.0". Microsoft Corporation.. May 1, 2014. https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/WinArchive/%5BMS-RNDIS%5D.pdf. Retrieved March 11, 2022.
- ↑ See, for example, comments in the host-side Linux implementation, https://github.com/torvalds/linux/blob/master/drivers/net/usb/rndis_host.c
- ↑ "kernel/git/torvalds/linux.git - Linux kernel source tree". https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=64e049102d3de3e61409cb6019403a9e689dfda6.
- ↑ "[base Revision 261541"]. https://svnweb.freebsd.org/base?view=revision&revision=261541.
- ↑ "'CVS commit: src/sys/dev/usb' - MARC". https://marc.info/?l=netbsd-source-changes&m=131119199610743.
- ↑ "'CVS: cvs.openbsd.org: src' - MARC". https://marc.info/?l=openbsd-cvs&m=126748674430960.
- ↑ "Galaxy S9 Tactical Edition support RNDIS protocol". https://static.carahsoft.com/concrete/files/3915/2702/3007/Tactical_Edition_-_Brochure.pdf.
- ↑ "USB: disable all RNDIS protocol drivers". https://lore.kernel.org/lkml/20221123124620.1387499-1-gregkh@linuxfoundation.org/.
External links
Original source: https://en.wikipedia.org/wiki/RNDIS.
Read more |