NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 结构 (ndis/nblchecksum.h)

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 结构指定用于将校验和任务从 TCP/IP 传输卸载到 NIC 的信息。 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO结构是与NET_BUFFER_LIST结构关联的带外数据) (NET_BUFFER_LIST信息的一部分。

语法

typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
  union {
    struct {
      ULONG IsIPv4 : 1;
      ULONG IsIPv6 : 1;
      ULONG TcpChecksum : 1;
      ULONG UdpChecksum : 1;
      ULONG IpHeaderChecksum : 1;
      ULONG Reserved : 11;
      ULONG TcpHeaderOffset : 10;
    } Transmit;
    struct {
      ULONG TcpChecksumFailed : 1;
      ULONG UdpChecksumFailed : 1;
      ULONG IpChecksumFailed : 1;
      ULONG TcpChecksumSucceeded : 1;
      ULONG UdpChecksumSucceeded : 1;
      ULONG IpChecksumSucceeded : 1;
      ULONG Loopback : 1;
      ULONG TcpChecksumValueInvalid : 1;
      ULONG IpChecksumValueInvalid : 1;
    } Receive;
    PVOID Value;
  };
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;

成员

Transmit

包含以下成员的 结构:

Transmit.IsIPv4

由 TCP/IP 传输设置,以指示发送数据包包含 IPv4 地址。

Transmit.IsIPv6

由 TCP/IP 传输设置,以指示发送数据包包含 IPv6 地址。

Transmit.TcpChecksum

由 TCP/IP 传输设置,以指示 NIC 应计算数据包的 TCP 校验和。

Transmit.UdpChecksum

由 TCP/IP 传输设置,指示 NIC 应计算数据包的 UDP 校验和。

Transmit.IpHeaderChecksum

由 TCP/IP 传输设置,指示 NIC 应计算数据包中第一个 IP 标头的 IP 校验和。 如果数据包同时包含隧道 IP 标头和传输 IP 标头,则 NIC 应计算这两个 IP 标头的校验和。

Transmit.Reserved

为 NDIS 保留。

Transmit.TcpHeaderOffset

TCP 标头从 TCP 数据包的数据包开头开始的偏移量(以字节为单位)。 微型端口驱动程序可以使用 TcpHeaderOffset 来确定 TCP 标头的位置,这样它们就不需要分析 MAC 和 IP 标头。

Receive

包含以下成员的 结构:

Receive.TcpChecksumFailed

由微型端口驱动程序设置,以指示 NIC 计算的 TCP 校验和与接收数据包的 TCP 标头中的校验和不匹配。

Receive.UdpChecksumFailed

由微型端口驱动程序设置,以指示 NIC 计算的 UDP 校验和与接收数据包的 UDP 标头中的校验和不匹配。

Receive.IpChecksumFailed

由微型端口驱动程序设置,以指示 NIC 计算的 IP 校验和与接收数据包的第一个 IP 标头中的校验和不匹配。 如果接收数据包同时包含隧道 IP 标头和传输 IP 标头,则 NIC 会验证这两个 IP 标头的校验和。

注意 对于同时具有隧道 (外部) IPv4 标头和传输 (内部) IPv4 标头的封装数据包,如果任一 IP 标头校验和验证失败,微型端口驱动程序应设置此标志。
 

Receive.TcpChecksumSucceeded

由微型端口驱动程序设置,以指示 NIC 计算的 TCP 校验和与接收数据包的 TCP 标头中的校验和匹配。

Receive.UdpChecksumSucceeded

由微型端口驱动程序设置,以指示 NIC 计算的 UDP 校验和与接收数据包的 UDP 标头中的校验和匹配。

Receive.IpChecksumSucceeded

由微型端口驱动程序设置,以指示 NIC 计算的 IP 校验和与接收数据包的第一个 IP 标头中的校验和匹配。 如果接收数据包同时包含隧道 IP 标头和传输 IP 标头,则 NIC 会验证这两个 IP 标头的校验和。

注意 对于同时具有隧道 (外部) IPv4 标头和传输 (内部) IPv4 标头的封装数据包,仅当两个 IP 标头校验和验证都成功时,微型端口驱动程序才应设置此标志。
 

Receive.Loopback

NDIS 使用此位。 微型端口驱动程序不得检查或设置此位;微型端口驱动程序应只忽略此位。

Receive.TcpChecksumValueInvalid

支持 接收段合并的微型端口驱动程序 (RSC) 设置此标志以指示 TCP 标头校验和已由 NIC 验证,但数据包中的 TCP 标头校验和值无效。 有关详细信息,请参阅 指示合并段

不支持 RSC 的微型端口驱动程序应将此标志设置为零。

注意Windows 8、Windows Server 2012 及更高版本中的 NDIS 6.30 及更高版本的微型端口驱动程序支持此标志。
 

Receive.IpChecksumValueInvalid

支持 RSC 的微型端口驱动程序设置此标志以指示对于 IPv4 数据包,IP 标头校验和已由 NIC 验证,但数据包中的 IP 标头校验和值无效。 对于同时包含隧道和传输 IP 标头的数据包,此位仅适用于隧道 IP 标头。 有关详细信息,请参阅 指示合并段

不支持 RSC 的微型端口驱动程序应将此标志设置为零。

注意Windows 8、Windows Server 2012 及更高版本中的 NDIS 6.30 及更高版本的微型端口驱动程序支持此标志。
 

Value

校验和信息的 PVOID 版本。 微型端口驱动程序可以使用此成员来访问原始信息,而不是特定字段。

注解

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 结构指定用于将校验和任务从 TCP/IP 传输卸载到 NIC 的信息。 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO结构是与NET_BUFFER_LIST结构关联的带外数据) (NET_BUFFER_LIST信息的一部分。

在 TCP/IP 传输将 TCP/IP 数据包传递到微型端口驱动程序将对其执行校验和任务的 TCP/IP 数据包之前,TCP/IP 传输会更新与 NET_BUFFER_LIST 结构关联的 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 结构。 具体而言,TCP/IP 传输设置 IsIPv4IsIPv6 标志,以指示发送数据包是 IPv4 或 IPv6 数据包。

yy 如果 TCP/IP 传输未设置 IsIPv4IsIPv6 标志,则微型端口驱动程序不应对数据包执行校验和任务。 如果 TCP/IP 传输设置 IsIPv4IsIPv6 标志,则它还设置所需的相应标志,以指示微型端口驱动程序应为数据包计算哪些校验和。 对于 IPv4,这包括 IpHeaderChecksumTcpChecksumUdpChecksum 标志。 对于 IPv6,这包括 TcpChecksumUdpChecksum 标志。 此外,对于 TCP 数据包,TCP/IP 传输在设置 IsIPv4IPv6 标志时设置 TcpHeaderOffset 字段。 传输不会为 UDP 数据包设置此字段。

在指示接收执行校验和任务的 TCP/IP 数据包之前,微型端口驱动程序在NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO结构中设置相应的 XxxChecksumFailed 或 XxxChecksumSucceeded 标志。

注意 在微型端口收到 OID_OFFLOAD_ENCAPSULATION之前,将禁用校验和卸载。 收到此 OID 后,允许微型端口开始验证某些已接收数据包的校验和。 不需要微型端口来验证每个数据包的校验和;如果 XxxChecksumFailed 和 XxxChecksumSucceeded 标志都清除,则 OS 将回退到在软件中验证校验和。 此行为独立于 WHCP 驱动程序认证要求,要求微型端口验证所有数据包的校验和,因为系统上的其他协议驱动程序可能没有回退机制。
 
若要获取NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO结构,驱动程序应使用 tcpIpChecksumNetBufferListInfo_Id调用 NET_BUFFER_LIST_INFO 宏。

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
标头 ndis/nblchecksum.h (包括 ndis.h)

另请参阅

指示合并段

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO