Skip to content

>AUUG–The Organisation for Unix, Linux and Open Source Professionals

A User Level Networking Infrastructure for Linux

by Andrew McRae


Currently, most network packet processing occurs within the confines of the kernel in the Linux system.  This reflects the historic nature of a Linux/Unix kernel in that its primary role was as a network host or end-point e.g a web server, or desktop.  However, considerable effort is being expended to provide a greater level of packet processing on Linux systems, as more features are required such as tunnelling, encryption, quality of service etc.  Another factor is the growing use of Linux as a gateway or router.  Both these factors rely on a implementing the bulk of the ever-more complex packet processing inside the kernel itself, mainly for performance reasons, though with the attendant issues of robustness, ease of programming, scalability etc.

This paper presents an alternative approach to implementing network services within the kernel itself, and describes a networking infrastructure that attempts to address the major issues with supporting a sophisticated and extensive packet processing environment on Linux without sacrificing performance or robustness.  This infrastructure (termed NetIO) is implemented as a kernel module in Linux, but is designed to interact closely with user level processes in implementing the network services, bypassing the major issues of kernel limitations such as scalability, robustness, configuration and ease of programming, yet without suffering the performance limitations caused by kernel/user process interactions.

Andrew McRae
NetDevices Inc.

Download the paper: A User Level Networking Infrastructure for Linux (180K PDF)