diff --git a/backend/src/network_sniffer.py b/backend/src/network_sniffer.py index fb00b02..8f9ab7d 100644 --- a/backend/src/network_sniffer.py +++ b/backend/src/network_sniffer.py @@ -491,6 +491,15 @@ def _sync_bridge_telemetry() -> None: logger.exception("Failed to update bridge telemetry collector") +def _managed_capture_ifaces() -> set[str]: + return { + iface + for session in sessions.values() + if session.get("is_bridge") + for iface in session.get("capture_ifaces", []) + } + + # ------------------------- # Per-session reader loop # ------------------------- @@ -570,6 +579,9 @@ def _session_reader_loop(session_id: str) -> None: packet_bytes = raw if settings.capture_header_enabled: capture_meta, packet_bytes = parse_capture_header(raw) + if capture_meta is None and iface in _managed_capture_ifaces(): + logger.debug("Skipping unshimmed packet on managed capture interface %s", iface) + continue pkt = Ether(packet_bytes) pkt.sniffed_on = iface parse_packet(pkt, label, capture_metadata=capture_meta) diff --git a/tools/setup_bridge_capture.sh b/tools/setup_bridge_capture.sh index 16bb131..72640f5 100755 --- a/tools/setup_bridge_capture.sh +++ b/tools/setup_bridge_capture.sh @@ -68,6 +68,8 @@ fi ip link set "$MIRROR_IF" up ip link set "$CAPTURE_IF" up +sysctl -q -w "net.ipv6.conf.$MIRROR_IF.disable_ipv6=1" >/dev/null || true +sysctl -q -w "net.ipv6.conf.$CAPTURE_IF.disable_ipv6=1" >/dev/null || true mapfile -t PORTS < <(bridge link show master "$BRIDGE" | awk -F': ' '{print $2}' | awk '{print $1}') if [[ ${#PORTS[@]} -eq 0 ]]; then