Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4ALL_TESTS="match_indev_egress_test"
5NUM_NETIFS=6
6source tc_common.sh
7source lib.sh
8
9h1_create()
10{
11 simple_if_init $h1 192.0.1.1/24
12
13 ip route add 192.0.2.0/24 vrf v$h1 nexthop via 192.0.1.2
14 ip route add 192.0.3.0/24 vrf v$h1 nexthop via 192.0.1.2
15}
16
17h1_destroy()
18{
19 ip route del 192.0.3.0/24 vrf v$h1
20 ip route del 192.0.2.0/24 vrf v$h1
21
22 simple_if_fini $h1 192.0.1.1/24
23}
24
25h2_create()
26{
27 simple_if_init $h2 192.0.2.1/24
28
29 ip route add 192.0.1.0/24 vrf v$h2 nexthop via 192.0.2.2
30 ip route add 192.0.3.0/24 vrf v$h2 nexthop via 192.0.2.2
31}
32
33h2_destroy()
34{
35 ip route del 192.0.3.0/24 vrf v$h2
36 ip route del 192.0.1.0/24 vrf v$h2
37
38 simple_if_fini $h2 192.0.2.1/24
39}
40
41h3_create()
42{
43 simple_if_init $h3 192.0.3.1/24
44
45 ip route add 192.0.1.0/24 vrf v$h3 nexthop via 192.0.3.2
46 ip route add 192.0.2.0/24 vrf v$h3 nexthop via 192.0.3.2
47}
48
49h3_destroy()
50{
51 ip route del 192.0.2.0/24 vrf v$h3
52 ip route del 192.0.1.0/24 vrf v$h3
53
54 simple_if_fini $h3 192.0.3.1/24
55}
56
57
58router_create()
59{
60 ip link set dev $rp1 up
61 ip link set dev $rp2 up
62 ip link set dev $rp3 up
63
64 tc qdisc add dev $rp3 clsact
65
66 ip address add 192.0.1.2/24 dev $rp1
67 ip address add 192.0.2.2/24 dev $rp2
68 ip address add 192.0.3.2/24 dev $rp3
69}
70
71router_destroy()
72{
73 ip address del 192.0.3.2/24 dev $rp3
74 ip address del 192.0.2.2/24 dev $rp2
75 ip address del 192.0.1.2/24 dev $rp1
76
77 tc qdisc del dev $rp3 clsact
78
79 ip link set dev $rp3 down
80 ip link set dev $rp2 down
81 ip link set dev $rp1 down
82}
83
84match_indev_egress_test()
85{
86 RET=0
87
88 tc filter add dev $rp3 egress protocol ip pref 1 handle 101 flower \
89 $tcflags indev $rp1 dst_ip 192.0.3.1 action drop
90 tc filter add dev $rp3 egress protocol ip pref 2 handle 102 flower \
91 $tcflags indev $rp2 dst_ip 192.0.3.1 action drop
92
93 $MZ $h1 -c 1 -p 64 -a $h1mac -b $rp1mac -A 192.0.1.1 -B 192.0.3.1 \
94 -t ip -q
95
96 tc_check_packets "dev $rp3 egress" 102 1
97 check_fail $? "Matched on a wrong filter"
98
99 tc_check_packets "dev $rp3 egress" 101 1
100 check_err $? "Did not match on correct filter"
101
102 $MZ $h2 -c 1 -p 64 -a $h2mac -b $rp2mac -A 192.0.2.1 -B 192.0.3.1 \
103 -t ip -q
104
105 tc_check_packets "dev $rp3 egress" 101 2
106 check_fail $? "Matched on a wrong filter"
107
108 tc_check_packets "dev $rp3 egress" 102 1
109 check_err $? "Did not match on correct filter"
110
111 tc filter del dev $rp3 egress protocol ip pref 2 handle 102 flower
112 tc filter del dev $rp3 egress protocol ip pref 1 handle 101 flower
113
114 log_test "indev egress match ($tcflags)"
115}
116
117setup_prepare()
118{
119 h1=${NETIFS[p1]}
120 rp1=${NETIFS[p2]}
121
122 h2=${NETIFS[p3]}
123 rp2=${NETIFS[p4]}
124
125 h3=${NETIFS[p5]}
126 rp3=${NETIFS[p6]}
127
128 h1mac=$(mac_get $h1)
129 rp1mac=$(mac_get $rp1)
130 h2mac=$(mac_get $h2)
131 rp2mac=$(mac_get $rp2)
132
133 vrf_prepare
134
135 h1_create
136 h2_create
137 h3_create
138
139 router_create
140
141 forwarding_enable
142}
143
144cleanup()
145{
146 pre_cleanup
147
148 forwarding_restore
149
150 router_destroy
151
152 h3_destroy
153 h2_destroy
154 h1_destroy
155
156 vrf_cleanup
157}
158
159trap cleanup EXIT
160
161setup_prepare
162setup_wait
163
164tc_offload_check
165if [[ $? -ne 0 ]]; then
166 log_info "Could not test offloaded functionality"
167else
168 tcflags="skip_sw"
169 tests_run
170fi
171
172exit $EXIT_STATUS