diff --git a/src/packages/fff/fff-wireless/files/etc/layer3.d/28-wifi b/src/packages/fff/fff-wireless/files/etc/layer3.d/28-wifi index dd2a649a..5e8afedc 100644 --- a/src/packages/fff/fff-wireless/files/etc/layer3.d/28-wifi +++ b/src/packages/fff/fff-wireless/files/etc/layer3.d/28-wifi @@ -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() {