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