Files
utun2/tools/etcpmon/IMPLEMENTATION.md
T

2.8 KiB

Устройство etcpmon

Действующие контракты и использование описаны в etcpmon_doc.md, API — в etcpmon_client.h, etcpmon_gui.h, etcpmon_graph.h и etcpmon_protocol.h. Серверная реализация: src/control_server.c/h и control_server_doc.md.

WinMain создаёт etcpmon_app, инициализирует Winsock/классы окон, создаёт окно и запускает message loop. Таймер GUI вызывает неблокирующий etcpmon_client_process(); фонового сетевого потока нет. Client завершает connect, разбирает TCP-кадры, обновляет кеши и вызывает GUI callbacks. Сэмпл истории добавляет только парсер ответа метрик; GUI отображает уже сохранённую историю.

Все команды клиента проходят через один TX FIFO с лимитом 64 КиБ/256 кадров и смещением досылки. Pending с ненулевым seq регистрируется вместе с кадром, но срок ответа начинается после полной отправки. Тип и payload ответа проверяются до снятия pending и вызова callback.

Сервер использует ll_queue с одним кадром до 32 КиБ и отдельным смещением частичной отправки. Чтение/разбор команд ждут пустой очереди через отменяемый deferred waiter. Начальная подписка хранит ID узлов и сериализует актуальную запись при освобождении TX; live-изменения объединяются в ограниченном наборе из 256 ID. Переполнение отключает подписчика с диагностикой. Перед освобождением клиента отменяются таймер и waiter, затем освобождаются снимок и очередь. Метрики выдаются по запросу, а сообщения об узлах UTUN — только после явной подписки другого клиента; сам GUI etcpmon подписку не использует.

Проверки клиента: make -C tools/etcpmon CC=x86_64-w64-mingw32-gcc TEST_RUNNER=wine check. Проверки серверных очередей/cleanup/метрик: цель test_control_server из tests/Makefile.am. Они проверяют разные стороны протокола и не заменяют интеграционный запуск клиента с сервером.