| 1 | |
| 2 | |
| 3 |
|
| 4 | ALL_TESTS="
|
| 5 | port_pool_test
|
| 6 | port_tc_ip_test
|
| 7 | port_tc_arp_test
|
| 8 | "
|
| 9 |
|
| 10 | NUM_NETIFS=2
|
| 11 | source ../../../net/forwarding/lib.sh
|
| 12 | source ../../../net/forwarding/devlink_lib.sh
|
| 13 | source mlxsw_lib.sh
|
| 14 |
|
| 15 | SB_POOL_ING=0
|
| 16 | SB_POOL_EGR_CPU=10
|
| 17 |
|
| 18 | SB_ITC_CPU_IP=2
|
| 19 | SB_ITC_CPU_ARP=2
|
| 20 | SB_ITC=0
|
| 21 |
|
| 22 | h1_create()
|
| 23 | {
|
| 24 | simple_if_init $h1 192.0.1.1/24
|
| 25 | tc qdisc add dev $h1 clsact
|
| 26 |
|
| 27 | |
| 28 | |
| 29 | tc filter add dev $h1 egress pref 2 handle 102 matchall action drop
|
| 30 | }
|
| 31 |
|
| 32 | h1_destroy()
|
| 33 | {
|
| 34 | tc filter del dev $h1 egress pref 2 handle 102 matchall action drop
|
| 35 | tc qdisc del dev $h1 clsact
|
| 36 | simple_if_fini $h1 192.0.1.1/24
|
| 37 | }
|
| 38 |
|
| 39 | h2_create()
|
| 40 | {
|
| 41 | simple_if_init $h2 192.0.1.2/24
|
| 42 | tc qdisc add dev $h2 clsact
|
| 43 |
|
| 44 | |
| 45 | |
| 46 | tc filter add dev $h2 egress pref 1 handle 101 matchall action drop
|
| 47 | }
|
| 48 |
|
| 49 | h2_destroy()
|
| 50 | {
|
| 51 | tc filter del dev $h2 egress pref 1 handle 101 matchall action drop
|
| 52 | tc qdisc del dev $h2 clsact
|
| 53 | simple_if_fini $h2 192.0.1.2/24
|
| 54 | }
|
| 55 |
|
| 56 | sb_occ_pool_check()
|
| 57 | {
|
| 58 | local dl_port=$1; shift
|
| 59 | local pool=$1; shift
|
| 60 | local exp_max_occ=$1
|
| 61 | local max_occ
|
| 62 | local err=0
|
| 63 |
|
| 64 | max_occ=$(devlink sb -j occupancy show $dl_port \
|
| 65 | | jq -e ".[][][\"pool\"][\"$pool\"][\"max\"]")
|
| 66 |
|
| 67 | if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
|
| 68 | err=1
|
| 69 | fi
|
| 70 |
|
| 71 | echo $max_occ
|
| 72 | return $err
|
| 73 | }
|
| 74 |
|
| 75 | sb_occ_itc_check()
|
| 76 | {
|
| 77 | local dl_port=$1; shift
|
| 78 | local itc=$1; shift
|
| 79 | local exp_max_occ=$1
|
| 80 | local max_occ
|
| 81 | local err=0
|
| 82 |
|
| 83 | max_occ=$(devlink sb -j occupancy show $dl_port \
|
| 84 | | jq -e ".[][][\"itc\"][\"$itc\"][\"max\"]")
|
| 85 |
|
| 86 | if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
|
| 87 | err=1
|
| 88 | fi
|
| 89 |
|
| 90 | echo $max_occ
|
| 91 | return $err
|
| 92 | }
|
| 93 |
|
| 94 | sb_occ_etc_check()
|
| 95 | {
|
| 96 | local dl_port=$1; shift
|
| 97 | local etc=$1; shift
|
| 98 | local exp_max_occ=$1; shift
|
| 99 | local max_occ
|
| 100 | local err=0
|
| 101 |
|
| 102 | max_occ=$(devlink sb -j occupancy show $dl_port \
|
| 103 | | jq -e ".[][][\"etc\"][\"$etc\"][\"max\"]")
|
| 104 |
|
| 105 | if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
|
| 106 | err=1
|
| 107 | fi
|
| 108 |
|
| 109 | echo $max_occ
|
| 110 | return $err
|
| 111 | }
|
| 112 |
|
| 113 | port_pool_test()
|
| 114 | {
|
| 115 | local exp_max_occ=$(devlink_cell_size_get)
|
| 116 | local max_occ
|
| 117 |
|
| 118 | tc filter add dev $h1 egress protocol ip pref 1 handle 101 flower \
|
| 119 | src_mac $h1mac dst_mac $h2mac \
|
| 120 | src_ip 192.0.1.1 dst_ip 192.0.1.2 \
|
| 121 | action pass
|
| 122 |
|
| 123 | devlink sb occupancy clearmax $DEVLINK_DEV
|
| 124 |
|
| 125 | $MZ $h1 -c 1 -p 10 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
|
| 126 | -t ip -q
|
| 127 |
|
| 128 | devlink sb occupancy snapshot $DEVLINK_DEV
|
| 129 |
|
| 130 | RET=0
|
| 131 | max_occ=$(sb_occ_pool_check $dl_port2 $SB_POOL_ING $exp_max_occ)
|
| 132 | check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
|
| 133 | log_test "physical port's($h2) ingress pool"
|
| 134 |
|
| 135 | RET=0
|
| 136 | max_occ=$(sb_occ_pool_check $cpu_dl_port $SB_POOL_EGR_CPU $exp_max_occ)
|
| 137 | check_err $? "Expected ePool($SB_POOL_EGR_CPU) max occupancy to be $exp_max_occ, but got $max_occ"
|
| 138 | log_test "CPU port's egress pool"
|
| 139 |
|
| 140 | tc filter del dev $h1 egress protocol ip pref 1 handle 101 flower \
|
| 141 | src_mac $h1mac dst_mac $h2mac \
|
| 142 | src_ip 192.0.1.1 dst_ip 192.0.1.2 \
|
| 143 | action pass
|
| 144 | }
|
| 145 |
|
| 146 | port_tc_ip_test()
|
| 147 | {
|
| 148 | local exp_max_occ=$(devlink_cell_size_get)
|
| 149 | local max_occ
|
| 150 |
|
| 151 | tc filter add dev $h1 egress protocol ip pref 1 handle 101 flower \
|
| 152 | src_mac $h1mac dst_mac $h2mac \
|
| 153 | src_ip 192.0.1.1 dst_ip 192.0.1.2 \
|
| 154 | action pass
|
| 155 |
|
| 156 | devlink sb occupancy clearmax $DEVLINK_DEV
|
| 157 |
|
| 158 | $MZ $h1 -c 1 -p 10 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
|
| 159 | -t ip -q
|
| 160 |
|
| 161 | devlink sb occupancy snapshot $DEVLINK_DEV
|
| 162 |
|
| 163 | RET=0
|
| 164 | max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
|
| 165 | check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
|
| 166 | log_test "physical port's($h2) ingress TC - IP packet"
|
| 167 |
|
| 168 | RET=0
|
| 169 | max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_IP $exp_max_occ)
|
| 170 | check_err $? "Expected egress TC($SB_ITC_CPU_IP) max occupancy to be $exp_max_occ, but got $max_occ"
|
| 171 | log_test "CPU port's egress TC - IP packet"
|
| 172 |
|
| 173 | tc filter del dev $h1 egress protocol ip pref 1 handle 101 flower \
|
| 174 | src_mac $h1mac dst_mac $h2mac \
|
| 175 | src_ip 192.0.1.1 dst_ip 192.0.1.2 \
|
| 176 | action pass
|
| 177 | }
|
| 178 |
|
| 179 | port_tc_arp_test()
|
| 180 | {
|
| 181 | local exp_max_occ=$(devlink_cell_size_get)
|
| 182 | local max_occ
|
| 183 |
|
| 184 | tc filter add dev $h1 egress protocol arp pref 1 handle 101 flower \
|
| 185 | src_mac $h1mac action pass
|
| 186 |
|
| 187 | devlink sb occupancy clearmax $DEVLINK_DEV
|
| 188 |
|
| 189 | $MZ $h1 -c 1 -p 10 -a $h1mac -A 192.0.1.1 -t arp -q
|
| 190 |
|
| 191 | devlink sb occupancy snapshot $DEVLINK_DEV
|
| 192 |
|
| 193 | RET=0
|
| 194 | max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
|
| 195 | check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
|
| 196 | log_test "physical port's($h2) ingress TC - ARP packet"
|
| 197 |
|
| 198 | RET=0
|
| 199 | max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_ARP $exp_max_occ)
|
| 200 | check_err $? "Expected egress TC($SB_ITC_IP2ME) max occupancy to be $exp_max_occ, but got $max_occ"
|
| 201 | log_test "CPU port's egress TC - ARP packet"
|
| 202 |
|
| 203 | tc filter del dev $h1 egress protocol arp pref 1 handle 101 flower \
|
| 204 | src_mac $h1mac action pass
|
| 205 | }
|
| 206 |
|
| 207 | setup_prepare()
|
| 208 | {
|
| 209 | h1=${NETIFS[p1]}
|
| 210 | h2=${NETIFS[p2]}
|
| 211 |
|
| 212 | h1mac=$(mac_get $h1)
|
| 213 | h2mac=$(mac_get $h2)
|
| 214 |
|
| 215 | dl_port1=$(devlink_port_by_netdev $h1)
|
| 216 | dl_port2=$(devlink_port_by_netdev $h2)
|
| 217 |
|
| 218 | cpu_dl_port=$(devlink_cpu_port_get)
|
| 219 |
|
| 220 | vrf_prepare
|
| 221 |
|
| 222 | h1_create
|
| 223 | h2_create
|
| 224 | }
|
| 225 |
|
| 226 | cleanup()
|
| 227 | {
|
| 228 | pre_cleanup
|
| 229 |
|
| 230 | h2_destroy
|
| 231 | h1_destroy
|
| 232 |
|
| 233 | vrf_cleanup
|
| 234 | }
|
| 235 |
|
| 236 | trap cleanup EXIT
|
| 237 |
|
| 238 | setup_prepare
|
| 239 | setup_wait
|
| 240 |
|
| 241 | tests_run
|
| 242 |
|
| 243 | exit $EXIT_STATUS
|