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

4 years ago
#!/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
}