rndis_host of Linux
Linux rndis_host ≠ Microsoft RNDIS
The implementation of RNDIS as host in the Linux kernel (x86_64 GNU/Linux 4.0.7-2-ARCH) is'nt correct too!
- The declared interrupt endpoint in the CDC-control part is not used as notification-EP for EP0-control commands. (see "RNDIS Message Ready")
- Linux only accepts USB RNDIS devices with:
function class / subclass / protocol value INTERFACE_CLASS_WIRELESS 0xE0 INTERFACE_SUBCLASS_RF_CONTROL 0x01 INTERFACE_PROTOCOL_RF_RNDIS 0x02
in the interface-association- and in the first interface-descriptor (from usb.org defined class codes).
The from Microsoft mentioned declaration (Microsoft RNDIS declaration) with:
function class / subclass / protocol value INTERFACE_CLASS_CDC_CONTROL 0x02 INTERFACE_SUBCLASS_CDC_ACM 0x02 INTERFACE_PROTOCOL_VENDOR_SPECIFIC 0xff
will not be accepted / supported.
And also the other RNDIS declarations (from usb.org defined misc class codes):
function class / subclass / protocol value INTERFACE_CLASS_MISC 0xEF INTERFACE_SUBCLASS_MISC_RNDIS 0x04 INTERFACE_PROTCODE_RNDIS_... 0x01 ... 0x07
are not supported. - Linux asks after the initializiation of RNDIS via MSG_Query for the optional "OID_GEN_PHYSICAL_MEDIUM", without checking first with the "OID_GEN_SUPPORTED_LIST" whether this is supported (Microsoft Remote NDIS OIDs).
And here a correct RNDIS start-up USB-trace part (big screen-shot).