Skip to content
Thomas Mangin edited this page May 14, 2026 · 4 revisions

Pre-Alpha. This page describes behavior that may change.

Ze optionally integrates with VPP (the FD.io Vector Packet Processor) to forward packets at DPDK speed. When vpp.enabled is true, ze takes ownership of the whole VPP lifecycle: startup, DPDK NIC binding, GoVPP connection, crash recovery, and clean teardown.

How it fits together

BGP reactor -> protocol RIB -> sysRIB
                                 |
                          +------+------+
                          |             |
                     fib-kernel     fib-vpp
                     (netlink)      (GoVPP)
                          |             |
                          v             v
                    Linux FIB       VPP FIB
                     (local)        (transit)

Ze keeps two FIB backends side by side. fib-kernel programs the Linux route table for local services (SSH, web UI, BGP TCP sessions). fib-vpp pushes the same routes into VPP's FIB for DPDK-speed transit forwarding.

Configuration

Minimal example:

vpp {
    enabled true;
    dpdk {
        interface 0000:03:00.0 { name xe0; }
        interface 0000:03:00.1 { name xe1; }
    }
}

Full reference:

Path Type Default Description
vpp.enabled boolean false Master switch.
vpp.external boolean false Connect to an existing VPP (skip startup.conf, NIC bind, exec).
vpp.api-socket string /run/vpp/api.sock GoVPP Unix socket path.
vpp.cpu.main-core uint8 auto CPU core for VPP main thread.
vpp.cpu.workers uint8 auto Number of worker threads.
vpp.memory.main-heap size 1G VPP main heap. 1536M for full DFZ.
vpp.memory.hugepage-size 2M or 1G 2M Hugepage size.
vpp.memory.buffers uint32 128000 Buffers per NUMA node.
vpp.dpdk.interface[pci].name string required Short interface name (e.g. xe0).
vpp.stats.poll-interval uint16 30 Seconds between stats reads.
vpp.lcp.enabled boolean true Linux Control Plane plugin.
vpp.lcp.netns string dataplane Network namespace for LCP TAPs.

FIB programming

fib {
    vpp {
        enabled true;
        table-id 0;
    }
}

External mode

When something else owns VPP (systemd, container sidecar):

vpp {
    enabled true;
    external true;
    api-socket /run/vpp/api.sock;
}

Ze connects to the API socket, runs telemetry, and programs the FIB, but does not start VPP or bind NICs.

What ze manages

When VPP is ze-owned (not external):

  1. Parses vpp { } YANG config.
  2. Renders startup.conf.
  3. Loads vfio, vfio_pci, vfio_iommu_type1 kernel modules.
  4. Unbinds NICs from current driver, binds to vfio-pci.
  5. Execs the VPP binary.
  6. Connects GoVPP to the API socket.
  7. Starts the stats poller.
  8. On crash: backoff (1s to 30s), restart, replay RIB.
  9. On shutdown: SIGTERM VPP, PCI rescan, restore original NIC drivers.

System prerequisites

Requirement How to provide it
Hugepages (~6 GB production, 2 GB lab) /sys/kernel/mm/hugepages/ or /etc/sysctl.d/
IOMMU enabled BIOS: VT-d / AMD-Vi. Kernel: intel_iommu=on iommu=pt
CPU isolation for workers isolcpus=<cores>
DPDK-compatible NIC Intel i210/i350, X520/X540, X710/XL710, E810, VirtIO

Observability

  • Prometheus metrics: per-interface rx/tx packets/bytes/drops/errors, per-node clocks, system vector rates.
  • fib-vpp show: JSON dump of routes fib-vpp believes it has installed.
  • vppctl: Direct VPP introspection via /run/vpp/cli.sock.

MPLS label programming

The fib-vpp plugin programs MPLS labels from BGP labeled unicast routes. When a best-path route carries MPLS labels, fib-vpp installs the corresponding label push operation in VPP's FIB. Labels flow from the BGP wire through the RIB to VPP without manual configuration.

Firewall VPP backend

The firewall plugin supports a VPP backend (backend vpp) that uses VPP's ACL classify pipeline for packet filtering and NAT44-ED for SNAT/DNAT/masquerade. See the firewall page for details.

What is not yet wired

Phase What it adds
vpp-4 Native VPP interface backend (create, delete, address, bridge, monitor via GoVPP).
vpp-5 L2 cross-connect, bridge domains, VXLAN, SRv6, sFlow.

See also

Adapted from main/docs/guide/vpp.md.

Home

About

First Steps

Configuration

Operation

Interfaces

Plugins

Plugin Development

Chaos Testing

Blueprints

Development

Reference

Clone this wiki locally