feat(obs): report broadcast frame counters
PLAN.md calls out "Broadcast traffic flowing" as a user-facing diagnostic. The tunnel stats only reported total Ethernet frame counts, so the client could not distinguish whether broadcast traffic was actually crossing the tunnel. Add defaulted broadcast tx/rx counters to TunnelStats while preserving the existing constructor and old JSON compatibility. Client and gateway accounting now increments those counters from validated Ethernet frames, and the client diagnostics line reports the broadcast flow next to total frame counts. Relay peer stats logs include the new counters so operators can see broadcast activity from forwarded stats snapshots too. Test Plan: - cargo fmt --check - cargo test -p lanparty-obs -p lanparty-client-core -p lanparty-gateway \ -p lanparty-client-win -p lanparty-relay - cargo test --workspace - cargo clippy --workspace --all-targets -- -D warnings - git diff --check Refs: PLAN.md
This commit is contained in:
@@ -453,7 +453,7 @@ async fn print_and_report_client_diagnostics(
|
||||
fn format_client_diagnostics(diagnostics: &ClientDiagnostics) -> String {
|
||||
let stats = diagnostics.stats();
|
||||
format!(
|
||||
"client diagnostics: relay reachable {} gateway connected {} route pinned {}; QUIC datagrams {} max {}; TAP found {} MAC {} MTU {} IP {}; frames tx {} rx {} datagrams tx {} rx {} drops {} malformed {}",
|
||||
"client diagnostics: relay reachable {} gateway connected {} route pinned {}; QUIC datagrams {} max {}; TAP found {} MAC {} MTU {} IP {}; frames tx {} rx {} broadcast tx {} rx {} datagrams tx {} rx {} drops {} malformed {}",
|
||||
yes_no(diagnostics.relay().reachable()),
|
||||
yes_no(diagnostics.relay().gateway_connected()),
|
||||
yes_no(diagnostics.relay().route_pinned()),
|
||||
@@ -465,6 +465,8 @@ fn format_client_diagnostics(diagnostics: &ClientDiagnostics) -> String {
|
||||
optional_label(diagnostics.tap().ip()),
|
||||
stats.ethernet_frames_tx(),
|
||||
stats.ethernet_frames_rx(),
|
||||
stats.broadcast_frames_tx(),
|
||||
stats.broadcast_frames_rx(),
|
||||
stats.datagrams_tx(),
|
||||
stats.datagrams_rx(),
|
||||
stats.dropped_frames(),
|
||||
@@ -851,12 +853,12 @@ mod tests {
|
||||
Some(1200),
|
||||
Some("10.73.42.51".parse().unwrap()),
|
||||
),
|
||||
TunnelStats::new(1, 2, 3, 4, 5, 6),
|
||||
TunnelStats::new(1, 2, 3, 4, 5, 6).with_broadcast_frames(7, 8),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
format_client_diagnostics(&diagnostics),
|
||||
"client diagnostics: relay reachable yes gateway connected yes route pinned yes; QUIC datagrams yes max 1400; TAP found yes MAC 02:00:00:00:00:01 MTU 1200 IP 10.73.42.51; frames tx 1 rx 2 datagrams tx 3 rx 4 drops 5 malformed 6"
|
||||
"client diagnostics: relay reachable yes gateway connected yes route pinned yes; QUIC datagrams yes max 1400; TAP found yes MAC 02:00:00:00:00:01 MTU 1200 IP 10.73.42.51; frames tx 1 rx 2 broadcast tx 7 rx 8 datagrams tx 3 rx 4 drops 5 malformed 6"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -871,7 +873,7 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
format_client_diagnostics(&diagnostics),
|
||||
"client diagnostics: relay reachable yes gateway connected no route pinned no; QUIC datagrams no max unknown; TAP found no MAC unknown MTU unknown IP unknown; frames tx 0 rx 0 datagrams tx 0 rx 0 drops 0 malformed 0"
|
||||
"client diagnostics: relay reachable yes gateway connected no route pinned no; QUIC datagrams no max unknown; TAP found no MAC unknown MTU unknown IP unknown; frames tx 0 rx 0 broadcast tx 0 rx 0 datagrams tx 0 rx 0 drops 0 malformed 0"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user