Overview of Network Direct Kernel Provider Interface (NDKPI)
The Network Direct Kernel Provider Interface (NDKPI) is an extension to NDIS that allows IHVs to provide kernel-mode Remote Direct Memory Access (RDMA) support in a network adapter (also called an RNIC). To expose the adapter's RDMA functionality, the IHV must implement the NDKPI interface as defined in the NDKPI Reference.
A NIC vendor implements RDMA as a combination of software, firmware, and hardware. The hardware and firmware portion is a network adapter that provides NDK/RDMA functionality. This type of adapter is also called an RDMA-enabled NIC (RNIC). The software portion is an NDK-capable miniport driver, which implements the NDKPI interface.
The Windows implementation of RDMA is called Network Direct (ND). The kernel portion is called Network Direct Kernel (NDK).
NDK providers must support Network Direct connectivity via both IPv4 and IPv6 addresses assigned to NDK-capable miniport adapters.
For more information about RDMA, see Background Reading on RDMA.
An NDK provider is a miniport driver that implements the NDKPI interface.
Once the NDK provider is loaded and initialized, it is ready to handle requests from the NDK consumer. These requests arrive as calls to provider functions.
When handling requests from an NDK consumer, the provider can call the consumer's NDK callback functions. These are documented in NDKPI Consumer Callback Functions.
NDK consumers are kernel-mode Windows components, such as SMB server and client.
Note This documentation does not discuss how to implement an NDK consumer. The NDKPI consumer device driver interface (DDI) is a proprietary Windows-internal interface.
An NDK consumer calls the provider's NdkOpenAdapter (OPEN_NDK_ADAPTER_HANDLER) callback function to create an adapter object and NdkCloseAdapter (NDK_FN_CLOSE_OBJECT) to close it. Once the provider has created the adapter object, the consumer calls other provider callback functions to create additional NDK objects.
NDK consumers implement the NDKPI Consumer Callback Functions, which are called by NDK providers.