File Index
Files and directories
Sign in
FILE

mirror_lib.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/net/forwarding/mirror_lib.sh BASH
  1# SPDX-License-Identifier: GPL-2.0
  2
  3mirror_install()
  4{
  5	local from_dev=$1; shift
  6	local direction=$1; shift
  7	local to_dev=$1; shift
  8	local filter=$1; shift
  9
 10	tc filter add dev $from_dev $direction \
 11	   pref 1000 $filter \
 12	   action mirred egress mirror dev $to_dev
 13}
 14
 15mirror_uninstall()
 16{
 17	local from_dev=$1; shift
 18	local direction=$1; shift
 19
 20	tc filter del dev $swp1 $direction pref 1000
 21}
 22
 23is_ipv6()
 24{
 25	local addr=$1; shift
 26
 27	[[ -z ${addr//[0-9a-fA-F:]/} ]]
 28}
 29
 30mirror_test()
 31{
 32	local vrf_name=$1; shift
 33	local sip=$1; shift
 34	local dip=$1; shift
 35	local dev=$1; shift
 36	local pref=$1; shift
 37	local expect=$1; shift
 38
 39	if is_ipv6 $dip; then
 40		local proto=-6
 41		local type="icmp6 type=128" # Echo request.
 42	else
 43		local proto=
 44		local type="icmp echoreq"
 45	fi
 46
 47	if [[ -z ${expect//[[:digit:]]/} ]]; then
 48		expect="== $expect"
 49	fi
 50
 51	local t0=$(tc_rule_stats_get $dev $pref)
 52	$MZ $proto $vrf_name ${sip:+-A $sip} -B $dip -a own -b bc -q \
 53	    -c 10 -d 100msec -t $type
 54	sleep 0.5
 55	local t1=$(tc_rule_stats_get $dev $pref)
 56	local delta=$((t1 - t0))
 57	((delta $expect))
 58	check_err $? "Expected to capture $expect packets, got $delta."
 59}
 60
 61do_test_span_dir_ips()
 62{
 63	local expect=$1; shift
 64	local dev=$1; shift
 65	local ip1=$1; shift
 66	local ip2=$1; shift
 67	local forward_type=${1-8}; shift
 68	local backward_type=${1-0}; shift
 69
 70	icmp_capture_install $dev "type $forward_type"
 71	mirror_test v$h1 $ip1 $ip2 $dev 100 $expect
 72	icmp_capture_uninstall $dev
 73
 74	icmp_capture_install $dev "type $backward_type"
 75	mirror_test v$h2 $ip2 $ip1 $dev 100 $expect
 76	icmp_capture_uninstall $dev
 77}
 78
 79quick_test_span_dir_ips()
 80{
 81	local dev=$1; shift
 82	local ip1=$1; shift
 83	local ip2=$1; shift
 84	local forward_type=${1-8}; shift
 85	local backward_type=${1-0}; shift
 86
 87	do_test_span_dir_ips 10 "$dev" "$ip1" "$ip2" \
 88			     "$forward_type" "$backward_type"
 89}
 90
 91test_span_dir_ips()
 92{
 93	local dev=$1; shift
 94	local forward_type=$1; shift
 95	local backward_type=$1; shift
 96	local ip1=$1; shift
 97	local ip2=$1; shift
 98
 99	quick_test_span_dir_ips "$dev" "$ip1" "$ip2" \
100				"$forward_type" "$backward_type"
101
102	icmp_capture_install $dev "type $forward_type"
103	mirror_test v$h1 $ip1 $ip2 $dev 100 10
104	icmp_capture_uninstall $dev
105
106	icmp_capture_install $dev "type $backward_type"
107	mirror_test v$h2 $ip2 $ip1 $dev 100 10
108	icmp_capture_uninstall $dev
109}
110
111test_span_dir()
112{
113	local dev=$1; shift
114	local forward_type=$1; shift
115	local backward_type=$1; shift
116
117	test_span_dir_ips "$dev" "$forward_type" "$backward_type" \
118			  192.0.2.1 192.0.2.2
119}
120
121do_test_span_vlan_dir_ips()
122{
123	local expect=$1; shift
124	local dev=$1; shift
125	local vid=$1; shift
126	local ul_proto=$1; shift
127	local ip1=$1; shift
128	local ip2=$1; shift
129
130	# Install the capture as skip_hw to avoid double-counting of packets.
131	# The traffic is meant for local box anyway, so will be trapped to
132	# kernel.
133	vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype $ul_proto"
134	mirror_test v$h1 $ip1 $ip2 $dev 100 "$expect"
135	mirror_test v$h2 $ip2 $ip1 $dev 100 "$expect"
136	vlan_capture_uninstall $dev
137}
138
139quick_test_span_vlan_dir_ips()
140{
141	local dev=$1; shift
142	local vid=$1; shift
143	local ul_proto=$1; shift
144	local ip1=$1; shift
145	local ip2=$1; shift
146
147	do_test_span_vlan_dir_ips '>= 10' "$dev" "$vid" "$ul_proto" \
148				  "$ip1" "$ip2"
149}
150
151fail_test_span_vlan_dir_ips()
152{
153	local dev=$1; shift
154	local vid=$1; shift
155	local ul_proto=$1; shift
156	local ip1=$1; shift
157	local ip2=$1; shift
158
159	do_test_span_vlan_dir_ips 0 "$dev" "$vid" "$ul_proto" "$ip1" "$ip2"
160}
161
162quick_test_span_vlan_dir()
163{
164	local dev=$1; shift
165	local vid=$1; shift
166	local ul_proto=$1; shift
167
168	quick_test_span_vlan_dir_ips "$dev" "$vid" "$ul_proto" \
169				     192.0.2.1 192.0.2.2
170}
171
172fail_test_span_vlan_dir()
173{
174	local dev=$1; shift
175	local vid=$1; shift
176	local ul_proto=$1; shift
177
178	fail_test_span_vlan_dir_ips "$dev" "$vid" "$ul_proto" \
179				    192.0.2.1 192.0.2.2
180}
~/ Read-only file preview.