#ifndef PING_TRACKER_H #define PING_TRACKER_H #include #include #include #include #define PING_TRACKER_SLOTS 128 typedef struct s_ping_tracker_slot { struct timespec ts; bool used; bool acked; } t_ping_tracker_slot; typedef struct s_ping_tracker { t_ping_tracker_slot slots[PING_TRACKER_SLOTS]; size_t nb_sent; size_t nb_recv; } t_ping_tracker; void ping_tracker_init(t_ping_tracker *t); void ping_tracker_record_send(t_ping_tracker *t, uint16_t seq, const struct timespec *ts); int64_t ping_tracker_record_recv(t_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