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
configure() {
# get parameters
essid=$(uci -q get gateway.@client[0].essid)
chan2ghz=$(uci -q get gateway.@client[0].chan2ghz)
chan5ghz=$(uci -q get gateway.@client[0].chan5ghz)
add_wifi() {
local name="$1"
if [ -z "$essid" ]; then
echo "WARNING: No ESSID set! WiFi AP is disabled"
fi
# get parameters
chan2ghz=$(uci -q get gateway.@client[0].chan2ghz)
chan5ghz=$(uci -q get gateway.@client[0].chan5ghz)
for radio in $(wifiListRadio); do
freq="$(wifiGetFreq $radio)"
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"
if [ -z "$essid" ]; then
echo "WARNING: No ESSID set! WiFi AP is disabled"
fi
# enable or disable ap interface appropriately. The radios 'disabled'-option is not touched
uci set wireless.w${freq}ap.disabled="$disabled"
done
for radio in $(wifiListRadio); do
freq="$(wifiGetFreq $radio)"
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() {