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.
157 lines
4.2 KiB
Bash
157 lines
4.2 KiB
Bash
#!/bin/sh
|
|
# Copyright (c) 2017 Qualcomm Technologies, Inc.
|
|
# All Rights Reserved.
|
|
# Confidential and Proprietary - Qualcomm Technologies, Inc.
|
|
|
|
PLCMON_DEBUG_OUTOUT=0
|
|
|
|
PLCMON_LINK_METRICS='/var/run/plcmetrics'
|
|
PLCMON_UDP_EFFICIENCY="65"
|
|
PLCMON_TX="TX"
|
|
PLCMON_BDA="BDA"
|
|
PLCMON_BDA_NONE="FF:FF:FF:FF:FF:FF"
|
|
PLCMON_REMOTE=":Remote"
|
|
|
|
# PLC config parameters
|
|
plc_enabled=0 plc_ifname="" plc_host_speed=0
|
|
|
|
# Emit a message at debug level.
|
|
# input: $1 - the message to log
|
|
__repacd_plcmon_debug() {
|
|
local stderr=''
|
|
if [ "$PLCMON_DEBUG_OUTOUT" -gt 0 ]; then
|
|
stderr='-s'
|
|
fi
|
|
|
|
logger $stderr -t repacd.plcmon -p user.debug "$1"
|
|
}
|
|
|
|
# Emit a message at info level.
|
|
__repacd_plcmon_info() {
|
|
local stderr=''
|
|
if [ "$PLCMON_DEBUG_OUTOUT" -gt 0 ]; then
|
|
stderr='-s'
|
|
fi
|
|
|
|
logger $stderr -t repacd.plcmon -p user.info "$1"
|
|
}
|
|
|
|
# Bringup PLC interface
|
|
# input: None
|
|
# output: None
|
|
__repacd_plcmon_bring_plc_iface_up() {
|
|
if [ ! -z "$plc_ifname" ]; then
|
|
ifconfig $plc_ifname up
|
|
__repacd_plcmon_debug "PLC interface ($plc_ifname) Brought up"
|
|
fi
|
|
}
|
|
|
|
# Bringdown PLC interface
|
|
# input: None
|
|
# output: None
|
|
__repacd_plcmon_bring_plc_iface_down() {
|
|
if [ ! -z "$plc_ifname" ]; then
|
|
ifconfig $plc_ifname down
|
|
__repacd_plcmon_debug "PLC interface ($plc_ifname) Brought down"
|
|
fi
|
|
|
|
__repacd_plcmon_get_timestamp force_down_plc_timestamp
|
|
}
|
|
|
|
# Check whether PLC is enabled in configuration file
|
|
# output: 0 - success; if configured
|
|
# 1 - failure; if not configured
|
|
__repacd_plcmon_is_plc_enabled() {
|
|
if [ "$plc_enabled" -eq 0 ]; then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
repacd_plcmon_init() {
|
|
config_load plc
|
|
config_get plc_enabled "config" "Enabled" '0'
|
|
config_get plc_ifname "config" "PlcIfname" ""
|
|
|
|
config_load hyd
|
|
config_get plc_host_speed "PathChPlc" "HostPLCInterfaceSpeed" '1000'
|
|
}
|
|
|
|
# Measure the PLC link rate
|
|
# output: $1 - The supported PLC Link rate
|
|
# Returns: 0, success -- if PLC device is connected to CAP
|
|
# 1, failure -- if CAP MAC address is not found in any of the Remote
|
|
# devices BDA address
|
|
__repacd_plcmon_measure_plc_rate() {
|
|
local plc_iface_tx_rate=0
|
|
local is_w_bda=0
|
|
local is_w_bdanone=0
|
|
local found_cap_mac=0
|
|
local found_remote_devices=0
|
|
|
|
# Get the PLC Link Metrics
|
|
/usr/sbin/plchost -i br-lan -m > $PLCMON_LINK_METRICS
|
|
|
|
plc_iface_tx_rate=0
|
|
# Parse every line in the the file PLCMON_LINK_METRICS
|
|
while IFS= read -r line; do
|
|
for w in $line; do
|
|
# Check if Bridged DA is found,
|
|
# i.e., connected to host
|
|
if [ "$w" = $PLCMON_BDA ]; then
|
|
is_w_bda=1
|
|
fi
|
|
if [ $is_w_bda -gt 0 ]; then
|
|
if echo $w | grep -i "$gw_mac" > /dev/null; then
|
|
found_cap_mac=1
|
|
is_w_bda=0
|
|
fi
|
|
fi
|
|
if [ "$w" = $PLCMON_REMOTE ]; then
|
|
found_remote_devices=$((found_remote_devices+1))
|
|
fi
|
|
if [ $found_cap_mac -gt 0 ]; then
|
|
if [ "$w" = $PLCMON_TX ]; then
|
|
plc_iface_tx_rate=$(echo $line | tr -dc '0-9')
|
|
plc_iface_tx_rate=$(echo $plc_iface_tx_rate | sed 's/^0*//')
|
|
found_cap_mac=0
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
done < $PLCMON_LINK_METRICS
|
|
|
|
if [ -z "${plc_iface_tx_rate}" ]; then
|
|
plc_iface_tx_rate=0
|
|
fi
|
|
|
|
if [ "$plc_iface_tx_rate" -gt 0 ]; then
|
|
plc_iface_tx_rate=$((($plc_iface_tx_rate*$PLCMON_UDP_EFFICIENCY)/100))
|
|
if [ "$plc_iface_tx_rate" -ge "$plc_host_speed" ]; then
|
|
plc_iface_tx_rate=$plc_host_speed
|
|
fi
|
|
fi
|
|
eval "$1=$plc_iface_tx_rate"
|
|
|
|
if [ "$found_remote_devices" -gt 0 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Check whether PLC device is connected
|
|
# output: 0 - success; if MME return is successful
|
|
# 1 - failure; if MME return is not successful
|
|
__repacd_plcmon_is_plc_connected() {
|
|
local plc_tx_rate=0
|
|
|
|
if __repacd_plcmon_measure_plc_rate plc_tx_rate; then
|
|
eval "$1=$plc_tx_rate"
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|