Files
utun2/src/utun_doc.md
T
evgeny 38c9f229bc stcp: ed25519 pubkey exchange in handshake, fix instance destroy segfault, fix chat_tcp_test
- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll
- stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close
- utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP),
  add deferred drain in both Phase J and L
- stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39,
  exchange ed25519_pubkey in both handshake directions
- etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in
  etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb
- chat_sync.c: fix lk->conn NULL dereference for TCP links
- test_stcp.c: update stcp_server_create/stcp_client_connect callsites
- tools/chat_tcp_test: change transport udp→tcp
2026-08-07 00:48:27 +03:00

3.2 KiB

utun.c — Главная точка входа

1. Назначение

Точка входа процесса uTun. Парсинг CLI, запуск в режиме демона, создание и жизненный цикл корневого инстанса UTUN_INSTANCE, главный цикл обработки событий mainloop(), обработка сигналов (graceful shutdown/reload).

2. Как пользоваться

utun -f -c myconfig.conf -p /var/run/utun.pid -l /var/log/utun.log -d "etcp=debug"
  • -f — foreground (без демонизации)
  • -c — путь к конфигу (по умолчанию utun.conf)
  • -p — PID-файл (по умолчанию /var/run/utun.pid, Windows — нет)
  • -l — лог-файл (по умолчанию utun.log)
  • -d — отладочная конфигурация (формат: категория=уровень,...)
  • -h — справка

Порядок запуска:

  1. Парсинг аргументов → инициализация системы отладки
  2. uasync_create() → utun_instance_create() → utun_instance_init()
  3. Демонизация (fork+setsid) если не -f
  4. Запись PID-файла
  5. mainloop: uasync_poll(ua, 100) в цикле пока instance->running
  6. По SIGTERM/SIGINT: g_shutdown=1 → выход из цикла → utun_instance_destroy() → uasync_destroy() → u_report_unfreed_blocks()
  7. По SIGHUP: g_reload=1 → utun_instance_reload() (селективный или полный)

3. API

Функции

Функция Описание
parse_args(argc, argv, args) Разбор CLI-аргументов через getopt_long, заполняет cmd_args_t
print_usage(progname) Вывод справки по использованию
write_pidfile(pidfile) Запись PID текущего процесса в файл
remove_pidfile(pidfile) Удаление PID-файла при завершении
daemonize() Демонизация: fork()→родитель выходит, setsid(), перенаправление fd 0/1/2 в /dev/null
open_logfile(logfile) Открытие лог-файла с line-buffering
signal_handler(sig) Обработчик: SIGINT/SIGTERM→shutdown, SIGHUP→reload, вызов uasync_wakeup()
main(argc, argv) Главная функция: инициализация, демонизация, mainloop, cleanup

Структуры

Структура Описание
cmd_args_t Аргументы командной строки: config_file, pid_file, log_file, debug_config, foreground, help

Глобальные переменные

Переменная Описание
g_shutdown (sig_atomic_t) Флаг завершения, выставляется из signal handler
g_reload (sig_atomic_t) Флаг перезагрузки конфига по SIGHUP
main_ua Указатель на главный UASYNC (для signal handler)