Functional Networking Framework for Multi-Core Architectures
C C++ Haskell Other HTML Makefile Other
Latest commit 21ade99 Nov 14, 2016 @awgn awgn committed on GitHub Merge pull request #27 from nizq/master
Make PFQ compile on linux kernel 4.8
Permalink
Failed to load latest commit information.
Development SimpleBuilder updated. Sep 29, 2015
docs
kernel
misc Minor changes, and tests and libraries updated. Oct 1, 2015
user sync package name with cabal filename Oct 21, 2016
.gitignore gitignore added. Sep 20, 2015
AUTHORS Added Luca Abeni as contrubutor Mar 1, 2014
Build.hs
CHANGELOG.md CHANGELOG/README updated. Sep 26, 2015
INSTALL.md INSTALL updated. Dec 28, 2015
LICENSE GPL file lincese added. Jul 24, 2014
README.md
VERSION
cabal.config cabal.config updated: lts-2 for GHC-7.8 and lts-3 for GHC-7.10. Aug 18, 2015
cabal.config-LTS-2-GHC-7.8
cabal.config-LTS-3-GHC-7.10 TLS-3 packages list updated. Dec 28, 2015
pfq-framework.cabal Version number updated. Sep 26, 2015

README.md

PFQ v5.2

Introduction

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 code.

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 applications is included: pfq-lang.

pfq-lang is inspired by Haskell and allows the creation of small applications that run in kernel space, 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 both C++11-14 and Haskell, and a set of diagnostic tools.

Features

  • Full lock-free architecture.
  • Preallocated pools of socket buffers.
  • Compliant with a plethora of network devices drivers.
  • Rx and Tx line-rate on 10G links (14,8 Mpps), on-top-of Intel ixgbe vanilla drivers.
  • Transparent support of kernel threads for asynchronous packets transmission.
  • Asynchronous transmission with active timestamping (which determines when to transmit a packet).
  • Concurrent monitoring of multiple multi-threaded applications by means of groups of sockets.
  • Per-group packet steering through randomized hashing or deterministic classification.
  • Per-group Berkeley and VLAN filters.
  • Functional engine for in-kernel packet processing with pfq-lang.
  • User-space libraries for C, C++11-14 and Haskell languages.
  • pfq-lang eDLS for C++11-14 and Haskell language.
  • Accelerated pcap library (line-speed tested with captop).
  • pfqd daemon used to parallelize multiple instances of pcap legacy applications.
  • pfq-omatic, a script designed to accelerate vanilla drivers.
  • I/O user<->kernel shared-memory on top of HugePages.

Publications

  • "PFQ: a Novel Engine for Multi-Gigabit Packet Capturing With Multi-Core Commodity Hardware": Best-Paper-Award at PAM2012 in Vienna http://tma2012.ftw.at/papers/PAM2012paper12.pdf
  • "A Purely Functional Approach to Packet Processing": ANCS 2014 Conference (October 2014, Marina del Rey)
  • "Network Traffic Processing with PFQ": JSAC-SI-MT/IEEE journal Special Issue on Measuring and Troubleshooting the Internet (April 2016)

Author

Nicola Bonelli nicola@pfq.io

Contributors

Andrea Di Pietro andrea.dipietro@for.unipi.it

Loris Gazzarrini loris.gazzarrini@iet.unipi.it

Gregorio Procissi g.procissi@iet.unipi.it

Luca Abeni abeni@dit.unitn.it

HomePages

PFQ home-page is www.pfq.io. Additional information are available at netgroup/pfq.