rc="$?"
}
+ [ "$rc" = 233 ] && {
+ # Device might not support virtual interfaces, so the interface never got deleted in the first place.
+ # Check if the interface already exists, and avoid failing in this case.
+ ip link show dev "$ifname" >/dev/null 2>/dev/null && rc=0
+ }
+
[ "$rc" != 0 ] && wireless_setup_failed INTERFACE_CREATION_FAILED
return $rc
}
mac80211_setup_supplicant() {
wpa_supplicant_prepare_interface "$ifname" nl80211 || return 1
- wpa_supplicant_add_network "$ifname"
+ if [ "$mode" = "sta" ]; then
+ wpa_supplicant_add_network "$ifname"
+ else
+ wpa_supplicant_add_network "$ifname" "$freq" "$htmode" "$noscan"
+ fi
wpa_supplicant_run "$ifname" ${hostapd_ctrl:+-H $hostapd_ctrl}
}
+mac80211_setup_supplicant_noctl() {
+ wpa_supplicant_prepare_interface "$ifname" nl80211 || return 1
+ wpa_supplicant_add_network "$ifname" "$freq" "$htmode" "$noscan"
+ wpa_supplicant_run "$ifname"
+}
+
mac80211_setup_adhoc_htmode() {
case "$htmode" in
VHT20|HT20) ibss_htmode=HT20;;
case "$mode" in
mesh)
- # authsae or wpa_supplicant
json_get_vars key
- if [ -n "$key" ]; then
- if [ -e "/lib/wifi/authsae.sh" ]; then
- . /lib/wifi/authsae.sh
- authsae_start_interface || failed=1
- else
- wireless_vif_parse_encryption
- mac80211_setup_supplicant || failed=1
- fi
+ wireless_vif_parse_encryption
+ if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ] || chan_is_dfs "$phy" "$channel"; then
+ freq="$(get_freq "$phy" "$channel")"
+ mac80211_setup_supplicant || failed=1
else
json_get_vars mesh_id mcast_rate
wireless_vif_parse_encryption
mac80211_setup_adhoc_htmode
if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then
- mac80211_setup_supplicant || failed=1
+ freq="$(get_freq "$phy" "$channel")"
+ mac80211_setup_supplicant_noctl || failed=1
else
mac80211_setup_adhoc
fi
iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep MHz | awk '{print $2}'
}
+chan_is_dfs() {
+ local phy="$1"
+ local chan="$2"
+ iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep -q "MHz.*radar detection"
+ return $!
+}
+
mac80211_interface_cleanup() {
local phy="$1"