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.
203 lines
6.4 KiB
Bash
203 lines
6.4 KiB
Bash
#!/bin/sh
|
|
# Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
|
|
# All Rights Reserved.
|
|
# Confidential and Proprietary - Qualcomm Technologies, Inc.
|
|
|
|
FRONTHAULMGRMON_DEBUG_OUTOUT=0
|
|
|
|
# This file assumes the gwmon and wifimon (the appropriate sub-version)
|
|
# have already been sourced.
|
|
|
|
. /lib/functions/whc-network.sh
|
|
|
|
is_front_haul_VAPs_brought_down=0
|
|
|
|
# Config Parameters
|
|
manage_fronthaul_and_backhaul_independently=0
|
|
fronthaul_VAPs_bringdown_time=0
|
|
|
|
# Local parameters
|
|
ap_ifaces_24g='' ap_ifaces_5g=''
|
|
|
|
# Emit a message at debug level.
|
|
# input: $1 - the message to log
|
|
__repacd_fronthaulmgrmon_debug() {
|
|
local stderr=''
|
|
if [ "$FRONTHAULMGRMON_DEBUG_OUTOUT" -gt 0 ]; then
|
|
stderr='-s'
|
|
fi
|
|
|
|
logger $stderr -t repacd.fronthaulmgrmon -p user.debug "$1"
|
|
}
|
|
|
|
# Emit a message at info level.
|
|
__repacd_fronthaulmgrmon_info() {
|
|
local stderr=''
|
|
if [ "$BACKHAULMGRMON_DEBUG_OUTOUT" -gt 0 ]; then
|
|
stderr='-s'
|
|
fi
|
|
|
|
logger $stderr -t repacd.fronthaulmgrmon -p user.info "$1"
|
|
}
|
|
|
|
__repacd_fronthaulmgrmon_get_fronthaul_vaps() {
|
|
local config="$1"
|
|
local network_to_match="$2"
|
|
local network iface disabled mode device hwmode
|
|
|
|
config_get network "$config" network
|
|
config_get iface "$config" ifname
|
|
config_get disabled "$config" disabled '0'
|
|
config_get mode "$config" mode
|
|
config_get bssid "$config" bssid
|
|
config_get device "$config" device
|
|
config_get hwmode "$device" hwmode
|
|
|
|
if [ "$hwmode" != "11ad" ]; then
|
|
if [ "$network" = "$network_to_match" ] && [ -n "$iface" ] && \
|
|
[ "$mode" = "ap" ] && [ "$disabled" -eq 0 ]; then
|
|
|
|
if whc_is_5g_vap "$config"; then
|
|
__repacd_fronthaulmgrmon_debug "5 GHz AP VAP ($iface) found"
|
|
if [ -z "${ap_ifaces_5g}" ]; then
|
|
ap_ifaces_5g="$iface"
|
|
else
|
|
ap_ifaces_5g="$ap_ifaces_5g $iface"
|
|
fi
|
|
else
|
|
__repacd_fronthaulmgrmon_debug "2.4 GHz AP VAP ($iface) found"
|
|
if [ -z "${ap_ifaces_24g}" ]; then
|
|
ap_ifaces_24g="$iface"
|
|
else
|
|
ap_ifaces_24g="$ap_ifaces_24g $iface"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Check whether all of the provided interfaces are up
|
|
#
|
|
# input: $1 - list of AP VAPs to check
|
|
#
|
|
# return 0 if all VAPs are up, otherwise non-zero
|
|
__repacd_fronthaulmgrmon_all_AP_VAPs_up() {
|
|
local ap_ifaces="$1"
|
|
if [ -n "${ap_ifaces}" ]; then
|
|
# Check whether all VAPs are up
|
|
for item in $ap_ifaces
|
|
do
|
|
if ip link show ${item} | grep -q 'state DOWN'; then
|
|
__repacd_fronthaulmgrmon_debug "Fronthaul $item is down; will re-attempt"
|
|
return 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
__repacd_fronthaulmgrmon_bringup_AP_VAPs() {
|
|
if [ -z "${ap_ifaces_5g}" ]; then
|
|
__repacd_fronthaulmgrmon_debug "No 5 GHz AP VAPs found"
|
|
else
|
|
# Bring Up all 5G AP VAPs
|
|
for item in $ap_ifaces_5g
|
|
do
|
|
ifconfig "$item" up
|
|
done
|
|
fi
|
|
|
|
if [ -z "${ap_ifaces_24g}" ]; then
|
|
__repacd_fronthaulmgrmon_debug "No 2.4 GHz AP VAPs found"
|
|
else
|
|
# Bring Up all 2.4G AP VAPs
|
|
for item in $ap_ifaces_24g
|
|
do
|
|
ifconfig "$item" up
|
|
done
|
|
fi
|
|
}
|
|
|
|
__repacd_fronthaulmgrmon_bringdown_AP_VAPs() {
|
|
if [ -z "${ap_ifaces_5g}" ]; then
|
|
__repacd_fronthaulmgrmon_debug "No 5 GHz AP VAPs found"
|
|
else
|
|
# Bring Down all 5G AP VAPs
|
|
for item in $ap_ifaces_5g
|
|
do
|
|
ifconfig "$item" down
|
|
done
|
|
fi
|
|
|
|
if [ -z "${ap_ifaces_24g}" ]; then
|
|
__repacd_fronthaulmgrmon_debug "No 2.4 GHz AP VAPs found"
|
|
else
|
|
# Bring Down all 2.4G AP VAPs
|
|
for item in $ap_ifaces_24g
|
|
do
|
|
ifconfig "$item" down
|
|
done
|
|
fi
|
|
}
|
|
|
|
# Initialize the fronthaul manager, taking action to bring down the fronthaul
|
|
# VAPs if the feature is enabled and the gateway is not reachable.
|
|
repacd_fronthaulmgrmon_init() {
|
|
local force_down_on_start
|
|
|
|
# First resolve the config parameters.
|
|
config_load repacd
|
|
config_get manage_fronthaul_and_backhaul_independently 'FrontHaulMgr' \
|
|
'ManageFrontAndBackHaulsIndependently' '0'
|
|
config_get fronthaul_VAPs_bringdown_time 'FrontHaulMgr' \
|
|
'FrontHaulMgrTimeout' '300'
|
|
config_get force_down_on_start 'FrontHaulMgr' 'ForceDownOnStart' 0
|
|
|
|
if [ "$manage_fronthaul_and_backhaul_independently" -gt 0 ]; then
|
|
config_load wireless
|
|
config_foreach __repacd_fronthaulmgrmon_get_fronthaul_vaps wifi-iface "lan"
|
|
|
|
__repacd_fronthaulmgrmon_debug "Resolved 2.4 GHz: $ap_ifaces_24g"
|
|
__repacd_fronthaulmgrmon_debug "Resolved 5 GHz: $ap_ifaces_5g"
|
|
|
|
if [ "$IS_GW_REACHABLE" -gt 0 ]; then
|
|
__repacd_fronthaulmgrmon_debug "Bringing up Front-haul VAPs"
|
|
__repacd_fronthaulmgrmon_bringup_AP_VAPs
|
|
is_front_haul_VAPs_brought_down=0
|
|
elif [ "$force_down_on_start" -gt 0 ]; then
|
|
__repacd_fronthaulmgrmon_debug "Bringing down fronthaul VAPs on start"
|
|
__repacd_fronthaulmgrmon_bringdown_AP_VAPs
|
|
is_front_haul_VAPs_brought_down=1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Perform the periodic check to determine whether the fronthual interface
|
|
# states need to be updated or not.
|
|
repacd_fronthaulmgrmon_check() {
|
|
if [ "$manage_fronthaul_and_backhaul_independently" -gt 0 ]; then
|
|
if [ "$IS_GW_REACHABLE" -eq 0 ]; then
|
|
if [ "$is_front_haul_VAPs_brought_down" -eq 0 ]; then
|
|
if __repacd_wifimon_is_timeout "$GW_NOT_REACHABLE_TIMESTAMP" \
|
|
$fronthaul_VAPs_bringdown_time; then
|
|
__repacd_fronthaulmgrmon_debug "Expired $fronthaul_VAPs_bringdown_time sec, Bringing down Front-haul VAPs"
|
|
__repacd_fronthaulmgrmon_bringdown_AP_VAPs
|
|
is_front_haul_VAPs_brought_down=1
|
|
fi
|
|
fi
|
|
else
|
|
if [ "$is_front_haul_VAPs_brought_down" -gt 0 ]; then
|
|
__repacd_fronthaulmgrmon_debug "Bringing up Front-haul VAPs"
|
|
__repacd_fronthaulmgrmon_bringup_AP_VAPs
|
|
|
|
if __repacd_fronthaulmgrmon_all_AP_VAPs_up "${ap_ifaces_5g}" &&
|
|
__repacd_fronthaulmgrmon_all_AP_VAPs_up "${ap_ifaces_24g}"; then
|
|
__repacd_fronthaulmgrmon_debug "All Front-haul VAPs are up"
|
|
is_front_haul_VAPs_brought_down=0
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
}
|