Upgrade isc-dhcp, e.g. dhclient.
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 11 Oct 2003 21:14:25 +0000 (21:14 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 11 Oct 2003 21:14:25 +0000 (21:14 +0000)
Taken-from: FreeBSD-current

23 files changed:
contrib/isc-dhcp/ANONCVS [new file with mode: 0644]
contrib/isc-dhcp/FREEBSD-upgrade
contrib/isc-dhcp/README
contrib/isc-dhcp/RELNOTES
contrib/isc-dhcp/client/clparse.c
contrib/isc-dhcp/client/dhclient-script.8
contrib/isc-dhcp/client/dhclient.8
contrib/isc-dhcp/client/dhclient.c
contrib/isc-dhcp/client/dhclient.conf.5
contrib/isc-dhcp/client/dhclient.leases.5
contrib/isc-dhcp/client/scripts/freebsd
contrib/isc-dhcp/common/dhcp-options.5
contrib/isc-dhcp/common/discover.c
contrib/isc-dhcp/common/dispatch.c
contrib/isc-dhcp/common/options.c
contrib/isc-dhcp/common/parse.c
contrib/isc-dhcp/common/print.c
contrib/isc-dhcp/common/tables.c
contrib/isc-dhcp/includes/cf/freebsd.h
contrib/isc-dhcp/includes/dhcpd.h
contrib/isc-dhcp/includes/version.h
contrib/isc-dhcp/minires/res_mkupdate.c
contrib/isc-dhcp/omapip/result.c

diff --git a/contrib/isc-dhcp/ANONCVS b/contrib/isc-dhcp/ANONCVS
new file mode 100644 (file)
index 0000000..f2ba5f3
--- /dev/null
@@ -0,0 +1,130 @@
+         Anonymous CVS Access for the ISC DHCP Distribution
+
+The ISC DHCP distribution can be accessed using "anonymous" CVS.
+"Anonymous" cvs uses the CVS "pserver" mechanism to allow anybody on
+the Internet to access a CVS repository without having to register in
+any way.   Anonymous CVS allows you to access changes as soon as the
+DHCP developers commit them, rather than having to wait for the next
+snapshot or patchlevel.   Changes that have not yet been released yet
+are not guaranteed to work, but they can nonetheless be useful in many
+cases.
+
+                         TABLE OF CONTENTS
+
+               1. What is anonymous CVS?
+               2. How can i start using it?
+               3. Checking out the latest code in a release
+               4. Checking out the latest code
+               5. Checking out a specific release
+               6. When to update
+
+                       WHAT IS ANONYMOUS CVS?
+
+Anonymous CVS also allows you to browse through the history of the
+DHCP distribution, and examine the revision history of specific files
+to see how they have changed between revisions, to try to figure out
+why something that was working before is no longer working, or just to
+see when a certain change was made.
+
+                     HOW CAN I START USING IT?
+
+To use anonymous CVS to access the DHCP distribution, you must first
+"log in".   You should only need to do this once, but it is a
+necessary step, even though access is anonymous.   Anonymous users log
+in as user "nobody", password "nobody".   To do this, type:
+
+       cvs -d :pserver:nobody@dhcp.cvs.isc.org:/cvsroot login
+
+You will be prompted for a password - type "nobody".   If you get some
+kind of error indicating that cvs doesn't know how to log you in, you
+are probably running an old version of cvs, and should upgrade.   This
+should work with cvs version 1.10.
+
+Once you have logged in, you can check out a version of the DHCP
+distribution, so the next question is, which version?
+
+             CHECKING OUT THE LATEST CODE IN A RELEASE
+
+There are currently four major versions of the distribution - Release
+1, Release 2, Release 3, and the current development tree.   Releases
+1, 2 and 3 are branches in the CVS repository.   To check out the
+latest code on any of these branches, you would use a branch tag of
+RELEASE_1, RELEASE_2 or RELEASE_3 in the following command:
+
+       (setenv CVSROOT :pserver:nobody@dhcp.cvs.isc.org:/cvsroot;
+        cvs checkout -d dhcp-2.0 -r RELEASE_2 DHCP)
+
+Note that the example is for Release 2.
+
+                    CHECKING OUT THE LATEST CODE
+
+To check out the current engineering version, use:
+
+       (setenv CVSROOT :pserver:nobody@dhcp.cvs.isc.org:/cvsroot;
+        cvs checkout -d dhcp-current DHCP)
+
+Note that the current engineering version is a work in progress, and
+there is no real guarantee that it will work for you.
+
+                  CHECKING OUT A SPECIFIC RELEASE
+
+You can also check out specific versions of the DHCP distribution.
+There are three kinds of version tags you may find - alpha tags, beta
+tags and release tags.   Alpha tags look like this:
+
+       V#-ALPHA-YYYYMMDD
+
+# is the release number.   YYYYMMDD is the date of the release, with a
+4-digit year, the month expressed as a number (January=1), and the day
+of the month specified as a number, with the first day of the month
+being 1.
+
+Beta tags look like this:
+
+       V#-BETA-%-PATCH-*
+
+Where # is the release number, % is the Beta number (usually 1) and *
+is the patchlevel.   In the future there may also be beta tags that
+look like this:
+
+       V#-#-BETA-%-PATCH-*
+
+Where #-# is the major version followed by the minor version - for
+example, when the first 3.1 beta comes out, the tag will look like
+this:
+
+       V3-1-BETA-1-PATCH-0
+
+Release tags look like this:
+
+       V#-%-*
+
+Where # is the major version, % is the minor version, and * is the
+patchlevel.   So the tag for 1.0pl2 is V1-0-2, and to check it out,
+you'd type:
+
+       (setenv CVSROOT :pserver:nobody@dhcp.cvs.isc.org:/cvsroot;
+        cvs checkout -d dhcp-1.0pl2 -rV1-0-2 DHCP)
+
+Whenever changes are checked in to the ISC DHCP repository, or files
+are tagged, a notice is sent to the dhcp-source-changes@isc.org
+mailing list.   You can subscribe to this list by sending mail to
+dhcp-source-changes-request@isc.org, and you will then get immediate
+notification when changes are made.   You may find the volume of mail
+on this list annoying, however.
+
+                           WHEN TO UPDATE
+
+We do not recommend that you do an update immediately after you see a
+change on the dhcp-source-changes mailing list - instead, it's best to
+wait a while to make sure that any changes that change depends on have
+also been committed.   Also, sometimes when development is being done
+on two machines, the developers will check in a tentative change that
+hasn't been tested at all so that they can update on a different
+machine and test the change.   The best way to avoid accidentally
+getting one of these changes is to not update aggressively - when a
+change is made, wait a while before updating, to make sure that it's
+not going to be quickly followed by another change.
+
+$DragonFly: src/contrib/isc-dhcp/Attic/ANONCVS,v 1.1 2003/10/11 21:14:10 dillon Exp $
+
index 014730d..8af7ee1 100644 (file)
@@ -1,8 +1,8 @@
 # ex:ts=8
-$FreeBSD: src/contrib/isc-dhcp/FREEBSD-upgrade,v 1.9.2.5 2003/03/02 16:42:37 murray Exp $
-$DragonFly: src/contrib/isc-dhcp/Attic/FREEBSD-upgrade,v 1.2 2003/06/17 04:24:02 dillon Exp $
+$FreeBSD: src/contrib/isc-dhcp/FREEBSD-upgrade,v 1.18 2003/09/02 11:15:03 mbr Exp $
+$DragonFly: src/contrib/isc-dhcp/Attic/FREEBSD-upgrade,v 1.3 2003/10/11 21:14:10 dillon Exp $
 
-ISC DHCP client 3.0.1rc11
+ISC DHCP client 3.0.1rc12
        originals can be found at: ftp://ftp.isc.org/isc/dhcp/
 
 
@@ -16,7 +16,7 @@ For the import of ISC-dhclient the following files were removed:
        contrib/
        dhcp.spec               solaris.init            ms2isc/
 
-       include/cf/
+       includes/cf/
        aix.h                   alphaosf.h              bsdos.h
        cygwin32.h              hpux.h                  irix.h
        linux.h                 netbsd.h                nextstep.h
@@ -29,7 +29,7 @@ For the import of ISC-dhclient the following files were removed:
 Imported by:
 
        cvs import -m 'Import ISC DHCP 3.0.1 RC11 client.' \
-               src/contrib/isc-dhcp ISC isc_dhcp_3_0_1_rc11
+               src/contrib/isc-dhcp ISC isc_dhcp_3_0_1_rc12
 
 
 To make local changes to isc-dhcp, simply patch and commit to the main
@@ -43,21 +43,36 @@ Local Changes:
        client/clparse.c
          r1.6 - prefer strlcpy to strcpy.
        client/dhclient.8 
-         r1.8 - correct a man reference and a typo.
+         r1.14 - interface polling
          r1.6 - document -D option.
           - remove dhcpd from SEE ALSO section.
        client/dhclient.c
+         r1.32 - interface polling
+         r1.31 - interface polling
+         r1.30 - interface polling
+         r1.29 - interface polling
+         r1.28 - interface polling
+         r1.27 - interface polling
+         r1.26 - interface polling
          r1.19 - connect std{in,out,err}.
          r1.13 - prefer strlcpy to strcpy.
          r1.6  - quiet by default.
                - document -D option.
        client/dhclient.conf.5
-         - Remove dhcpd from SEE ALSO section.
+               - Remove dhcpd from SEE ALSO section.
        common/dhcp-options.5
          r1.2 - note that hostname is only set if not already set.
-         - Remove dhcpd from SEE ALSO section.
+              - Remove dhcpd from SEE ALSO section.
+       common/dispatch.c
+         r1.2 - interface polling
+       includes/dhcpd.h
+         r1.5 - interface polling
+         r1.4 - interface polling
+         r1.3 - interface polling
+         r1.2 - interface polling
     (see CVS logs for complete details)
 
+mbr@FreeBSD.org
 murray@FreeBSD.org
 obrien@NUXI.com
 15-Jan-2003
index 4033b8b..50da4b7 100644 (file)
@@ -1,6 +1,6 @@
            Internet Software Consortium DHCP Distribution
                             Version 3.0.1
-                         Release Candidate 9
+                         Release Candidate 12
                             April 28, 2002
 
                              README FILE
@@ -97,7 +97,7 @@ system.
 
                            RELEASE STATUS
 
-This is the tenth release candidate of version 3.0.1 of the ISC DHCP
+This is the twelfth release candidate of version 3.0.1 of the ISC DHCP
 Distribution.  Development of this release is approaching the point at
 which it will be frozen, and no significant new features will be
 added.
@@ -642,4 +642,5 @@ you with it.
 Please see http://www.isc.org/services/public/lists/dhcp-lists.html
 for details on how to subscribe to the ISC DHCP mailing lists.
 
+$DragonFly: src/contrib/isc-dhcp/Attic/README,v 1.2 2003/10/11 21:14:10 dillon Exp $
 
index 3d1552c..60b5ae1 100644 (file)
@@ -1,6 +1,6 @@
            Internet Software Consortium DHCP Distribution
                             Version 3.0.1
-                        Release Candidate 10
+                        Release Candidate 12
                               June, 2002
 
                             Release Notes
@@ -46,6 +46,53 @@ Murrell at BC Tel Advanced Communications.  I'd like to express my
 thanks to all of these good people here, both for working on the code
 and for prodding me into improving it.
 
+                       Changes since 3.0.1rc11
+
+- A patch from Steve Campbell was applied with minor modifications to
+  permit reverse dns PTR record updates with values containing spaces.
+
+- A patch from Florian Lohoff was applied with some modifications to
+  dhcrelay.  It now discards packets whose hop count exceeds 10 by default,
+  and a command-line option (-c) can be used to set this threshold.
+
+- A failover bug relating to identifying peers by name length instead of
+  by name was fixed.
+
+- Delcaring failover configs within shared-network statements should no
+  longer result in error.
+
+- The -nw command line option to dhclient now works.
+
+- Thanks to a patch from Michael Richardson:
+       - Some problems with long option processing have been fixed.
+       - Some fixes to minires so that updates of KEY records will work.
+
+- contrib/ms2isc was updated by Shu-Min Chang of the Intel Corporation.
+  see contrib/ms2isc/readme.txt for revision notes.
+
+- Dhclient no longer uses shell commands to kill another instance of
+  itself, it sends the signal directly.  Thanks to a patch from Martin
+  Blapp.
+
+- The FreeBSD dhclient-script was changed so that a failure to write to
+  /etc/resolv.conf does not prematurely end the script.  This keeps dhclient
+  from looping infinitely when this is the case.  Thanks to a patch from
+  Martin Blapp.
+
+- A patch from Bill Stephens was applied which resolves a problem with lease
+  expiry times in failover configurations.
+
+- A memory leak in configuration parsing was closed thanks to a patch from
+  Steve G.
+
+- The function which discovers interfaces will now skip non-broadcast or
+  point-to-point interfaces, thanks to a patch from David Brownlee.
+
+- Options not yet known by the dhcpd or dhclient have had their names
+  changed such that they do not contain # symbols, in case they should ever
+  appear in a lease file.  An option that might have been named "#144" is
+  now "unknown-144".
+
                        Changes since 3.0.1rc10
 
 - Potential buffer overflows in minires repaired.
@@ -1178,3 +1225,5 @@ and for prodding me into improving it.
 
 - Don't try to evaluate the local failover binding address if none was
   specified.   Thanks to Joseph Breu for finding this.
+
+$DragonFly: src/contrib/isc-dhcp/Attic/RELNOTES,v 1.2 2003/10/11 21:14:10 dillon Exp $
index 92618f3..31a8313 100644 (file)
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
  *
- * @(#) Copyright (c) 1996-2002 The Internet Software Consortium.  All rights reserved.
- * $Id: clparse.c,v 1.62.2.3 2002/11/17 02:25:43 dhankins Exp $
- * $FreeBSD: src/contrib/isc-dhcp/client/clparse.c,v 1.4.2.4 2003/03/02 16:42:37 murray Exp $
- * $DragonFly: src/contrib/isc-dhcp/client/Attic/clparse.c,v 1.2 2003/06/17 04:24:02 dillon Exp $
+ * $Id: clparse.c,v 1.62.2.4 2003/02/10 00:39:57 dhankins Exp $ Copyright (c) 1996-2002 The Internet Software Consortium.  All rights reserved.
+ * $FreeBSD: src/contrib/isc-dhcp/client/clparse.c,v 1.11 2003/09/02 11:13:20 mbr Exp $
+ * $DragonFly: src/contrib/isc-dhcp/client/Attic/clparse.c,v 1.3 2003/10/11 21:14:12 dillon Exp $
  */
 
-static char copyright[] =
-"$Id: clparse.c,v 1.62.2.3 2002/11/17 02:25:43 dhankins Exp $ Copyright (c) 1996-2002 The Internet Software Consortium.  All rights reserved.\n";
-
 #include "dhcpd.h"
 
 static TIME parsed_time;
 
 struct client_config top_level_config;
 
-char client_script_name [] = "/sbin/dhclient-script";
+char client_script_name [] = _PATH_DHCLIENT_SCRIPT;
 
 u_int32_t default_requested_options [] = {
        DHO_SUBNET_MASK,
@@ -622,34 +618,41 @@ void parse_option_list (cfile, list)
        struct parse *cfile;
        u_int32_t **list;
 {
-       int ix, i;
+       int ix;
        int token;
        const char *val;
        pair p = (pair)0, q, r;
+       struct option *option;
 
        ix = 0;
        do {
-               token = next_token (&val, (unsigned *)0, cfile);
-               if (token == SEMI)
+               token = peek_token (&val, (unsigned *)0, cfile);
+               if (token == SEMI) {
+                       token = next_token (&val, (unsigned *)0, cfile);
                        break;
+               }
                if (!is_identifier (token)) {
                        parse_warn (cfile, "%s: expected option name.", val);
+                       token = next_token (&val, (unsigned *)0, cfile);
                        skip_to_semi (cfile);
                        return;
                }
-               for (i = 0; i < 256; i++) {
-                       if (!strcasecmp (dhcp_options [i].name, val))
-                               break;
-               }
-               if (i == 256) {
+               option = parse_option_name (cfile, 0, NULL);
+               if (!option) {
                        parse_warn (cfile, "%s: expected option name.", val);
+                       return;
+               }
+               if (option -> universe != &dhcp_universe) {
+                       parse_warn (cfile,
+                               "%s.%s: Only global options allowed.",
+                               option -> universe -> name, option->name );
                        skip_to_semi (cfile);
                        return;
                }
                r = new_pair (MDL);
                if (!r)
                        log_fatal ("can't allocate pair for option code.");
-               r -> car = (caddr_t)(long)i;
+               r -> car = (caddr_t)(long)option -> code;
                r -> cdr = (pair)0;
                if (p)
                        q -> cdr = r;
index e9aa7f7..8ed96a1 100644 (file)
@@ -36,8 +36,8 @@
 .\" ``http://www.nominum.com''.
 .\"
 .\" $Id: dhclient-script.8,v 1.8.2.4 2002/11/17 02:25:43 dhankins Exp $
-.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient-script.8,v 1.5.2.5 2003/03/02 16:42:37 murray Exp $
-.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient-script.8,v 1.2 2003/06/17 04:24:02 dillon Exp $
+.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient-script.8,v 1.10 2003/01/16 07:23:57 obrien Exp $
+.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient-script.8,v 1.3 2003/10/11 21:14:12 dillon Exp $
 .\"
 .TH dhclient-script 8
 .SH NAME
index 81dd0d1..66e4fd8 100644 (file)
@@ -20,8 +20,8 @@
 .\"
 .\" Portions copyright (c) 2000 David E. O'Brien.
 .\" All rights reserved.
-.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient.8,v 1.8.2.4 2003/03/02 16:42:37 murray Exp $
-.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.8,v 1.2 2003/06/17 04:24:02 dillon Exp $
+.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient.8,v 1.14 2003/07/28 08:30:11 mbr Exp $
+.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.8,v 1.3 2003/10/11 21:14:12 dillon Exp $
 .\"
 .TH dhclient 8
 .SH NAME
@@ -42,6 +42,9 @@ dhclient - Dynamic Host Configuration Protocol Client
 .B -q
 ]
 [
+.B -v
+]
+[
 .B -1
 ]
 [
@@ -72,6 +75,10 @@ server
 relay
 ]
 [
+.B -i
+interval
+]
+[
 .B -n
 ]
 [
@@ -188,6 +195,12 @@ sends can be set using the
 flag, followed by the IP address to send.   This is only useful for testing,
 and should not be expected to work in any consistent or useful way.
 .PP
+On FreeBSD, dhclient can be enabled to automatically handle the
+link status of the network card. Normally polling is done every
+five seconds. The polling interval can be set using the
+.B -i
+flag, followed by the numbers of seconds. Minimum is one second.
+.PP
 The DHCP client will normally run in the foreground until it has
 configured an interface, and then will revert to running in the
 background.   To run force dhclient to always run as a foreground
@@ -205,6 +218,10 @@ facility.   The
 .B -q
 flag prevents any messages other than errors from being printed to the
 standard error descriptor.
+.B -v
+flag turns on all messages.
+Opposite of
+.B -q .
 .PP
 The client normally doesn't release the current lease as it is not
 required by the DHCP protocol.  Some cable ISPs require their clients
index 7c1dcda..7a38cad 100644 (file)
  * by Ted Lemon since then, so any mistakes you find are probably his
  * fault and not Elliot's.
  *
- * @(#) Copyright (c) 1995-2002 Internet Software Consortium.  All rights reserved.";
- * $Id: dhclient.c,v 1.129.2.12 2002/11/07 23:26:38 dhankins Exp $
- * $FreeBSD: src/contrib/isc-dhcp/client/dhclient.c,v 1.9.2.8 2003/03/23 23:33:05 mbr Exp $
- * $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.c,v 1.2 2003/06/17 04:24:02 dillon Exp $
+ * $Id: dhclient.c,v 1.129.2.16 2003/04/26 21:51:39 dhankins Exp $ Copyright (c) 1995-2002 Internet Software Consortium.  All rights reserved.
+ * $FreeBSD: src/contrib/isc-dhcp/client/dhclient.c,v 1.34 2003/09/02 11:09:45 mbr Exp $
+ * $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.c,v 1.3 2003/10/11 21:14:12 dillon Exp $
  */
 
-static char ocopyright[] = "$Id: dhclient.c,v 1.129.2.12 2002/11/07 23:26:38 dhankins Exp $ Copyright (c) 1995-2002 Internet Software Consortium.  All rights reserved.";
-
 #include "dhcpd.h"
 #include "version.h"
 
+#ifdef __FreeBSD__
+#include <sys/ioctl.h>
+#include <net/if_media.h>
+#if defined(DRAGONFLY_FUTURE)
+#include <net80211/ieee80211_ioctl.h>
+#include <net80211/ieee80211.h>
+#endif
+#endif
+
 TIME cur_time;
 TIME default_lease_time = 43200; /* 12 hours... */
 TIME max_lease_time = 86400; /* 24 hours... */
@@ -86,6 +92,10 @@ int client_env_count=0;
 int onetry=0;
 int quiet=1;
 int nowait=0;
+int doinitcheck=0;
+#ifdef ENABLE_POLLING_MODE
+int polling_interval = 5;
+#endif
 
 static void usage PROTO ((void));
 
@@ -95,7 +105,7 @@ int main (argc, argv, envp)
        int argc;
        char **argv, **envp;
 {
-       int i, e;
+       int i;
        struct servent *ent;
        struct interface_info *ip;
        struct client_state *client;
@@ -112,11 +122,8 @@ int main (argc, argv, envp)
        int no_dhclient_db = 0;
        int no_dhclient_pid = 0;
        int no_dhclient_script = 0;
-       FILE *pidfd;
-       pid_t oldpid;
        char *s;
 
-       oldpid = 0;
        /* Make sure we have stdin, stdout and stderr. */
        i = open ("/dev/null", O_RDWR);
        if (i == 0)
@@ -189,6 +196,9 @@ int main (argc, argv, envp)
                } else if (!strcmp (argv [i], "-q")) {
                        quiet = 1;
                        quiet_interface_discovery = 1;
+               } else if (!strcmp (argv [i], "-v")) {
+                       quiet = 0;
+                       quiet_interface_discovery = 0;
                } else if (!strcmp (argv [i], "-s")) {
                        if (++i == argc)
                                usage ();
@@ -197,9 +207,24 @@ int main (argc, argv, envp)
                        if (++i == argc)
                                usage ();
                        relay = argv [i];
+               } else if (!strcmp (argv [i], "-nw")) {
+                       nowait = 1;
                } else if (!strcmp (argv [i], "-n")) {
                        /* do not start up any interfaces */
                        interfaces_requested = 1;
+#ifdef ENABLE_POLLING_MODE
+               } else if (!strcmp (argv [i], "-i")) {
+                       if (++i == argc)
+                               usage ();
+                       polling_interval = (int)strtol (argv [i],
+                           (char **)NULL, 10);
+                       if (polling_interval <= 0) {
+                               log_info ("Incorrect polling interval %d",
+                                   polling_interval);
+                               log_info ("Using a default of 5 seconds");
+                               polling_interval = 5;
+                       }
+#endif
                } else if (!strcmp (argv [i], "-w")) {
                        /* do not exit if there are no broadcast interfaces. */
                        persist = 1;
@@ -217,8 +242,6 @@ int main (argc, argv, envp)
                } else if (!strcmp (argv [i], "--version")) {
                        log_info ("isc-dhclient-%s", DHCP_VERSION);
                        exit (0);
-               } else if (!strcmp (argv [i], "-nw")) {
-                       nowait = 1;
                } else if (argv [i][0] == '-') {
                    usage ();
                } else {
@@ -231,6 +254,18 @@ int main (argc, argv, envp)
                            log_fatal ("%s: interface name too long (max %ld)",
                                       argv [i], (long)strlen (argv [i]));
                    strlcpy (tmp -> name, argv [i], IFNAMSIZ);
+#ifdef __FreeBSD__
+#if defined(DRAGONFLY_FUTURE)
+                   set_ieee80211 (tmp);
+#endif
+#endif
+                   /* Init some interface vars, enable polling */
+#ifdef ENABLE_POLLING_MODE
+                   tmp -> forcediscover = 0;
+                   tmp -> linkstate = HAVELINK;
+                   tmp -> polling = 1;
+#endif /* ifdef ENABLE_POLLING_MODE */
+
                    if (interfaces) {
                            interface_reference (&tmp -> next,
                                                 interfaces, MDL);
@@ -258,12 +293,19 @@ int main (argc, argv, envp)
        /* first kill of any currently running client */
        if (release_mode) {
 
+               FILE *pidfd;
+               pid_t oldpid;
+               long temp;
+               int e;
+
+               oldpid = 0;
                if ((pidfd = fopen(path_dhclient_pid, "r")) != NULL) {
-                       e = fscanf(pidfd, "%d", &oldpid);
+                       e = fscanf(pidfd, "%ld\n", &temp);
+                       oldpid = (pid_t)temp;
 
                        if (e != 0 && e != EOF) {
                                if (oldpid) {
-                                       if (kill(oldpid, SIGKILL) == 0)
+                                       if (kill(oldpid, SIGTERM) == 0)
                                                unlink(path_dhclient_pid);
                                }
                        }
@@ -384,6 +426,18 @@ int main (argc, argv, envp)
                                             INTERFACE_AUTOMATIC)) !=
                             INTERFACE_REQUESTED))
                                continue;
+#ifdef __FreeBSD__
+#if defined(DRAGONFLY_FUTURE)
+                       set_ieee80211 (ip);
+#endif
+#endif
+#ifdef ENABLE_POLLING_MODE
+                       ip -> forcediscover = 0;
+                       if (ip -> client -> config -> media != NULL)
+                               ip -> havemedia = 1;
+                       else
+                               ip -> havemedia = 0;
+#endif
                        script_init (ip -> client,
                                     "PREINIT", (struct string_list *)0);
                        if (ip -> client -> alias)
@@ -426,8 +480,13 @@ int main (argc, argv, envp)
                                client -> state = S_INIT;
                                /* Set up a timeout to start the initialization
                                   process. */
+#ifdef ENABLE_POLLING_MODE
+                               add_timeout (cur_time + random () % 5 + 2,
+                                            state_polling, client, 0, 0);
+#else
                                add_timeout (cur_time + random () % 5,
                                             state_reboot, client, 0, 0);
+#endif
                        }
                }
        }
@@ -875,6 +934,15 @@ void bind_lease (client)
        /* Write out the new lease. */
        write_client_lease (client, client -> new, 0, 0);
 
+       /*
+        * It's now possible that state_reboot can be called
+        * after a interface link went down and is up again.
+        * To prevent tons of equal leases saved on disk, we rewrite
+        * them.
+        */
+       read_client_leases ();
+       rewrite_client_leases ();
+
        /* Replace the old active lease with the new one. */
        if (client -> active)
                destroy_client_lease (client -> active);
@@ -889,6 +957,12 @@ void bind_lease (client)
              piaddr (client -> active -> address),
              (long)(client -> active -> renewal - cur_time));
        client -> state = S_BOUND;
+#ifdef ENABLE_POLLING_MODE
+       /* Init some interface vars, enable polling */
+       client -> interface -> linkstate = HAVELINK;
+       client -> interface -> forcediscover = 0;
+       client -> interface -> polling = 1;
+#endif /* ifdef ENABLE_POLLING_MODE */
        reinitialize_interfaces ();
        go_daemon ();
        if (client -> config -> do_forward_update) {
@@ -1351,6 +1425,11 @@ void send_discover (cpp)
        int interval;
        int increase = 1;
 
+#ifdef ENABLE_POLLING_MODE
+       /* Disable polling for this interface */
+       client -> interface -> polling = 0;
+#endif
+
        /* Figure out how long it's been since we started transmitting. */
        interval = cur_time - client -> first_sending;
 
@@ -1456,6 +1535,9 @@ void state_panic (cpp)
        struct client_lease *loop;
        struct client_lease *lp;
 
+       if (client -> interface -> linkstate == NOLINK)
+               return;
+
        loop = lp = client -> active;
 
        log_info ("No DHCPOFFERS received.");
@@ -1488,6 +1570,10 @@ void state_panic (cpp)
                                log_info ("bound: renewal in %ld %s.",
                                          (long)(client -> active -> renewal -
                                                 cur_time), "seconds");
+#ifdef ENABLE_POLLING_MODE
+                               /* Enable polling for this interface */
+                               client -> interface -> polling = 1;
+#endif
                                add_timeout (client -> active -> renewal,
                                             state_bound, client, 0, 0);
                            } else {
@@ -1495,6 +1581,11 @@ void state_panic (cpp)
                                log_info ("bound: immediate renewal.");
                                state_bound (client);
                            }
+                           /*
+                            * Set the link status back to nolink, even
+                            * if we have media settings.
+                            */
+                           client -> interface -> linkstate = NOLINK;
                            reinitialize_interfaces ();
                            go_daemon ();
                            return;
@@ -1540,6 +1631,12 @@ void state_panic (cpp)
        }
 
        log_info ("No working leases in persistent database - sleeping.");
+
+#ifdef ENABLE_POLLING_MODE
+       /* Enable polling for this interface */
+       client -> interface -> polling = 1;
+#endif
+
        script_init (client, "FAIL", (struct string_list *)0);
        if (client -> alias)
                script_write_params (client, "alias_", client -> alias);
@@ -1877,10 +1974,17 @@ void make_discover (client, lease)
        /* Set up the option buffer... */
        client -> packet_length =
                cons_options ((struct packet *)0, &client -> packet,
-                             (struct lease *)0, client, 0,
-                             (struct option_state *)0, options,
-                             &global_scope, 0, 0, 0, (struct data_string *)0,
+                             (struct lease *)0, client,
+                             /* maximum packet size */1500,
+                             (struct option_state *)0,
+                             options,
+                             /* scope */ &global_scope,
+                             /* overload */ 0,
+                             /* terminate */0,
+                             /* bootpp    */0,
+                             (struct data_string *)0,
                              client -> config -> vendor_space_name);
+
        option_state_dereference (&options, MDL);
        if (client -> packet_length < BOOTP_MIN_LEN)
                client -> packet_length = BOOTP_MIN_LEN;
@@ -1944,10 +2048,17 @@ void make_request (client, lease)
        /* Set up the option buffer... */
        client -> packet_length =
                cons_options ((struct packet *)0, &client -> packet,
-                             (struct lease *)0, client, 0,
-                             (struct option_state *)0, client -> sent_options,
-                             &global_scope, 0, 0, 0, (struct data_string *)0,
+                             (struct lease *)0, client,
+                             /* maximum packet size */1500,
+                             (struct option_state *)0,
+                             client -> sent_options, 
+                             /* scope */ &global_scope,
+                             /* overload */ 0,
+                             /* terminate */0,
+                             /* bootpp    */0,
+                             (struct data_string *)0,
                              client -> config -> vendor_space_name);
+
        option_state_dereference (&client -> sent_options, MDL);
        if (client -> packet_length < BOOTP_MIN_LEN)
                client -> packet_length = BOOTP_MIN_LEN;
@@ -2073,10 +2184,17 @@ void make_release (client, lease)
        /* Set up the option buffer... */
        client -> packet_length =
                cons_options ((struct packet *)0, &client -> packet,
-                             (struct lease *)0, client, 0,
-                             (struct option_state *)0, options,
-                             &global_scope, 0, 0, 0, (struct data_string *)0,
+                             (struct lease *)0, client,
+                             /* maximum packet size */1500,
+                             (struct option_state *)0,
+                             options,
+                             /* scope */ &global_scope,
+                             /* overload */ 0,
+                             /* terminate */0,
+                             /* bootpp    */0,
+                             (struct data_string *)0,
                              client -> config -> vendor_space_name);
+
        if (client -> packet_length < BOOTP_MIN_LEN)
                client -> packet_length = BOOTP_MIN_LEN;
        option_state_dereference (&options, MDL);
@@ -2768,8 +2886,10 @@ void client_location_changed ()
                              case S_STOPPED:
                                break;
                        }
+#ifndef ENABLE_POLLING_MODE
                        client -> state = S_INIT;
                        state_reboot (client);
+#endif
                }
        }
 }
