OID_TCP_TASK_OFFLOAD (Compact 2013)

3/26/2014

The TCP/IP transport queries OID_TCP_TASK_OFFLOAD to determine the task-offload capabilities of a miniport driver's network adapter. After determining which task-offload capabilities a network adapter supports, the TCP/IP transport protocol sets this object to enable the reported capabilities. The TCP/IP protocol can also disable all a network adapter's task-offload capabilities by setting this object. Only one protocol at a time can enable the task-offload capabilities of a particular network adapter.

Querying Offload Capabilities

When the TCP/IP transport queries OID_TCP_TASK_OFFLOAD, it supplies in the InformationBuffer an NDIS_TASK_OFFLOAD_HEADER structure. This structure specifies the task-offload version supported by the TCP/IP transport, the encapsulation format for send and receives packets processed by the TCP/IP transport, and the size of the encapsulation header in such packets. With this information, the miniport driver or its network adapter can locate the beginning of the first IP header in a transmit packet, which is a prerequisite for performing an offload task.

In response to a query of OID_TCP_TASK_OFFLOAD, a miniport driver returns, in the InformationBuffer, the NDIS_TASK_OFFLOAD_HEADER structure followed immediately by one or more NDIS_TASK_OFFLOAD structure describes a task-offload capability supported by the miniport driver's network adapter. If the miniport driver's network adapter supports multiple versions of a particular task-offload capability, it should return one NDIS_TASK_OFFLOAD structure for each version.

Each NDIS_TASK_OFFLOAD structure has a Task member that specifies the particular offload task to which the structure applies. Each NDIS_TASK_OFFLOAD structure also has a TaskBuffer that contains information pertinent to the specified offload task. The information in the TaskBuffer is formatted as one of the following structures:

  • NDIS_TASK_TCP_IP_CHECKSUM 
    Specifies checksum offload capabilities

  • NDIS_TASK_IPSEC
    This structure is not supported.

  • NDIS_TASK_TCP_LARGE_SEND 
    Specifies large-TCP-packet segmentation capabilities

    Note

    If an intermediate driver modifies the contents of TCP packets that it forwards down to an underlying miniport driver so that TCP offload functions cannot be performed on the packets, the intermediate driver should respond to OID_TCP_TASK_OFFLOAD queries with a status of NDIS_STATUS_NOT_SUPPORTED instead of passing the request down to the underlying miniport.

Enabling Offload Capabilities

After querying a network adapter's task-offload capabilities, the TCP/IP transport enables one or more of these capabilities by setting OID_TCP_TASK_OFFLOAD. When setting OID_TCP_TASK_OFFLOAD, the TCP/IP transport supplies in the InformationBuffer an NDIS_TASK_OFFLOAD_HEADER structure, followed immediately by an NDIS_TASK_OFFLOAD structure for each task-offload capability that the transport is enabling.

The Task in each NDIS_TASK_OFFLOAD structure indicates the offload task that the TCP/IP transport is enabling. The TCP/IP transport also enables capabilities for a particular offload task by setting members of the structure (NDIS_TASK_TCP_IP_CHECKSUM or NDIS_TASK_TCP_LARGE_SEND) in the TaskBuffer of each NDIS_TASK_OFFLOAD structure.

Changing Offload Capabilities

To change which task-offload capabilities are enabled for a network adapter, the TCP/IP transport sets OID_TCP_TASK_OFFLOAD. The miniport driver must enable only those task-offload capabilities specified by the most recent set of OID_TCP_TASK_OFFLOAD. The miniport driver must disable all other task-offload capabilities.

Disabling Offload Capabilities

To disable all task-offload capabilities supported by a network adapter, the TCP/IP transport sets OID_TCP_TASK_OFFLOAD, passing in the InformationBuffer only an NDIS_TASK_OFFLOAD_HEADER structure with the OffsetFirstTask member of this structure set to 0.

Requirements

Header

ntddndis.h

See Also

Reference

Task Offload OIDs (NDIS 5.1)