Commit Graph
1659 Commits
Author SHA1 Message Date
jeka 61d575f09b logs 2026-03-03 15:15:34 +03:00
jeka 2f06979f17 r 2026-03-02 22:05:21 +03:00
jeka c271084d35 tun/win шлёт в routing. 2026-03-02 20:22:34 +03:00
jeka 136a3642c0 1 2026-03-01 17:57:24 +03:00
jeka a37d343410 1 2026-03-01 17:55:33 +03:00
jeka 783f229711 obf 2026-03-01 17:19:47 +03:00
jeka c420b8f18e пердайт icmp в tun 2026-03-01 02:48:03 +03:00
jeka 06f58f5e2e Fix: Add ifindex field for Linux
- Move ifindex field outside WIN32 conditional block
- Initialize ifindex in Linux tun_platform_init()
2026-02-28 16:31:04 +03:00
jeka fc32d756e6 Fix: Suppress netsh output 2026-02-28 16:23:23 +03:00
jeka 9269bc9c61 Fix: Delete system routes on shutdown
- Add tun_route_del_all() to delete routes from config
- Use netsh for route deletion on Windows (like add)
- Store route_subnets in UTUN_INSTANCE for cleanup
- Delete routes in utun_instance_destroy() before tun_close()
2026-02-28 16:20:16 +03:00
jeka 3945ff5665 Fix: Use netsh for adding routes on Windows (wintun)
- Get wintun interface index directly after adapter creation
- Use netsh instead of CreateIpForwardEntry (doesn't work with wintun)
- Fallback to CreateIpForwardEntry if netsh fails
2026-02-28 16:08:06 +03:00
jeka 9d0223d3fa refactor 2026-02-28 15:15:34 +03:00
jeka b27ea97055 1 2026-02-22 23:28:11 +03:00
jeka 17e1a193c5 1 2026-02-22 00:49:47 +03:00
jeka cab860fce8 route 2026-02-21 23:44:22 +03:00
jeka 90a8e66328 routing - local routes (id,ip) 2026-02-21 21:57:17 +03:00
Evgeny 8502451ec7 compile fixes 2026-02-21 21:30:39 +03:00
jeka 1947810cb0 gr restore v2 2026-02-21 21:24:09 +03:00
jeka b8ea33160d восстановление морды (частичное) 2026-02-21 21:04:11 +03:00
Evgeny 6ffec2f1e7 Fix: INVALID_SOCKET usage in POSIX code and remove missing test
- control_server.c: Use -1 instead of INVALID_SOCKET on lines 241 and 511
- Makefile.am: Remove test_control_server reference (source file missing)
2026-02-21 18:09:47 +03:00
jeka cd169b106a gui + small fixes 2026-02-21 17:55:20 +03:00
Evgeny 3749c5037c fix build for linux 2026-02-20 22:39:58 +03:00
jeka d10bddd1f7 Build: incremental build support, Windows uasync fixes, TUN cross-platform refactoring
- build.sh: added --full flag for full rebuild (autoreconf + configure + make)
- build_direct.sh: incremental compilation (skips unchanged files)
- build_full.bat: new Windows batch for full rebuild
- configure.ac: fixed Windows detection using AC_COMPILE_IFELSE
- lib/u_async.c/h: Windows wakeup socket support, uasync_post for thread-safe callbacks
- src/tun_if.c/h: cross-platform TUN refactoring, Windows read thread support
- src/tun_windows.c: Windows TUN implementation improvements
- src/control_server.c: removed premature return statement
- src/routing.c: include ordering fix
- src/utun.c: windows compat includes
- Deleted obsolete net_emulator/Makefile and tinycrypt/Makefile
2026-02-20 21:20:50 +03:00
jeka 734851329f Control: Add monitoring server with ETCP protocol support
- Implement control_server.c/h for monitoring and management
- Add Windows-compatible uasync_poll using select() instead of WSAPoll
- Fix Wintun adapter creation to open existing adapters first
- Add debug category for control server operations
- Update build files to include control server in compilation
- Add test_control_server to test suite
2026-02-19 01:24:42 +03:00
Evgeny 00e09c767e ETCP: реализация восстановления связи при падении всех линков
- Добавлена функция etcp_loadbalancer_get_link_status() для проверки состояния связи
- Клиент: при падении всех линков запускается отправка ETCP_INIT_REQUEST_NOINIT (0x04)
- Сервер: при приеме NOINIT отвечает ETCP_INIT_RESPONSE_NOINIT (0x05) без сброса если линк initialized
- При приеме любого пакета отменяется таймер восстановления
- ETCP_INIT_RESPONSE (0x03) вызывает сброс всего ETCP_CONN
- Переименованы константы: ETCP_CHANNEL_INIT -> ETCP_INIT_REQUEST_NOINIT,
  ETCP_CHANNEL_RESPONSE -> ETCP_INIT_RESPONSE_NOINIT

Все 23 теста проходят
2026-02-17 01:41:05 +03:00
jeka 8a3cdaf759 1 2026-02-16 23:42:28 +03:00
jeka 3ab19094d0 Fix: segfault in ETCP tests and add wintun.dll to gitignore
- Fix segfault in ETCP tests by initializing uECC RNG in sc_init_local_keys()
- Fix segfault during cleanup by adding reference counting to socket_platform_cleanup()
- Add wintun.dll to .gitignore
- Update AGENTS.md and platform compatibility headers

All 19 tests now pass successfully.
2026-02-16 23:36:50 +03:00
Evgeny 7781c4676b Fix: Segfault in test_routing_mesh during cleanup
In pn_deinit(), cancel waiter on etcp->input_queue and clear callback
on etcp->output_queue before freeing PKTNORM structure. This prevents
use-after-free when drain_and_free_fragment_queue() triggers
check_waiters() during etcp_connection_close().
2026-02-16 22:04:03 +03:00
Evgeny a5818d9cc4 Backup before fixing test_routing_mesh segfault 2026-02-16 22:02:57 +03:00
Evgeny 0490c846c2 ETCP: loadbalancer исключает down-линки, link_status=1 при инициализации
- etcp_loadbalancer_select_link() теперь пропускает линки со статусом != 1
- При установке initialized=1 сразу выставляется link_status=1 (up)
- Добавлено логирование при изменении статуса линка на UP
2026-02-16 19:57:20 +03:00
Evgeny bf33ae4e47 ETCP: добавлена проверка keepalive таймаута и статус линка
- Добавлен параметр keepalive_timeout в глобальный конфиг (default: 2000 ms)
- Добавлено поле keepalive_timeout в struct ETCP_LINK
- В keepalive_timer_cb() добавлена проверка таймаута по last_recv_local_time
- Выставление link_status: 1 (up) при получении пакетов, 0 (down) при таймауте
- Инициализация last_recv_local_time при создании линка
- Вывод keepalive_timeout в print_config()
2026-02-16 19:44:27 +03:00
Evgeny 15a9521559 ETCP: реализация keepalive пакетов для каждого линка
- Добавлены поля keepalive_timer и pkt_sent_since_keepalive в struct ETCP_LINK
- Реализована отправка пустых keepalive пакетов (только timestamp) по таймеру
- Keepalive пропускается если был отправлен другой пакет с момента последнего тика
- Таймер запускается после инициализации линка (keepalive_interval из конфига)
- Исправлен тест test_bgp_route_exchange: убран лишний htonl() при проверке маршрутов
2026-02-16 19:17:47 +03:00
Evgeny 232bd49309 config: отключены логи uasync по умолчанию
uasync генерирует слишком много служебных логов.
Теперь по умолчанию включены все категории кроме uasync.

Для включения uasync логов используйте:
  debug_categories=all
или
  debug_categories=uasync,connection,etcp
2026-02-16 18:22:57 +03:00
Evgeny 424e2c6b14 fix: исправлена блокировка при добавлении маршрутов через netlink
Проблема: recv() на netlink сокете блокировал бесконечно,
если ядро не отвечало на сообщение.

Решение:
- Добавлен флаг SOCK_NONBLOCK при создании сокета
- Добавлен poll() с таймаутом 1 секунда перед recv()
- Добавлен заголовок poll.h

Теперь utun не зависает при старте и продолжает инициализацию сокетов.
2026-02-16 18:12:18 +03:00
Evgeny d917b42942 fix: исправлен порядок байт при добавлении маршрутов из конфига
Использован ntohl() для преобразования сетевого адреса из network byte order
в host byte order перед добавлением в таблицу маршрутизации.
Теперь маршруты отображаются корректно (10.23.1.0 вместо 0.1.23.10).
2026-02-16 17:33:33 +03:00
Evgeny 4cd22b1513 feat: переименован allowed_subnet в route_subnet, добавлено управление системными маршрутами
- Переименовано поле allowed_subnets -> route_subnets в конфигурации
- Обновлен парсинг конфига: allowed_subnet -> route_subnet
- Создан новый модуль tun_route для управления системными маршрутами
- Linux: реализация через netlink sockets с fallback на ip route
- Windows: реализация через IP Helper API
- BSD: реализация через routing sockets с fallback на route
- При запуске: автоматическое добавление маршрутов route_subnet на TUN интерфейс
- При завершении: автоматическое удаление всех маршрутов через tun_route_flush
- Обновлены Makefile.am для сборки новых файлов
2026-02-16 17:07:52 +03:00
jeka 4a3c5724b7 Windows: Исправлен запуск utun - TUN, логирование, права администратора
- Добавлен platform_compat.c с кроссплатформенной генерацией случайных чисел
- Исправлена генерация ключей и node_id на Windows (вместо /dev/urandom)
- PID файл отключен по умолчанию на Windows
- Добавлено двойное логирование: файл utun.log + консоль
- Добавлен манифест Windows для запроса прав администратора
- Исправлено завершение программы при ошибках отправки (Network unreachable)
- TUN инициализация включена по умолчанию
- Исправлен main loop (instance->running = 1)
2026-02-16 14:31:16 +03:00
jeka 8a5a5c361f Remove generated Makefile and temp file src/aa from repo (already in .gitignore) 2026-02-16 11:16:14 +03:00
jeka 9c768bfd17 Fix timer leaks in ETCP: cancel retrans_timer, ack_resp_timer, and shaper_timer on connection close 2026-02-16 10:39:36 +03:00
Evgeny 603768052d Debug: Enable crypto packet dumps conditionally based on debug level 2026-02-16 08:15:51 +03:00
Evgeny a73e36b559 Fix mesh topology: try normal decryption first, then INIT
Reversed the decryption order:
1. If link exists with session_ready, try normal decryption first
2. If normal decryption succeeds, process packet normally (goto process_decrypted)
3. If normal decryption fails OR no link OR no session, try INIT decryption
4. If INIT succeeds, create new server-side connection and link

This is more efficient because:
- Most packets are regular data (use normal decryption)
- INIT packets are rare (only during connection setup)
- Works correctly for both standard client-server and mesh topologies

All 23 tests now pass.
2026-02-16 01:02:10 +03:00
Evgeny 27b02cef68 Fix mesh topology handling with fallback to normal decryption
When receiving packets on client links, try INIT decryption first.
If it fails (e.g., for INIT_RESPONSE packets), fallback to normal
decryption using the existing link's crypto context.

This fixes mesh topology where both nodes send INIT simultaneously,
while maintaining compatibility with standard client-server mode where
client links receive INIT_RESPONSE packets.

Changes:
- If link==NULL OR link is client (is_server==0), try INIT decryption
- On any INIT decryption error, if we have an existing link, goto normal_decrypt
- Added normal_decrypt label before standard packet processing
- This allows handling both incoming INIT (create server link) and
  incoming responses (use existing client link) correctly
2026-02-16 00:51:28 +03:00
Evgeny 0a4373ffe1 Fix: Treat client links as INIT packets on receive
When receiving an INIT packet, the code was looking up existing links by
address. However, in a mesh topology where each node has both client and
server connections to peers, a client link created during initialization
would be found when receiving an incoming INIT packet from that peer.

This caused the code to try decrypting the INIT packet using the client
link's crypto context, which failed because the session keys weren't
properly established yet.

The fix checks if the found link is a client link (is_server==0) and if
so, treats the packet as a new INIT connection that needs to create a
server-side link instead.

Changed condition from:
  if (link==NULL)
to:
  if (link==NULL || link->is_server==0)
2026-02-15 23:35:23 +03:00
Evgeny 59f01c6a15 WIP: исправление портов и добавление отладки в mesh test 2026-02-15 21:32:32 +03:00
Evgeny c1e2f061b9 Рефакторинг utun_instance_create - устранено дублирование кода
- Создана общая функция instance_init_common() для инициализации instance
- Упрощены utun_instance_create() и utun_instance_create_from_config()
- Удалено ~90 строк дублирующегося кода
- Обе функции теперь используют общую логику инициализации
2026-02-15 20:44:14 +03:00
Evgeny bee1e41b07 Добавлен тестовый режим для TUN интерфейса и тест роутинга mesh
- Добавлена опция tun_test_mode в конфиг для работы без реального TUN устройства
- Добавлены функции для работы с очередями TUN в тестовом режиме
- Добавлен API для программного создания instance из структуры конфига
- Создан тест test_routing_mesh.c с 3-instance mesh топологией
- Ключи генерируются автоматически и распределяются между instance
2026-02-15 20:37:10 +03:00
Evgeny eb721be508 Simplify: Extract common crypto logic into helper functions for both OpenSSL and TinyCrypt 2026-02-15 18:47:49 +03:00
Evgeny 25f5b84bf9 Simplify: Remove unreachable duplicate code block in init_connections 2026-02-15 18:40:43 +03:00
Evgeny f4295d962e Simplify: Deduplicate queue cleanup in etcp_connection_close using helper functions 2026-02-15 18:39:03 +03:00
Evgeny 29d26cf139 Force rebuild of utun-ecc_platform_specific.o on every build to ensure platform-specific changes are picked up 2026-02-15 13:09:10 +03:00