Linux-libre 5.4.47-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / net / forwarding / mirror_vlan.sh
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 test_tagged_vlan_dir()
80 {
81         local direction=$1; shift
82         local forward_type=$1; shift
83         local backward_type=$1; shift
84
85         RET=0
86
87         mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
88         do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" \
89                                   192.0.2.17 192.0.2.18
90         do_test_span_vlan_dir_ips  0 "$h3.555" 555 "$direction" \
91                                   192.0.2.17 192.0.2.18
92         mirror_uninstall $swp1 $direction
93
94         log_test "$direction mirror tagged to vlan ($tcflags)"
95 }
96
97 test_tagged_vlan()
98 {
99         test_tagged_vlan_dir ingress 8 0
100         test_tagged_vlan_dir egress 0 8
101 }
102
103 test_all()
104 {
105         slow_path_trap_install $swp1 ingress
106         slow_path_trap_install $swp1 egress
107         trap_install $h3 ingress
108
109         tests_run
110
111         trap_uninstall $h3 ingress
112         slow_path_trap_uninstall $swp1 egress
113         slow_path_trap_uninstall $swp1 ingress
114 }
115
116 trap cleanup EXIT
117
118 setup_prepare
119 setup_wait
120
121 tcflags="skip_hw"
122 test_all
123
124 if ! tc_offload_check; then
125         echo "WARN: Could not test offloaded functionality"
126 else
127         tcflags="skip_sw"
128         test_all
129 fi
130
131 exit $EXIT_STATUS