Skip to content

Commit 35388a6

Browse files
pmachatadavem330
authored andcommitted
selftests: forwarding: Test mirror-to-vlan
Test for "tc action mirred egress mirror" that mirrors to a vlan device. - test_vlan() tests that the packets get mirrored - test_tagged_vlan() tests that the mirrored packets have correct inner VLAN tag. Signed-off-by: Petr Machata <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 87c0c04 commit 35388a6

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-2.0
3+
4+
# This test uses standard topology for testing mirroring. See mirror_topo_lib.sh
5+
# for more details.
6+
#
7+
# Test for "tc action mirred egress mirror" that mirrors to a vlan device.
8+
9+
ALL_TESTS="
10+
test_vlan
11+
test_tagged_vlan
12+
"
13+
14+
NUM_NETIFS=6
15+
source lib.sh
16+
source mirror_lib.sh
17+
source mirror_topo_lib.sh
18+
19+
setup_prepare()
20+
{
21+
h1=${NETIFS[p1]}
22+
swp1=${NETIFS[p2]}
23+
24+
swp2=${NETIFS[p3]}
25+
h2=${NETIFS[p4]}
26+
27+
swp3=${NETIFS[p5]}
28+
h3=${NETIFS[p6]}
29+
30+
vrf_prepare
31+
mirror_topo_create
32+
33+
vlan_create $swp3 555
34+
35+
vlan_create $h3 555 v$h3
36+
matchall_sink_create $h3.555
37+
38+
vlan_create $h1 111 v$h1 192.0.2.17/28
39+
bridge vlan add dev $swp1 vid 111
40+
41+
vlan_create $h2 111 v$h2 192.0.2.18/28
42+
bridge vlan add dev $swp2 vid 111
43+
}
44+
45+
cleanup()
46+
{
47+
pre_cleanup
48+
49+
vlan_destroy $h2 111
50+
vlan_destroy $h1 111
51+
vlan_destroy $h3 555
52+
vlan_destroy $swp3 555
53+
54+
mirror_topo_destroy
55+
vrf_cleanup
56+
}
57+
58+
test_vlan_dir()
59+
{
60+
local direction=$1; shift
61+
local forward_type=$1; shift
62+
local backward_type=$1; shift
63+
64+
RET=0
65+
66+
mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
67+
test_span_dir "$h3.555" "$direction" "$forward_type" "$backward_type"
68+
mirror_uninstall $swp1 $direction
69+
70+
log_test "$direction mirror to vlan ($tcflags)"
71+
}
72+
73+
test_vlan()
74+
{
75+
test_vlan_dir ingress 8 0
76+
test_vlan_dir egress 0 8
77+
}
78+
79+
vlan_capture_add_del()
80+
{
81+
local add_del=$1; shift
82+
local pref=$1; shift
83+
local dev=$1; shift
84+
local filter=$1; shift
85+
86+
tc filter $add_del dev "$dev" ingress \
87+
proto 802.1q pref $pref \
88+
flower $filter \
89+
action pass
90+
}
91+
92+
vlan_capture_install()
93+
{
94+
vlan_capture_add_del add 100 "$@"
95+
}
96+
97+
vlan_capture_uninstall()
98+
{
99+
vlan_capture_add_del del 100 "$@"
100+
}
101+
102+
do_test_span_vlan_dir_ips()
103+
{
104+
local expect=$1; shift
105+
local dev=$1; shift
106+
local vid=$1; shift
107+
local direction=$1; shift
108+
local ip1=$1; shift
109+
local ip2=$1; shift
110+
111+
vlan_capture_install $dev "vlan_id $vid"
112+
mirror_test v$h1 $ip1 $ip2 $dev 100 $expect
113+
mirror_test v$h2 $ip2 $ip1 $dev 100 $expect
114+
vlan_capture_uninstall $dev
115+
}
116+
117+
test_tagged_vlan_dir()
118+
{
119+
local direction=$1; shift
120+
local forward_type=$1; shift
121+
local backward_type=$1; shift
122+
123+
RET=0
124+
125+
mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
126+
do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" \
127+
192.0.2.17 192.0.2.18
128+
do_test_span_vlan_dir_ips 0 "$h3.555" 555 "$direction" \
129+
192.0.2.17 192.0.2.18
130+
mirror_uninstall $swp1 $direction
131+
132+
log_test "$direction mirror to vlan ($tcflags)"
133+
}
134+
135+
test_tagged_vlan()
136+
{
137+
test_tagged_vlan_dir ingress 8 0
138+
test_tagged_vlan_dir egress 0 8
139+
}
140+
141+
test_all()
142+
{
143+
slow_path_trap_install $swp1 ingress
144+
slow_path_trap_install $swp1 egress
145+
trap_install $h3 ingress
146+
147+
tests_run
148+
149+
trap_install $h3 ingress
150+
slow_path_trap_uninstall $swp1 egress
151+
slow_path_trap_uninstall $swp1 ingress
152+
}
153+
154+
trap cleanup EXIT
155+
156+
setup_prepare
157+
setup_wait
158+
159+
tcflags="skip_hw"
160+
test_all
161+
162+
if ! tc_offload_check; then
163+
echo "WARN: Could not test offloaded functionality"
164+
else
165+
tcflags="skip_sw"
166+
test_all
167+
fi
168+
169+
exit $EXIT_STATUS

0 commit comments

Comments
 (0)