1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 3 4 # This test sends traffic from H1 to H2. Either on ingress of $swp1, or on 5 # egress of $swp2, the traffic is acted upon by an action skbedit priority. The 6 # new priority should be taken into account when classifying traffic on the PRIO 7 # qdisc at $swp2. The test verifies that for different priority values, the 8 # traffic ends up in expected PRIO band. 9 # 10 # +----------------------+ +----------------------+ 11 # | H1 | | H2 | 12 # | + $h1 | | $h2 + | 13 # | | 192.0.2.1/28 | | 192.0.2.2/28 | | 14 # +----|-----------------+ +----------------|-----+ 15 # | | 16 # +----|----------------------------------------------------------------|-----+ 17 # | SW | | | 18 # | +-|----------------------------------------------------------------|-+ | 19 # | | + $swp1 BR $swp2 + | | 20 # | | PRIO | | 21 # | +--------------------------------------------------------------------+ | 22 # +---------------------------------------------------------------------------+ 23 24 ALL_TESTS=" 25 ping_ipv4 26 test_ingress 27 test_egress 28 " 29 30 NUM_NETIFS=4 31 source lib.sh 32 33 : ${HIT_TIMEOUT:=2000} # ms 34 35 h1_create() 36 { 37 simple_if_init $h1 192.0.2.1/28 38 } 39 40 h1_destroy() 41 { 42 simple_if_fini $h1 192.0.2.1/28 43 } 44 45 h2_create() 46 { 47 simple_if_init $h2 192.0.2.2/28 48 } 49 50 h2_destroy() 51 { 52 simple_if_fini $h2 192.0.2.2/28 53 } 54 55 switch_create() 56 { 57 ip link add name br1 type bridge vlan_filtering 1 58 ip link set dev br1 addrgenmode none 59 ip link set dev br1 up 60 ip link set dev $swp1 master br1 61 ip link set dev $swp1 up 62 ip link set dev $swp2 master br1 63 ip link set dev $swp2 up 64 65 tc qdisc add dev $swp1 clsact 66 tc qdisc add dev $swp2 clsact 67 tc qdisc add dev $swp2 root handle 10: \ 68 prio bands 8 priomap 7 6 5 4 3 2 1 0 69 } 70 71 switch_destroy() 72 { 73 tc qdisc del dev $swp2 root 74 tc qdisc del dev $swp2 clsact 75 tc qdisc del dev $swp1 clsact 76 77 ip link set dev $swp2 down 78 ip link set dev $swp2 nomaster 79 ip link set dev $swp1 down 80 ip link set dev $swp1 nomaster 81 ip link del dev br1 82 } 83 84 setup_prepare() 85 { 86 h1=${NETIFS[p1]} 87 swp1=${NETIFS[p2]} 88 89 swp2=${NETIFS[p3]} 90 h2=${NETIFS[p4]} 91 92 h2mac=$(mac_get $h2) 93 94 vrf_prepare 95 h1_create 96 h2_create 97 switch_create 98 } 99 100 cleanup() 101 { 102 pre_cleanup 103 104 switch_destroy 105 h2_destroy 106 h1_destroy 107 vrf_cleanup 108 } 109 110 ping_ipv4() 111 { 112 ping_test $h1 192.0.2.2 113 } 114 115 test_skbedit_priority_one() 116 { 117 local locus=$1; shift 118 local prio=$1; shift 119 local classid=$1; shift 120 121 RET=0 122 123 tc filter add $locus handle 101 pref 1 \ 124 flower action skbedit priority $prio 125 126 local pkt0=$(qdisc_parent_stats_get $swp2 $classid .packets) 127 local pkt2=$(tc_rule_handle_stats_get "$locus" 101) 128 $MZ $h1 -t udp "sp=54321,dp=12345" -c 10 -d 20msec -p 100 \ 129 -a own -b $h2mac -A 192.0.2.1 -B 192.0.2.2 -q 130 131 local pkt1 132 pkt1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((pkt0 + 10))" \ 133 qdisc_parent_stats_get $swp2 $classid .packets) 134 check_err $? "Expected to get 10 packets on class $classid, but got $((pkt1 - pkt0))." 135 136 local pkt3=$(tc_rule_handle_stats_get "$locus" 101) 137 ((pkt3 >= pkt2 + 10)) 138 check_err $? "Expected to get 10 packets on skbedit rule but got $((pkt3 - pkt2))." 139 140 log_test "$locus skbedit priority $prio -> classid $classid" 141 142 tc filter del $locus pref 1 143 } 144 145 test_ingress() 146 { 147 local prio 148 149 for prio in {0..7}; do 150 test_skbedit_priority_one "dev $swp1 ingress" \ 151 $prio 10:$((8 - prio)) 152 done 153 } 154 155 test_egress() 156 { 157 local prio 158 159 for prio in {0..7}; do 160 test_skbedit_priority_one "dev $swp2 egress" \ 161 $prio 10:$((8 - prio)) 162 done 163 } 164 165 trap cleanup EXIT 166 167 setup_prepare 168 setup_wait 169 170 tests_run 171 172 exit $EXIT_STATUS
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.