diff --git a/doc/tasks.md b/doc/tasks.md index be8d3ef0..5c2f3e21 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,28 @@ ## Текущие задачи +[ ] **Routing: согласовать обход секции подсетей в topo_node_deserialize с wire-размером**. + 24.10.2026, продолжение аудита: при flags=0, local_v4_subnets=1, hop_count=1 размер равен header+8, + но ветка без TOPO_FLAG_SEND_SUBNETS сдвигает dp ещё на 5 байт. Копирование hop-list читает за len. + Воспроизведение на собранной библиотеке: заданный hop 11 11 11 11 11 11 11 11 превращается в + 11 11 11 aa aa aa aa aa; пять aa находятся после переданной длины. deserialize возвращает 0. + Причина: topo_node_dyn_size не включает подсети без флага, а deserialize всё равно пропускает их. + Нужно согласовать serializer/размер/parser: при снятом флаге секции на wire нет; счётчики должны + быть нулевыми либо явно игнорироваться без сдвига. При установленном флаге обход секции не должен + зависеть от наличия out_subnets. Добавить регрессии границ буфера и обоих режимов out_subnets. + Дальнейший аудит остановлен по AGENTS.md; parser не менялся. + Воспроизведение: /tmp/routing-audit-deserialize-repro.c; лог: /tmp/routing-audit-deserialize-repro.log. + +[+] **Routing: запретить пересекающиеся IPv4-подсети при вставке route_lib**. + 24.10.2026: по решению пользователя сохранён запрет пересечений. Весь входной набор проверяется + до изменения таблицы, включая внутренние конфликты; /0..32, нормализация host-битов, отказ атомарный. + Поиск упрощён для непересекающихся диапазонов; добавлены проверки /0, /31, /32 и границ. + Новые проверки на старой библиотеке: 5/8 PASS; после исправления: 8/8 PASS, IPv6: 11/11 PASS. + Убрано объявление несуществующей route_add_local_subnet; исправлены wire/API route_ping и + описание выбора сокетов, TCP/UDP-проб, отмены и владения в заголовках routing helpers. + Полный check.sh: 184/184 PASS, proxy 9/9, burst 1/1, load 8/8 (134217728 байт), 196с. + Лог: /tmp/routing-audit-full-check.log; результаты аудита: /tmp/routing-doc-audit-report.txt. + [ ] **ETCP: полезная утилизация нескольких каналов и доставка при зависании части линков** — общая задача открыта. 24.10.2026: тесты отдельно проверяют обработку RTO (опоздание<=20мс), ожидание готового повтора (<=100мс) и доставку сверх заданной задержки канала (<=100мс). TX учитывается после принятия send. diff --git a/src/routing_layer/routing.h b/src/routing_layer/routing.h index 49c73adc..82eaf495 100644 --- a/src/routing_layer/routing.h +++ b/src/routing_layer/routing.h @@ -33,7 +33,7 @@ int routing_create(struct UTUN_INSTANCE* instance); int routing_bind(struct UTUN_INSTANCE* instance); /** - * @brief Destroy routing module for instance + * @brief Снять DATA binding и освободить IPv4-таблицу; callback TUN снимается при остановке самого TUN * @param instance UTUN instance */ void routing_destroy(struct UTUN_INSTANCE* instance); @@ -58,7 +58,9 @@ void routing_del_conn(struct ETCP_CONN* etcp); void routing_set_tun(struct UTUN_INSTANCE* instance); /** - * @brief Route a single packet (exposed for NAT module interception) + * @brief Маршрутизировать [cmd:1][IPv4] в TUN либо через TOPO_GROUP_UTUN; требует готовых instance->rt/tun + * @param entry Передаваемые entry и dgram: модуль забирает владение при любом исходе + * @param src_node_id Исходный узел для диагностики, для выхода из TUN — instance->node_id */ void route_pkt(struct UTUN_INSTANCE* instance, struct ll_entry* entry, uint64_t src_node_id);