0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 ALL_TESTS="
0011 test_ttl
0012 test_tun_up
0013 test_egress_up
0014 test_remote_ip
0015 test_tun_del
0016 test_route_del
0017 "
0018
0019 NUM_NETIFS=6
0020 source lib.sh
0021 source mirror_lib.sh
0022 source mirror_gre_lib.sh
0023 source mirror_gre_topo_lib.sh
0024
0025 setup_prepare()
0026 {
0027 h1=${NETIFS[p1]}
0028 swp1=${NETIFS[p2]}
0029
0030 swp2=${NETIFS[p3]}
0031 h2=${NETIFS[p4]}
0032
0033 swp3=${NETIFS[p5]}
0034 h3=${NETIFS[p6]}
0035
0036 vrf_prepare
0037 mirror_gre_topo_create
0038
0039
0040
0041 sysctl_set net.ipv6.conf.$swp3.keep_addr_on_down 1
0042
0043 ip address add dev $swp3 192.0.2.129/28
0044 ip address add dev $h3 192.0.2.130/28
0045
0046 ip address add dev $swp3 2001:db8:2::1/64
0047 ip address add dev $h3 2001:db8:2::2/64
0048 }
0049
0050 cleanup()
0051 {
0052 pre_cleanup
0053
0054 ip address del dev $h3 2001:db8:2::2/64
0055 ip address del dev $swp3 2001:db8:2::1/64
0056
0057 ip address del dev $h3 192.0.2.130/28
0058 ip address del dev $swp3 192.0.2.129/28
0059
0060 sysctl_restore net.ipv6.conf.$swp3.keep_addr_on_down
0061
0062 mirror_gre_topo_destroy
0063 vrf_cleanup
0064 }
0065
0066 test_span_gre_ttl()
0067 {
0068 local tundev=$1; shift
0069 local type=$1; shift
0070 local prot=$1; shift
0071 local what=$1; shift
0072
0073 RET=0
0074
0075 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0076 tc filter add dev $h3 ingress pref 77 prot $prot \
0077 flower skip_hw ip_ttl 50 action pass
0078
0079 mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 0
0080
0081 ip link set dev $tundev type $type ttl 50
0082 sleep 2
0083 mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 10
0084
0085 ip link set dev $tundev type $type ttl 100
0086 tc filter del dev $h3 ingress pref 77
0087 mirror_uninstall $swp1 ingress
0088
0089 log_test "$what: TTL change ($tcflags)"
0090 }
0091
0092 test_span_gre_tun_up()
0093 {
0094 local tundev=$1; shift
0095 local what=$1; shift
0096
0097 RET=0
0098
0099 ip link set dev $tundev down
0100 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0101 fail_test_span_gre_dir $tundev ingress
0102
0103 ip link set dev $tundev up
0104
0105 quick_test_span_gre_dir $tundev ingress
0106 mirror_uninstall $swp1 ingress
0107
0108 log_test "$what: tunnel down/up ($tcflags)"
0109 }
0110
0111 test_span_gre_egress_up()
0112 {
0113 local tundev=$1; shift
0114 local remote_ip=$1; shift
0115 local what=$1; shift
0116
0117 RET=0
0118
0119 ip link set dev $swp3 down
0120 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0121 fail_test_span_gre_dir $tundev ingress
0122
0123
0124
0125 ip link set dev $swp3 up
0126 setup_wait_dev $swp3
0127 ping -c 1 -I $swp3 $remote_ip &>/dev/null
0128
0129 quick_test_span_gre_dir $tundev ingress
0130 mirror_uninstall $swp1 ingress
0131
0132 log_test "$what: egress down/up ($tcflags)"
0133 }
0134
0135 test_span_gre_remote_ip()
0136 {
0137 local tundev=$1; shift
0138 local type=$1; shift
0139 local correct_ip=$1; shift
0140 local wrong_ip=$1; shift
0141 local what=$1; shift
0142
0143 RET=0
0144
0145 ip link set dev $tundev type $type remote $wrong_ip
0146 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0147 fail_test_span_gre_dir $tundev ingress
0148
0149 ip link set dev $tundev type $type remote $correct_ip
0150 quick_test_span_gre_dir $tundev ingress
0151 mirror_uninstall $swp1 ingress
0152
0153 log_test "$what: remote address change ($tcflags)"
0154 }
0155
0156 test_span_gre_tun_del()
0157 {
0158 local tundev=$1; shift
0159 local type=$1; shift
0160 local flags=$1; shift
0161 local local_ip=$1; shift
0162 local remote_ip=$1; shift
0163 local what=$1; shift
0164
0165 RET=0
0166
0167 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0168 quick_test_span_gre_dir $tundev ingress
0169 ip link del dev $tundev
0170 fail_test_span_gre_dir $tundev ingress
0171
0172 tunnel_create $tundev $type $local_ip $remote_ip \
0173 ttl 100 tos inherit $flags
0174
0175
0176
0177 mirror_uninstall $swp1 ingress
0178 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0179 quick_test_span_gre_dir $tundev ingress
0180 mirror_uninstall $swp1 ingress
0181
0182 log_test "$what: tunnel deleted ($tcflags)"
0183 }
0184
0185 test_span_gre_route_del()
0186 {
0187 local tundev=$1; shift
0188 local edev=$1; shift
0189 local route=$1; shift
0190 local what=$1; shift
0191
0192 RET=0
0193
0194 mirror_install $swp1 ingress $tundev "matchall $tcflags"
0195 quick_test_span_gre_dir $tundev ingress
0196
0197 ip route del $route dev $edev
0198 fail_test_span_gre_dir $tundev ingress
0199
0200 ip route add $route dev $edev
0201 quick_test_span_gre_dir $tundev ingress
0202
0203 mirror_uninstall $swp1 ingress
0204
0205 log_test "$what: underlay route removal ($tcflags)"
0206 }
0207
0208 test_ttl()
0209 {
0210 test_span_gre_ttl gt4 gretap ip "mirror to gretap"
0211 test_span_gre_ttl gt6 ip6gretap ipv6 "mirror to ip6gretap"
0212 }
0213
0214 test_tun_up()
0215 {
0216 test_span_gre_tun_up gt4 "mirror to gretap"
0217 test_span_gre_tun_up gt6 "mirror to ip6gretap"
0218 }
0219
0220 test_egress_up()
0221 {
0222 test_span_gre_egress_up gt4 192.0.2.130 "mirror to gretap"
0223 test_span_gre_egress_up gt6 2001:db8:2::2 "mirror to ip6gretap"
0224 }
0225
0226 test_remote_ip()
0227 {
0228 test_span_gre_remote_ip gt4 gretap 192.0.2.130 192.0.2.132 "mirror to gretap"
0229 test_span_gre_remote_ip gt6 ip6gretap 2001:db8:2::2 2001:db8:2::4 "mirror to ip6gretap"
0230 }
0231
0232 test_tun_del()
0233 {
0234 test_span_gre_tun_del gt4 gretap "" \
0235 192.0.2.129 192.0.2.130 "mirror to gretap"
0236 test_span_gre_tun_del gt6 ip6gretap allow-localremote \
0237 2001:db8:2::1 2001:db8:2::2 "mirror to ip6gretap"
0238 }
0239
0240 test_route_del()
0241 {
0242 test_span_gre_route_del gt4 $swp3 192.0.2.128/28 "mirror to gretap"
0243 test_span_gre_route_del gt6 $swp3 2001:db8:2::/64 "mirror to ip6gretap"
0244 }
0245
0246 test_all()
0247 {
0248 slow_path_trap_install $swp1 ingress
0249 slow_path_trap_install $swp1 egress
0250
0251 tests_run
0252
0253 slow_path_trap_uninstall $swp1 egress
0254 slow_path_trap_uninstall $swp1 ingress
0255 }
0256
0257 trap cleanup EXIT
0258
0259 setup_prepare
0260 setup_wait
0261
0262 tcflags="skip_hw"
0263 test_all
0264
0265 if ! tc_offload_check; then
0266 echo "WARN: Could not test offloaded functionality"
0267 else
0268 tcflags="skip_sw"
0269 test_all
0270 fi
0271
0272 exit $EXIT_STATUS