It is designed to work well on typical configurations. It is an alternative to sockets and is used in most commercial UNIX versions. Each module does some processing on a data flow as it goes from the device to the user or vice-versa. It is handled with the usual open , read , write , ioctl and close system calls. Data written by the user is packaged into messages, which are sent downstream.
Data read by the user comes from messages sent upstream by an underlying device driver.
Yet another system call, poll , provides an alternate interface for select . The head fills the gap between user system calls and the message flow. A packet-sniffer module could thus be used as a diagnostic or debugging tool. Hence, they could be developed independently by different people who don't know the actual protocol stack where they will be used, provided the interfaces between the various modules and drivers are well-defined. The ip module in Figure 2 is a multiplexor.