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