Add DNS info to ifconfig and /net/ndb
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 20 Jan 2017 22:14:32 +0000 (17:14 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 21 Jan 2017 17:07:06 +0000 (12:07 -0500)
Some apps try to do their own DNS, and they look for an /etc/resolv.conf
file.  While we're at it, we might as well put in an /etc/hosts too.

With a little work, we can get all this info from /net/ndb.  ipconfig +
DHCP will put that info in place.  However, static configs didn't have DNS.
Now they do, and it'll get placed in /net/ndb.  That's what all the Plan 9
programs will expect.

Thus all static configs in the custom /etc/network/local.d/ files ought to
set a DNS entry for their hosts.

We don't really need the old kern/kfs/etc/network/default either - those
machines are long gone, and if anyone wants to use them, put those in
local.d instead.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/kfs/etc/network/default [deleted file]
kern/kfs/etc/network/local.d/README
kern/kfs/ifconfig

diff --git a/kern/kfs/etc/network/default b/kern/kfs/etc/network/default
deleted file mode 100644 (file)
index 44d9c76..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/ash
-
-# known good.
-hossinMAC=00241d1054e1
-c89MAC=001e67652333
-c99MAC=001e67c2f479
-altdraMAC=525400b0c2ec
-qemuMAC=525400123456
-tower1MAC=00032d196d88
-tower2MAC=00032d196ddd
-tower3MAC=00032d196d46
-tower4MAC=00032d196db0
-tower5MAC=00032d196daa
-
-if [ "$MAC" = "$qemuMAC" ]
-then
-    echo "Welcome to QEMU!"
-fi
-
-# the tower of ... tower
-# all defaults are fine.
-if [ "$MAC" = "$tower1MAC" ]
-then
-    me=10.0.2.15
-fi
-if [ "$MAC" = "$tower2MAC" ]
-then
-    me=10.0.2.16
-fi
-if [ "$MAC" = "$tower3MAC" ]
-then
-    me=10.0.2.17
-fi
-if [ "$MAC" = "$tower4MAC" ]
-then
-    me=10.0.2.18
-fi
-if [ "$MAC" = "$tower5MAC" ]
-then
-    me=10.0.2.19
-fi
-
-if [ "$MAC" = "$c89MAC" ]
-then
-       # c89's config.  use c96 for eth0 (.196).
-       # $ cat /9/net/ipifc/clone (get e.g. 2)
-       # $ echo "add 169.229.49.196 255.255.255.0" > /9/net/ipifc/2/ctl
-       me=169.229.49.196
-       mask=255.255.255.0
-       remote=169.229.49.0
-       route=169.229.49.1
-       # the i350 NIC that is plugged in is the first NIC
-       NIC="0"
-fi
-
-if [ "$MAC" = "$c99MAC" ]
-then
-       # c99's config.  use c95 for eth0 (.195).
-       # $ cat /9/net/ipifc/clone (get e.g. 2)
-       # $ echo "add 169.229.49.195 255.255.255.0" > /9/net/ipifc/2/ctl
-       me=169.229.49.195
-       mask=255.255.255.0
-       remote=169.229.49.0
-       route=169.229.49.1
-       # the i350 NIC that is plugged in is the first NIC
-       NIC="0"
-fi
-
-if [ "$MAC" = "$altdraMAC" ]
-then
-       # yuzhu's soda hall bridged vm
-       me=128.32.37.37
-       mask=255.255.255.0
-       remote=128.32.37.0
-       route=128.32.37.1
-fi
-
-if [ "$MAC" = "$hossinMAC" ]
-then
-       # brho's soda hall desktop
-       me=128.32.37.46
-       mask=255.255.255.0
-       remote=128.32.37.0
-       route=128.32.37.1
-fi
index 7859173..3124748 100644 (file)
@@ -1,2 +1,5 @@
-# Put your own custom suff in this directory.
+# Put your own custom stuff in this directory.
 # They will be picked up by the ifconfig script.
+#
+# For a specific host, you'll need to set $me, $mask, $remote, $route, and $dns
+# You can optionally set $search, which will be a search path in resolv.conf
index 86df849..ef0b1e5 100755 (executable)
@@ -11,20 +11,6 @@ export rootdir=/root
 export rootspec=''
 export rootsrv=boot
 
-if [ -f /etc/network/default ]
-then
-       source /etc/network/default
-else
-       echo '/etc/network/default not found'
-fi
-
-if [ -f /etc/network/local ]
-then
-       source /etc/network/local
-else
-       echo '/etc/network/local not found'
-fi
-
 if [ -d /etc/network/local.d ]
 then
        for cfg in /etc/network/local.d/*
@@ -53,7 +39,7 @@ fi
 
 if [ -x /bin/ipconfig ]
 then
-       if [ ! -z "$me" ]
+       if [ -n "$me" ]
        then
                ipconfig -g $route ether /net/ether$NIC $me $mask
        else
@@ -62,13 +48,16 @@ then
        fi
        ipconfig -P loopback /dev/null 127.0.0.1
 else
-       if [ -z "$me" ]
+       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.
@@ -92,6 +81,25 @@ else
        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
+
 daemonize /bin/cs -S
 mount -a '#srv/cs' /net