xref: /aosp_15_r20/external/toybox/tests/ifconfig.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker# Copyright 2014 Cynthia Rempel <[email protected]>
3*cf5a6c84SAndroid Build Coastguard Worker#
4*cf5a6c84SAndroid Build Coastguard Worker# Brief: Some cursery coverage tests of ifconfig...
5*cf5a6c84SAndroid Build Coastguard Worker# Note: requires permissions to run modprobe and all ifconfig options
6*cf5a6c84SAndroid Build Coastguard Worker# Commands used: grep, grep -i, ip link, ip tuntap, wc -l
7*cf5a6c84SAndroid Build Coastguard Worker#
8*cf5a6c84SAndroid Build Coastguard Worker# Possible improvements:
9*cf5a6c84SAndroid Build Coastguard Worker# 1. Verify the dummy interface actually has the modified characteristics
10*cf5a6c84SAndroid Build Coastguard Worker#    instead of relying on ifconfig output
11*cf5a6c84SAndroid Build Coastguard Worker# 2. Introduce more error cases, to verify ifconfig fails gracefully
12*cf5a6c84SAndroid Build Coastguard Worker# 3. Do more complex calls to ifconfig, while mixing the order of the
13*cf5a6c84SAndroid Build Coastguard Worker#    arguments
14*cf5a6c84SAndroid Build Coastguard Worker# 4. Cover more ifconfig options:
15*cf5a6c84SAndroid Build Coastguard Worker#    hw ether|infiniband ADDRESS - set LAN hardware address (AA:BB:CC...)
16*cf5a6c84SAndroid Build Coastguard Worker#    txqueuelen LEN - number of buffered packets before output blocks
17*cf5a6c84SAndroid Build Coastguard Worker#    Obsolete fields included for historical purposes:
18*cf5a6c84SAndroid Build Coastguard Worker#    irq|io_addr|mem_start ADDR - micromanage obsolete hardware
19*cf5a6c84SAndroid Build Coastguard Worker#    outfill|keepalive INTEGER - SLIP analog dialup line quality monitoring
20*cf5a6c84SAndroid Build Coastguard Worker#    metric INTEGER - added to Linux 0.9.10 with comment "never used", still true
21*cf5a6c84SAndroid Build Coastguard Worker
22*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
23*cf5a6c84SAndroid Build Coastguard Worker
24*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
25*cf5a6c84SAndroid Build Coastguard Worker
26*cf5a6c84SAndroid Build Coastguard Workerif [ "$(id -u)" -ne 0 ]
27*cf5a6c84SAndroid Build Coastguard Workerthen
28*cf5a6c84SAndroid Build Coastguard Worker  echo "$SHOWSKIP: ifconfig (not root)"
29*cf5a6c84SAndroid Build Coastguard Worker  return 2>/dev/null
30*cf5a6c84SAndroid Build Coastguard Worker  exit
31*cf5a6c84SAndroid Build Coastguard Workerfi
32*cf5a6c84SAndroid Build Coastguard Worker
33*cf5a6c84SAndroid Build Coastguard Worker# Add a dummy interface to test with
34*cf5a6c84SAndroid Build Coastguard Workermodprobe dummy >/dev/null 2>&1
35*cf5a6c84SAndroid Build Coastguard Workerif ! ifconfig dummy0 up 2>/dev/null
36*cf5a6c84SAndroid Build Coastguard Workerthen
37*cf5a6c84SAndroid Build Coastguard Worker  echo "$SHOWSKIP: ifconfig dummy0 up failed"
38*cf5a6c84SAndroid Build Coastguard Worker  return 2>/dev/null
39*cf5a6c84SAndroid Build Coastguard Worker  exit
40*cf5a6c84SAndroid Build Coastguard Workerfi
41*cf5a6c84SAndroid Build Coastguard Worker
42*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig, no lines with dummy0 are displayed
43*cf5a6c84SAndroid Build Coastguard Workertesting "Disable the dummy0 interface" \
44*cf5a6c84SAndroid Build Coastguard Worker  "ifconfig dummy0 down && ifconfig | grep dummy | wc -l" "0\n" "" ""
45*cf5a6c84SAndroid Build Coastguard Worker
46*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig, one line with dummy0 is displayed
47*cf5a6c84SAndroid Build Coastguard Workertesting "Enable the dummy0 interface" \
48*cf5a6c84SAndroid Build Coastguard Worker  "ifconfig dummy0 up && ifconfig dummy0 | grep dummy | wc -l" "1\n" "" ""
49*cf5a6c84SAndroid Build Coastguard Worker
50*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, one line displays the ip
51*cf5a6c84SAndroid Build Coastguard Worker#                   address selected
52*cf5a6c84SAndroid Build Coastguard Workertesting "Set the ip address of the dummy0 interface" \
53*cf5a6c84SAndroid Build Coastguard Worker  "ifconfig dummy0 10.240.240.240 && ifconfig dummy0 | grep 10\.240\.240\.240 | wc -l" \
54*cf5a6c84SAndroid Build Coastguard Worker  "1\n" "" ""
55*cf5a6c84SAndroid Build Coastguard Worker
56*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, one line displays the
57*cf5a6c84SAndroid Build Coastguard Worker#                   netmask selected
58*cf5a6c84SAndroid Build Coastguard Workertesting "Change the netmask to the interface" \
59*cf5a6c84SAndroid Build Coastguard Worker  "ifconfig dummy0 netmask 255.255.240.0 && ifconfig dummy0 | grep 255\.255\.240\.0 | wc -l" \
60*cf5a6c84SAndroid Build Coastguard Worker  "1\n" "" ""
61*cf5a6c84SAndroid Build Coastguard Worker
62*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, one line displays the
63*cf5a6c84SAndroid Build Coastguard Worker#                   broadcast address selected
64*cf5a6c84SAndroid Build Coastguard Workertesting "Change the broadcast address to the interface" \
65*cf5a6c84SAndroid Build Coastguard Worker  "ifconfig dummy0 broadcast 10.240.240.255 && ifconfig dummy0 | grep 10\.240\.240\.255 | wc -l" \
66*cf5a6c84SAndroid Build Coastguard Worker  "1\n" "" ""
67*cf5a6c84SAndroid Build Coastguard Worker
68*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Revert to the default ip address
69*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there are no lines
70*cf5a6c84SAndroid Build Coastguard Worker#                   displaying the ip address previously selected
71*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 default" \
72*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 default && ifconfig dummy0 | grep 10\.240\.240\.240 | wc -l" \
73*cf5a6c84SAndroid Build Coastguard Worker"0\n" "" ""
74*cf5a6c84SAndroid Build Coastguard Worker
75*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Change the Maximum transmission unit (MTU) of the interface
76*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
77*cf5a6c84SAndroid Build Coastguard Worker#                   selected MTU
78*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 mtu 1269" \
79*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 mtu 1269 && ifconfig dummy0 | grep MTU:1269 | wc -l" \
80*cf5a6c84SAndroid Build Coastguard Worker"1\n" "" ""
81*cf5a6c84SAndroid Build Coastguard Worker
82*cf5a6c84SAndroid Build Coastguard Worker# Test Description: ifconfig add for IPv6 fails with an mtu too small for IPv6.
83*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: Failure. No check for the exact error because old kernels
84*cf5a6c84SAndroid Build Coastguard Worker#                   used ENOBUFS but 5.4 uses EINVAL.
85*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 add ::2 -- too small mtu" \
86*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 add ::2 2>/dev/null || echo expected" "expected\n" "" ""
87*cf5a6c84SAndroid Build Coastguard Worker
88*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Change the Maximum transmission unit (MTU) of the interface
89*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
90*cf5a6c84SAndroid Build Coastguard Worker#                   selected MTU
91*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 mtu 2000" \
92*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 mtu 2000 && ifconfig dummy0 | grep MTU:2000 | wc -l" \
93*cf5a6c84SAndroid Build Coastguard Worker"1\n" "" ""
94*cf5a6c84SAndroid Build Coastguard Worker
95*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Verify ifconfig add succeeds with a larger mtu
96*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: after calling ifconfig dummy0, there is one line with the
97*cf5a6c84SAndroid Build Coastguard Worker#                   selected ip address
98*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 add ::2" \
99*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 add ::2/126 && ifconfig dummy0 | grep \:\:2/126 | wc -l" \
100*cf5a6c84SAndroid Build Coastguard Worker"1\n" "" ""
101*cf5a6c84SAndroid Build Coastguard Worker
102*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Verify ifconfig del removes the selected ip6 address
103*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: after calling ifconfig dummy0, there are no lines with the
104*cf5a6c84SAndroid Build Coastguard Worker#                   selected ip address
105*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 del ::2" \
106*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 del ::2/126 && ifconfig dummy0 | grep \:\:2/126 | wc -l" \
107*cf5a6c84SAndroid Build Coastguard Worker"0\n" "" ""
108*cf5a6c84SAndroid Build Coastguard Worker
109*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Remove the noarp flag and bring the interface down in
110*cf5a6c84SAndroid Build Coastguard Worker#                   preparation for the next test
111*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there are no lines with the
112*cf5a6c84SAndroid Build Coastguard Worker#                   NOARP flag
113*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 arp down" \
114*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 arp down && ifconfig dummy0 | grep -i NOARP | wc -l" \
115*cf5a6c84SAndroid Build Coastguard Worker"0\n" "" ""
116*cf5a6c84SAndroid Build Coastguard Worker
117*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Call the pointopoint option with no argument
118*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
119*cf5a6c84SAndroid Build Coastguard Worker#                   NOARP and UP flags
120*cf5a6c84SAndroid Build Coastguard Worker# TODO: http://lists.landley.net/pipermail/toybox-landley.net/2014-November/003795.html
121*cf5a6c84SAndroid Build Coastguard Worker#testing "dummy0 pointopoint" \
122*cf5a6c84SAndroid Build Coastguard Worker#"ifconfig dummy0 pointopoint && ifconfig dummy0 | grep -i NOARP | grep -i UP | wc -l" \
123*cf5a6c84SAndroid Build Coastguard Worker#"1\n" "" ""
124*cf5a6c84SAndroid Build Coastguard Worker
125*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Test the pointopoint option and set the ipaddress
126*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
127*cf5a6c84SAndroid Build Coastguard Worker#                   word inet and the selected ip address
128*cf5a6c84SAndroid Build Coastguard Worker# TODO: http://lists.landley.net/pipermail/toybox-landley.net/2014-November/003795.html
129*cf5a6c84SAndroid Build Coastguard Worker#testing "dummy0 pointopoint 127.0.0.2" \
130*cf5a6c84SAndroid Build Coastguard Worker#"ifconfig dummy0 pointopoint 127.0.0.2 && ifconfig dummy0 | grep -i inet | grep -i 127\.0\.0\.2 | wc -l" \
131*cf5a6c84SAndroid Build Coastguard Worker#"1\n" "" ""
132*cf5a6c84SAndroid Build Coastguard Worker
133*cf5a6c84SAndroid Build Coastguard Worker####### Flags you can set on an interface (or -remove by prefixing with -): ###############
134*cf5a6c84SAndroid Build Coastguard Worker
135*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Enable allmulti mode on the interface
136*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
137*cf5a6c84SAndroid Build Coastguard Worker#                   allmulti flag
138*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 allmulti" \
139*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 allmulti && ifconfig dummy0 | grep -i allmulti | wc -l" "1\n" \
140*cf5a6c84SAndroid Build Coastguard Worker"" ""
141*cf5a6c84SAndroid Build Coastguard Worker
142*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Disable multicast mode the interface
143*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there are no lines with the
144*cf5a6c84SAndroid Build Coastguard Worker#                   allmulti flag
145*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 -allmulti" \
146*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 -allmulti && ifconfig dummy0 | grep -i allmulti | wc -l" "0\n" \
147*cf5a6c84SAndroid Build Coastguard Worker"" ""
148*cf5a6c84SAndroid Build Coastguard Worker
149*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Disable NOARP mode on the interface
150*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there are no lines with the
151*cf5a6c84SAndroid Build Coastguard Worker#                   NOARP flag
152*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 arp" \
153*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 arp && ifconfig dummy0 | grep -i NOARP | wc -l" "0\n" \
154*cf5a6c84SAndroid Build Coastguard Worker"" ""
155*cf5a6c84SAndroid Build Coastguard Worker
156*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Enable NOARP mode on the interface
157*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
158*cf5a6c84SAndroid Build Coastguard Worker#                   NOARP flag
159*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 -arp" \
160*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 -arp && ifconfig dummy0 | grep -i NOARP | wc -l" "1\n" \
161*cf5a6c84SAndroid Build Coastguard Worker"" ""
162*cf5a6c84SAndroid Build Coastguard Worker
163*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Enable multicast mode on the interface
164*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
165*cf5a6c84SAndroid Build Coastguard Worker#                   multicast flag
166*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 multicast" \
167*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 multicast && ifconfig dummy0 | grep -i multicast | wc -l" \
168*cf5a6c84SAndroid Build Coastguard Worker"1\n" "" ""
169*cf5a6c84SAndroid Build Coastguard Worker
170*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Disable multicast mode the interface
171*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there are no lines with the
172*cf5a6c84SAndroid Build Coastguard Worker#                   multicast flag
173*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 -multicast" \
174*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 -multicast && ifconfig dummy0 | grep -i multicast | wc -l" \
175*cf5a6c84SAndroid Build Coastguard Worker"0\n" "" ""
176*cf5a6c84SAndroid Build Coastguard Worker
177*cf5a6c84SAndroid Build Coastguard Worker# Test Description: Enable promiscuous mode the interface
178*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there is one line with the
179*cf5a6c84SAndroid Build Coastguard Worker#                   promisc flag
180*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 promisc" \
181*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 promisc && ifconfig dummy0 | grep -i promisc | wc -l" "1\n" \
182*cf5a6c84SAndroid Build Coastguard Worker"" ""
183*cf5a6c84SAndroid Build Coastguard Worker
184*cf5a6c84SAndroid Build Coastguard Worker# Disable promiscuous mode the interface
185*cf5a6c84SAndroid Build Coastguard Worker# Results Expected: After calling ifconfig dummy0, there are no lines with the
186*cf5a6c84SAndroid Build Coastguard Worker#                   promisc flag
187*cf5a6c84SAndroid Build Coastguard Workertesting "dummy0 -promisc" \
188*cf5a6c84SAndroid Build Coastguard Worker"ifconfig dummy0 -promisc && ifconfig dummy0 | grep -i promisc | wc -l" "0\n" \
189*cf5a6c84SAndroid Build Coastguard Worker"" ""
190*cf5a6c84SAndroid Build Coastguard Worker
191*cf5a6c84SAndroid Build Coastguard Worker# Disable the dummy interface
192*cf5a6c84SAndroid Build Coastguard Workerifconfig dummy0 down
193