refactor: simplify tracker
This commit is contained in:
parent
07588298cd
commit
896aa30726
5 changed files with 28 additions and 26 deletions
|
|
@ -3,15 +3,15 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include <time.h>
|
||||
|
||||
#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
|
||||
|
|
|
|||
7
includes/internal/ping/tracker_flags.h
Normal file
7
includes/internal/ping/tracker_flags.h
Normal file
|
|
@ -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
|
||||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue