xref: /openwifi/user_space/link_perf_test.sh (revision 2a1e074623b8c736e0474cf32293701b6e7cd77b)
1#!/bin/bash
2
3PL_MIN=100
4PL_INC=100
5PL_MAX=1500
6PAYLOAD=( $(seq -s' ' $PL_MIN $PL_INC $PL_MAX) ) # paload size in bytes
7MCS_BPS=( 6 9 12 18 24 36 48 54 )
8MCS_IDX=( 4 5  6  7  8  9 10 11 )
9
10INTERVAL=0.001	# Wait interval seconds between sending each packet
11PKT_CNT=700		# Stop after sending count ECHO_REQUEST packets
12DEADLINE=1		# Specify a timeout, in seconds, before ping exits regardless of how many packets have been sent or received
13
14SDRCTL_EXEC="./sdrctl_src/sdrctl"
15CLIENT_IP="192.168.13.2"
16
17# Bandwidth = 1.4 MHz
18printf "LINK PERFORMANCE TEST\n"
19printf "=====================\n"
20printf "RATE/PL\t"
21for (( j = 0 ; j < ${#PAYLOAD[@]} ; j++ )) do
22	printf "%*s" 12 "${PAYLOAD[j]}"
23done
24printf "\n"
25
26for (( i = 0 ; i < ${#MCS_IDX[@]} ; i++ )) do
27
28	# configure MCS
29	$SDRCTL_EXEC dev sdr0 set reg drv_tx 0 ${MCS_IDX[$i]} > /dev/null
30
31	printf "%sMbps\t" ${MCS_BPS[$i]}
32	for (( j = 0 ; j < ${#PAYLOAD[@]} ; j++ )) do
33
34		# Measure link performance
35		link_per_str=$(ping $CLIENT_IP -i $INTERVAL -c $PKT_CNT -w $DEADLINE -s ${PAYLOAD[$j]} -nq | while read line; do
36
37			# Skip non packet-loss and non rtt responses
38			[[ ! "$line" =~ "packet loss" ]] && [[ ! "$line" =~ "rtt" ]] && continue
39
40			# Extract packet loss
41			if [[ "$line" =~ "packet loss" ]]; then
42				PL=$(echo $line | grep 'packet loss' | cut -d' ' -f6)
43				if [[ $PL == "100%" ]]; then
44					printf "%s,INF" $PL
45				else
46					printf "%s," $PL
47				fi
48			# Extract rtt
49			else
50				RTT=$(echo $line | grep rtt | cut -d/ -f5)
51				printf "%s" $RTT
52			fi
53
54		done)
55		printf "%*s" 12 $link_per_str
56	done
57	printf "\n"
58done
59
60