Quickstart
Run VPP with application classification in 5 minutes using Docker.
Get from zero to show ndpi applications output in under 5 minutes. Everything runs in containers — no VPP installation required.
Prerequisites
- Docker 24+ (or Docker Engine 23+ with Compose v2)
- 4 GB RAM, 10 GB free disk
Step 1 — Get the source
Contact PacketFlow to receive the FlowLens source package, then:
cd vpp-ndpi
Step 2 — Build the CI image
# Pull the pre-built base image (VPP 25.06 + libndpi already compiled)
docker pull ghcr.io/packetflow/vpp-ndpi-dev:base
# Build the plugin
docker build -f Dockerfile.ci \
--build-arg BASE_IMAGE=ghcr.io/packetflow/vpp-ndpi-dev:base \
-t vpp-ndpi-ci .
Build time: ~2 minutes on a 4-core machine.
Step 3 — Run the classification lab
docker run --rm --privileged vpp-ndpi-ci \
bash labs/sw/lab-apps.sh
This starts a VPP instance, replays TLS ClientHello packets for 12 well-known applications (YouTube, Netflix, Zoom, Teams, Spotify…), and prints the classification results.
Expected output
Application Flows Packets Bytes
YouTube 1 24 18496
NetFlix 1 24 18496
Zoom 1 24 18554
Microsoft 1 24 18577
Github 1 24 18421
...
Classification happens in the first 3 packets — nDPI reads the TLS SNI from the ClientHello before the handshake completes.
Step 4 — Run the Grafana lab
For live Prometheus metrics and Grafana dashboards:
cd labs/sw
# Build the Prometheus exporter
docker build -f ../../exporter/Dockerfile -t vpp-exporter ../../exporter/
# Start VPP + exporter + Prometheus + Grafana
docker compose up -d
# Open Grafana (admin / admin)
xdg-open http://localhost:3000
The lab continuously injects traffic so Grafana shows live time-series data. Each 3-second cycle creates 12 new flows across 12 well-known applications.
Step 5 — Connect to the VPP CLI
docker exec -it lab-vpp vppctl -s /tmp/lab-dut-cli.sock
vpp# show ndpi stats
flows created: 720
flows classified: 720
flows active: 720
packets scanned: 3600
packets cached: 10440
vpp# show ndpi applications
Application Flows Packets Bytes
YouTube 60 1440 1105920
NetFlix 60 1440 1105920
Google 60 1440 1105920
...
Next steps
- Architecture — how the plugin stack fits into VPP’s data plane
- vpp-ndpi reference — full CLI and binary API reference
- vpp-exporter reference — Prometheus metrics and Grafana dashboard
- Commercial support — deployment help from PacketFlow