Files
utun2/src/transport_layer/etcp_debug_doc.md
T
evgeny 38c9f229bc stcp: ed25519 pubkey exchange in handshake, fix instance destroy segfault, fix chat_tcp_test
- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll
- stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close
- utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP),
  add deferred drain in both Phase J and L
- stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39,
  exchange ed25519_pubkey in both handshake directions
- etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in
  etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb
- chat_sync.c: fix lk->conn NULL dereference for TCP links
- test_stcp.c: update stcp_server_create/stcp_client_connect callsites
- tools/chat_tcp_test: change transport udp→tcp
2026-08-07 00:48:27 +03:00

1.9 KiB

ETCP Packet Section Dump (etcp_debug)

1. Назначение

Вывод в лог человекочитаемой сводки по ETCP-пакету: направление (SEND/RECV), timestamp, и содержимое каждой секции — ACK (last_delivered, count, rx_dup), CH_TS (возвращаемый и принимаемый channel timestamp), PAYLOAD (размер и seq). Используется для отладки трафика на уровне отдельных пакетов.

2. Как пользоваться

#include "etcp_debug.h"

// В обработчике отправки/приёма пакета:
etcp_dump_pkt_sections(pkt, link, 1);  // is_send=1 — отправка
etcp_dump_pkt_sections(pkt, link, 0);  // is_send=0 — приём

Вывод идёт через DEBUG_INFO(DEBUG_CATEGORY_DUMP, ...). Для включения:

debug = dump=info

Вспомогательная функция

IP_STR ip = ip_to_string(0x0A000001);
// ip.a == "10.0.0.1"

3. API

IP_STR ip_to_string(uint32_t ip) — конвертирует IP (network byte order) в строку a.b.c.d. Возвращает структуру с буфером 16 байт.

void etcp_dump_pkt_sections(struct ETCP_DGRAM* pkt, struct ETCP_LINK* link, int is_send) — парсит pkt->data побайтово и выводит сводку секций: ETCP_SECTION_ACK (last_delivered, count, rx_dup_count), ETCP_SECTION_TIMESTAMP (ret_ts/recv_ts), ETCP_SECTION_PAYLOAD (size, seq). Неизвестные секции прерывают парсинг. Формат вывода:

ETCP PKT: SEND ts=12345 ack=100/5 dup=0 ch_ts=200/150 payload=1200(seq=101)

Зависимости

  • etcp_connections.h — struct ETCP_DGRAM, struct ETCP_LINK
  • etcp.h — константы ETCP_SECTION_*
  • lib/debug_config.h — DEBUG_INFO(DEBUG_CATEGORY_DUMP, ...)