Update README with current state

This commit is contained in:
Pim van Pelt
2025-05-03 22:24:59 +02:00
parent a52354d5b2
commit 3c64e1392e

View File

@ -1,14 +1,15 @@
# VPP Containerlab Docker image # VPP Containerlab Docker image
This docker container creates a VPP instance based on the latest release. It starts up as per This docker container creates a VPP instance based on the latest VPP release. It starts up as per
normal, using /etc/vpp/startup.conf (which Containerlab will replace), and once started, it'll normal, using /etc/vpp/startup.conf (which Containerlab might replace when it starts its
execute /etc/vpp/bootstrap.vpp within the dataplane. There are three relevant files: containers). Once started, it'll execute /etc/vpp/bootstrap.vpp within the dataplane. There are
three relevant files:
1. `manual-pre.vpp` -- can be supplied by the user, to run any configuration statements before 1. `manual-pre.vpp` -- can be supplied by the user, to run any configuration statements before
containerlab takes control. containerlab takes control.
1. `clab.vpp` -- generated by containerlab. Its purpose is to bind the `vethpair` interfaces 1. `clab.vpp` -- generated by `files/container-init.sh`. Its purpose is to bind the `veth`
into theo dataplane (see below). interfaces that containerlab has added to the container into the VPP dataplane (see below).
1. `manual-post.vpp` -- can be supplied by the user, to run any configuration statements after 1. `manual-post.vpp` -- can be supplied by the user, to run any configuration statements after
containerlab is finished with its per-lab statements. containerlab is finished with its per-lab statements.
@ -19,17 +20,18 @@ execute /etc/vpp/bootstrap.vpp within the dataplane. There are three relevant fi
docker build --no-cache -f Dockerfile.bookworm . -t pimvanpelt/vpp-containerlab docker build --no-cache -f Dockerfile.bookworm . -t pimvanpelt/vpp-containerlab
``` ```
## Starting the container ## Testing the container standalone
```bash ```bash
docker network create --driver=bridge network2 --subnet=172.19.1.0/24 docker network create --driver=bridge clab-network --subnet=192.0.2.0/24 \
--ipv6 --subnet=2001:db8::/64
docker rm clab-pim docker rm clab-pim
docker run --cap-add=NET_ADMIN --cap-add=SYS_NICE --cap-add=SYS_PTRACE \ docker run --cap-add=NET_ADMIN --cap-add=SYS_NICE --cap-add=SYS_PTRACE \
--device=/dev/net/tun:/dev/net/tun \ --device=/dev/net/tun:/dev/net/tun \
--device=/dev/vhost-net:/dev/vhost-net \ --device=/dev/vhost-net:/dev/vhost-net \
--privileged=True --name clab-pim \ --privileged --name clab-pim \
docker.io/pimvanpelt/vpp-containerlab docker.io/pimvanpelt/vpp-containerlab:latest
docker network connect network2 clab-pim docker network connect clab-network clab-pim
``` ```
### A note on DPDK ### A note on DPDK
@ -66,10 +68,10 @@ Particularly the VFIO driver needs to be present before one can attempt to bindm
## Configuring VPP ## Configuring VPP
When Containerlab starts the docker containers, it'll offer one or more `vethpair` point to point When Containerlab starts the docker containers, it'll offer one or more `veth` point to point
network links, which will show up as `eth1` and further. `eth0` is the default NIC that belongs to 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 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: VPP can use these `veth` interfaces, it needs to bind them, like so:
``` ```
docker exec -it clab-pim vppctl docker exec -it clab-pim vppctl
@ -81,12 +83,16 @@ and then within the VPP control shell:
create host-interface v2 name eth1 create host-interface v2 name eth1
set interface name host-eth1 eth1 set interface name host-eth1 eth1
set interface mtu 1500 eth1 set interface mtu 1500 eth1
set interface ip address eth1 172.19.1.2/24 set interface ip address eth1 192.0.2.2/24
set interface ip address eth1 fec0::2/64 set interface ip address eth1 2001:db8::2/64
set interface state eth1 up set interface state eth1 up
``` ```
Containerlab will generate a config file called `/etc/vpp/clab.vpp` which contains all of these Containerlab will attach these `veth` pairs to the container, and replace our Docker CMD with one
comands. You can add more commands that'll execute on startup by copying in that waits for all of these interfaces to be added (typically called `if-wait.sh`). In our own CMD,
we then generate a config file called `/etc/vpp/clab.vpp` which contains the necessary VPP commands
to take control over these `veth` pairs.
In addition, 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-pre.vpp` (to be executed _before_ the containerlab stuff) or
`/etc/vpp/manual-post.vpp` (to be executed _after_ the containerlab stuff). `/etc/vpp/manual-post.vpp` (to be executed _after_ the containerlab stuff).