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.
4.4 KiB
4.4 KiB
Control Server (control_server)
1. Назначение
TCP-сервер для мониторинга ETCP-соединений. Принимает подключения от GUI-клиента etcpmon, отдаёт по запросу метрики соединений/каналов/TUN/роутера, список узлов BGP-топологии, позволяет менять уровни отладки на лету. Уведомляет подписанных клиентов об изменениях узлов через control_server_notify_node_change().
2. Как пользоваться
- Вызвать
control_server_init()— создаёт слушающий TCP-сокет на адресе из конфигаcontrol_sock, регистрирует accept-колбэк в uasync. - Периодически вызывать
control_server_process_updates()для обработки накопившихся данных клиентов. - При изменении/удалении узла BGP-топологии вызывать
control_server_notify_node_change()/control_server_notify_node_removed()— сервер сам разошлёт уведомления подписанным клиентам. - При остановке вызвать
control_server_shutdown().
Нюансы:
- Доступ по IP контролируется через
control_allowв конфиге (белый список); без правил доступ запрещён. - Клиенты отключаются по idle-таймауту (300 секунд без команд).
- Лог пишется в
control_server.log(полные дампы RX/TX).
3. API
Структуры
| Структура | Назначение |
|---|---|
struct control_server |
Состояние сервера: listen_fd, связный список clients, uasync-контекст, счётчик клиентов. |
struct control_client |
Состояние клиента: fd, буфер приёма (recv_buffer), output_queue для асинхронной отправки, selected_peer_id, флаг подписки на узлы. |
Функции
| Функция | Назначение |
|---|---|
control_server_init(server, ua, instance, bind_addr, max_clients) |
Создать слушающий сокет, зарегистрировать в uasync. Возвращает 0 / -1. |
control_server_shutdown(server) |
Закрыть всех клиентов, освободить слушающий сокет, закрыть лог-файл. |
control_server_process_updates(server) |
Обработать накопившиеся данные всех клиентов (вызывать периодически). |
control_server_get_client_count(server) |
Вернуть количество подключённых клиентов. |
control_server_notify_node_change(server, node) |
Разослать подписанным клиентам сериализованную информацию об узле. |
control_server_notify_node_removed(server, node_id) |
Разослать подписанным клиентам уведомление об удалении узла. |
Поддерживаемые команды ETCPMON
| Команда | Ответ | Описание |
|---|---|---|
CMD_LIST_CONN |
RSP_CONN_LIST |
Список активных ETCP-соединений. |
CMD_SELECT_CONN |
— | Выбрать соединение по peer_node_id для метрик. |
CMD_GET_METRICS |
RSP_METRICS |
Полные метрики: ETCP, TUN, router, все каналы с BBR. |
CMD_LIST_SOCKETS |
RSP_SOCKET_LIST |
Список локальных сокетов с NAT-типом и NAT-адресом. |
CMD_ACTION |
RSP_ACTION_RESULT |
"nat" — запрос NAT-проверки; "nodes" — дамп BGP-узлов текстом. |
CMD_GET_DEBUG_CONFIG |
RSP_DEBUG_CONFIG |
Текущие уровни отладки (глобальный + по категориям). |
CMD_SET_DEBUG_CONFIG |
— | Установить уровни отладки. |
CMD_SUBSCRIBE_NODES |
RSP_NODE_INFO (список) + RSP_NODE_INFO_END |
Подписка на изменения узлов + текущий список. |
CMD_DISCONNECT |
— | Отключение клиента. |