mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-30 18:27:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			164 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| #------------------------------------------------------------
 | |
| # Use this script to track traffic on a voip call
 | |
| #------------------------------------------------------------
 | |
| 
 | |
| function usage() {
 | |
|    echo "$0 {manager} {resource} {CX name} {poll time}"
 | |
|    echo "   Use poll time 0 to run just once"
 | |
|    echo "   Poll time is an argument to sleep(1)"
 | |
| }
 | |
| 
 | |
| RtpPktsTx="RTP Pkts Tx"
 | |
| RtpPktsRx="RTP Pkts Rx"
 | |
| # pass this the file name
 | |
| function study_call() {
 | |
|    [ ! -r "$1" ] && echo "Unable to find Endpoint record: $1" && exit 1
 | |
|    local call_state="unknown"
 | |
|    local actual_state="unknown"
 | |
|    local running_for=0
 | |
|    local idx=0
 | |
|    local line
 | |
|    if [[ $endp = *-B ]]; then
 | |
|       idx=1
 | |
|    fi
 | |
| 
 | |
|    while IFS= read -r line ; do
 | |
|       local chunks
 | |
|       local shunks=($line)
 | |
|       IFS=: read -r -a chunks <<< "$line"
 | |
|       #for h in "${hunks[@]}"; do 
 | |
|       #   echo -n "$h,"
 | |
|       #done
 | |
|       #echo ""
 | |
|       local lasthunk="${line:63}"
 | |
|       local lr=($lasthunk)
 | |
|       local fields=($(echo "${line:34:+12}") "${lr[0]}" "${lr[1]}")
 | |
| 
 | |
|       first=`echo ${chunks[0]}`;
 | |
|       #echo "first[$first]"
 | |
|       case $first in
 | |
|          RegisterState)
 | |
|             call_state=${shunks[3]}
 | |
|             #echo "call_state ${call_state}"
 | |
|             ;;
 | |
|          RptTimer)
 | |
|             running_for=${shunks[3]}
 | |
|             running_for=${running_for:0:-1} # chop 's' off 
 | |
|             #echo "running_for ${running_for}"
 | |
|             ;;
 | |
|          CallsAttempted)
 | |
|             results_attempted[$endp]=${fields[0]}
 | |
|             #echo "$endp attempted: ${fields[0]}"
 | |
|             ;;
 | |
|          CallsCompleted)
 | |
|             results_completed[$endp]=${fields[0]}
 | |
|             #echo "$endp completed: ${fields[0]}"
 | |
|             ;;
 | |
|          $RtpPktsTx)
 | |
|             #echo "Tx $line"
 | |
|             #echo "[${fields[0]}][${fields[1]}][${fields[2]}]"
 | |
|             results_tx[$endp]=${fields[0]}
 | |
|             ;;
 | |
|          $RtpPktsRx)
 | |
|             #echo "Rx $line"
 | |
|             #echo "[${fields[0]}][${fields[1]}][${fields[2]}]"
 | |
|             results_rx[$endp]=${fields[0]}
 | |
|             ;;
 | |
|       esac
 | |
|    done < "$1"
 | |
| 
 | |
|    if [[ $call_state = ON_HOOK ]]; then
 | |
|       actual_state=$call_state
 | |
|    elif [[ $running_for -gt 65535 ]]; then
 | |
|       actual_state="ON_HOOK"
 | |
|    elif [[ $running_for -le 65535 ]]; then
 | |
|       actual_state=$call_state
 | |
|    fi
 | |
|    # echo "$endp $actual_state Tx ${results_tx[$endp]} Rx ${results_rx[$endp]}"
 | |
| }
 | |
| 
 | |
| [ -z "$1" ] && usage && exit 1
 | |
| [ -z "$2" ] && usage && exit 1
 | |
| [ -z "$3" ] && usage && exit 1
 | |
| [ -z "$4" ] && usage && exit 1
 | |
