AV-over-IP Network Inspector Prototype
A prototype diagnostic tool for networks that carry audio, video and control together. It checks four areas of the network – device discovery, clock timing, media transport and QoS, and the switch infrastructure – across Dante, AES67, Q-SYS, NDI, SMPTE ST 2110, Extron NAV and wireless RF systems. It can also add a temporary IP address to reach a device stuck on its factory subnet, and removes it safely afterwards.
| Device and Hardware Identity | IPv4/Subnet Status | Plane and Discovery Protocols | Switch Port and VLAN (LLDP) | QoS (DSCP) and Stream Health | Actions |
|---|
Evidence-Based Diagnostic Engine (4-Plane Correlation)
AV Hardware Factory Defaults Catalogue
Default IP addresses, logins and reset steps for 25 broadcast and AV manufacturers. Checked against manufacturers' documentation in November 2026; defaults can change with firmware, so confirm in the manual before relying on them.
Technical Architecture and Systems Engineering Specification
A diagnostic tool for live production has to work with what the network actually lets it see, without putting the show at risk. A laptop plugged into one switch port cannot see every VLAN or every unicast stream, so the tool combines what it observes across four network planes. Any change it makes to the laptop's own network settings must be safe and fully reversible.
Plane 1: Discovery and Session Control
Protocols: Dante ConMon, mDNS, AES67 SAP, QDP, NMOS, WS-Discovery, ACN/SSC.
Handles multi-protocol endpoint enumeration across Layer 2 and routed boundaries, ingesting UDP 8700–8708,
_netaudio-arc, _ndi._tcp, IS-04/IS-05 and RF telemetry streams.
Plane 2: Timing and Clock Synchronisation
Standards: PTPv1 (IEEE 1588-2002), PTPv2 (IEEE 1588-2008), SMPTE ST 2059-2.
Parses clock domains for classic Dante, AES67 and DDM. Evaluates Best Master Clock Algorithm (BMCA)
parameters and measures Sync packet delay variation (PDV) jitter.
Plane 3: Media Transport and QoS Data Plane
Telemetry: DiffServ DSCP (CS7/EF/AF41), RFC 3550 RTP, 9000B Jumbo MTU.
Validates IPv4 QoS markings – checking that PTP events carry CS7 (56), audio carries EF (46) and video carries
AF41 (34) – while tracking RTP sequence gaps and DF Path MTU sweeps.
Plane 4: Switch and L2 Infrastructure
Plumbing: LLDP-MED (0x88CC), Cisco CDP, IGMPv2/v3 Querier, 802.1w RSTP.
Decodes switch port identity, VLAN assignment and PoE+ draw. Monitors Spanning Tree Topology Change
Notifications (TCNs) and IGMP Querier intervals to prevent flooding.
Capture Filter and Temporary IP Address Workflow
The app is written in Python for macOS and uses Scapy to capture packets. A kernel-level BPF filter keeps only the protocols the inspector needs, including 802.1Q-tagged frames on trunk ports, so a busy show network cannot overwhelm it. A later stage will add a temporary IP address for reaching devices stuck on a factory subnet, without touching the Mac's internet routing:
# 1. Capture filter (avni/capture.py): Python and Scapy on macOS
# Runs in the kernel. Keeps discovery, timing and switch protocols, skips
# bulk media, and repeats the match inside "vlan and (...)" for tagged frames.
AV_CONTROL_TERMS = [
"arp",
"ether proto 0x88cc", # LLDP
"ether dst 01:00:0c:cc:cc:cc", # CDP
"ether dst 01:80:c2:00:00:00", # Spanning Tree BPDUs
"ether proto 0x88f7", # PTP over Ethernet
"igmp",
"udp port 319 or udp port 320", # PTP over UDP
"udp port 5353", # mDNS (Dante, NDI, Sennheiser SSC)
"udp port 9875", # SAP (AES67, ST 2110)
"udp portrange 8700-8708", # Dante ConMon
"udp port 2467", # Q-SYS QDP
"udp port 3702", # WS-Discovery (ONVIF cameras)
"udp port 427 or udp port 8427", # SLP (Shure)
"udp port 67 or udp port 68", # DHCP
"udp port 5568", # sACN
"udp port 6454", # Art-Net
"tcp port 5959", # NDI Discovery Server
]
inner = " or ".join(f"({t})" for t in AV_CONTROL_TERMS)
AV_CONTROL_FILTER = f"({inner}) or (vlan and ({inner}))"
sock = conf.L2listen(iface="en5", filter=AV_CONTROL_FILTER, promisc=True)
# 2. Temporary secondary IP on macOS (planned for a later stage)
# 1. Detect: a device is seen outside the Mac's subnet,
# for example a Shure AD4Q at 169.254.88.12/16.
# 2. Choose and check: pick a free address in that subnet (169.254.88.249)
# and send three ARP probes first. Stop if any device answers.
# 3. Snapshot: record the routing table and the default route (netstat -rn).
# 4. Add, only after the user confirms (needs administrator rights):
# ifconfig en5 alias 169.254.88.249 netmask 255.255.0.0
# An alias sets no gateway, so internet and VPN traffic are unaffected.
# 5. Lease: the alias lasts 15 minutes and can be extended. The app checks
# every second that its window is still open.
# 6. Remove on request, when the lease expires or when the app quits:
# ifconfig en5 -alias 169.254.88.249
# Then compare the routing table with the snapshot. If the app stopped
# unexpectedly, it removes any alias it left behind the next time it starts.
4-Plane Broadcast Protocol Discovery and Diagnostic Matrix
| Protocol/Standard | Plane and Domain | Transport, Ports and Multicast | Expected QoS/MTU | Fault Signatures Monitored |
|---|---|---|---|---|
| Audinate Dante (Native) | Plane 1 and 3 (Audio) | UDP 8700–8708 (ConMon), UDP 4440/4455, mDNS _netaudio-arc._udp |
DSCP 56 (CS7) Clock / DSCP 46 (EF) Audio • 1500B | APIPA 169.254.x.x fallback, QoS remarking to BE (00), Unicast/Multicast RTP drops, DDM subnet isolation |
| AES67 / SMPTE ST 2110-30 | Plane 1 and 3 (Audio) | UDP 9875 (SAP on 239.255.255.255), RTP UDP 5004 |
DSCP 46 (EF) • 1500B | SAP SDP payload mismatch, PTPv1/v2 boundary clock drift, RFC 3550 sequence gaps and packet time jitter |
| Q-SYS (Q-LAN) | Plane 1 and 3 (Audio/DSP) | UDP 2467 / 6504 (QDP on 224.0.23.175) |
DSCP 46 (EF) / CS6 (48) • 1500B | Core/Peripheral discovery timeout across VLANs, PTPv2 priority clash with Dante Brooklyn II modules |
| NewTek NDI 5 / 6 | Plane 1 and 3 (Video) | mDNS _ndi._tcp.local (224.0.0.251:5353), Discovery Server TCP 5960, Media 5961+ |
DSCP 34 (AF41) • 1500B | Unpruned multicast flooding, keyframe microburst buffer starvation, Discovery Server TCP unreachability |
| SMPTE ST 2110 and NMOS | Plane 1 and 3 (Broadcast Video) | NMOS IS-04/IS-05 (HTTP REST), ST 2110-20/30/40 RTP Multicast | DSCP 34 (AF41) / EF (46) • 9000B Jumbo | Jumbo Frame (MTU 9000) blackhole on 1500B switch trunks, narrow-sender pacing violations |
| Extron NAV and SIS Control | Plane 1 and 3 (Video/Matrix) | PURE3 RTP (239.252.x.x:5004), Extron SIS over SSH (TCP 22023) |
DSCP 34 (AF41) • 1500B / 9000B | Factory static subnet isolation (192.168.254.254), HDCP/EDID handshake drops, MTU
fragmentation |
| ONVIF (Profile S / G / T) | Plane 1 and 3 (IP Video) | UDP 3702 WS-Discovery (239.255.255.250), RTSP TCP/UDP 554, VISCA UDP 52381 |
DSCP 34 (AF41) • 1500B | Stranded factory static IPs (.100.100 / .0.10), RTSP stream teardown,
default credential exposure |
| Shure ACN and Sennheiser SSC | Plane 1 (RF and Control) | Shure SLP/ACN (239.255.254.253:2202/8427), Sennheiser _ssc._udp |
DSCP 32 (CS4) / BE • 1500B | Missing PortFast causing DHCP timeout into APIPA, control/Dante NIC subnet overlap |
| sACN (E1.31) and Art-Net | Plane 1 and 3 (Stage Lighting) | sACN Multicast 239.255.x.x:5568, Art-Net Broadcast/Unicast UDP 6454 |
DSCP 32 (CS4) • 1500B | Legacy Art-Net Limited Broadcast storms (255.255.255.255) saturating 100 Mbps embedded AV
control NICs |
| PTPv1 and PTPv2 (IEEE 1588) | Plane 2 (Timing and Sync) | UDP 319 (Event) and 320 (General) on 224.0.1.129, gPTP Layer 2 0x88F7 |
DSCP 56 (CS7) / 48 (CS6) | Same-domain split-brain Grandmasters, PTPv1/v2 boundary instability, Sync PDV jitter (>50 µs, missing Transparent Clock) |
| IGMPv2/v3, LLDP-MED and RSTP | Plane 4 (Infrastructure) | IGMP 224.0.0.1 (IP Proto 2), LLDP 0x88CC, CDP, RSTP BPDU
01:80:C2:00:00:00 |
Link-Local L2 Control | Missing IGMP Querier (>255 s timeout causing port flooding), RSTP Topology Change Notification (TCN) table flushes, PoE+ budget exhaustion |