设置 NET_BUFFER_LIST 信息

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

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

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

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

NDIS_NBL_FLAGS_IS_IPV4
NET_BUFFER_LIST中的所有帧都是 IPv4 帧。 如果设置了此标志,则不得设置NDIS_NBL_FLAGS_IS_IPV6标志。

NDIS_NBL_FLAGS_IS_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
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 有效负载的开头或 UDP 有效负载的开头 拆分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_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