# ETCP Packet Section Dump (etcp_debug) ## 1. Назначение Вывод в лог человекочитаемой сводки по ETCP-пакету: направление (SEND/RECV), timestamp, и содержимое каждой секции — ACK (last_delivered, count, rx_dup), CH_TS (возвращаемый и принимаемый channel timestamp), PAYLOAD (размер и seq). Используется для отладки трафика на уровне отдельных пакетов. ## 2. Как пользоваться ```c #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 ``` ### Вспомогательная функция ```c 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, ...)`