Summary

grout stands for Graph Router. It is a DPDK based network processing application. It uses the rte_graph library for data path processing.

grout comes with a message based API to configure it over a standard UNIX socket and a CLI that uses that API. The CLI can be used as an interactive shell, but also in scripts one command at a time, or by batches.

Its main purpose is to simulate a network function or a physical router for testing/replicating real (usually closed source) VNF/CNF behavior with an opensource tool.

Hosting grout under the dpdk.org namespace will help make the whole DPDK project more visible by going up the networking stack. It will also encourage VNF/CNF vendors to contribute beyond PMD bug reporting and some DPDK libraries.

The intent is also to integrate the rte_graph datapath nodes that are part of the grout code base into DPDK lib/node to allow reuse and further optimization.

License

BSD-3-Clause

Features

Supported

  • IPv4 basic forwarding
  • ARP resolution/reply (packets waiting for resolution are buffered)
  • ICMP echo reply
  • Multiple VRF domains
  • VLAN sub interfaces
  • IP in IP tunnels

In Progress

  • IPv6 forwarding
  • NDP resolution/reply

Planned Short Term

  • FRR zebra forwarding plane plugin
  • loopback interfaces
  • packet tracing

Planned Long Term

  • hardware offload using generic DPDK APIs
  • IPsec datapath
  • strongSwan plugin for IKEv2 integration
  • port mirroring for tcpdump native support

Code

Current repository

https://github.com/rjarry/grout

Continuous Integration

  • Code is formatted using clang-format. Coding style is similar to DPDK.
  • Unit tests using cmocka.
  • Basic smoke tests using net_tap ports and Linux network namespaces.

Dependencies

Name Type License Code
DPDK Build & Runtime BSD-3-Clause https://git.dpdk.org/dpdk/
libnuma Build & Runtime LGPL-2.1 https://github.com/numactl/numactl
libevent Build & Runtime BSD-3-Clause https://github.com/libevent/libevent
libstb Build & Runtime Public Domain https://github.com/nothings/stb
libecoli Build & Runtime BSD-3-Clause https://git.sr.ht/~rjarry/libecoli
libsmartcols Build & Runtime LGPL-2.1 https://github.com/util-linux/util-linux/tree/master/libsmartcols
cmocka Build Apache-2.0 https://github.com/clibs/cmocka
meson Build Apache-2.0 https://github.com/mesonbuild/meson
ninja Build Apache-2.0 https://github.com/ninja-build/ninja
libasan Dev MIT+BSD https://github.com/gcc-mirror/gcc/tree/master/libsanitizer
clang-format Dev MIT+BSD https://clang.llvm.org/docs/ClangFormat.html