// ndischimney.h
typedef struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST {
IN NDIS_OBJECT_HEADER Header;
IN _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
IN _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
#endif
OUT NDIS_STATUS Status;
IN PVOID NdisReserved[3];
IN OUT PNDIS_OFFLOAD_HANDLE OffloadHandle;
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_PROTOCOL_OFFLOAD_BLOCK_LIST, *PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
View the official Windows Driver Kit DDI reference
No description available.
[The TCP chimney offload feature is deprecated and should not be used.]
The NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure.
Header
The header of the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure. The header is formatted as an NDIS_OBJECT_HEADER structure. The NDIS_OBJECT_HEADER structure contains the revision number of the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure, the type of offload state that immediately follows the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure in memory, and the size of the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure, including the header, in bytes.
The Type member of the NDIS_OBJECT_HEADER structure indicates the type of offload state, and by implication, the specific offload state structure (or structures) that immediately follow the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure in memory.
The following OFFLOAD_STATE_TYPE values are supported:
Specifies the constant neighbor state. This state is formatted as a NEIGHBOR_OFFLOAD_STATE_CONST structure.
Specifies the cached neighbor state. This state is formatted as a NEIGHBOR_OFFLOAD_STATE_CACHED structure.
Specifies the delegated neighbor state. This state is formatted as a NEIGHBOR_OFFLOAD_STATE_DELEGATED structure.
Specifies all of the neighbor state, including the constant, cached, and delegated neighbor state. This state is formatted as a NEIGHBOR_OFFLOAD_STATE_CONST structure, followed by a NEIGHBOR_OFFLOAD_STATE_CACHED structure, followed by a NEIGHBOR_OFFLOAD_STATE_DELEGATED structure.
Specifies the constant path state (IPv4). This state is formatted as a PATH_OFFLOAD_STATE_CONST structure.
Specifies the cached path state (IPv4). This state is formatted as a PATH_OFFLOAD_STATE_CACHED structure.
Specifies the delegated path state (IPv4). This state is formatted as a PATH_OFFLOAD_STATE_DELEGATED structure. Currently there is no delegated path state. The PATH_OFFLOAD_STATE_DELEGATED structure does not contain any variables.
Specifies all of the path state (IPv4), including the constant, cached, and delegated path state. This state is formatted as a PATH_OFFLOAD_STATE_CONST structure, followed by a PATH_OFFLOAD_STATE_CACHED structure, followed by a PATH_OFFLOAD_STATE_DELEGATED structure.
Specifies the constant path state (IPv6). This state is formatted as a PATH_OFFLOAD_STATE_CONST structure.
Specifies the cached path state (IPv6). This state is formatted as a PATH_OFFLOAD_STATE_CACHED structure.
Specifies the delegated path state (IPv6). This state is formatted as a PATH_OFFLOAD_STATE_DELEGATED structure. Currently, there is no delegated path state. The PATH_OFFLOAD_STATE_DELEGATED structure does not contain any variables.
Specifies all of the path state (IPv6), including the constant, cached, and delegated path state. This state is formatted as a PATH_OFFLOAD_STATE_CONST structure, followed by a PATH_OFFLOAD_STATE_CACHED structure, followed by a PATH_OFFLOAD_STATE_DELEGATED structure.
Specifies the constant TCP state. This state is formatted as a TCP_OFFLOAD_STATE_CONST structure.
Specifies the cached TCP state. This state is formatted as a TCP_OFFLOAD_STATE_CACHED structure.
Specifies the delegated TCP state. This state is formatted as a TCP_OFFLOAD_STATE_DELEGATED structure.
Reserved. This OFFLOAD_STATE_TYPE value, as well as the TCP_OFFLOAD_RESOURCE_STATE structure, are currently not used.
Specifies all of the TCP state, including the constant, cached, and delegated TCP state. This state is formatted as a TCP_OFFLOAD_STATE_CONST structure, followed by a TCP_OFFLOAD_STATE_CACHED structure, followed by a TCP_OFFLOAD_STATE_DELEGATED structure.
Reserved for filter drivers.
NextBlock
A pointer to the next NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at the offload state layer (neighbor, path, or TCP) indicated by the Type member of the Header member. NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structures that are linked through NextBlock pointers are always at the same layer of the offload state. A NextBlock value of NULL indicates that there is no additional next NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at this level.
DependentBlockList
A pointer to an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure that is at a dependent layer of the offload state (a higher layer in the offload state tree).
The DependentBlockList member of an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at the neighbor layer can point only to an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at the path layer. The DependentBlockList member of an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at the path layer can point only to an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at the TCP layer. The DependentBlockList member of an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure at the TCP layer is always NULL.
A DependentBlockList value of NULL indicates that there is no dependent NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure.
_NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST
Status
The completion status of an initiate offload, query offload, update offload, invalidate offload, or terminate offload operation that the offload target performed on the state associated with, or referenced by, the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure. Depending on the operation, NDIS writes one of the following NDIS_STATUS values to the Status member:
Initiate offload: The underlying offload target successfully offloaded the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure and the state associated with all of the immediately dependent PROTOCOL_MINIPORT_OFFLOAD_BLOCK_LIST structures.
Query, update, invalidate, or terminate offload: The offload target successfully performed the operation on the state associated with, or referenced by, the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure.
Initiate offload: The underlying offload target successfully offloaded the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure, but failed to offload the state associated with one or more of the immediately dependent NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structures.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The underlying offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure. The cause of the failure cannot be categorized.
Query, update, invalidate, or terminate offload: The offload target failed to perform the operation on the state associated with, or referenced by, the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate sufficient host memory.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate a TCP connection state object.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate a path state object.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate a neighbor state object.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the host stack specified a non-NULLDlSourceAddress member in the NEIGHBOR_OFFLOAD_STATE_CONST structure, and the offload target either does not support configurable source MAC addresses or cannot accept additional source MAC addresses.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate a data structure for the source IP address that is referenced by the SourceAddress pointer in the PATH_OFFLOAD_STATE_CONST structure.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate enough TCP transmit buffers.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the offload target could not allocate enough TCP receive buffers.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target failed to offload the state associated with the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure because the InitialRcvWnd member specified in the TCP_OFFLOAD_STATE_CACHED structure is larger than the offload target can support.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The offload target has run out of resources for tracking additional VLAN IDs.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The neighbor VlanId is nonzero and does not match one of the interface VLAN IDs.
Query, update, invalidate, or terminate offload: Not an allowed status value.
Initiate offload: The path MTU for the TCP connection is larger than the offload target supports.
Query, update, invalidate, or terminate offload: Not an allowed status value.
NdisReserved
Reserved for use by NDIS.
OffloadHandle
A pointer to an NDIS_OFFLOAD_HANDLE structure. The NDIS_OFFLOAD_HANDLE structure represents a protocol or intermediate driver's context for an offloaded state object.
ProtocolReserved
Reserved for use by protocol drivers, which can use this area for their own purposes.
MiniportReserved
Reserved for use by offload targets or the miniport portion of an intermediate driver.
ImReserved
Reserved for use by intermediate drivers, which can use this area for their own purposes.
Scratch
The protocol driver or intermediate driver can use this area for internal tracking. The information in this area is valid only while the driver has ownership of the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIS T.
SourceHandle
This member is not significant for a protocol or intermediate driver. A protocol or intermediate driver must not modify this member.
When propagating the completion of a state-manipulation operation, an intermediate driver copies the SourceHandle that it stored in its IM call entry to the SourceHandle member of the NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure that it passes to the NdisMXxxComplete function.
PortNumber
A port number that identifies a miniport adapter port. To assign a miniport adapter port number, call the NdisMAllocatePort function. A zero value identifies the default port of a miniport adapter. Use the default port if the miniport driver has not allocated ports for the specified adapter.
NetBufferListChain
When the protocol or intermediate driver specifies a NULL value, NetBufferListChain is not significant and can be ignored by the underlying driver or offload target.
When a protocol or intermediate driver specifies a non-NULL value, NetBufferListChain points to a NET_BUFFER_LIST structure that can be a stand-alone structure or the first structure in a linked list of such structures. Each NET_BUFFER_LIST structure in the linked list describes one NET_BUFFER structure. The NET_BUFFER structure maps to a chain of memory descriptor lists (MDLs). The NET_BUFFER_LIST and associated structures are locked so that they remain resident in physical memory. However, they are not mapped into system memory.
The MDLs associated with the NET_BUFFER structures contain data that is being conveyed as part of a state-manipulation operation or the completion of such an operation. At present, the linked list can contain just one type of data: outstanding send data. For more information about send data, see Handling Outstanding Send Data During and After an Offload Operation.
An offload target or intermediate driver can pass outstanding send data to the overlying driver or host stack when terminating the offload of a TCP connection. In this case, the offload target specifies a non-NULL value for the NetBufferListChain member when calling the NdisMTerminateOffloadComplete function. If the offload target is not passing send data for a TCP connection that is being terminated, it specifies a NULL value for the NetBufferListChain member.
An intermediate driver creates an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure from an NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure when propagating a state-manipulation operation. When propagating the completion of such an operation, an intermediate driver uses an NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure to construct an NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure.
An NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure can be immediately followed in memory by an offload state structure that contains the state to be (or that has been) offloaded, queried, updated, invalidated, or terminated. The Type member of the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure's Header specifies the type of offload state, and by implication, the specific offload state structure (or structures) that follow the NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST structure in memory.
NEIGHBOR_OFFLOAD_STATE_DELEGATED
ProtocolInitiateOffloadComplete
ProtocolInvalidateOffloadComplete
ProtocolTerminateOffloadComplete