| 
 | |
| 
 | |
| cd /home/lanforge/scripts
 | |
| q="--quiet yes"
 | |
| m="--mgr $1"
 | |
| r="--resource $2"
 | |
| 
 | |
| fire=$( echo ./lf_firemod.pl $m $q $r )
 | |
| # find endpoint name
 | |
| $fire --action list_endp > /tmp/list_endp.$$
 | |
| 
 | |
| # example:
 | |
| # ./lf_firemod.pl --mgr idtest --quiet yes --action list_endp | grep VoipEndp \
 | |
| # | while read -r line ; do hunks=($line); echo "${hunks[1]}"; done
 | |
| #   [v3v2-30000-B]
 | |
| #   [v3v2-30000-A]
 | |
| 
 | |
| declare -A results_tx
 | |
| declare -A results_rx
 | |
| declare -A results_attempted
 | |
| declare -A results_completed
 | |
| 
 | |
| declare -A cx_names=()
 | |
| voip_endp_names=()
 | |
| while IFS= read -r line ; do
 | |
|    jhunks=($line)
 | |
|    [[ "${jhunks[0]}" != "VoipEndp" ]] && continue
 | |
|    name=${jhunks[1]:1:-1} # that trims the brackets
 | |
|    [[ $name != ${3}-* ]] && continue
 | |
|    voip_endp_names+=($name)
 | |
|    cx_n="${name%-[AB]}"
 | |
|    #echo "CX_N: $cx_n"
 | |
|    [[ -z "${cx_names[$cx_n]+unset}" ]] && cx_names+=(["$cx_n"]=1)
 | |
| done < /tmp/list_endp.$$
 | |
| #echo "Matching voip endpoints: ${voip_endp_names[@]}"
 | |
| 
 | |
| while true; do
 | |
|    for endp in "${voip_endp_names[@]}"; do
 | |
|       $fire --action show_endp --endp_name $endp > /tmp/endp_$$
 | |
|       if [ -z "${results_tx[$endp]+unset}" ]; then
 | |
|          results_tx[$endp]="0"
 | |
|       fi
 | |
|       if [ -z "${results_rx[$endp]+unset}" ]; then
 | |
|          results_rx[$endp]="0"
 | |
|       fi
 | |
|       if [ -z "${results_attempted[$endp]+unset}" ]; then
 | |
|          results_attempted[$endp]="0"
 | |
|       fi
 | |
|       if [ -z "${results_completed[$endp]+unset}" ]; then
 | |
|          results_completed[$endp]="0"
 | |
|       fi
 | |
| 
 | |
|       study_call /tmp/endp_$$
 | |
|       rm /tmp/endp_$$
 | |
|    done
 | |
|    for cx in "${!cx_names[@]}"; do
 | |
|       enda="${cx}-A"
 | |
|       endb="${cx}-B"
 | |
| 
 | |
|       if [[ ${results_attempted[$enda]} -gt 1 ]] ; then
 | |
|          if [[ ${results_completed[$endb]} < $(( ${results_attempted[$enda]} -1 )) ]]; then
 | |
|             echo -n " fewer calls recieved: "
 | |
|             echo " attempted ${results_attempted[$enda]} completed ${results_completed[$endb]}"
 | |
|          fi
 | |
|       fi
 | |
|       if [[ ${results_tx[$enda]} -gt 1 ]] ; then
 | |
|          if [[ ${results_rx[$endb]} < $(( ${results_tx[$enda]} / 2 )) ]]; then
 | |
|             echo -n " fewer packets recieved: "
 | |
|             echo " tx ${results_tx[$enda]}               rx ${results_rx[$endb]}"
 | |
|          fi
 | |
|       fi
 | |
|    done
 | |
|    sleep "$4"
 | |
|    [ $4 -eq 0 ] && exit
 | |
| done
 | |
| 
 | |
| 
 | |
| # eof
 | 
