Files
bf-infra/switch/sg8316m.sh

73 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# ⚠️ VERALTET — nur FW 1.0. Switch ist auf FW 2.2.1 geflasht; die dispatcher.cgi-cmd-Codes
# unten gelten dort NICHT mehr. Konfig jetzt via Telnet-CLI: switch/cli/ (run-cli.exp + .cli).
# Bleibt nur als Historie / für den (unwahrscheinlichen) FW-1.0-Rollback.
# ALL-SG8316M (Realtek dispatcher.cgi) driver — curl-based, no MCP needed.
# Read ops are safe. WRITE ops change config; SAVE persists to flash.
# Creds via ./.secrets (gitignored): SW_HOST, SW_USER, SW_PASS.
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
[ -f "$HERE/.secrets" ] && . "$HERE/.secrets"
HOST="${SW_HOST:-10.40.41.239}"
BASE="http://$HOST/cgi-bin/dispatcher.cgi"
CURL=(curl -sS --max-time 12)
# --- read ---
get() { "${CURL[@]}" "$BASE?cmd=$1"; }
# Curated config-view + AJAX-data cmd codes (see sg8316m-cgi-map.md)
SCRAPE_CMDS="512 517 519 1297 541 543 768 779 1024 1026 1031 \
1282 1283 1289 1291 1293 534 537 539 524 \
4096 4098 4100 2560 2562 2564 2572 2574 2816 2818 2821 3840 3842 3844"
scrape() {
local out="$HERE/${1:-state-PRE}"; mkdir -p "$out"
echo "Scraping $HOST -> $out"
for c in $SCRAPE_CMDS; do
if "${CURL[@]}" "$BASE?cmd=$c" >"$out/cmd-$c.html" 2>/dev/null; then
printf ' cmd=%-5s %6s bytes\n' "$c" "$(wc -c <"$out/cmd-$c.html" | tr -d ' ')"
else
printf ' cmd=%-5s FAILED\n' "$c"
fi
done
}
# Pretty-print one page as text
view() { get "$1" | sed -e 's/<[^>]*>/ /g' | tr -s ' \t\r\n' ' ' | sed 's/&nbsp;/ /g'; echo; }
# --- write (use deliberately, then `save`) ---
post() { "${CURL[@]}" -X POST "$BASE" "$@"; }
add_vlans() { post --data-urlencode "vlanlist=$1" --data "vlanAction=0" --data-urlencode "name=${2:-}" --data "cmd=1284"; }
del_vlans() { post --data-urlencode "vlanlist=$1" --data "vlanAction=1" --data "cmd=1284"; }
# set_ip <ip> [netmask] [gateway] — RECOVERY: re-point mgmt IP (e.g. after flash reset to 192.168.1.1)
set_ip() { post --data "mode=0" --data "ip=$1" --data "netmask=${2:-255.255.255.0}" --data "gateway=${3:-10.40.41.254}" --data "cmd=518"; }
save_flash() { echo ">> SAVE to FLASH (cmd=4358)"; get 4358 >/dev/null; }
usage() { cat <<USAGE
usage: $0 <cmd>
scrape [dir] dump config pages to switch/<dir> (default state-PRE) [READ]
get <N> raw HTML of cmd=N [READ]
view <N> cmd=N as plain text [READ]
add-vlans <list> [prefix] e.g. add-vlans 10,20,30,40,100 [WRITE]
del-vlans <list> [WRITE]
set-ip <ip> [mask] [gw] RECOVERY: re-point mgmt IP [WRITE]
save persist running config to flash [WRITE]
Recovery after flash (switch reset to 192.168.1.1):
SW_HOST=192.168.1.1 SW_USER=admin SW_PASS=admin $0 set-ip 10.40.41.239
USAGE
}
case "${1:-}" in
scrape) scrape "${2:-state-PRE}" ;;
get) get "$2" ;;
view) view "$2" ;;
add-vlans) add_vlans "$2" "${3:-}" ;;
del-vlans) del_vlans "$2" ;;
set-ip) set_ip "$2" "${3:-255.255.255.0}" "${4:-10.40.41.254}" ;;
save) save_flash ;;
*) usage ;;
esac