从 CoNDIS WAN 微型端口驱动程序发送数据包
上层驱动程序调用 NdisCoSendNetBufferLists,将网络数据包发送到NET_BUFFER_LIST结构列表中的基础 CoNDIS WAN 微型端口驱动程序。 NDISWAN 中间驱动程序从上层驱动程序转发这些NET_BUFFER_LIST结构。 NDISWAN 在发送结构之前重新打包结构。 NDISWAN 在新的NET_BUFFER_LIST结构中转发数据包。
NDISWAN 中间驱动程序调用 NDIS 来转发新的NET_BUFFER_LIST结构,NDIS 调用 WAN 微型端口驱动程序的 MiniportCoSendNetBufferLists 函数。
CoNDIS WAN 微型端口驱动程序拥有NET_BUFFER_LIST结构和关联数据,直到发送完成。 微型端口驱动程序稍后必须调用 NdisMSendNetBufferListsComplete 来完成发送请求。
完成调用不一定指示网络数据已传输;但是,除了智能 NIC 之外,网络数据通常已传输。 但是,完成调用指示微型端口驱动程序已准备好释放NET_BUFFER_LIST结构的所有权。
CoNDIS WAN 微型端口驱动程序收到包含网络数据包的NET_BUFFER_LIST结构后,它应在活动虚拟连接(VC)上发送数据包。
CoNDIS WAN 微型端口驱动程序指定它在 NDIS_WAN_CO_INFO 结构的 MaxSendWindow 成员中每个 VC 可以具有的未完成数据包数。 微型端口驱动程序在微型端口驱动程序响应 来自协议驱动程序的 OID_WAN_CO_GET_INFO请求时提供此结构。 但是,微型端口驱动程序可以使用 WAN_CO_LINKPARAMS 结构中的 SendWindow 成员动态和按 VC 动态调整此数字。 微型端口驱动程序将此结构传递给 NdisMCoIndicateStatusEx 函数。 NDISWAN 使用当前 SendWindow 值作为未完成发送的限制。 微型端口驱动程序可以将 SendWindow 成员的值设置为零,以指定它无法处理任何未完成的数据包。 也就是说,如果 SendWindow 成员设置为零,则关闭发送窗口,NDISWAN 停止为特定 VC 发送数据包。
如果设置了 PPP 帧,WAN 微型端口驱动程序发送的数据包包含简单的 HDLC PPP 帧。 对于 SLIP 或 RAS 框架,数据包仅包含数据部分,没有任何框架。 有关 WAN 数据包帧的详细信息,请参阅 WAN 数据包帧。
WAN 微型端口驱动程序不得尝试提供软件环回或混杂模式环回。 NDISWAN 驱动程序完全支持这两种环回类型。