From e8331cd3af2bae70d4c1093ce5ec65a983f1ab7a Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sat, 3 May 2025 11:36:28 +0200 Subject: [PATCH] Add some notes on mechanics and VFIO kernel driver --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7724d5..db94afe 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,9 @@ docker run --cap-add=NET_ADMIN --cap-add=SYS_NICE --cap-add=SYS_PTRACE \ docker network connect network2 clab-pim ``` -Note, DPDK will be disabled by default as it requires hugepages and VFIO and/or UIO to use physical +### A note on DPDK + +DPDK will be disabled by default as it requires hugepages and VFIO and/or UIO to use physical network cards. If DPDK at some future point is desired, mapping VFIO can be done by adding this: ``` --device=/dev/vfio/vfio:/dev/vfio/vfio @@ -50,8 +52,25 @@ my-node: - /dev/vhost-net ``` +If using DPDK in a container, one of the userspace IO kernel drivers must be loaded in the host +kernel. Options are `igb_uio`, `vfio_pci`, or `uio_pci_generic`: + +``` +$ sudo modprobe igb_uio +$ sudo modprobe vfio_pci +$ sudo modprobe uio_pci_generic +``` + +Particularly the VFIO driver needs to be present before one can attempt to bindmount +`/dev/vfio/vfio` into the container! + ## Configuring VPP +When Containerlab starts the docker containers, it'll offer one or more `vethpair` point to point +network links, which will show up as `eth1` and further. `eth0` is the default NIC that belongs to +the management plane in Containerlab (the one which you'll see with `containerlab inspect`). Before +VPP can use these `vethpair` interfaces, it needs to bind them, like so: + ``` docker exec -it clab-pim vppctl ``` @@ -66,3 +85,8 @@ vpp-clab# set interface ip address eth1 172.19.1.2/24 vpp-clab# set interface ip address eth1 fec0::2/64 vpp-clab# set interface state eth1 up ``` + +Containerlab will generate a config file called `/etc/vpp/clab.vpp` which contains all of these +comands. You can add more commands that'll execute on startup by copying in +`/etc/vpp/manual-pre.vpp` (to be executed _before_ the containerlab stuff) or +`/etc/vpp/manual-post.vpp` (to be executed _after_ the containerlab stuff).