NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构 (ndischimney.h)
[TCP 烟囱卸载功能已弃用,不应使用。]
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构是 TCP 烟囱卸载状态树的基本构建基块。 卸载状态树可以包含一个或多个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
语法
typedef struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST {
IN NDIS_OBJECT_HEADER Header;
IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
#endif
OUT NDIS_STATUS Status;
IN PVOID NdisReserved[2];
IN OUT PVOID *MiniportOffloadContext;
IN NDIS_HANDLE NdisOffloadHandle;
IN PVOID ProtocolReserved[2];
IN PVOID MiniportReserved[2];
IN PVOID ImReserved[2];
IN PVOID Scratch[2];
IN PVOID SourceHandle;
IN NDIS_PORT_NUMBER PortNumber;
IN OUT PNET_BUFFER_LIST NetBufferListChain;
} NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, *PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
成员
Header
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构的标头。 标头的格式设置为 NDIS_OBJECT_HEADER 结构。 NDIS_OBJECT_HEADER 结构包含NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的修订号、紧跟在内存中NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的卸载状态的类型,以及NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构(包括 标头)的大小(以字节为单位)。
NDIS_OBJECT_HEADER结构的 Type 成员指示卸载状态的类型,并暗示,特定的卸载状态结构 (或紧跟在内存中NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构) 的结构。
支持以下OFFLOAD_STATE_TYPE值:
NeighborOffloadConstState
指定常量邻居状态。 此状态的格式设置为 NEIGHBOR_OFFLOAD_STATE_CONST 结构。
NeighborOffloadCachedState
指定缓存的邻居状态。 此状态的格式设置为 NEIGHBOR_OFFLOAD_STATE_CACHED 结构。
NeighborOffloadDelegatedState
指定委托的邻居状态。 此状态的格式设置为 NEIGHBOR_OFFLOAD_STATE_DELEGATED 结构。
NeighborOffloadState
指定所有邻居状态信息,包括常量、缓存和委托的邻居状态。 此状态的格式设置为NEIGHBOR_OFFLOAD_STATE_CONST结构,后跟NEIGHBOR_OFFLOAD_STATE_CACHED结构,后跟NEIGHBOR_OFFLOAD_STATE_DELEGATED结构。
Ip4OffloadConstState
指定 IPv4) (常量路径状态。 此状态的格式设置为 PATH_OFFLOAD_STATE_CONST 结构。
Ip4OffloadCachedState
指定 IPv4) (缓存路径状态。 此状态的格式设置为 PATH_OFFLOAD_STATE_CACHED 结构。
Ip4OffloadDelegatedState
指定 IPv4) (委托的路径状态。 此状态的格式设置为 PATH_OFFLOAD_STATE_DELEGATED 结构。 当前没有委托的路径状态。 PATH_OFFLOAD_STATE_DELEGATED 结构不包含任何变量。
Ip4OffloadState
指定 IPv4) (所有路径状态,包括常量、缓存和委托的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CONST结构,后跟PATH_OFFLOAD_STATE_CACHED结构,后跟PATH_OFFLOAD_STATE_DELEGATED结构。
Ip6OffloadConstState
指定 IPv6) (常量路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CONST结构。
Ip6OffloadCachedState
指定 IPv6) (缓存的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CACHED结构。
Ip6OffloadDelegatedState
指定 IPv6) (委托的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_DELEGATED结构。 目前没有委托的路径状态。 PATH_OFFLOAD_STATE_DELEGATED 结构不包含任何变量。
Ip6OffloadState
指定 IPv6) (所有路径状态信息,包括常量、缓存和委托的路径状态。 此状态的格式设置为PATH_OFFLOAD_STATE_CONST结构,后跟PATH_OFFLOAD_STATE_CACHED结构,后跟PATH_OFFLOAD_STATE_DELEGATED结构。
TcpOffloadConstState
指定常量 TCP 状态。 此状态的格式设置为 TCP_OFFLOAD_STATE_CONST 结构。
TcpOffloadCachedState
指定缓存的 TCP 状态。 此状态的格式设置为 TCP_OFFLOAD_STATE_CACHED 结构。
TcpOffloadDelegatedState
指定委托的 TCP 状态。 此状态的格式设置为 TCP_OFFLOAD_STATE_DELEGATED 结构。
TcpOffloadResourceState
保留。 当前未使用此OFFLOAD_STATE_TYPE值以及TCP_OFFLOAD_RESOURCE_STATE结构。
TcpOffloadState
指定所有 TCP 状态信息,包括常量、缓存和委托的 TCP 状态。 此状态的格式设置为TCP_OFFLOAD_STATE_CONST结构,后跟TCP_OFFLOAD_STATE_CACHED结构,后跟TCP_OFFLOAD_STATE_DELEGATED结构。
FilterReservedOffloadState
为筛选器驱动程序保留。
NextBlock
指向卸载状态层的下一个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的指针, (标头成员的 Type 成员指示的邻居、路径或 TCP) 。 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST通过 NextBlock 指针链接的结构始终处于卸载状态的同一层。 如果 NextBlock 值为 NULL,则表示此级别没有其他下一个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
_NDIS_MINIPORT_OFFLOAD_BLOCK_LIST
DependentBlockList
指向NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的指针,该结构位于卸载状态的依赖层 (卸载状态树中较高层) 。 对于 TCP 烟囱卸载:
- 相邻层NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员只能指向路径层上的NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
- 路径层NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员只能指向 TCP 层上的NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构。
- TCP 层NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 DependentBlockList 成员始终为 NULL。
Status
卸载目标对与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行的启动卸载、查询卸载、更新卸载、使卸载失效或终止卸载操作的完成状态。 根据操作,卸载目标会将以下NDIS_STATUS值之一写入 Status 成员:
NDIS_STATUS_SUCCESS
启动卸载:卸载目标已成功卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态以及与所有直接依赖NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。
查询、更新、失效或终止卸载:卸载目标已成功对与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行操作。
NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS
启动卸载:卸载目标已成功卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,但未能卸载与一个或多个直接依赖NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_FAILURE
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。 无法对失败原因进行分类。
查询、更新、失效或终止卸载:卸载目标无法对与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联或引用的状态执行操作。
NDIS_STATUS_RESOURCES
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的主机内存。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_ENTRIES
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配 TCP 连接状态对象。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_PATH_ENTRIES
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配路径状态对象。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配相邻状态对象。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES
启动卸载:卸载目标无法卸载与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联的状态,因为主机堆栈在 中指定了非 NULLDlSourceAddress 成员 NEIGHBOR_OFFLOAD_STATE_CONST 结构,卸载目标要么不支持可配置的源 MAC 地址,要么不能接受其他源 MAC 地址。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES
启动卸载:卸载目标无法卸载与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联的状态,因为卸载目标无法为 中的 SourceAddress 指针引用的源 IP 地址分配数据结构 PATH_OFFLOAD_STATE_CONST 结构。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的 TCP 传输缓冲区。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER
启动卸载:卸载目标无法卸载与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态,因为卸载目标无法分配足够的 TCP 接收缓冲区。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW
启动卸载:卸载目标无法卸载与 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构关联的状态,因为在 中指定的 InitialRcvWnd 成员 TCP_OFFLOAD_STATE_CACHED 结构大于卸载目标可以支持的结构。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_VLAN_ENTRIES
启动卸载:卸载目标已用完用于跟踪其他 VLAN ID 的资源。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_VLAN_MISMATCH
启动卸载:邻居 VlanId 不为零,与其中一个接口 VLAN ID 不匹配。
查询、更新、失效或终止卸载:不是允许的状态值。
NDIS_STATUS_OFFLOAD_PATH_MTU
TCP 连接的路径 MTU 大于卸载目标支持的路径。
查询、更新、失效或终止卸载:不是允许的状态值。
NdisReserved[2]
保留供 NDIS 使用。
MiniportOffloadContext
指向卸载目标在其中写入 PVOID 值的内存位置的指针。 PVOID 值引用卸载上下文区域,卸载目标在其中存储与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的状态。 如果状态是卸载目标要卸载的新状态, 则 MiniportOffloadContext 指向的内存位置包含 NULL 值。 卸载状态后,卸载目标会将 PVOID 值写入此内存位置。 卸载目标提供的 PVOID 值引用卸载状态所在的卸载上下文区域。 如果 MiniportOffloadContext 成员本身为 NULL,则NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构是卸载状态树中的占位符。
NdisOffloadHandle
卸载目标在后续调用中提供的句柄 NdisTcpOffloadEventHandler 函数或指示与此NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的卸载状态时,NdisTcpOffloadReceiveHandler 函数。
ProtocolReserved[2]
保留供协议驱动程序使用,这些驱动程序可以将此区域用于自己的目的。 卸载目标不得修改此值。
MiniportReserved[2]
保留供卸载目标使用,这些目标可以将此区域用于自己的目的,例如排队与NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构关联的卸载状态。
ImReserved[2]
保留供中间驱动程序使用,中间驱动程序可以将此区域用于自己的目的。 卸载目标不得修改此值。
Scratch[2]
卸载目标可以使用此区域进行内部跟踪。 仅当卸载目标拥有NDIS_MINIPORT_OFFLOAD_BLOCK_LIST的所有权时,此区域中的信息才有效。
SourceHandle
此成员对于卸载目标并不重要。 卸载目标不得修改此成员。
PortNumber
标识微型端口适配器端口的端口号。 若要分配微型端口适配器端口号,请调用 NdisMAllocatePort 函数。 零值标识微型端口适配器的默认端口。 如果微型端口驱动程序尚未为指定的适配器分配端口,请使用默认端口。
NetBufferListChain
当主机堆栈指定 NULL 值时, NetBufferListChain 并不重要,可以由卸载目标忽略。
当主机堆栈指定非 NULL 值时, NetBufferListChain 指向 NET_BUFFER_LIST 结构,该结构可以是独立结构,也可以是此类结构链接列表中的第一个结构。 链接列表中的每个NET_BUFFER_LIST结构都描述了一个 NET_BUFFER 结构。 NET_BUFFER结构映射到内存描述符链 (MDL) 。 NET_BUFFER_LIST和关联的结构被锁定,以便它们保留在物理内存中。 但是,它们不会映射到系统内存中。
与NET_BUFFER结构关联的 MDL 包含主机堆栈作为卸载操作的一部分传递给卸载目标的数据。 卸载目标通过调用相应的 NdisTcpOffloadXxxComplete 函数以异步方式将此类数据完成回主机堆栈。 目前,链接列表只能包含一种类型的数据:未完成的发送数据。 有关详细信息,请参阅 在卸载操作期间和之后处理未完成的发送数据。
卸载目标可以在终止 TCP 连接的卸载时将未完成的发送数据传递到主机堆栈。 在这种情况下,卸载目标在调用 时为 NetBufferListChain 成员指定非 NULL 值 NdisMTerminateOffloadComplete 函数。 如果卸载目标未为正在终止的 TCP 连接传递发送数据,则必须为 NetBufferListChain 成员指定 NULL 值。
注解
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构可以链接在一起,以构建 TCP 烟囱 卸载状态树的框架。
通过 NDIS,主机堆栈传递 OffloadBlockList 指针,该指针将卸载状态树引用到卸载目标的以下函数之一:
- NdisMInitiateOffloadComplete
- NdisMQueryOffloadStateComplete
- NdisMInvalidateOffloadComplete
- NdisMTerminateOffloadComplete
主机堆栈和卸载目标使用 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 结构的 *MiniportOffloadContext 和 NdisOffloadHandle 成员来引用卸载状态。 有关详细信息,请参阅 存储和引用卸载状态。
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构可以在卸载状态树中执行多个函数之一。 它可以充当占位符、链接器,也可以传达要由卸载目标卸载的新状态。 有关详细信息,请参阅 占位符、链接器和新的卸载。
在完成启动卸载、查询卸载、更新卸载、使卸载失效或终止卸载操作之前,卸载目标必须将完成状态写入状态树中每个NDIS_MINIPORT_OFFLOAD_BLOCK_LIST结构的 Status 成员。
要求
要求 | 值 |
---|---|
Header | ndischimney.h (包括 Ndischimney.h) |