# proxy (тестовый инструмент) ## 1. Назначение UDP прокси с симуляцией сетевых условий — вносит потери пакетов и задержки для тестирования поведения ETCP в нестабильной сети. ## 2. Как пользоваться ``` udp_proxy --listen [IP:]PORT --target IP:PORT [опции] ``` | Опция | Значение | |---|---| | `--listen [IP:]PORT` | Адрес прослушивания (IP опционально, по умолчанию 0.0.0.0) | | `--target IP:PORT` | Куда пробрасывать трафик | | `--loss-forward N` | Потери в прямом направлении, % (0–100, по умолчанию 0) | | `--loss-back N` | Потери в обратном направлении, % | | `--delay-forward A:B` | Задержка в прямом направлении, диапазон ms | | `--delay-back A:B` | Задержка в обратном направлении, диапазон ms | | `--help` | Справка | Типовой сценарий: `udp_proxy --listen 0.0.0.0:12345 --target 8.8.8.8:53 --loss-forward 5 --delay-forward 10:50` — вставка между клиентом и сервером, наблюдение реакции ETCP на потери/задержки. ## 3. Ключевые детали - Использует `u_async` как событийный цикл (epoll/poll) - Per-client flow tracking: каждый уникальный клиент (IP:port) получает выделенный backend-сокет, поиск по хешу через линейный связный список (`udp_flow_t`) - Раздельные настройки потерь и задержек для forward (клиент→сервер) и backward (сервер→клиент) направлений - Задержка — случайная в заданном диапазоне (ms), потери — случайные с заданной вероятностью (`rand() % 100 < loss`) - Сборка: `make` в `tools/proxy/`, линкуется с `libuasync.a` и `libpthread` - Скрипт `proxy.sh` — быстрый запуск с преднастроенными адресами для локального тестирования