mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-28 17:32:35 +00:00
129 lines
3.5 KiB
Bash
Executable File
129 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# This script will reset any layer 4 connection that reaches 0 Mbps over last minute.
|
|
# Run this script from the /home/lanforge/scripts directory.
|
|
|
|
|
|
# Custom variables
|
|
# Use DB to set a database to load.
|
|
# Use mgr to have this script run on another system (replace localhost with ip or hostname).
|
|
# Use rate to change how often the script checks layer 4 endpoints (default is 60s).
|
|
DB=""
|
|
mgr="localhost"
|
|
napTime="30s"
|
|
min="0"
|
|
|
|
### Should not need to change anything below this line! ###
|
|
|
|
function show_help() {
|
|
echo "$0 -m <manager> -d <delay> -n <minimum-bps> -l <database>"
|
|
echo " --mgr <manager> --delay <seconds> --min <minimum-bps> --load <database>"
|
|
echo ""
|
|
exit
|
|
}
|
|
|
|
ARGS=`getopt -o d:l:m:n:h --long help,load:,delay:,mgr:,min: -- "$@"`
|
|
|
|
while :; do
|
|
case "$1" in
|
|
-l|--load) DB="$2"; shift 2 ;;
|
|
|
|
-d|--delay) napTime="$2"; shift 2 ;;
|
|
|
|
-m|--mgr) mgr="$2"; shift 2 ;;
|
|
|
|
-n|--min) min="$2"; shift 2 ;;
|
|
|
|
--) shift; break;;
|
|
|
|
-h|--help)
|
|
show_help
|
|
exit 1 ;;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
echo -n "Options --mgr $mgr --delay $napTime --min $min"
|
|
if [[ $DB != "" ]]; then
|
|
echo -n "--db $DB"
|
|
fi
|
|
echo ""
|
|
|
|
# Load DB (if provided above)
|
|
if [[ ! $DB = "" ]]; then
|
|
echo -n "Loading database $DB..."
|
|
./lf_portmod.pl --manager $mgr --load $DB > /dev/null
|
|
sleep 10s
|
|
echo "...done"
|
|
fi
|
|
echo "Press Control-C to stop..."
|
|
|
|
while : ; do
|
|
# List layer-4 cx
|
|
l4output=`./lf_firemod.pl --mgr $mgr --cmd "show_cx" \
|
|
| grep "type: L4_GENERIC" | awk ' ''{print $3}' | cut -d "_" -f 2- \
|
|
| sort | uniq`
|
|
|
|
# We get all the statuses we can get because that it a lot faster
|
|
# than querying one status at a time
|
|
allStatuses=`./lf_firemod.pl --mgr $mgr --action show_endp`
|
|
|
|
l4list=($l4output)
|
|
for i in "${l4list[@]}"
|
|
do
|
|
# if we call lf_firemod multiple times we have to wait on
|
|
# the manager and it ends up taking longer than our dwell time
|
|
# endp_status=`./lf_firemod.pl --mgr $mgr --action show_endp --endp_name`
|
|
|
|
endp_status=`echo "$allStatuses" | awk "/L4Endp \[$i\]/{flag=1}/^\$/{flag=0}flag"`
|
|
|
|
#echo '---------------------------------------'
|
|
#echo "$endp_status"
|
|
#echo '---------------------------------------'
|
|
|
|
l4read=`echo "$endp_status" | awk '/Bytes Read:/ {print $8}'`
|
|
l4write=`echo "$endp_status" | awk '/Bytes Written:/ {print $8}'`
|
|
runChk=`echo "$endp_status" | grep '^L4Endp '`
|
|
runStat=`echo "$runChk" | sed 's/L4Endp \[.*\] (\(.*\))/\1/'`
|
|
|
|
checkSpeed=0
|
|
doL4Restart=0
|
|
case "$runStat" in
|
|
"RUNNING")
|
|
checkSpeed=1
|
|
;;
|
|
"RUNNING, ALLOW_REUSE")
|
|
checkSpeed=1
|
|
;;
|
|
"NOT_RUNNING")
|
|
doL4Restart=1
|
|
;;
|
|
"NOT_RUNNING, WAIT_RESTART")
|
|
doL4Restart=1
|
|
;;
|
|
"NOT_RUNNING, ALLOW_REUSE")
|
|
;;
|
|
*)
|
|
echo "Unknown case ${i}[$runStat]"
|
|
;;
|
|
esac
|
|
if [[ x$checkSpeed = x1 ]]; then
|
|
#echo "l4read[$l4read] min[$min] l4write[$l4write]"
|
|
if (( $l4read <= $min )) && (( $l4write <= $min )); then
|
|
doL4Restart=1
|
|
fi
|
|
fi
|
|
|
|
#echo "restart[${doL4Restart}] $i l4read[$l4read] l4write[$l4write] $runChk"
|
|
|
|
if (( $doL4Restart == 1 )); then
|
|
echo "Resetting $i at `date`"
|
|
./lf_firemod.pl --mgr $mgr --cmd "set_cx_state all CX_$i STOPPED" > /dev/null
|
|
sleep 3s
|
|
./lf_firemod.pl --mgr $mgr --cmd "set_cx_state all CX_$i RUNNING" > /dev/null
|
|
fi
|
|
done
|
|
|
|
echo -n "."
|
|
sleep $napTime
|
|
done
|