Document emulator queue bounds and account for allocation failures
This commit is contained in:
1 parent
67322582f6
commit
8417b1955c
2 files changed
+6
-7
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user