xref: /openwifi/user_space/link_perf_test.sh (revision f5ad45c8db5afb916083614f7e32e9faa783975f)
12a1e0746SXianjun Jiao#!/bin/bash
22a1e0746SXianjun Jiao
3*f5ad45c8SJiao Xianjun# Author: Michael Mehari
4*f5ad45c8SJiao Xianjun# SPDX-FileCopyrightText: 2019 UGent
5a6085186SLina Ceballos# SPDX-License-Identifier: AGPL-3.0-or-later
6a6085186SLina Ceballos
72a1e0746SXianjun JiaoPL_MIN=100
82a1e0746SXianjun JiaoPL_INC=100
92a1e0746SXianjun JiaoPL_MAX=1500
102a1e0746SXianjun JiaoPAYLOAD=( $(seq -s' ' $PL_MIN $PL_INC $PL_MAX) ) # paload size in bytes
112a1e0746SXianjun JiaoMCS_BPS=( 6 9 12 18 24 36 48 54 )
122a1e0746SXianjun JiaoMCS_IDX=( 4 5  6  7  8  9 10 11 )
132a1e0746SXianjun Jiao
142a1e0746SXianjun JiaoINTERVAL=0.001	# Wait interval seconds between sending each packet
152a1e0746SXianjun JiaoPKT_CNT=700		# Stop after sending count ECHO_REQUEST packets
162a1e0746SXianjun JiaoDEADLINE=1		# Specify a timeout, in seconds, before ping exits regardless of how many packets have been sent or received
172a1e0746SXianjun Jiao
182a1e0746SXianjun JiaoSDRCTL_EXEC="./sdrctl_src/sdrctl"
192a1e0746SXianjun JiaoCLIENT_IP="192.168.13.2"
202a1e0746SXianjun Jiao
212a1e0746SXianjun Jiao# Bandwidth = 1.4 MHz
222a1e0746SXianjun Jiaoprintf "LINK PERFORMANCE TEST\n"
232a1e0746SXianjun Jiaoprintf "=====================\n"
242a1e0746SXianjun Jiaoprintf "RATE/PL\t"
252a1e0746SXianjun Jiaofor (( j = 0 ; j < ${#PAYLOAD[@]} ; j++ )) do
262a1e0746SXianjun Jiao	printf "%*s" 12 "${PAYLOAD[j]}"
272a1e0746SXianjun Jiaodone
282a1e0746SXianjun Jiaoprintf "\n"
292a1e0746SXianjun Jiao
302a1e0746SXianjun Jiaofor (( i = 0 ; i < ${#MCS_IDX[@]} ; i++ )) do
312a1e0746SXianjun Jiao
322a1e0746SXianjun Jiao	# configure MCS
332a1e0746SXianjun Jiao	$SDRCTL_EXEC dev sdr0 set reg drv_tx 0 ${MCS_IDX[$i]} > /dev/null
342a1e0746SXianjun Jiao
352a1e0746SXianjun Jiao	printf "%sMbps\t" ${MCS_BPS[$i]}
362a1e0746SXianjun Jiao	for (( j = 0 ; j < ${#PAYLOAD[@]} ; j++ )) do
372a1e0746SXianjun Jiao
382a1e0746SXianjun Jiao		# Measure link performance
392a1e0746SXianjun Jiao		link_per_str=$(ping $CLIENT_IP -i $INTERVAL -c $PKT_CNT -w $DEADLINE -s ${PAYLOAD[$j]} -nq | while read line; do
402a1e0746SXianjun Jiao
412a1e0746SXianjun Jiao			# Skip non packet-loss and non rtt responses
422a1e0746SXianjun Jiao			[[ ! "$line" =~ "packet loss" ]] && [[ ! "$line" =~ "rtt" ]] && continue
432a1e0746SXianjun Jiao
442a1e0746SXianjun Jiao			# Extract packet loss
452a1e0746SXianjun Jiao			if [[ "$line" =~ "packet loss" ]]; then
462a1e0746SXianjun Jiao				PL=$(echo $line | grep 'packet loss' | cut -d' ' -f6)
472a1e0746SXianjun Jiao				if [[ $PL == "100%" ]]; then
482a1e0746SXianjun Jiao					printf "%s,INF" $PL
492a1e0746SXianjun Jiao				else
502a1e0746SXianjun Jiao					printf "%s," $PL
512a1e0746SXianjun Jiao				fi
522a1e0746SXianjun Jiao			# Extract rtt
532a1e0746SXianjun Jiao			else
542a1e0746SXianjun Jiao				RTT=$(echo $line | grep rtt | cut -d/ -f5)
552a1e0746SXianjun Jiao				printf "%s" $RTT
562a1e0746SXianjun Jiao			fi
572a1e0746SXianjun Jiao
582a1e0746SXianjun Jiao		done)
592a1e0746SXianjun Jiao		printf "%*s" 12 $link_per_str
602a1e0746SXianjun Jiao	done
612a1e0746SXianjun Jiao	printf "\n"
622a1e0746SXianjun Jiaodone
632a1e0746SXianjun Jiao
64