访问 TCP/IP 卸载 NET_BUFFER_LIST 信息

NDIS 6.0 及更高版本在 NET_BUFFER_LIST 结构的 NetBufferListInfo 成员中提供 TCP/IP 卸载带外 (OOB ) 数据,该成员指定 NET_BUFFER 结构的链接列表。 NetBufferListInfo 成员是一个值数组,其中包含列表中所有NET_BUFFER结构共有的信息。

将以下标识符与 NET_BUFFER_LIST_INFO 宏配合使用,在 NetBufferListInfo 数组中设置和获取 TCP/IP 卸载 OOB 数据:

TcpIpChecksumNetBufferListInfo
指定用于将校验和任务从 TCP/IP 协议卸载到微型端口驱动程序的校验和信息。 指定 TcpIpChecksumNetBufferListInfo 时,NET_BUFFER_LIST_INFO返回 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 结构 (而不是指向结构) 的指针。 此结构包含一个联合,使校验和信息可以作为单个 PVOID 值或位字段进行访问。

IPsecOffloadV1NetBufferListInfo
指定 Internet 协议安全性 (IPsec) 将 IPsec 任务从 TCP/IP 协议卸载到微型端口驱动程序时使用的信息。 指定 IPsecOffloadV1NetBufferListInfo 时,NET_BUFFER_LIST_INFO返回 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构。

TcpLargeSendNetBufferListInfo
指定用于将大型 TCP 数据包分段从 TCP/IP 协议卸载到微型端口驱动程序的信息。 指定 TcpLargeSendNetBufferListInfo 时,NET_BUFFER_LIST_INFO返回 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 结构 (而不是指向结构) 的指针。 此结构包含一个联合,使信息能够以单个 PVOID 值或位字段的形式进行访问。

Ieee8021QNetBufferListInfo
指定有关数据包的 802.1Q 信息。 指定 Ieee8021QNetBufferListInfo 时,NET_BUFFER_LIST_INFO返回NDIS_NET_BUFFER_LIST_8021Q_INFO结构的 Value 成员。 此结构可以指定 802.1p 优先级和虚拟 LAN (VLAN) 标识符信息。 802.1p 优先级信息用于在共享媒体 802 网络中建立数据包优先级。

如果微型端口驱动程序报告支持NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB封装,则必须将 Ieee8021QNetBufferListInfo 数据插入到大型发送卸载版本 1 (LSOV1) 和大型发送卸载版本 2 (LSOV2) 以太网数据包。

TcpOffloadBytesTransferred
指定在 TCP 烟囱卸载发送、接收或断开连接操作中传输的数据字节数。

TcpReceiveNoPush
指定一个布尔值,该值表示 TCP 烟囱卸载接收请求的推送模式。 如果 为 TRUE,则接收请求处于非推送模式。 否则,接收请求处于推送模式。

对于 LSOV1、LSOV2、校验和和 IPsec 卸载类型,微型端口驱动程序根据 OOB 数据类型及其报告的卸载功能执行任务卸载。 例如,如果协议驱动程序需要 IPv4 数据包的 LSOV1 服务,则协议驱动程序提供的每个发送请求都包含NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO OOB 数据中 LsoV1Transmit 成员的信息。 请注意,在发出发送请求之前,协议驱动程序必须验证微型端口驱动程序是否支持具有指定的封装类型的 IPv4。

NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO结构包含 MSS) (最大段大小。 TcpHeaderOffset 成员指定 TCP 标头的位置,以便微型端口驱动程序不必分析 IP 标头、IP 选项或 IP 扩展标头。

支持 LSOV2 和 LSOV1 的 NDIS 6.0 及更高版本的微型端口驱动程序必须检查 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO的 Type 成员,以确定驱动程序堆栈使用的是 LSOV2 还是 LSOV1,并且必须执行相应的卸载。

对于 LSOv1,在微型端口驱动程序使用 LSO 完成已分段成较小数据包的大型 TCP 数据包的发送之前,驱动程序会写入它在 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 的 TcpPayload 成员的分段数据包中发送的 TCP 有效负载字节数。

如果微型端口驱动程序在其功能中指定NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q标志,则驱动程序可以为缓冲区数据中包含 VLAN 标头 的NET_BUFFER_LIST 结构执行任务卸载服务。 对于接收的数据,此标志指示微型端口驱动程序将执行接收校验和计算,并将 VLAN 标头放入以太网数据包中。

如果微型端口驱动程序在其功能中指定NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB标志,则驱动程序可以在 Ieee8021QnetBufferListInfo OOB 数据中包含 VLAN 标头的NET_BUFFER_LIST结构上执行卸载。 在接收校验和卸载的情况下,微型端口将 VLAN 标头插入 Ieee8021QnetBufferListInfo OOB 数据。