mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-11-03 04:07:52 +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
 |