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