Document emulator queue bounds and account for allocation failures

This commit is contained in:
evgeny committed 2026-10-22 23:33:14 +02:00
1 parent 67322582f6
commit 8417b1955c
2 files changed
+6 -7

No files matched your search

+2 -4
View File
@@ -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;
}
+4 -3
View File
@@ -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);