55 lines
1.7 KiB
Text
55 lines
1.7 KiB
Text
|
|
#!/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"
|