forked from freifunk-franken/firmware
Previously, when configurehood switched status, all WiFi devices were completely rewritten and all interfaces were deleted and recreated. This is both unnecessary and ugly. This patch redesigns WiFi setup to create all interfaces (in parallel) initially, and then only to enable/disable them as necessary. Where reconfiguration is necessary, only the variable parts are changed. Since most of the wifi-device config is already created by OpenWrt, this builds based on the existing wifi-devices and only removes the default wifi-ifaces. This patch will not change the logic (codeflow) of configurehood, but only affects how action on the WiFi devices/interfaces is taken. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Reviewed-by: Fabian Bläse <fabian@blaese.de>
81 lines
2.3 KiB
Bash
81 lines
2.3 KiB
Bash
#!/bin/sh
|
|
# Copyright 2016 Tim Niemeyer
|
|
# Copyright 2019 Adrian Schmutzler
|
|
# License GPLv3
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/fff/wireless
|
|
|
|
removeWifiIface() {
|
|
local name="$1"
|
|
uci del "wireless.$name"
|
|
}
|
|
|
|
configWifiDevice() {
|
|
local radio="$1"
|
|
local freq="$(wifiGetFreq $radio)"
|
|
|
|
[ "$freq" = "2" ] && uci set "wireless.${radio}.legacy_rates=0"
|
|
|
|
# Comments
|
|
# wXmesh: use 802.11s mesh as "default"
|
|
|
|
uci batch <<-__EOF__
|
|
set wireless.${radio}.htmode='HT20'
|
|
set wireless.${radio}.country='DE'
|
|
set wireless.${radio}.disabled='0'
|
|
|
|
set wireless.w${freq}ap='wifi-iface'
|
|
set wireless.w${freq}ap.device='${radio}'
|
|
set wireless.w${freq}ap.network='mesh'
|
|
set wireless.w${freq}ap.ifname='w${freq}ap'
|
|
set wireless.w${freq}ap.mode='ap'
|
|
set wireless.w${freq}ap.ssid='noservice.freifunk'
|
|
set wireless.w${freq}ap.encryption='none'
|
|
set wireless.w${freq}ap.hidden='0'
|
|
set wireless.w${freq}ap.disabled='0'
|
|
|
|
set network.w${freq}mesh='interface'
|
|
set network.w${freq}mesh.mtu='1560'
|
|
set network.w${freq}mesh.proto='batadv'
|
|
set network.w${freq}mesh.mesh='bat0'
|
|
|
|
set wireless.w${freq}mesh='wifi-iface'
|
|
set wireless.w${freq}mesh.device='${radio}'
|
|
set wireless.w${freq}mesh.network='w${freq}mesh'
|
|
set wireless.w${freq}mesh.ifname='w${freq}mesh'
|
|
set wireless.w${freq}mesh.mode='mesh'
|
|
set wireless.w${freq}mesh.mesh_id='nomesh.freifunk'
|
|
set wireless.w${freq}mesh.encryption='none'
|
|
set wireless.w${freq}mesh.mesh_fwding=0
|
|
set wireless.w${freq}mesh.disabled='0'
|
|
|
|
set network.configap${freq}=interface
|
|
set network.configap${freq}.proto='static'
|
|
set network.configap${freq}.ip6addr='fe80::1/64'
|
|
|
|
set wireless.w${freq}configap='wifi-iface'
|
|
set wireless.w${freq}configap.device='${radio}'
|
|
set wireless.w${freq}configap.network='configap${freq}'
|
|
set wireless.w${freq}configap.ifname='w${freq}configap'
|
|
set wireless.w${freq}configap.mode='ap'
|
|
set wireless.w${freq}configap.ssid='config.franken.freifunk.net'
|
|
set wireless.w${freq}configap.encryption='none'
|
|
set wireless.w${freq}configap.hidden='1'
|
|
set wireless.w${freq}configap.disabled='1'
|
|
__EOF__
|
|
}
|
|
|
|
# Remove WiFi config
|
|
config_load wireless
|
|
config_foreach removeWifiIface wifi-iface
|
|
|
|
# Set up WiFi devices and interfaces, but leave the latter disabled
|
|
config_load wireless
|
|
config_foreach configWifiDevice wifi-device
|
|
|
|
uci commit network
|
|
uci commit wireless
|
|
|
|
# vim: set noexpandtab:tabstop=4
|