Record routing audit progress and NODEINFO parsing defect

This commit is contained in:
evgeny committed 2026-10-24 12:42:47 +02:00
1 parent bf03348c64
commit 5f51149622
2 files changed
+26 -2

No files matched your search

+22
View File
@@ -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.
+4 -2
View File
@@ -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);