Sending and receiving data in CoNDIS

Transferring data involves sending or receiving packets over an established and activated VC.

Note  Protocol drivers must not call NdisCoSendNetBufferLists to send data to a VC after calling NdisClCloseCall for that VC.

The CoNDIS send and receive functions are similar to connectionless send and receive functions. The primary difference between the CoNDIS and connectionless interfaces is the management of virtual connections (VCs). For more information about connectionless send and receive operations, see Send and Receive Operations.

In a single function call, CoNDIS drivers can send multiple NET_BUFFER_LIST structures with multiple NET_BUFFER structures on each NET_BUFFER_LIST structure. Also, CoNDIS drivers can indicate completed send operations for multiple NET_BUFFER_LIST structures with multiple NET_BUFFER structures on each NET_BUFFER_LIST structure.

In the receive path, CoNDIS miniport drivers can provide a list of NET_BUFFER_LIST structures to indicate receives. Each NET_BUFFER_LIST that a miniport driver provides contains one NET_BUFFER structure. Because a different protocol binding can process each NET_BUFFER_LIST structure, NDIS can independently return each NET_BUFFER_LIST structure to the miniport driver.

To support NDIS 5.x and earlier drivers, CoNDIS provides a translation layer between legacy NDIS_PACKET structures and the NET_BUFFER-based structures. CoNDIS performs the necessary conversion between NET_BUFFER structures and NDIS_PACKET structures. To avoid degrading performance because of the translation, CoNDIS drivers must be updated to support NET_BUFFER structures and should support multiple NET_BUFFER_LIST structures in all data paths.

This section includes the following topics:

Sending NET_BUFFER Structures from CoNDIS Drivers

Receiving NET_BUFFER Structures in CoNDIS Drivers