126d9f0cdSPetr Machata#!/bin/bash 226d9f0cdSPetr Machata# SPDX-License-Identifier: GPL-2.0 326d9f0cdSPetr Machata 426d9f0cdSPetr Machata# This test sends traffic from H1 to H2. Either on ingress of $swp1, or on 526d9f0cdSPetr Machata# egress of $swp2, the traffic is acted upon by an action skbedit priority. The 626d9f0cdSPetr Machata# new priority should be taken into account when classifying traffic on the PRIO 726d9f0cdSPetr Machata# qdisc at $swp2. The test verifies that for different priority values, the 826d9f0cdSPetr Machata# traffic ends up in expected PRIO band. 926d9f0cdSPetr Machata# 1026d9f0cdSPetr Machata# +----------------------+ +----------------------+ 1126d9f0cdSPetr Machata# | H1 | | H2 | 1226d9f0cdSPetr Machata# | + $h1 | | $h2 + | 1326d9f0cdSPetr Machata# | | 192.0.2.1/28 | | 192.0.2.2/28 | | 1426d9f0cdSPetr Machata# +----|-----------------+ +----------------|-----+ 1526d9f0cdSPetr Machata# | | 1626d9f0cdSPetr Machata# +----|----------------------------------------------------------------|-----+ 1726d9f0cdSPetr Machata# | SW | | | 1826d9f0cdSPetr Machata# | +-|----------------------------------------------------------------|-+ | 1926d9f0cdSPetr Machata# | | + $swp1 BR $swp2 + | | 2026d9f0cdSPetr Machata# | | PRIO | | 2126d9f0cdSPetr Machata# | +--------------------------------------------------------------------+ | 2226d9f0cdSPetr Machata# +---------------------------------------------------------------------------+ 2326d9f0cdSPetr Machata 2426d9f0cdSPetr MachataALL_TESTS=" 2526d9f0cdSPetr Machata ping_ipv4 2626d9f0cdSPetr Machata test_ingress 2726d9f0cdSPetr Machata test_egress 2826d9f0cdSPetr Machata" 2926d9f0cdSPetr Machata 3026d9f0cdSPetr MachataNUM_NETIFS=4 3126d9f0cdSPetr Machatasource lib.sh 3226d9f0cdSPetr Machata 3326d9f0cdSPetr Machata: ${HIT_TIMEOUT:=2000} # ms 3426d9f0cdSPetr Machata 3526d9f0cdSPetr Machatah1_create() 3626d9f0cdSPetr Machata{ 3726d9f0cdSPetr Machata simple_if_init $h1 192.0.2.1/28 3826d9f0cdSPetr Machata} 3926d9f0cdSPetr Machata 4026d9f0cdSPetr Machatah1_destroy() 4126d9f0cdSPetr Machata{ 4226d9f0cdSPetr Machata simple_if_fini $h1 192.0.2.1/28 4326d9f0cdSPetr Machata} 4426d9f0cdSPetr Machata 4526d9f0cdSPetr Machatah2_create() 4626d9f0cdSPetr Machata{ 4726d9f0cdSPetr Machata simple_if_init $h2 192.0.2.2/28 4826d9f0cdSPetr Machata} 4926d9f0cdSPetr Machata 5026d9f0cdSPetr Machatah2_destroy() 5126d9f0cdSPetr Machata{ 5226d9f0cdSPetr Machata simple_if_fini $h2 192.0.2.2/28 5326d9f0cdSPetr Machata} 5426d9f0cdSPetr Machata 5526d9f0cdSPetr Machataswitch_create() 5626d9f0cdSPetr Machata{ 57*f61018dcSPetr Machata ip link add name br1 type bridge vlan_filtering 1 58*f61018dcSPetr Machata ip link set dev br1 addrgenmode none 59*f61018dcSPetr Machata ip link set dev br1 up 6026d9f0cdSPetr Machata ip link set dev $swp1 master br1 6126d9f0cdSPetr Machata ip link set dev $swp1 up 6226d9f0cdSPetr Machata ip link set dev $swp2 master br1 6326d9f0cdSPetr Machata ip link set dev $swp2 up 6426d9f0cdSPetr Machata 6526d9f0cdSPetr Machata tc qdisc add dev $swp1 clsact 6626d9f0cdSPetr Machata tc qdisc add dev $swp2 clsact 6726d9f0cdSPetr Machata tc qdisc add dev $swp2 root handle 10: \ 6826d9f0cdSPetr Machata prio bands 8 priomap 7 6 5 4 3 2 1 0 6926d9f0cdSPetr Machata} 7026d9f0cdSPetr Machata 7126d9f0cdSPetr Machataswitch_destroy() 7226d9f0cdSPetr Machata{ 7326d9f0cdSPetr Machata tc qdisc del dev $swp2 root 7426d9f0cdSPetr Machata tc qdisc del dev $swp2 clsact 7526d9f0cdSPetr Machata tc qdisc del dev $swp1 clsact 7626d9f0cdSPetr Machata 77e67dfb8dSAmit Cohen ip link set dev $swp2 down 7826d9f0cdSPetr Machata ip link set dev $swp2 nomaster 79e67dfb8dSAmit Cohen ip link set dev $swp1 down 8026d9f0cdSPetr Machata ip link set dev $swp1 nomaster 8126d9f0cdSPetr Machata ip link del dev br1 8226d9f0cdSPetr Machata} 8326d9f0cdSPetr Machata 8426d9f0cdSPetr Machatasetup_prepare() 8526d9f0cdSPetr Machata{ 8626d9f0cdSPetr Machata h1=${NETIFS[p1]} 8726d9f0cdSPetr Machata swp1=${NETIFS[p2]} 8826d9f0cdSPetr Machata 8926d9f0cdSPetr Machata swp2=${NETIFS[p3]} 9026d9f0cdSPetr Machata h2=${NETIFS[p4]} 9126d9f0cdSPetr Machata 9226d9f0cdSPetr Machata h2mac=$(mac_get $h2) 9326d9f0cdSPetr Machata 9426d9f0cdSPetr Machata vrf_prepare 9526d9f0cdSPetr Machata h1_create 9626d9f0cdSPetr Machata h2_create 9726d9f0cdSPetr Machata switch_create 9826d9f0cdSPetr Machata} 9926d9f0cdSPetr Machata 10026d9f0cdSPetr Machatacleanup() 10126d9f0cdSPetr Machata{ 10226d9f0cdSPetr Machata pre_cleanup 10326d9f0cdSPetr Machata 10426d9f0cdSPetr Machata switch_destroy 10526d9f0cdSPetr Machata h2_destroy 10626d9f0cdSPetr Machata h1_destroy 10726d9f0cdSPetr Machata vrf_cleanup 10826d9f0cdSPetr Machata} 10926d9f0cdSPetr Machata 11026d9f0cdSPetr Machataping_ipv4() 11126d9f0cdSPetr Machata{ 11226d9f0cdSPetr Machata ping_test $h1 192.0.2.2 11326d9f0cdSPetr Machata} 11426d9f0cdSPetr Machata 11526d9f0cdSPetr Machatatest_skbedit_priority_one() 11626d9f0cdSPetr Machata{ 11726d9f0cdSPetr Machata local locus=$1; shift 11826d9f0cdSPetr Machata local prio=$1; shift 11926d9f0cdSPetr Machata local classid=$1; shift 12026d9f0cdSPetr Machata 12126d9f0cdSPetr Machata RET=0 12226d9f0cdSPetr Machata 12326d9f0cdSPetr Machata tc filter add $locus handle 101 pref 1 \ 12426d9f0cdSPetr Machata flower action skbedit priority $prio 12526d9f0cdSPetr Machata 12626d9f0cdSPetr Machata local pkt0=$(qdisc_parent_stats_get $swp2 $classid .packets) 1272a0b1307SPetr Machata local pkt2=$(tc_rule_handle_stats_get "$locus" 101) 12826d9f0cdSPetr Machata $MZ $h1 -t udp "sp=54321,dp=12345" -c 10 -d 20msec -p 100 \ 12926d9f0cdSPetr Machata -a own -b $h2mac -A 192.0.2.1 -B 192.0.2.2 -q 1302a0b1307SPetr Machata 13126d9f0cdSPetr Machata local pkt1 13226d9f0cdSPetr Machata pkt1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((pkt0 + 10))" \ 13326d9f0cdSPetr Machata qdisc_parent_stats_get $swp2 $classid .packets) 1342a0b1307SPetr Machata check_err $? "Expected to get 10 packets on class $classid, but got $((pkt1 - pkt0))." 13526d9f0cdSPetr Machata 1362a0b1307SPetr Machata local pkt3=$(tc_rule_handle_stats_get "$locus" 101) 1372a0b1307SPetr Machata ((pkt3 >= pkt2 + 10)) 1382a0b1307SPetr Machata check_err $? "Expected to get 10 packets on skbedit rule but got $((pkt3 - pkt2))." 1392a0b1307SPetr Machata 14026d9f0cdSPetr Machata log_test "$locus skbedit priority $prio -> classid $classid" 14126d9f0cdSPetr Machata 14226d9f0cdSPetr Machata tc filter del $locus pref 1 14326d9f0cdSPetr Machata} 14426d9f0cdSPetr Machata 14526d9f0cdSPetr Machatatest_ingress() 14626d9f0cdSPetr Machata{ 14726d9f0cdSPetr Machata local prio 14826d9f0cdSPetr Machata 14926d9f0cdSPetr Machata for prio in {0..7}; do 15026d9f0cdSPetr Machata test_skbedit_priority_one "dev $swp1 ingress" \ 15126d9f0cdSPetr Machata $prio 10:$((8 - prio)) 15226d9f0cdSPetr Machata done 15326d9f0cdSPetr Machata} 15426d9f0cdSPetr Machata 15526d9f0cdSPetr Machatatest_egress() 15626d9f0cdSPetr Machata{ 15726d9f0cdSPetr Machata local prio 15826d9f0cdSPetr Machata 15926d9f0cdSPetr Machata for prio in {0..7}; do 16026d9f0cdSPetr Machata test_skbedit_priority_one "dev $swp2 egress" \ 16126d9f0cdSPetr Machata $prio 10:$((8 - prio)) 16226d9f0cdSPetr Machata done 16326d9f0cdSPetr Machata} 16426d9f0cdSPetr Machata 16526d9f0cdSPetr Machatatrap cleanup EXIT 16626d9f0cdSPetr Machata 16726d9f0cdSPetr Machatasetup_prepare 16826d9f0cdSPetr Machatasetup_wait 16926d9f0cdSPetr Machata 17026d9f0cdSPetr Machatatests_run 17126d9f0cdSPetr Machata 17226d9f0cdSPetr Machataexit $EXIT_STATUS 173