ktest: Add minor fixes for kernel tests
[akaros.git] / kern / kfs / ifconfig
1 #!/bin/ash
2
3 /bin/bind -b '#cons' /dev
4
5 NIC=0
6 while true; do
7         cat "#ether.$NIC" 2>&1 > /dev/null
8
9         # cat will fail if there is no device.  We can only tell by trying
10         if [ $? -ne 0 ]; then
11                 break
12         fi
13
14         # the cfg files ID machines by the MAC of their preferred NIC
15         MAC=`cat "#ether.$NIC/ether$NIC/addr"`
16         if [ -d /etc/network/local.d ]
17         then
18                 for cfg in /etc/network/local.d/*
19                 do
20                         source $cfg
21                 done
22         fi
23
24         # cfg files set $me when they have a match
25         if [ "x$me" != "x" ]; then
26                 break;
27         fi
28
29         let NIC=$NIC+1
30 done
31
32 # Default back to ether.0 when we didn't find anything
33 if [ "x$me" == "x" ]; then
34         NIC=0
35 fi
36
37 MAC=`cat "#ether.$NIC/ether$NIC/addr"`
38
39 export cputype=amd64
40 export objtype=$cputype
41 export service=cpu
42 export authid=bootes
43 export rootdir=/root
44 export rootspec=''
45 export rootsrv=boot
46
47 if [ -d /etc/network/local.d ]
48 then
49         for cfg in /etc/network/local.d/*
50         do
51                 source $cfg
52         done
53 fi
54
55 #
56 # Set up the initial namespace for starting networking.
57 #
58 /bin/bind -b '#random' /dev
59 /bin/bind -a '#capability' /dev
60 /bin/bind -a '#sd' /dev
61 #/bin/bind '#d' /fd
62 #/bin/bind -c '#e' /env
63 /bin/bind -b '#proc' /proc
64 /bin/bind -b '#srv' /srv
65
66 #
67 # Configure the network mount point.
68 #
69 /bin/bind -a '#ip' /net
70 /bin/bind -a '#ether'.$NIC /net
71
72 # Need to set /dev/sysname before ipconfig.  ipconfig will grab this and put it
73 # in ndb.
74 if [ "x$HOST" != "x" ]
75 then
76         echo "$HOST" > /dev/sysname
77 fi
78
79 if [ -x /bin/ipconfig ]
80 then
81         if [ -n "$me" ]
82         then
83                 ipconfig -g $route ether /net/ether$NIC $me $mask
84         else
85                 # No explicit configuration; use DHCP.
86                 daemonize /bin/ipconfig -S ether /net/ether$NIC
87         fi
88         ipconfig -P loopback /dev/null 127.0.0.1
89 else
90         if [ ! -n "$me" ]
91         then
92                 # By default, configure for QEMU.
93                 # We only use qemu's setting when we don't have ipconfig so that we can
94                 # test ipconfig + DHCP with qemu.
95                 me='10.0.2.15'
96                 mask='255.255.255.0'
97                 remote='10.0.2.0'
98                 route='10.0.2.2'
99                 dns='10.0.2.3'
100         fi
101         #
102         # Get an instance of an IP stack and bind ether$NIC to it.
103         # The kernel sets errno but 'echo' doesn't return any sort of
104         # error indicator.  Our busybox hacks doesn't know any better
105         # and will think it was an error so direct stderr to /dev/null.
106         #
107         i=`cat /net/ipifc/clone`
108         echo "bind ether /net/ether$NIC" >/net/ipifc/$i/ctl 2>/dev/null
109         #
110         # Configure the stack.
111         #
112         echo "add $me $mask $remote" > /net/ipifc/$i/ctl
113         echo "add 0 0 $route" > /net/iproute
114         echo "I am $me, default route $route"
115         #
116         # Configure the loopback interface.
117         #
118         i=`cat /net/ipifc/clone`
119         echo 'bind loopback /dev/null' > /net/ipifc/$i/ctl
120         echo 'add 127.0.0.1 255.0.0.0 127.0.0.0' > /net/ipifc/$i/ctl
121 fi
122
123 ######### DNS Config #############
124
125 # If we used some form of static configuration, /net/ndb doesn't know about our
126 # DNS server.  This assumes the last contents of ndb is the IP block
127 if [ -n "$me" ]
128 then
129         echo -e "\tdns=$dns" >> /net/ndb
130 fi
131 # Either way, we have DNS in ndb now, but some apps want it in resolv.conf
132 DNS=`grep "dns=" /net/ndb | cut -f 2 -d'='`
133 echo "nameserver $DNS" >> /etc/resolv.conf
134 # And we may have some additional search paths for resolv.conf
135 if [ -n "$me" ]
136 then
137         echo "search $search" >> /etc/resolv.conf
138 fi
139 # We also can provide an etc hosts file for loopback
140 echo "127.0.0.1 localhost" >> /etc/hosts
141 # You can set HOST and then you may set FQDN, and we'll add it to etc hosts
142 if [ "x$HOST" != "x" ]
143 then
144         IP=`cat /net/ipifc/0/local | cut -f 1 -d ' '`
145         echo "$IP $FQDN $HOST" >> /etc/hosts
146 fi
147
148 daemonize /bin/cs -S
149 mount -a '#srv/cs' /net
150
151 # This is noisy, so it is off by default.
152 #echo debug > /net/cs
153
154 /bin/bind -a '#kprof' /prof
155
156 echo 'ifconfig complete'