FastClick

Packet processing,
at line rate.

FastClick extends the Click Modular Router with batching, native multi-queue DPDK I/O and a flow subsystem. Build data planes by wiring small elements together.

Get started Browse 580 elements GitHub ↗

Batching

Elements exchange lists of packets instead of single packets, amortising per-packet costs across the whole graph.

Learn more →

High-speed I/O

Native multi-queue DPDK and Netmap, with RSS and thread vectors. No need to duplicate elements per core.

Learn more →

Flows

MiddleClick adds per-flow state on top of packets for NAT, load balancing, DPI and TCP reordering.

Learn more →

Quick start

Install DPDK and dependencies with ./deps.sh, then build with DPDK support:

./configure CFLAGS="-O3" CXXFLAGS="-std=c++11 -O3" \
  --enable-dpdk --enable-intel-cpu --disable-dynamic-linking \
  --enable-bound-port-transfer --enable-flow \
  --disable-task-stats --disable-cpu-load
make

Then describe a pipeline in the Click language and run it:

FromDPDKDevice(0) -> Counter -> ToDPDKDevice(1);

Next: the tutorial, high-speed I/O setup, Docker, and how FastClick differs from Click.

Citing

If you use FastClick in academic work, please cite our ANCS 2015 paper. Cite RSS++, PacketMill or MiddleClick too when you build on them (details).

@inproceedings{barbette2015fast,
  title     = {Fast userspace packet processing},
  author    = {Barbette, Tom and Soldani, Cyril and Mathy, Laurent},
  booktitle = {ANCS},
  pages     = {5--16},
  year      = {2015},
  doi       = {10.1109/ANCS.2015.7110116}
}

Questions? Use the issue tracker or Discussions.