2 # SPDX-License-Identifier: GPL-2.0
4 # This test sends traffic from H1 to H2. Either on ingress of $swp1, or on egress of $swp2, the
5 # traffic is acted upon by a pedit action. An ingress filter installed on $h2 verifies that the
6 # packet looks like expected.
8 # +----------------------+ +----------------------+
11 # | | 192.0.2.1/28 | | 192.0.2.2/28 | |
12 # +----|-----------------+ +----------------|-----+
14 # +----|----------------------------------------------------------------|-----+
16 # | +-|----------------------------------------------------------------|-+ |
17 # | | + $swp1 BR $swp2 + | |
18 # | +--------------------------------------------------------------------+ |
19 # +---------------------------------------------------------------------------+
33 : ${HIT_TIMEOUT:=2000} # ms
37 simple_if_init
$h1 192.0.2.1/28 2001:db8
:1::1/64
42 simple_if_fini
$h1 192.0.2.1/28 2001:db8
:1::1/64
47 simple_if_init
$h2 192.0.2.2/28 2001:db8
:1::2/64
48 tc qdisc add dev
$h2 clsact
53 tc qdisc del dev
$h2 clsact
54 simple_if_fini
$h2 192.0.2.2/28 2001:db8
:1::2/64
59 ip link add name br1 up
type bridge vlan_filtering
1
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
65 tc qdisc add dev
$swp1 clsact
66 tc qdisc add dev
$swp2 clsact
71 tc qdisc del dev
$swp2 clsact
72 tc qdisc del dev
$swp1 clsact
74 ip link
set dev
$swp2 nomaster
75 ip link
set dev
$swp1 nomaster
107 ping_test
$h1 192.0.2.2
112 ping6_test
$h1 2001:db8
:1::2
115 do_test_pedit_l4port_one
()
117 local pedit_locus
=$1; shift
118 local pedit_prot
=$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
123 local saddr
=$1; shift
124 local daddr
=$1; shift
126 tc filter add
$pedit_locus handle
101 pref
1 \
127 flower action pedit ex munge
$pedit_action
128 tc filter add dev
$h2 ingress handle
101 pref
1 prot
$match_prot \
129 flower skip_hw
$match_flower action pass
133 $MZ $mz_flags $h1 -c 10 -d 20msec
-p 100 \
134 -a own
-b $h2mac -q -t $pedit_prot sp
=54321,dp
=12345
137 pkts
=$
(busywait
"$TC_HIT_TIMEOUT" until_counter_is
">= 10" \
138 tc_rule_handle_stats_get
"dev $h2 ingress" 101)
139 check_err $?
"Expected to get 10 packets, but got $pkts."
141 pkts
=$
(tc_rule_handle_stats_get
"$pedit_locus" 101)
143 check_err $?
"Expected to get 10 packets on pedit rule, but got $pkts."
145 log_test
"$pedit_locus pedit $pedit_action"
147 tc filter del dev
$h2 ingress pref
1
148 tc filter del
$pedit_locus pref
1
151 do_test_pedit_l4port
()
153 local locus
=$1; shift
155 local pedit_port
=$1; shift
156 local flower_port
=$1; shift
159 for port
in 1 11111 65535; do
160 do_test_pedit_l4port_one
"$locus" "$prot" \
161 "$prot $pedit_port set $port" \
162 ip
"ip_proto $prot $flower_port $port" \
163 "-A 192.0.2.1 -B 192.0.2.2"
169 do_test_pedit_l4port
"dev $swp1 ingress" udp sport src_port
170 do_test_pedit_l4port
"dev $swp2 egress" udp sport src_port
175 do_test_pedit_l4port
"dev $swp1 ingress" udp dport dst_port
176 do_test_pedit_l4port
"dev $swp2 egress" udp dport dst_port
181 do_test_pedit_l4port
"dev $swp1 ingress" tcp sport src_port
182 do_test_pedit_l4port
"dev $swp2 egress" tcp sport src_port
187 do_test_pedit_l4port
"dev $swp1 ingress" tcp dport dst_port
188 do_test_pedit_l4port
"dev $swp2 egress" tcp dport dst_port