tc_mpls_l2vpn.sh (5146B)
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