Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 # This test uses standard topology for testing gretap. See
0005 # ../../../net/forwarding/mirror_gre_topo_lib.sh for more details.
0006 #
0007 # Test offloading various features of offloading gretap mirrors specific to
0008 # mlxsw.
0009 
0010 lib_dir=$(dirname $0)/../../../net/forwarding
0011 
0012 NUM_NETIFS=6
0013 source $lib_dir/lib.sh
0014 source $lib_dir/mirror_lib.sh
0015 source $lib_dir/mirror_gre_lib.sh
0016 source $lib_dir/mirror_gre_topo_lib.sh
0017 
0018 setup_keyful()
0019 {
0020         tunnel_create gt6-key ip6gretap 2001:db8:3::1 2001:db8:3::2 \
0021                       ttl 100 tos inherit allow-localremote \
0022                       key 1234
0023 
0024         tunnel_create h3-gt6-key ip6gretap 2001:db8:3::2 2001:db8:3::1 \
0025                       key 1234
0026         ip link set h3-gt6-key vrf v$h3
0027         matchall_sink_create h3-gt6-key
0028 
0029         ip address add dev $swp3 2001:db8:3::1/64
0030         ip address add dev $h3 2001:db8:3::2/64
0031 }
0032 
0033 cleanup_keyful()
0034 {
0035         ip address del dev $h3 2001:db8:3::2/64
0036         ip address del dev $swp3 2001:db8:3::1/64
0037 
0038         tunnel_destroy h3-gt6-key
0039         tunnel_destroy gt6-key
0040 }
0041 
0042 setup_soft()
0043 {
0044         # Set up a topology for testing underlay routes that point at an
0045         # unsupported soft device.
0046 
0047         tunnel_create gt6-soft ip6gretap 2001:db8:4::1 2001:db8:4::2 \
0048                       ttl 100 tos inherit allow-localremote
0049 
0050         tunnel_create h3-gt6-soft ip6gretap 2001:db8:4::2 2001:db8:4::1
0051         ip link set h3-gt6-soft vrf v$h3
0052         matchall_sink_create h3-gt6-soft
0053 
0054         ip link add name v1 type veth peer name v2
0055         ip link set dev v1 up
0056         ip address add dev v1 2001:db8:4::1/64
0057 
0058         ip link set dev v2 vrf v$h3
0059         ip link set dev v2 up
0060         ip address add dev v2 2001:db8:4::2/64
0061 }
0062 
0063 cleanup_soft()
0064 {
0065         ip link del dev v1
0066 
0067         tunnel_destroy h3-gt6-soft
0068         tunnel_destroy gt6-soft
0069 }
0070 
0071 setup_prepare()
0072 {
0073         h1=${NETIFS[p1]}
0074         swp1=${NETIFS[p2]}
0075 
0076         swp2=${NETIFS[p3]}
0077         h2=${NETIFS[p4]}
0078 
0079         swp3=${NETIFS[p5]}
0080         h3=${NETIFS[p6]}
0081 
0082         vrf_prepare
0083         mirror_gre_topo_create
0084 
0085         ip address add dev $swp3 2001:db8:2::1/64
0086         ip address add dev $h3 2001:db8:2::2/64
0087 
0088         ip address add dev $swp3 192.0.2.129/28
0089         ip address add dev $h3 192.0.2.130/28
0090 
0091         setup_keyful
0092         setup_soft
0093 }
0094 
0095 cleanup()
0096 {
0097         pre_cleanup
0098 
0099         cleanup_soft
0100         cleanup_keyful
0101 
0102         ip address del dev $h3 2001:db8:2::2/64
0103         ip address del dev $swp3 2001:db8:2::1/64
0104 
0105         ip address del dev $h3 192.0.2.130/28
0106         ip address del dev $swp3 192.0.2.129/28
0107 
0108         mirror_gre_topo_destroy
0109         vrf_cleanup
0110 }
0111 
0112 test_span_gre_ttl_inherit()
0113 {
0114         local tundev=$1; shift
0115         local type=$1; shift
0116         local what=$1; shift
0117 
0118         RET=0
0119 
0120         ip link set dev $tundev type $type ttl inherit
0121         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0122         fail_test_span_gre_dir $tundev ingress
0123 
0124         ip link set dev $tundev type $type ttl 100
0125 
0126         quick_test_span_gre_dir $tundev ingress
0127         mirror_uninstall $swp1 ingress
0128 
0129         log_test "$what: no offload on TTL of inherit ($tcflags)"
0130 }
0131 
0132 test_span_gre_tos_fixed()
0133 {
0134         local tundev=$1; shift
0135         local type=$1; shift
0136         local what=$1; shift
0137 
0138         RET=0
0139 
0140         ip link set dev $tundev type $type tos 0x10
0141         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0142         fail_test_span_gre_dir $tundev ingress
0143 
0144         ip link set dev $tundev type $type tos inherit
0145         quick_test_span_gre_dir $tundev ingress
0146         mirror_uninstall $swp1 ingress
0147 
0148         log_test "$what: no offload on a fixed TOS ($tcflags)"
0149 }
0150 
0151 test_span_failable()
0152 {
0153         local should_fail=$1; shift
0154         local tundev=$1; shift
0155         local what=$1; shift
0156 
0157         RET=0
0158 
0159         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0160         if ((should_fail)); then
0161             fail_test_span_gre_dir  $tundev ingress
0162         else
0163             quick_test_span_gre_dir $tundev ingress
0164         fi
0165         mirror_uninstall $swp1 ingress
0166 
0167         log_test "$what: should_fail=$should_fail ($tcflags)"
0168 }
0169 
0170 test_failable()
0171 {
0172         local should_fail=$1; shift
0173 
0174         test_span_failable $should_fail gt6-key "mirror to keyful gretap"
0175         test_span_failable $should_fail gt6-soft "mirror to gretap w/ soft underlay"
0176 }
0177 
0178 test_sw()
0179 {
0180         slow_path_trap_install $swp1 ingress
0181         slow_path_trap_install $swp1 egress
0182 
0183         test_failable 0
0184 
0185         slow_path_trap_uninstall $swp1 egress
0186         slow_path_trap_uninstall $swp1 ingress
0187 }
0188 
0189 test_hw()
0190 {
0191         test_failable 1
0192 
0193         test_span_gre_tos_fixed gt4 gretap "mirror to gretap"
0194         test_span_gre_tos_fixed gt6 ip6gretap "mirror to ip6gretap"
0195 
0196         test_span_gre_ttl_inherit gt4 gretap "mirror to gretap"
0197         test_span_gre_ttl_inherit gt6 ip6gretap "mirror to ip6gretap"
0198 }
0199 
0200 trap cleanup EXIT
0201 
0202 setup_prepare
0203 setup_wait
0204 
0205 if ! tc_offload_check; then
0206     check_err 1 "Could not test offloaded functionality"
0207     log_test "mlxsw-specific tests for mirror to gretap"
0208     exit
0209 fi
0210 
0211 tcflags="skip_hw"
0212 test_sw
0213 
0214 tcflags="skip_sw"
0215 test_hw
0216 
0217 exit $EXIT_STATUS