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