67 lines
2.2 KiB
Bash
Executable File
67 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Networking backend for the astro-menu Network quad.
|
|
# Each subcommand prints JSON (or plain text for pubip) to stdout. Wi-Fi listing and
|
|
# state come from AstalNetwork in the UI; this covers the rest (ip/routes/ports,
|
|
# public IP, wifi connect via nmcli, and the manual/DHCP switch).
|
|
set -euo pipefail
|
|
|
|
active_conn() {
|
|
# First active connection on a real device (wifi/ethernet).
|
|
nmcli -t -g NAME,TYPE,DEVICE connection show --active 2>/dev/null \
|
|
| awk -F: '$2 ~ /wireless|ethernet/ {print $1; exit}'
|
|
}
|
|
|
|
cmd="${1:-}"; shift || true
|
|
case "$cmd" in
|
|
ip)
|
|
ip -j addr show 2>/dev/null || echo '[]'
|
|
;;
|
|
routes)
|
|
ip -j route show 2>/dev/null || echo '[]'
|
|
;;
|
|
ports)
|
|
# Listening TCP/UDP sockets -> JSON array.
|
|
ss -tulnH 2>/dev/null | awk '
|
|
BEGIN { print "["; sep="" }
|
|
{ printf "%s{\"proto\":\"%s\",\"local\":\"%s\"}", sep, $1, $5; sep="," }
|
|
END { print "]" }'
|
|
;;
|
|
pubip)
|
|
curl -sf --max-time 8 https://ifconfig.co 2>/dev/null \
|
|
|| curl -sf --max-time 8 https://api.ipify.org 2>/dev/null \
|
|
|| echo "unavailable"
|
|
;;
|
|
wifi-connect)
|
|
ssid="${1:-}"; pass="${2:-}"
|
|
if [[ -n "$pass" ]]; then
|
|
nmcli dev wifi connect "$ssid" password "$pass"
|
|
else
|
|
nmcli dev wifi connect "$ssid"
|
|
fi
|
|
;;
|
|
wifi-disconnect)
|
|
con="$(active_conn)"
|
|
[[ -n "$con" ]] && nmcli connection down "$con"
|
|
;;
|
|
set-manual)
|
|
con="${4:-$(active_conn)}"; addr="${1:-}"; gw="${2:-}"; dns="${3:-}"
|
|
[[ -z "$con" ]] && { echo "no active connection" >&2; exit 1; }
|
|
nmcli connection modify "$con" ipv4.method manual \
|
|
ipv4.addresses "$addr" ipv4.gateway "$gw" ipv4.dns "$dns"
|
|
nmcli connection up "$con"
|
|
;;
|
|
set-dhcp)
|
|
con="${1:-$(active_conn)}"
|
|
[[ -z "$con" ]] && { echo "no active connection" >&2; exit 1; }
|
|
nmcli connection modify "$con" ipv4.method auto
|
|
nmcli connection up "$con"
|
|
;;
|
|
active-conn)
|
|
active_conn
|
|
;;
|
|
*)
|
|
echo "usage: network.sh {ip|routes|ports|pubip|wifi-connect|wifi-disconnect|set-manual|set-dhcp|active-conn}" >&2
|
|
exit 2
|
|
;;
|
|
esac
|