1226657baSPetr Machata#!/bin/bash 2226657baSPetr Machata# SPDX-License-Identifier: GPL-2.0 3226657baSPetr Machata 4226657baSPetr Machata# This test sends traffic from H1 to H2. Either on ingress of $swp1, or on 5226657baSPetr Machata# egress of $swp2, the traffic is acted upon by a pedit action. An ingress 6226657baSPetr Machata# filter installed on $h2 verifies that the packet looks like expected. 7226657baSPetr Machata# 8226657baSPetr Machata# +----------------------+ +----------------------+ 9226657baSPetr Machata# | H1 | | H2 | 10226657baSPetr Machata# | + $h1 | | $h2 + | 11226657baSPetr Machata# | | 192.0.2.1/28 | | 192.0.2.2/28 | | 12226657baSPetr Machata# +----|-----------------+ +----------------|-----+ 13226657baSPetr Machata# | | 14226657baSPetr Machata# +----|----------------------------------------------------------------|-----+ 15226657baSPetr Machata# | SW | | | 16226657baSPetr Machata# | +-|----------------------------------------------------------------|-+ | 17226657baSPetr Machata# | | + $swp1 BR $swp2 + | | 18226657baSPetr Machata# | +--------------------------------------------------------------------+ | 19226657baSPetr Machata# +---------------------------------------------------------------------------+ 20226657baSPetr Machata 21226657baSPetr MachataALL_TESTS=" 22226657baSPetr Machata ping_ipv4 2393e106daSPetr Machata ping_ipv6 24226657baSPetr Machata test_ip_dsfield 25226657baSPetr Machata test_ip_dscp 26226657baSPetr Machata test_ip_ecn 27226657baSPetr Machata test_ip_dscp_ecn 2893e106daSPetr Machata test_ip6_dsfield 2993e106daSPetr Machata test_ip6_dscp 3093e106daSPetr Machata test_ip6_ecn 31226657baSPetr Machata" 32226657baSPetr Machata 33226657baSPetr MachataNUM_NETIFS=4 34226657baSPetr Machatasource lib.sh 35226657baSPetr Machatasource tc_common.sh 36226657baSPetr Machata 37226657baSPetr Machata: ${HIT_TIMEOUT:=2000} # ms 38226657baSPetr Machata 39226657baSPetr Machatah1_create() 40226657baSPetr Machata{ 41226657baSPetr Machata simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64 42226657baSPetr Machata} 43226657baSPetr Machata 44226657baSPetr Machatah1_destroy() 45226657baSPetr Machata{ 46226657baSPetr Machata simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64 47226657baSPetr Machata} 48226657baSPetr Machata 49226657baSPetr Machatah2_create() 50226657baSPetr Machata{ 51226657baSPetr Machata simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/64 52226657baSPetr Machata tc qdisc add dev $h2 clsact 53226657baSPetr Machata} 54226657baSPetr Machata 55226657baSPetr Machatah2_destroy() 56226657baSPetr Machata{ 57226657baSPetr Machata tc qdisc del dev $h2 clsact 58226657baSPetr Machata simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/64 59226657baSPetr Machata} 60226657baSPetr Machata 61226657baSPetr Machataswitch_create() 62226657baSPetr Machata{ 63*d7442b7dSPetr Machata ip link add name br1 type bridge vlan_filtering 1 64*d7442b7dSPetr Machata ip link set dev br1 addrgenmode none 65*d7442b7dSPetr Machata ip link set dev br1 up 66226657baSPetr Machata ip link set dev $swp1 master br1 67226657baSPetr Machata ip link set dev $swp1 up 68226657baSPetr Machata ip link set dev $swp2 master br1 69226657baSPetr Machata ip link set dev $swp2 up 70226657baSPetr Machata 71226657baSPetr Machata tc qdisc add dev $swp1 clsact 72226657baSPetr Machata tc qdisc add dev $swp2 clsact 73226657baSPetr Machata} 74226657baSPetr Machata 75226657baSPetr Machataswitch_destroy() 76226657baSPetr Machata{ 77226657baSPetr Machata tc qdisc del dev $swp2 clsact 78226657baSPetr Machata tc qdisc del dev $swp1 clsact 79226657baSPetr Machata 80e67dfb8dSAmit Cohen ip link set dev $swp2 down 81226657baSPetr Machata ip link set dev $swp2 nomaster 82e67dfb8dSAmit Cohen ip link set dev $swp1 down 83226657baSPetr Machata ip link set dev $swp1 nomaster 84226657baSPetr Machata ip link del dev br1 85226657baSPetr Machata} 86226657baSPetr Machata 87226657baSPetr Machatasetup_prepare() 88226657baSPetr Machata{ 89226657baSPetr Machata h1=${NETIFS[p1]} 90226657baSPetr Machata swp1=${NETIFS[p2]} 91226657baSPetr Machata 92226657baSPetr Machata swp2=${NETIFS[p3]} 93226657baSPetr Machata h2=${NETIFS[p4]} 94226657baSPetr Machata 95226657baSPetr Machata h2mac=$(mac_get $h2) 96226657baSPetr Machata 97226657baSPetr Machata vrf_prepare 98226657baSPetr Machata h1_create 99226657baSPetr Machata h2_create 100226657baSPetr Machata switch_create 101226657baSPetr Machata} 102226657baSPetr Machata 103226657baSPetr Machatacleanup() 104226657baSPetr Machata{ 105226657baSPetr Machata pre_cleanup 106226657baSPetr Machata 107226657baSPetr Machata switch_destroy 108226657baSPetr Machata h2_destroy 109226657baSPetr Machata h1_destroy 110226657baSPetr Machata vrf_cleanup 111226657baSPetr Machata} 112226657baSPetr Machata 113226657baSPetr Machataping_ipv4() 114226657baSPetr Machata{ 115226657baSPetr Machata ping_test $h1 192.0.2.2 116226657baSPetr Machata} 117226657baSPetr Machata 11893e106daSPetr Machataping_ipv6() 11993e106daSPetr Machata{ 12093e106daSPetr Machata ping6_test $h1 2001:db8:1::2 12193e106daSPetr Machata} 12293e106daSPetr Machata 123226657baSPetr Machatado_test_pedit_dsfield_common() 124226657baSPetr Machata{ 125226657baSPetr Machata local pedit_locus=$1; shift 126226657baSPetr Machata local pedit_action=$1; shift 127226657baSPetr Machata local mz_flags=$1; shift 128226657baSPetr Machata 129226657baSPetr Machata RET=0 130226657baSPetr Machata 131226657baSPetr Machata # TOS 125: DSCP 31, ECN 1. Used for testing that the relevant part is 132226657baSPetr Machata # overwritten when zero is selected. 133226657baSPetr Machata $MZ $mz_flags $h1 -c 10 -d 20msec -p 100 \ 134226657baSPetr Machata -a own -b $h2mac -q -t tcp tos=0x7d,sp=54321,dp=12345 135226657baSPetr Machata 136226657baSPetr Machata local pkts 137226657baSPetr Machata pkts=$(busywait "$TC_HIT_TIMEOUT" until_counter_is ">= 10" \ 138226657baSPetr Machata tc_rule_handle_stats_get "dev $h2 ingress" 101) 1393ed97037SPetr Machata check_err $? "Expected to get 10 packets on test probe, but got $pkts." 1403ed97037SPetr Machata 1413ed97037SPetr Machata pkts=$(tc_rule_handle_stats_get "$pedit_locus" 101) 1423ed97037SPetr Machata ((pkts >= 10)) 1433ed97037SPetr Machata check_err $? "Expected to get 10 packets on pedit rule, but got $pkts." 1443ed97037SPetr Machata 145226657baSPetr Machata log_test "$pedit_locus pedit $pedit_action" 146226657baSPetr Machata} 147226657baSPetr Machata 148226657baSPetr Machatado_test_pedit_dsfield() 149226657baSPetr Machata{ 150226657baSPetr Machata local pedit_locus=$1; shift 151226657baSPetr Machata local pedit_action=$1; shift 152226657baSPetr Machata local match_prot=$1; shift 153226657baSPetr Machata local match_flower=$1; shift 154226657baSPetr Machata local mz_flags=$1; shift 155226657baSPetr Machata local saddr=$1; shift 156226657baSPetr Machata local daddr=$1; shift 157226657baSPetr Machata 158226657baSPetr Machata tc filter add $pedit_locus handle 101 pref 1 \ 159226657baSPetr Machata flower action pedit ex munge $pedit_action 160226657baSPetr Machata tc filter add dev $h2 ingress handle 101 pref 1 prot $match_prot \ 161226657baSPetr Machata flower skip_hw $match_flower action pass 162226657baSPetr Machata 163226657baSPetr Machata do_test_pedit_dsfield_common "$pedit_locus" "$pedit_action" "$mz_flags" 164226657baSPetr Machata 165226657baSPetr Machata tc filter del dev $h2 ingress pref 1 166226657baSPetr Machata tc filter del $pedit_locus pref 1 167226657baSPetr Machata} 168226657baSPetr Machata 169226657baSPetr Machatado_test_ip_dsfield() 170226657baSPetr Machata{ 171226657baSPetr Machata local locus=$1; shift 172226657baSPetr Machata local dsfield 173226657baSPetr Machata 174226657baSPetr Machata for dsfield in 0 1 2 3 128 252 253 254 255; do 175226657baSPetr Machata do_test_pedit_dsfield "$locus" \ 176226657baSPetr Machata "ip dsfield set $dsfield" \ 177226657baSPetr Machata ip "ip_tos $dsfield" \ 178226657baSPetr Machata "-A 192.0.2.1 -B 192.0.2.2" 179226657baSPetr Machata done 180226657baSPetr Machata} 181226657baSPetr Machata 182226657baSPetr Machatatest_ip_dsfield() 183226657baSPetr Machata{ 184226657baSPetr Machata do_test_ip_dsfield "dev $swp1 ingress" 185226657baSPetr Machata do_test_ip_dsfield "dev $swp2 egress" 186226657baSPetr Machata} 187226657baSPetr Machata 188226657baSPetr Machatado_test_ip_dscp() 189226657baSPetr Machata{ 190226657baSPetr Machata local locus=$1; shift 191226657baSPetr Machata local dscp 192226657baSPetr Machata 193226657baSPetr Machata for dscp in 0 1 2 3 32 61 62 63; do 194226657baSPetr Machata do_test_pedit_dsfield "$locus" \ 195226657baSPetr Machata "ip dsfield set $((dscp << 2)) retain 0xfc" \ 196226657baSPetr Machata ip "ip_tos $(((dscp << 2) | 1))" \ 197226657baSPetr Machata "-A 192.0.2.1 -B 192.0.2.2" 198226657baSPetr Machata done 199226657baSPetr Machata} 200226657baSPetr Machata 201226657baSPetr Machatatest_ip_dscp() 202226657baSPetr Machata{ 203226657baSPetr Machata do_test_ip_dscp "dev $swp1 ingress" 204226657baSPetr Machata do_test_ip_dscp "dev $swp2 egress" 205226657baSPetr Machata} 206226657baSPetr Machata 207226657baSPetr Machatado_test_ip_ecn() 208226657baSPetr Machata{ 209226657baSPetr Machata local locus=$1; shift 210226657baSPetr Machata local ecn 211226657baSPetr Machata 212226657baSPetr Machata for ecn in 0 1 2 3; do 213226657baSPetr Machata do_test_pedit_dsfield "$locus" \ 214226657baSPetr Machata "ip dsfield set $ecn retain 0x03" \ 215226657baSPetr Machata ip "ip_tos $((124 | $ecn))" \ 216226657baSPetr Machata "-A 192.0.2.1 -B 192.0.2.2" 217226657baSPetr Machata done 218226657baSPetr Machata} 219226657baSPetr Machata 220226657baSPetr Machatatest_ip_ecn() 221226657baSPetr Machata{ 222226657baSPetr Machata do_test_ip_ecn "dev $swp1 ingress" 223226657baSPetr Machata do_test_ip_ecn "dev $swp2 egress" 224226657baSPetr Machata} 225226657baSPetr Machata 226226657baSPetr Machatado_test_ip_dscp_ecn() 227226657baSPetr Machata{ 228226657baSPetr Machata local locus=$1; shift 229226657baSPetr Machata 230226657baSPetr Machata tc filter add $locus handle 101 pref 1 \ 231226657baSPetr Machata flower action pedit ex munge ip dsfield set 124 retain 0xfc \ 232226657baSPetr Machata action pedit ex munge ip dsfield set 1 retain 0x03 233226657baSPetr Machata tc filter add dev $h2 ingress handle 101 pref 1 prot ip \ 234226657baSPetr Machata flower skip_hw ip_tos 125 action pass 235226657baSPetr Machata 236226657baSPetr Machata do_test_pedit_dsfield_common "$locus" "set DSCP + set ECN" \ 237226657baSPetr Machata "-A 192.0.2.1 -B 192.0.2.2" 238226657baSPetr Machata 239226657baSPetr Machata tc filter del dev $h2 ingress pref 1 240226657baSPetr Machata tc filter del $locus pref 1 241226657baSPetr Machata} 242226657baSPetr Machata 243226657baSPetr Machatatest_ip_dscp_ecn() 244226657baSPetr Machata{ 245226657baSPetr Machata do_test_ip_dscp_ecn "dev $swp1 ingress" 246226657baSPetr Machata do_test_ip_dscp_ecn "dev $swp2 egress" 247226657baSPetr Machata} 248226657baSPetr Machata 24993e106daSPetr Machatado_test_ip6_dsfield() 25093e106daSPetr Machata{ 25193e106daSPetr Machata local locus=$1; shift 25293e106daSPetr Machata local dsfield 25393e106daSPetr Machata 25493e106daSPetr Machata for dsfield in 0 1 2 3 128 252 253 254 255; do 25593e106daSPetr Machata do_test_pedit_dsfield "$locus" \ 25693e106daSPetr Machata "ip6 traffic_class set $dsfield" \ 25793e106daSPetr Machata ipv6 "ip_tos $dsfield" \ 25893e106daSPetr Machata "-6 -A 2001:db8:1::1 -B 2001:db8:1::2" 25993e106daSPetr Machata done 26093e106daSPetr Machata} 26193e106daSPetr Machata 26293e106daSPetr Machatatest_ip6_dsfield() 26393e106daSPetr Machata{ 26493e106daSPetr Machata do_test_ip6_dsfield "dev $swp1 ingress" 26593e106daSPetr Machata do_test_ip6_dsfield "dev $swp2 egress" 26693e106daSPetr Machata} 26793e106daSPetr Machata 26893e106daSPetr Machatado_test_ip6_dscp() 26993e106daSPetr Machata{ 27093e106daSPetr Machata local locus=$1; shift 27193e106daSPetr Machata local dscp 27293e106daSPetr Machata 27393e106daSPetr Machata for dscp in 0 1 2 3 32 61 62 63; do 27493e106daSPetr Machata do_test_pedit_dsfield "$locus" \ 27593e106daSPetr Machata "ip6 traffic_class set $((dscp << 2)) retain 0xfc" \ 27693e106daSPetr Machata ipv6 "ip_tos $(((dscp << 2) | 1))" \ 27793e106daSPetr Machata "-6 -A 2001:db8:1::1 -B 2001:db8:1::2" 27893e106daSPetr Machata done 27993e106daSPetr Machata} 28093e106daSPetr Machata 28193e106daSPetr Machatatest_ip6_dscp() 28293e106daSPetr Machata{ 28393e106daSPetr Machata do_test_ip6_dscp "dev $swp1 ingress" 28493e106daSPetr Machata do_test_ip6_dscp "dev $swp2 egress" 28593e106daSPetr Machata} 28693e106daSPetr Machata 28793e106daSPetr Machatado_test_ip6_ecn() 28893e106daSPetr Machata{ 28993e106daSPetr Machata local locus=$1; shift 29093e106daSPetr Machata local ecn 29193e106daSPetr Machata 29293e106daSPetr Machata for ecn in 0 1 2 3; do 29393e106daSPetr Machata do_test_pedit_dsfield "$locus" \ 29493e106daSPetr Machata "ip6 traffic_class set $ecn retain 0x3" \ 29593e106daSPetr Machata ipv6 "ip_tos $((124 | $ecn))" \ 29693e106daSPetr Machata "-6 -A 2001:db8:1::1 -B 2001:db8:1::2" 29793e106daSPetr Machata done 29893e106daSPetr Machata} 29993e106daSPetr Machata 30093e106daSPetr Machatatest_ip6_ecn() 30193e106daSPetr Machata{ 30293e106daSPetr Machata do_test_ip6_ecn "dev $swp1 ingress" 30393e106daSPetr Machata do_test_ip6_ecn "dev $swp2 egress" 30493e106daSPetr Machata} 30593e106daSPetr Machata 306226657baSPetr Machatatrap cleanup EXIT 307226657baSPetr Machata 308226657baSPetr Machatasetup_prepare 309226657baSPetr Machatasetup_wait 310226657baSPetr Machata 311226657baSPetr Machatatests_run 312226657baSPetr Machata 313226657baSPetr Machataexit $EXIT_STATUS 314