0001
0002
0003
0004 ALL_TESTS="
0005 port_pool_test
0006 port_tc_ip_test
0007 port_tc_arp_test
0008 "
0009
0010 NUM_NETIFS=2
0011 source ../../../net/forwarding/lib.sh
0012 source ../../../net/forwarding/devlink_lib.sh
0013 source mlxsw_lib.sh
0014
0015 SB_POOL_ING=0
0016 SB_POOL_EGR_CPU=10
0017
0018 SB_ITC_CPU_IP=2
0019 SB_ITC_CPU_ARP=2
0020 SB_ITC=0
0021
0022 h1_create()
0023 {
0024 simple_if_init $h1 192.0.1.1/24
0025 }
0026
0027 h1_destroy()
0028 {
0029 simple_if_fini $h1 192.0.1.1/24
0030 }
0031
0032 h2_create()
0033 {
0034 simple_if_init $h2 192.0.1.2/24
0035 }
0036
0037 h2_destroy()
0038 {
0039 simple_if_fini $h2 192.0.1.2/24
0040 }
0041
0042 sb_occ_pool_check()
0043 {
0044 local dl_port=$1; shift
0045 local pool=$1; shift
0046 local exp_max_occ=$1
0047 local max_occ
0048 local err=0
0049
0050 max_occ=$(devlink sb -j occupancy show $dl_port \
0051 | jq -e ".[][][\"pool\"][\"$pool\"][\"max\"]")
0052
0053 if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
0054 err=1
0055 fi
0056
0057 echo $max_occ
0058 return $err
0059 }
0060
0061 sb_occ_itc_check()
0062 {
0063 local dl_port=$1; shift
0064 local itc=$1; shift
0065 local exp_max_occ=$1
0066 local max_occ
0067 local err=0
0068
0069 max_occ=$(devlink sb -j occupancy show $dl_port \
0070 | jq -e ".[][][\"itc\"][\"$itc\"][\"max\"]")
0071
0072 if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
0073 err=1
0074 fi
0075
0076 echo $max_occ
0077 return $err
0078 }
0079
0080 sb_occ_etc_check()
0081 {
0082 local dl_port=$1; shift
0083 local etc=$1; shift
0084 local exp_max_occ=$1; shift
0085 local max_occ
0086 local err=0
0087
0088 max_occ=$(devlink sb -j occupancy show $dl_port \
0089 | jq -e ".[][][\"etc\"][\"$etc\"][\"max\"]")
0090
0091 if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
0092 err=1
0093 fi
0094
0095 echo $max_occ
0096 return $err
0097 }
0098
0099 port_pool_test()
0100 {
0101 local exp_max_occ=288
0102 local max_occ
0103
0104 devlink sb occupancy clearmax $DEVLINK_DEV
0105
0106 $MZ $h1 -c 1 -p 160 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
0107 -t ip -q
0108
0109 devlink sb occupancy snapshot $DEVLINK_DEV
0110
0111 RET=0
0112 max_occ=$(sb_occ_pool_check $dl_port1 $SB_POOL_ING $exp_max_occ)
0113 check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
0114 log_test "physical port's($h1) ingress pool"
0115
0116 RET=0
0117 max_occ=$(sb_occ_pool_check $dl_port2 $SB_POOL_ING $exp_max_occ)
0118 check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
0119 log_test "physical port's($h2) ingress pool"
0120
0121 RET=0
0122 max_occ=$(sb_occ_pool_check $cpu_dl_port $SB_POOL_EGR_CPU $exp_max_occ)
0123 check_err $? "Expected ePool($SB_POOL_EGR_CPU) max occupancy to be $exp_max_occ, but got $max_occ"
0124 log_test "CPU port's egress pool"
0125 }
0126
0127 port_tc_ip_test()
0128 {
0129 local exp_max_occ=288
0130 local max_occ
0131
0132 devlink sb occupancy clearmax $DEVLINK_DEV
0133
0134 $MZ $h1 -c 1 -p 160 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
0135 -t ip -q
0136
0137 devlink sb occupancy snapshot $DEVLINK_DEV
0138
0139 RET=0
0140 max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
0141 check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
0142 log_test "physical port's($h1) ingress TC - IP packet"
0143
0144 RET=0
0145 max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
0146 check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
0147 log_test "physical port's($h2) ingress TC - IP packet"
0148
0149 RET=0
0150 max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_IP $exp_max_occ)
0151 check_err $? "Expected egress TC($SB_ITC_CPU_IP) max occupancy to be $exp_max_occ, but got $max_occ"
0152 log_test "CPU port's egress TC - IP packet"
0153 }
0154
0155 port_tc_arp_test()
0156 {
0157 local exp_max_occ=96
0158 local max_occ
0159
0160 if [[ $MLXSW_CHIP != "mlxsw_spectrum" ]]; then
0161 exp_max_occ=144
0162 fi
0163
0164 devlink sb occupancy clearmax $DEVLINK_DEV
0165
0166 $MZ $h1 -c 1 -p 160 -a $h1mac -A 192.0.1.1 -t arp -q
0167
0168 devlink sb occupancy snapshot $DEVLINK_DEV
0169
0170 RET=0
0171 max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
0172 check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
0173 log_test "physical port's($h1) ingress TC - ARP packet"
0174
0175 RET=0
0176 max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
0177 check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
0178 log_test "physical port's($h2) ingress TC - ARP packet"
0179
0180 RET=0
0181 max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_ARP $exp_max_occ)
0182 check_err $? "Expected egress TC($SB_ITC_IP2ME) max occupancy to be $exp_max_occ, but got $max_occ"
0183 log_test "CPU port's egress TC - ARP packet"
0184 }
0185
0186 setup_prepare()
0187 {
0188 h1=${NETIFS[p1]}
0189 h2=${NETIFS[p2]}
0190
0191 h1mac=$(mac_get $h1)
0192 h2mac=$(mac_get $h2)
0193
0194 dl_port1=$(devlink_port_by_netdev $h1)
0195 dl_port2=$(devlink_port_by_netdev $h2)
0196
0197 cpu_dl_port=$(devlink_cpu_port_get)
0198
0199 vrf_prepare
0200
0201 h1_create
0202 h2_create
0203 }
0204
0205 cleanup()
0206 {
0207 pre_cleanup
0208
0209 h2_destroy
0210 h1_destroy
0211
0212 vrf_cleanup
0213 }
0214
0215 trap cleanup EXIT
0216
0217 setup_prepare
0218 setup_wait
0219
0220 tests_run
0221
0222 exit $EXIT_STATUS