feat(traffic): decode the Pangolin protocols, and watch BEYOND's live control - #112
Merged
Conversation
…live control decode reads a capture as protocols rather than bytes: FB4 announces on UDP 9022, BEYOND's live-control broadcast on UDP 16062, and the framing/rate of the frame stream on TCP 3348. rgba watches the same broadcast live, which is the only confirmation an OSC send ever gets. The frame bodies are encrypted (~8.0 bits/byte, incompressible), so the decoder reports the framing and says so instead of guessing at points. PROTOCOL.md records what the captures show and where the evidence stops.
Contributor
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two captures from the show machine turned out to hold three unrelated protocols, two of them readable.
bin/analyzecould only show them as flows and bytes, so this addsbin/decode, which reads a capture as Pangolin, andbin/rgba, which watches the readable one live. Still strictly passive — both only read.tools/traffic/PROTOCOL.mdis the writeup: what the captures show, and where the evidence stops.(u32 tag, u32 value)settings pairs per deviceThe find worth acting on is UDP 16062. With its RGBA panel open BEYOND broadcasts every live-control change as text:
OSC acknowledges nothing, so "did BEYOND receive that?" has been unanswerable all session. This is the answer:
bin/rgbaprints values as they change, so you send and watch. Silence means nothing is arriving.bin/decode --timelinedoes the same after the fact, to line a capture up against what you were doing.TCP 3348 is framed by a length field, since TCP gives no boundaries (a 2392B frame arrives as 1460 + 932), so reading it needs reassembly:
Frame bodies measure ~8.00 bits/byte and don't compress, and consecutive frames of static content share almost no bytes — point data for 25 lasers would be neither. So the decoder reports framing, type mix, rate and sequence continuity, and states the bodies are encrypted rather than inventing a point parser. That also settles the bigger question: the frame path can't be driven from what a capture gives us.
Everything the decoder can't justify is kept raw — settings tags are counted and reported unnamed, unknown RGBA channel numbers pass through as their number, unknown stream types print as
unknownwith their hex. Naming them needsbin/experiment+bin/compare(change one thing, capture, diff), not guesswork.27 unit tests over framing, reassembly, both UDP parsers, entropy and the empty-capture paths, run in CI (
python3 -m unittest discover -s tools/traffic/lib -p '*_test.py') — the header test parses a real captured frame header, so a framing regression fails there instead of silently mis-reporting a capture.Link to Devin session: https://app.devin.ai/sessions/ec43152136134467a853ec0bbf783ea9
Requested by: @pyramation