Initial config for a bare-bones VPP container lab image

This commit is contained in:
Pim van Pelt
2025-05-02 15:32:20 +02:00
commit 7fa4876c7a
7 changed files with 111 additions and 0 deletions

20
Dockerfile.bookworm Normal file
View File

@ -0,0 +1,20 @@
FROM debian:bookworm
ARG DEBIAN_FRONTEND=noninteractive
ARG VPP_INSTALL_SKIP_SYSCTL=true
ARG REPO=release
RUN apt-get update
RUN apt-get -y install curl procps tcpdump iproute2 iptables binutils \
bridge-utils iputils-ping netcat-traditional net-tools nmap \
python3 python3-dev python3-pip
RUN mkdir -p /var/log/vpp
RUN curl -s https://packagecloud.io/install/repositories/fdio/${REPO}/script.deb.sh | bash
RUN apt-get update
RUN apt-get -y install vpp vpp-plugin-core
RUN apt-get -y clean
COPY startup.conf /etc/vpp/startup.conf
COPY bootstrap.vpp /etc/vpp/bootstrap.vpp
COPY manual-pre.vpp /etc/vpp/manual-pre.vpp
COPY clab.vpp /etc/vpp/clab.vpp
COPY manual-post.vpp /etc/vpp/manual-post.vpp
CMD ["/usr/bin/vpp","-c","/etc/vpp/startup.conf"]

46
README.md Normal file
View File

@ -0,0 +1,46 @@
# 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. It will bind the vethpair interfaces
into the dataplane.
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
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/vfio/vfio:/dev/vfio/vfio \
--device=/dev/vhost-net:/dev/vhost-net \
--privileged=True --name clab-pim \
docker.io/pimvanpelt/vpp-containerlab
docker network connect network2 clab-pim
## Configuring VPP
docker exec -it clab-pim vppctl
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
## References
https://s3-docs.fd.io/vpp/22.02/usecases/vpp_testbench/index.html
https://git.ipng.ch/ipng/drone-hugo
https://github.com/ligato/vpp-base/tree/master

3
bootstrap.vpp Normal file
View File

@ -0,0 +1,3 @@
exec /etc/vpp/manual-pre.vpp
exec /etc/vpp/clab.vpp
exec /etc/vpp/manual-post.vpp

1
clab.vpp Normal file
View File

@ -0,0 +1 @@
comment { This file will be overwritten / generated by containerlab upon deploy }

1
manual-post.vpp Normal file
View File

@ -0,0 +1 @@
comment { These commands are executed after Containerlab stuff }

1
manual-pre.vpp Normal file
View File

@ -0,0 +1 @@
comment { These commands are executed before Containerlab stuff }

39
startup.conf Normal file
View File

@ -0,0 +1,39 @@
unix {
interactive
log /var/log/vpp/vpp.log
full-coredump
cli-listen /run/vpp/cli.sock
cli-prompt vpp-clab#
cli-no-pager
poll-sleep-usec 100
exec /etc/vpp/bootstrap.vpp
}
api-trace {
on
}
memory {
main-heap-size 512M
main-heap-page-size 4k
}
buffers {
buffers-per-numa 16000
default data-size 2048
page-size 4k
}
statseg {
size 64M
page-size 4k
per-node-counters on
}
plugins {
plugin default { enable }
plugin dpdk_plugin.so { disable }
plugin linux_cp_plugin.so { enable }
plugin linux_nl_plugin.so { enable }
plugin sflow_plugin.so { enable }
}