Files
utun2/src/routing_layer/route_tx_stats.h
T

34 lines
1.3 KiB
C

/* Учёт первой доставки payload логического канала. Один uasync-поток.
* Десять завершённых интервалов по 50мс и текущий интервал; reset начинает новую историю.
* Повторы учитывает вызывающий: add вызывается только при снятии подтверждённого inflight. */
#ifndef ROUTE_TX_STATS_H
#define ROUTE_TX_STATS_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define ROUTE_TX_SAMPLE_US 50000u
#define ROUTE_TX_WINDOW_US 500000u
#define ROUTE_TX_BUCKETS 11
struct route_tx_bucket { uint64_t tick_plus_one, bytes, packets; };
struct route_tx_meter {
struct route_tx_bucket buckets[ROUTE_TX_BUCKETS];
uint64_t started_us, last_us, bytes, packets;
};
struct route_tx_window { uint64_t end_us, bytes, packets; int valid; };
void route_tx_meter_reset(struct route_tx_meter *meter, uint64_t now_us);
int route_tx_meter_ack(struct route_tx_meter *meter, uint64_t now_us, uint64_t bytes);
/* Неполное окно после reset возвращает valid=0; текущая незавершённая ячейка исключается. */
int route_tx_meter_window(const struct route_tx_meter *meter, uint64_t now_us, struct route_tx_window *out);
#ifdef __cplusplus
}
#endif
#endif