urndis of Open/Free BSD
Open/Free BSD urndis ≠ Microsoft RNDIS
BSD writes: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).
But after some tests... Open/Free BSD urndis is not equal to 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 ! |
- A look into the source-code of Open/Free BSD shows, the REMOTE_NDIS_INITIALIZE_MSG should be send but in my tests it would not sent and in OID-queries the InformationBufferLenght & InformationBufferOffset are set to 0 (for OID_802_3_PERMANTENT_ADDRESS in minimum).
- LINUX supports RNDIS as 'rndis_host' too and it looks like (source-code) it is closer to the Microsoft RNDIS specification. It sends according to the source-code at first the REMOTE_NDIS_INITIALIZE_MSG and it sets in OID-queries the InformationBufferLenght & InformationBufferOffset.
- The from Joshua Wise developed 'HoRNDIS' driver for MAC-OS looks like closer to the Microsoft RNDIS specification too. It sends according to the source-code at first the REMOTE_NDIS_INITIALIZE_MSG and it sets in OID-queries the InformationBufferLenght & InformationBufferOffset.
I hope I can make a real test with Linux and MAC-OS soon.
And here a correct RNDIS start-up USB-trace part (big screen-shot).