steer: живые туннели не пересканируются на каждом «Применить», автообход не поднимает их дважды

Живой туннель считался негодным, если его колония совпала с соседней, и на каждом
применении правил его заново сканировали и переподключали — хотя такую колонию и выбрала
разведка, когда другой не нашлось. Автообход вдобавок звал подъём туннелей второй раз через
_st_apply, сразу после своего. Развести туннели по колониям заново — «Сменить точки входа».
This commit is contained in:
xyzmean committed 2026-09-23 22:41:25 +03:00
1 parent 41d4b93eba
commit 7c6410d587
1 file changed
+6 -4
+6 -4
View File
@@ -5314,9 +5314,10 @@ _st_warp_up() { # [repick]
peer="$(_st_with "$n" _st_warp_field PublicKey)"
_st_warp_ready_if "$i" || { _rb_warn "WARP $n: устройство не поднялось"; continue; }
got=""
# Живой туннель с прошлого раза не трогаем, если колония у него своя.
if [ "$repick" != repick ] && _st_warp_alive_if "$i" && c="$(_st_colo_of "$i")" &&
case " $busy " in *" $c "*) false ;; *) true ;; esac; then
# Живой туннель с прошлого раза не трогаем — даже если колония совпала с соседом: её
# выбрала разведка, когда другой не нашлось, и пересканировать его на каждом «Применить»
# значило бы рвать соединения ради того же результата. Развести заново — «Сменить точки входа».
if [ "$repick" != repick ] && _st_warp_alive_if "$i" && c="$(_st_colo_of "$i")"; then
got="$(uci -q get "network.${i}_peer.endpoint_host") $(uci -q get "network.${i}_peer.endpoint_port") $c"
_rb_say "WARP $n работает: колония $c"
else
@@ -6812,7 +6813,8 @@ do_redbtn_run() {
done
if [ -n "$warp_ids" ]; then
_rb_phase steer
_st_apply || _rb_warn "steer не принял правила — загляните на страницу steer"
# Туннели только что подняты и проверены — второй раз не поднимаем.
_st_apply tunnel_ready || _rb_warn "steer не принял правила — загляните на страницу steer"
fi
else
for id in $failed; do _rb_result_write "$id" none; done