# VPP Containerlab Docker image This docker container creates a VPP instance based on the latest release. It starts up as per normal, using /etc/vpp/startup.conf (which Containerlab will replace), and 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 containerlab takes control. 1. `clab.vpp` -- generated by containerlab. Its purpose is to bind the `vethpair` interfaces into theo dataplane (see below). 1. `manual-post.vpp` -- can be supplied by the user, to run any configuration statements after containerlab is finished with its per-lab statements. ## Building ```bash docker build -f Dockerfile.bookworm . -t pimvanpelt/vpp-containerlab ``` ## Starting the container ``` docker network create --driver=bridge network2 --subnet=172.19.1.0/24 docker rm clab-pim docker run --cap-add=NET_ADMIN --cap-add=SYS_NICE --cap-add=SYS_PTRACE \ --device=/dev/net/tun:/dev/net/tun \ --device=/dev/vhost-net:/dev/vhost-net \ --privileged=True --name clab-pim \ docker.io/pimvanpelt/vpp-containerlab 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 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 ``` or in Containerlab, using the `devices` feature: ``` my-node: image: vpp-containerlab:latest kind: vpp devices: - /dev/vfio/vfio - /dev/net/tun - /dev/vhost-net ``` ## Configuring VPP ``` docker exec -it clab-pim vppctl ``` and then within the VPP control shell: ``` vpp-clab# create host-interface v2 name eth1 vpp-clab# set interface name host-eth1 eth1 vpp-clab# set interface mtu 1500 eth1 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 ```