urndis of Open/Free BSD
Open/Free BSD urndis ≠ Microsoft RNDIS
BSD schreibt:The urndis driver provides Ethernet access over Remote NDIS (RNDIS), allowing mobile devices such as phones and tablets to provide network access. It is often referred to as USB tethering, and in most cases must be explicitly enabled on the device.
urndis should work with any USB RNDIS devices, such as those commonly found on Android devices. It does not support different media types or options. For more information on configuring this device, see ifconfig(8).
Aber nach einigen Tests... Open/Free BSD urndis ist NICHT identisch mit Microsoft RNDIS !
command | from Microsoft RNDIS spec. (param/description) | Open/Free BSD |
REMOTE_NDIS_INITIALIZE_MSG | This message MUST be sent by the host to initialize the device. | But this is not send by Open/Free BSD ! |
REMOTE_NDIS_QUERY_MSG | RequestID (4 bytes): A 32-bit integer value, generated by the host, used to match the host's sent request to the response from the device. | But this is alltimes 0 by Open/Free BSD (ok - it's not mandatory...) |
InformationBufferLength (4 bytes): The length, in bytes, of the input data required for the OID query. This MUST be set to 0 when there is no input data associated with the OID. | But this is never set to more than 0 by Open/Free BSD if data are requested or not ! | |
REMOTE_NDIS_..._CMPL response | any not malformed response is to accept and to analyse | on any unexpected ..._CMPL response (like error-status instead of data) the Open/Free BSD does not close the class-specific EP0 control-transfer with the status stage ! |
- Ein Blick in den Source-Code von Open/Free BSD zeigt, das REMOTE_NDIS_INITIALIZE_MSG sollte gesendet werden aber in meinen Tests wurde dies nichts und in OID-queries werden InformationBufferLenght & InformationBufferOffset wirklich auf 0 gesetzt (for OID_802_3_PERMANTENT_ADDRESS in minimum).
- LINUX unterstützt RNDIS als 'rndis_host' auch und es sieht aus (source-code) es ist mindestens näher an der Microsoft RNDIS Spezifikation. Es sendet laut source-code zuerst das REMOTE_NDIS_INITIALIZE_MSG und es setzt in OID-queries die InformationBufferLenght & InformationBufferOffset.
- Der von Joshua Wise entwickelte 'HoRNDIS' Treiber für MAC-OS sieht auch mindestens näher an der Microsoft RNDIS Spezifikation aus. Er sendet laut source-code zuerst das REMOTE_NDIS_INITIALIZE_MSG und er setzt in OID-queries die InformationBufferLenght & InformationBufferOffset.
Ich hoffe demnächst auch Linux und MAC-OS einem echten Test unterziehen zu können.
Und hier ein korrektes RNDIS start-up USB-Trace part (big screen-shot).