You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.6 KiB
6.6 KiB
etcpmon
1. Назначение
Windows GUI монитор для ETCP соединений uTun в реальном времени (100ms refresh). Подключается по TCP к control_server внутри uTun и отображает метрики соединений, линков, TUN-интерфейса, роутера и дебаг-уровней. Позволяет менять debug levels на лету через GUI.
2. Как пользоваться
Типовой сценарий
- В конфиге uTun (
utun.conf):control_ip=127.0.0.1,control_port=9090 - Запустить uTun → он поднимает TCP control server на указанном порту
- Запустить
etcpmon.exe(Windows, MinGW/MSYS2 сборка) - Ввести IP:порт сервера (по умолчанию
192.168.40.1:9091), нажать Connect - Выбрать соединение из списка Connections — начнут поступать метрики
Что отображает
ETCP Connection:
- RTT (last / avg10 / avg100, в 0.1ms), jitter, bytes sent, retransmissions, ACKs, unacked bytes, optimal inflight, links count
- RX/TX дубликаты, таймеры (retrans/ack_resp), WaitAck состояние (suspended/cb/timer)
- ID Sequence: next_tx_id, last_rx_id, last_delivered_id, rx_ack_till
- Счётчики ошибок: reinit, reset, pkt_format_errors
TUN / Routing:
- Bytes/packets read/written, ошибки чтения/записи
- Routed/dropped пакеты, TUN очереди (InQ/OutQ packets/bytes)
- Таблица маршрутов: total, local, learned, BGP senders, BGP nodes
Links:
- Статус (UP/DOWN), encrypt/decrypt/send/recv ошибки
- Total encrypted/decrypted bytes, bandwidth (Kbps), NAT changes
- RTT (last/avg10), transmit time, keepalive counters (sent/recv)
- Inflight bytes/packets/limit, таймеры (init/keepalive/shaper)
BBR per link:
- mode (STARTUP/DRAIN/PROBE_BW/PROBE_RTT), cycle idx, full_bw/loss_in_round флаги
- pacing_rate (bytes/sec), min_rtt (us), bw_hi/bw_lo (bytes/sec), inflight_hi/lo, pacing_gain
Router Congestion (агрегированные):
- total_conns, total_inflight, total_send_q, total_recv_q
- pkts sent/recv, send err, ACK sent/recv, dup_dropped, oob_dropped, stale_ack, sign_fail
- RTT max/avg, jitter max, minRTT min
Графики BBR (scrolling canvas, 860 сэмплов, 1px=1sample):
- Inflight Bytes, Cwnd (inflight_lim), minRTT, bwHi, Pacing Rate, bwLo, inflight Hi, BBR Mode
- 8 каналов с индивидуальными галочками включения
- Вертикальная линия курсора с показом значений в блоках под графиком
Очереди (Queues & Errors):
- InQ, InSend, WaitAck, AckQ, RecvQ, OutQ — bytes/packets
- Нормализатор: input/output pkts/bytes, alloc/logic errors, frag_size, data_ptr/size, cumulative totals
- ACK Debug: hit_inf, hit_sndq, miss, link_wait
- Системные ресурсы: active_timeouts, busy_memory_blocks
Debug Levels (правая колонка):
- Глобальный уровень: NONE/ERROR/WARN/INFO/DEBUG/TRACE (радиокнопки)
- Per-category уровни с метками категорий
- Radio-кнопки отправляют CMD_SET_DEBUG_CONFIG на сервер при клике
Action:
- Текстовое поле + кнопка Send — отправка произвольной команды (CMD_ACTION)
- Результат открывается в отдельном окне с моноширинным шрифтом Consolas
Сборка
cd tools\etcpmon
build.bat # через MSYS2 UCRT64 (рекомендуется)
bash build.sh # Unix/MinGW
make # MinGW Makefile
Серверная часть (control_server) встроена в utun, собирается стандартным ./configure && make.
Горячие клавиши
- Tab в поле Server/Port — переключение между полями
- Enter в поле Server/Port — Connect/Disconnect
- Enter в поле Action — отправка команды
3. API / Структура
Компоненты
| Файл | Назначение |
|---|---|
etcpmon_main.c |
WinMain: инициализация GUI, создание окна, message loop |
etcpmon_client.h/c |
TCP клиент (Winsock2): connect, send/recv, парсинг протокола, history, pending requests с коллбэками |
etcpmon_gui.h/c |
WinAPI GUI: окно 1000×1400, все контролы (~200 edit-полей, списки, кнопки, radio, graph), тултипы |
etcpmon_graph.h/c |
Real-time график: 8 каналов, off-screen буфер, пересчёт min/max, курсор, обновление channel values |
etcpmon_protocol.h |
Бинарный протокол, общие структуры, shared между клиентом и сервером |
Протокол (бинарный, TCP)
Формат: [size:2][type:1][seq_id:1][payload...]
Клиент → Сервер:
0x01CMD_LIST_CONN — запрос списка соединений (без payload)0x02CMD_SELECT_CONN — выбор соединения:peer_node_id(uint64_t)0x03CMD_GET_METRICS — запрос метрик для выбранного соединения0x04CMD_DISCONNECT — отключение0x05CMD_LIST_SOCKETS — запрос списка локальных сокетов0x06CMD_ACTION — текстовая команда (32 байта)0x07CMD_GET_DEBUG_CONFIG — запрос текущих debug levels0x08CMD_SET_DEBUG_CONFIG — установка debug levels:[global_level:1][cat_count:1][levels:N]0x09CMD_SUBSCRIBE_NODES — подписка на изменения узлов (topo)
Сервер → Клиент:
0x81RSP_CONN_LIST:count(1) + N × {peer_node_id(8) + name(32)}0x82RSP_METRICS:etcp_metrics + tun_metrics + router_metrics + N × link_metrics0x83RSP_SOCKET_LIST:count(1) + N × socket_info0x84RSP_DEBUG_CONFIG:global_level(1) + cat_count(1) + names_csv(NUL-term) + levels[N]0x85RSP_NODE_INFO — один узел (raw BGP_NODEINFO_PACKET)0x86RSP_NODE_INFO_END — конец списка узлов0x88RSP_NODE_REMOVED — узел удалён:node_id(8)0x89RSP_ACTION_RESULT — результат команды:code(1) + text(NUL-term)0xFFRSP_ERROR:error_code(1) + message(NUL-term)