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

etcpmon

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

Windows GUI монитор для ETCP соединений uTun в реальном времени (100ms refresh). Подключается по TCP к control_server внутри uTun и отображает метрики соединений, линков, TUN-интерфейса, роутера и дебаг-уровней. Позволяет менять debug levels на лету через GUI.

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

Типовой сценарий

  1. В конфиге uTun (utun.conf): control_ip=127.0.0.1, control_port=9090
  2. Запустить uTun → он поднимает TCP control server на указанном порту
  3. Запустить etcpmon.exe (Windows, MinGW/MSYS2 сборка)
  4. Ввести IP:порт сервера (по умолчанию 192.168.40.1:9091), нажать Connect
  5. Выбрать соединение из списка 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...]

Клиент → Сервер:

  • 0x01 CMD_LIST_CONN — запрос списка соединений (без payload)
  • 0x02 CMD_SELECT_CONN — выбор соединения: peer_node_id (uint64_t)
  • 0x03 CMD_GET_METRICS — запрос метрик для выбранного соединения
  • 0x04 CMD_DISCONNECT — отключение
  • 0x05 CMD_LIST_SOCKETS — запрос списка локальных сокетов
  • 0x06 CMD_ACTION — текстовая команда (32 байта)
  • 0x07 CMD_GET_DEBUG_CONFIG — запрос текущих debug levels
  • 0x08 CMD_SET_DEBUG_CONFIG — установка debug levels: [global_level:1][cat_count:1][levels:N]
  • 0x09 CMD_SUBSCRIBE_NODES — подписка на изменения узлов (topo)

Сервер → Клиент:

  • 0x81 RSP_CONN_LIST: count(1) + N × {peer_node_id(8) + name(32)}
  • 0x82 RSP_METRICS: etcp_metrics + tun_metrics + router_metrics + N × link_metrics
  • 0x83 RSP_SOCKET_LIST: count(1) + N × socket_info
  • 0x84 RSP_DEBUG_CONFIG: global_level(1) + cat_count(1) + names_csv(NUL-term) + levels[N]
  • 0x85 RSP_NODE_INFO — один узел (raw BGP_NODEINFO_PACKET)
  • 0x86 RSP_NODE_INFO_END — конец списка узлов
  • 0x88 RSP_NODE_REMOVED — узел удалён: node_id(8)
  • 0x89 RSP_ACTION_RESULT — результат команды: code(1) + text(NUL-term)
  • 0xFF RSP_ERROR: error_code(1) + message(NUL-term)