0001
0002
0003
0004
0005
0006
0007
0008
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
0045
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