Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# +-----------------------+
5# | H1 (v$h1) |
6# | 192.0.2.1/24 |
7# | 2001:db8::1/124 |
8# | + $h1 |
9# +-----------------|-----+
10# |
11# | (Plain Ethernet traffic)
12# |
13# +-----------------|-----------------------------------------+
14# | LER1 + $edge1 |
15# | -ingress: |
16# | -encapsulate Ethernet into MPLS |
17# | -add outer Ethernet header |
18# | -redirect to $mpls1 (egress) |
19# | |
20# | + $mpls1 |
21# | | -ingress: |
22# | | -remove outer Ethernet header |
23# | | -remove MPLS header |
24# | | -redirect to $edge1 (egress) |
25# +-----------------|-----------------------------------------+
26# |
27# | (Ethernet over MPLS traffic)
28# |
29# +-----------------|-----------------------------------------+
30# | LER2 + $mpls2 |
31# | -ingress: |
32# | -remove outer Ethernet header |
33# | -remove MPLS header |
34# | -redirect to $edge2 (egress) |
35# | |
36# | + $edge2 |
37# | | -ingress: |
38# | | -encapsulate Ethernet into MPLS |
39# | | -add outer Ethernet header |
40# | | -redirect to $mpls2 (egress) |
41# +-----------------|-----------------------------------------|
42# |
43# | (Plain Ethernet traffic)
44# |
45# +-----------------|-----+
46# | H2 (v$h2) | |
47# | + $h2 |
48# | 192.0.2.2/24 |
49# | 2001:db8::2/124 |
50# +-----------------------+
51#
52# LER1 and LER2 logically represent two different routers. However, no VRF is
53# created for them, as they don't do any IP routing.
54
55ALL_TESTS="mpls_forward_eth"
56NUM_NETIFS=6
57source lib.sh
58
59h1_create()
60{
61 simple_if_init $h1 192.0.2.1/24 2001:db8::1/124
62}
63
64h1_destroy()
65{
66 simple_if_fini $h1 192.0.2.1/24 2001:db8::1/124
67}
68
69h2_create()
70{
71 simple_if_init $h2 192.0.2.2/24 2001:db8::2/124
72}
73
74h2_destroy()
75{
76 simple_if_fini $h2 192.0.2.2/24 2001:db8::2/124
77}
78
79ler1_create()
80{
81 tc qdisc add dev $edge1 ingress
82 tc filter add dev $edge1 ingress \
83 matchall \
84 action mpls mac_push label 102 \
85 action vlan push_eth dst_mac $mpls2mac src_mac $mpls1mac \
86 action mirred egress redirect dev $mpls1
87 ip link set dev $edge1 up
88
89 tc qdisc add dev $mpls1 ingress
90 tc filter add dev $mpls1 ingress \
91 protocol mpls_uc \
92 flower mpls_label 101 \
93 action vlan pop_eth \
94 action mpls pop protocol teb \
95 action mirred egress redirect dev $edge1
96 ip link set dev $mpls1 up
97}
98
99ler1_destroy()
100{
101 ip link set dev $mpls1 down
102 tc qdisc del dev $mpls1 ingress
103
104 ip link set dev $edge1 down
105 tc qdisc del dev $edge1 ingress
106}
107
108ler2_create()
109{
110 tc qdisc add dev $edge2 ingress
111 tc filter add dev $edge2 ingress \
112 matchall \
113 action mpls mac_push label 101 \
114 action vlan push_eth dst_mac $mpls1mac src_mac $mpls2mac \
115 action mirred egress redirect dev $mpls2
116 ip link set dev $edge2 up
117
118 tc qdisc add dev $mpls2 ingress
119 tc filter add dev $mpls2 ingress \
120 protocol mpls_uc \
121 flower mpls_label 102 \
122 action vlan pop_eth \
123 action mpls pop protocol teb \
124 action mirred egress redirect dev $edge2
125 ip link set dev $mpls2 up
126}
127
128ler2_destroy()
129{
130 ip link set dev $mpls2 down
131 tc qdisc del dev $mpls2 ingress
132
133 ip link set dev $edge2 down
134 tc qdisc del dev $edge2 ingress
135}
136
137mpls_forward_eth()
138{
139 ping_test $h1 192.0.2.2
140 ping6_test $h1 2001:db8::2
141}
142
143setup_prepare()
144{
145 h1=${NETIFS[p1]}
146 edge1=${NETIFS[p2]}
147
148 mpls1=${NETIFS[p3]}
149 mpls2=${NETIFS[p4]}
150
151 edge2=${NETIFS[p5]}
152 h2=${NETIFS[p6]}
153
154 mpls1mac=$(mac_get $mpls1)
155 mpls2mac=$(mac_get $mpls2)
156
157 vrf_prepare
158
159 h1_create
160 h2_create
161 ler1_create
162 ler2_create
163}
164
165cleanup()
166{
167 pre_cleanup
168
169 ler2_destroy
170 ler1_destroy
171 h2_destroy
172 h1_destroy
173
174 vrf_cleanup
175}
176
177trap cleanup EXIT
178
179setup_prepare
180setup_wait
181
182tests_run
183
184tc_offload_check
185if [[ $? -ne 0 ]]; then
186 log_info "Could not test offloaded functionality"
187else
188 tcflags="skip_sw"
189 tests_run
190fi
191
192exit $EXIT_STATUS