Add wifi support for multiple client interfaces

This commit is contained in:
Fabian Bläse 2022-01-06 17:12:06 +01:00
parent 68f90abe3e
commit 5107859331
1 changed files with 71 additions and 41 deletions

View File

@ -1,51 +1,81 @@
. /lib/functions.sh
. /lib/functions/fff/wireless . /lib/functions/fff/wireless
configure() { configure() {
# get parameters add_wifi() {
essid=$(uci -q get gateway.@client[0].essid) local name="$1"
chan2ghz=$(uci -q get gateway.@client[0].chan2ghz)
chan5ghz=$(uci -q get gateway.@client[0].chan5ghz)
if [ -z "$essid" ]; then # get parameters
echo "WARNING: No ESSID set! WiFi AP is disabled" chan2ghz=$(uci -q get gateway.@client[0].chan2ghz)
fi chan5ghz=$(uci -q get gateway.@client[0].chan5ghz)
for radio in $(wifiListRadio); do if [ -z "$essid" ]; then
freq="$(wifiGetFreq $radio)" echo "WARNING: No ESSID set! WiFi AP is disabled"
disabled=1
# Delete wXmesh, wXconfigap
uci -q del wireless.w${freq}mesh
uci -q del wireless.w${freq}configap
if [ -n "$essid" ]; then
# set channel for 5ghz
if [ "$freq" = "5" ]; then
if [ -z "$chan5ghz" ]; then
echo "WARNING: No 5 GHz channel set! Disabling AP on $radio"
else
uci set wireless.${radio}.channel="$chan5ghz"
disabled=0
fi
fi
# set channel for 2.4ghz
if [ "$freq" = "2" ]; then
if [ -z "$chan2ghz" ]; then
echo "WARNING: No 2.4 GHz channel set! Disabling AP on $radio"
else
uci set wireless.${radio}.channel="$chan2ghz"
disabled=0
fi
fi
# set essid
uci set wireless.w${freq}ap.ssid="$essid"
fi fi
# enable or disable ap interface appropriately. The radios 'disabled'-option is not touched for radio in $(wifiListRadio); do
uci set wireless.w${freq}ap.disabled="$disabled" freq="$(wifiGetFreq $radio)"
done disabled=1
# Delete wXmesh, wXconfigap
uci -q del wireless.w${freq}mesh
uci -q del wireless.w${freq}configap
essid=$(uci -q get gateway.$name.essid)
if [ -n "$essid" ]; then
# set channel for 5ghz
if [ "$freq" = "5" ]; then
if [ -z "$chan5ghz" ]; then
echo "WARNING: No 5 GHz channel set! Disabling AP for interface \"$name\" on $radio"
else
uci set wireless.${radio}.channel="$chan5ghz"
disabled=0
fi
fi
# set channel for 2.4ghz
if [ "$freq" = "2" ]; then
if [ -z "$chan2ghz" ]; then
echo "WARNING: No 2.4 GHz channel set! Disabling AP for interface \"$name\" on $radio"
else
uci set wireless.${radio}.channel="$chan2ghz"
disabled=0
fi
fi
uci set wireless.w${freq}${name}=wifi-iface
uci set wireless.w${freq}${name}.device=$radio
uci set wireless.w${freq}${name}.network=$name
uci set wireless.w${freq}${name}.ifname=w${freq}${name}
uci set wireless.w${freq}${name}.mode=ap
uci set wireless.w${freq}${name}.encryption=none
uci set wireless.w${freq}${name}.hidden=0
# set essid
uci set wireless.w${freq}${name}.ssid="$essid"
uci set wireless.w${freq}${name}.disabled="$disabled"
fi
done
}
remove_wifi() {
local name="$1"
local netname=$(uci -q get wireless.$name.network)
# only remove interfaces that disappeared from gwconfig
[ "$(uci -q get gateway.$netname)" == "client" ] && return 0
uci -q del wireless.$name
}
config_load wireless
config_foreach remove_wifi wifi-iface
config_load gateway
config_foreach add_wifi client
} }
apply() { apply() {