66 lines
1.3 KiB
Bash
Executable File
66 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
LOCK=/run/link-mode.lock
|
|
STATE=/run/link-mode.state
|
|
|
|
log() {
|
|
logger -t link-mode "$*"
|
|
}
|
|
|
|
if ! mkdir "$LOCK" 2>/dev/null; then
|
|
log "another transition is in progress; ignoring ${1:-}"
|
|
exit 0
|
|
fi
|
|
|
|
cleanup() {
|
|
rmdir "$LOCK" 2>/dev/null || true
|
|
}
|
|
|
|
trap cleanup EXIT HUP INT TERM
|
|
|
|
wfb_active() {
|
|
pidof wfb_tx wfb_rx wfb_tun wifilink >/dev/null
|
|
}
|
|
|
|
case "${1:-}" in
|
|
preflight)
|
|
if wfb_active; then
|
|
echo wfb >"$STATE"
|
|
exit 0
|
|
fi
|
|
|
|
log "management -> WFB"
|
|
ifdown wlan0 >/dev/null 2>&1 || true
|
|
killall -q wpa_supplicant 2>/dev/null || true
|
|
ip link set wlan0 up
|
|
|
|
if /usr/bin/wifibroadcast start && wfb_active; then
|
|
echo wfb >"$STATE"
|
|
log "WFB is active"
|
|
exit 0
|
|
fi
|
|
|
|
log "WFB start failed"
|
|
exit 1
|
|
;;
|
|
|
|
management)
|
|
if wfb_active; then
|
|
log "WFB -> management"
|
|
/usr/bin/wifibroadcast stop
|
|
killall -q wifilink 2>/dev/null || true
|
|
fi
|
|
|
|
/usr/bin/mgmt-net --force
|
|
echo management >"$STATE"
|
|
log "management path restored"
|
|
/etc/init.d/S97link-monitor start
|
|
exit 0
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: $0 {preflight|management}" >&2
|
|
exit 2
|
|
;;
|
|
esac
|