drm/atomic-helper: document drm_atomic_helper_check() restrictions
[drm/drm-misc.git] / tools / testing / selftests / net / forwarding / pedit_ip.sh
blobd14efb2d23b2e409e6a40d1abb71b295af5a4b4b
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
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 a pedit action. An ingress
6 # filter installed on $h2 verifies that the packet looks like expected.
8 # +----------------------+ +----------------------+
9 # | H1 | | H2 |
10 # | + $h1 | | $h2 + |
11 # | | 192.0.2.1/28 | | 192.0.2.2/28 | |
12 # +----|-----------------+ +----------------|-----+
13 # | |
14 # +----|----------------------------------------------------------------|-----+
15 # | SW | | |
16 # | +-|----------------------------------------------------------------|-+ |
17 # | | + $swp1 BR $swp2 + | |
18 # | +--------------------------------------------------------------------+ |
19 # +---------------------------------------------------------------------------+
21 ALL_TESTS="
22 ping_ipv4
23 ping_ipv6
24 test_ip4_src
25 test_ip4_dst
26 test_ip6_src
27 test_ip6_dst
30 NUM_NETIFS=4
31 source lib.sh
32 source tc_common.sh
34 h1_create()
36 simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
39 h1_destroy()
41 simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64
44 h2_create()
46 simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/64
47 tc qdisc add dev $h2 clsact
50 h2_destroy()
52 tc qdisc del dev $h2 clsact
53 simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/64
56 switch_create()
58 ip link add name br1 up type bridge vlan_filtering 1
59 ip link set dev $swp1 master br1
60 ip link set dev $swp1 up
61 ip link set dev $swp2 master br1
62 ip link set dev $swp2 up
64 tc qdisc add dev $swp1 clsact
65 tc qdisc add dev $swp2 clsact
68 switch_destroy()
70 tc qdisc del dev $swp2 clsact
71 tc qdisc del dev $swp1 clsact
73 ip link set dev $swp2 down
74 ip link set dev $swp2 nomaster
75 ip link set dev $swp1 down
76 ip link set dev $swp1 nomaster
77 ip link del dev br1
80 setup_prepare()
82 h1=${NETIFS[p1]}
83 swp1=${NETIFS[p2]}
85 swp2=${NETIFS[p3]}
86 h2=${NETIFS[p4]}
88 h2mac=$(mac_get $h2)
90 vrf_prepare
91 h1_create
92 h2_create
93 switch_create
96 cleanup()
98 pre_cleanup
100 switch_destroy
101 h2_destroy
102 h1_destroy
103 vrf_cleanup
106 ping_ipv4()
108 ping_test $h1 192.0.2.2
111 ping_ipv6()
113 ping6_test $h1 2001:db8:1::2
116 do_test_pedit_ip()
118 local pedit_locus=$1; shift
119 local pedit_action=$1; shift
120 local match_prot=$1; shift
121 local match_flower=$1; shift
122 local mz_flags=$1; shift
124 tc filter add $pedit_locus handle 101 pref 1 \
125 flower action pedit ex munge $pedit_action
126 tc filter add dev $h2 ingress handle 101 pref 1 prot $match_prot \
127 flower skip_hw $match_flower action pass
129 RET=0
131 $MZ $mz_flags $h1 -c 10 -d 20msec -p 100 -a own -b $h2mac -q -t ip
133 local pkts
134 pkts=$(busywait "$TC_HIT_TIMEOUT" until_counter_is ">= 10" \
135 tc_rule_handle_stats_get "dev $h2 ingress" 101)
136 check_err $? "Expected to get 10 packets, but got $pkts."
138 pkts=$(tc_rule_handle_stats_get "$pedit_locus" 101)
139 ((pkts >= 10))
140 check_err $? "Expected to get 10 packets on pedit rule, but got $pkts."
142 log_test "$pedit_locus pedit $pedit_action"
144 tc filter del dev $h2 ingress pref 1
145 tc filter del $pedit_locus pref 1
148 do_test_pedit_ip6()
150 local locus=$1; shift
151 local pedit_addr=$1; shift
152 local flower_addr=$1; shift
154 do_test_pedit_ip "$locus" "$pedit_addr set 2001:db8:2::1" ipv6 \
155 "$flower_addr 2001:db8:2::1" \
156 "-6 -A 2001:db8:1::1 -B 2001:db8:1::2"
159 do_test_pedit_ip4()
161 local locus=$1; shift
162 local pedit_addr=$1; shift
163 local flower_addr=$1; shift
165 do_test_pedit_ip "$locus" "$pedit_addr set 198.51.100.1" ip \
166 "$flower_addr 198.51.100.1" \
167 "-A 192.0.2.1 -B 192.0.2.2"
170 test_ip4_src()
172 do_test_pedit_ip4 "dev $swp1 ingress" "ip src" src_ip
173 do_test_pedit_ip4 "dev $swp2 egress" "ip src" src_ip
176 test_ip4_dst()
178 do_test_pedit_ip4 "dev $swp1 ingress" "ip dst" dst_ip
179 do_test_pedit_ip4 "dev $swp2 egress" "ip dst" dst_ip
182 test_ip6_src()
184 do_test_pedit_ip6 "dev $swp1 ingress" "ip6 src" src_ip
185 do_test_pedit_ip6 "dev $swp2 egress" "ip6 src" src_ip
188 test_ip6_dst()
190 do_test_pedit_ip6 "dev $swp1 ingress" "ip6 dst" dst_ip
191 do_test_pedit_ip6 "dev $swp2 egress" "ip6 dst" dst_ip
194 trap cleanup EXIT
196 setup_prepare
197 setup_wait
199 tests_run
201 exit $EXIT_STATUS