Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 #   +---------------------+                             +---------------------+
0005 #   | H1                  |                             |                  H2 |
0006 #   |     + $h1           |                             |           $h2 +     |
0007 #   |     | 192.0.2.1/28  |                             |  192.0.2.2/28 |     |
0008 #   +-----|---------------+                             +---------------|-----+
0009 #         |                                                             |
0010 #   +-----|-------------------------------------------------------------|-----+
0011 #   | SW  o--> mirror                                                   |     |
0012 #   | +---|-------------------------------------------------------------|---+ |
0013 #   | |   + $swp1                    BR                           $swp2 +   | |
0014 #   | +---------------------------------------------------------------------+ |
0015 #   |                                                                         |
0016 #   | +---------------------------------------------------------------------+ |
0017 #   | | OL                      + gt6 (ip6gretap)      + gt4 (gretap)       | |
0018 #   | |                         : loc=2001:db8:2::1    : loc=192.0.2.129    | |
0019 #   | |                         : rem=2001:db8:2::2    : rem=192.0.2.130    | |
0020 #   | |                         : ttl=100              : ttl=100            | |
0021 #   | |                         : tos=inherit          : tos=inherit        | |
0022 #   | +-------------------------:--|-------------------:--|-----------------+ |
0023 #   |                           :  |                   :  |                   |
0024 #   | +-------------------------:--|-------------------:--|-----------------+ |
0025 #   | | UL                      :  |,---------------------'                 | |
0026 #   | |   + $swp3               :  ||                  :                    | |
0027 #   | |   | 192.0.2.129/28      :  vv                  :                    | |
0028 #   | |   | 2001:db8:2::1/64    :  + ul (dummy)        :                    | |
0029 #   | +---|---------------------:----------------------:--------------------+ |
0030 #   +-----|---------------------:----------------------:----------------------+
0031 #         |                     :                      :
0032 #   +-----|---------------------:----------------------:----------------------+
0033 #   | H3  + $h3                 + h3-gt6 (ip6gretap)   + h3-gt4 (gretap)      |
0034 #   |       192.0.2.130/28        loc=2001:db8:2::2      loc=192.0.2.130      |
0035 #   |       2001:db8:2::2/64      rem=2001:db8:2::1      rem=192.0.2.129      |
0036 #   |                             ttl=100                ttl=100              |
0037 #   |                             tos=inherit            tos=inherit          |
0038 #   |                                                                         |
0039 #   +-------------------------------------------------------------------------+
0040 #
0041 # This tests mirroring to gretap and ip6gretap configured in an overlay /
0042 # underlay manner, i.e. with a bound dummy device that marks underlay VRF where
0043 # the encapsulated packed should be routed.
0044 
0045 ALL_TESTS="
0046         test_gretap
0047         test_ip6gretap
0048 "
0049 
0050 NUM_NETIFS=6
0051 source lib.sh
0052 source mirror_lib.sh
0053 source mirror_gre_lib.sh
0054 
0055 h1_create()
0056 {
0057         simple_if_init $h1 192.0.2.1/28
0058 }
0059 
0060 h1_destroy()
0061 {
0062         simple_if_fini $h1 192.0.2.1/28
0063 }
0064 
0065 h2_create()
0066 {
0067         simple_if_init $h2 192.0.2.2/28
0068 }
0069 
0070 h2_destroy()
0071 {
0072         simple_if_fini $h2 192.0.2.2/28
0073 }
0074 
0075 h3_create()
0076 {
0077         simple_if_init $h3 192.0.2.130/28 2001:db8:2::2/64
0078 
0079         tunnel_create h3-gt4 gretap 192.0.2.130 192.0.2.129
0080         ip link set h3-gt4 vrf v$h3
0081         matchall_sink_create h3-gt4
0082 
0083         tunnel_create h3-gt6 ip6gretap 2001:db8:2::2 2001:db8:2::1
0084         ip link set h3-gt6 vrf v$h3
0085         matchall_sink_create h3-gt6
0086 }
0087 
0088 h3_destroy()
0089 {
0090         tunnel_destroy h3-gt6
0091         tunnel_destroy h3-gt4
0092 
0093         simple_if_fini $h3 192.0.2.130/28 2001:db8:2::2/64
0094 }
0095 
0096 switch_create()
0097 {
0098         # Bridge between H1 and H2.
0099 
0100         ip link add name br1 type bridge vlan_filtering 1
0101         ip link set dev br1 up
0102 
0103         ip link set dev $swp1 master br1
0104         ip link set dev $swp1 up
0105 
0106         ip link set dev $swp2 master br1
0107         ip link set dev $swp2 up
0108 
0109         tc qdisc add dev $swp1 clsact
0110 
0111         # Underlay.
0112 
0113         simple_if_init $swp3 192.0.2.129/28 2001:db8:2::1/64
0114 
0115         ip link add name ul type dummy
0116         ip link set dev ul master v$swp3
0117         ip link set dev ul up
0118 
0119         # Overlay.
0120 
0121         vrf_create vrf-ol
0122         ip link set dev vrf-ol up
0123 
0124         tunnel_create gt4 gretap 192.0.2.129 192.0.2.130 \
0125                       ttl 100 tos inherit dev ul
0126         ip link set dev gt4 master vrf-ol
0127         ip link set dev gt4 up
0128 
0129         tunnel_create gt6 ip6gretap 2001:db8:2::1 2001:db8:2::2 \
0130                       ttl 100 tos inherit dev ul allow-localremote
0131         ip link set dev gt6 master vrf-ol
0132         ip link set dev gt6 up
0133 }
0134 
0135 switch_destroy()
0136 {
0137         vrf_destroy vrf-ol
0138 
0139         tunnel_destroy gt6
0140         tunnel_destroy gt4
0141 
0142         simple_if_fini $swp3 192.0.2.129/28 2001:db8:2::1/64
0143 
0144         ip link del dev ul
0145 
0146         tc qdisc del dev $swp1 clsact
0147 
0148         ip link set dev $swp1 down
0149         ip link set dev $swp2 down
0150         ip link del dev br1
0151 }
0152 
0153 setup_prepare()
0154 {
0155         h1=${NETIFS[p1]}
0156         swp1=${NETIFS[p2]}
0157 
0158         swp2=${NETIFS[p3]}
0159         h2=${NETIFS[p4]}
0160 
0161         swp3=${NETIFS[p5]}
0162         h3=${NETIFS[p6]}
0163 
0164         vrf_prepare
0165 
0166         h1_create
0167         h2_create
0168         h3_create
0169 
0170         switch_create
0171 }
0172 
0173 cleanup()
0174 {
0175         pre_cleanup
0176 
0177         switch_destroy
0178 
0179         h3_destroy
0180         h2_destroy
0181         h1_destroy
0182 
0183         vrf_cleanup
0184 }
0185 
0186 test_gretap()
0187 {
0188         full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap w/ UL"
0189         full_test_span_gre_dir gt4 egress  0 8 "mirror to gretap w/ UL"
0190 }
0191 
0192 test_ip6gretap()
0193 {
0194         full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap w/ UL"
0195         full_test_span_gre_dir gt6 egress  0 8 "mirror to ip6gretap w/ UL"
0196 }
0197 
0198 test_all()
0199 {
0200         RET=0
0201 
0202         slow_path_trap_install $swp1 ingress
0203         slow_path_trap_install $swp1 egress
0204 
0205         tests_run
0206 
0207         slow_path_trap_uninstall $swp1 egress
0208         slow_path_trap_uninstall $swp1 ingress
0209 }
0210 
0211 trap cleanup EXIT
0212 
0213 setup_prepare
0214 setup_wait
0215 
0216 tcflags="skip_hw"
0217 test_all
0218 
0219 if ! tc_offload_check; then
0220         echo "WARN: Could not test offloaded functionality"
0221 else
0222         tcflags="skip_sw"
0223         test_all
0224 fi
0225 
0226 exit $EXIT_STATUS