3 # This test is for checking rtnetlink callpaths, and get as much coverage as possible.
10 # set global exit status, but never reset nonzero one.
13 if [ $ret -eq 0 ]; then
18 # same but inverted -- used when command must fail for test to pass
28 ip link add name
"$devdummy" type dummy
30 ip link
set "$devdummy" up
36 ip link del dev
"$devdummy"
40 # add a bridge with vlans on top
44 vlandev
="testbr-vlan1"
47 ip link add name
"$devbr" type bridge
50 ip link
set dev
"$devdummy" master
"$devbr"
53 ip link
set "$devbr" up
56 ip link add link
"$devbr" name
"$vlandev" type vlan id
1
58 ip addr add dev
"$vlandev" 10.200.7.23/30
60 ip
-6 addr add dev
"$vlandev" dead
:42::1234/64
62 ip
-d link
> /dev
/null
64 ip r s t all
> /dev
/null
66 ip
-6 addr del dev
"$vlandev" dead
:42::1234/64
69 ip link del dev
"$vlandev"
71 ip link del dev
"$devbr"
74 if [ $ret -ne 0 ];then
75 echo "FAIL: bridge setup"
78 echo "PASS: bridge setup"
89 ip tunnel add
$gredev mode gre remote
$rem local $loc ttl
1
91 ip link
set $gredev up
93 ip addr add
10.23.7.10 dev
$gredev
95 ip route add
10.23.8.0/30 dev
$gredev
97 ip addr add dev
"$devdummy" 10.23.7.11/24
103 ip addr del dev
"$devdummy" 10.23.7.11/24
109 if [ $ret -ne 0 ];then
110 echo "FAIL: gre tunnel endpoint"
113 echo "PASS: gre tunnel endpoint"
116 # tc uses rtnetlink too, for full tc testing
117 # please see tools/testing/selftests/tc-testing.
123 tc qdisc add dev
"$dev" root handle
1: htb
125 tc class add dev
"$dev" parent
1: classid
1:10 htb rate
1mbit
127 tc filter add dev
"$dev" parent
1:0 prio
5 handle ffe
: protocol ip u32 divisor
256
129 tc filter add dev
"$dev" parent
1:0 prio
5 handle ffd
: protocol ip u32 divisor
256
131 tc filter add dev
"$dev" parent
1:0 prio
5 handle ffc
: protocol ip u32 divisor
256
133 tc filter add dev
"$dev" protocol ip parent
1: prio
5 handle ffe
:2:3 u32 ht ffe
:2: match ip src
10.0.0.3 flowid
1:10
135 tc filter add dev
"$dev" protocol ip parent
1: prio
5 handle ffe
:2:2 u32 ht ffe
:2: match ip src
10.0.0.2 flowid
1:10
137 tc filter show dev
"$dev" parent
1:0 > /dev
/null
139 tc filter del dev
"$dev" protocol ip parent
1: prio
5 handle ffe
:2:3 u32
141 tc filter show dev
"$dev" parent
1:0 > /dev
/null
143 tc qdisc del dev
"$dev" root handle
1: htb
146 if [ $ret -ne 0 ];then
147 echo "FAIL: tc htb hierarchy"
150 echo "PASS: tc htb hierarchy"
154 kci_test_polrouting
()
157 ip rule add fwmark
1 lookup
100
159 ip route add
local 0.0.0.0/0 dev lo table
100
161 ip r s t all
> /dev
/null
163 ip rule del fwmark
1 lookup
100
165 ip route del
local 0.0.0.0/0 dev lo table
100
168 if [ $ret -ne 0 ];then
169 echo "FAIL: policy route test"
172 echo "PASS: policy routing"
179 ip route get
127.0.0.1 > /dev
/null
181 ip route get
127.0.0.1 dev
"$devdummy" > /dev
/null
183 ip route get
::1 > /dev
/null
185 ip route get fe80
::1 dev
"$devdummy" > /dev
/null
187 ip route get
127.0.0.1 from
127.0.0.1 oif lo tos
0x1 mark
0x1 > /dev
/null
189 ip route get
::1 from
::1 iif lo oif lo tos
0x1 mark
0x1 > /dev
/null
191 ip addr add dev
"$devdummy" 10.23.7.11/24
193 ip route get
10.23.7.11 from
10.23.7.12 iif
"$devdummy" > /dev
/null
195 ip addr del dev
"$devdummy" 10.23.7.11/24
198 if [ $ret -ne 0 ];then
199 echo "FAIL: route get"
203 echo "PASS: route get"
210 ip addrlabel add prefix dead
::/64 dev lo label
1
213 ip addrlabel list |
grep -q "prefix dead::/64 dev lo label 1"
216 ip addrlabel del prefix dead
::/64 dev lo label
1 2> /dev
/null
219 ip addrlabel add prefix dead
::/64 label
1 2> /dev
/null
222 ip addrlabel del prefix dead
::/64 label
1 2> /dev
/null
225 # concurrent add/delete
226 for i
in $
(seq 1 1000); do
227 ip addrlabel add prefix
1c3
::/64 label
12345 2>/dev
/null
230 for i
in $
(seq 1 1000); do
231 ip addrlabel del prefix
1c3
::/64 label
12345 2>/dev
/null
236 ip addrlabel del prefix
1c3
::/64 label
12345 2>/dev
/null
238 if [ $ret -ne 0 ];then
239 echo "FAIL: ipv6 addrlabel"
243 echo "PASS: ipv6 addrlabel"
250 syspathname
="/sys/class/net/$devdummy/ifalias"
252 ip link
set dev
"$devdummy" alias "$namewant"
255 if [ $ret -ne 0 ]; then
256 echo "FAIL: cannot set interface alias of $devdummy to $namewant"
260 ip link show
"$devdummy" |
grep -q "alias $namewant"
263 if [ -r "$syspathname" ] ; then
264 read namehave
< "$syspathname"
265 if [ "$namewant" != "$namehave" ]; then
266 echo "FAIL: did set ifalias $namewant but got $namehave"
271 echo "$namewant" > "$syspathname"
272 ip link show
"$devdummy" |
grep -q "alias $namewant"
275 # sysfs interface allows to delete alias again
276 echo "" > "$syspathname"
278 ip link show
"$devdummy" |
grep -q "alias $namewant"
281 # re-add the alias -- kernel should free mem when dummy dev is removed
282 ip link
set dev
"$devdummy" alias "$namewant"
286 if [ $ret -ne 0 ]; then
287 echo "FAIL: set interface alias $devdummy to $namewant"
291 echo "PASS: set ifalias $namewant for $devdummy"
297 if [ $ret -ne 0 ];then
298 echo "FAIL: cannot add dummy interface"
313 #check for needed privileges
314 if [ "$(id -u)" -ne 0 ];then
315 echo "SKIP: Need root privileges"
320 $x -Version 2>/dev
/null
>/dev
/null
322 echo "SKIP: Could not run test without the $x tool"