From 896aa30726234c8f50a9e5b11ab07fe5de510a4d Mon Sep 17 00:00:00 2001 From: lohhiiccc <96543753+lohhiiccc@users.noreply.github.com> Date: Wed, 18 Mar 2026 21:08:01 +0100 Subject: [PATCH] refactor: simplify tracker --- includes/internal/ping/tracker.h | 11 ++++------ includes/internal/ping/tracker_flags.h | 7 +++++++ src/ping/tracker/record_recv.c | 5 +++-- src/ping/tracker/record_send.c | 3 +-- tests/ping/tracker/test_tracker.c | 28 ++++++++++++-------------- 5 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 includes/internal/ping/tracker_flags.h diff --git a/includes/internal/ping/tracker.h b/includes/internal/ping/tracker.h index e42097b..dd0e49a 100644 --- a/includes/internal/ping/tracker.h +++ b/includes/internal/ping/tracker.h @@ -3,15 +3,15 @@ #include #include -#include #include -#define PING_TRACKER_SLOTS 128 +#include "internal/ping/tracker_flags.h" + +#define PING_TRACKER_SLOTS 128 struct ping_tracker_slot { struct timespec ts; - bool used; - bool acked; + uint8_t flags; }; struct ping_tracker { @@ -26,8 +26,5 @@ void ping_tracker_record_send(struct ping_tracker *t, uint16_t seq, const int64_t ping_tracker_record_recv(struct ping_tracker *t, uint16_t seq, const struct timespec *ts); -#define ping_tracker_sent(t) ((t)->nb_sent) -#define ping_tracker_recv(t) ((t)->nb_recv) -#define ping_tracker_lost(t) ((t)->nb_sent - (t)->nb_recv) #endif diff --git a/includes/internal/ping/tracker_flags.h b/includes/internal/ping/tracker_flags.h new file mode 100644 index 0000000..9359cda --- /dev/null +++ b/includes/internal/ping/tracker_flags.h @@ -0,0 +1,7 @@ +#ifndef PING_TRACKER_FLAGS_H +#define PING_TRACKER_FLAGS_H + +#define TRACKER_SLOT_USED (1 << 0) +#define TRACKER_SLOT_ACKED (1 << 1) + +#endif diff --git a/src/ping/tracker/record_recv.c b/src/ping/tracker/record_recv.c index 127be5a..f8e9974 100644 --- a/src/ping/tracker/record_recv.c +++ b/src/ping/tracker/record_recv.c @@ -8,9 +8,10 @@ ping_tracker_record_recv(struct ping_tracker *t, uint16_t seq, struct ping_tracker_slot *slot; slot = &t->slots[seq % PING_TRACKER_SLOTS]; - if (false == slot->used || true == slot->acked) + if ((slot->flags & (TRACKER_SLOT_USED | TRACKER_SLOT_ACKED)) + != TRACKER_SLOT_USED) return (-1); - slot->acked = true; + slot->flags |= TRACKER_SLOT_ACKED; t->nb_recv++; return (icmp_time_diff_ns(&slot->ts, ts)); } diff --git a/src/ping/tracker/record_send.c b/src/ping/tracker/record_send.c index a5280be..f0ea2d4 100644 --- a/src/ping/tracker/record_send.c +++ b/src/ping/tracker/record_send.c @@ -8,7 +8,6 @@ ping_tracker_record_send(struct ping_tracker *t, uint16_t seq, slot = &t->slots[seq % PING_TRACKER_SLOTS]; slot->ts = *ts; - slot->used = true; - slot->acked = false; + slot->flags = TRACKER_SLOT_USED; t->nb_sent++; } diff --git a/tests/ping/tracker/test_tracker.c b/tests/ping/tracker/test_tracker.c index c6524fd..f205cb7 100644 --- a/tests/ping/tracker/test_tracker.c +++ b/tests/ping/tracker/test_tracker.c @@ -17,9 +17,8 @@ Test(ping_tracker, init) struct ping_tracker t; ping_tracker_init(&t); - cr_assert_eq(ping_tracker_sent(&t), (size_t)0); - cr_assert_eq(ping_tracker_recv(&t), (size_t)0); - cr_assert_eq(ping_tracker_lost(&t), (size_t)0); + cr_assert_eq(t.nb_sent, (size_t)0); + cr_assert_eq(t.nb_recv, (size_t)0); } Test(ping_tracker, basic_send_recv) @@ -35,9 +34,8 @@ Test(ping_tracker, basic_send_recv) ping_tracker_record_send(&t, 1, &ts_send); rtt = ping_tracker_record_recv(&t, 1, &ts_recv); cr_assert_eq(rtt, (int64_t)10000000, "Expected RTT of 10ms in ns"); - cr_assert_eq(ping_tracker_sent(&t), (size_t)1); - cr_assert_eq(ping_tracker_recv(&t), (size_t)1); - cr_assert_eq(ping_tracker_lost(&t), (size_t)0); + cr_assert_eq(t.nb_sent, (size_t)1); + cr_assert_eq(t.nb_recv, (size_t)1); } Test(ping_tracker, double_recv_ignored) @@ -55,7 +53,7 @@ Test(ping_tracker, double_recv_ignored) cr_assert(rtt >= 0, "First recv should succeed"); rtt = ping_tracker_record_recv(&t, 5, &ts_recv); cr_assert_eq(rtt, (int64_t)-1, "Duplicate recv should return -1"); - cr_assert_eq(ping_tracker_recv(&t), (size_t)1); + cr_assert_eq(t.nb_recv, (size_t)1); } Test(ping_tracker, unknown_seq_returns_minus_one) @@ -97,9 +95,9 @@ Test(ping_tracker, lost_count) ping_tracker_record_send(&t, 2, &ts); ping_tracker_record_send(&t, 3, &ts); ping_tracker_record_recv(&t, 2, &ts); - cr_assert_eq(ping_tracker_sent(&t), (size_t)3); - cr_assert_eq(ping_tracker_recv(&t), (size_t)1); - cr_assert_eq(ping_tracker_lost(&t), (size_t)2); + cr_assert_eq(t.nb_sent, (size_t)3); + cr_assert_eq(t.nb_recv, (size_t)1); + cr_assert_eq(t.nb_sent - t.nb_recv, (size_t)2); } Test(ping_tracker, sent_count_increments) @@ -112,7 +110,7 @@ Test(ping_tracker, sent_count_increments) ping_tracker_record_send(&t, 1, &ts); ping_tracker_record_send(&t, 2, &ts); ping_tracker_record_send(&t, 3, &ts); - cr_assert_eq(ping_tracker_sent(&t), (size_t)3); + cr_assert_eq(t.nb_sent, (size_t)3); } Test(ping_tracker, recv_rtt_positive) @@ -148,8 +146,8 @@ Test(ping_tracker, slot_reuse_after_wraparound) ping_tracker_record_send(&t, 129, &ts_send); rtt = ping_tracker_record_recv(&t, 129, &ts_recv); cr_assert(rtt >= 0, "Second round RTT should be >= 0"); - cr_assert_eq(ping_tracker_sent(&t), (size_t)2); - cr_assert_eq(ping_tracker_recv(&t), (size_t)2); + cr_assert_eq(t.nb_sent, (size_t)2); + cr_assert_eq(t.nb_recv, (size_t)2); } Test(ping_tracker, full_buffer) @@ -162,6 +160,6 @@ Test(ping_tracker, full_buffer) ts = make_ts(0, 0); for (seq = 1; seq <= 128; seq++) ping_tracker_record_send(&t, seq, &ts); - cr_assert_eq(ping_tracker_sent(&t), (size_t)128); - cr_assert_eq(ping_tracker_recv(&t), (size_t)0); + cr_assert_eq(t.nb_sent, (size_t)128); + cr_assert_eq(t.nb_recv, (size_t)0); }