diff --git a/src/transport_layer/dummynet.c b/src/transport_layer/dummynet.c index 233a3ce4..46e9a783 100644 --- a/src/transport_layer/dummynet.c +++ b/src/transport_layer/dummynet.c @@ -20,12 +20,8 @@ #include "../lib/mem.h" /* Timebase: 0.1 мс */ -#define TIMEBASE_US 100 #define MS_TO_TB(ms) ((ms) * 10) -/* Burst allowance для shaper (в timebase units) */ -#define SHAPER_BURST_TB 10 - /* Debug category */ #define DEBUG_CATEGORY_DUMMYNET DEBUG_CATEGORY_ETCP @@ -229,6 +225,7 @@ static void dummynet_read_callback(socket_t sock, void* user_arg) { struct ll_entry* entry = queue_entry_new_from_pool(dn->pkt_pool); if (!entry) { DEBUG_ERROR(DEBUG_CATEGORY_DUMMYNET, "Failed to allocate packet entry"); + dir->stats.dropped++; return; } @@ -440,6 +437,7 @@ int dummynet_set_direction(struct dummynet* dn, int direction, uint32_t loss_permille, const char* dest_ip, uint16_t dest_port) { if (!dn || direction < 0 || direction >= DUMMYNET_DIR_COUNT) { + DEBUG_ERROR(DEBUG_CATEGORY_DUMMYNET, "Invalid direction: %d", direction); return -1; } diff --git a/src/transport_layer/dummynet.h b/src/transport_layer/dummynet.h index 8155b2c4..734bf736 100644 --- a/src/transport_layer/dummynet.h +++ b/src/transport_layer/dummynet.h @@ -62,8 +62,8 @@ enum dummynet_mode { struct dummynet_stats { uint64_t recv; // Принято пакетов uint64_t sent; // Отправлено пакетов - uint64_t dropped; // Дропнуто (queue full) - uint64_t lost; // Потеряно случайно (random loss) + uint64_t dropped; // Переполнение очереди, отказ выделения/таймера или ошибка отправки + uint64_t lost; // Случайные потери и DROP uint64_t recv_bytes; // Принято UDP-байт, без IP/UDP заголовков uint64_t sent_bytes; // Передано UDP-байт, включая протокольные накладные расходы ETCP uint64_t blocked; // Пакетов отброшено режимом DROP (включены в lost) @@ -103,7 +103,7 @@ void dummynet_destroy(struct dummynet* dn); * @param delay_fixed_ms Фиксированная задержка (мс) * @param delay_random_ms Случайная составляющая задержки (0..random_ms, мс) * @param bandwidth_kbps Пропускная способность (кбит/с, 0 = unlimited) - * @param max_queue_pkts Максимальный размер очереди (пакетов) + * @param max_queue_pkts Максимум всех ожидающих пакетов, включая delay/HOLD; 0 отбрасывает все * @param loss_permille Вероятность потери пакета (0.1%, 0-1000) * @param dest_ip IP адрес назначения * @param dest_port Порт назначения @@ -192,6 +192,7 @@ struct dummynet_filter; struct dummynet_filter* dummynet_filter_create(struct UASYNC* ua); void dummynet_filter_set_loss(struct dummynet_filter* df, uint32_t loss_permille); +// Пока только сохраняет параметры; inline-фильтр задержку не применяет. Для RTT использовать UDP dummynet. void dummynet_filter_set_delay(struct dummynet_filter* df, uint32_t delay_ms, uint32_t jitter_ms); void dummynet_filter_attach(struct dummynet_filter* df, struct ETCP_LINK* link); void dummynet_filter_detach(struct dummynet_filter* df);