From 5aa28a11d6fe6bcfab46ac828aa48f90d55a0e39 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 20 Oct 2026 14:34:30 +0200 Subject: [PATCH] Register multicast protocol and core lifecycle --- src/transport_layer/etcp_api.h | 6 ++++-- src/utun_instance.c | 5 +++++ src/utun_instance.h | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/transport_layer/etcp_api.h b/src/transport_layer/etcp_api.h index d2d15cfd..84b2c341 100644 --- a/src/transport_layer/etcp_api.h +++ b/src/transport_layer/etcp_api.h @@ -38,14 +38,14 @@ extern "C" { // (raw-пространство) — помечены «(raw)»; их значения занимают raw-реестр. // // raw: 0x00 DATA, 0x01 TOPO_ENTRY, 0x02 NAT_DETECTION, 0x03 SVC_ROUTE, -// 0x04 NTP_TIME, 0x05 BROADCAST, 0x06 RADIO, 0x07 STREAM, 0x12 NCD_CONTROL, +// 0x04 NTP_TIME, 0x05 BROADCAST, 0x06 RADIO, 0x07 STREAM, 0x08 MULTICAST, 0x12 NCD_CONTROL, // 0x13 GROUP_INVITE, 0x20 DB_SYNC, 0x30 CHAT_SYNC, 0x31 MEMBER_SYNC // router: 0x00 DATA, 0x02 NAT, 0x04 TCP_PROXY_SERVER, 0x05 UDP_PROXY, // 0x06 ICMP_PROXY, 0x07 MEDIA_DELIVERY, 0x08 TCP_PROXY_CLIENT, // 0x11 CONN_MGR, 0x32 ADMIN_KEY, 0x33 JOIN, 0x34 DM, // 0x35 DM_MAILBOX, 0x36 CALL, 0x37 FILE_TRANSFER, 0x38 DM_MEDIA, 0x39 MEMBER_FILES, // 0x3A GROUP_AVATAR, 0x3B NAT_DETECTION, 0x3C STREAM, -// 0x3D CALL_VIDEO_CONTROL, 0x3E CALL_VIDEO, 0x3F CALL_AUDIO, 0x40 RADIO_CALL +// 0x3D CALL_VIDEO_CONTROL, 0x3E CALL_VIDEO, 0x3F CALL_AUDIO, 0x40 RADIO_CALL, 0x41 MULTICAST_REPORT // // !!! Новый ID: впиши его в нужный реестр выше и убедись, что значение // не занято в том же пространстве. @@ -60,6 +60,8 @@ extern "C" { #define ETCP_ID_BROADCAST 0x05 // broadcast-сообщения между пирами #define ETCP_ID_RADIO 0x06 // рация (PTT мультикаст голоса) между пирами #define ETCP_ID_STREAM 0x07 // прямой stream INFO/выдачи/DATA +#define ETCP_ID_MULTICAST 0x08 // адресный мультикаст с разделением по маршрутам группы +#define ETCP_RT_ID_MULTICAST_REPORT 0x41 // отчёты о переполнении multicast FIFO #define ETCP_RT_ID_STREAM 0x3C // stream REVERSE_REQ/CLOSED и помощь суперузлов через группу // === Router-сервисы (etcp_router_bind/etcp_route_send) === diff --git a/src/utun_instance.c b/src/utun_instance.c index 3aeb9644..5af85e5d 100644 --- a/src/utun_instance.c +++ b/src/utun_instance.c @@ -3,6 +3,7 @@ #include "chat/chat_local.h" #include "stream/stream.h" #include "etcp_router.h" +#include "multicast.h" #include "config_parser.h" #include "config_updater.h" #include "tun_if.h" @@ -251,6 +252,9 @@ static int instance_init_common(struct UTUN_INSTANCE* instance, struct UASYNC* u DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "Failed to initialize etcp_router"); return -1; } + if (multicast_init(instance) != 0) { + DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "Failed to initialize multicast"); return -1; + } /* NAT управляет пробами через router; binding создаётся после его инициализации. */ if (instance->topo_groups) { @@ -452,6 +456,7 @@ static void instance_destroy(struct UTUN_INSTANCE* instance, int owns_config) { } broadcast_destroy_instance(instance); radio_destroy_instance(instance); + multicast_destroy(instance); DEBUG_INFO(DEBUG_CATEGORY_SYS, "[DESTROY] F done — BGP + broadcast + radio"); /* Phase F2: NAT transport — отвязываем и закрываем nat_tun ДО разборки diff --git a/src/utun_instance.h b/src/utun_instance.h index d79ada61..1bff68db 100644 --- a/src/utun_instance.h +++ b/src/utun_instance.h @@ -54,6 +54,7 @@ struct radio_instance; /* radio/radio.c */ struct radio_call_context; /* radio/radio_call.c */ struct radio_headless; /* radio/radio_headless.c */ struct stream_service; /* stream/stream.c — подписки и публикация данных */ +struct multicast_ctx; /* routing_layer/multicast.c — общие FIFO и отчёты потерь */ struct uasync_s; struct ROUTE_TABLE; struct ETCP_CONN; @@ -223,6 +224,7 @@ struct UTUN_INSTANCE { // etcp_router bindings и seq-connections (per-instance service routing) struct ETCP_ROUTER_BINDINGS router_bindings; struct ll_queue* router_conns; + struct multicast_ctx* multicast; // принадлежит ядру, общий для всех topo-групп uint64_t router_loop_drops; // пакеты, вернувшиеся в уже посещённый узел uint64_t router_path_errors; // некорректный или переполненный список пройденных узлов struct CONN_MGR* conn_mgr; // заимствован у UTUN-группы; NULL при остановленном UTUN