clawdie-iso/live/operator-session/clawdie-live-wifi

55 lines
1.7 KiB
Text
Raw Normal View History

#!/bin/sh
# Clawdie operator USB live Wi-Fi bring-up.
# Many FreeBSD wireless drivers create an underlying device (e.g. iwm0)
# at attach time but leave it unusable until a wlan0 clone is created
# from it. This service detects the first wlan-capable device after the
# kernel has probed PCI/USB hardware, loads common driver kmods as a
# defensive fallback in case devd autoload missed them, and creates
# wlan0 so NetworkMgr and dhclient can see a usable interface on first
# boot without any operator action.
#
# Runs before netif so the freshly created wlan0 is brought up cleanly.
# PROVIDE: clawdie_live_wifi
# REQUIRE: FILESYSTEMS devfs
# BEFORE: netif
# KEYWORD: nojail
. /etc/rc.subr
name="clawdie_live_wifi"
rcvar="${name}_enable"
start_cmd="${name}_start"
stop_cmd=":"
clawdie_live_wifi_start() {
# Belt-and-suspenders: most autoload on PCI/USB attach, but covering
# the common chips by hand is cheap and avoids early-boot probe races.
_drivers="if_iwm if_iwlwifi if_rtwn_usb if_urtwn if_run if_otus if_mt76"
_drivers="${_drivers} iwm iwlwifi rtwn_usb urtwn run otus mt76"
for _drv in ${_drivers}; do
kldload "$_drv" 2>/dev/null || true
done
_dev=$(sysctl -n net.wlan.devices 2>/dev/null | awk '{print $1}')
if [ -z "${_dev:-}" ]; then
echo "${name}: no wlan-capable device detected"
return 0
fi
if ifconfig -l | tr ' ' '\n' | grep -q '^wlan'; then
return 0
fi
if ifconfig wlan0 create wlandev "${_dev}" 2>/dev/null; then
echo "${name}: created wlan0 on ${_dev}"
else
echo "${name}: failed to create wlan0 on ${_dev}" >&2
return 1
fi
}
load_rc_config "$name"
: "${clawdie_live_wifi_enable:=YES}"
run_rc_command "$1"