rndis_host of Linux
Linux rndis_host ≠ Microsoft RNDIS
Auch die im Linux-Kernel (x86_64 GNU/Linux 4.0.7-2-ARCH) enthaltene Implementierung von RNDIS als Host ist nicht sauber!
- Der im CDC Control-Teil deklarierte Interrupt-Endpunkt wird nicht als Notification-EP für die EP0 Steuerkommandos verwendet. (siehe "RNDIS Message Ready")
- Linux akzeptiert ausschließlich USB-RNDIS devices mit:
function class / subclass / protocol value INTERFACE_CLASS_WIRELESS 0xE0 INTERFACE_SUBCLASS_RF_CONTROL 0x01 INTERFACE_PROTOCOL_RF_RNDIS 0x02
im Interface-Association- und im ersten Interface-Descriptor (von usb.org defined class codes).
Die von Microsoft angegebene Deklaration (Microsoft RNDIS declaration) mit:
function class / subclass / protocol value INTERFACE_CLASS_CDC_CONTROL 0x02 INTERFACE_SUBCLASS_CDC_ACM 0x02 INTERFACE_PROTOCOL_VENDOR_SPECIFIC 0xff
wird nicht akzeptiert / unterstützt.
Und auch die weiteren RNDIS Deklarationen (von 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
werden nicht unterstützt. - Linux fragt nach der Initialisierung von RNDIS via MSG_Query das optionale "OID_GEN_PHYSICAL_MEDIUM" ab, ohne vorher mittels "OID_GEN_SUPPORTED_LIST" zu prüfen ob dieses unterstützt wird (Microsoft Remote NDIS OIDs).
Und hier ein korrektes RNDIS start-up USB-Trace part (big screen-shot).