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