Check real raw ICMP explicitly alongside deterministic loopback

This commit is contained in:
evgeny committed 2026-10-24 14:00:17 +02:00
1 parent 83194b19c7
commit a42dc38874
2 files changed
+15 -5

No files matched your search

+4 -4
View File
@@ -185,16 +185,16 @@ trace — трафик и секундная диагностика exit TCP-о
| test_tcp_proxy_client | Create/destroy с тестовым TUN, без утечек |
| test_tcp_proxy_server | TCP echo через tcp_conn; сам по себе не проверяет протокол exit |
| test_socks_http_proxy | Реальные SOCKS IPv4/domain, HTTP и HTTPS CONNECT, byte-exact загрузки; штатный TLS shutdown либо UTUN_TEST_TLS_ABRUPT=1 |
| test_udp_proxy / test_icmp_proxy | Два instance через ETCP; ICMP выбирает явный test_loopback при недоступном raw socket |
| test_udp_proxy / test_icmp_proxy | Два instance через ETCP; ICMP: явный test_loopback, UTUN_TEST_ICMP_RAW=1 требует настоящий raw socket |
| test_tcp_io | 19 сценариев, включая HUP high/low-water на epoll/poll, ручную паузу и независимую запись |
| test_tcp_io_flush | Callback после последнего синхронного send |
Проверка 2026-10-24: профильные тесты проходят на Linux. ICMP без прав на raw проверен
через явный test_loopback. Штатный TLS shutdown проходит без EPIPE/ENOTCONN;
Проверка 2026-10-24: профильные тесты проходят на Linux. ICMP проверен и через явный
test_loopback, и настоящим raw echo до 127.0.0.1 с правами root. Штатный TLS shutdown проходит без EPIPE/ENOTCONN;
аварийный сохраняет реальные ошибки записи, все 16 загрузок остаются byte-exact.
Тестовые конфиги используют поддержанный connect_timeout. Итоги полного прогона
и sanitizer-проверок — в [proxy_fix_plan.txt](proxy_fix_plan.txt).
Windows/FreeBSD runtime и настоящий raw ICMP в этом окружении не проверены.
Windows/FreeBSD runtime в этом окружении не проверены.
Создание proxy из конфигурации в utun_instance.c исключено под _WIN32.
IPv4-фрагменты на входе proxy TUN отклоняются; сборки фрагментов нет.
Описания модулей: `src/proxy/*_doc.md`; все семь заголовков `src/proxy/*.h` сверены с реализацией.
+11 -1
View File
@@ -145,6 +145,7 @@ static void test_timeout(void* arg) {
int main(void) {
printf("=== test_icmp_proxy ===\n");
debug_config_init(); debug_set_level(DEBUG_LEVEL_ERROR); debug_set_categories(DEBUG_CATEGORY_ALL);
debug_set_category_level(DEBUG_CATEGORY_GENERAL, DEBUG_LEVEL_INFO);
utun_instance_set_tun_init_enabled(0);
srand((unsigned)time(NULL));
@@ -162,7 +163,16 @@ int main(void) {
exit_node_id = exit_node->node_id; client_node_id = cli->node_id;
icmp_proxy_set_test_loopback(exit_node, 1);
if (getenv("UTUN_TEST_ICMP_RAW")) {
if (!exit_node->icmp_proxy || exit_node->icmp_proxy->raw_sock == SOCKET_INVALID) {
DEBUG_ERROR(DEBUG_CATEGORY_PROXY, "ICMP raw test requires a working exit raw socket");
goto done;
}
DEBUG_INFO(DEBUG_CATEGORY_GENERAL, "ICMP test: real raw socket fd=%d", (int)exit_node->icmp_proxy->raw_sock);
} else {
icmp_proxy_set_test_loopback(exit_node, 1);
DEBUG_INFO(DEBUG_CATEGORY_GENERAL, "ICMP test: explicit test_loopback");
}
g_to_id = uasync_set_timeout(ua, 100, NULL, monitor, "mon");
void* to_id = uasync_set_timeout(ua, TEST_TIMEOUT_MS * 10, NULL, test_timeout, "to");