4.8 KiB
Linux host integration and side effects
Network and bridge control
api/network_api.py retains process-wide pyroute2 IPRoute and NDB objects.
It reads addresses, link flags, routes and bridge membership through netlink, and
uses NDB/pyroute2 to create or remove bridges. Resetting interfaces executes
ethtool and changes MTU/profile values. These operations affect the host's live
connectivity; API errors must be treated as operational failures, not merely input
validation failures.
utilities/interface_bridge_helpers.py is the low-level read layer. It checks
interface presence/up state, reads sysfs operational/carrier/admin/MTU values,
obtains Ethernet profile data using ethtool, caches profile data, and reads bridge
members from sysfs. It deliberately supplies best-effort information when a driver
or platform cannot report every property.
bridge_link_state_manager.py owns optional event-driven bridge watchers. Each
watcher tracks Ethernet profile and member readiness, uses failure and recovery
holdoffs to avoid flapping, and adjusts selected peer state so an inline bridge
reacts coherently to member link loss. BridgeLinkStateManager indexes watchers,
enables/disables them, reports individual/all status, and stops all during shutdown.
eBPF/tc telemetry
bridge_telemetry.py manages the lifecycle of the telemetry helper. Its
update_sessions method reconciles currently requested bridge ports with the
subprocess; stop terminates it and get_debug_snapshot provides operator
diagnostics. It does not itself parse kernel events.
ebpf_bridge_events.py is the helper process. It builds BPF source, attaches tc
programs to requested interfaces, reads perf events, and writes JSON-safe event
payloads. Events cover ingress raw capture plus egress/drop metadata, including
interfaces, MAC/IP information, packet identity, event/reason names, and timing.
It cleans existing clsact qdiscs/program attachment as part of setup/cleanup. This
requires an appropriate kernel, BCC Python bindings/toolchain, tc, and privileges.
tools/ebpf/mark_packet_id.c is related kernel-side support for packet marking;
the mark is decoded by utilities/packet_mark.py and used in tracker correlation.
nftables
The mounted api/nft_manager.py uses pip-nftables to list JSON/text rulesets,
normalize them into stable table/chain/rule models, parse rule priorities/text, and
delete a rule by handle. Its raw-command endpoint forwards textual nft commands.
It therefore needs capability to inspect and change the host nftables ruleset.
Two alternative implementations exist but are currently unmounted:
api/nft_api.pyis bridge-family oriented. It models meta, Ethernet, IP, port, conntrack, verdict, reject, log, and raw expressions; can generate previews, list rules with authoritative handles, add/delete/update rules, and uses thenftCLI.api/nftables_api.pyis a stateless typed replacement API. It models matches and actions, chooses a pyroute2 binding when viable or a CLI wrapper otherwise, ensures table/chain presence, reconstructs readable rules, and replaces a chain's ruleset. Its own source warns that a running asyncio loop may force CLI fallback.
Do not mount more than one firewall router without an explicit API versioning and conflict review: all manipulate shared kernel state and have overlapping concepts.
NFQUEUE script services
api/packet_scripting_api.py manages executable Python scripts. It makes these
directories at import time: /srv/fw-scripts, /srv/fw-scripts/venvs, and the
repository's backend/example_scripts. Scripts are named <name>.py; requirements
are <name>-requirements.txt; virtual environments are per-script. Units use the
deterministic name fw-script-<name>-q<queue>.service and are written under
/etc/systemd/system.
The module discovers services through systemctl, writes/parses unit ExecStart,
runs daemon-reload, starts/stops/enables/disables units, creates virtualenvs, and
uses pip to install user-provided requirements. Startup can copy protected example
scripts and optionally deploy them from <name>.deploy.json. This API is a remote
code/service-management surface and requires strict authentication plus host-level
least privilege.
External subprocesses
| Integration | Commands/facility | Used by |
|---|---|---|
| tshark | long-lived tshark subprocesses |
DPI enrichment |
| nftables | nft CLI and/or pip-nftables bindings |
firewall APIs |
| Ethernet control | ethtool |
interface profile/reset |
| system services | systemctl, virtualenv, pip |
script lifecycle |
| BPF/tc | BCC, tc, qdisc/program attachment | bridge telemetry |
Failures are generally logged and translated to endpoint failures or degraded
capture. Operators should collect /api/sniffer/debug, service logs, nftables
state, and interface state when investigating a problem.