远程 NDIS 的概念和定义

本部分概述了用于在主机和远程 NDIS 设备之间进行通信的信道和较低层驱动程序上的远程 NDIS 要求。 本部分还介绍了设备状态转换以及初始化、停止和重置等主要操作。

  • 控制通道

    控制通道必须可靠,并确保按顺序传递。 它用于除网络数据包的传输之外的所有通信。 除 REMOTE_NDIS_HALT_MSGREMOTE_NDIS_INDICATE_STATUS_MSG外,所有必需的控制消息都是主机启动的请求和响应交换。 设备必须在针对每个总线指定的超时期限内响应。

  • 数据通道

    数据通道专用于网络数据包的传输。 它可能包含多个子通道, (例如,针对为相应总线定义的不同服务质量) 。

  • 初始化和拆解

    控件和数据通道将按为相应总线指定的方式进行初始化和设置。 主机向远程 NDIS 设备发送 REMOTE_NDIS_INITIALIZE_MSG 消息。 远程 NDIS 设备在 响应消息REMOTE_NDIS_INITIALIZE_CMPLT中提供有关其类型 (无连接或面向连接的) 、支持的介质和版本的信息。

    主机或远程 NDIS 设备可以通过 REMOTE_NDIS_HALT_MSG 消息断开信道。 收到此消息后,将丢弃所有未完成的请求和数据包。

  • 设备状态定义

    在总线级初始化之后,设备据说处于 RNDIS 未初始化状态。 收到REMOTE_NDIS_INITIALIZE_MSG并使用状态为 RNDIS_STATUS_SUCCESS 的REMOTE_NDIS_INITIALIZE_CMPLT进行响应时,设备将进入 RNDIS 初始化状态。

    收到REMOTE_NDIS_SET_MSG指定OID_GEN_CURRENT_PACKET_FILTER非零筛选器值后,设备将进入 RNDIS 数据初始化状态。

    处于 RNDIS-data-initialized 状态时,接收REMOTE_NDIS_SET_MSG为 OID_GEN_CURRENT_PACKET_FILTER指定零筛选器值会强制设备返回到 RNDIS 初始化状态。

    随时接收REMOTE_NDIS_HALT_MSG或总线级断开连接或硬重置会强制设备进入 RNDIS 未初始化状态。

  • Halt

    每当设备处于 RNDIS 初始化或 RNDIS 数据初始化状态时,主机可以通过向设备发送REMOTE_NDIS_HALT_MSG来终止设备的远程 NDIS 功能。

  • 重置信道

    发生错误(如消息超时)时,将重置信道。 当设备处于 RNDIS 初始化状态时,主机可以随时通过向设备发送 REMOTE_NDIS_RESET_MSG 消息来启动重置,并且设备必须在完成重置后发送响应消息。 例如,当发生错误(如消息超时)时,主机可能会启动重置。

    请注意,这是软重置,因为任何处理 (例如,面向连接的设备的 VC 在重置后) 继续有效。 在重置过程中,远程 NDIS 设备会丢弃所有未完成的请求和数据包。 远程设备可能会重置其某些硬件组件,但保持信道不变。

    如果远程 NDIS 设备执行重新启动,则此事件等效于“删除”后跟“添加”即插即用事件。 主机 NDIS 微型端口驱动程序将停止和删除,并添加新实例并启动。 将重新执行所有总线级和远程 NDIS 初始化。 远程 NDIS 设备可能会在发生严重设备故障时自行重启。

  • 流控制

    远程 NDIS 设备可能需要执行流控制,以防止主机使用数据包溢出其数据缓冲区。 任何流控制预配或要求都是特定于总线的。

  • 数字字节排序

    远程 NDIS 消息中的所有数值都必须以 little-endian 格式编码 (最低有效字节第一) 。

  • NDIS 消息封装

    对于在本机总线消息或基元中封装 NDIS 消息的方式,没有远程 NDIS 规范。