@@ -2995,7 +3115,9 @@ isc_result_t dhcp_set_control_state (control_object_state_t oldstate,
                    break;
 
                  case server_awaken:
+#ifndef ENABLE_POLLING_MODE
                    state_reboot (client);
+#endif
                    break;
                }
            }
@@ -3132,3 +3254,261 @@ isc_result_t client_dns_update (struct client_state *client, int addp, int ttl)
        data_string_forget (&ddns_dhcid, MDL);
        return rcode;
 }
+
+/* Check to see if there's a wire plugged in */
+int
+interface_active(struct interface_info *ip) {
+#ifdef __FreeBSD__
+       struct ifmediareq ifmr;
+       int *media_list, i;
+       char *ifname;
+       int sock;
+
+       ifname = ip -> name;
+
+       if ((sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
+               log_fatal ("Can't create interface_active socket");
+
+       (void) memset (&ifmr, 0, sizeof (ifmr));
+       (void) strncpy (ifmr.ifm_name, ifname, sizeof (ifmr.ifm_name));
+
+       if (ioctl (sock, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
+               /*
+                * Interface doesn't support SIOCGIFMEDIA, presume okay
+                */
+               close (sock);
+               return (HAVELINK);
+       }
+       close (sock);
+
+       if (ifmr.ifm_count == 0) {
+               /*
+                * Assume that this means interface
+                * does not support SIOCGIFMEDIA
+                */
+               log_fatal ("%s: no media types?", ifname);
+               return (HAVELINK);
+       }
+
+       if (ifmr.ifm_status & IFM_AVALID) {
+               if (ip -> ieee80211) {
+                       /*
+                        * Wavelan devices need to be checked if they are
+                        * associated.
+                        */
+                       if ((IFM_TYPE(ifmr.ifm_active) == IFM_IEEE80211) &&
+                            (ifmr.ifm_status & IFM_ACTIVE)) {
+                               return (HAVELINK);
+                       }
+               } else {
+                       if (ifmr.ifm_status & IFM_ACTIVE) {
+                               return (HAVELINK);
+                       }
+               }
+               /*
+                * We really have no link.
+                */
+               return (NOLINK);
+       }
+       /*
+        * IFM_AVALID is not set. We cannot check
+        * the link state. Assume HAVELINK.
+        */
+
+#endif /* Other OSs */
+       /*
+        * Always return a successful link if the OS
+        * is not supported.
+        */
+       return (HAVELINK);
+}
+
+#ifdef __FreeBSD__
+#if defined(DRAGONFLY_FUTURE)
+void
+set_ieee80211 (struct interface_info *ip) {
+
+       struct ieee80211req     ireq;
+       u_int8_t                data[32];
+       int                     associated = 0;
+       int *media_list, i;
+       char *ifname;
+       int sock;
+
+       ifname = ip -> name;
+
+       if ((sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
+               log_fatal ("Can't create interface_active socket");
+
+       (void) memset (&ireq, 0, sizeof (ireq));
+       (void) strncpy (ireq.i_name, ifname, sizeof (ireq.i_name));
+       ireq.i_data = &data;
+       ireq.i_type = IEEE80211_IOC_SSID;
+       ireq.i_val = -1;
+       /*
+        * If we can't get the SSID,
+        * this isn't an 802.11 device.
+        */
+       if (ioctl (sock, SIOCG80211, &ireq) < 0)
+               ip -> ieee80211 = 0;
+       else {
+#ifdef DEBUG
+               printf ("Device %s has 802.11\n", ifname);
+#endif
+               ip -> ieee80211 = 1;
+       }
+       close (sock);
+}
+#endif /* __FreeBSD__ */
+#endif
+
+#ifdef ENABLE_POLLING_MODE
+/* Go to background after some time */
+void state_background (cpp)
+       void *cpp;
+{
+       go_daemon ();
+}
+
+/* Check the state of the NICs if we have link */
+void state_polling (cpp)
+        void *cpp;
+{
+       struct interface_info *ip;
+       struct client_state *client;
+       int result;
+
+       for (ip = interfaces; ip; ip = ip -> next) {
+               if (! ip -> polling)
+                       continue;
+#ifdef DEBUG
+               printf ("%s: Polling interface state\n", ip -> name);
+               for (client = ip -> client;
+                    client; client = client -> next) {
+                       printf ("%s: client state of %d\n", ip -> name, ip -> client -> state);
+                       printf ("%s: link = %d\n", ip -> name, ip -> linkstate);
+               }
+#endif
+
+               result = interface_active (ip);
+               /*
+                * If dhclient.conf contains media settings, we cannot
+                * abort if the interface is not set to active mode.
+                */
+               if (ip -> havemedia && ip -> client -> state != S_BOUND) {
+                       if (result == HAVELINK)
+                               ip -> forcediscover = 1;
+                       result = HAVELINK;
+               }
+
+               /*
+                * The last status of the interface tells us
+                * the we've got no link ...
+                */
+               if (ip -> linkstate == NOLINK || ! doinitcheck) {
+                       /*
+                        * ... but we have now link. Let's send
+                        * requests.
+                        */
+                       if (result == HAVELINK) {
+#ifdef DEBUG
+                               if (ip -> havemedia)
+                                       printf ("%s: Trying media settings on interface\n",
+                                               ip -> name);
+                               else
+                                       printf ("%s: Found Link on interface\n", ip -> name);
+#endif
+                               /*
+                                * Set the interface to state_reboot. But of
+                                * course we can not be sure that we really got link,
+                                * we just assume it.
+                                */
+                               for (client = ip -> client;
+                                    client; client = client -> next) {
+                                               cancel_timeout (state_init, client);
+                                               cancel_timeout (state_reboot, client);
+                                               cancel_timeout (state_selecting, client);
+                                               add_timeout (cur_time + random () % 5,
+                                                           state_reboot, client, 0, 0);
+                               }
+                               ip -> linkstate = HAVELINK;
+                       } else {
+#ifdef DEBUG
+                               printf ("%s: No link on interface\n", ip -> name);
+#endif
+                               for (client = ip -> client;
+                                    client; client = client -> next) {
+                                       /*
+                                        * Without this add_timout(), dhclient does
+                                        * not poll on a interface if there
+                                        * is no cable plugged in at startup
+                                        * time. Because we add one additional second 
+                                        * to the time of a normal timeout, we always
+                                        * skip and block a running one. This prevents
+                                        * that polling is done twice at the same time.
+                                        */
+                                       if (client -> state == S_INIT) {
+                                               add_timeout (cur_time + (polling_interval + 1),
+                                                            state_polling, client, 0, 0);
+                                       }
+                               }
+                               ip -> linkstate = NOLINK;
+                               /*
+                                * Automatically go into the background after
+                                * some time. Do this only if there are no
+                                * media options available for a interface.
+                                */
+                               if (! ip -> havemedia && ! doinitcheck) {
+                                       add_timeout (cur_time + (polling_interval * 2),
+                                                   state_background, client, 0, 0);
+                               }
+                       }
+               }
+
+               /*
+                * The last status of the interface tells us
+                * the we previously had link.
+                */
+               if (ip -> linkstate == HAVELINK && doinitcheck) {
+                       if (result == NOLINK) {
+                               /*
+                                * We lost link on the interface, or it isn't
+                                * associated anymore.
+                                */
+#ifdef DEBUG
+                               printf ("%s: Lost Link on interface\n", ip -> name);
+#endif
+                               /*
+                                * After we lost link, cycle again through the
+                                * different media settings if available. Else
+                                * set NOLINK.
+                                */
+                               if (ip -> havemedia)
+                                       ip -> forcediscover = 1;
+                               else
+                                       ip -> linkstate = NOLINK;
+                       }
+                       /*
+                        * If we happen to have a real link, but no
+                        * active lease, force the interface into
+                        * state_reboot. Do the same if media settings
+                        * are available.
+                        */
+                       if (ip -> forcediscover) {
+                               for (client = ip -> client;
+                                    client; client = client -> next) {
+                                       if (client -> state != S_REBOOTING &&
+                                           client -> state != S_SELECTING) {
+                                               add_timeout (cur_time + random () % 5,
+                                                           state_reboot, client, 0, 0);
+                                       }
+                               }
+                               ip -> forcediscover = 0;
+                               ip -> linkstate = HAVELINK;
+                       }
+                       /* We still have link, do nothing. */
+               }
+       }
+       doinitcheck = 1;
+}
+#endif /* ifdef ENABLE_POLLING_MODE */
index 0d08f58..bb0d6da 100644 (file)
@@ -35,9 +35,9 @@
 .\" see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
 .\" ``http://www.nominum.com''.
 .\"
-.\" $Id: dhclient.conf.5,v 1.12.2.8 2002/11/17 02:25:43 dhankins Exp $
-.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient.conf.5,v 1.7.2.2 2003/03/02 16:42:38 murray Exp $
-.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.conf.5,v 1.2 2003/06/17 04:24:02 dillon Exp $
+.\" $Id: dhclient.conf.5,v 1.12.2.9 2003/02/23 03:27:26 dhankins Exp $
+.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient.conf.5,v 1.13 2003/09/02 11:13:20 mbr Exp $
+.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.conf.5,v 1.3 2003/10/11 21:14:12 dillon Exp $
 .\"
 .TH dhclient.conf 5
 .SH NAME
@@ -448,7 +448,7 @@ automatically determine the type of network to which they are
 connected.  The media setup string is a system-dependent parameter
 which is passed to the dhcp client configuration script when
 initializing the interface.  On Unix and Unix-like systems, the
-argument is passed on the ifconfig command line when configuring te
+argument is passed on the ifconfig command line when configuring the
 interface.
 .PP
 The dhcp client automatically declares this parameter if it uses a
index f35269d..933ab20 100644 (file)
@@ -37,8 +37,8 @@
 .\" Enterprises, see ``http://www.vix.com''.
 .\"
 .\" $Id: dhclient.leases.5,v 1.2.4.3 2002/11/17 02:25:44 dhankins Exp $
-.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient.leases.5,v 1.2.4.2 2003/03/02 16:42:38 murray Exp $
-.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.leases.5,v 1.2 2003/06/17 04:24:02 dillon Exp $
+.\" $FreeBSD: src/contrib/isc-dhcp/client/dhclient.leases.5,v 1.5 2003/01/16 07:36:45 obrien Exp $
+.\" $DragonFly: src/contrib/isc-dhcp/client/Attic/dhclient.leases.5,v 1.3 2003/10/11 21:14:12 dillon Exp $
 .\"
 .TH dhclient.leases 5
 .SH NAME
index ebc742a..04b88e3 100644 (file)
@@ -1,9 +1,8 @@
 #!/bin/sh
 #
-# $Id: freebsd,v 1.13.2.4 2002/06/09 22:37:55 murray Exp $
-#
-# $FreeBSD: src/contrib/isc-dhcp/client/scripts/freebsd,v 1.9.2.6 2003/03/02 16:42:38 murray Exp $
-# $DragonFly: src/contrib/isc-dhcp/client/scripts/Attic/freebsd,v 1.2 2003/06/17 04:24:02 dillon Exp $
+# $Id: freebsd,v 1.13.2.5 2003/04/27 19:44:01 dhankins Exp $
+# $FreeBSD: src/contrib/isc-dhcp/client/scripts/freebsd,v 1.26 2003/09/15 15:48:12 mbr Exp $
+# $DragonFly: src/contrib/isc-dhcp/client/scripts/Attic/freebsd,v 1.3 2003/10/11 21:14:15 dillon Exp $
 
 if [ -x /usr/bin/logger ]; then
        LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
@@ -14,13 +13,19 @@ fi
 make_resolv_conf() {
   if [ x"$new_domain_name_servers" != x ]; then
     if [ "x$new_domain_name" != x ]; then
-      echo search $new_domain_name >/etc/resolv.conf
+      ( echo search $new_domain_name >/etc/resolv.conf )
+      exit_status=$?
     else
-      rm /etc/resolv.conf
+      ( rm /etc/resolv.conf )
+      exit_status=$?
+    fi
+    if [ $exit_status -ne 0 ]; then
+      $LOGGER "WARNING: Unable to update resolv.conf: Error $exit_status"
+    else
+      for nameserver in $new_domain_name_servers; do
+       ( echo nameserver $nameserver >>/etc/resolv.conf )
+      done
     fi
-    for nameserver in $new_domain_name_servers; do
-      echo nameserver $nameserver >>/etc/resolv.conf
-    done
   fi
 }
 
@@ -45,12 +50,7 @@ if [ -f /etc/dhclient-enter-hooks ]; then
   fi
 fi
 
-if [ x$new_network_number != x ]; then
-   $LOGGER New Network Number: $new_network_number
-fi
-
 if [ x$new_broadcast_address != x ]; then
- $LOGGER New Broadcast Address: $new_broadcast_address
   new_broadcast_arg="broadcast $new_broadcast_address"
 fi
 if [ x$old_broadcast_address != x ]; then
@@ -66,6 +66,15 @@ if [ x$alias_subnet_mask != x ]; then
   alias_subnet_arg="netmask $alias_subnet_mask"
 fi
 
+# Get the interface to which our default route is bound to.
+if [ -x /usr/bin/netstat ]; then
+       if_defaultroute=`/usr/bin/netstat -rn \
+               | /usr/bin/grep "^default" \
+               | /usr/bin/awk '{print $6}'`
+else
+       if_defaultroute="x"
+fi
+
 if [ x$reason = xMEDIUM ]; then
   eval "ifconfig $interface $medium"
   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
@@ -161,7 +170,9 @@ if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
     eval "ifconfig $interface inet -alias $old_ip_address $medium"
     route delete $old_ip_address 127.1 >/dev/null 2>&1
     for router in $old_routers; do
-      route delete default $router >/dev/null 2>&1
+      if [ $if_defaultroute = x ] || [ $if_defaultroute = $interface ]; then
+             route delete default $router >/dev/null 2>&1
+      fi
     done
     if [ -n "$old_static_routes" ]; then
       set -- $old_static_routes
index 0874b24..4036e98 100644 (file)
@@ -35,9 +35,9 @@
 .\" see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
 .\" ``http://www.nominum.com''.
 .\"
-.\" $Id: dhcp-options.5,v 1.19.2.9 2002/11/17 02:26:57 dhankins Exp $
-.\" $FreeBSD: src/contrib/isc-dhcp/common/dhcp-options.5,v 1.2.2.2 2003/03/02 16:42:38 murray Exp $
-.\" $DragonFly: src/contrib/isc-dhcp/common/Attic/dhcp-options.5,v 1.2 2003/06/17 04:24:02 dillon Exp $
+.\" $Id: dhcp-options.5,v 1.19.2.10 2003/02/23 03:27:42 dhankins Exp $
+.\" $FreeBSD: src/contrib/isc-dhcp/common/dhcp-options.5,v 1.6 2003/09/02 11:13:20 mbr Exp $
+.\" $DragonFly: src/contrib/isc-dhcp/common/Attic/dhcp-options.5,v 1.3 2003/10/11 21:14:17 dillon Exp $
 .\"
 .TH dhcpd-options 5
 .SH NAME
@@ -223,7 +223,7 @@ sending TCP segments.  The minimum value is 1.
 .B option \fBdhcp-client-identifier\fR \fIstring\fR\fB;\fR
 .RS 0.25i
 .PP
-This option can be used to specify the a DHCP client identifier in a
+This option can be used to specify a DHCP client identifier in a
 host declaration, so that dhcpd can find the host record by matching
 against the client identifier.
 .PP
@@ -413,8 +413,8 @@ RFC2132.
 \fIip-address\fR... ]\fB;\fR
 .RS 0.25i
 .PP
-The Finger server option specifies a list of Finger available to the
-client.  Servers should be listed in order of preference.
+The Finger server option specifies a list of Finger servers available
+to the client.  Servers should be listed in order of preference.
 .RE
 .PP
 .B option \fBfont-servers\fR \fIip-address\fR [\fB,\fR \fIip-address\fR...
@@ -486,8 +486,8 @@ forwarding, and a value of true means enable IP forwarding.
 \fIip-address\fR... ]\fB;\fR
 .RS 0.25i
 .PP
-The IRC server option specifies a list of IRC available to the
-client.  Servers should be listed in order of preference.
+The IRC server option specifies a list of IRC servers available
+to the client.  Servers should be listed in order of preference.
 .RE
 .PP
 .B option \fBlog-servers\fR \fIip-address\fR [\fB,\fR \fIip-address\fR...
@@ -594,7 +594,7 @@ Possible node types are:
 B-node: Broadcast - no WINS
 .TP
 .I 2
-P-node: Peer - WINS only.
+P-node: Peer - WINS only
 .TP
 .I 4
 M-node: Mixed - broadcast, then WINS
@@ -649,8 +649,8 @@ preference.
 \fIip-address\fR... ]\fB;\fR
 .RS 0.25i
 .PP
-The NNTP server option specifies a list of NNTP available to the
-client.  Servers should be listed in order of preference.
+The NNTP server option specifies a list of NNTP servesr available
+to the client.  Servers should be listed in order of preference.
 .RE
 .PP
 .B option \fBnon-local-source-routing\fR \fIflag\fR\fB;\fR
@@ -734,8 +734,8 @@ See STD 3 (RFC1122) for further information.
 .B option \fBpop-server\fR \fIip-address\fR [\fB,\fR \fIip-address\fR... ]\fB;\fR
 .RS 0.25i
 .PP
-The POP3 server option specifies a list of POP3 available to the
-client.  Servers should be listed in order of preference.
+The POP3 server option specifies a list of POP3 servers available
+to the client.  Servers should be listed in order of preference.
 .RE
 .PP
 .B option \fBresource-location-servers\fR \fIip-address\fR
@@ -906,8 +906,8 @@ This specifies the IP address of the client's swap server.
 .B option \fBtcp-keepalive-garbage\fR \fIflag\fR\fB;\fR
 .RS 0.25i
 .PP
-This option specifies the whether or not the client should send TCP
-keepalive messages with a octet of garbage for compatibility with
+This option specifies whether or not the client should send TCP
+keepalive messages with an octet of garbage for compatibility with
 older implementations.  A value of false indicates that a garbage octet
 should not be sent. A value of true indicates that a garbage octet
 should be sent.
@@ -1032,8 +1032,8 @@ details.
 \fIip-address\fR... ]\fB;\fR
 .RS 0.25i
 .PP
-The WWW server option specifies a list of WWW available to the
-client.  Servers should be listed in order of preference.
+The WWW server option specifies a list of WWW servers available
+to the client.  Servers should be listed in order of preference.
 .RE
 .PP
 .B option \fBx-display-manager\fR \fIip-address\fR [\fB,\fR \fIip-address\fR...
index 8dadde0..c76408d 100644 (file)
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ * 
+ * $Id: discover.c,v 1.42.2.14 2003/07/25 19:44:15 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.
+ * $DragonFly: src/contrib/isc-dhcp/common/Attic/discover.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
  */
 
-#ifndef lint
-static char copyright[] =
-"$Id: discover.c,v 1.42.2.13 2002/11/17 02:26:57 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.\n";
-#endif /* not lint */
-
 #include "dhcpd.h"
 #include <sys/ioctl.h>
 
@@ -258,10 +256,12 @@ void discover_interfaces (state)
                        if (!strcmp (tmp -> name, ifp -> ifr_name))
                                break;
 
-               /* Skip loopback, point-to-point and down interfaces,
-                  except don't skip down interfaces if we're trying to
-                  get a list of configurable interfaces. */
-               if (((ifr.ifr_flags & IFF_LOOPBACK ||
+               /* Skip non broadcast interfaces (plus loopback and
+                  point-to-point in case an OS incorrectly marks them
+                  as broadcast). Also skip down interfaces unless we're
+                  trying to get a list of configurable interfaces. */
+               if (((!(ifr.ifr_flags & IFF_BROADCAST) ||
+                     ifr.ifr_flags & IFF_LOOPBACK ||
                      ifr.ifr_flags & IFF_POINTOPOINT) && !tmp) ||
                    (!(ifr.ifr_flags & IFF_UP) &&
                     state != DISCOVER_UNCONFIGURED))
index bd87675..00b8945 100644 (file)
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ *
+ * $Id: dispatch.c,v 1.63.2.3 2002/11/17 02:26:57 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.
+ * $FreeBSD: src/contrib/isc-dhcp/common/dispatch.c,v 1.4 2003/08/10 22:01:37 mbr Exp $
+ * $DragonFly: src/contrib/isc-dhcp/common/Attic/dispatch.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
  */
 
-#ifndef lint
-static char copyright[] =
-"$Id: dispatch.c,v 1.63.2.3 2002/11/17 02:26:57 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.\n";
-#endif /* not lint */
 
 #include "dhcpd.h"
 
 struct timeout *timeouts;
 static struct timeout *free_timeouts;
 
+#ifdef ENABLE_POLLING_MODE
+extern int polling_interval;
+#endif
+
 void set_time (u_int32_t t)
 {
        /* Do any outstanding timeouts. */
@@ -95,11 +99,26 @@ struct timeval *process_outstanding_timeouts (struct timeval *tvp)
 void dispatch ()
 {
        struct timeval tv, *tvp;
+#ifdef ENABLE_POLLING_MODE
+       struct timeval *tvp_new;
+#endif
        isc_result_t status;
+       TIME cur_time;
 
+       tvp = NULL;
+#ifdef ENABLE_POLLING_MODE
+       tvp_new = NULL;
+#endif
        /* Wait for a packet or a timeout... XXX */
        do {
                tvp = process_outstanding_timeouts (&tv);
+#ifdef ENABLE_POLLING_MODE
+               GET_TIME (&cur_time);
+               add_timeout(cur_time + polling_interval, state_polling, 0, 0, 0);
+               tvp_new = process_outstanding_timeouts(&tv);
+               if (tvp != NULL && (tvp -> tv_sec > tvp_new -> tv_sec))
+                       tvp = tvp_new;
+#endif /* ENABLE_POLLING_MODE */
                status = omapi_one_dispatch (0, tvp);
        } while (status == ISC_R_TIMEDOUT || status == ISC_R_SUCCESS);
        log_fatal ("omapi_one_dispatch failed: %s -- exiting.",
index 6c4562c..f407d87 100644 (file)
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ *
+ * $Id: options.c,v 1.85.2.12 2003/03/31 03:06:55 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.
+ * $DragonFly: src/contrib/isc-dhcp/common/Attic/options.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
  */
 
-#ifndef lint
-static char copyright[] =
-"$Id: options.c,v 1.85.2.9 2002/11/17 02:26:58 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.\n";
-#endif /* not lint */
-
 #define DHCP_OPTION_DATA
 #include "dhcpd.h"
 #include <omapip/omapip_p.h>
@@ -166,15 +164,36 @@ int parse_option_buffer (options, buffer, length, universe)
                   the parse fails, or the option isn't an encapsulation (by
                   far the most common case), or the option isn't entirely
                   an encapsulation, keep the raw data as well. */
-               if (!((universe -> options [code] -> format [0] == 'e' ||
+               if (universe -> options [code] &&
+                   !((universe -> options [code] -> format [0] == 'e' ||
                       universe -> options [code] -> format [0] == 'E') &&
                      (parse_encapsulated_suboptions
                       (options, universe -> options [code],
                        buffer + offset + 2, len,
                        universe, (const char *)0)))) {
-                   save_option_buffer (universe, options, bp,
-                                       &bp -> data [offset + 2], len,
-                                       universe -> options [code], 1);
+                   op = lookup_option (universe, options, code);
+                   if (op) {
+                       struct data_string new;
+                       memset (&new, 0, sizeof new);
+                       if (!buffer_allocate (&new.buffer, op -> data.len + len,
+                                             MDL)) {
+                           log_error ("parse_option_buffer: No memory.");
+                           return 0;
+                       }
+                       memcpy (new.buffer -> data, op -> data.data,
+                               op -> data.len);
+                       memcpy (&new.buffer -> data [op -> data.len],
+                               &bp -> data [offset + 2], len);
+                       new.len = op -> data.len + len;
+                       new.data = new.buffer -> data;
+                       data_string_forget (&op -> data, MDL);
+                       data_string_copy (&op -> data, &new, MDL);
+                       data_string_forget (&new, MDL);
+                   } else {
+                       save_option_buffer (universe, options, bp,
+                                           &bp -> data [offset + 2], len,
+                                           universe -> options [code], 1);
+                   }
                }
                offset += len + 2;
        }
@@ -470,14 +489,18 @@ int cons_options (inpacket, outpacket, lease, client_state,
           and no alternate maximum message size has been specified, take the
           one in the packet. */
 
-       if (!mms && inpacket &&
+       if (inpacket &&
            (op = lookup_option (&dhcp_universe, inpacket -> options,
                                 DHO_DHCP_MAX_MESSAGE_SIZE))) {
                evaluate_option_cache (&ds, inpacket,
                                       lease, client_state, in_options,
                                       cfg_options, scope, op, MDL);
-               if (ds.len >= sizeof (u_int16_t))
-                       mms = getUShort (ds.data);
+               if (ds.len >= sizeof (u_int16_t)) {
+                       i = getUShort (ds.data);
+
+                       if(!mms || (i < mms))
+                               mms = i;
+               }
                data_string_forget (&ds, MDL);
        }
 
index 84b0691..052ed11 100644 (file)
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ * 
+ * $Id: parse.c,v 1.104.2.14 2003/07/25 19:36:11 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.
+ * $DragonFly: src/contrib/isc-dhcp/common/Attic/parse.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
  */
 
-#ifndef lint
-static char copyright[] =
-"$Id: parse.c,v 1.104.2.12 2002/11/17 02:58:34 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.\n";
-#endif /* not lint */
 
 #include "dhcpd.h"
 
@@ -284,8 +283,11 @@ int parse_ip_addr_or_hostname (expr, cfile, uniform)
                name = parse_host_name (cfile);
                if (!name)
                        return 0;
-               if (!make_host_lookup (expr, name))
+               if (!make_host_lookup (expr, name)) {
+                       dfree(name, MDL);
                        return 0;
+               }
+               dfree(name, MDL);
                if (!uniform) {
                        if (!make_limit (&x, *expr, 4))
                                return 0;
@@ -4040,7 +4042,11 @@ int parse_expression (expr, cfile, lose, context, plhs, binop)
        }
 
        if (binop != expr_none) {
-         if (expression_context (rhs) != expression_context (lhs)) {
+         rhs_context = expression_context(rhs);
+         lhs_context = expression_context(lhs);
+
+         if ((rhs_context != context_any) && (lhs_context != context_any) &&
+                       (rhs_context != lhs_context)) {
            parse_warn (cfile, "illegal expression relating different types");
            skip_to_semi (cfile);
            expression_dereference (&rhs, MDL);
@@ -4052,9 +4058,10 @@ int parse_expression (expr, cfile, lose, context, plhs, binop)
          switch(binop) {
            case expr_not_equal:
            case expr_equal:
-               if ((expression_context(rhs) != context_data_or_numeric) &&
-                   (expression_context(rhs) != context_data) &&
-                   (expression_context(rhs) != context_numeric)) {
+               if ((rhs_context != context_data_or_numeric) &&
+                   (rhs_context != context_data) &&
+                   (rhs_context != context_numeric) &&
+                   (rhs_context != context_any)) {
                        parse_warn (cfile, "expecting data/numeric expression");
                        skip_to_semi (cfile);
                        expression_dereference (&rhs, MDL);
@@ -4065,7 +4072,8 @@ int parse_expression (expr, cfile, lose, context, plhs, binop)
 
            case expr_and:
            case expr_or:
-               if (expression_context(rhs) != context_boolean) {
+               if ((rhs_context != context_boolean) &&
+                   (rhs_context != context_any)) {
                        parse_warn (cfile, "expecting boolean expressions");
                        skip_to_semi (cfile);
                        expression_dereference (&rhs, MDL);
@@ -4082,7 +4090,8 @@ int parse_expression (expr, cfile, lose, context, plhs, binop)
            case expr_binary_and:
            case expr_binary_or:
            case expr_binary_xor:
-               if (expression_context(rhs) != context_numeric) {
+               if ((rhs_context != context_numeric) &&
+                   (rhs_context != context_any)) {
                        parse_warn (cfile, "expecting numeric expressions");
                         skip_to_semi (cfile);
                         expression_dereference (&rhs, MDL);
index 691f365..8607892 100644 (file)
@@ -3,7 +3,7 @@
    Turn data structures into printable text. */
 
 /*
- * Copyright (c) 1995-2002 Internet Software Consortium.
+ * Copyright (c) 1995-2003 Internet Software Consortium.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ * 
+ * $Id: print.c,v 1.53.2.9 2003/03/31 03:06:56 dhankins Exp $ Copyright (c) 1995-2003 The Internet Software Consortium.  All rights reserved.
+ * $DragonFly: src/contrib/isc-dhcp/common/Attic/print.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
  */
 
-#ifndef lint
-static char copyright[] =
-"$Id: print.c,v 1.53.2.7 2002/11/17 02:26:59 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.\n";
-#endif /* not lint */
 
 #include "dhcpd.h"
 
@@ -223,7 +222,7 @@ void print_lease (lease)
               lease -> host ? lease -> host -> name : "<none>");
 }      
 
-#if defined (DEBUG)
+#if defined (DEBUG_PACKET)
 void dump_packet_option (struct option_cache *oc,
                         struct packet *packet,
                         struct lease *lease,
@@ -304,19 +303,46 @@ void dump_raw (buf, len)
        char lbuf [80];
        int lbix = 0;
 
-       lbuf [0] = 0;
+/*
+          1         2         3         4         5         6         7
+01234567890123456789012345678901234567890123456789012345678901234567890123
+280: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   .................  
+*/
+
+       memset(lbuf, ' ', 79);
+       lbuf [79] = 0;
 
        for (i = 0; i < len; i++) {
                if ((i & 15) == 0) {
-                       if (lbix)
-                               log_info (lbuf);
-                       sprintf (lbuf, "%03x:", i);
-                       lbix = 4;
+                 if (lbix) {
+                       lbuf[53]=' ';
+                       lbuf[54]=' ';
+                       lbuf[55]=' ';
+                       lbuf[73]='\0';
+                       log_info (lbuf);
+                 }
+                 memset(lbuf, ' ', 79);
+                 lbuf [79] = 0;
+                 sprintf (lbuf, "%03x:", i);
+                 lbix = 4;
                } else if ((i & 7) == 0)
                        lbuf [lbix++] = ' ';
+
+               if(isprint(buf[i])) {
+                 lbuf[56+(i%16)]=buf[i];
+               } else {
+                 lbuf[56+(i%16)]='.';
+               }
+
                sprintf (&lbuf [lbix], " %02x", buf [i]);
                lbix += 3;
+               lbuf[lbix]=' ';
+
        }
+       lbuf[53]=' ';
+       lbuf[54]=' ';
+       lbuf[55]=' ';
+       lbuf[73]='\0';
        log_info (lbuf);
 }
 
@@ -337,7 +363,7 @@ void hash_dump (table)
                        if (bp -> len)
                                dump_raw (bp -> name, bp -> len);
                        else
-                               log_info ((const char *)bp -> name);
+                               log_info ("%s", (const char *)bp -> name);
                }
        }
 }
@@ -1248,6 +1274,9 @@ void print_dns_status (int status, ns_updque *uq)
                      case T_TXT:
                        en = "TXT";
                        break;
+                     case T_KEY:
+                       en = "KEY";
+                       break;
                      case T_CNAME:
                        en = "CNAME";
                        break;
@@ -1268,13 +1297,19 @@ void print_dns_status (int status, ns_updque *uq)
                                if (s + 1 < end)
                                        *s++ = '"';
                        }
-                       if (s + u -> r_size < end) {
-                               memcpy (s, u -> r_data, u -> r_size);
-                               s += u -> r_size;
-                               if (u -> r_type == T_TXT) {
-                                       if (s + 1 < end)
-                                               *s++ = '"';
-                               }
+                       if(u->r_type == T_KEY) {
+                         strcat(s, "<keydata>");
+                         s+=strlen("<keydata>");
+                       }
+                       else {  
+                         if (s + u -> r_size < end) {
+                           memcpy (s, u -> r_data, u -> r_size);
+                           s += u -> r_size;
+                           if (u -> r_type == T_TXT) {
+                             if (s + 1 < end)
+                               *s++ = '"';
+                           }
+                         }
                        }
                }
                if (position) {
index e94c91d..e018f74 100644 (file)
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ *
+ * $Id: tables.c,v 1.51.2.7 2003/07/25 22:53:38 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.
+ * $FreeBSD: src/contrib/isc-dhcp/common/tables.c,v 1.10 2003/09/02 11:13:20 mbr Exp $
+ * $DragonFly: src/contrib/isc-dhcp/common/Attic/tables.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
  */
 
-#ifndef lint
-static char copyright[] =
-"$Id: tables.c,v 1.51.2.6 2002/11/17 02:26:59 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.\n";
-#endif /* not lint */
-
 #include "dhcpd.h"
 
 /* XXXDPN: Moved here from hash.c, when it moved to libomapi.  Not sure
@@ -179,181 +178,181 @@ struct option dhcp_options [256] = {
        { "user-class", "t",                            &dhcp_universe, 77 },
        { "slp-directory-agent", "fIa",                 &dhcp_universe, 78 },
        { "slp-service-scope", "fto",                   &dhcp_universe, 79 },
-       { "#80", "X",                                   &dhcp_universe, 80 },
+       { "unknown-80", "X",                            &dhcp_universe, 80 },
        { "fqdn", "Efqdn.",                             &dhcp_universe, 81 },
        { "relay-agent-information", "Eagent.",         &dhcp_universe, 82 },
-       { "#83", "X",                                   &dhcp_universe, 83 },
-       { "#84", "X",                                   &dhcp_universe, 84 },
+       { "unknown-83", "X",                            &dhcp_universe, 83 },
+       { "unknown-84", "X",                            &dhcp_universe, 84 },
        { "nds-servers", "IA",                          &dhcp_universe, 85 },
        { "nds-tree-name", "X",                         &dhcp_universe, 86 },
        { "nds-context", "X",                           &dhcp_universe, 87 },
-       { "#88", "X",                                   &dhcp_universe, 88 },
-       { "#89", "X",                                   &dhcp_universe, 89 },
-       { "#90", "X",                                   &dhcp_universe, 90 },
-       { "#91", "X",                                   &dhcp_universe, 91 },
-       { "#92", "X",                                   &dhcp_universe, 92 },
-       { "#93", "X",                                   &dhcp_universe, 93 },
-       { "#94", "X",                                   &dhcp_universe, 94 },
-       { "#95", "X",                                   &dhcp_universe, 95 },
-       { "#96", "X",                                   &dhcp_universe, 96 },
-       { "#97", "X",                                   &dhcp_universe, 97 },
+       { "unknown-88", "X",                            &dhcp_universe, 88 },
+       { "unknown-89", "X",                            &dhcp_universe, 89 },
+       { "unknown-90", "X",                            &dhcp_universe, 90 },
+       { "unknown-91", "X",                            &dhcp_universe, 91 },
+       { "unknown-92", "X",                            &dhcp_universe, 92 },
+       { "unknown-93", "X",                            &dhcp_universe, 93 },
+       { "unknown-94", "X",                            &dhcp_universe, 94 },
+       { "unknown-95", "X",                            &dhcp_universe, 95 },
+       { "unknown-96", "X",                            &dhcp_universe, 96 },
+       { "unknown-97", "X",                            &dhcp_universe, 97 },
        { "uap-servers", "t",                           &dhcp_universe, 98 },
-       { "#99", "X",                                   &dhcp_universe, 99 },
-       { "#100", "X",                                  &dhcp_universe, 100 },
-       { "#101", "X",                                  &dhcp_universe, 101 },
-       { "#102", "X",                                  &dhcp_universe, 102 },
-       { "#103", "X",                                  &dhcp_universe, 103 },
-       { "#104", "X",                                  &dhcp_universe, 104 },
-       { "#105", "X",                                  &dhcp_universe, 105 },
-       { "#106", "X",                                  &dhcp_universe, 106 },
-       { "#107", "X",                                  &dhcp_universe, 107 },
-       { "#108", "X",                                  &dhcp_universe, 108 },
-       { "#109", "X",                                  &dhcp_universe, 109 },
-       { "#110", "X",                                  &dhcp_universe, 110 },
-       { "#111", "X",                                  &dhcp_universe, 111 },
-       { "#112", "X",                                  &dhcp_universe, 112 },
-       { "#113", "X",                                  &dhcp_universe, 113 },
-       { "#114", "X",                                  &dhcp_universe, 114 },
-       { "#115", "X",                                  &dhcp_universe, 115 },
-       { "#116", "X",                                  &dhcp_universe, 116 },
-       { "#117", "X",                                  &dhcp_universe, 117 },
+       { "unknown-99", "X",                            &dhcp_universe, 99 },
+       { "unknown-100", "X",                           &dhcp_universe, 100 },
+       { "unknown-101", "X",                           &dhcp_universe, 101 },
+       { "unknown-102", "X",                           &dhcp_universe, 102 },
+       { "unknown-103", "X",                           &dhcp_universe, 103 },
+       { "unknown-104", "X",                           &dhcp_universe, 104 },
+       { "unknown-105", "X",                           &dhcp_universe, 105 },
+       { "unknown-106", "X",                           &dhcp_universe, 106 },
+       { "unknown-107", "X",                           &dhcp_universe, 107 },
+       { "unknown-108", "X",                           &dhcp_universe, 108 },
+       { "unknown-109", "X",                           &dhcp_universe, 109 },
+       { "unknown-110", "X",                                   &dhcp_universe, 110 },
+       { "unknown-111", "X",                           &dhcp_universe, 111 },
+       { "unknown-112", "X",                           &dhcp_universe, 112 },
+       { "unknown-113", "X",                           &dhcp_universe, 113 },
+       { "unknown-114", "X",                           &dhcp_universe, 114 },
+       { "unknown-115", "X",                           &dhcp_universe, 115 },
+       { "unknown-116", "X",                           &dhcp_universe, 116 },
+       { "unknown-117", "X",                           &dhcp_universe, 117 },
        { "subnet-selection", "X",                      &dhcp_universe, 118 },
-       { "#119", "X",                                  &dhcp_universe, 119 },
-       { "#120", "X",                                  &dhcp_universe, 120 },
-       { "#121", "X",                                  &dhcp_universe, 121 },
-       { "#122", "X",                                  &dhcp_universe, 122 },
-       { "#123", "X",                                  &dhcp_universe, 123 },
-       { "#124", "X",                                  &dhcp_universe, 124 },
-       { "#125", "X",                                  &dhcp_universe, 125 },
-       { "#126", "X",                                  &dhcp_universe, 126 },
-       { "#127", "X",                                  &dhcp_universe, 127 },
-       { "#128", "X",                                  &dhcp_universe, 128 },
-       { "#129", "X",                                  &dhcp_universe, 129 },
-       { "#130", "X",                                  &dhcp_universe, 130 },
-       { "#131", "X",                                  &dhcp_universe, 131 },
-       { "#132", "X",                                  &dhcp_universe, 132 },
-       { "#133", "X",                                  &dhcp_universe, 133 },
-       { "#134", "X",                                  &dhcp_universe, 134 },
-       { "#135", "X",                                  &dhcp_universe, 135 },
-       { "#136", "X",                                  &dhcp_universe, 136 },
-       { "#137", "X",                                  &dhcp_universe, 137 },
-       { "#138", "X",                                  &dhcp_universe, 138 },
-       { "#139", "X",                                  &dhcp_universe, 139 },
-       { "#140", "X",                                  &dhcp_universe, 140 },
-       { "#141", "X",                                  &dhcp_universe, 141 },
-       { "#142", "X",                                  &dhcp_universe, 142 },
-       { "#143", "X",                                  &dhcp_universe, 143 },
-       { "#144", "X",                                  &dhcp_universe, 144 },
-       { "#145", "X",                                  &dhcp_universe, 145 },
-       { "#146", "X",                                  &dhcp_universe, 146 },
-       { "#147", "X",                                  &dhcp_universe, 147 },
-       { "#148", "X",                                  &dhcp_universe, 148 },
-       { "#149", "X",                                  &dhcp_universe, 149 },
-       { "#150", "X",                                  &dhcp_universe, 150 },
-       { "#151", "X",                                  &dhcp_universe, 151 },
-       { "#152", "X",                                  &dhcp_universe, 152 },
-       { "#153", "X",                                  &dhcp_universe, 153 },
-       { "#154", "X",                                  &dhcp_universe, 154 },
-       { "#155", "X",                                  &dhcp_universe, 155 },
-       { "#156", "X",                                  &dhcp_universe, 156 },
-       { "#157", "X",                                  &dhcp_universe, 157 },
-       { "#158", "X",                                  &dhcp_universe, 158 },
-       { "#159", "X",                                  &dhcp_universe, 159 },
-       { "#160", "X",                                  &dhcp_universe, 160 },
-       { "#161", "X",                                  &dhcp_universe, 161 },
-       { "#162", "X",                                  &dhcp_universe, 162 },
-       { "#163", "X",                                  &dhcp_universe, 163 },
-       { "#164", "X",                                  &dhcp_universe, 164 },
-       { "#165", "X",                                  &dhcp_universe, 165 },
-       { "#166", "X",                                  &dhcp_universe, 166 },
-       { "#167", "X",                                  &dhcp_universe, 167 },
-       { "#168", "X",                                  &dhcp_universe, 168 },
-       { "#169", "X",                                  &dhcp_universe, 169 },
-       { "#170", "X",                                  &dhcp_universe, 170 },
-       { "#171", "X",                                  &dhcp_universe, 171 },
-       { "#172", "X",                                  &dhcp_universe, 172 },
-       { "#173", "X",                                  &dhcp_universe, 173 },
-       { "#174", "X",                                  &dhcp_universe, 174 },
-       { "#175", "X",                                  &dhcp_universe, 175 },
-       { "#176", "X",                                  &dhcp_universe, 176 },
-       { "#177", "X",                                  &dhcp_universe, 177 },
-       { "#178", "X",                                  &dhcp_universe, 178 },
-       { "#179", "X",                                  &dhcp_universe, 179 },
-       { "#180", "X",                                  &dhcp_universe, 180 },
-       { "#181", "X",                                  &dhcp_universe, 181 },
-       { "#182", "X",                                  &dhcp_universe, 182 },
-       { "#183", "X",                                  &dhcp_universe, 183 },
-       { "#184", "X",                                  &dhcp_universe, 184 },
-       { "#185", "X",                                  &dhcp_universe, 185 },
-       { "#186", "X",                                  &dhcp_universe, 186 },
-       { "#187", "X",                                  &dhcp_universe, 187 },
-       { "#188", "X",                                  &dhcp_universe, 188 },
-       { "#189", "X",                                  &dhcp_universe, 189 },
-       { "#190", "X",                                  &dhcp_universe, 190 },
-       { "#191", "X",                                  &dhcp_universe, 191 },
-       { "#192", "X",                                  &dhcp_universe, 192 },
-       { "#193", "X",                                  &dhcp_universe, 193 },
-       { "#194", "X",                                  &dhcp_universe, 194 },
-       { "#195", "X",                                  &dhcp_universe, 195 },
-       { "#196", "X",                                  &dhcp_universe, 196 },
-       { "#197", "X",                                  &dhcp_universe, 197 },
-       { "#198", "X",                                  &dhcp_universe, 198 },
-       { "#199", "X",                                  &dhcp_universe, 199 },
-       { "#200", "X",                                  &dhcp_universe, 200 },
-       { "#201", "X",                                  &dhcp_universe, 201 },
-       { "#202", "X",                                  &dhcp_universe, 202 },
-       { "#203", "X",                                  &dhcp_universe, 203 },
-       { "#204", "X",                                  &dhcp_universe, 204 },
-       { "#205", "X",                                  &dhcp_universe, 205 },
-       { "#206", "X",                                  &dhcp_universe, 206 },
-       { "#207", "X",                                  &dhcp_universe, 207 },
-       { "#208", "X",                                  &dhcp_universe, 208 },
-       { "#209", "X",                                  &dhcp_universe, 209 },
+       { "unknown-119", "X",                           &dhcp_universe, 119 },
+       { "unknown-120", "X",                           &dhcp_universe, 120 },
+       { "unknown-121", "X",                           &dhcp_universe, 121 },
+       { "unknown-122", "X",                           &dhcp_universe, 122 },
+       { "unknown-123", "X",                           &dhcp_universe, 123 },
+       { "unknown-124", "X",                           &dhcp_universe, 124 },
+       { "unknown-125", "X",                           &dhcp_universe, 125 },
+       { "unknown-126", "X",                           &dhcp_universe, 126 },
+       { "unknown-127", "X",                           &dhcp_universe, 127 },
+       { "unknown-128", "X",                           &dhcp_universe, 128 },
+       { "unknown-129", "X",                           &dhcp_universe, 129 },
+       { "unknown-130", "X",                           &dhcp_universe, 130 },
+       { "unknown-131", "X",                           &dhcp_universe, 131 },
+       { "unknown-132", "X",                           &dhcp_universe, 132 },
+       { "unknown-133", "X",                           &dhcp_universe, 133 },
+       { "unknown-134", "X",                           &dhcp_universe, 134 },
+       { "unknown-135", "X",                           &dhcp_universe, 135 },
+       { "unknown-136", "X",                           &dhcp_universe, 136 },
+       { "unknown-137", "X",                           &dhcp_universe, 137 },
+       { "unknown-138", "X",                           &dhcp_universe, 138 },
+       { "unknown-139", "X",                           &dhcp_universe, 139 },
+       { "unknown-140", "X",                           &dhcp_universe, 140 },
+       { "unknown-141", "X",                           &dhcp_universe, 141 },
+       { "unknown-142", "X",                           &dhcp_universe, 142 },
+       { "unknown-143", "X",                           &dhcp_universe, 143 },
+       { "unknown-144", "X",                           &dhcp_universe, 144 },
+       { "unknown-145", "X",                           &dhcp_universe, 145 },
+       { "unknown-146", "X",                           &dhcp_universe, 146 },
+       { "unknown-147", "X",                           &dhcp_universe, 147 },
+       { "unknown-148", "X",                           &dhcp_universe, 148 },
+       { "unknown-149", "X",                           &dhcp_universe, 149 },
+       { "unknown-150", "X",                           &dhcp_universe, 150 },
+       { "unknown-151", "X",                           &dhcp_universe, 151 },
+       { "unknown-152", "X",                           &dhcp_universe, 152 },
+       { "unknown-153", "X",                           &dhcp_universe, 153 },
+       { "unknown-154", "X",                           &dhcp_universe, 154 },
+       { "unknown-155", "X",                           &dhcp_universe, 155 },
+       { "unknown-156", "X",                           &dhcp_universe, 156 },
+       { "unknown-157", "X",                           &dhcp_universe, 157 },
+       { "unknown-158", "X",                           &dhcp_universe, 158 },
+       { "unknown-159", "X",                           &dhcp_universe, 159 },
+       { "unknown-160", "X",                           &dhcp_universe, 160 },
+       { "unknown-161", "X",                           &dhcp_universe, 161 },
+       { "unknown-162", "X",                           &dhcp_universe, 162 },
+       { "unknown-163", "X",                           &dhcp_universe, 163 },
+       { "unknown-164", "X",                           &dhcp_universe, 164 },
+       { "unknown-165", "X",                           &dhcp_universe, 165 },
+       { "unknown-166", "X",                           &dhcp_universe, 166 },
+       { "unknown-167", "X",                           &dhcp_universe, 167 },
+       { "unknown-168", "X",                           &dhcp_universe, 168 },
+       { "unknown-169", "X",                           &dhcp_universe, 169 },
+       { "unknown-170", "X",                           &dhcp_universe, 170 },
+       { "unknown-171", "X",                           &dhcp_universe, 171 },
+       { "unknown-172", "X",                           &dhcp_universe, 172 },
+       { "unknown-173", "X",                           &dhcp_universe, 173 },
+       { "unknown-174", "X",                           &dhcp_universe, 174 },
+       { "unknown-175", "X",                           &dhcp_universe, 175 },
+       { "unknown-176", "X",                           &dhcp_universe, 176 },
+       { "unknown-177", "X",                           &dhcp_universe, 177 },
+       { "unknown-178", "X",                           &dhcp_universe, 178 },
+       { "unknown-179", "X",                           &dhcp_universe, 179 },
+       { "unknown-180", "X",                           &dhcp_universe, 180 },
+       { "unknown-181", "X",                           &dhcp_universe, 181 },
+       { "unknown-182", "X",                           &dhcp_universe, 182 },
+       { "unknown-183", "X",                           &dhcp_universe, 183 },
+       { "unknown-184", "X",                           &dhcp_universe, 184 },
+       { "unknown-185", "X",                           &dhcp_universe, 185 },
+       { "unknown-186", "X",                           &dhcp_universe, 186 },
+       { "unknown-187", "X",                           &dhcp_universe, 187 },
+       { "unknown-188", "X",                           &dhcp_universe, 188 },
+       { "unknown-189", "X",                           &dhcp_universe, 189 },
+       { "unknown-190", "X",                           &dhcp_universe, 190 },
+       { "unknown-191", "X",                           &dhcp_universe, 191 },
+       { "unknown-192", "X",                           &dhcp_universe, 192 },
+       { "unknown-193", "X",                           &dhcp_universe, 193 },
+       { "unknown-194", "X",                           &dhcp_universe, 194 },
+       { "unknown-195", "X",                           &dhcp_universe, 195 },
+       { "unknown-196", "X",                           &dhcp_universe, 196 },
+       { "unknown-197", "X",                           &dhcp_universe, 197 },
+       { "unknown-198", "X",                           &dhcp_universe, 198 },
+       { "unknown-199", "X",                           &dhcp_universe, 199 },
+       { "unknown-200", "X",                           &dhcp_universe, 200 },
+       { "unknown-201", "X",                           &dhcp_universe, 201 },
+       { "unknown-202", "X",                           &dhcp_universe, 202 },
+       { "unknown-203", "X",                           &dhcp_universe, 203 },
+       { "unknown-204", "X",                           &dhcp_universe, 204 },
+       { "unknown-205", "X",                           &dhcp_universe, 205 },
+       { "unknown-206", "X",                           &dhcp_universe, 206 },
+       { "unknown-207", "X",                           &dhcp_universe, 207 },
+       { "unknown-208", "X",                           &dhcp_universe, 208 },
+       { "unknown-209", "X",                           &dhcp_universe, 209 },
        { "authenticate", "X",                          &dhcp_universe, 210 },
-       { "#211", "X",                                  &dhcp_universe, 211 },
-       { "#212", "X",                                  &dhcp_universe, 212 },
-       { "#213", "X",                                  &dhcp_universe, 213 },
-       { "#214", "X",                                  &dhcp_universe, 214 },
-       { "#215", "X",                                  &dhcp_universe, 215 },
-       { "#216", "X",                                  &dhcp_universe, 216 },
-       { "#217", "X",                                  &dhcp_universe, 217 },
-       { "#218", "X",                                  &dhcp_universe, 218 },
-       { "#219", "X",                                  &dhcp_universe, 219 },
-       { "#220", "X",                                  &dhcp_universe, 220 },
-       { "#221", "X",                                  &dhcp_universe, 221 },
-       { "#222", "X",                                  &dhcp_universe, 222 },
-       { "#223", "X",                                  &dhcp_universe, 223 },
-       { "#224", "X",                                  &dhcp_universe, 224 },
-       { "#225", "X",                                  &dhcp_universe, 225 },
-       { "#226", "X",                                  &dhcp_universe, 226 },
-       { "#227", "X",                                  &dhcp_universe, 227 },
-       { "#228", "X",                                  &dhcp_universe, 228 },
-       { "#229", "X",                                  &dhcp_universe, 229 },
-       { "#230", "X",                                  &dhcp_universe, 230 },
-       { "#231", "X",                                  &dhcp_universe, 231 },
-       { "#232", "X",                                  &dhcp_universe, 232 },
-       { "#233", "X",                                  &dhcp_universe, 233 },
-       { "#234", "X",                                  &dhcp_universe, 234 },
-       { "#235", "X",                                  &dhcp_universe, 235 },
-       { "#236", "X",                                  &dhcp_universe, 236 },
-       { "#237", "X",                                  &dhcp_universe, 237 },
-       { "#238", "X",                                  &dhcp_universe, 238 },
-       { "#239", "X",                                  &dhcp_universe, 239 },
-       { "#240", "X",                                  &dhcp_universe, 240 },
-       { "#241", "X",                                  &dhcp_universe, 241 },
-       { "#242", "X",                                  &dhcp_universe, 242 },
-       { "#243", "X",                                  &dhcp_universe, 243 },
-       { "#244", "X",                                  &dhcp_universe, 244 },
-       { "#245", "X",                                  &dhcp_universe, 245 },
-       { "#246", "X",                                  &dhcp_universe, 246 },
-       { "#247", "X",                                  &dhcp_universe, 247 },
-       { "#248", "X",                                  &dhcp_universe, 248 },
-       { "#249", "X",                                  &dhcp_universe, 249 },
-       { "#250", "X",                                  &dhcp_universe, 250 },
-       { "#251", "X",                                  &dhcp_universe, 251 },
-       { "#252", "X",                                  &dhcp_universe, 252 },
-       { "#253", "X",                                  &dhcp_universe, 253 },
-       { "#254", "X",                                  &dhcp_universe, 254 },
+       { "unknown-211", "X",                           &dhcp_universe, 211 },
+       { "unknown-212", "X",                           &dhcp_universe, 212 },
+       { "unknown-213", "X",                           &dhcp_universe, 213 },
+       { "unknown-214", "X",                           &dhcp_universe, 214 },
+       { "unknown-215", "X",                           &dhcp_universe, 215 },
+       { "unknown-216", "X",                           &dhcp_universe, 216 },
+       { "unknown-217", "X",                           &dhcp_universe, 217 },
+       { "unknown-218", "X",                           &dhcp_universe, 218 },
+       { "unknown-219", "X",                           &dhcp_universe, 219 },
+       { "unknown-220", "X",                           &dhcp_universe, 220 },
+       { "unknown-221", "X",                           &dhcp_universe, 221 },
+       { "unknown-222", "X",                           &dhcp_universe, 222 },
+       { "unknown-223", "X",                           &dhcp_universe, 223 },
+       { "unknown-224", "X",                           &dhcp_universe, 224 },
+       { "unknown-225", "X",                           &dhcp_universe, 225 },
+       { "unknown-226", "X",                           &dhcp_universe, 226 },
+       { "unknown-227", "X",                           &dhcp_universe, 227 },
+       { "unknown-228", "X",                           &dhcp_universe, 228 },
+       { "unknown-229", "X",                           &dhcp_universe, 229 },
+       { "unknown-230", "X",                           &dhcp_universe, 230 },
+       { "unknown-231", "X",                           &dhcp_universe, 231 },
+       { "unknown-232", "X",                           &dhcp_universe, 232 },
+       { "unknown-233", "X",                           &dhcp_universe, 233 },
+       { "unknown-234", "X",                           &dhcp_universe, 234 },
+       { "unknown-235", "X",                           &dhcp_universe, 235 },
+       { "unknown-236", "X",                           &dhcp_universe, 236 },
+       { "unknown-237", "X",                           &dhcp_universe, 237 },
+       { "unknown-238", "X",                           &dhcp_universe, 238 },
+       { "unknown-239", "X",                           &dhcp_universe, 239 },
+       { "unknown-240", "X",                           &dhcp_universe, 240 },
+       { "unknown-241", "X",                           &dhcp_universe, 241 },
+       { "unknown-242", "X",                           &dhcp_universe, 242 },
+       { "unknown-243", "X",                           &dhcp_universe, 243 },
+       { "unknown-244", "X",                           &dhcp_universe, 244 },
+       { "unknown-245", "X",                           &dhcp_universe, 245 },
+       { "unknown-246", "X",                           &dhcp_universe, 246 },
+       { "unknown-247", "X",                           &dhcp_universe, 247 },
+       { "unknown-248", "X",                           &dhcp_universe, 248 },
+       { "unknown-249", "X",                           &dhcp_universe, 249 },
+       { "unknown-250", "X",                           &dhcp_universe, 250 },
+       { "unknown-251", "X",                           &dhcp_universe, 251 },
+       { "unknown-252", "X",                           &dhcp_universe, 252 },
+       { "unknown-253", "X",                           &dhcp_universe, 253 },
+       { "unknown-254", "X",                           &dhcp_universe, 254 },
        { "option-end", "e",                            &dhcp_universe, 255 },
 };
 
@@ -371,250 +370,250 @@ struct option nwip_options [256] = {
        { "autoretry-secs", "B",                        &nwip_universe, 9 },
        { "nwip-1-1", "f",                              &nwip_universe, 10 },
        { "primary-dss", "I",                           &nwip_universe, 11 },
-       { "#12", "X",                           &nwip_universe, 12 },
-       { "#13", "X",                           &nwip_universe, 13 },
-       { "#14", "X",                           &nwip_universe, 14 },
-       { "#15", "X",                           &nwip_universe, 15 },
-       { "#16", "X",                           &nwip_universe, 16 },
-       { "#17", "X",                           &nwip_universe, 17 },
-       { "#18", "X",                           &nwip_universe, 18 },
-       { "#19", "X",                           &nwip_universe, 19 },
-       { "#20", "X",                           &nwip_universe, 20 },
-       { "#21", "X",                           &nwip_universe, 21 },
-       { "#22", "X",                           &nwip_universe, 22 },
-       { "#23", "X",                           &nwip_universe, 23 },
-       { "#24", "X",                           &nwip_universe, 24 },
-       { "#25", "X",                           &nwip_universe, 25 },
-       { "#26", "X",                           &nwip_universe, 26 },
-       { "#27", "X",                           &nwip_universe, 27 },
-       { "#28", "X",                           &nwip_universe, 28 },
-       { "#29", "X",                           &nwip_universe, 29 },
-       { "#30", "X",                           &nwip_universe, 30 },
-       { "#31", "X",                           &nwip_universe, 31 },
-       { "#32", "X",                           &nwip_universe, 32 },
-       { "#33", "X",                           &nwip_universe, 33 },
-       { "#34", "X",                           &nwip_universe, 34 },
-       { "#35", "X",                           &nwip_universe, 35 },
-       { "#36", "X",                           &nwip_universe, 36 },
-       { "#37", "X",                           &nwip_universe, 37 },
-       { "#38", "X",                           &nwip_universe, 38 },
-       { "#39", "X",                           &nwip_universe, 39 },
-       { "#40", "X",                           &nwip_universe, 40 },
-       { "#41", "X",                           &nwip_universe, 41 },
-       { "#42", "X",                           &nwip_universe, 42 },
-       { "#43", "X",                           &nwip_universe, 43 },
-       { "#44", "X",                           &nwip_universe, 44 },
-       { "#45", "X",                           &nwip_universe, 45 },
-       { "#46", "X",                           &nwip_universe, 46 },
-       { "#47", "X",                           &nwip_universe, 47 },
-       { "#48", "X",                           &nwip_universe, 48 },
-       { "#49", "X",                           &nwip_universe, 49 },
-       { "#50", "X",                           &nwip_universe, 50 },
-       { "#51", "X",                           &nwip_universe, 51 },
-       { "#52", "X",                           &nwip_universe, 52 },
-       { "#53", "X",                           &nwip_universe, 53 },
-       { "#54", "X",                           &nwip_universe, 54 },
-       { "#55", "X",                           &nwip_universe, 55 },
-       { "#56", "X",                           &nwip_universe, 56 },
-       { "#57", "X",                           &nwip_universe, 57 },
-       { "#58", "X",                           &nwip_universe, 58 },
-       { "#59", "X",                           &nwip_universe, 59 },
-       { "#60", "X",                           &nwip_universe, 60 },
-       { "#61", "X",                           &nwip_universe, 61 },
-       { "#62", "X",                           &nwip_universe, 62 },
-       { "#63", "X",                           &nwip_universe, 63 },
-       { "#64", "X",                           &nwip_universe, 64 },
-       { "#65", "X",                           &nwip_universe, 65 },
-       { "#66", "X",                           &nwip_universe, 66 },
-       { "#67", "X",                           &nwip_universe, 67 },
-       { "#68", "X",                           &nwip_universe, 68 },
-       { "#69", "X",                           &nwip_universe, 69 },
-       { "#70", "X",                           &nwip_universe, 70 },
-       { "#71", "X",                           &nwip_universe, 71 },
-       { "#72", "X",                           &nwip_universe, 72 },
-       { "#73", "X",                           &nwip_universe, 73 },
-       { "#74", "X",                           &nwip_universe, 74 },
-       { "#75", "X",                           &nwip_universe, 75 },
-       { "#76", "X",                           &nwip_universe, 76 },
-       { "#77", "X",                           &nwip_universe, 77 },
-       { "#78", "X",                           &nwip_universe, 78 },
-       { "#79", "X",                           &nwip_universe, 79 },
-       { "#80", "X",                           &nwip_universe, 80 },
-       { "#81", "X",                           &nwip_universe, 81 },
-       { "#82", "X",                           &nwip_universe, 82 },
-       { "#83", "X",                           &nwip_universe, 83 },
-       { "#84", "X",                           &nwip_universe, 84 },
-       { "#85", "X",                           &nwip_universe, 85 },
-       { "#86", "X",                           &nwip_universe, 86 },
-       { "#87", "X",                           &nwip_universe, 87 },
-       { "#88", "X",                           &nwip_universe, 88 },
-       { "#89", "X",                           &nwip_universe, 89 },
-       { "#90", "X",                           &nwip_universe, 90 },
-       { "#91", "X",                           &nwip_universe, 91 },
-       { "#92", "X",                           &nwip_universe, 92 },
-       { "#93", "X",                           &nwip_universe, 93 },
-       { "#94", "X",                           &nwip_universe, 94 },
-       { "#95", "X",                           &nwip_universe, 95 },
-       { "#96", "X",                           &nwip_universe, 96 },
-       { "#97", "X",                           &nwip_universe, 97 },
-       { "#98", "X",                           &nwip_universe, 98 },
-       { "#99", "X",                           &nwip_universe, 99 },
-       { "#100", "X",                          &nwip_universe, 100 },
-       { "#101", "X",                          &nwip_universe, 101 },
-       { "#102", "X",                          &nwip_universe, 102 },
-       { "#103", "X",                          &nwip_universe, 103 },
-       { "#104", "X",                          &nwip_universe, 104 },
-       { "#105", "X",                          &nwip_universe, 105 },
-       { "#106", "X",                          &nwip_universe, 106 },
-       { "#107", "X",                          &nwip_universe, 107 },
-       { "#108", "X",                          &nwip_universe, 108 },
-       { "#109", "X",                          &nwip_universe, 109 },
-       { "#110", "X",                          &nwip_universe, 110 },
-       { "#111", "X",                          &nwip_universe, 111 },
-       { "#112", "X",                          &nwip_universe, 112 },
-       { "#113", "X",                          &nwip_universe, 113 },
-       { "#114", "X",                          &nwip_universe, 114 },
-       { "#115", "X",                          &nwip_universe, 115 },
-       { "#116", "X",                          &nwip_universe, 116 },
-       { "#117", "X",                          &nwip_universe, 117 },
-       { "#118", "X",                          &nwip_universe, 118 },
-       { "#119", "X",                          &nwip_universe, 119 },
-       { "#120", "X",                          &nwip_universe, 120 },
-       { "#121", "X",                          &nwip_universe, 121 },
-       { "#122", "X",                          &nwip_universe, 122 },
-       { "#123", "X",                          &nwip_universe, 123 },
-       { "#124", "X",                          &nwip_universe, 124 },
-       { "#125", "X",                          &nwip_universe, 125 },
-       { "#126", "X",                          &nwip_universe, 126 },
-       { "#127", "X",                          &nwip_universe, 127 },
-       { "#128", "X",                          &nwip_universe, 128 },
-       { "#129", "X",                          &nwip_universe, 129 },
-       { "#130", "X",                          &nwip_universe, 130 },
-       { "#131", "X",                          &nwip_universe, 131 },
-       { "#132", "X",                          &nwip_universe, 132 },
-       { "#133", "X",                          &nwip_universe, 133 },
-       { "#134", "X",                          &nwip_universe, 134 },
-       { "#135", "X",                          &nwip_universe, 135 },
-       { "#136", "X",                          &nwip_universe, 136 },
-       { "#137", "X",                          &nwip_universe, 137 },
-       { "#138", "X",                          &nwip_universe, 138 },
-       { "#139", "X",                          &nwip_universe, 139 },
-       { "#140", "X",                          &nwip_universe, 140 },
-       { "#141", "X",                          &nwip_universe, 141 },
-       { "#142", "X",                          &nwip_universe, 142 },
-       { "#143", "X",                          &nwip_universe, 143 },
-       { "#144", "X",                          &nwip_universe, 144 },
-       { "#145", "X",                          &nwip_universe, 145 },
-       { "#146", "X",                          &nwip_universe, 146 },
-       { "#147", "X",                          &nwip_universe, 147 },
-       { "#148", "X",                          &nwip_universe, 148 },
-       { "#149", "X",                          &nwip_universe, 149 },
-       { "#150", "X",                          &nwip_universe, 150 },
-       { "#151", "X",                          &nwip_universe, 151 },
-       { "#152", "X",                          &nwip_universe, 152 },
-       { "#153", "X",                          &nwip_universe, 153 },
-       { "#154", "X",                          &nwip_universe, 154 },
-       { "#155", "X",                          &nwip_universe, 155 },
-       { "#156", "X",                          &nwip_universe, 156 },
-       { "#157", "X",                          &nwip_universe, 157 },
-       { "#158", "X",                          &nwip_universe, 158 },
-       { "#159", "X",                          &nwip_universe, 159 },
-       { "#160", "X",                          &nwip_universe, 160 },
-       { "#161", "X",                          &nwip_universe, 161 },
-       { "#162", "X",                          &nwip_universe, 162 },
-       { "#163", "X",                          &nwip_universe, 163 },
-       { "#164", "X",                          &nwip_universe, 164 },
-       { "#165", "X",                          &nwip_universe, 165 },
-       { "#166", "X",                          &nwip_universe, 166 },
-       { "#167", "X",                          &nwip_universe, 167 },
-       { "#168", "X",                          &nwip_universe, 168 },
-       { "#169", "X",                          &nwip_universe, 169 },
-       { "#170", "X",                          &nwip_universe, 170 },
-       { "#171", "X",                          &nwip_universe, 171 },
-       { "#172", "X",                          &nwip_universe, 172 },
-       { "#173", "X",                          &nwip_universe, 173 },
-       { "#174", "X",                          &nwip_universe, 174 },
-       { "#175", "X",                          &nwip_universe, 175 },
-       { "#176", "X",                          &nwip_universe, 176 },
-       { "#177", "X",                          &nwip_universe, 177 },
-       { "#178", "X",                          &nwip_universe, 178 },
-       { "#179", "X",                          &nwip_universe, 179 },
-       { "#180", "X",                          &nwip_universe, 180 },
-       { "#181", "X",                          &nwip_universe, 181 },
-       { "#182", "X",                          &nwip_universe, 182 },
-       { "#183", "X",                          &nwip_universe, 183 },
-       { "#184", "X",                          &nwip_universe, 184 },
-       { "#185", "X",                          &nwip_universe, 185 },
-       { "#186", "X",                          &nwip_universe, 186 },
-       { "#187", "X",                          &nwip_universe, 187 },
-       { "#188", "X",                          &nwip_universe, 188 },
-       { "#189", "X",                          &nwip_universe, 189 },
-       { "#190", "X",                          &nwip_universe, 190 },
-       { "#191", "X",                          &nwip_universe, 191 },
-       { "#192", "X",                          &nwip_universe, 192 },
-       { "#193", "X",                          &nwip_universe, 193 },
-       { "#194", "X",                          &nwip_universe, 194 },
-       { "#195", "X",                          &nwip_universe, 195 },
-       { "#196", "X",                          &nwip_universe, 196 },
-       { "#197", "X",                          &nwip_universe, 197 },
-       { "#198", "X",                          &nwip_universe, 198 },
-       { "#199", "X",                          &nwip_universe, 199 },
-       { "#200", "X",                          &nwip_universe, 200 },
-       { "#201", "X",                          &nwip_universe, 201 },
-       { "#202", "X",                          &nwip_universe, 202 },
-       { "#203", "X",                          &nwip_universe, 203 },
-       { "#204", "X",                          &nwip_universe, 204 },
-       { "#205", "X",                          &nwip_universe, 205 },
-       { "#206", "X",                          &nwip_universe, 206 },
-       { "#207", "X",                          &nwip_universe, 207 },
-       { "#208", "X",                          &nwip_universe, 208 },
-       { "#209", "X",                          &nwip_universe, 209 },
-       { "#210", "X",                          &nwip_universe, 210 },
-       { "#211", "X",                          &nwip_universe, 211 },
-       { "#212", "X",                          &nwip_universe, 212 },
-       { "#213", "X",                          &nwip_universe, 213 },
-       { "#214", "X",                          &nwip_universe, 214 },
-       { "#215", "X",                          &nwip_universe, 215 },
-       { "#216", "X",                          &nwip_universe, 216 },
-       { "#217", "X",                          &nwip_universe, 217 },
-       { "#218", "X",                          &nwip_universe, 218 },
-       { "#219", "X",                          &nwip_universe, 219 },
-       { "#220", "X",                          &nwip_universe, 220 },
-       { "#221", "X",                          &nwip_universe, 221 },
-       { "#222", "X",                          &nwip_universe, 222 },
-       { "#223", "X",                          &nwip_universe, 223 },
-       { "#224", "X",                          &nwip_universe, 224 },
-       { "#225", "X",                          &nwip_universe, 225 },
-       { "#226", "X",                          &nwip_universe, 226 },
-       { "#227", "X",                          &nwip_universe, 227 },
-       { "#228", "X",                          &nwip_universe, 228 },
-       { "#229", "X",                          &nwip_universe, 229 },
-       { "#230", "X",                          &nwip_universe, 230 },
-       { "#231", "X",                          &nwip_universe, 231 },
-       { "#232", "X",                          &nwip_universe, 232 },
-       { "#233", "X",                          &nwip_universe, 233 },
-       { "#234", "X",                          &nwip_universe, 234 },
-       { "#235", "X",                          &nwip_universe, 235 },
-       { "#236", "X",                          &nwip_universe, 236 },
-       { "#237", "X",                          &nwip_universe, 237 },
-       { "#238", "X",                          &nwip_universe, 238 },
-       { "#239", "X",                          &nwip_universe, 239 },
-       { "#240", "X",                          &nwip_universe, 240 },
-       { "#241", "X",                          &nwip_universe, 241 },
-       { "#242", "X",                          &nwip_universe, 242 },
-       { "#243", "X",                          &nwip_universe, 243 },
-       { "#244", "X",                          &nwip_universe, 244 },
-       { "#245", "X",                          &nwip_universe, 245 },
-       { "#246", "X",                          &nwip_universe, 246 },
-       { "#247", "X",                          &nwip_universe, 247 },
-       { "#248", "X",                          &nwip_universe, 248 },
-       { "#249", "X",                          &nwip_universe, 249 },
-       { "#250", "X",                          &nwip_universe, 250 },
-       { "#251", "X",                          &nwip_universe, 251 },
-       { "#252", "X",                          &nwip_universe, 252 },
-       { "#253", "X",                          &nwip_universe, 253 },
-       { "#254", "X",                          &nwip_universe, 254 },
-       { "#end", "e",                          &nwip_universe, 255 },
+       { "unknown-12", "X",                            &nwip_universe, 12 },
+       { "unknown-13", "X",                            &nwip_universe, 13 },
+       { "unknown-14", "X",                            &nwip_universe, 14 },
+       { "unknown-15", "X",                            &nwip_universe, 15 },
+       { "unknown-16", "X",                            &nwip_universe, 16 },
+       { "unknown-17", "X",                            &nwip_universe, 17 },
+       { "unknown-18", "X",                            &nwip_universe, 18 },
+       { "unknown-19", "X",                            &nwip_universe, 19 },
+       { "unknown-20", "X",                            &nwip_universe, 20 },
+       { "unknown-21", "X",                            &nwip_universe, 21 },
+       { "unknown-22", "X",                            &nwip_universe, 22 },
+       { "unknown-23", "X",                            &nwip_universe, 23 },
+       { "unknown-24", "X",                            &nwip_universe, 24 },
+       { "unknown-25", "X",                            &nwip_universe, 25 },
+       { "unknown-26", "X",                            &nwip_universe, 26 },
+       { "unknown-27", "X",                            &nwip_universe, 27 },
+       { "unknown-28", "X",                            &nwip_universe, 28 },
+       { "unknown-29", "X",                            &nwip_universe, 29 },
+       { "unknown-30", "X",                            &nwip_universe, 30 },
+       { "unknown-31", "X",                            &nwip_universe, 31 },
+       { "unknown-32", "X",                            &nwip_universe, 32 },
+       { "unknown-33", "X",                            &nwip_universe, 33 },
+       { "unknown-34", "X",                            &nwip_universe, 34 },
+       { "unknown-35", "X",                            &nwip_universe, 35 },
+       { "unknown-36", "X",                            &nwip_universe, 36 },
+       { "unknown-37", "X",                            &nwip_universe, 37 },
+       { "unknown-38", "X",                            &nwip_universe, 38 },
+       { "unknown-39", "X",                            &nwip_universe, 39 },
+       { "unknown-40", "X",                            &nwip_universe, 40 },
+       { "unknown-41", "X",                            &nwip_universe, 41 },
+       { "unknown-42", "X",                            &nwip_universe, 42 },
+       { "unknown-43", "X",                            &nwip_universe, 43 },
+       { "unknown-44", "X",                            &nwip_universe, 44 },
+       { "unknown-45", "X",                            &nwip_universe, 45 },
+       { "unknown-46", "X",                            &nwip_universe, 46 },
+       { "unknown-47", "X",                            &nwip_universe, 47 },
+       { "unknown-48", "X",                            &nwip_universe, 48 },
+       { "unknown-49", "X",                            &nwip_universe, 49 },
+       { "unknown-50", "X",                            &nwip_universe, 50 },
+       { "unknown-51", "X",                            &nwip_universe, 51 },
+       { "unknown-52", "X",                            &nwip_universe, 52 },
+       { "unknown-53", "X",                            &nwip_universe, 53 },
+       { "unknown-54", "X",                            &nwip_universe, 54 },
+       { "unknown-55", "X",                            &nwip_universe, 55 },
+       { "unknown-56", "X",                            &nwip_universe, 56 },
+       { "unknown-57", "X",                            &nwip_universe, 57 },
+       { "unknown-58", "X",                            &nwip_universe, 58 },
+       { "unknown-59", "X",                            &nwip_universe, 59 },
+       { "unknown-60", "X",                            &nwip_universe, 60 },
+       { "unknown-61", "X",                            &nwip_universe, 61 },
+       { "unknown-62", "X",                            &nwip_universe, 62 },
+       { "unknown-63", "X",                            &nwip_universe, 63 },
+       { "unknown-64", "X",                            &nwip_universe, 64 },
+       { "unknown-65", "X",                            &nwip_universe, 65 },
+       { "unknown-66", "X",                            &nwip_universe, 66 },
+       { "unknown-67", "X",                            &nwip_universe, 67 },
+       { "unknown-68", "X",                            &nwip_universe, 68 },
+       { "unknown-69", "X",                            &nwip_universe, 69 },
+       { "unknown-70", "X",                            &nwip_universe, 70 },
+       { "unknown-71", "X",                            &nwip_universe, 71 },
+       { "unknown-72", "X",                            &nwip_universe, 72 },
+       { "unknown-73", "X",                            &nwip_universe, 73 },
+       { "unknown-74", "X",                            &nwip_universe, 74 },
+       { "unknown-75", "X",                            &nwip_universe, 75 },
+       { "unknown-76", "X",                            &nwip_universe, 76 },
+       { "unknown-77", "X",                            &nwip_universe, 77 },
+       { "unknown-78", "X",                            &nwip_universe, 78 },
+       { "unknown-79", "X",                            &nwip_universe, 79 },
+       { "unknown-80", "X",                            &nwip_universe, 80 },
+       { "unknown-81", "X",                            &nwip_universe, 81 },
+       { "unknown-82", "X",                            &nwip_universe, 82 },
+       { "unknown-83", "X",                            &nwip_universe, 83 },
+       { "unknown-84", "X",                            &nwip_universe, 84 },
+       { "unknown-85", "X",                            &nwip_universe, 85 },
+       { "unknown-86", "X",                            &nwip_universe, 86 },
+       { "unknown-87", "X",                            &nwip_universe, 87 },
+       { "unknown-88", "X",                            &nwip_universe, 88 },
+       { "unknown-89", "X",                            &nwip_universe, 89 },
+       { "unknown-90", "X",                            &nwip_universe, 90 },
+       { "unknown-91", "X",                            &nwip_universe, 91 },
+       { "unknown-92", "X",                            &nwip_universe, 92 },
+       { "unknown-93", "X",                            &nwip_universe, 93 },
+       { "unknown-94", "X",                            &nwip_universe, 94 },
+       { "unknown-95", "X",                            &nwip_universe, 95 },
+       { "unknown-96", "X",                            &nwip_universe, 96 },
+       { "unknown-97", "X",                            &nwip_universe, 97 },
+       { "unknown-98", "X",                            &nwip_universe, 98 },
+       { "unknown-99", "X",                            &nwip_universe, 99 },
+       { "unknown-100", "X",                           &nwip_universe, 100 },
+       { "unknown-101", "X",                           &nwip_universe, 101 },
+       { "unknown-102", "X",                           &nwip_universe, 102 },
+       { "unknown-103", "X",                           &nwip_universe, 103 },
+       { "unknown-104", "X",                           &nwip_universe, 104 },
+       { "unknown-105", "X",                           &nwip_universe, 105 },
+       { "unknown-106", "X",                           &nwip_universe, 106 },
+       { "unknown-107", "X",                           &nwip_universe, 107 },
+       { "unknown-108", "X",                           &nwip_universe, 108 },
+       { "unknown-109", "X",                           &nwip_universe, 109 },
+       { "unknown-110", "X",                           &nwip_universe, 110 },
+       { "unknown-111", "X",                           &nwip_universe, 111 },
+       { "unknown-112", "X",                           &nwip_universe, 112 },
+       { "unknown-113", "X",                           &nwip_universe, 113 },
+       { "unknown-114", "X",                           &nwip_universe, 114 },
+       { "unknown-115", "X",                           &nwip_universe, 115 },
+       { "unknown-116", "X",                           &nwip_universe, 116 },
+       { "unknown-117", "X",                           &nwip_universe, 117 },
+       { "unknown-118", "X",                           &nwip_universe, 118 },
+       { "unknown-119", "X",                           &nwip_universe, 119 },
+       { "unknown-120", "X",                           &nwip_universe, 120 },
+       { "unknown-121", "X",                           &nwip_universe, 121 },
+       { "unknown-122", "X",                           &nwip_universe, 122 },
+       { "unknown-123", "X",                           &nwip_universe, 123 },
+       { "unknown-124", "X",                           &nwip_universe, 124 },
+       { "unknown-125", "X",                           &nwip_universe, 125 },
+       { "unknown-126", "X",                           &nwip_universe, 126 },
+       { "unknown-127", "X",                           &nwip_universe, 127 },
+       { "unknown-128", "X",                           &nwip_universe, 128 },
+       { "unknown-129", "X",                           &nwip_universe, 129 },
+       { "unknown-130", "X",                           &nwip_universe, 130 },
+       { "unknown-131", "X",                           &nwip_universe, 131 },
+       { "unknown-132", "X",                           &nwip_universe, 132 },
+       { "unknown-133", "X",                           &nwip_universe, 133 },
+       { "unknown-134", "X",                           &nwip_universe, 134 },
+       { "unknown-135", "X",                           &nwip_universe, 135 },
+       { "unknown-136", "X",                           &nwip_universe, 136 },
+       { "unknown-137", "X",                           &nwip_universe, 137 },
+       { "unknown-138", "X",                           &nwip_universe, 138 },
+       { "unknown-139", "X",                           &nwip_universe, 139 },
+       { "unknown-140", "X",                           &nwip_universe, 140 },
+       { "unknown-141", "X",                           &nwip_universe, 141 },
+       { "unknown-142", "X",                           &nwip_universe, 142 },
+       { "unknown-143", "X",                           &nwip_universe, 143 },
+       { "unknown-144", "X",                           &nwip_universe, 144 },
+       { "unknown-145", "X",                           &nwip_universe, 145 },
+       { "unknown-146", "X",                           &nwip_universe, 146 },
+       { "unknown-147", "X",                           &nwip_universe, 147 },
+       { "unknown-148", "X",                           &nwip_universe, 148 },
+       { "unknown-149", "X",                           &nwip_universe, 149 },
+       { "unknown-150", "X",                           &nwip_universe, 150 },
+       { "unknown-151", "X",                           &nwip_universe, 151 },
+       { "unknown-152", "X",                           &nwip_universe, 152 },
+       { "unknown-153", "X",                           &nwip_universe, 153 },
+       { "unknown-154", "X",                           &nwip_universe, 154 },
+       { "unknown-155", "X",                           &nwip_universe, 155 },
+       { "unknown-156", "X",                           &nwip_universe, 156 },
+       { "unknown-157", "X",                           &nwip_universe, 157 },
+       { "unknown-158", "X",                           &nwip_universe, 158 },
+       { "unknown-159", "X",                           &nwip_universe, 159 },
+       { "unknown-160", "X",                           &nwip_universe, 160 },
+       { "unknown-161", "X",                           &nwip_universe, 161 },
+       { "unknown-162", "X",                           &nwip_universe, 162 },
+       { "unknown-163", "X",                           &nwip_universe, 163 },
+       { "unknown-164", "X",                           &nwip_universe, 164 },
+       { "unknown-165", "X",                           &nwip_universe, 165 },
+       { "unknown-166", "X",                           &nwip_universe, 166 },
+       { "unknown-167", "X",                           &nwip_universe, 167 },
+       { "unknown-168", "X",                           &nwip_universe, 168 },
+       { "unknown-169", "X",                           &nwip_universe, 169 },
+       { "unknown-170", "X",                           &nwip_universe, 170 },
+       { "unknown-171", "X",                           &nwip_universe, 171 },
+       { "unknown-172", "X",                           &nwip_universe, 172 },
+       { "unknown-173", "X",                           &nwip_universe, 173 },
+       { "unknown-174", "X",                           &nwip_universe, 174 },
+       { "unknown-175", "X",                           &nwip_universe, 175 },
+       { "unknown-176", "X",                           &nwip_universe, 176 },
+       { "unknown-177", "X",                           &nwip_universe, 177 },
+       { "unknown-178", "X",                           &nwip_universe, 178 },
+       { "unknown-179", "X",                           &nwip_universe, 179 },
+       { "unknown-180", "X",                           &nwip_universe, 180 },
+       { "unknown-181", "X",                           &nwip_universe, 181 },
+       { "unknown-182", "X",                           &nwip_universe, 182 },
+       { "unknown-183", "X",                           &nwip_universe, 183 },
+       { "unknown-184", "X",                           &nwip_universe, 184 },
+       { "unknown-185", "X",                           &nwip_universe, 185 },
+       { "unknown-186", "X",                           &nwip_universe, 186 },
+       { "unknown-187", "X",                           &nwip_universe, 187 },
+       { "unknown-188", "X",                           &nwip_universe, 188 },
+       { "unknown-189", "X",                           &nwip_universe, 189 },
+       { "unknown-190", "X",                           &nwip_universe, 190 },
+       { "unknown-191", "X",                           &nwip_universe, 191 },
+       { "unknown-192", "X",                           &nwip_universe, 192 },
+       { "unknown-193", "X",                           &nwip_universe, 193 },
+       { "unknown-194", "X",                           &nwip_universe, 194 },
+       { "unknown-195", "X",                           &nwip_universe, 195 },
+       { "unknown-196", "X",                           &nwip_universe, 196 },
+       { "unknown-197", "X",                           &nwip_universe, 197 },
+       { "unknown-198", "X",                           &nwip_universe, 198 },
+       { "unknown-199", "X",                           &nwip_universe, 199 },
+       { "unknown-200", "X",                           &nwip_universe, 200 },
+       { "unknown-201", "X",                           &nwip_universe, 201 },
+       { "unknown-202", "X",                           &nwip_universe, 202 },
+       { "unknown-203", "X",                           &nwip_universe, 203 },
+       { "unknown-204", "X",                           &nwip_universe, 204 },
+       { "unknown-205", "X",                           &nwip_universe, 205 },
+       { "unknown-206", "X",                           &nwip_universe, 206 },
+       { "unknown-207", "X",                           &nwip_universe, 207 },
+       { "unknown-208", "X",                           &nwip_universe, 208 },
+       { "unknown-209", "X",                           &nwip_universe, 209 },
+       { "unknown-210", "X",                           &nwip_universe, 210 },
+       { "unknown-211", "X",                           &nwip_universe, 211 },
+       { "unknown-212", "X",                           &nwip_universe, 212 },
+       { "unknown-213", "X",                           &nwip_universe, 213 },
+       { "unknown-214", "X",                           &nwip_universe, 214 },
+       { "unknown-215", "X",                           &nwip_universe, 215 },
+       { "unknown-216", "X",                           &nwip_universe, 216 },
+       { "unknown-217", "X",                           &nwip_universe, 217 },
+       { "unknown-218", "X",                           &nwip_universe, 218 },
+       { "unknown-219", "X",                           &nwip_universe, 219 },
+       { "unknown-220", "X",                           &nwip_universe, 220 },
+       { "unknown-221", "X",                           &nwip_universe, 221 },
+       { "unknown-222", "X",                           &nwip_universe, 222 },
+       { "unknown-223", "X",                           &nwip_universe, 223 },
+       { "unknown-224", "X",                           &nwip_universe, 224 },
+       { "unknown-225", "X",                           &nwip_universe, 225 },
+       { "unknown-226", "X",                           &nwip_universe, 226 },
+       { "unknown-227", "X",                           &nwip_universe, 227 },
+       { "unknown-228", "X",                           &nwip_universe, 228 },
+       { "unknown-229", "X",                           &nwip_universe, 229 },
+       { "unknown-230", "X",                           &nwip_universe, 230 },
+       { "unknown-231", "X",                           &nwip_universe, 231 },
+       { "unknown-232", "X",                           &nwip_universe, 232 },
+       { "unknown-233", "X",                           &nwip_universe, 233 },
+       { "unknown-234", "X",                           &nwip_universe, 234 },
+       { "unknown-235", "X",                           &nwip_universe, 235 },
+       { "unknown-236", "X",                           &nwip_universe, 236 },
+       { "unknown-237", "X",                           &nwip_universe, 237 },
+       { "unknown-238", "X",                           &nwip_universe, 238 },
+       { "unknown-239", "X",                           &nwip_universe, 239 },
+       { "unknown-240", "X",                           &nwip_universe, 240 },
+       { "unknown-241", "X",                           &nwip_universe, 241 },
+       { "unknown-242", "X",                           &nwip_universe, 242 },
+       { "unknown-243", "X",                           &nwip_universe, 243 },
+       { "unknown-244", "X",                           &nwip_universe, 244 },
+       { "unknown-245", "X",                           &nwip_universe, 245 },
+       { "unknown-246", "X",                           &nwip_universe, 246 },
+       { "unknown-247", "X",                           &nwip_universe, 247 },
+       { "unknown-248", "X",                           &nwip_universe, 248 },
+       { "unknown-249", "X",                           &nwip_universe, 249 },
+       { "unknown-250", "X",                           &nwip_universe, 250 },
+       { "unknown-251", "X",                           &nwip_universe, 251 },
+       { "unknown-252", "X",                           &nwip_universe, 252 },
+       { "unknown-253", "X",                           &nwip_universe, 253 },
+       { "unknown-254", "X",                           &nwip_universe, 254 },
+       { "unknown-end", "e",                           &nwip_universe, 255 },
 };
 
 struct universe fqdn_universe;
@@ -628,253 +627,253 @@ struct option fqdn_options [256] = {
        { "hostname", "t",                              &fqdn_universe, 6 },
        { "domainname", "t",                            &fqdn_universe, 7 },
        { "fqdn", "t",                                  &fqdn_universe, 8 },
-       { "#9", "X",                            &fqdn_universe, 9 },
-       { "#10", "X",                           &fqdn_universe, 10 },
-       { "#11", "X",                           &fqdn_universe, 11 },
-       { "#12", "X",                           &fqdn_universe, 12 },
-       { "#13", "X",                           &fqdn_universe, 13 },
-       { "#14", "X",                           &fqdn_universe, 14 },
-       { "#15", "X",                           &fqdn_universe, 15 },
-       { "#16", "X",                           &fqdn_universe, 16 },
-       { "#17", "X",                           &fqdn_universe, 17 },
-       { "#18", "X",                           &fqdn_universe, 18 },
-       { "#19", "X",                           &fqdn_universe, 19 },
-       { "#20", "X",                           &fqdn_universe, 20 },
-       { "#21", "X",                           &fqdn_universe, 21 },
-       { "#22", "X",                           &fqdn_universe, 22 },
-       { "#23", "X",                           &fqdn_universe, 23 },
-       { "#24", "X",                           &fqdn_universe, 24 },
-       { "#25", "X",                           &fqdn_universe, 25 },
-       { "#26", "X",                           &fqdn_universe, 26 },
-       { "#27", "X",                           &fqdn_universe, 27 },
-       { "#28", "X",                           &fqdn_universe, 28 },
-       { "#29", "X",                           &fqdn_universe, 29 },
-       { "#30", "X",                           &fqdn_universe, 30 },
-       { "#31", "X",                           &fqdn_universe, 31 },
-       { "#32", "X",                           &fqdn_universe, 32 },
-       { "#33", "X",                           &fqdn_universe, 33 },
-       { "#34", "X",                           &fqdn_universe, 34 },
-       { "#35", "X",                           &fqdn_universe, 35 },
-       { "#36", "X",                           &fqdn_universe, 36 },
-       { "#37", "X",                           &fqdn_universe, 37 },
-       { "#38", "X",                           &fqdn_universe, 38 },
-       { "#39", "X",                           &fqdn_universe, 39 },
-       { "#40", "X",                           &fqdn_universe, 40 },
-       { "#41", "X",                           &fqdn_universe, 41 },
-       { "#42", "X",                           &fqdn_universe, 42 },
-       { "#43", "X",                           &fqdn_universe, 43 },
-       { "#44", "X",                           &fqdn_universe, 44 },
-       { "#45", "X",                           &fqdn_universe, 45 },
-       { "#46", "X",                           &fqdn_universe, 46 },
-       { "#47", "X",                           &fqdn_universe, 47 },
-       { "#48", "X",                           &fqdn_universe, 48 },
-       { "#49", "X",                           &fqdn_universe, 49 },
-       { "#50", "X",                           &fqdn_universe, 50 },
-       { "#51", "X",                           &fqdn_universe, 51 },
-       { "#52", "X",                           &fqdn_universe, 52 },
-       { "#53", "X",                           &fqdn_universe, 53 },
-       { "#54", "X",                           &fqdn_universe, 54 },
-       { "#55", "X",                           &fqdn_universe, 55 },
-       { "#56", "X",                           &fqdn_universe, 56 },
-       { "#57", "X",                           &fqdn_universe, 57 },
-       { "#58", "X",                           &fqdn_universe, 58 },
-       { "#59", "X",                           &fqdn_universe, 59 },
-       { "#60", "X",                           &fqdn_universe, 60 },
-       { "#61", "X",                           &fqdn_universe, 61 },
-       { "#62", "X",                           &fqdn_universe, 62 },
-       { "#63", "X",                           &fqdn_universe, 63 },
-       { "#64", "X",                           &fqdn_universe, 64 },
-       { "#65", "X",                           &fqdn_universe, 65 },
-       { "#66", "X",                           &fqdn_universe, 66 },
-       { "#67", "X",                           &fqdn_universe, 67 },
-       { "#68", "X",                           &fqdn_universe, 68 },
-       { "#69", "X",                           &fqdn_universe, 69 },
-       { "#70", "X",                           &fqdn_universe, 70 },
-       { "#71", "X",                           &fqdn_universe, 71 },
-       { "#72", "X",                           &fqdn_universe, 72 },
-       { "#73", "X",                           &fqdn_universe, 73 },
-       { "#74", "X",                           &fqdn_universe, 74 },
-       { "#75", "X",                           &fqdn_universe, 75 },
-       { "#76", "X",                           &fqdn_universe, 76 },
-       { "#77", "X",                           &fqdn_universe, 77 },
-       { "#78", "X",                           &fqdn_universe, 78 },
-       { "#79", "X",                           &fqdn_universe, 79 },
-       { "#80", "X",                           &fqdn_universe, 80 },
-       { "#81", "X",                           &fqdn_universe, 81 },
-       { "#82", "X",                           &fqdn_universe, 82 },
-       { "#83", "X",                           &fqdn_universe, 83 },
-       { "#84", "X",                           &fqdn_universe, 84 },
-       { "#85", "X",                           &fqdn_universe, 85 },
-       { "#86", "X",                           &fqdn_universe, 86 },
-       { "#87", "X",                           &fqdn_universe, 87 },
-       { "#88", "X",                           &fqdn_universe, 88 },
-       { "#89", "X",                           &fqdn_universe, 89 },
-       { "#90", "X",                           &fqdn_universe, 90 },
-       { "#91", "X",                           &fqdn_universe, 91 },
-       { "#92", "X",                           &fqdn_universe, 92 },
-       { "#93", "X",                           &fqdn_universe, 93 },
-       { "#94", "X",                           &fqdn_universe, 94 },
-       { "#95", "X",                           &fqdn_universe, 95 },
-       { "#96", "X",                           &fqdn_universe, 96 },
-       { "#97", "X",                           &fqdn_universe, 97 },
-       { "#98", "X",                           &fqdn_universe, 98 },
-       { "#99", "X",                           &fqdn_universe, 99 },
-       { "#100", "X",                          &fqdn_universe, 100 },
-       { "#101", "X",                          &fqdn_universe, 101 },
-       { "#102", "X",                          &fqdn_universe, 102 },
-       { "#103", "X",                          &fqdn_universe, 103 },
-       { "#104", "X",                          &fqdn_universe, 104 },
-       { "#105", "X",                          &fqdn_universe, 105 },
-       { "#106", "X",                          &fqdn_universe, 106 },
-       { "#107", "X",                          &fqdn_universe, 107 },
-       { "#108", "X",                          &fqdn_universe, 108 },
-       { "#109", "X",                          &fqdn_universe, 109 },
-       { "#110", "X",                          &fqdn_universe, 110 },
-       { "#111", "X",                          &fqdn_universe, 111 },
-       { "#112", "X",                          &fqdn_universe, 112 },
-       { "#113", "X",                          &fqdn_universe, 113 },
-       { "#114", "X",                          &fqdn_universe, 114 },
-       { "#115", "X",                          &fqdn_universe, 115 },
-       { "#116", "X",                          &fqdn_universe, 116 },
-       { "#117", "X",                          &fqdn_universe, 117 },
-       { "#118", "X",                          &fqdn_universe, 118 },
-       { "#119", "X",                          &fqdn_universe, 119 },
-       { "#120", "X",                          &fqdn_universe, 120 },
-       { "#121", "X",                          &fqdn_universe, 121 },
-       { "#122", "X",                          &fqdn_universe, 122 },
-       { "#123", "X",                          &fqdn_universe, 123 },
-       { "#124", "X",                          &fqdn_universe, 124 },
-       { "#125", "X",                          &fqdn_universe, 125 },
-       { "#126", "X",                          &fqdn_universe, 126 },
-       { "#127", "X",                          &fqdn_universe, 127 },
-       { "#128", "X",                          &fqdn_universe, 128 },
-       { "#129", "X",                          &fqdn_universe, 129 },
-       { "#130", "X",                          &fqdn_universe, 130 },
-       { "#131", "X",                          &fqdn_universe, 131 },
-       { "#132", "X",                          &fqdn_universe, 132 },
-       { "#133", "X",                          &fqdn_universe, 133 },
-       { "#134", "X",                          &fqdn_universe, 134 },
-       { "#135", "X",                          &fqdn_universe, 135 },
-       { "#136", "X",                          &fqdn_universe, 136 },
-       { "#137", "X",                          &fqdn_universe, 137 },
-       { "#138", "X",                          &fqdn_universe, 138 },
-       { "#139", "X",                          &fqdn_universe, 139 },
-       { "#140", "X",                          &fqdn_universe, 140 },
-       { "#141", "X",                          &fqdn_universe, 141 },
-       { "#142", "X",                          &fqdn_universe, 142 },
-       { "#143", "X",                          &fqdn_universe, 143 },
-       { "#144", "X",                          &fqdn_universe, 144 },
-       { "#145", "X",                          &fqdn_universe, 145 },
-       { "#146", "X",                          &fqdn_universe, 146 },
-       { "#147", "X",                          &fqdn_universe, 147 },
-       { "#148", "X",                          &fqdn_universe, 148 },
-       { "#149", "X",                          &fqdn_universe, 149 },
-       { "#150", "X",                          &fqdn_universe, 150 },
-       { "#151", "X",                          &fqdn_universe, 151 },
-       { "#152", "X",                          &fqdn_universe, 152 },
-       { "#153", "X",                          &fqdn_universe, 153 },
-       { "#154", "X",                          &fqdn_universe, 154 },
-       { "#155", "X",                          &fqdn_universe, 155 },
-       { "#156", "X",                          &fqdn_universe, 156 },
-       { "#157", "X",                          &fqdn_universe, 157 },
-       { "#158", "X",                          &fqdn_universe, 158 },
-       { "#159", "X",                          &fqdn_universe, 159 },
-       { "#160", "X",                          &fqdn_universe, 160 },
-       { "#161", "X",                          &fqdn_universe, 161 },
-       { "#162", "X",                          &fqdn_universe, 162 },
-       { "#163", "X",                          &fqdn_universe, 163 },
-       { "#164", "X",                          &fqdn_universe, 164 },
-       { "#165", "X",                          &fqdn_universe, 165 },
-       { "#166", "X",                          &fqdn_universe, 166 },
-       { "#167", "X",                          &fqdn_universe, 167 },
-       { "#168", "X",                          &fqdn_universe, 168 },
-       { "#169", "X",                          &fqdn_universe, 169 },
-       { "#170", "X",                          &fqdn_universe, 170 },
-       { "#171", "X",                          &fqdn_universe, 171 },
-       { "#172", "X",                          &fqdn_universe, 172 },
-       { "#173", "X",                          &fqdn_universe, 173 },
-       { "#174", "X",                          &fqdn_universe, 174 },
-       { "#175", "X",                          &fqdn_universe, 175 },
-       { "#176", "X",                          &fqdn_universe, 176 },
-       { "#177", "X",                          &fqdn_universe, 177 },
-       { "#178", "X",                          &fqdn_universe, 178 },
-       { "#179", "X",                          &fqdn_universe, 179 },
-       { "#180", "X",                          &fqdn_universe, 180 },
-       { "#181", "X",                          &fqdn_universe, 181 },
-       { "#182", "X",                          &fqdn_universe, 182 },
-       { "#183", "X",                          &fqdn_universe, 183 },
-       { "#184", "X",                          &fqdn_universe, 184 },
-       { "#185", "X",                          &fqdn_universe, 185 },
-       { "#186", "X",                          &fqdn_universe, 186 },
-       { "#187", "X",                          &fqdn_universe, 187 },
-       { "#188", "X",                          &fqdn_universe, 188 },
-       { "#189", "X",                          &fqdn_universe, 189 },
-       { "#190", "X",                          &fqdn_universe, 190 },
-       { "#191", "X",                          &fqdn_universe, 191 },
-       { "#192", "X",                          &fqdn_universe, 192 },
-       { "#193", "X",                          &fqdn_universe, 193 },
-       { "#194", "X",                          &fqdn_universe, 194 },
-       { "#195", "X",                          &fqdn_universe, 195 },
-       { "#196", "X",                          &fqdn_universe, 196 },
-       { "#197", "X",                          &fqdn_universe, 197 },
-       { "#198", "X",                          &fqdn_universe, 198 },
-       { "#199", "X",                          &fqdn_universe, 199 },
-       { "#200", "X",                          &fqdn_universe, 200 },
-       { "#201", "X",                          &fqdn_universe, 201 },
-       { "#202", "X",                          &fqdn_universe, 202 },
-       { "#203", "X",                          &fqdn_universe, 203 },
-       { "#204", "X",                          &fqdn_universe, 204 },
-       { "#205", "X",                          &fqdn_universe, 205 },
-       { "#206", "X",                          &fqdn_universe, 206 },
-       { "#207", "X",                          &fqdn_universe, 207 },
-       { "#208", "X",                          &fqdn_universe, 208 },
-       { "#209", "X",                          &fqdn_universe, 209 },
-       { "#210", "X",                          &fqdn_universe, 210 },
-       { "#211", "X",                          &fqdn_universe, 211 },
-       { "#212", "X",                          &fqdn_universe, 212 },
-       { "#213", "X",                          &fqdn_universe, 213 },
-       { "#214", "X",                          &fqdn_universe, 214 },
-       { "#215", "X",                          &fqdn_universe, 215 },
-       { "#216", "X",                          &fqdn_universe, 216 },
-       { "#217", "X",                          &fqdn_universe, 217 },
-       { "#218", "X",                          &fqdn_universe, 218 },
-       { "#219", "X",                          &fqdn_universe, 219 },
-       { "#220", "X",                          &fqdn_universe, 220 },
-       { "#221", "X",                          &fqdn_universe, 221 },
-       { "#222", "X",                          &fqdn_universe, 222 },
-       { "#223", "X",                          &fqdn_universe, 223 },
-       { "#224", "X",                          &fqdn_universe, 224 },
-       { "#225", "X",                          &fqdn_universe, 225 },
-       { "#226", "X",                          &fqdn_universe, 226 },
-       { "#227", "X",                          &fqdn_universe, 227 },
-       { "#228", "X",                          &fqdn_universe, 228 },
-       { "#229", "X",                          &fqdn_universe, 229 },
-       { "#230", "X",                          &fqdn_universe, 230 },
-       { "#231", "X",                          &fqdn_universe, 231 },
-       { "#232", "X",                          &fqdn_universe, 232 },
-       { "#233", "X",                          &fqdn_universe, 233 },
-       { "#234", "X",                          &fqdn_universe, 234 },
-       { "#235", "X",                          &fqdn_universe, 235 },
-       { "#236", "X",                          &fqdn_universe, 236 },
-       { "#237", "X",                          &fqdn_universe, 237 },
-       { "#238", "X",                          &fqdn_universe, 238 },
-       { "#239", "X",                          &fqdn_universe, 239 },
-       { "#240", "X",                          &fqdn_universe, 240 },
-       { "#241", "X",                          &fqdn_universe, 241 },
-       { "#242", "X",                          &fqdn_universe, 242 },
-       { "#243", "X",                          &fqdn_universe, 243 },
-       { "#244", "X",                          &fqdn_universe, 244 },
-       { "#245", "X",                          &fqdn_universe, 245 },
-       { "#246", "X",                          &fqdn_universe, 246 },
-       { "#247", "X",                          &fqdn_universe, 247 },
-       { "#248", "X",                          &fqdn_universe, 248 },
-       { "#249", "X",                          &fqdn_universe, 249 },
-       { "#250", "X",                          &fqdn_universe, 250 },
-       { "#251", "X",                          &fqdn_universe, 251 },
-       { "#252", "X",                          &fqdn_universe, 252 },
-       { "#253", "X",                          &fqdn_universe, 253 },
-       { "#254", "X",                          &fqdn_universe, 254 },
-       { "#end", "e",                          &fqdn_universe, 255 },
+       { "unknown-9", "X",                             &fqdn_universe, 9 },
+       { "unknown-10", "X",                            &fqdn_universe, 10 },
+       { "unknown-11", "X",                            &fqdn_universe, 11 },
+       { "unknown-12", "X",                            &fqdn_universe, 12 },
+       { "unknown-13", "X",                            &fqdn_universe, 13 },
+       { "unknown-14", "X",                            &fqdn_universe, 14 },
+       { "unknown-15", "X",                            &fqdn_universe, 15 },
+       { "unknown-16", "X",                            &fqdn_universe, 16 },
+       { "unknown-17", "X",                            &fqdn_universe, 17 },
+       { "unknown-18", "X",                            &fqdn_universe, 18 },
+       { "unknown-19", "X",                            &fqdn_universe, 19 },
+       { "unknown-20", "X",                            &fqdn_universe, 20 },
+       { "unknown-21", "X",                            &fqdn_universe, 21 },
+       { "unknown-22", "X",                            &fqdn_universe, 22 },
+       { "unknown-23", "X",                            &fqdn_universe, 23 },
+       { "unknown-24", "X",                            &fqdn_universe, 24 },
+       { "unknown-25", "X",                            &fqdn_universe, 25 },
+       { "unknown-26", "X",                            &fqdn_universe, 26 },
+       { "unknown-27", "X",                            &fqdn_universe, 27 },
+       { "unknown-28", "X",                            &fqdn_universe, 28 },
+       { "unknown-29", "X",                            &fqdn_universe, 29 },
+       { "unknown-30", "X",                            &fqdn_universe, 30 },
+       { "unknown-31", "X",                            &fqdn_universe, 31 },
+       { "unknown-32", "X",                            &fqdn_universe, 32 },
+       { "unknown-33", "X",                            &fqdn_universe, 33 },
+       { "unknown-34", "X",                            &fqdn_universe, 34 },
+       { "unknown-35", "X",                            &fqdn_universe, 35 },
+       { "unknown-36", "X",                            &fqdn_universe, 36 },
+       { "unknown-37", "X",                            &fqdn_universe, 37 },
+       { "unknown-38", "X",                            &fqdn_universe, 38 },
+       { "unknown-39", "X",                            &fqdn_universe, 39 },
+       { "unknown-40", "X",                            &fqdn_universe, 40 },
+       { "unknown-41", "X",                            &fqdn_universe, 41 },
+       { "unknown-42", "X",                            &fqdn_universe, 42 },
+       { "unknown-43", "X",                            &fqdn_universe, 43 },
+       { "unknown-44", "X",                            &fqdn_universe, 44 },
+       { "unknown-45", "X",                            &fqdn_universe, 45 },
+       { "unknown-46", "X",                            &fqdn_universe, 46 },
+       { "unknown-47", "X",                            &fqdn_universe, 47 },
+       { "unknown-48", "X",                            &fqdn_universe, 48 },
+       { "unknown-49", "X",                            &fqdn_universe, 49 },
+       { "unknown-50", "X",                            &fqdn_universe, 50 },
+       { "unknown-51", "X",                            &fqdn_universe, 51 },
+       { "unknown-52", "X",                            &fqdn_universe, 52 },
+       { "unknown-53", "X",                            &fqdn_universe, 53 },
+       { "unknown-54", "X",                            &fqdn_universe, 54 },
+       { "unknown-55", "X",                            &fqdn_universe, 55 },
+       { "unknown-56", "X",                            &fqdn_universe, 56 },
+       { "unknown-57", "X",                            &fqdn_universe, 57 },
+       { "unknown-58", "X",                            &fqdn_universe, 58 },
+       { "unknown-59", "X",                            &fqdn_universe, 59 },
+       { "unknown-60", "X",                            &fqdn_universe, 60 },
+       { "unknown-61", "X",                            &fqdn_universe, 61 },
+       { "unknown-62", "X",                            &fqdn_universe, 62 },
+       { "unknown-63", "X",                            &fqdn_universe, 63 },
+       { "unknown-64", "X",                            &fqdn_universe, 64 },
+       { "unknown-65", "X",                            &fqdn_universe, 65 },
+       { "unknown-66", "X",                            &fqdn_universe, 66 },
+       { "unknown-67", "X",                            &fqdn_universe, 67 },
+       { "unknown-68", "X",                            &fqdn_universe, 68 },
+       { "unknown-69", "X",                            &fqdn_universe, 69 },
+       { "unknown-70", "X",                            &fqdn_universe, 70 },
+       { "unknown-71", "X",                            &fqdn_universe, 71 },
+       { "unknown-72", "X",                            &fqdn_universe, 72 },
+       { "unknown-73", "X",                            &fqdn_universe, 73 },
+       { "unknown-74", "X",                            &fqdn_universe, 74 },
+       { "unknown-75", "X",                            &fqdn_universe, 75 },
+       { "unknown-76", "X",                            &fqdn_universe, 76 },
+       { "unknown-77", "X",                            &fqdn_universe, 77 },
+       { "unknown-78", "X",                            &fqdn_universe, 78 },
+       { "unknown-79", "X",                            &fqdn_universe, 79 },
+       { "unknown-80", "X",                            &fqdn_universe, 80 },
+       { "unknown-81", "X",                            &fqdn_universe, 81 },
+       { "unknown-82", "X",                            &fqdn_universe, 82 },
+       { "unknown-83", "X",                            &fqdn_universe, 83 },
+       { "unknown-84", "X",                            &fqdn_universe, 84 },
+       { "unknown-85", "X",                            &fqdn_universe, 85 },
+       { "unknown-86", "X",                            &fqdn_universe, 86 },
+       { "unknown-87", "X",                            &fqdn_universe, 87 },
+       { "unknown-88", "X",                            &fqdn_universe, 88 },
+       { "unknown-89", "X",                            &fqdn_universe, 89 },
+       { "unknown-90", "X",                            &fqdn_universe, 90 },
+       { "unknown-91", "X",                            &fqdn_universe, 91 },
+       { "unknown-92", "X",                            &fqdn_universe, 92 },
+       { "unknown-93", "X",                            &fqdn_universe, 93 },
+       { "unknown-94", "X",                            &fqdn_universe, 94 },
+       { "unknown-95", "X",                            &fqdn_universe, 95 },
+       { "unknown-96", "X",                            &fqdn_universe, 96 },
+       { "unknown-97", "X",                            &fqdn_universe, 97 },
+       { "unknown-98", "X",                            &fqdn_universe, 98 },
+       { "unknown-99", "X",                            &fqdn_universe, 99 },
+       { "unknown-100", "X",                           &fqdn_universe, 100 },
+       { "unknown-101", "X",                           &fqdn_universe, 101 },
+       { "unknown-102", "X",                           &fqdn_universe, 102 },
+       { "unknown-103", "X",                           &fqdn_universe, 103 },
+       { "unknown-104", "X",                           &fqdn_universe, 104 },
+       { "unknown-105", "X",                           &fqdn_universe, 105 },
+       { "unknown-106", "X",                           &fqdn_universe, 106 },
+       { "unknown-107", "X",                           &fqdn_universe, 107 },
+       { "unknown-108", "X",                           &fqdn_universe, 108 },
+       { "unknown-109", "X",                           &fqdn_universe, 109 },
+       { "unknown-110", "X",                           &fqdn_universe, 110 },
+       { "unknown-111", "X",                           &fqdn_universe, 111 },
+       { "unknown-112", "X",                           &fqdn_universe, 112 },
+       { "unknown-113", "X",                           &fqdn_universe, 113 },
+       { "unknown-114", "X",                           &fqdn_universe, 114 },
+       { "unknown-115", "X",                           &fqdn_universe, 115 },
+       { "unknown-116", "X",                           &fqdn_universe, 116 },
+       { "unknown-117", "X",                           &fqdn_universe, 117 },
+       { "unknown-118", "X",                           &fqdn_universe, 118 },
+       { "unknown-119", "X",                           &fqdn_universe, 119 },
+       { "unknown-120", "X",                           &fqdn_universe, 120 },
+       { "unknown-121", "X",                           &fqdn_universe, 121 },
+       { "unknown-122", "X",                           &fqdn_universe, 122 },
+       { "unknown-123", "X",                           &fqdn_universe, 123 },
+       { "unknown-124", "X",                           &fqdn_universe, 124 },
+       { "unknown-125", "X",                           &fqdn_universe, 125 },
+       { "unknown-126", "X",                           &fqdn_universe, 126 },
+       { "unknown-127", "X",                           &fqdn_universe, 127 },
+       { "unknown-128", "X",                           &fqdn_universe, 128 },
+       { "unknown-129", "X",                           &fqdn_universe, 129 },
+       { "unknown-130", "X",                           &fqdn_universe, 130 },
+       { "unknown-131", "X",                           &fqdn_universe, 131 },
+       { "unknown-132", "X",                           &fqdn_universe, 132 },
+       { "unknown-133", "X",                           &fqdn_universe, 133 },
+       { "unknown-134", "X",                           &fqdn_universe, 134 },
+       { "unknown-135", "X",                           &fqdn_universe, 135 },
+       { "unknown-136", "X",                           &fqdn_universe, 136 },
+       { "unknown-137", "X",                           &fqdn_universe, 137 },
+       { "unknown-138", "X",                           &fqdn_universe, 138 },
+       { "unknown-139", "X",                           &fqdn_universe, 139 },
+       { "unknown-140", "X",                           &fqdn_universe, 140 },
+       { "unknown-141", "X",                           &fqdn_universe, 141 },
+       { "unknown-142", "X",                           &fqdn_universe, 142 },
+       { "unknown-143", "X",                           &fqdn_universe, 143 },
+       { "unknown-144", "X",                           &fqdn_universe, 144 },
+       { "unknown-145", "X",                           &fqdn_universe, 145 },
+       { "unknown-146", "X",                           &fqdn_universe, 146 },
+       { "unknown-147", "X",                           &fqdn_universe, 147 },
+       { "unknown-148", "X",                           &fqdn_universe, 148 },
+       { "unknown-149", "X",                           &fqdn_universe, 149 },
+       { "unknown-150", "X",                           &fqdn_universe, 150 },
+       { "unknown-151", "X",                           &fqdn_universe, 151 },
+       { "unknown-152", "X",                           &fqdn_universe, 152 },
+       { "unknown-153", "X",                           &fqdn_universe, 153 },
+       { "unknown-154", "X",                           &fqdn_universe, 154 },
+       { "unknown-155", "X",                           &fqdn_universe, 155 },
+       { "unknown-156", "X",                           &fqdn_universe, 156 },
+       { "unknown-157", "X",                           &fqdn_universe, 157 },
+       { "unknown-158", "X",                           &fqdn_universe, 158 },
+       { "unknown-159", "X",                           &fqdn_universe, 159 },
+       { "unknown-160", "X",                           &fqdn_universe, 160 },
+       { "unknown-161", "X",                           &fqdn_universe, 161 },
+       { "unknown-162", "X",                           &fqdn_universe, 162 },
+       { "unknown-163", "X",                           &fqdn_universe, 163 },
+       { "unknown-164", "X",                           &fqdn_universe, 164 },
+       { "unknown-165", "X",                           &fqdn_universe, 165 },
+       { "unknown-166", "X",                           &fqdn_universe, 166 },
+       { "unknown-167", "X",                           &fqdn_universe, 167 },
+       { "unknown-168", "X",                           &fqdn_universe, 168 },
+       { "unknown-169", "X",                           &fqdn_universe, 169 },
+       { "unknown-170", "X",                           &fqdn_universe, 170 },
+       { "unknown-171", "X",                           &fqdn_universe, 171 },
+       { "unknown-172", "X",                           &fqdn_universe, 172 },
+       { "unknown-173", "X",                           &fqdn_universe, 173 },
+       { "unknown-174", "X",                           &fqdn_universe, 174 },
+       { "unknown-175", "X",                           &fqdn_universe, 175 },
+       { "unknown-176", "X",                           &fqdn_universe, 176 },
+       { "unknown-177", "X",                           &fqdn_universe, 177 },
+       { "unknown-178", "X",                           &fqdn_universe, 178 },
+       { "unknown-179", "X",                           &fqdn_universe, 179 },
+       { "unknown-180", "X",                           &fqdn_universe, 180 },
+       { "unknown-181", "X",                           &fqdn_universe, 181 },
+       { "unknown-182", "X",                           &fqdn_universe, 182 },
+       { "unknown-183", "X",                           &fqdn_universe, 183 },
+       { "unknown-184", "X",                           &fqdn_universe, 184 },
+       { "unknown-185", "X",                           &fqdn_universe, 185 },
+       { "unknown-186", "X",                           &fqdn_universe, 186 },
+       { "unknown-187", "X",                           &fqdn_universe, 187 },
+       { "unknown-188", "X",                           &fqdn_universe, 188 },
+       { "unknown-189", "X",                           &fqdn_universe, 189 },
+       { "unknown-190", "X",                           &fqdn_universe, 190 },
+       { "unknown-191", "X",                           &fqdn_universe, 191 },
+       { "unknown-192", "X",                           &fqdn_universe, 192 },
+       { "unknown-193", "X",                           &fqdn_universe, 193 },
+       { "unknown-194", "X",                           &fqdn_universe, 194 },
+       { "unknown-195", "X",                           &fqdn_universe, 195 },
+       { "unknown-196", "X",                           &fqdn_universe, 196 },
+       { "unknown-197", "X",                           &fqdn_universe, 197 },
+       { "unknown-198", "X",                           &fqdn_universe, 198 },
+       { "unknown-199", "X",                           &fqdn_universe, 199 },
+       { "unknown-200", "X",                           &fqdn_universe, 200 },
+       { "unknown-201", "X",                           &fqdn_universe, 201 },
+       { "unknown-202", "X",                           &fqdn_universe, 202 },
+       { "unknown-203", "X",                           &fqdn_universe, 203 },
+       { "unknown-204", "X",                           &fqdn_universe, 204 },
+       { "unknown-205", "X",                           &fqdn_universe, 205 },
+       { "unknown-206", "X",                           &fqdn_universe, 206 },
+       { "unknown-207", "X",                           &fqdn_universe, 207 },
+       { "unknown-208", "X",                           &fqdn_universe, 208 },
+       { "unknown-209", "X",                           &fqdn_universe, 209 },
+       { "unknown-210", "X",                           &fqdn_universe, 210 },
+       { "unknown-211", "X",                           &fqdn_universe, 211 },
+       { "unknown-212", "X",                           &fqdn_universe, 212 },
+       { "unknown-213", "X",                           &fqdn_universe, 213 },
+       { "unknown-214", "X",                           &fqdn_universe, 214 },
+       { "unknown-215", "X",                           &fqdn_universe, 215 },
+       { "unknown-216", "X",                           &fqdn_universe, 216 },
+       { "unknown-217", "X",                           &fqdn_universe, 217 },
+       { "unknown-218", "X",                           &fqdn_universe, 218 },
+       { "unknown-219", "X",                           &fqdn_universe, 219 },
+       { "unknown-220", "X",                           &fqdn_universe, 220 },
+       { "unknown-221", "X",                           &fqdn_universe, 221 },
+       { "unknown-222", "X",                           &fqdn_universe, 222 },
+       { "unknown-223", "X",                           &fqdn_universe, 223 },
+       { "unknown-224", "X",                           &fqdn_universe, 224 },
+       { "unknown-225", "X",                           &fqdn_universe, 225 },
+       { "unknown-226", "X",                           &fqdn_universe, 226 },
+       { "unknown-227", "X",                           &fqdn_universe, 227 },
+       { "unknown-228", "X",                           &fqdn_universe, 228 },
+       { "unknown-229", "X",                           &fqdn_universe, 229 },
+       { "unknown-230", "X",                           &fqdn_universe, 230 },
+       { "unknown-231", "X",                           &fqdn_universe, 231 },
+       { "unknown-232", "X",                           &fqdn_universe, 232 },
+       { "unknown-233", "X",                           &fqdn_universe, 233 },
+       { "unknown-234", "X",                           &fqdn_universe, 234 },
+       { "unknown-235", "X",                           &fqdn_universe, 235 },
+       { "unknown-236", "X",                           &fqdn_universe, 236 },
+       { "unknown-237", "X",                           &fqdn_universe, 237 },
+       { "unknown-238", "X",                           &fqdn_universe, 238 },
+       { "unknown-239", "X",                           &fqdn_universe, 239 },
+       { "unknown-240", "X",                           &fqdn_universe, 240 },
+       { "unknown-241", "X",                           &fqdn_universe, 241 },
+       { "unknown-242", "X",                           &fqdn_universe, 242 },
+       { "unknown-243", "X",                           &fqdn_universe, 243 },
+       { "unknown-244", "X",                           &fqdn_universe, 244 },
+       { "unknown-245", "X",                           &fqdn_universe, 245 },
+       { "unknown-246", "X",                           &fqdn_universe, 246 },
+       { "unknown-247", "X",                           &fqdn_universe, 247 },
+       { "unknown-248", "X",                           &fqdn_universe, 248 },
+       { "unknown-249", "X",                           &fqdn_universe, 249 },
+       { "unknown-250", "X",                           &fqdn_universe, 250 },
+       { "unknown-251", "X",                           &fqdn_universe, 251 },
+       { "unknown-252", "X",                           &fqdn_universe, 252 },
+       { "unknown-253", "X",                           &fqdn_universe, 253 },
+       { "unknown-254", "X",                           &fqdn_universe, 254 },
+       { "unknown-end", "e",                           &fqdn_universe, 255 },
 };
 
 const char *hardware_types [] = {
index 566e36b..1fd40cc 100644 (file)
@@ -40,8 +40,8 @@
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
  *
- * $FreeBSD: src/contrib/isc-dhcp/includes/cf/freebsd.h,v 1.3.4.2 2003/03/02 16:42:40 murray Exp $
- * $DragonFly: src/contrib/isc-dhcp/includes/cf/Attic/freebsd.h,v 1.2 2003/06/17 04:24:02 dillon Exp $
+ * $FreeBSD: src/contrib/isc-dhcp/includes/cf/freebsd.h,v 1.6 2003/06/29 18:46:17 gordon Exp $
+ * $DragonFly: src/contrib/isc-dhcp/includes/cf/Attic/freebsd.h,v 1.3 2003/10/11 21:14:21 dillon Exp $
  */
 
 #include <syslog.h>
@@ -104,6 +104,10 @@ extern int h_errno;
 #define SOCKLEN_T int
 #endif
 
+#ifdef RESCUE
+#define _PATH_DHCLIENT_SCRIPT  "/sbin/dhclient-script"
+#endif
+
 #if defined (USE_DEFAULT_NETWORK)
 #  define USE_BPF
 #endif
@@ -114,6 +118,9 @@ extern int h_errno;
  #endif /* HAVE_DEV_RANDOM */
 
 const char *cmds[] = {
+#ifndef RESCUE
+       /* rescue environment can't rely on these ... */
+       /* Actually, /sbin/dhclient shouldn't use these, either. */
        "/bin/ps -axlw 2>&1",
        "/usr/sbin/arp -an 2>&1",
        "/usr/bin/netstat -an 2>&1",
@@ -124,10 +131,12 @@ const char *cmds[] = {
        "/usr/sbin/iostat  2>&1",
        "/usr/bin/vmstat  2>&1",
        "/usr/bin/w  2>&1",
+#endif
        NULL
 };
 
 const char *dirs[] = {
+#ifndef RESCUE
        "/tmp",
        "/usr/tmp",
        ".",
@@ -137,13 +146,16 @@ const char *dirs[] = {
        "/var/mail",
        "/home",
        "/usr/home",
+#endif
        NULL
 };
 
 const char *files[] = {
+#ifndef RESCUE
        "/var/log/messages",
        "/var/log/wtmp",
        "/var/log/lastlog",
+#endif
        NULL
 };
 #endif /* NEED_PRAND_CONF */
index 891678c..47ea675 100644 (file)
@@ -39,6 +39,9 @@
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ *
+ * $FreeBSD: src/contrib/isc-dhcp/includes/dhcpd.h,v 1.8 2003/09/02 11:13:21 mbr Exp $
+ * $DragonFly: src/contrib/isc-dhcp/includes/Attic/dhcpd.h,v 1.2 2003/10/11 21:14:19 dillon Exp $
  */
 
 #ifndef __CYGWIN32__
@@ -99,6 +102,9 @@ typedef struct hash_table class_hash_t;
         (((x) >> OPTION_HASH_EXP) & \
          (OPTION_HASH_PTWO - 1))) % OPTION_HASH_SIZE;
 
+#define NOLINK 0
+#define HAVELINK 1
+
 enum dhcp_shutdown_state {
        shutdown_listeners,
        shutdown_omapi_connections,
@@ -420,6 +426,11 @@ struct lease_state {
 #define SV_UPDATE_STATIC_LEASES                43
 #define SV_LOG_FACILITY                        44
 #define SV_DO_FORWARD_UPDATES          45
+#define SV_PING_TIMEOUT         46
+
+#if !defined (DEFAULT_PING_TIMEOUT)
+# define DEFAULT_PING_TIMEOUT 1
+#endif
 
 #if !defined (DEFAULT_DEFAULT_LEASE_TIME)
 # define DEFAULT_DEFAULT_LEASE_TIME 43200
@@ -778,6 +789,11 @@ struct interface_info {
        unsigned remote_id_len;         /* Length of Remote ID. */
 
        char name [IFNAMSIZ];           /* Its name... */
+       int ieee80211;                  /* True if media is ieee802.11 */
+       int havemedia;                  /* True if we have a media table */
+       int linkstate;                  /* True if we have link */
+       int polling;                    /* True if polling is enabled */
+       int forcediscover;              /* True if a discover is needed */
        int index;                      /* Its index. */
        int rfdesc;                     /* Its read file descriptor. */
        int wfdesc;                     /* Its write file descriptor, if
@@ -1853,6 +1869,10 @@ void send_release PROTO ((void *));
 void send_decline PROTO ((void *));
 
 void state_reboot PROTO ((void *));
+#ifdef ENABLE_POLLING_MODE
+void state_polling PROTO (());
+void state_background PROTO ((void *));
+#endif
 void state_init PROTO ((void *));
 void state_selecting PROTO ((void *));
 void state_requesting PROTO ((void *));
@@ -1860,6 +1880,11 @@ void state_bound PROTO ((void *));
 void state_stop PROTO ((void *));
 void state_panic PROTO ((void *));
 
+#ifdef __FreeBSD__
+void set_ieee80211 PROTO ((struct interface_info *));
+#endif
+int interface_active PROTO ((struct interface_info *));
+
 void bind_lease PROTO ((struct client_state *));
 
 void make_client_options PROTO ((struct client_state *,
index cf85330..9b47697 100644 (file)
@@ -1,3 +1,4 @@
 /* Current version of ISC DHCP Distribution. */
+/* $DragonFly: src/contrib/isc-dhcp/includes/Attic/version.h,v 1.2 2003/10/11 21:14:19 dillon Exp $ */
 
-#define DHCP_VERSION   "V3.0.1rc11"
+#define DHCP_VERSION   "V3.0.1rc12"
index 5520a83..ae74ad0 100644 (file)
@@ -13,6 +13,8 @@
  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  * SOFTWARE.
+ *
+ * $DragonFly: src/contrib/isc-dhcp/minires/Attic/res_mkupdate.c,v 1.2 2003/10/11 21:14:23 dillon Exp $
  */
 
 /*
@@ -21,7 +23,7 @@
  */
 
 #if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: res_mkupdate.c,v 1.7 2001/01/11 02:16:24 mellon Exp $";
+static const char rcsid[] = "$Id: res_mkupdate.c,v 1.7.2.2 2003/05/19 00:33:22 dhankins Exp $";
 #endif /* not lint */
 
 #include <sys/types.h>
@@ -52,6 +54,7 @@ static int gethexnum_str(const u_char **, const u_char *);
 static int getword_str(char *, int,
                       const unsigned char **,
                       const unsigned char *);
+static int getphrase_str(char *, int, const u_char **, const u_char *);
 static int getstr_str(char *, int, const u_char **, const u_char *);
 
 struct valuelist {
@@ -101,7 +104,8 @@ res_nmkupdate(res_state statp,
        u_int16_t rtype, rclass;
        u_int32_t n1, rttl;
        u_char *dnptrs[20], **dpp, **lastdnptr;
-       unsigned siglen, keylen, certlen;
+       unsigned siglen, certlen;
+       int keylen;
        unsigned buflen = *blp;
        u_char *buf = (unsigned char *)bp;
 
@@ -234,7 +238,7 @@ res_nmkupdate(res_state statp,
                case T_MR:
                case T_NS:
                case T_PTR:
-                       if (!getword_str(buf2, sizeof buf2, &startp, endp))
+                       if (!getphrase_str(buf2, sizeof buf2, &startp, endp))
                                return (-1);
                        n = dn_comp(buf2, cp, buflen, dnptrs, lastdnptr);
                        if (n < 0)
@@ -549,36 +553,6 @@ res_nmkupdate(res_state statp,
                        cp += siglen;
                        break;
                    }
-               case ns_t_key:
-                       /* flags */
-                       n = gethexnum_str(&startp, endp);
-                       if (n < 0)
-                               return (-1);
-                       ShrinkBuffer(INT16SZ);
-                       PUTSHORT(n, cp);
-                       /* proto */
-                       n = getnum_str(&startp, endp);
-                       if (n < 0)
-                               return (-1);
-                       ShrinkBuffer(1);
-                       *cp++ = n;
-                       /* alg */
-                       n = getnum_str(&startp, endp);
-                       if (n < 0)
-                               return (-1);
-                       ShrinkBuffer(1);
-                       *cp++ = n;
-                       /* key */
-                       if ((n = getword_str(buf2, sizeof buf2,
-                                            &startp, endp)) < 0)
-                               return (-1);
-                       keylen = b64_pton(buf2, buf3, sizeof(buf3));
-                       if (keylen < 0)
-                               return (-1);
-                       ShrinkBuffer(keylen);
-                       memcpy(cp, buf3, keylen);
-                       cp += keylen;
-                       break;
                case ns_t_nxt:
                    {
                        int success, nxt_type;
@@ -613,6 +587,38 @@ res_nmkupdate(res_state statp,
                        cp += n;
                        break;
                    }
+#endif
+#if 1
+               case ns_t_key:
+                       /* flags */
+                       n = gethexnum_str(&startp, endp);
+                       if (n < 0)
+                               return (-1);
+                       ShrinkBuffer(INT16SZ);
+                       PUTSHORT(n, cp);
+                       /* proto */
+                       n = getnum_str(&startp, endp);
+                       if (n < 0)
+                               return (-1);
+                       ShrinkBuffer(1);
+                       *cp++ = n;
+                       /* alg */
+                       n = getnum_str(&startp, endp);
+                       if (n < 0)
+                               return (-1);
+                       ShrinkBuffer(1);
+                       *cp++ = n;
+                       /* key */
+                       if ((n = getword_str(buf2, sizeof buf2,
+                                            &startp, endp)) < 0)
+                               return (-1);
+                       keylen = b64_pton(buf2, buf3, sizeof(buf3));
+                       if (keylen < 0)
+                               return (-1);
+                       ShrinkBuffer(keylen);
+                       memcpy(cp, buf3, keylen);
+                       cp += keylen;
+                       break;
                case ns_t_cert:
                        /* type */
                        n = getnum_str(&startp, endp);
@@ -645,6 +651,8 @@ res_nmkupdate(res_state statp,
                        break;
 #endif
                default:
+                 fprintf(stderr, "NSupdate of RR type: %d not implemented\n",
+                         rrecp->r_type);
                        return (-1);
                } /*switch*/
                n = (u_int16_t)((cp - sp2) - INT16SZ);
@@ -688,6 +696,35 @@ getword_str(char *buf, int size, const u_char **startpp, const u_char *endp) {
         return (cp != buf);
 }
 
+/*
+ * Get a phrase - possibly containing blanks - from a string (not file)
+ * into buf. modify the start pointer to point after the
+ * phrase in the string.
+ */
+static int
+getphrase_str(char *buf, int size, const u_char **startpp, const u_char *endp) {
+        char *cp;
+        int c;
+        for (cp = buf; *startpp <= endp; ) {
+                c = **startpp;
+                if (isspace(c) && cp == buf ) {
+                       /* leading whitespace */
+                       (*startpp)++;
+                       continue;
+               }
+               else if ( c == '\0' ) {
+                       break;
+               }
+                (*startpp)++;
+                if (cp >= buf+size-1)
+                        break;
+                *cp++ = (u_char)c;
+        }
+        *cp = '\0';
+        return (cp != buf);
+}
+
 /*
  * get a white spae delimited string from memory.  Process quoted strings
  * and \DDD escapes.  Return length or -1 on error.  Returned string may
index 8e6695e..33de680 100644 (file)
@@ -40,6 +40,8 @@
  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
  * ``http://www.nominum.com''.
+ *
+ * $DragonFly: src/contrib/isc-dhcp/omapip/Attic/result.c,v 1.2 2003/10/11 21:14:25 dillon Exp $
  */
 
 #include <omapip/omapip_p.h>
@@ -119,7 +121,10 @@ static const char *text[ISC_R_NRESULTS] = {
 
 const char *isc_result_totext (isc_result_t result)
 {
+       static char ebuf[40];
+
        if (result >= ISC_R_SUCCESS && result < ISC_R_NRESULTS)
                return text [result];
-       return "unknown error.";
+       sprintf(ebuf, "unknown error: %d", result);
+       return ebuf;
 }