2 # SPDX-License-Identifier: GPL-2.0
4 # This test is for checking drop monitor functionality.
8 # all tests in this script. Can be overridden with -t option
14 NETDEVSIM_PATH
=/sys
/bus
/netdevsim
/
16 DEV
=netdevsim
${DEV_ADDR}
17 DEVLINK_DEV
=netdevsim
/${DEV}
25 if [ ${rc} -eq ${expected} ]; then
26 printf " TEST: %-60s [ OK ]\n" "${msg}"
27 nsuccess
=$
((nsuccess
+1))
31 printf " TEST: %-60s [FAIL]\n" "${msg}"
37 modprobe netdevsim
&> /dev
/null
41 $IP link add dummy10 up
type dummy
43 $NS_EXEC echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device
45 local netdev
=$
($NS_EXEC ls ${NETDEVSIM_PATH}/devices
/${DEV}/net
/)
46 $IP link
set dev
$netdev up
53 $NS_EXEC echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device
60 echo "Software drops test"
64 local dir
=$
(mktemp
-d)
66 $TC qdisc add dev dummy10 clsact
67 $TC filter add dev dummy10 egress pref
1 handle
101 proto ip \
68 flower dst_ip
192.0.2.10 action drop
70 $NS_EXEC mausezahn dummy10
-a 00:11:22:33:44:55 -b 00:aa
:bb
:cc
:dd:ee \
71 -A 192.0.2.1 -B 192.0.2.10 -t udp sp
=12345,dp
=54321 -c 0 -q \
73 timeout
5 dwdump
-o sw
-w ${dir}/packets.pcap
74 (( $
(tshark
-r ${dir}/packets.pcap \
75 -Y 'ip.dst == 192.0.2.10' 2> /dev
/null |
wc -l) != 0))
76 log_test $?
0 "Capturing active software drops"
78 rm ${dir}/packets.pcap
81 timeout
5 dwdump
-o sw
-w ${dir}/packets.pcap
82 (( $
(tshark
-r ${dir}/packets.pcap \
83 -Y 'ip.dst == 192.0.2.10' 2> /dev
/null |
wc -l) == 0))
84 log_test $?
0 "Capturing inactive software drops"
94 echo "Hardware drops test"
98 local dir
=$
(mktemp
-d)
100 $DEVLINK trap set $DEVLINK_DEV trap blackhole_route action
trap
101 timeout
5 dwdump
-o hw
-w ${dir}/packets.pcap
102 (( $
(tshark
-r ${dir}/packets.pcap \
103 -Y 'net_dm.hw_trap_name== blackhole_route' 2> /dev
/null \
105 log_test $?
0 "Capturing active hardware drops"
107 rm ${dir}/packets.pcap
109 $DEVLINK trap set $DEVLINK_DEV trap blackhole_route action drop
110 timeout
5 dwdump
-o hw
-w ${dir}/packets.pcap
111 (( $
(tshark
-r ${dir}/packets.pcap \
112 -Y 'net_dm.hw_trap_name== blackhole_route' 2> /dev
/null \
114 log_test $?
0 "Capturing inactive hardware drops"
121 ################################################################################
129 -t <test> Test(s) to run (default: all)
134 ################################################################################
137 while getopts ":t:h" opt
; do
145 if [ "$(id -u)" -ne 0 ];then
146 echo "SKIP: Need root privileges"
150 if [ ! -x "$(command -v ip)" ]; then
151 echo "SKIP: Could not run test without ip tool"
155 if [ ! -x "$(command -v devlink)" ]; then
156 echo "SKIP: Could not run test without devlink tool"
160 if [ ! -x "$(command -v tshark)" ]; then
161 echo "SKIP: Could not run test without tshark tool"
165 if [ ! -x "$(command -v dwdump)" ]; then
166 echo "SKIP: Could not run test without dwdump tool"
170 if [ ! -x "$(command -v udevadm)" ]; then
171 echo "SKIP: Could not run test without udevadm tool"
175 if [ ! -x "$(command -v timeout)" ]; then
176 echo "SKIP: Could not run test without timeout tool"
180 if [ ! -x "$(command -v mausezahn)" ]; then
181 echo "SKIP: Could not run test without mausezahn tool"
185 tshark
-G fields
2> /dev
/null |
grep -q net_dm
186 if [ $?
-ne 0 ]; then
187 echo "SKIP: tshark too old, missing net_dm dissector"
191 # create netns first so we can get the namespace name
196 IP
="ip -netns ${NS1}"
197 TC
="tc -netns ${NS1}"
198 DEVLINK
="devlink -N ${NS1}"
199 NS_EXEC
="ip netns exec ${NS1}"
204 sw_drops|sw
) sw_drops_test
;;
205 hw_drops|hw
) hw_drops_test
;;
207 help) echo "Test names: $TESTS"; exit 0;;
211 if [ "$TESTS" != "none" ]; then
212 printf "\nTests passed: %3d\n" ${nsuccess}
213 printf "Tests failed: %3d\n" ${nfail}