Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 # +-----------------------+
0005 # | H1 (v$h1)             |
0006 # | 192.0.2.1/24          |
0007 # | 2001:db8::1/124       |
0008 # |                 + $h1 |
0009 # +-----------------|-----+
0010 #                   |
0011 #                   | (Plain Ethernet traffic)
0012 #                   |
0013 # +-----------------|-----------------------------------------+
0014 # | LER1            + $edge1                                  |
0015 # |                     -ingress:                             |
0016 # |                       -encapsulate Ethernet into MPLS     |
0017 # |                       -add outer Ethernet header          |
0018 # |                       -redirect to $mpls1 (egress)        |
0019 # |                                                           |
0020 # |                 + $mpls1                                  |
0021 # |                 |   -ingress:                             |
0022 # |                 |     -remove outer Ethernet header       |
0023 # |                 |     -remove MPLS header                 |
0024 # |                 |     -redirect to $edge1 (egress)        |
0025 # +-----------------|-----------------------------------------+
0026 #                   |
0027 #                   | (Ethernet over MPLS traffic)
0028 #                   |
0029 # +-----------------|-----------------------------------------+
0030 # | LER2            + $mpls2                                  |
0031 # |                     -ingress:                             |
0032 # |                       -remove outer Ethernet header       |
0033 # |                       -remove MPLS header                 |
0034 # |                       -redirect to $edge2 (egress)        |
0035 # |                                                           |
0036 # |                 + $edge2                                  |
0037 # |                 |   -ingress:                             |
0038 # |                 |     -encapsulate Ethernet into MPLS     |
0039 # |                 |     -add outer Ethernet header          |
0040 # |                 |     -redirect to $mpls2 (egress)        |
0041 # +-----------------|-----------------------------------------|
0042 #                   |
0043 #                   | (Plain Ethernet traffic)
0044 #                   |
0045 # +-----------------|-----+
0046 # | H2 (v$h2)       |     |
0047 # |                 + $h2 |
0048 # | 192.0.2.2/24          |
0049 # | 2001:db8::2/124       |
0050 # +-----------------------+
0051 #
0052 # LER1 and LER2 logically represent two different routers. However, no VRF is
0053 # created for them, as they don't do any IP routing.
0054 
0055 ALL_TESTS="mpls_forward_eth"
0056 NUM_NETIFS=6
0057 source lib.sh
0058 
0059 h1_create()
0060 {
0061         simple_if_init $h1 192.0.2.1/24 2001:db8::1/124
0062 }
0063 
0064 h1_destroy()
0065 {
0066         simple_if_fini $h1 192.0.2.1/24 2001:db8::1/124
0067 }
0068 
0069 h2_create()
0070 {
0071         simple_if_init $h2 192.0.2.2/24 2001:db8::2/124
0072 }
0073 
0074 h2_destroy()
0075 {
0076         simple_if_fini $h2 192.0.2.2/24 2001:db8::2/124
0077 }
0078 
0079 ler1_create()
0080 {
0081         tc qdisc add dev $edge1 ingress
0082         tc filter add dev $edge1 ingress                            \
0083            matchall                                                 \
0084            action mpls mac_push label 102                           \
0085            action vlan push_eth dst_mac $mpls2mac src_mac $mpls1mac \
0086            action mirred egress redirect dev $mpls1
0087         ip link set dev $edge1 up
0088 
0089         tc qdisc add dev $mpls1 ingress
0090         tc filter add dev $mpls1 ingress            \
0091            protocol mpls_uc                         \
0092            flower mpls_label 101                    \
0093            action vlan pop_eth                      \
0094            action mpls pop protocol teb             \
0095            action mirred egress redirect dev $edge1
0096         ip link set dev $mpls1 up
0097 }
0098 
0099 ler1_destroy()
0100 {
0101         ip link set dev $mpls1 down
0102         tc qdisc del dev $mpls1 ingress
0103 
0104         ip link set dev $edge1 down
0105         tc qdisc del dev $edge1 ingress
0106 }
0107 
0108 ler2_create()
0109 {
0110         tc qdisc add dev $edge2 ingress
0111         tc filter add dev $edge2 ingress                            \
0112            matchall                                                 \
0113            action mpls mac_push label 101                           \
0114            action vlan push_eth dst_mac $mpls1mac src_mac $mpls2mac \
0115            action mirred egress redirect dev $mpls2
0116         ip link set dev $edge2 up
0117 
0118         tc qdisc add dev $mpls2 ingress
0119         tc filter add dev $mpls2 ingress            \
0120            protocol mpls_uc                         \
0121            flower mpls_label 102                    \
0122            action vlan pop_eth                      \
0123            action mpls pop protocol teb             \
0124            action mirred egress redirect dev $edge2
0125         ip link set dev $mpls2 up
0126 }
0127 
0128 ler2_destroy()
0129 {
0130         ip link set dev $mpls2 down
0131         tc qdisc del dev $mpls2 ingress
0132 
0133         ip link set dev $edge2 down
0134         tc qdisc del dev $edge2 ingress
0135 }
0136 
0137 mpls_forward_eth()
0138 {
0139         ping_test $h1 192.0.2.2
0140         ping6_test $h1 2001:db8::2
0141 }
0142 
0143 setup_prepare()
0144 {
0145         h1=${NETIFS[p1]}
0146         edge1=${NETIFS[p2]}
0147 
0148         mpls1=${NETIFS[p3]}
0149         mpls2=${NETIFS[p4]}
0150 
0151         edge2=${NETIFS[p5]}
0152         h2=${NETIFS[p6]}
0153 
0154         mpls1mac=$(mac_get $mpls1)
0155         mpls2mac=$(mac_get $mpls2)
0156 
0157         vrf_prepare
0158 
0159         h1_create
0160         h2_create
0161         ler1_create
0162         ler2_create
0163 }
0164 
0165 cleanup()
0166 {
0167         pre_cleanup
0168 
0169         ler2_destroy
0170         ler1_destroy
0171         h2_destroy
0172         h1_destroy
0173 
0174         vrf_cleanup
0175 }
0176 
0177 trap cleanup EXIT
0178 
0179 setup_prepare
0180 setup_wait
0181 
0182 tests_run
0183 
0184 tc_offload_check
0185 if [[ $? -ne 0 ]]; then
0186         log_info "Could not test offloaded functionality"
0187 else
0188         tcflags="skip_sw"
0189         tests_run
0190 fi
0191 
0192 exit $EXIT_STATUS