Network Data Structures

Network data consists of packets of data that are sent or received over the network. NDIS provides data structures to describe and organize such data. The primary network data structures for NDIS 6.0 and later are:

The following figure illustrates the relationships between these structures.

Diagram illustrating NDIS 6.0 network data structures, including NET_BUFFER, NET_BUFFER_LIST, and NET_BUFFER_LIST_CONTEXT.

In NDIS 6.0 and later, the NET_BUFFER is the basic building block for packaging network data. Each NET_BUFFER structure has an MDL chain. The MDLs map the addresses of data buffers to the data space that the NET_BUFFER structures specify. This data mapping is identical to the MDL chains that NDIS 5.x and earlier drivers use in the NDIS_PACKET structure. NDIS provides functions to manipulate the MDL chain.

Multiple NET_BUFFER structures can be attached to a NET_BUFFER_LIST structure. The NET_BUFFER structures are organized as a NULL-terminated singly linked list. Only the driver that originates a NET_BUFFER_LIST structure, or NDIS, should modify the linked list directly to insert and delete NET_BUFFER structures.

NET_BUFFER LIST structures contain information that describes all the NET_BUFFER structures that are attached to a list. If a driver requires additional space for context information, the driver can store such information in the NET_BUFFER_LIST_CONTEXT structures. NDIS provides functions to allocate, free and access the data in the NET_BUFFER_LIST_CONTEXT structures.

Multiple NET_BUFFER_LIST structures can be attached to form a list of NET_BUFFER_LIST structures. The NET_BUFFER_LIST structures are organized as a NULL-terminated singly linked list. Drivers can modify the linked list directly to insert and delete NET_BUFFER_LIST structures.

NET_BUFFER

NET_BUFFER Structure

NET_BUFFER LIST

NET_BUFFER_LIST Structure

NET_BUFFER_LIST_CONTEXT

NET_BUFFER_LIST_CONTEXT Structure