iopsys-feed/map-agent/files/etc/init.d/mapagent
2022-09-01 11:53:05 +00:00

261 lines
5.5 KiB
Bash
Executable file

#!/bin/sh /etc/rc.common
START=98
STOP=20
USE_PROCD=1
IS_CFG_VALID=1
MAP_DEV="map_dev"
MAP_IF="map"
create_map() {
ip link add lei type veth peer name lei_map 2>/dev/null
ip link add link lei name lei_lan type vlan id 1 2>/dev/null
uci -q set network.${MAP_DEV}=device
uci -q set network.${MAP_DEV}.name=br-map
uci -q set network.${MAP_DEV}.type=bridge
uci -q show network.${MAP_DEV}.ports | grep -q lei_map || {
uci -q add_list network.${MAP_DEV}.ports='lei_map'
}
uci -q set network.${MAP_IF}=interface
uci -q set network.${MAP_IF}.device=br-map
uci -q set network.${MAP_IF}.is_lan=1
uci -q show network.br_lan.ports | grep -q lei_lan || {
uci -q add_list network.br_lan.ports="lei_lan"
}
uci -q set mapagent.agent.al_bridge=br-map
uci -q commit
ubus call network reload
ubus -t 5 wait_for network.interface.map
brctl addif br-map lei_map 2>/dev/null
brctl addif br-lan lei_lan 2>/dev/null
ip link set lei up 2>/dev/null
ip link set lei_map up 2>/dev/null
ip link set lei_lan up 2>/dev/null
}
remove_map() {
ip link delete ${MAP_VETH} &>/dev/null
uci -q delete network.${MAP_DEV}
uci -q delete network.${MAP_IF}
uci -q set mapagent.agent.al_bridge=br-lan
uci -q commit
ubus call network reload
}
start_dynbhd_service() {
rm -f /tmp/multiap.backhaul
procd_open_instance
procd_set_param command "/usr/sbin/dynbhd"
procd_set_param respawn
# procd_set_param stdout 1
# procd_set_param stderr 1
procd_close_instance
}
validate_agent_section() {
uci_validate_section mapagent agent "agent" \
'enabled:bool:true' \
'debug:range(0,16)' \
'profile:range(1,2):2' \
'brcm_setup:bool:false' \
'controller_macaddr:macaddr' \
'al_bridge:string' \
'netdev:string' \
'vlan_segregation:bool:false' \
'resend_num:uinteger:0' \
'dyn_cntlr_sync:bool:true' \
'island_prevention:bool:false' \
'eth_onboards_wifi_bhs:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of agent section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_cs_section() {
local section="$1"
uci_validate_section mapagent $section "${section}" \
'local:bool:false' \
'id:string' \
'probe_int:range(0,1000):20' \
'retry_int:range(0,255):3' \
'autostart:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of controller_select section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_ap_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'ifname:string' \
'device:string' \
'band:or("2", "5", "6")' \
'enabled:bool:true' \
'onboarded:bool:false' \
'ssid:string' \
'key:string' \
'encryption:string' \
'disallow_bsta_p1:bool:false' \
'disallow_bsta_p2:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of ap section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_radio_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'device:string' \
'band:or("2", "5")' \
'configured:bool:false' \
'onboarded:bool:false' \
'dedicated_backhaul:bool:false' \
'steer_policy:range(0,255)' \
'util_threshold:range(0,255)' \
'rcpi_threshold:range(0,255)' \
'report_rcpi_threshold:range(0,255)' \
'include_sta_stats:bool:false' \
'include_sta_metric:bool:false' \
'rcpi_hysteresis_margin:range(0,255)' \
'report_util_threshold:range(0,255)' \
'encryption:or("sae", "psk2", "sae-mixed")'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of radio section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_policy_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'report_interval:range(0,255)' \
'pvid:uinteger' \
'report_interval:range(0,255)' \
'pcp_default:range(0,255)' \
'report_scan:bool' \
'report_sta_assocfails:bool' \
'report_sta_assocfails_rate:uinteger' \
'steer_exclude:list(macaddr)' \
'steer_exclude_btm:list(macaddr)' \
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of policy section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_dyn_bh_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'missing_bh_timer:range(1,255)'
uci_validate_section mapagent $section "${1}" \
'missing_bh_reconfig_timer:range(0,65535)'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of dynamic backhaul section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_agent_config() {
IS_CFG_VALID=1
validate_agent_section &&
config_foreach validate_cs_section controller_select &&
config_foreach validate_ap_section ap &&
config_foreach validate_radio_section radio &&
config_foreach validate_policy_section policy &&
config_foreach validate_dyn_bh_section dynamic_backhaul
[ "$IS_CFG_VALID" -ne 1 ] && {
logger -s -t "mapagent" "Validation of mapagent UCI file failed"
return 1
}
return 0
}
create_dir() {
mkdir -p /var/run/multiap
}
start_service() {
[ -f /usr/sbin/dynbhd ] && start_dynbhd_service
config_load "mapagent"
validate_agent_config || return 1;
ubus -t 5 wait_for wifi
sleep 2
local enabled
config_get_bool enabled agent enabled 1
[ "$enabled" -eq 0 ] && return 1
local ts
config_get_bool ts agent vlan_segregation 0
[ "$ts" -eq 1 ] && create_map #|| remove_map
procd_open_instance
create_dir
procd_set_param command "/usr/sbin/mapagent" "-d"
procd_set_param respawn
# procd_set_param stdout 1
# procd_set_param stderr 1
procd_close_instance
}
#stop_service() {
# remove_map
#}
service_triggers()
{
procd_add_reload_trigger "mapagent"
}
reload_service() {
stop
start
}