Treat NET-101, NET-102, DNS-101 and DNS-105 as transient: the service stays alive, waits for a usable physical network through ConnectivityManager and retries with bounded backoff instead of publishing a terminal error. Restart on network change waits until Android configures the new link, and the quick settings tile gains the reconnecting state. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.4 KiB
network-bootstrap
Узкий Android library-модуль для bootstrap до создания TUN. Он владеет только:
- выбором текущей non-VPN сети;
- согласованием
NetworkCapabilitiesиLinkProperties; - короткой стабилизацией snapshot и повторами при реальной смене network identity, validation/Private DNS или списка DNS-серверов;
- системным
DnsResolver/Network.getAllByName(); - стабильными support-кодами и безопасной технической причиной.
Модуль не знает о профилях, Compose, libbox, VPN allowlist, runtime JSON или LKG-кэше. Эти решения остаются в app. Он также не решает, что считать пригодной сетью: ожидание принимает предикат, потому что во время перехода Wi‑Fi ↔ cellular Android публикует кандидата задолго до того, как тот годится для bootstrap. Критерий зрелости и политика восстановления живут в app.
| Код | Значение |
|---|---|
NET-101 |
Android не предоставил underlying-сеть |
NET-102 |
Сеть менялась во время bootstrap и не стабилизировалась |
DNS-101 |
DNS timeout |
DNS-102 |
Имя не найдено / NXDOMAIN |
DNS-103 |
DNS отказал / REFUSED |
DNS-104 |
Успешный ответ без адресов |
DNS-105 |
Системная ошибка Android resolver (DnsException/errno) |
DNS-106 |
Другой DNS RCODE |
Коды NET-110, DNS-110, VPN-1xx и VPN-2xx принадлежат app: они описывают captive portal, strict Private DNS, deadline подключения и проверки поверх готового TUN.
NET-101 и NET-102 больше не означают конец сессии: app трактует их как транзиентные и переподключается сам в ограниченной серии попыток. Остальные коды остаются терминальными. Текст ошибки может уточняться, но смысл опубликованного кода не меняется.