129c1eac2SPetr Machata#!/bin/bash 229c1eac2SPetr Machata# SPDX-License-Identifier: GPL-2.0 329c1eac2SPetr Machata# 429c1eac2SPetr Machata# Test qdisc offload indication 529c1eac2SPetr Machata 629c1eac2SPetr Machata 729c1eac2SPetr MachataALL_TESTS=" 829c1eac2SPetr Machata test_root 9*3d5290eaSPetr Machata test_port_tbf 1029c1eac2SPetr Machata test_etsprio 11*3d5290eaSPetr Machata test_etsprio_port_tbf 1229c1eac2SPetr Machata" 1329c1eac2SPetr MachataNUM_NETIFS=1 1429c1eac2SPetr Machatalib_dir=$(dirname $0)/../../../net/forwarding 1529c1eac2SPetr Machatasource $lib_dir/lib.sh 1629c1eac2SPetr Machata 1729c1eac2SPetr Machatacheck_not_offloaded() 1829c1eac2SPetr Machata{ 1929c1eac2SPetr Machata local handle=$1; shift 2029c1eac2SPetr Machata local h 2129c1eac2SPetr Machata local offloaded 2229c1eac2SPetr Machata 2329c1eac2SPetr Machata h=$(qdisc_stats_get $h1 "$handle" .handle) 2429c1eac2SPetr Machata [[ $h == '"'$handle'"' ]] 2529c1eac2SPetr Machata check_err $? "Qdisc with handle $handle does not exist" 2629c1eac2SPetr Machata 2729c1eac2SPetr Machata offloaded=$(qdisc_stats_get $h1 "$handle" .offloaded) 2829c1eac2SPetr Machata [[ $offloaded == true ]] 2929c1eac2SPetr Machata check_fail $? "Qdisc with handle $handle offloaded, but should not be" 3029c1eac2SPetr Machata} 3129c1eac2SPetr Machata 3229c1eac2SPetr Machatacheck_all_offloaded() 3329c1eac2SPetr Machata{ 3429c1eac2SPetr Machata local handle=$1; shift 3529c1eac2SPetr Machata 3629c1eac2SPetr Machata if [[ ! -z $handle ]]; then 3729c1eac2SPetr Machata local offloaded=$(qdisc_stats_get $h1 "$handle" .offloaded) 3829c1eac2SPetr Machata [[ $offloaded == true ]] 3929c1eac2SPetr Machata check_err $? "Qdisc with handle $handle not offloaded" 4029c1eac2SPetr Machata fi 4129c1eac2SPetr Machata 4229c1eac2SPetr Machata local unoffloaded=$(tc q sh dev $h1 invisible | 4329c1eac2SPetr Machata grep -v offloaded | 4429c1eac2SPetr Machata sed s/root/parent\ root/ | 4529c1eac2SPetr Machata cut -d' ' -f 5) 4629c1eac2SPetr Machata [[ -z $unoffloaded ]] 4729c1eac2SPetr Machata check_err $? "Qdiscs with following parents not offloaded: $unoffloaded" 4829c1eac2SPetr Machata 4929c1eac2SPetr Machata pre_cleanup 5029c1eac2SPetr Machata} 5129c1eac2SPetr Machata 5229c1eac2SPetr Machatawith_ets() 5329c1eac2SPetr Machata{ 5429c1eac2SPetr Machata local handle=$1; shift 5529c1eac2SPetr Machata local locus=$1; shift 5629c1eac2SPetr Machata 5729c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle \ 5829c1eac2SPetr Machata ets bands 8 priomap 7 6 5 4 3 2 1 0 5929c1eac2SPetr Machata "$@" 6029c1eac2SPetr Machata tc qdisc del dev $h1 $locus 6129c1eac2SPetr Machata} 6229c1eac2SPetr Machata 6329c1eac2SPetr Machatawith_prio() 6429c1eac2SPetr Machata{ 6529c1eac2SPetr Machata local handle=$1; shift 6629c1eac2SPetr Machata local locus=$1; shift 6729c1eac2SPetr Machata 6829c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle \ 6929c1eac2SPetr Machata prio bands 8 priomap 7 6 5 4 3 2 1 0 7029c1eac2SPetr Machata "$@" 7129c1eac2SPetr Machata tc qdisc del dev $h1 $locus 7229c1eac2SPetr Machata} 7329c1eac2SPetr Machata 7429c1eac2SPetr Machatawith_red() 7529c1eac2SPetr Machata{ 7629c1eac2SPetr Machata local handle=$1; shift 7729c1eac2SPetr Machata local locus=$1; shift 7829c1eac2SPetr Machata 7929c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle \ 8029c1eac2SPetr Machata red limit 1000000 min 200000 max 300000 probability 0.5 avpkt 1500 8129c1eac2SPetr Machata "$@" 8229c1eac2SPetr Machata tc qdisc del dev $h1 $locus 8329c1eac2SPetr Machata} 8429c1eac2SPetr Machata 8529c1eac2SPetr Machatawith_tbf() 8629c1eac2SPetr Machata{ 8729c1eac2SPetr Machata local handle=$1; shift 8829c1eac2SPetr Machata local locus=$1; shift 8929c1eac2SPetr Machata 9029c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle \ 9129c1eac2SPetr Machata tbf rate 400Mbit burst 128K limit 1M 9229c1eac2SPetr Machata "$@" 9329c1eac2SPetr Machata tc qdisc del dev $h1 $locus 9429c1eac2SPetr Machata} 9529c1eac2SPetr Machata 9629c1eac2SPetr Machatawith_pfifo() 9729c1eac2SPetr Machata{ 9829c1eac2SPetr Machata local handle=$1; shift 9929c1eac2SPetr Machata local locus=$1; shift 10029c1eac2SPetr Machata 10129c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle pfifo limit 100K 10229c1eac2SPetr Machata "$@" 10329c1eac2SPetr Machata tc qdisc del dev $h1 $locus 10429c1eac2SPetr Machata} 10529c1eac2SPetr Machata 10629c1eac2SPetr Machatawith_bfifo() 10729c1eac2SPetr Machata{ 10829c1eac2SPetr Machata local handle=$1; shift 10929c1eac2SPetr Machata local locus=$1; shift 11029c1eac2SPetr Machata 11129c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle bfifo limit 100K 11229c1eac2SPetr Machata "$@" 11329c1eac2SPetr Machata tc qdisc del dev $h1 $locus 11429c1eac2SPetr Machata} 11529c1eac2SPetr Machata 11629c1eac2SPetr Machatawith_drr() 11729c1eac2SPetr Machata{ 11829c1eac2SPetr Machata local handle=$1; shift 11929c1eac2SPetr Machata local locus=$1; shift 12029c1eac2SPetr Machata 12129c1eac2SPetr Machata tc qdisc add dev $h1 $locus handle $handle drr 12229c1eac2SPetr Machata "$@" 12329c1eac2SPetr Machata tc qdisc del dev $h1 $locus 12429c1eac2SPetr Machata} 12529c1eac2SPetr Machata 12629c1eac2SPetr Machatawith_qdiscs() 12729c1eac2SPetr Machata{ 12829c1eac2SPetr Machata local handle=$1; shift 12929c1eac2SPetr Machata local parent=$1; shift 13029c1eac2SPetr Machata local kind=$1; shift 13129c1eac2SPetr Machata local next_handle=$((handle * 2)) 13229c1eac2SPetr Machata local locus; 13329c1eac2SPetr Machata 13429c1eac2SPetr Machata if [[ $kind == "--" ]]; then 13529c1eac2SPetr Machata local cmd=$1; shift 13629c1eac2SPetr Machata $cmd $(printf %x: $parent) "$@" 13729c1eac2SPetr Machata else 13829c1eac2SPetr Machata if ((parent == 0)); then 13929c1eac2SPetr Machata locus=root 14029c1eac2SPetr Machata else 14129c1eac2SPetr Machata locus=$(printf "parent %x:1" $parent) 14229c1eac2SPetr Machata fi 14329c1eac2SPetr Machata 14429c1eac2SPetr Machata with_$kind $(printf %x: $handle) "$locus" \ 14529c1eac2SPetr Machata with_qdiscs $next_handle $handle "$@" 14629c1eac2SPetr Machata fi 14729c1eac2SPetr Machata} 14829c1eac2SPetr Machata 14929c1eac2SPetr Machataget_name() 15029c1eac2SPetr Machata{ 15129c1eac2SPetr Machata local parent=$1; shift 15229c1eac2SPetr Machata local name=$(echo "" "${@^^}" | tr ' ' -) 15329c1eac2SPetr Machata 15429c1eac2SPetr Machata if ((parent != 0)); then 15529c1eac2SPetr Machata kind=$(qdisc_stats_get $h1 $parent: .kind) 15629c1eac2SPetr Machata kind=${kind%\"} 15729c1eac2SPetr Machata kind=${kind#\"} 15829c1eac2SPetr Machata name="-${kind^^}$name" 15929c1eac2SPetr Machata fi 16029c1eac2SPetr Machata 16129c1eac2SPetr Machata echo root$name 16229c1eac2SPetr Machata} 16329c1eac2SPetr Machata 16429c1eac2SPetr Machatado_test_offloaded() 16529c1eac2SPetr Machata{ 16629c1eac2SPetr Machata local handle=$1; shift 16729c1eac2SPetr Machata local parent=$1; shift 16829c1eac2SPetr Machata 16929c1eac2SPetr Machata RET=0 17029c1eac2SPetr Machata with_qdiscs $handle $parent "$@" -- check_all_offloaded 17129c1eac2SPetr Machata log_test $(get_name $parent "$@")" offloaded" 17229c1eac2SPetr Machata} 17329c1eac2SPetr Machata 17429c1eac2SPetr Machatado_test_nooffload() 17529c1eac2SPetr Machata{ 17629c1eac2SPetr Machata local handle=$1; shift 17729c1eac2SPetr Machata local parent=$1; shift 17829c1eac2SPetr Machata 17929c1eac2SPetr Machata local name=$(echo "${@^^}" | tr ' ' -) 18029c1eac2SPetr Machata local kind 18129c1eac2SPetr Machata 18229c1eac2SPetr Machata RET=0 18329c1eac2SPetr Machata with_qdiscs $handle $parent "$@" -- check_not_offloaded 18429c1eac2SPetr Machata log_test $(get_name $parent "$@")" not offloaded" 18529c1eac2SPetr Machata} 18629c1eac2SPetr Machata 18729c1eac2SPetr Machatado_test_combinations() 18829c1eac2SPetr Machata{ 18929c1eac2SPetr Machata local handle=$1; shift 19029c1eac2SPetr Machata local parent=$1; shift 19129c1eac2SPetr Machata 19229c1eac2SPetr Machata local cont 19329c1eac2SPetr Machata local leaf 19429c1eac2SPetr Machata local fifo 19529c1eac2SPetr Machata 19629c1eac2SPetr Machata for cont in "" ets prio; do 19729c1eac2SPetr Machata for leaf in "" red tbf "red tbf" "tbf red"; do 19829c1eac2SPetr Machata for fifo in "" pfifo bfifo; do 19929c1eac2SPetr Machata if [[ -z "$cont$leaf$fifo" ]]; then 20029c1eac2SPetr Machata continue 20129c1eac2SPetr Machata fi 20229c1eac2SPetr Machata do_test_offloaded $handle $parent \ 20329c1eac2SPetr Machata $cont $leaf $fifo 20429c1eac2SPetr Machata done 20529c1eac2SPetr Machata done 20629c1eac2SPetr Machata done 20729c1eac2SPetr Machata 20829c1eac2SPetr Machata for cont in ets prio; do 20929c1eac2SPetr Machata for leaf in red tbf; do 21029c1eac2SPetr Machata do_test_nooffload $handle $parent $cont red tbf $leaf 21129c1eac2SPetr Machata do_test_nooffload $handle $parent $cont tbf red $leaf 21229c1eac2SPetr Machata done 21329c1eac2SPetr Machata for leaf in "red red" "tbf tbf"; do 21429c1eac2SPetr Machata do_test_nooffload $handle $parent $cont $leaf 21529c1eac2SPetr Machata done 21629c1eac2SPetr Machata done 21729c1eac2SPetr Machata 21829c1eac2SPetr Machata do_test_nooffload $handle $parent drr 21929c1eac2SPetr Machata} 22029c1eac2SPetr Machata 22129c1eac2SPetr Machatatest_root() 22229c1eac2SPetr Machata{ 22329c1eac2SPetr Machata do_test_combinations 1 0 22429c1eac2SPetr Machata} 22529c1eac2SPetr Machata 226*3d5290eaSPetr Machatatest_port_tbf() 227*3d5290eaSPetr Machata{ 228*3d5290eaSPetr Machata with_tbf 1: root \ 229*3d5290eaSPetr Machata do_test_combinations 8 1 230*3d5290eaSPetr Machata} 231*3d5290eaSPetr Machata 23229c1eac2SPetr Machatado_test_etsprio() 23329c1eac2SPetr Machata{ 23429c1eac2SPetr Machata local parent=$1; shift 23529c1eac2SPetr Machata local tbfpfx=$1; shift 23629c1eac2SPetr Machata local cont 23729c1eac2SPetr Machata 23829c1eac2SPetr Machata for cont in ets prio; do 23929c1eac2SPetr Machata RET=0 24029c1eac2SPetr Machata with_$cont 8: "$parent" \ 24129c1eac2SPetr Machata with_red 11: "parent 8:1" \ 24229c1eac2SPetr Machata with_red 12: "parent 8:2" \ 24329c1eac2SPetr Machata with_tbf 13: "parent 8:3" \ 24429c1eac2SPetr Machata with_tbf 14: "parent 8:4" \ 24529c1eac2SPetr Machata check_all_offloaded 24629c1eac2SPetr Machata log_test "root$tbfpfx-ETS-{RED,TBF} offloaded" 24729c1eac2SPetr Machata 24829c1eac2SPetr Machata RET=0 24929c1eac2SPetr Machata with_$cont 8: "$parent" \ 25029c1eac2SPetr Machata with_red 81: "parent 8:1" \ 25129c1eac2SPetr Machata with_tbf 811: "parent 81:1" \ 25229c1eac2SPetr Machata with_tbf 84: "parent 8:4" \ 25329c1eac2SPetr Machata with_red 841: "parent 84:1" \ 25429c1eac2SPetr Machata check_all_offloaded 25529c1eac2SPetr Machata log_test "root$tbfpfx-ETS-{RED-TBF,TBF-RED} offloaded" 25629c1eac2SPetr Machata 25729c1eac2SPetr Machata RET=0 25829c1eac2SPetr Machata with_$cont 8: "$parent" \ 25929c1eac2SPetr Machata with_red 81: "parent 8:1" \ 26029c1eac2SPetr Machata with_tbf 811: "parent 81:1" \ 26129c1eac2SPetr Machata with_bfifo 8111: "parent 811:1" \ 26229c1eac2SPetr Machata with_tbf 82: "parent 8:2" \ 26329c1eac2SPetr Machata with_red 821: "parent 82:1" \ 26429c1eac2SPetr Machata with_bfifo 8211: "parent 821:1" \ 26529c1eac2SPetr Machata check_all_offloaded 26629c1eac2SPetr Machata log_test "root$tbfpfx-ETS-{RED-TBF-bFIFO,TBF-RED-bFIFO} offloaded" 26729c1eac2SPetr Machata done 26829c1eac2SPetr Machata} 26929c1eac2SPetr Machata 27029c1eac2SPetr Machatatest_etsprio() 27129c1eac2SPetr Machata{ 27229c1eac2SPetr Machata do_test_etsprio root "" 27329c1eac2SPetr Machata} 27429c1eac2SPetr Machata 275*3d5290eaSPetr Machatatest_etsprio_port_tbf() 276*3d5290eaSPetr Machata{ 277*3d5290eaSPetr Machata with_tbf 1: root \ 278*3d5290eaSPetr Machata do_test_etsprio "parent 1:1" "-TBF" 279*3d5290eaSPetr Machata} 280*3d5290eaSPetr Machata 28129c1eac2SPetr Machatacleanup() 28229c1eac2SPetr Machata{ 28329c1eac2SPetr Machata tc qdisc del dev $h1 root &>/dev/null 28429c1eac2SPetr Machata} 28529c1eac2SPetr Machata 28629c1eac2SPetr Machatatrap cleanup EXIT 28729c1eac2SPetr Machatah1=${NETIFS[p1]} 28829c1eac2SPetr Machatatests_run 28929c1eac2SPetr Machata 29029c1eac2SPetr Machataexit $EXIT_STATUS 291