You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.7 KiB
Bash

4 years ago
#!/bin/sh
#
# Copyright (C) 2018 devolo AG
#
. /usr/lib/lh-migration.sh
function migrate_ap() {
local lh_path=$1
local uci_index=$2
local uci_path="wireless.@wifi-iface[$uci_index]"
if [ -z "$(lh_filter $lh_path.Role)" ]; then
uci set $uci_path.disabled=1
logger "Missing AP $lh_path, disabling ours"
return 0
fi
logger "Migrating AP $lh_path"
logger "LH data: $(lh_filter $lh_path)"
uci set $uci_path.ssid="$(lh_filter $lh_path.SSID)"
local security="$(lh_filter $lh_path.Security)"
case "$security" in
none)
logger "Setting no encryption"
uci set $uci_path.encryption="none"
;;
WPA)
local mode="$(lh_filter $lh_path.WPAMode)"
if [ "$mode" = "both" ]; then
logger "Setting WPA/WPA2 encryption"
uci set $uci_path.encryption="psk-mixed+tkip+ccmp"
elif [ "$mode" = "WPA2" ]; then
logger "Setting WPA2 encryption"
uci set $uci_path.encryption="psk2"
fi
uci set $uci_path.key="$(lh_filter $lh_path.WPAKey)"
;;
esac
local VAL=0
[ "$(lh_filter $lh_path.Active)" != "true" ] && VAL=1
uci set $uci_path.disabled=$VAL
[ "$(lh_filter $lh_path.HideSSID)" = "true" ] && uci set $uci_path.hidden=1
[ "$(lh_filter $lh_path.Role)" = "guest" ] && uci set $uci_path.dvl_guest=1
}
function migrate_radio() {
local index=$1
local lh_path=$2
local uci_path="wireless.wifi$index"
# Our defaults are radios on
[ "$(lh_filter $lh_path.WLANRadio)" = "false" ] && {
uci set $uci_path.disabled=1
uci set $uci_path.cfg_disabled=1
}
# Our defaults are auto channel
local channel=$(lh_filter $lh_path.Channel)
# In a special case of genius, LH uses 35 to mean "auto" for 5 GHz radios
[ ! "$channel" = "0" ] && [ ! "$channel" = "35" ] && uci set $uci_path.channel=$channel
}
function migrate_radio_mode() {
local lh_path="$.SystemConfig.Services.Wireless"
local uci_path="wireless"
local RADIO_MODE="$(lh_filter $lh_path.RadioMode)"
logger "Migrating RadioMode $RADIO_MODE"
case $RADIO_MODE in
all)
[ "$(lh_filter $lh_path.Radios[0].WLANRadio)" = "false" ] && uci set $uci_path.wifi0.disabled=1
[ "$(lh_filter $lh_path.Radios[1].WLANRadio)" = "false" ] && uci set $uci_path.wifi1.disabled=1
;;
radio0)
[ "$(lh_filter $lh_path.Radios[0].WLANRadio)" = "false" ] && uci set $uci_path.wifi0.disabled=1
uci set $uci_path.wifi1.disabled=1
;;
radio1)
uci set $uci_path.wifi0.disabled=1
[ "$(lh_filter $lh_path.Radios[1].WLANRadio)" = "false" ] && uci set $uci_path.wifi1.disabled=1
;;
esac
}
# No pro features, so strictly 2 APs per radio
function migrate_single_radio() {
logger "Migrating single radio"
config_load wireless
migrate_radio 0 "$.SystemConfig.Services.Wireless.Radio"
migrate_ap "$.SystemConfig.Services.Wireless.Radio.APs[0]" 0
migrate_ap "$.SystemConfig.Services.Wireless.Radio.APs[1]" 1
uci_commit wireless
}
function migrate_dual_radio() {
logger "Migrating dual radio"
config_load wireless
migrate_radio_mode
migrate_radio 0 "$.SystemConfig.Services.Wireless.Radios[0]"
migrate_radio 1 "$.SystemConfig.Services.Wireless.Radios[1]"
migrate_ap "$.SystemConfig.Services.Wireless.Radios[0].APs[0]" 0
migrate_ap "$.SystemConfig.Services.Wireless.Radios[1].APs[0]" 1
migrate_ap "$.SystemConfig.Services.Wireless.Radios[0].APs[1]" 2
migrate_ap "$.SystemConfig.Services.Wireless.Radios[1].APs[1]" 3
uci_commit wireless
}
[ "$1" = "single" ] && migrate_single_radio
[ "$1" = "dual" ] && migrate_dual_radio