Tutorial: SignalBridge from Zero to First Stream
What you’re building
SignalBridge reads LTE/5G signalling (S1AP/NGAP) from PCAP or streams, optionally filters and anonymises IMSIs, and writes PCAP, TCP, UDP, or HTTP(S) NDJSON batches. This walkthrough goes: install deps → build → run once from a file → optional YAML config → optional local HTTP ingest.
Prerequisites
- C++20, CMake 3.20+
- Libraries: libpcap, yaml-cpp, libcurl, OpenSSL, zlib
- Dev checkout: If
third_party/s1see/is missing, you need S1-SEE next to the repo or-DS1_SEE_DIR=(see README.md).
macOS (Homebrew):
brew install libpcap yaml-cppUbuntu/Debian:
sudo apt-get install -y libpcap-dev libyaml-cpp-dev libcurl4-openssl-dev libssl-dev zlib1g-dev(Public-bundle docs also mention pkg-config on Debian — see README.publish.md.)
Step 1 — Configure and build
From the repository root:
cmake -S . -B build
cmake --build build -jBinary: build/signalbridge.
Step 2 — First run (CLI, file in → file out)
./build/signalbridge run --help
./build/signalbridge run -i capture.pcap -o anonymised.pcapUse a real S1AP/NGAP PCAP you’re allowed to process. This confirms decode + anonymise + write path without touching YAML.
Step 3 — Run from YAML
./build/signalbridge run -c config/conduit.yamlCheck a config without processing:
./build/signalbridge validate -c config/conduit.yamlOpen config/conduit.yaml and adjust inputs (file, TCP listener, stdin), outputs (PCAP path, tcp://, udp://, http:///https://), filters, and metrics bind (default metrics often documented as 127.0.0.1:9090 in the README). HTTP paths often look like /frames/{uuid} — align with config/ingest_endpoints.yaml if you use the reference server.
Step 4 — Local HTTP ingest (optional)
Terminal 1:
pip install -r server/requirements.txt
python server/signalvault_ingest.py --port 9876Terminal 2: point your YAML HTTP output at that host/port/path, then run signalbridge run -c ... again. This validates streaming before production or Signal Cloud–style endpoints.
Step 5 — TCP listener input (concept)
You can feed live PCAP over TCP (e.g. tshark piped through socat into SignalBridge’s listener). The root README documents the pattern; use --loop if you need multiple connections and config hot-reload.
Updated 3 days ago
