使用 IPsec 卸载版本 2 发送网络数据

[IPsec 任务卸载功能已弃用,不应使用。]

TCP/IP 传输为具有 OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID 的一个或多个 SA 提供 IPsec 卸载版本 2 (IPsecOV2 ) 信息。 在微型端口驱动程序返回OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA的成功结果之前,微型端口驱动程序会初始化卸载句柄。 TCP/IP 传输请求微型端口驱动程序卸载 NET_BUFFER_LIST 结构的处理,方法是在 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFONDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO 结构中指定 IPsecOV2 信息,这些信息是 NET_BUFFER_LIST 带外 (OOB) 信息的一部分。

TCP/IP 传输在 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFOOffloadHandle 成员中提供卸载句柄,该句柄指定发送数据包的传输 (端到端连接) 部分的出站安全关联 (SA) 的句柄。

TCP/IP 传输在 NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO 结构中提供以下标头信息:

  • AH 标头和/或 ESP 标头的标头偏移量。

  • 下一个协议值 (与 ESP 预告片) 中包含的协议值相同。

  • 用于 LSO) 和 IPsec 卸载的组合大型发送卸载 (板长度。

此外,如果发送数据包将通过隧道传输,则 TCP/IP 传输将提供 NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO 结构。 此结构为发送数据包的隧道部分指定出站 SA 的卸载句柄。 有关访问 OOB 信息的详细信息,请参阅 在 IPsec 卸载版本 2 中访问NET_BUFFER_LIST信息

微型端口驱动程序提供了卸载句柄,以响应 OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA的 OID 集请求。 有关 SA 的详细信息,请参阅 在 IPsec 卸载版本 2 中管理安全关联

当微型端口驱动程序处理 MiniportSendNetBufferLists 函数中的发送请求时,微型端口驱动程序:

  • 验证硬件是否已配置为处理 IPsec 卸载服务。 如果未将硬件配置为处理 IPsec 卸载服务,微型端口驱动程序应处理发送请求,而无需提供卸载服务。

  • 验证 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFONDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO 结构中的句柄,以确定是否需要 IPsec 加密处理。 卸载句柄值为零表示不应为 NET_BUFFER_LIST执行 IPsec 任务卸载。 如果微型端口驱动程序找不到与指定的卸载句柄对应的卸载 SA,则发送数据包应失败并 显示NDIS_STATUS_FAILURE 值。

  • 验证 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 结构中的句柄,以确定是否应对 NET_BUFFER_LIST执行分段卸载。

  • 完成 NET_BUFFER_LIST中所有发送数据包所需的 AH 和 ESP 处理。 当 NIC 对发送数据包执行 IPsec 处理时,它会对数据包数据执行加密操作。 TCP/IP 传输已对数据包进行帧,根据需要) (填充数据包,并为其分配了序列号和安全参数索引, (SPI) 。 对于 LSO 和 IPsec 的组合卸载, NET_BUFFER 可能具有在 NIC 对大数据包进行分段时将被丢弃的填充。 填充量在NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO结构的 PadLength 成员中指定。 分段的数据包可能需要填充才能支持 IPsec 操作。

当协议驱动程序传输同时请求 LSO 和 IPsecOV2 的数据包时,它不会对 ESP 预告片进行帧。 这是因为 ESP 预告片中的信息(如填充长度)对于 NIC 生成的最后一段将不准确。