0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
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