#!/bin/sh # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (c) 2014-2018 Oracle and/or its affiliates. All Rights Reserved. # # Author: Alexey Kodanev <alexey.kodanev@oracle.com> TST_SETUP="setup" TST_TESTFUNC="test" TST_CNT=2 TST_CLEANUP="cleanup" TST_MIN_KVER="3.7" TST_NEEDS_TMPDIR=1 TST_NEEDS_ROOT=1 TST_NEEDS_CMDS="tc" TST_OPTS="R:" TST_USAGE=tcp_fastopen_usage TST_PARSE_ARGS=tcp_fastopen_parse_args srv_replies=3 tcp_fastopen_usage() { echo "-R x Number of requests, after which connection is closed" } tcp_fastopen_parse_args() { case "$1" in R) srv_replies=$2 ;; esac } . tst_net.sh cleanup() { tc qdisc del dev $(tst_iface) root netem delay 100 >/dev/null } compare() { tfo_cmp=$(( 100 - ($time_tfo_on * 100) / $time_tfo_off )) if [ "$tfo_cmp" -lt 3 ]; then tst_res TFAIL "$1 perf result is '$tfo_cmp' percent" else tst_res TPASS "$1 perf result is '$tfo_cmp' percent" fi } setup() { if tst_kvcmp -lt "3.16" && [ "$TST_IPV6" ]; then tst_brk TCONF "test must be run with kernel 3.16 or newer" fi ROD tc qdisc add dev $(tst_iface) root netem delay 100 } test1() { tst_res TINFO "using old TCP API and set tcp_fastopen to '0'" tst_netload -H $(tst_ipaddr rhost) -t 0 -R $srv_replies time_tfo_off=$(cat tst_netload.res) tst_res TINFO "using new TCP API and set tcp_fastopen to '3'" tst_netload -H $(tst_ipaddr rhost) -f -t 3 -R $srv_replies time_tfo_on=$(cat tst_netload.res) compare } test2() { tst_kvcmp -lt "4.11" && \ tst_brk TCONF "next test must be run with kernel 4.11 or newer" tst_res TINFO "using connect() and TCP_FASTOPEN_CONNECT socket option" tst_netload -H $(tst_ipaddr rhost) -F -t 3 -R $srv_replies time_tfo_on=$(cat tst_netload.res) compare } tst_run