1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 3 4 ALL_TESTS=" 5 ping_ipv4 6 ecn_test 7 ecn_test_perband 8 ecn_nodrop_test 9 red_test 10 mc_backlog_test 11 red_mirror_test 12 red_trap_test 13 ecn_mirror_test 14 " 15 : ${QDISC:=ets} 16 source sch_red_core.sh 17 18 # do_ecn_test first build 2/3 of the requested backlog and expects no marking, 19 # and then builds 3/2 of it and does expect marking. The values of $BACKLOG1 and 20 # $BACKLOG2 are far enough not to overlap, so that we can assume that if we do 21 # see (do not see) marking, it is actually due to the configuration of that one 22 # TC, and not due to configuration of the other TC leaking over. 23 BACKLOG1=200000 24 BACKLOG2=500000 25 26 install_root_qdisc() 27 { 28 tc qdisc add dev $swp3 parent 1: handle 10: $QDISC \ 29 bands 8 priomap 7 6 5 4 3 2 1 0 30 } 31 32 install_qdisc_tc0() 33 { 34 local -a args=("$@") 35 36 tc qdisc add dev $swp3 parent 10:8 handle 108: red \ 37 limit 1000000 min $BACKLOG1 max $((BACKLOG1 + 1)) \ 38 probability 1.0 avpkt 8000 burst 38 "${args[@]}" 39 } 40 41 install_qdisc_tc1() 42 { 43 local -a args=("$@") 44 45 tc qdisc add dev $swp3 parent 10:7 handle 107: red \ 46 limit 1000000 min $BACKLOG2 max $((BACKLOG2 + 1)) \ 47 probability 1.0 avpkt 8000 burst 63 "${args[@]}" 48 } 49 50 install_qdisc() 51 { 52 install_root_qdisc 53 install_qdisc_tc0 "$@" 54 install_qdisc_tc1 "$@" 55 sleep 1 56 } 57 58 uninstall_qdisc_tc0() 59 { 60 tc qdisc del dev $swp3 parent 10:8 61 } 62 63 uninstall_qdisc_tc1() 64 { 65 tc qdisc del dev $swp3 parent 10:7 66 } 67 68 uninstall_root_qdisc() 69 { 70 tc qdisc del dev $swp3 parent 1: 71 } 72 73 uninstall_qdisc() 74 { 75 uninstall_qdisc_tc0 76 uninstall_qdisc_tc1 77 uninstall_root_qdisc 78 } 79 80 ecn_test() 81 { 82 install_qdisc ecn 83 84 do_ecn_test 10 $BACKLOG1 85 do_ecn_test 11 $BACKLOG2 86 87 uninstall_qdisc 88 } 89 90 ecn_test_perband() 91 { 92 install_qdisc ecn 93 94 do_ecn_test_perband 10 $BACKLOG1 95 do_ecn_test_perband 11 $BACKLOG2 96 97 uninstall_qdisc 98 } 99 100 ecn_nodrop_test() 101 { 102 install_qdisc ecn nodrop 103 104 do_ecn_nodrop_test 10 $BACKLOG1 105 do_ecn_nodrop_test 11 $BACKLOG2 106 107 uninstall_qdisc 108 } 109 110 red_test() 111 { 112 install_qdisc 113 114 # Make sure that we get the non-zero value if there is any. 115 local cur=$(busywait 1100 until_counter_is "> 0" \ 116 qdisc_stats_get $swp3 10: .backlog) 117 (( cur == 0 )) 118 check_err $? "backlog of $cur observed on non-busy qdisc" 119 log_test "$QDISC backlog properly cleaned" 120 121 do_red_test 10 $BACKLOG1 122 do_red_test 11 $BACKLOG2 123 124 uninstall_qdisc 125 } 126 127 mc_backlog_test() 128 { 129 install_qdisc 130 131 # Note that the backlog numbers here do not correspond to RED 132 # configuration, but are arbitrary. 133 do_mc_backlog_test 10 $BACKLOG1 134 do_mc_backlog_test 11 $BACKLOG2 135 136 uninstall_qdisc 137 } 138 139 red_mirror_test() 140 { 141 install_qdisc qevent early_drop block 10 142 143 do_drop_mirror_test 10 $BACKLOG1 early_drop 144 do_drop_mirror_test 11 $BACKLOG2 early_drop 145 146 uninstall_qdisc 147 } 148 149 red_trap_test() 150 { 151 install_qdisc qevent early_drop block 10 152 153 do_drop_trap_test 10 $BACKLOG1 early_drop 154 do_drop_trap_test 11 $BACKLOG2 early_drop 155 156 uninstall_qdisc 157 } 158 159 ecn_mirror_test() 160 { 161 install_qdisc ecn qevent mark block 10 162 163 do_mark_mirror_test 10 $BACKLOG1 164 do_mark_mirror_test 11 $BACKLOG2 165 166 uninstall_qdisc 167 } 168 169 bail_on_lldpad "configure DCB" "configure Qdiscs" 170 171 trap cleanup EXIT 172 setup_prepare 173 setup_wait 174 tests_run 175 176 exit $EXIT_STATUS
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.