(ndis.h) NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构

NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO结构指定用于将 Internet 协议安全性 (IPsec) 任务从 TCP/IP 传输卸载到微型端口驱动程序的信息。

语法

typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO {
  union {
    struct {
      NDIS_HANDLE OffloadHandle;
    } Transmit;
    struct {
      USHORT SaDeleteReq : 1;
      USHORT CryptoDone : 1;
      USHORT NextCryptoDone : 1;
      USHORT Pad : 13;
      USHORT CryptoStatus;
    } Receive;
  };
} NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;

成员

Transmit

包含以下成员的 结构:

Transmit.OffloadHandle

出站安全关联的句柄 (只有一个 IPsec 有效负载的数据包的 SA) ,无论该有效负载是用于传输 (端到端) 连接还是隧道连接。

Receive

包含以下成员的 结构:

Receive.SaDeleteReq

USHORT 值,在设置时,指示 TCP/IP 传输应发出 OID_TCP_TASK_IPSEC_DELETE_SA OID 一次删除数据包接收的入站 SA,并再次删除与已删除的入站 SA 相对应的出站 SA。 网络接口卡 (NIC) 在收到相应的OID_TCP_TASK_IPSEC_DELETE_SA请求之前不得删除其中任一 SA。

Receive.CryptoDone

一个 USHORT 值,该值在设置时指示 NIC 对接收数据包中的至少一个 IPsec 有效负载执行 IPsec 检查。 清除此值时,表示 NIC 未对数据包执行 IPsec 检查。

Receive.NextCryptoDone

一个 USHORT 值,该值在设置时指示 NIC 对接收数据包的隧道和传输部分执行 IPsec 检查。 在这种情况下,还必须设置 CryptoDone。 仅当数据包同时具有隧道和传输 IPsec 有效负载时,才会设置 NextCryptoDone;否则,NextCryptoDone 设置为零。

Receive.Pad

为 NDIS 保留。

Receive.CryptoStatus

IPsec 检查 NIC 对接收数据包执行的结果。 此结果可描述为以下值之一:

含义
CRYPTO_SUCCESS
如有必要,已成功解密数据包,身份验证标头 (AH) 校验和、封装安全有效负载 (ESP) 校验和,或者验证了数据包中的两个校验和。
CRYPTO_GENERIC_ERROR
数据包因未指定的原因使 IPsec 检查失败。
CRYPTO_TRANSPORT_AH_AUTH_FAILED
数据包传输部分的 AH 校验和无效。
CRYPTO_TRANSPORT_ESP_AUTH_FAILED
数据包传输部分的 ESP 校验和无效。
CRYPTO_TUNNEL_AH_AUTH_FAILED
数据包的隧道部分的 AH 校验和无效。
CRYPTO_TUNNEL_ESP_AUTH_FAILED
数据包的隧道部分的 ESP 校验和无效。
CRYPTO_INVALID_PACKET_SYNTAX
接收数据包的长度无效。
CRYPTO_INVALID_PROTOCOL
在 SA 中指定的、用于接收数据包的 IPsec 协议与数据包中找到的 IPsec 协议不匹配。 例如,如果收到数据包的 SA 指定 AH 协议,但数据包仅包含 ESP 标头,则会发生此错误。

注解

在 TCP/IP 传输将 NIC 将对其执行 IPsec 任务的发送数据包传递给 NIC 的微型端口驱动程序之前,传输会更新 与 NET_BUFFER_LIST 结构关联的 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构中的 IPsec 信息。

具体而言,TCP/IP 传输为 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构中的 OffloadHandle 成员提供值。 OffloadHandle 值指定只有一个 IPsec 有效负载的数据包的出站安全关联 (SA) 句柄,无论该有效负载是用于传输 (端到端) 安全关联还是隧道安全关联。 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构中提供的 OffloadHandle 值与 TCP/IP 传输在设置 OID_TCP_TASK_IPSEC_ADD_SA 请求微型端口驱动程序将出站 SA 添加到 NIC 时提供的 OffloadHandle 值相同。

在微型端口驱动程序指示具有一个或多个 IPsec 有效负载的接收数据包之前,驱动程序会更新与 NET_BUFFER_LIST 结构关联的 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构,如下所示:

  • 如果 NIC 对数据包中的至少一个 IPsec 有效负载执行 IPsec 检查,微型端口驱动程序将设置 CryptoDone 成员,并通过在 CryptoStatus 成员中指定适当的值来指示校验和验证测试结果。
  • 如果 NIC 对接收数据包的隧道和传输部分执行 IPsec 检查,微型端口驱动程序还会设置 NextCryptoDone 成员。 仅当数据包同时具有隧道和传输 IPsec 有效负载时,才会设置 NextCryptoDone;否则,NextCryptoDone 设置为零。
  • 如果 NIC 未对数据包执行 IPsec 检查,则微型端口驱动程序不会设置 CryptoDoneNextCryptoDone ,并且不会提供 CryptoStatus 值。
若要为 NIC 上的另一个 SA 创建空间,NIC 的微型端口驱动程序可以在接收数据包的 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构中设置 SaDeleteReq。 TCP/IP 传输随后发出 OID_TCP_TASK_IPSEC_DELETE_SA 一次,以删除通过数据包接收的入站 SA,并再次删除与已删除的入站 SA 对应的出站 SA。 在收到相应的OID_TCP_TASK_IPSEC_DELETE_SA请求之前,NIC 不得删除其中任一 SA。 NIC 的微型端口驱动程序可以独立于 CryptoDone 设置 SaDeleteReq

若要设置和获取 IPsec 信息,请将 IPsecOffloadV1NetBufferListInfo 索引与 NET_BUFFER_LIST_INFO 宏一起使用。 NET_BUFFER_LIST_INFO 返回 NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO 结构。

要求

要求
最低受支持的客户端 在 NDIS 6.0 中受支持。 对于 NDIS 6.1 及更高版本,请使用 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO。
标头 ndis.h (包括 Ndis.h)

另请参阅

NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

OID_TCP_TASK_IPSEC_ADD_SA

OID_TCP_TASK_IPSEC_DELETE_SA