Home | History | Annotate | Download | only in forwarding
      1 #!/bin/bash
      2 # SPDX-License-Identifier: GPL-2.0
      3 
      4 # This test uses standard topology for testing gretap. See
      5 # mirror_gre_topo_lib.sh for more details.
      6 #
      7 # This tests flower-triggered mirroring to gretap and ip6gretap netdevices. The
      8 # interfaces on H1 and H2 have two addresses each. Flower match on one of the
      9 # addresses is configured with mirror action. It is expected that when pinging
     10 # this address, mirroring takes place, whereas when pinging the other one,
     11 # there's no mirroring.
     12 
     13 ALL_TESTS="
     14 	test_gretap
     15 	test_ip6gretap
     16 "
     17 
     18 NUM_NETIFS=6
     19 source lib.sh
     20 source mirror_lib.sh
     21 source mirror_gre_lib.sh
     22 source mirror_gre_topo_lib.sh
     23 
     24 setup_prepare()
     25 {
     26 	h1=${NETIFS[p1]}
     27 	swp1=${NETIFS[p2]}
     28 
     29 	swp2=${NETIFS[p3]}
     30 	h2=${NETIFS[p4]}
     31 
     32 	swp3=${NETIFS[p5]}
     33 	h3=${NETIFS[p6]}
     34 
     35 	vrf_prepare
     36 	mirror_gre_topo_create
     37 
     38 	ip address add dev $swp3 192.0.2.129/28
     39 	ip address add dev $h3 192.0.2.130/28
     40 
     41 	ip address add dev $swp3 2001:db8:2::1/64
     42 	ip address add dev $h3 2001:db8:2::2/64
     43 
     44 	ip address add dev $h1 192.0.2.3/28
     45 	ip address add dev $h2 192.0.2.4/28
     46 }
     47 
     48 cleanup()
     49 {
     50 	pre_cleanup
     51 
     52 	ip address del dev $h2 192.0.2.4/28
     53 	ip address del dev $h1 192.0.2.3/28
     54 
     55 	ip address del dev $h3 2001:db8:2::2/64
     56 	ip address del dev $swp3 2001:db8:2::1/64
     57 
     58 	ip address del dev $h3 192.0.2.130/28
     59 	ip address del dev $swp3 192.0.2.129/28
     60 
     61 	mirror_gre_topo_destroy
     62 	vrf_cleanup
     63 }
     64 
     65 test_span_gre_dir_acl()
     66 {
     67 	test_span_gre_dir_ips "$@" 192.0.2.3 192.0.2.4
     68 }
     69 
     70 fail_test_span_gre_dir_acl()
     71 {
     72 	fail_test_span_gre_dir_ips "$@" 192.0.2.3 192.0.2.4
     73 }
     74 
     75 full_test_span_gre_dir_acl()
     76 {
     77 	local tundev=$1; shift
     78 	local direction=$1; shift
     79 	local forward_type=$1; shift
     80 	local backward_type=$1; shift
     81 	local match_dip=$1; shift
     82 	local what=$1; shift
     83 
     84 	mirror_install $swp1 $direction $tundev \
     85 		       "protocol ip flower $tcflags dst_ip $match_dip"
     86 	fail_test_span_gre_dir $tundev $direction
     87 	test_span_gre_dir_acl "$tundev" "$direction" \
     88 			  "$forward_type" "$backward_type"
     89 	mirror_uninstall $swp1 $direction
     90 
     91 	# Test lack of mirroring after ACL mirror is uninstalled.
     92 	fail_test_span_gre_dir_acl "$tundev" "$direction"
     93 
     94 	log_test "$direction $what ($tcflags)"
     95 }
     96 
     97 test_gretap()
     98 {
     99 	full_test_span_gre_dir_acl gt4 ingress 8 0 192.0.2.4 "ACL mirror to gretap"
    100 	full_test_span_gre_dir_acl gt4 egress 0 8 192.0.2.3 "ACL mirror to gretap"
    101 }
    102 
    103 test_ip6gretap()
    104 {
    105 	full_test_span_gre_dir_acl gt6 ingress 8 0 192.0.2.4 "ACL mirror to ip6gretap"
    106 	full_test_span_gre_dir_acl gt6 egress 0 8 192.0.2.3 "ACL mirror to ip6gretap"
    107 }
    108 
    109 test_all()
    110 {
    111 	RET=0
    112 
    113 	slow_path_trap_install $swp1 ingress
    114 	slow_path_trap_install $swp1 egress
    115 
    116 	tests_run
    117 
    118 	slow_path_trap_uninstall $swp1 egress
    119 	slow_path_trap_uninstall $swp1 ingress
    120 }
    121 
    122 trap cleanup EXIT
    123 
    124 setup_prepare
    125 setup_wait
    126 
    127 tcflags="skip_hw"
    128 test_all
    129 
    130 if ! tc_offload_check; then
    131 	echo "WARN: Could not test offloaded functionality"
    132 else
    133 	tcflags="skip_sw"
    134 	test_all
    135 fi
    136 
    137 exit $EXIT_STATUS
    138