ZapretKVN-android/docs/NETWORK_BOOTSTRAP.md
loop-uh 938405d937 Recover VPN from transient network failures
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>
2026-07-28 00:08:06 +03:00

26 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` трактует их как транзиентные и переподключается сам в ограниченной серии попыток. Остальные коды остаются терминальными. Текст ошибки может уточняться, но смысл опубликованного кода не меняется.