Skip to content

Add SONiC VPP platform support - #301

Draft
l0wl3vel wants to merge 23 commits into
masterfrom
feat/sonic-vpp
Draft

Add SONiC VPP platform support#301
l0wl3vel wants to merge 23 commits into
masterfrom
feat/sonic-vpp

Conversation

@l0wl3vel

@l0wl3vel l0wl3vel commented May 20, 2026

Copy link
Copy Markdown
Contributor

Description

Use Sonic VPP image to emulate switch behaviour more accurately

What works

  • SONiC image building (locally)
  • Static breakout configuration (Dynamic breakouts are not supported)
  • SONiC config_db.json generation and loading

Outstanding issues

mini-lab

sonic-vpp related

  • isc/pixiecore do not receive DHCP requests from machine PXE because of an upstream issue with VLANs/Bridged Interfaces/L2 broadcasts. Change has been proposed and merged by a cisco engineer upstream.
  • unnumbered bgp sessions do not come up between leaf switches and exit nodes due to IPv6 RAs not getting relayed to host interfaces on the host switch, leaving the BGP session idle on the switch, while the exit node tries to unsuccessfully establish a session.
    • adding a missing host punt for a few IPv6 ICMPv6 messages to https://github.com/sonic-net/sonic-sairedis and rebuilding a SONiC image to allow the switch to aquire a link-local IPv6 address required for unnumbered BGP (@l0wl3vel has a working build setup and to-be-tested punt fix)

There is a build image with the required unnumbered BGP work, EVPN control-plane patches here: https://github.com/l0wl3vel/sonic-buildimage/tree/vpp-integration
Upstreaming these changes would be great from a maintenance perspective.

The three forked sonic repos should be moved into the metal-stack org if we want to offer this as an official flavor because they currently are located in @l0wl3vel s github profile and the base image on a personal docker-hub account.

closes: #300

Used AI-Tools ✨

  • Claude Opus used as research buddy/stand-in in for missing SONiC documentation

@l0wl3vel
l0wl3vel force-pushed the feat/sonic-vpp branch 4 times, most recently from c6d9d31 to 8446f3c Compare May 29, 2026 13:48
@l0wl3vel
l0wl3vel force-pushed the feat/sonic-vpp branch 2 times, most recently from 279b19f to 4c21015 Compare July 10, 2026 16:26
@l0wl3vel
l0wl3vel force-pushed the feat/sonic-vpp branch 3 times, most recently from 71f821f to 661a283 Compare July 26, 2026 10:29
@l0wl3vel l0wl3vel changed the title Use Sonic VPP image Add SONiC VPP platform support Jul 27, 2026
l0wl3vel added 17 commits July 27, 2026 12:28
To enable fixed IPs for the Gateway API, mini-lab
needs a docker network that is not the docker
default bridge. Create a dedicated
`mini_lab_internal` network (172.42.0.0/16) and
relocate everything off the old default network
bridge (172.17.0.1 / 172.18.0.0). This shifts the
control-plane ingress DNS from 172.17.0.1.nip.io
to 172.42.0.1.nip.io. No Gateway API migration yet

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Add a metal-api server cert (api./v2. nip.io SANs)
for the Gateway to terminate TLS with, add it to
roll_certs.sh, and update the grpc cert host to
the Gateway LoadBalancer IP.

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Add the Gateway API plumbing without wiring any
application to it yet:

Deploy cloud-provider-kind to provide LoadBalancer
IPs.

Add a `gateway` role deploying the Envoy Gateway
controller, a GatewayClass, an EnvoyProxy pinned
to the fixed LB IP 172.42.0.42, and the
metal-control-plane Gateway.

Register the role in the control-plane playbook
and expose metal_control_plane_gateway_dns

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Migrate zitadel, nsq, metal-api and
metal-apiserver off ingress-nginx to Gateway API.
Enable http/tcp routes, point their external URLs
at the Gateway LoadBalancer (172.42.0.42 /
gateway_dns).

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
as we are not listening on the host we are free to use any port we like.
So we switch to the default ports for https and http

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
we need to put the CA data into an env var to later access metal-api.
So we run cert generation on before calling the requested make target if
certs are not generated yet.

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
includes
sonic-net/sonic-platform-vpp#212
and sonic-net/sonic-platform-vpp#220
for troubleshooting reasons

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Removed hacks, that just about worked in sonic-vs but broke in sonic-vpp
- sonic-vpp requires first time init to generate
  VPP config files from hwsku lanemap and port
  config. If skipped the syncd container, in which
  vpp runs, will crash immediately
- /etc/sonic/sonic-environment is generated on first boot from
  /usr/share/sonic/device/x86_64-kvm_x86_64-r0/default_sku,
  so writing it serves no purpose as we reenabled firstboot
- switch to telnetlib3, due to telnetlib being deprecated

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
l0wl3vel added 4 commits July 27, 2026 13:42
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
@l0wl3vel l0wl3vel added the triage This should be talked about in the next planning. label Jul 27, 2026
@simcod simcod moved this to Upcoming in Development Jul 27, 2026
@metal-robot metal-robot Bot removed the triage This should be talked about in the next planning. label Jul 27, 2026
- Split pipelines to build sonic_vs and sonic_vpp images
- Rename sonic flavor to sonic_vs
- Add sonic-vpp as sonic_vpp flavor
- Run integration tests for sonic_vpp

Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Signed-off-by: Benjamin Ritter <benjamin.ritter@x-cellent.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Upcoming

Development

Successfully merging this pull request may close these issues.

Use sonic-vpp target for OSS SONiC images

3 participants