PFQ is a functional networking framework designed for the Linux operating system that allows efficient packets capture/transmission (10g and beyond), in-kernel functional processing and packets steering across sockets/end-points.
PFQ is highly optimized for multi-core architecture, as well as for network devices equipped with multiple hardware queues. It works with any network device driver and provides a script designed to obtain accelerated versions starting from source codes.
The framework enables the development of high-performance networking applications with different programming languages: C, C++ and Haskell. In addition, a pure functional language designed for early stages in-kernel processing is included: PFQ/lang.
PFQ/lang is inspired by Haskell and allows the creation of small applications that run on top of network device drivers. Through PFQ/lang it is possible to build efficient bridges, port mirrors, simple firewalls, network balancers and so forth.
The package provides the source code of the PFQ kernel module, user-space libraries for C, C++11-14 and Haskell language, an implementation of PFQ/lang as eDSL for C++11-14 and Haskell, and a set of diagnostic tools.
PFQ performance is highly dependent on the hardware in use.
Running on top of a Xeon processor equipped and the Intel 82599 10G controller, PFQ can process and steer to user-space and transmit the line speed (~14,8 Million packets per second) deploying 2 or 3 kernel threads.
The following link shows the configuration file and the performance measured running PFQ on top of Intel 82599 10/20G NICs.
The current stable release is the master branch (v4.3).
The package provides the source code of the PFQ kernel module, user-space libraries for the C, C++11 and Haskell language, utilities, scripts a set of diagnostic tools.
Gcc/g++ 4.7 (or higher), GHC 7.8, alex, happy, CMake and make tool are required for the compilation.
New to PFQ programming? The wiki pages can get you started quickly.
Interested in daily-based tweets about pfq and pfq-lang facts, updates and tricks? Follow me on Twitter.
The PFQ kernel module and user-space libraries are distributed under the GPL license.
Nicola Bonelli firstname.lastname@example.org