Indicating RSS Receive Data

A miniport driver indicates received data by calling the NdisMIndicateReceiveNetBufferLists function from its MiniportInterruptDPC function.

After the NIC computes the RSS hash value successfully, the driver should store the hash type, hashing function, and hash value in the NET_BUFFER_LIST structure with the following macros:

NET_BUFFER_LIST_SET_HASH_TYPE

NET_BUFFER_LIST_SET_HASH_FUNCTION

NET_BUFFER_LIST_SET_HASH_VALUE

The hash type identifies the area of the received packet that the hash should be calculated over. For more information about the hash type, see RSS Hashing Types. The hashing function identifies the function that is used to calculate the hash value. For more information about hashing functions, see RSS Hashing Functions. The protocol driver selects the hash type and function at initialization. For more information, see RSS Configuration.

If the NIC fails to identify the area of the packet that the hash type specifies, then it should not do any hash computation or scaling. In this case, the miniport driver or NIC should assign the received data to the default CPU.

If the NIC runs out of receive buffers, each buffer must be returned as soon as the original receive DPC returns. The miniport driver can indicate the received data with a status of NDIS_STATUS_RESOURCES. In this case, the overlying driver has to go through a slow path of copying the buffer descriptors and relinquishing ownership of the original one immediately.

For more information about receiving network data, see Receiving Network Data.