brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · 03743f0 Raw
193 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 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 is53# created for them, as they don't do any IP routing.54 55ALL_TESTS="mpls_forward_eth"56NUM_NETIFS=657source lib.sh58 59h1_create()60{61	simple_if_init $h1 192.0.2.1/24 2001:db8::1/12462}63 64h1_destroy()65{66	simple_if_fini $h1 192.0.2.1/24 2001:db8::1/12467}68 69h2_create()70{71	simple_if_init $h2 192.0.2.2/24 2001:db8::2/12472}73 74h2_destroy()75{76	simple_if_fini $h2 192.0.2.2/24 2001:db8::2/12477}78 79ler1_create()80{81	tc qdisc add dev $edge1 ingress82	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 $mpls187	ip link set dev $edge1 up88 89	tc qdisc add dev $mpls1 ingress90	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 $edge196	ip link set dev $mpls1 up97}98 99ler1_destroy()100{101	ip link set dev $mpls1 down102	tc qdisc del dev $mpls1 ingress103 104	ip link set dev $edge1 down105	tc qdisc del dev $edge1 ingress106}107 108ler2_create()109{110	tc qdisc add dev $edge2 ingress111	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 $mpls2116	ip link set dev $edge2 up117 118	tc qdisc add dev $mpls2 ingress119	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 $edge2125	ip link set dev $mpls2 up126}127 128ler2_destroy()129{130	ip link set dev $mpls2 down131	tc qdisc del dev $mpls2 ingress132 133	ip link set dev $edge2 down134	tc qdisc del dev $edge2 ingress135}136 137mpls_forward_eth()138{139	ping_test $h1 192.0.2.2140	ping6_test $h1 2001:db8::2141}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_prepare158 159	h1_create160	h2_create161	ler1_create162	ler2_create163}164 165cleanup()166{167	pre_cleanup168 169	ler2_destroy170	ler1_destroy171	h2_destroy172	h1_destroy173 174	vrf_cleanup175}176 177trap cleanup EXIT178 179setup_prepare180setup_wait181 182tests_run183 184tc_offload_check185if [[ $? -ne 0 ]]; then186	log_info "Could not test offloaded functionality"187else188	tcflags="skip_sw"189	tests_run190fi191 192exit $EXIT_STATUS193