Handling Outstanding Send Data During a Terminate Offload Operation

[The TCP chimney offload feature is deprecated and should not be used.]

When the offload of a TCP connection is terminated, outstanding send data might exist on the connection. This data can include:

  • Data that the offload target has sent but that has not yet been acknowledged by the remote host

  • Data that the offload target has not yet sent

The offload target can handle such data in either of the following ways or in a combination of these two ways:

  • The offload target can complete outstanding send requests by calling the NdisTcpOffloadSendComplete function before terminating the offload of the connection.

  • The offload target can pass outstanding send data to the host in the call to the NdisMTerminateOffloadComplete function.

When passing outstanding send data to the host, the offload target does the following:

  • Chains together NET_BUFFER_LIST structures that the host stack passed to the offload target's MiniportTcpOffloadSend function. These NET_BUFFER_LIST structures must be chained together in the same order that they were in when passed to the offload target.

  • Specifies a pointer in the NetBufferListChain member of the NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure that the offload target passes in the call to the NdisMTerminateOffloadComplete function. The value of NetBufferListChain points to the first NET_BUFFER_LIST structure in the linked list.

  • Specifies pointers in the SendDataHead and SendDataTail members of the TCP_OFFLOAD_STATE_DELEGATED structure that the offload target passes in the call to the NdisMTerminateOffloadComplete function.