设置 NET_BUFFER_LIST 信息

标头数据拆分提供程序必须在标头数据的 NblFlags 成员中设置标头数据拆分标志 NET_BUFFER_LIST接收指示 。 对于拆分帧,NIC 还必须在每个拆分结构的 DataPhysicalAddress 成员中提供所 接收 帧的数据NET_BUFFER地址。

注意 微型端口驱动程序可以设置 NET_BUFFER 结构的 DataPhysicalAddress 成员,即使NET_BUFFER与拆分帧相关联。 在这种情况下, DataPhysicalAddress 包含标头 MDL 的物理地址。

标头数据拆分提供程序将 NblFlags 成员中的标志与按位 OR 操作合并。

标头数据拆分提供程序可以设置以下标志,即使它不会拆分帧:

NDIS_NBL_FLAGS_IS_IPV4
所有帧都是 IPv4 NET_BUFFER_LIST IPv4 帧。 如果设置了此标志,NDIS_NBL_FLAGS_IS_IPV6设置此标志。

NDIS_NBL_FLAGS_IS_IPV6
所有帧都是 IPv6 NET_BUFFER_LIST IPv6 帧。 如果设置了此标志,NDIS_NBL_FLAGS_IS_IPV4设置此标志。

NDIS_NBL_FLAGS_IS_TCP
这些帧的所有帧NET_BUFFER_LIST TCP 帧。 如果设置了此标志,NDIS_NBL_FLAGS_IS_UDP设置此标志。 并且必须NDIS_NBL_FLAGS_IS_IPV4或NDIS_NBL_FLAGS_IS_IPV6设置。

NDIS_NBL_FLAGS_IS_UDP
所有帧都是 UDP NET_BUFFER_LIST UDP 帧。 如果设置了此标志,NDIS_NBL_FLAGS_IS_TCP设置此标志。 并且必须NDIS_NBL_FLAGS_IS_IPV4或NDIS_NBL_FLAGS_IS_IPV6设置。

任何 NDIS 驱动程序都可以设置上述标志用于调试、测试或其他目的。 如果驱动程序设置这些标志,则值必须准确描述接收的帧的内容。 建议设置这些标志。

标头数据拆分提供程序可以设置以下标头数据拆分标志:

NDIS_NBL_FLAGS_HD_SPLIT
标头和数据拆分为与架构结构关联的所有以太网 NET_BUFFER_LIST 帧。

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
结构的所有帧NET_BUFFER_LIST在上层协议标头的 开头进行拆分。 如果设置了此标志,则必须NDIS_NBL_FLAGS_IS_IPV4或NDIS_NBL_FLAGS_IS_IPV6标志。 此外,NDIS_NBL_FLAGS_IS_TCP或NDIS_NBL_FLAGS_IS_UDP设置。 并且NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD设置。

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD
在 TCP 有效负载的NET_BUFFER_LIST UDP 有效负载的开头拆分一个结构的所有 。 如果设置了此标志,则必须NDIS_NBL_FLAGS_IS_IPV4或NDIS_NBL_FLAGS_IS_IPV6标志。 必须NDIS_NBL_FLAGS_IS_TCP NDIS_NBL_FLAGS_IS_UDP或设置。 此外,NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER设置。

如果标头数据拆分提供程序未拆分帧,则必须在 NblFlags 中清除以下标志来指示帧:

  • NDIS_NBL_FLAGS_HD_SPLIT

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD