An interface driver is a small computer program, or a set of programs, that acts as a liaison between computer software and the hardware of a network interface card (NIC). NIC makers and programmers use a specific application programming interface (API) known as the network driver interface specification (NDIS). It sets forth all the rules necessary for a computer program, such as an operating system, to interact with an NIC. There are actually several types of interface drivers described under the NDIS but, in essence, NDIS's primary job is to get a couple of the open systems interconnection (OSI) model's layers to cooperate with one another.
The OSI model is made up of seven layers, some of which have multiple sub-layers. The first layer is the physical layer, which deals with the physical specifications for an NIC such as a universal serial bus (USB) dongle, an Ethernet card, a wireless adapter card, and so on. The second and third layers of the OSI model are where all the NDIS magic happens. The second layer is the data link layer and consists of two sub-layers, the upper referred to as the logical link control (LLC) and the lower named the media access control (MAC). A device driver handles the MAC sub-layer, while the interface driver handles the LLC sub-layer, providing an interface between it and the third layer of the OSI model, the network layer.
Working as an intermediary, an NDIS essentially wraps up all the confusing intricacy of a NIC's hardware and provides a set of functions for its interaction with the network protocols necessary for communication. A programmer simply has to follow the rules set forth in the NDIS to create the actual interface drivers. At the lower hardware level, these drivers are known as miniport drivers, while the upper level drivers are written using the NDIS API to handle core network protocols such as the Internet protocol (IP), Internet protocol security (IPsec), Internet control message protocol (ICMP), and Internetwork packet exchange (IPX), among others.
When network communication occurs via an NIC, the data bits are first received by the physical device and then, through the OSI model's architecture, the data are moved from the hardware up the different layers of the OSI model until they are presented in a format more easily comprehensible by the user. Thus, each layer of the model provides services for its neighbors. The data leave the first layer, the physical layer, and hits the MAC of the lower sub-layer in the second layer, where the device driver passes it along to the LLC. The LLC's protocol drivers then move it up to the network layer.
Another type of interface driver is the intermediate driver, which acts as something of a housing, containing interfaces for both miniport drivers and network protocol drivers. These intermediate drivers can then be chained together and provide the ability for the interface driver to control the traffic being received by the NIC. Intermediate drivers are useful for various needs, such as data filtering, load balancing, monitoring network traffic, and collecting statistical information. They also work well as a translator between older transport drivers and a miniport driver that talks to a media format the older driver cannot understand.
The NDIS was originally devised by Microsoft®, working in conjunction with 3Com®, so many hardware makers write their drivers to support Microsoft® operating systems first. As a result, the NDIS is limited to computer hardware architectures based on the Intel® 80386 family of either 32-bit or 64-bit processors. The free software movement has also developed a program, called NDISWrapper, that is capable of loading interface drivers originally developed for Microsoft® Windows® for use with with free, Unix®-like operating systems such as Linux®. Users of the Berkley Software Distributions (BSD) free derivatives, such as FreeBSD® and NetBSD®, also found the ability to use Windows® interface drivers through the use of software developed by a project known as Project Evil. The x86 hardware limitations of NDIS led to another project, developed by Apple and Novell®, called the open data-link interface (ODI), which provided much of the same rules and functionality as an NDIS but with a focus on Apple® Macintosh&; and Novell NetWare® systems.