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 mirroring. See mirror_topo_lib.sh
      5 # for more details.
      6 #
      7 # Test for "tc action mirred egress mirror" that mirrors to a vlan device.
      8 
      9 ALL_TESTS="
     10 	test_vlan
     11 	test_tagged_vlan
     12 "
     13 
     14 NUM_NETIFS=6
     15 source lib.sh
     16 source mirror_lib.sh
     17 source mirror_topo_lib.sh
     18 
     19 setup_prepare()
     20 {
     21 	h1=${NETIFS[p1]}
     22 	swp1=${NETIFS[p2]}
     23 
     24 	swp2=${NETIFS[p3]}
     25 	h2=${NETIFS[p4]}
     26 
     27 	swp3=${NETIFS[p5]}
     28 	h3=${NETIFS[p6]}
     29 
     30 	vrf_prepare
     31 	mirror_topo_create
     32 
     33 	vlan_create $swp3 555
     34 
     35 	vlan_create $h3 555 v$h3
     36 	matchall_sink_create $h3.555
     37 
     38 	vlan_create $h1 111 v$h1 192.0.2.17/28
     39 	bridge vlan add dev $swp1 vid 111
     40 
     41 	vlan_create $h2 111 v$h2 192.0.2.18/28
     42 	bridge vlan add dev $swp2 vid 111
     43 }
     44 
     45 cleanup()
     46 {
     47 	pre_cleanup
     48 
     49 	vlan_destroy $h2 111
     50 	vlan_destroy $h1 111
     51 	vlan_destroy $h3 555
     52 	vlan_destroy $swp3 555
     53 
     54 	mirror_topo_destroy
     55 	vrf_cleanup
     56 }
     57 
     58 test_vlan_dir()
     59 {
     60 	local direction=$1; shift
     61 	local forward_type=$1; shift
     62 	local backward_type=$1; shift
     63 
     64 	RET=0
     65 
     66 	mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
     67 	test_span_dir "$h3.555" "$direction" "$forward_type" "$backward_type"
     68 	mirror_uninstall $swp1 $direction
     69 
     70 	log_test "$direction mirror to vlan ($tcflags)"
     71 }
     72 
     73 test_vlan()
     74 {
     75 	test_vlan_dir ingress 8 0
     76 	test_vlan_dir egress 0 8
     77 }
     78 
     79 test_tagged_vlan_dir()
     80 {
     81 	local direction=$1; shift
     82 	local forward_type=$1; shift
     83 	local backward_type=$1; shift
     84 
     85 	RET=0
     86 
     87 	mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
     88 	do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" \
     89 				  192.0.2.17 192.0.2.18
     90 	do_test_span_vlan_dir_ips  0 "$h3.555" 555 "$direction" \
     91 				  192.0.2.17 192.0.2.18
     92 	mirror_uninstall $swp1 $direction
     93 
     94 	log_test "$direction mirror tagged to vlan ($tcflags)"
     95 }
     96 
     97 test_tagged_vlan()
     98 {
     99 	test_tagged_vlan_dir ingress 8 0
    100 	test_tagged_vlan_dir egress 0 8
    101 }
    102 
    103 test_all()
    104 {
    105 	slow_path_trap_install $swp1 ingress
    106 	slow_path_trap_install $swp1 egress
    107 	trap_install $h3 ingress
    108 
    109 	tests_run
    110 
    111 	trap_uninstall $h3 ingress
    112 	slow_path_trap_uninstall $swp1 egress
    113 	slow_path_trap_uninstall $swp1 ingress
    114 }
    115 
    116 trap cleanup EXIT
    117 
    118 setup_prepare
    119 setup_wait
    120 
    121 tcflags="skip_hw"
    122 test_all
    123 
    124 if ! tc_offload_check; then
    125 	echo "WARN: Could not test offloaded functionality"
    126 else
    127 	tcflags="skip_sw"
    128 	test_all
    129 fi
    130 
    131 exit $EXIT_STATUS
    132