Reporting a NIC's Checksum Capabilities
An NDIS miniport driver reports whether a NIC is currently configured to calculate and validate IP, TCP, and UDP checksums in an NDIS_TCP_IP_CHECKSUM_OFFLOAD structure. Miniport drivers must include the current checksum offload configuration in the NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES structure. Miniport drivers call the NdisMSetMiniportAttributes function from the MiniportInitializeEx function and pass in the information in NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES.
Miniport drivers must report changes in the current checksum offload configuration, if any, in the NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG status indication.
In response to a query of OID_TCP_OFFLOAD_CURRENT_CONFIG, NDIS includes the NDIS_TCP_IP_CHECKSUM_OFFLOAD structure in the NDIS_OFFLOAD structure that NDIS returns in the InformationBuffer member of the NDIS_OID_REQUEST structure. NDIS uses the information that the miniport driver provided.
A miniport driver indicates the following checksum information for IPv4 and IPv6 send and receive packets:
The types of checksums (IP, TCP, or UDP) that a NIC can calculate for send packets and can validate for receive packets.
Encapsulation settings, in the Encapsulation member. For more information about this member, see the Remarks section in NDIS_TCP_IP_CHECKSUM_OFFLOAD.
Whether the NIC can calculate or validate (or calculate and validate) checksums for a packet whose IP headers contain IPv4 options.
Whether the NIC can calculate or validate (or calculate and validate) checksums for an IPv6 packet whose IP headers contain IPv6 extension headers.
Whether the NIC can calculate or validate (or calculate and validate) checksums for a packet whose TCP header contain TCP options.