Repository navigation
Add dyode probe: one-way link measurement for the streaming trials - #7
Merged
Merged
Conversation
iperf3 cannot run through a diode or a receive-only radio, so DYODE carries its own probe: - probe send: numbered, timestamped, CRC-checked UDP at a fixed rate, one thread and port per stream, paced on a schedule (sleep then spin). - probe recv: one thread per port; loss judged per sequence number through a reorder window; burst-length and burst-duration histograms; Gilbert-Elliott fit with the tc netem line that replays it; delay and RFC 3550 jitter; RaptorQ what-if (--fec-sim T:R); per-packet CSV log and JSON report. - probe analyze: replays a receive log. Checked: 8 unit tests, a 4-stream loopback run at 2 Gbit/s with no loss, and a Gilbert relay (p=1%, r=25%) measured as p=0.94%, r=24.95%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Q4FHinyA2fAioyiPVH3B2
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.
Adds
dyode probe, the measurement tool for the streaming hardware trials (trial plan). iperf3 can't be used through a diode or a receive-only radio because it needs a TCP control channel.What it does
probe sendsends numbered, timestamped, CRC-32-checked UDP packets at a fixed rate (--mbpsor--pps). Each stream gets one thread and one UDP port (--streams N: port + i), paced on a schedule.--burst Ntests how the link handles bursts.probe recvruns one thread per port and prints a live line every second, then a report per stream:tc netem loss gemodel p rline that replays it on the bench--fec-sim 200ms:1,...): what a span T and repair ratio r would have left unrecovered (systematic code: only source packets lost in failed groups count)--logwrites a per-packet CSV,--jsona full report with per-port counters (damaged/foreign datagrams, buffer size actually granted), and--keepkeeps listening for field soaksprobe analyze LOGreplays a log, for example with other--fec-simsettings.docs/PROBE.md(usage, how to read the report, notes per hardware class). CHANGELOG (Unreleased) and README are updated.New file
src/probe.rs;main.rsgains theprobecommand and help text. Nothing else changes; no new dependencies (it uses crc32fast, libc, getrandom, serde_json, which are already in the tree).Testing (sandbox, offline build against the 2.0.2 vendored sources)
cargo test: 64 pass (8 new: codec/CRC, FEC-spec parsing, bursts + Gilbert, reorder/duplicate/late, tail loss with and without the end marker, late joiner, FEC simulation, and a 2-stream loopback run including a log replay). Clippy and rustfmt are clean.tcisn't available in the sandbox): the probe measured p = 0.94%, r = 24.95%, mean burst 4.01 packets (theory: 4). Its loss matched the relay's own count exactly (3.620%).--burst 3), Ctrl-C on an idle receiver, and the usage errors were checked by hand.Notes
CHANGELOG.mdandsrc/main.rs, so expect a small conflict to resolve when merging the second one.Generated by Claude Code