RNDIS
The Remote Network Driver Interface Specification (RNDIS) is a Microsoft proprietary protocol used mostly on top of USB. It provides a virtual Ethernet link to most versions of the Windows and Linux operating systems. A partial RNDIS specification is available from Microsoft, but Windows implementations have been observed to issue requests not included in that specification, and to have undocumented constraints.[1]
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, but Linux,[2] FreeBSD,[3] NetBSD[4] and OpenBSD[5] implement RNDIS natively.
The USB Implementers Forum (USB-IF) defines at least three non-proprietary USB communications device class (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.
Some versions of Android include RNDIS USB functionality, while more recent versions (such as Nexus 6P in September 2016) do not.
Notes and references
- ↑ See, for example, comments in the host-side Linux implementation
- ↑ https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=64e049102d3de3e61409cb6019403a9e689dfda6
- ↑ https://svnweb.freebsd.org/base?view=revision&revision=261541
- ↑ https://marc.info/?l=netbsd-source-changes&m=131119199610743
- ↑ https://marc.info/?l=openbsd-cvs&m=126748674430960