]>
Commit | Line | Data |
---|---|---|
ba8d3987 PM |
1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0 | |
3 | ||
4 | # This test uses standard topology for testing gretap. See | |
5 | # mirror_gre_topo_lib.sh for more details. | |
6 | # | |
7 | # Test for "tc action mirred egress mirror" when the device to mirror to is a | |
8 | # gretap or ip6gretap netdevice. Expect that the packets come out encapsulated, | |
9 | # and another gretap / ip6gretap netdevice is then capable of decapsulating the | |
10 | # traffic. Test that the payload is what is expected (ICMP ping request or | |
11 | # reply, depending on test). | |
12 | ||
0eb8053c IS |
13 | ALL_TESTS=" |
14 | test_gretap | |
15 | test_ip6gretap | |
16 | test_gretap_mac | |
17 | test_ip6gretap_mac | |
18 | test_two_spans | |
19 | " | |
20 | ||
ba8d3987 PM |
21 | NUM_NETIFS=6 |
22 | source lib.sh | |
23 | source mirror_lib.sh | |
24 | source mirror_gre_lib.sh | |
25 | source mirror_gre_topo_lib.sh | |
26 | ||
27 | setup_prepare() | |
28 | { | |
29 | h1=${NETIFS[p1]} | |
30 | swp1=${NETIFS[p2]} | |
31 | ||
32 | swp2=${NETIFS[p3]} | |
33 | h2=${NETIFS[p4]} | |
34 | ||
35 | swp3=${NETIFS[p5]} | |
36 | h3=${NETIFS[p6]} | |
37 | ||
38 | vrf_prepare | |
39 | mirror_gre_topo_create | |
40 | ||
41 | ip address add dev $swp3 192.0.2.129/28 | |
42 | ip address add dev $h3 192.0.2.130/28 | |
43 | ||
44 | ip address add dev $swp3 2001:db8:2::1/64 | |
45 | ip address add dev $h3 2001:db8:2::2/64 | |
46 | } | |
47 | ||
48 | cleanup() | |
49 | { | |
50 | pre_cleanup | |
51 | ||
52 | ip address del dev $h3 2001:db8:2::2/64 | |
53 | ip address del dev $swp3 2001:db8:2::1/64 | |
54 | ||
55 | ip address del dev $h3 192.0.2.130/28 | |
56 | ip address del dev $swp3 192.0.2.129/28 | |
57 | ||
58 | mirror_gre_topo_destroy | |
59 | vrf_cleanup | |
60 | } | |
61 | ||
62 | test_span_gre_mac() | |
63 | { | |
64 | local tundev=$1; shift | |
65 | local direction=$1; shift | |
ba8d3987 PM |
66 | local what=$1; shift |
67 | ||
e8023b03 HL |
68 | case "$direction" in |
69 | ingress) local src_mac=$(mac_get $h1); local dst_mac=$(mac_get $h2) | |
70 | ;; | |
71 | egress) local src_mac=$(mac_get $h2); local dst_mac=$(mac_get $h1) | |
72 | ;; | |
73 | esac | |
ba8d3987 PM |
74 | |
75 | RET=0 | |
76 | ||
77 | mirror_install $swp1 $direction $tundev "matchall $tcflags" | |
e8023b03 | 78 | icmp_capture_install h3-${tundev} "src_mac $src_mac dst_mac $dst_mac" |
ba8d3987 | 79 | |
e8023b03 | 80 | mirror_test v$h1 192.0.2.1 192.0.2.2 h3-${tundev} 100 10 |
ba8d3987 | 81 | |
e8023b03 | 82 | icmp_capture_uninstall h3-${tundev} |
ba8d3987 PM |
83 | mirror_uninstall $swp1 $direction |
84 | ||
85 | log_test "$direction $what: envelope MAC ($tcflags)" | |
86 | } | |
87 | ||
88 | test_two_spans() | |
89 | { | |
90 | RET=0 | |
91 | ||
92 | mirror_install $swp1 ingress gt4 "matchall $tcflags" | |
93 | mirror_install $swp1 egress gt6 "matchall $tcflags" | |
94 | quick_test_span_gre_dir gt4 ingress | |
95 | quick_test_span_gre_dir gt6 egress | |
96 | ||
97 | mirror_uninstall $swp1 ingress | |
98 | fail_test_span_gre_dir gt4 ingress | |
99 | quick_test_span_gre_dir gt6 egress | |
100 | ||
101 | mirror_install $swp1 ingress gt4 "matchall $tcflags" | |
102 | mirror_uninstall $swp1 egress | |
103 | quick_test_span_gre_dir gt4 ingress | |
104 | fail_test_span_gre_dir gt6 egress | |
105 | ||
106 | mirror_uninstall $swp1 ingress | |
107 | log_test "two simultaneously configured mirrors ($tcflags)" | |
108 | } | |
109 | ||
0eb8053c | 110 | test_gretap() |
ba8d3987 | 111 | { |
ba8d3987 | 112 | full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap" |
ba8d3987 | 113 | full_test_span_gre_dir gt4 egress 0 8 "mirror to gretap" |
0eb8053c IS |
114 | } |
115 | ||
116 | test_ip6gretap() | |
117 | { | |
118 | full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap" | |
ba8d3987 | 119 | full_test_span_gre_dir gt6 egress 0 8 "mirror to ip6gretap" |
0eb8053c | 120 | } |
ba8d3987 | 121 | |
0eb8053c IS |
122 | test_gretap_mac() |
123 | { | |
e8023b03 HL |
124 | test_span_gre_mac gt4 ingress "mirror to gretap" |
125 | test_span_gre_mac gt4 egress "mirror to gretap" | |
0eb8053c IS |
126 | } |
127 | ||
128 | test_ip6gretap_mac() | |
129 | { | |
e8023b03 HL |
130 | test_span_gre_mac gt6 ingress "mirror to ip6gretap" |
131 | test_span_gre_mac gt6 egress "mirror to ip6gretap" | |
0eb8053c | 132 | } |
ba8d3987 | 133 | |
0eb8053c IS |
134 | test_all() |
135 | { | |
136 | slow_path_trap_install $swp1 ingress | |
137 | slow_path_trap_install $swp1 egress | |
138 | ||
139 | tests_run | |
ba8d3987 PM |
140 | |
141 | slow_path_trap_uninstall $swp1 egress | |
142 | slow_path_trap_uninstall $swp1 ingress | |
143 | } | |
144 | ||
145 | trap cleanup EXIT | |
146 | ||
147 | setup_prepare | |
148 | setup_wait | |
149 | ||
150 | tcflags="skip_hw" | |
151 | test_all | |
152 | ||
153 | if ! tc_offload_check; then | |
154 | echo "WARN: Could not test offloaded functionality" | |
155 | else | |
156 | tcflags="skip_sw" | |
157 | test_all | |
158 | fi | |
159 | ||
160 | exit $EXIT_STATUS |