Align ETCP header declarations, timestamp units and UDP contracts with code

This commit is contained in:
evgeny committed 2026-10-24 00:06:45 +02:00
1 parent 299c613760
commit ee437b9473
2 files changed
+12 -14

No files matched your search

-2
View File
@@ -322,8 +322,6 @@ void etcp_conn_fatal_reinit(struct ETCP_CONN* etcp, const char* reason);
* Нулевая и прежняя эпохи игнорируются. Сброс при смене выполняется после CONFIRM, своя эпоха сохраняется. Возврата нет. */
void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_reset_id);
void etcp_connection_ready(struct ETCP_CONN* etcp);// вызывается когда подключение инициализировано
// Отправка: используем api ll_queue для очереди ETCP_CONN.input_queue
// Прием: используем api ll_queue для очереди ETCP_CONN.output_queue
// для очередей используется формат
+12 -12
View File
@@ -69,7 +69,7 @@ extern "C" {
#pragma pack(push, 1)
struct ETCP_DGRAM {// пакет (незашифрованный)
struct ETCP_LINK* link;// откуда получена или куда отправялем
uint16_t data_len;// общий размер пакета не включая timestamp
uint16_t data_len;// длина data, включая открытый хвост; без timestamp/flag_up
uint16_t noencrypt_len;// число байт (с конца) которые не надо шифровать. для передачи pubkey
uint16_t payload_len; // локальные метаданные request_pkt: DATA-байты; 0 — только ACK/control/FILLER, вне DATA-pacing
struct ETCP_TX_ATTEMPT* attempt; // локальный резерв окна; complete снимает/фиксирует его после send
@@ -81,7 +81,7 @@ struct ETCP_DGRAM {// пакет (незашифрованный)
};
#pragma pack(pop)
// Размер зашифрованного заголовка ETCP_DGRAM (timestamp + flag_up + padding)
// Размер зашифрованного заголовка ETCP_DGRAM: timestamp(2) + flag_up(1).
#define ETCP_ENCRYPTED_HDR_SIZE (offsetof(struct ETCP_DGRAM, data) - offsetof(struct ETCP_DGRAM, timestamp))
// Размер базового ACK: type(1) + count(1) + last_delivered_id(4) + rx_dup_count(2)
@@ -95,6 +95,7 @@ static inline unsigned etcp_ack_section_size(uint8_t count) {
// INIT внутри шифрованного тела, до padding: запрос — 67 байт, ответ — 64 байта.
// Каждая сторона передаёт свою эпоху reset_id; смена известной эпохи подтверждается через etcp_session.
// В обоих направлениях до изменения состояния отклоняются link_id=0 и mtu<ETCP_MIN_UDP_MTU(family); mtu>1500 ограничивается.
// INIT REQUEST: client → server. До изменения транспорта проверить 67-байтовое тело и node_id по X25519-ключу; padding допустим.
struct ETCP_INIT_REQUEST_PKT {
@@ -206,7 +207,7 @@ struct ETCP_SOCKET {
#define LINK_STATE_CONNECTED 3
// Тип функции-перехватчика отправки UDP.
// Если link->send_hook != NULL, etcp_udp_send вызывает её вместо socket_sendto.
// etcp_udp_send вызывает hook вместо socket_sendto; SOCKS5-релей сокета имеет приоритет над hook.
struct ETCP_LINK;
typedef ssize_t (*etcp_udp_send_fn_t)(socket_t fd, const void* buf, size_t len,
const struct sockaddr* addr, socklen_t addr_len,
@@ -227,7 +228,7 @@ struct ETCP_LINK {
// Параметры соединения
uint16_t mtu; // MTU общий
uint16_t mtu_local; // MTU моего зла
uint16_t mtu_local; // MTU локального узла
uint16_t mtu_remote; // MTU удаленного узла
uint16_t keepalive_interval; // Keepalive интервал (x1ms)
uint32_t recovery_interval; // recovery интервал (x0.1ms)
@@ -247,7 +248,7 @@ struct ETCP_LINK {
// Состояние установки соединения (только для клиентов)
void* init_timer; // Таймер для повторов INIT (NULL=не подключается)
uint16_t init_timeout; // Текущий таймаут в мс
uint16_t init_timeout; // Интервал повторов INIT, x0.1 мс: от 500 (50 мс) до 50000 (5 с)
uint16_t init_retry_count; // Счетчик попыток
// uint64_t last_activity; // Время последней активности
@@ -288,8 +289,8 @@ struct ETCP_LINK {
uint16_t rtt_last; // round trip (время отправки + приёма)
uint32_t jitter; // Current jitter [>>16] x0.1 ms
// rtt_avg10 удалён — заменён BBR (bbr->min_rtt_us/100)
uint32_t recv_dt_avg_tx; // дельта времени для отправленных пакетов (относительное время отправки) x256
uint32_t recv_dt_avg_rx; // дельта времени для принятых пакетов (относительное время отправки) x256
uint32_t recv_dt_avg_tx; // EWMA поправки TX timestamp, Q16 в единицах 0.1 мс, арифметика по модулю 2^32
uint32_t recv_dt_avg_rx; // EWMA поправки RX timestamp, тот же формат; используется для оценки rt_last
uint16_t tt_last; // transmit time (время доставки отправленных пакетов)
uint16_t rt_last; // recv time (время доставки принятых пакетов)
@@ -358,7 +359,7 @@ struct ETCP_LINK {
uint32_t bbr_pacing_rate; // Точный pacing B/s; менять через set_pacing_rate для пересчёта долга/таймера
uint32_t bbr_loss_since_ack; // счётчик потерь на линке с последнего ACK (для rs->lost)
etcp_udp_send_fn_t send_hook; // NULL = socket_sendto напрямую
etcp_udp_send_fn_t send_hook; // Перехват прямого UDP; NULL = socket_sendto, SOCKS5 имеет приоритет
void* send_hook_ctx;
struct sockaddr_storage local_bound_addr; // локальный адрес к которому привязан линк (interface_addr на момент создания)
@@ -372,7 +373,7 @@ struct ETCP_LINK {
// ── Внутренняя отправка пакетов ──
// Единая точка отправки всех ETCP-пакетов.
// Отправить UDP: SOCKS5 сокета, иначе send_hook, иначе socket_sendto. Возвращает число байт или -1.
ssize_t etcp_udp_send(struct ETCP_LINK* link, socket_t fd, const void* buf, size_t len,
const struct sockaddr* addr, socklen_t addr_len);
@@ -445,9 +446,8 @@ struct ETCP_LINK* etcp_link_find_by_addr(struct ETCP_SOCKET* e_sock, const struc
struct ETCP_LINK* etcp_select_collision_link(struct ETCP_CONN* conn, struct ETCP_SOCKET* e_sock,
const struct sockaddr_storage* addr);
// find free local_link_id for connection
// scans all links in connection, marks used ids in bit array
// returns first free id (0-255) or -1 if all occupied
// Выбрать свободный local_link_id в 1..255 циклически после last_assigned_link_id; 0 зарезервирован.
// Помечает ID имеющихся линков в битовой карте; возвращает ID или -1, если свободных нет.
int etcp_find_free_local_link_id(struct ETCP_CONN* etcp);
// ── Внутренние измерения пропускной способности ──