03075f1ef1
Closes TG-4 Co-authored-by: Cursor <cursoragent@cursor.com>
76 lines
2.3 KiB
Bash
76 lines
2.3 KiB
Bash
#!/bin/bash
|
|
#
|
|
# AIS Map network init — runs at boot.
|
|
# Reads /etc/aismap/network.json, tries the configured mode.
|
|
# If mode=wifi and connection fails — rolls back to AP.
|
|
#
|
|
|
|
set -uo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
CONFIG="/etc/aismap/network.json"
|
|
LOG="/var/log/aismap_network_init.log"
|
|
exec >"$LOG" 2>&1
|
|
|
|
echo "=== $(date) network_init start ==="
|
|
|
|
if [ ! -f "$CONFIG" ]; then
|
|
echo "Config not found ($CONFIG), defaulting to AP mode"
|
|
bash "$SCRIPT_DIR/to_ap.sh"
|
|
echo "=== $(date) network_init done (default AP) ==="
|
|
exit 0
|
|
fi
|
|
|
|
MODE=$(python3 -c "import json; print(json.load(open('$CONFIG')).get('mode','ap'))" 2>/dev/null || echo "ap")
|
|
echo "Configured mode: $MODE"
|
|
|
|
if [ "$MODE" = "wifi" ]; then
|
|
echo "--- Attempting WiFi connection ---"
|
|
bash "$SCRIPT_DIR/to_wifi.sh"
|
|
WIFI_EXIT=$?
|
|
|
|
if [ $WIFI_EXIT -ne 0 ]; then
|
|
echo "to_wifi.sh failed (exit $WIFI_EXIT) — rolling back to AP"
|
|
bash "$SCRIPT_DIR/to_ap.sh"
|
|
echo "=== $(date) network_init done (rollback to AP) ==="
|
|
exit 0
|
|
fi
|
|
|
|
GW=$(python3 -c "import json; print(json.load(open('$CONFIG')).get('wifi_gw',''))" 2>/dev/null || echo "")
|
|
IFACE=$(python3 -c "import json; print(json.load(open('$CONFIG')).get('iface','wlan0'))" 2>/dev/null || echo "wlan0")
|
|
|
|
echo "Verifying WiFi connectivity (gateway: $GW) ..."
|
|
CONNECTED=0
|
|
for ATTEMPT in 1 2 3; do
|
|
sleep 3
|
|
if [ -n "$GW" ] && ping -c 2 -W 3 "$GW" >/dev/null 2>&1; then
|
|
echo "Attempt $ATTEMPT: gateway reachable"
|
|
CONNECTED=1
|
|
break
|
|
fi
|
|
# Also check wpa_supplicant state
|
|
if wpa_cli -i "$IFACE" status 2>/dev/null | grep -q "wpa_state=COMPLETED"; then
|
|
echo "Attempt $ATTEMPT: wpa_supplicant COMPLETED"
|
|
CONNECTED=1
|
|
break
|
|
fi
|
|
echo "Attempt $ATTEMPT: not connected yet..."
|
|
done
|
|
|
|
if [ $CONNECTED -eq 1 ]; then
|
|
echo "WiFi connection confirmed"
|
|
echo "=== $(date) network_init done (wifi) ==="
|
|
exit 0
|
|
else
|
|
echo "WiFi NOT reachable after 3 attempts — rolling back to AP"
|
|
bash "$SCRIPT_DIR/to_ap.sh"
|
|
echo "=== $(date) network_init done (rollback to AP) ==="
|
|
exit 0
|
|
fi
|
|
else
|
|
echo "--- Starting AP mode ---"
|
|
bash "$SCRIPT_DIR/to_ap.sh"
|
|
echo "=== $(date) network_init done (ap) ==="
|
|
exit 0
|
|
fi
|