Align ETCP header declarations, timestamp units and UDP contracts with code
This commit is contained in:
1 parent
299c613760
commit
ee437b9473
2 files changed
+12
-14
No files matched your search
@@ -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
|
||||
// для очередей используется формат
|
||||
|
||||
@@ -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);
|
||||
|
||||
// ── Внутренние измерения пропускной способности ──
|
||||
|
||||
Reference in new issue
Block a user