From cdad23ffa05ef6872dd4cfc65de07cc2fc7bc392 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Tue, 31 Mar 2026 17:58:58 +0400 Subject: [PATCH] Fix TCP status: report delta bytes per interval, not cumulative Was sending cumulative rx_bytes total which zigzagged because MikroTik interprets the value as per-interval bandwidth. Now tracks last_rx and sends (current - last) delta each second. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/server.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/server.rs b/src/server.rs index 211535a..f72551f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -445,13 +445,17 @@ async fn tcp_rx_loop(mut reader: tokio::net::tcp::OwnedReadHalf, state: Arc, ) { let mut seq: u32 = 0; + let mut last_rx: u64 = 0; let mut interval = tokio::time::interval(Duration::from_secs(1)); - interval.tick().await; // consume first immediate tick + interval.tick().await; while state.running.load(Ordering::Relaxed) { interval.tick().await; @@ -460,11 +464,13 @@ async fn tcp_status_sender( } seq += 1; - let rx_bytes = state.rx_bytes.load(Ordering::Relaxed); + let current_rx = state.rx_bytes.load(Ordering::Relaxed); + let delta = current_rx - last_rx; + last_rx = current_rx; let status = StatusMessage { seq, - bytes_received: rx_bytes as u32, + bytes_received: delta as u32, }; if writer.write_all(&status.serialize()).await.is_err() {