| #!/bin/ash | 
 |  | 
 | /bin/bind -b '#cons' /dev | 
 |  | 
 | NIC=0 | 
 | while true; do | 
 | 	cat "#ether.$NIC" 2>&1 > /dev/null | 
 |  | 
 | 	# cat will fail if there is no device.  We can only tell by trying | 
 | 	if [ $? -ne 0 ]; then | 
 | 		break | 
 | 	fi | 
 |  | 
 | 	# the cfg files ID machines by the MAC of their preferred NIC | 
 | 	MAC=`cat "#ether.$NIC/ether$NIC/addr"` | 
 | 	if [ -d /etc/network/local.d ] | 
 | 	then | 
 | 		for cfg in /etc/network/local.d/* | 
 | 		do | 
 | 			source $cfg | 
 | 		done | 
 | 	fi | 
 |  | 
 | 	# cfg files set $me when they have a match | 
 | 	if [ "x$me" != "x" ]; then | 
 | 		break; | 
 | 	fi | 
 |  | 
 | 	let NIC=$NIC+1 | 
 | done | 
 |  | 
 | # Default back to ether.0 when we didn't find anything | 
 | if [ "x$me" == "x" ]; then | 
 | 	NIC=0 | 
 | fi | 
 |  | 
 | MAC=`cat "#ether.$NIC/ether$NIC/addr"` | 
 |  | 
 | export cputype=amd64 | 
 | export objtype=$cputype | 
 | export service=cpu | 
 | export authid=bootes | 
 | export rootdir=/root | 
 | export rootspec='' | 
 | export rootsrv=boot | 
 |  | 
 | if [ -d /etc/network/local.d ] | 
 | then | 
 | 	for cfg in /etc/network/local.d/* | 
 | 	do | 
 | 		source $cfg | 
 | 	done | 
 | fi | 
 |  | 
 | # | 
 | # Set up the initial namespace for starting networking. | 
 | # | 
 | /bin/bind -b '#random' /dev | 
 | /bin/bind -a '#capability' /dev | 
 | /bin/bind -a '#sd' /dev | 
 | #/bin/bind '#d' /fd | 
 | #/bin/bind -c '#e' /env | 
 | /bin/bind -b '#proc' /proc | 
 | /bin/bind -b '#srv' /srv | 
 |  | 
 | # | 
 | # Configure the network mount point. | 
 | # | 
 | /bin/bind -a '#ip' /net | 
 | /bin/bind -a '#ether'.$NIC /net | 
 |  | 
 | # Need to set /dev/sysname before ipconfig.  ipconfig will grab this and put it | 
 | # in ndb. | 
 | if [ "x$HOST" != "x" ] | 
 | then | 
 | 	echo "$HOST" > /dev/sysname | 
 | fi | 
 |  | 
 | if [ -x /bin/ipconfig ] | 
 | then | 
 | 	if [ -n "$me" ] | 
 | 	then | 
 | 		ipconfig -g $route ether /net/ether$NIC $me $mask | 
 | 	else | 
 | 		# No explicit configuration; use DHCP. | 
 | 		daemonize /bin/ipconfig -S ether /net/ether$NIC | 
 | 	fi | 
 | 	ipconfig -P loopback /dev/null 127.0.0.1 | 
 | else | 
 | 	if [ ! -n "$me" ] | 
 | 	then | 
 | 		# By default, configure for QEMU. | 
 | 		# We only use qemu's setting when we don't have ipconfig so that we can | 
 | 		# test ipconfig + DHCP with qemu. | 
 | 		me='10.0.2.15' | 
 | 		mask='255.255.255.0' | 
 | 		remote='10.0.2.0' | 
 | 		route='10.0.2.2' | 
 | 		dns='10.0.2.3' | 
 | 	fi | 
 | 	# | 
 | 	# Get an instance of an IP stack and bind ether$NIC to it. | 
 | 	# The kernel sets errno but 'echo' doesn't return any sort of | 
 | 	# error indicator.  Our busybox hacks doesn't know any better | 
 | 	# and will think it was an error so direct stderr to /dev/null. | 
 | 	# | 
 | 	i=`cat /net/ipifc/clone` | 
 | 	echo "bind ether /net/ether$NIC" >/net/ipifc/$i/ctl 2>/dev/null | 
 | 	# | 
 | 	# Configure the stack. | 
 | 	# | 
 | 	echo "add $me $mask $remote" > /net/ipifc/$i/ctl | 
 | 	echo "add 0 0 $route" > /net/iproute | 
 | 	echo "I am $me, default route $route" | 
 | 	# | 
 | 	# Configure the loopback interface. | 
 | 	# | 
 | 	i=`cat /net/ipifc/clone` | 
 | 	echo 'bind loopback /dev/null' > /net/ipifc/$i/ctl | 
 | 	echo 'add 127.0.0.1 255.0.0.0 127.0.0.0' > /net/ipifc/$i/ctl | 
 | fi | 
 |  | 
 | ######### DNS Config ############# | 
 |  | 
 | # If we used some form of static configuration, /net/ndb doesn't know about our | 
 | # DNS server.  This assumes the last contents of ndb is the IP block | 
 | if [ -n "$me" ] | 
 | then | 
 | 	echo -e "\tdns=$dns" >> /net/ndb | 
 | fi | 
 | # Either way, we have DNS in ndb now, but some apps want it in resolv.conf | 
 | DNS=`grep "dns=" /net/ndb | cut -f 2 -d'='` | 
 | echo "nameserver $DNS" >> /etc/resolv.conf | 
 | # And we may have some additional search paths for resolv.conf | 
 | if [ -n "$me" ] | 
 | then | 
 | 	echo "search $search" >> /etc/resolv.conf | 
 | fi | 
 | # We also can provide an etc hosts file for loopback | 
 | echo "127.0.0.1 localhost" >> /etc/hosts | 
 | # You can set HOST and then you may set FQDN, and we'll add it to etc hosts | 
 | if [ "x$HOST" != "x" ] | 
 | then | 
 | 	IP=`cat /net/ipifc/0/local | cut -f 1 -d ' '` | 
 | 	echo "$IP $FQDN $HOST" >> /etc/hosts | 
 | fi | 
 |  | 
 | daemonize /bin/cs -S | 
 | mount -a '#srv/cs' /net | 
 |  | 
 | # This is noisy, so it is off by default. | 
 | #echo debug > /net/cs | 
 |  | 
 | /bin/bind -a '#kprof' /prof | 
 |  | 
 | echo 'ifconfig complete' |