mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
215 lines
4.9 KiB
Bash
Executable file
215 lines
4.9 KiB
Bash
Executable file
#!/bin/sh /etc/rc.common
|
|
|
|
START=98
|
|
STOP=20
|
|
|
|
USE_PROCD=1
|
|
|
|
IS_CFG_VALID=1
|
|
|
|
handle_controller_select() {
|
|
local section="$1"
|
|
|
|
config_get_bool local_ctrl "$section" local 0
|
|
return 1
|
|
}
|
|
|
|
validate_controller_section() {
|
|
uci_validate_section mapcontroller controller "controller" \
|
|
'enabled:bool:true' \
|
|
'registrar:string' \
|
|
'debug:range(0,16)' \
|
|
'bcn_metrics_max_num:range(1,256)' \
|
|
'initial_channel_scan:bool:true' \
|
|
'resend_num:uinteger:0' \
|
|
'allow_bgdfs:range(0,2629744)' \
|
|
'stale_sta_timeout:string' \
|
|
'channel_plan:range(0,2629744)' \
|
|
'enable_ts:bool:false'
|
|
|
|
[ "$?" -ne 0 ] && {
|
|
logger -s -t "mapcontroller" "Validation of controller section failed"
|
|
IS_CFG_VALID=0
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
validate_sta_steering_section() {
|
|
local section="$1"
|
|
|
|
uci_validate_section mapcontroller $section "${1}" \
|
|
'steer_module:string' \
|
|
'enabled:bool:true' \
|
|
'enable_sta_steer:bool:false' \
|
|
'enable_bsta_steer:bool:false' \
|
|
'use_bcn_metrics:bool:false' \
|
|
'use_usta_metrics:bool:false' \
|
|
'bandsteer:bool:false' \
|
|
'diffsnr:range(0,100)' \
|
|
'rcpi_threshold_2g:range(0,220)' \
|
|
'rcpi_threshold_5g:range(0,220)' \
|
|
'rcpi_threshold_6g:range(0,220)' \
|
|
'report_rcpi_threshold_2g:range(0,220)' \
|
|
'report_rcpi_threshold_5g:range(0,220)' \
|
|
'report_rcpi_threshold_6g:range(0,220)'
|
|
|
|
[ "$?" -ne 0 ] && {
|
|
logger -s -t "mapcontroller" "Validation of sta_steering section failed"
|
|
IS_CFG_VALID=0
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
validate_ap_section() {
|
|
local section="$1"
|
|
|
|
uci_validate_section mapcontroller $section "${1}" \
|
|
'band:or("2", "5", "6")' \
|
|
'ssid:string' \
|
|
'encryption:or("sae", "sae+aes", "psk2",
|
|
"psk2+aes", "sae-mixed", "sae-mixed+aes",
|
|
"none", "psk-mixed", "psk-mixed+aes",
|
|
"psk", "psk+aes")' \
|
|
'key:string' \
|
|
'vid:range(1,65535):1' \
|
|
'type:or("backhaul", "fronthaul", "combined")' \
|
|
'disallow_bsta:list(range(0,255)):0' \
|
|
'enabled:bool:true'
|
|
|
|
[ "$?" -ne 0 ] && {
|
|
logger -s -t "mapcontroller" "Validation of ap section $section failed"
|
|
IS_CFG_VALID=0
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
validate_node_section() {
|
|
local section="$1"
|
|
|
|
uci_validate_section mapcontroller $section "${1}" \
|
|
'agent_id:macaddr' \
|
|
'backhaul_ul_macaddr:macaddr' \
|
|
'backhaul_dl_macaddr:macaddr' \
|
|
'backhaul_type:or("none")' \
|
|
'primary_vid:range(0,255):1' \
|
|
'primary_pcp:range(0,255):0' \
|
|
'report_sta_assocfails:bool:false' \
|
|
'report_sta_assocfails_rate:uinteger' \
|
|
'report_metric_periodic:range(0,255)' \
|
|
'report_scan:bool:false' \
|
|
'steer_exclude:list(macaddr)' \
|
|
'steer_exclude_btm:list(macaddr)' \
|
|
'steer_disallow:bool:false' \
|
|
'coordinated_cac:bool:false' \
|
|
'traffic_separation:bool:false' \
|
|
'sta_steer:bool:false'
|
|
|
|
[ "$?" -ne 0 ] && {
|
|
logger -s -t "mapcontroller" "Validation of node section $section failed"
|
|
IS_CFG_VALID=0
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
validate_radio_section() {
|
|
local section="$1"
|
|
|
|
uci_validate_section mapcontroller $section "${1}" \
|
|
'agent_id:macaddr' \
|
|
'macaddr:macaddr' \
|
|
'band:or("2", "5", "6")' \
|
|
'steer_policy:range(0,2)' \
|
|
'util_threshold:range(0,255)' \
|
|
'rcpi_threshold:range(0,255)' \
|
|
'report_rcpi_threshold:range(0,255)' \
|
|
'report_util_threshold:range(0,255)' \
|
|
'report_rcpi_hysteresis_margin:range(0,255)' \
|
|
'include_sta_stats:bool:false' \
|
|
'include_sta_metric:bool:false'
|
|
|
|
|
|
[ "$?" -ne 0 ] && {
|
|
logger -s -t "mapcontroller" "Validation of radio section $section failed"
|
|
IS_CFG_VALID=0
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
validate_controller_config() {
|
|
IS_CFG_VALID=1
|
|
|
|
validate_controller_section &&
|
|
config_foreach validate_sta_steering_section sta_steering &&
|
|
config_foreach validate_ap_section ap &&
|
|
config_foreach validate_node_section node &&
|
|
config_foreach validate_radio_section radio
|
|
|
|
[ "$IS_CFG_VALID" -ne 1 ] && {
|
|
logger -s -t "mapcontroller" "Validation of mapcontroller UCI file failed"
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
create_dir() {
|
|
mkdir -p /etc/multiap
|
|
}
|
|
|
|
start_service() {
|
|
local enabled
|
|
|
|
config_load "mapcontroller"
|
|
validate_controller_config || return 1;
|
|
|
|
config_get_bool enabled controller enabled 1
|
|
[ "$enabled" -eq 0 ] && return
|
|
|
|
create_dir
|
|
|
|
procd_open_instance
|
|
procd_set_param command "/usr/sbin/mapcontroller" "-d"
|
|
|
|
if [ -f /etc/config/mapagent ]; then
|
|
local local_ctrl=0
|
|
|
|
config_load "mapagent"
|
|
config_foreach handle_controller_select controller_select
|
|
[ "$local_ctrl" -eq 0 ] && procd_append_param command "-w"
|
|
fi
|
|
|
|
procd_set_param respawn
|
|
# procd_set_param stdout 1
|
|
# procd_set_param stderr 1
|
|
procd_close_instance
|
|
}
|
|
|
|
service_triggers()
|
|
{
|
|
procd_add_reload_trigger "mapcontroller"
|
|
}
|
|
|
|
reload_service() {
|
|
local enabled
|
|
|
|
config_load "mapcontroller"
|
|
config_get_bool enabled controller enabled 1
|
|
if [ "$enabled" -eq 0 ]; then
|
|
stop
|
|
# Start but without instance so reload trigger works.
|
|
start
|
|
return
|
|
fi
|
|
|
|
pidof "/usr/sbin/mapcontroller" > /dev/null
|
|
if [[ $? -ne 0 ]] ; then
|
|
start
|
|
return
|
|
fi
|
|
|
|
procd_send_signal "mapcontroller"
|
|
}
|