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