]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
Support for -lf and -cf flags
authorTed Lemon <source@isc.org>
Mon, 2 Sep 1996 21:16:25 +0000 (21:16 +0000)
committerTed Lemon <source@isc.org>
Mon, 2 Sep 1996 21:16:25 +0000 (21:16 +0000)
confpars.c
db.c
dhcpd.8
dhcpd.cat8
dhcpd.h
includes/dhcpd.h
server/confpars.c
server/db.c
server/dhcpd.8
server/dhcpd.cat8

index ce53ea9c17bc26f72bb8a88ef36405b58f057d8b..e1f08e6fc0fe52084d881b593d1f0af91b4f6efb 100644 (file)
@@ -42,7 +42,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: confpars.c,v 1.31 1996/08/30 23:39:37 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
+"$Id: confpars.c,v 1.32 1996/09/02 21:16:25 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -61,7 +61,7 @@ int readconf ()
        int token;
        int declaration = 0;
 
-       new_parse (_PATH_DHCPD_CONF);
+       new_parse (path_dhcpd_conf);
 
        /* Set up the initial dhcp option universe. */
        initialize_universes ();
@@ -72,8 +72,8 @@ int readconf ()
        root_group.bootp_lease_cutoff = MAX_TIME;
        root_group.boot_unknown_clients = 1;
 
-       if ((cfile = fopen (_PATH_DHCPD_CONF, "r")) == NULL)
-               error ("Can't open %s: %m", _PATH_DHCPD_CONF);
+       if ((cfile = fopen (path_dhcpd_conf, "r")) == NULL)
+               error ("Can't open %s: %m", path_dhcpd_conf);
        do {
                token = peek_token (&val, cfile);
                if (token == EOF)
@@ -99,7 +99,7 @@ void read_leases ()
        char *val;
        int token;
 
-       new_parse (_PATH_DHCPD_DB);
+       new_parse (path_dhcpd_db);
 
        /* Open the lease file.   If we can't open it, fail.   The reason
           for this is that although on initial startup, the absence of
@@ -110,9 +110,9 @@ void read_leases ()
           human has corrected the database problem, then we are left
           thinking that no leases have been assigned to anybody, which
           could create severe network chaos. */
-       if ((cfile = fopen (_PATH_DHCPD_DB, "r")) == NULL)
+       if ((cfile = fopen (path_dhcpd_db, "r")) == NULL)
                error ("Can't open lease database %s: %m -- %s",
-                      _PATH_DHCPD_DB,
+                      path_dhcpd_db,
                       "check for failed database rewrite attempt!");
        do {
                token = next_token (&val, cfile);
diff --git a/db.c b/db.c
index 06bef5a89d05d4de19958292649dfdfa41670a9e..afdaff2ec47d8d8ec757e8ee98c086e1753c0f1d 100644 (file)
--- a/db.c
+++ b/db.c
@@ -42,7 +42,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: db.c,v 1.7 1996/08/27 09:42:26 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
+"$Id: db.c,v 1.8 1996/09/02 21:16:24 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -185,7 +185,7 @@ void new_lease_file ()
 
        /* Make a temporary lease file... */
        time (&t);
-       sprintf (newfname, "%s.%d", _PATH_DHCPD_DB, (int) (t & 32767));
+       sprintf (newfname, "%s.%d", path_dhcpd_db, (int) (t & 32767));
        if ((db_file = fopen (newfname, "w")) == NULL) {
                error ("Can't start new lease file: %m");
        }
@@ -195,18 +195,18 @@ void new_lease_file ()
        write_leases ();
 
        /* Get the old database out of the way... */
-       sprintf (backfname, "%s~", _PATH_DHCPD_DB);
+       sprintf (backfname, "%s~", path_dhcpd_db);
        if (unlink (backfname) < 0 && errno != ENOENT)
                error ("Can't remove old lease database backup %s: %m",
                       backfname);
-       if (link (_PATH_DHCPD_DB, backfname) < 0)
+       if (link (path_dhcpd_db, backfname) < 0)
                error ("Can't backup lease database %s to %s: %m",
-                      _PATH_DHCPD_DB, backfname);
+                      path_dhcpd_db, backfname);
        
        /* Move in the new file... */
-       if (rename (newfname, _PATH_DHCPD_DB) < 0)
+       if (rename (newfname, path_dhcpd_db) < 0)
                error ("Can't install new lease database %s to %s: %m",
-                      newfname, _PATH_DHCPD_DB);
+                      newfname, path_dhcpd_db);
 
        counting = 1;
 }
diff --git a/dhcpd.8 b/dhcpd.8
index d1719d3c2dbaa4077cbaa4d6ea890f1f7df394a8..7d04d632a1cdaa0dcde5e50189dd6e65908f3458 100644 (file)
--- a/dhcpd.8
+++ b/dhcpd.8
@@ -51,6 +51,14 @@ dhcpd - Dynamic Host Configuration Protocol Server
 .B -d
 ]
 [
+.B -cf
+.I config-file
+]
+[
+.B -lf
+.I lease-file
+]
+[
 .I if0
 [
 .I ...ifN
@@ -153,6 +161,15 @@ complete log of all dhcp activity must be kept but syslogd is not
 reliable or otherwise cannot be used.   Normally, dhcpd will log all
 output using the syslog(3) function with the log facility set to
 LOG_DAEMON.
+.PP
+Dhcpd can be made to use an alternate configuration file with the
+.B -cf
+flag, or an alternate lease file with the
+.B -lf
+flag.   Because of the importance of using the same lease database at
+all times when running dhcpd in production, these options should be
+used \fBonly\fR for testing lease files or database files in a
+non-production environment.
 .SH CONFIGURATION
 The syntax of the dhcpd.conf(8) file is discussed seperately.   This
 section should be used as an overview of the configuration process,
index d98a8a8d94b231f28396e55374e4b5a01d32dfde..75a1b4a33a160923257a611da1b22526697b4ffc 100644 (file)
@@ -8,56 +8,56 @@ N\bNA\bAM\bME\bE
        dhcpd - Dynamic Host Configuration Protocol Server
 
 S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
-       d\bdh\bhc\bcp\bpd\bd [ -\b-p\bp _\bp_\bo_\br_\bt ] [ -\b-f\bf ] [ _\bi_\bf_\b0 [ _\b._\b._\b._\bi_\bf_\bN ] ]
+       d\bdh\bhc\bcp\bpd\bd  [ -\b-p\bp _\bp_\bo_\br_\bt ] [ -\b-f\bf ] [ -\b-d\bd ] [ -\b-c\bcf\bf _\bc_\bo_\bn_\bf_\bi_\bg_\b-_\bf_\bi_\bl_\be ] [ -\b-l\blf\bf
+       _\bl_\be_\ba_\bs_\be_\b-_\bf_\bi_\bl_\be ] [ _\bi_\bf_\b0 [ _\b._\b._\b._\bi_\bf_\bN ] ]
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        The  Internet  Software  Consortium  DHCP  Server,  dhcpd,
-       implements the Dynamic Host Configuration Protocol  (DHCP)
-       and  the Internet Bootstrap Protocol (BOOTP).  DHCP allows
-       hosts on a TCP/IP network to request and  be  assigned  IP
+       implements  the Dynamic Host Configuration Protocol (DHCP)
+       and the Internet Bootstrap Protocol (BOOTP).  DHCP  allows
+       hosts  on  a  TCP/IP network to request and be assigned IP
        addresses, and also to discover information about the net-
-       work to which they are attached.  BOOTP  provides  similar
+       work  to  which they are attached.  BOOTP provides similar
        functionality, with certain restrictions.
 
 O\bOP\bPE\bER\bRA\bAT\bTI\bIO\bON\bN
-       The  DHCP  protocol  allows a host which is unknown to the
-       network administrator to be automatically assigned  a  new
-       IP  address out of a pool of IP addresses for its network.
+       The DHCP protocol allows a host which is  unknown  to  the
+       network  administrator  to be automatically assigned a new
+       IP address out of a pool of IP addresses for its  network.
        In order for this to work, the network administrator allo-
-       cates  address  pools  in each subnet and enters them into
+       cates address pools in each subnet and  enters  them  into
        the dhcpd.conf(5) file.
 
-       On startup, dhcpd reads the _\bd_\bh_\bc_\bp_\bd_\b._\bc_\bo_\bn_\bf file and  stores  a
-       list  of  available  addresses  on  each subnet in memory.
+       On  startup,  dhcpd reads the _\bd_\bh_\bc_\bp_\bd_\b._\bc_\bo_\bn_\bf file and stores a
+       list of available addresses  on  each  subnet  in  memory.
        When a client requests an address using the DHCP protocol,
        dhcpd  allocates  an  address  for  it.   Each  client  is
-       assigned a lease, which expires after an  amount  of  time
+       assigned  a  lease,  which expires after an amount of time
        chosen by the administrator (by default, one day).  Before
-       leases expire, the clients to which  leases  are  assigned
+       leases  expire,  the  clients to which leases are assigned
        are expected to renew them in order to continue to use the
-       addresses.  Once a lease has expired, the client to  which
-       that  lease was assigned is no longer permitted to use the
+       addresses.   Once a lease has expired, the client to which
+       that lease was assigned is no longer permitted to use  the
        leased IP address.
 
        In order to keep track of leases across system reboots and
-       server  restarts,  dhcpd  keeps  a  list  of leases it has
+       server restarts, dhcpd keeps  a  list  of  leases  it  has
        assigned  in  the  dhcpd.leases(5)  file.    Before  dhcpd
-       grants  a  lease  to  a host, it records the lease in this
-       file and makes sure that the  contents  of  the  file  are
-       flushed  to disk.   This ensures that even in the event of
-       a system crash, dhcpd will not forget about a  lease  that
-       it   has   assigned.     On  startup,  after  reading  the
-       dhcpd.conf file, dhcpd  reads  the  dhcpd.leases  file  to
+       grants a lease to a host, it records  the  lease  in  this
+       file  and  makes  sure  that  the contents of the file are
+       flushed to disk.   This ensures that even in the event  of
+       a  system  crash, dhcpd will not forget about a lease that
+       it  has  assigned.    On  startup,   after   reading   the
+       dhcpd.conf  file,  dhcpd  reads  the  dhcpd.leases file to
        refresh its memory about what leases have been assigned.
 
-       New  leases  are  appended  to the end of the dhcpd.leases
-       file.   In order to prevent the file from  becoming  arbi-
-       trarily  large,  from  time  to  time  dhcpd creates a new
-       dhcpd.leases file from its in-core lease  database.   Once
-       this  file  has  been  written  to  disk,  the old file is
-       renamed  _\bd_\bh_\bc_\bp_\bd_\b._\bl_\be_\ba_\bs_\be_\bs_\b~,  and  the  new  file  is   renamed
-       dhcpd.leases.    If  the  system  crashes in the middle of
-       this process, whichever  dhcpd.leases  file  remains  will
+       New leases are appended to the  end  of  the  dhcpd.leases
+       file.    In  order to prevent the file from becoming arbi-
+       trarily large, from time  to  time  dhcpd  creates  a  new
+       dhcpd.leases  file  from its in-core lease database.  Once
+       this file has been  written  to  disk,  the  old  file  is
+       renamed   _\bd_\bh_\bc_\bp_\bd_\b._\bl_\be_\ba_\bs_\be_\bs_\b~,  and  the  new  file  is  renamed
+       dhcpd.leases.   If the system crashes  in  the  middle  of
 
 
 
@@ -70,60 +70,60 @@ O\bOP\bPE\bER\bRA\bAT\bTI\bIO\bON\bN
 dhcpd(8)                                                 dhcpd(8)
 
 
+       this  process,  whichever  dhcpd.leases  file remains will
        contain all the lease information, so there is no need for
        a special crash recovery process.
 
-       BOOTP support is also provided  by  this  server.   Unlike
-       DHCP,  the  BOOTP protocol does not provide a protocol for
+       BOOTP  support  is  also  provided by this server.  Unlike
+       DHCP, the BOOTP protocol does not provide a  protocol  for
        recovering dynamically-assigned addresses once they are no
-       longer  needed.    It  is  still  possible  to dynamically
+       longer needed.    It  is  still  possible  to  dynamically
        assign addresses to BOOTP clients, but some administrative
-       process   for   reclaiming  addresses  is  required.    By
-       default, leases are granted to BOOTP clients  in  perpetu-
+       process  for  reclaiming  addresses  is   required.     By
+       default,  leases  are granted to BOOTP clients in perpetu-
        ity, although the network administrator may set an earlier
-       cutoff date or a shorter lease length for BOOTP leases  if
+       cutoff  date or a shorter lease length for BOOTP leases if
        that makes sense.
 
-       BOOTP  clients may also be served in the old standard way,
+       BOOTP clients may also be served in the old standard  way,
        which is to simply provide a declaration in the dhcpd.conf
-       file  for  each  BOOTP  client,  permanently  assigning an
+       file for  each  BOOTP  client,  permanently  assigning  an
        address to each client.
 
-       Whenever changes are made to the  dhcpd.conf  file,  dhcpd
-       must  be  restarted.    To  restart  dhcpd, send a SIGTERM
-       (signal   15)   to   the   process   ID    contained    in
+       Whenever  changes  are  made to the dhcpd.conf file, dhcpd
+       must be restarted.   To  restart  dhcpd,  send  a  SIGTERM
+       (signal    15)    to   the   process   ID   contained   in
        _\b/_\bv_\ba_\br_\b/_\br_\bu_\bn_\b/_\bd_\bh_\bc_\bp_\bd_\b._\bp_\bi_\bd, and then re-invoke dhcpd.  Because the
-       DHCP server database is not  as  lightweight  as  a  BOOTP
+       DHCP  server  database  is  not  as lightweight as a BOOTP
        database, dhcpd does not automatically restart itself when
        it sees a change to the dhcpd.conf file.
 
 C\bCO\bOM\bMM\bMA\bAN\bND\bD L\bLI\bIN\bNE\bE
-       Dhcpd normally identifies all  interfaces  on  the  system
-       which  are  up, and listens on each interface.   If possi-
-       ble, point-to-point interfaces and the loopback  interface
-       are  eliminated, but on some systems this is not possible.
-       For this reason, the interfaces on which dhcpd should lis-
-       ten may be explicitly specified on the command line.
-
-       Dhcpd  normally  listens  on  port  67, which is the BOOTP
-       Server Port (the DHCP and BOOTP protocols  both  use  this
-       port).    If  desired,  dhcpd  may  be invoked with the -\b-p\bp
-       flag, followed by a port number, so  as  to  provide  DHCP
-       service  on  a different port.   This is mostly useful for
-       debugging purposes.
-
-       On some System-V systems, it may be desirable to run  dhcp
-       from  /etc/inittab.    If so, dhcpd should be invoked with
-       the -\b-f\bf flag, which causes dhcpd to run in the  foreground;
-       otherwise,  dhcpd  automatically  detaches itself from the
-       process group that started it and runs in the  background.
-       This is also useful when running dhcpd under a debugger.
-
-       Normally  dhcpd  logs its status using syslog(3).   If the
-       -\b-d\bd flag is specified, dhcpd will also log  its  status  to
-       its  standard  error  descriptor.   This can be useful for
-       debugging, and also at sites where a complete log  of  all
-       dhcp  activity must be kept but syslogd is not reliable or
+       The  names of the network interfaces on which dhcpd should
+       listen for broadcasts may  be  specified  on  the  command
+       line.   This  should  be  done  on  systems where dhcpd is
+       unable to identify non-broadcast  interfaces,  but  should
+       not  be  required on other systems.  If no interface names
+       are specified on the command line dhcpd will identify  all
+       network   interfaces  which  are  up,  elimininating  non-
+       broadcast interfaces if  possible,  and  listen  for  DHCP
+       broadcasts on each interface.
+
+       If  dhcpd  should listen on a port other than the standard
+       (port 67), the -\b-p\bp flag may used.  It should be followed by
+       the udp port number on which dhcpd should listen.  This is
+       mostly useful for debugging purposes.
+
+       To run dhcpd as a foreground process, rather than allowing
+       it  to  run  as  a  daemon  in the background, the -\b-f\bf flag
+       should be specified.  This is useful  when  running  dhcpd
+       under  a  debugger,  or  when running it out of inittab on
+       System V systems.
+
+       To have dhcpd log to the standard error descriptor,  spec-
+       ify  the  -\b-d\bd  flag.  This can be useful for debugging, and
+       also at sites where a complete log of  all  dhcp  activity
+       must  be  kept  but  syslogd  is not reliable or otherwise
 
 
 
@@ -136,10 +136,19 @@ C\bCO\bOM\bMM\bMA\bAN\bND\bD L\bLI\bIN\bNE\bE
 dhcpd(8)                                                 dhcpd(8)
 
 
-       otherwise cannot be used.
+       cannot be used.   Normally,  dhcpd  will  log  all  output
+       using  the syslog(3) function with the log facility set to
+       LOG_DAEMON.
+
+       Dhcpd can be made to use an alternate  configuration  file
+       with the -\b-c\bcf\bf flag, or an alternate lease file with the -\b-l\blf\bf
+       flag.   Because of the importance of using the same  lease
+       database  at  all  times when running dhcpd in production,
+       these options should be used o\bon\bnl\bly\by for testing lease  files
+       or database files in a non-production environment.
 
 C\bCO\bON\bNF\bFI\bIG\bGU\bUR\bRA\bAT\bTI\bIO\bON\bN
-       The syntax of the dhcpd.conf(8) file is  discussed  seper-
+       The  syntax  of the dhcpd.conf(8) file is discussed seper-
        ately.   This section should be used as an overview of the
        configuration process, and the dhcpd.conf(8) documentation
        should be consulted for detailed reference information.
@@ -148,10 +157,10 @@ C\bCO\bON\bNF\bFI\bIG\bGU\bUR\bRA\bAT\bTI\bIO\bON\bN
 S\bSu\bub\bbn\bne\bet\bts\bs
        dhcpd needs to know the subnet numbers and netmasks of all
        subnets for which it will be providing service.   In addi-
-       tion,  in order to dynamically allocate addresses, it must
+       tion, in order to dynamically allocate addresses, it  must
        be assigned one or more ranges of addresses on each subnet
-       which  it can in turn assign to client hosts as they boot.
-       Thus, a very simple configuration providing  DHCP  support
+       which it can in turn assign to client hosts as they  boot.
+       Thus,  a  very simple configuration providing DHCP support
        might look like this:
 
             subnet 239.252.197.0 netmask 255.255.255.0 {
@@ -165,31 +174,22 @@ S\bSu\bub\bbn\bne\bet\bts\bs
               range 239.252.197.113 239.252.197.250;
             }
 
-       If  a  subnet will only be provided with BOOTP service and
-       no dynamic address assignment, the  range  clause  can  be
+       If a subnet will only be provided with BOOTP  service  and
+       no  dynamic  address  assignment,  the range clause can be
        left out entirely, but the subnet statement must appear.
 
 
 L\bLe\bea\bas\bse\be L\bLe\ben\bng\bgt\bth\bhs\bs
-       DHCP  leases  can  be assigned almost any length from zero
-       seconds to infinity.   What lease length makes  sense  for
+       DHCP leases can be assigned almost any  length  from  zero
+       seconds  to  infinity.   What lease length makes sense for
        any given subnet, or for any given installation, will vary
        depending on the kinds of hosts being served.
 
-       For example, in an office environment  where  systems  are
+       For  example,  in  an office environment where systems are
        added from time to time and removed from time to time, but
        move relatively infrequently, it might make sense to allow
        lease times of a month of more.   In a final test environ-
-       ment on a manufacturing floor, it may make more  sense  to
-       assign  a maximum lease length of 30 minutes - enough time
-       to go through a simple test procedure on a network  appli-
-       ance before packaging it up for delivery.
-
-       It  is  possible to specify two lease lengths: the default
-       length that will be assigned if a client doesn't  ask  for
-       any  particular  lease length, and a maximum lease length.
-       These are specified as clauses to the subnet command:
-
+       ment  on  a manufacturing floor, it may make more sense to
 
 
 
@@ -202,31 +202,40 @@ L\bLe\bea\bas\bse\be L\bLe\ben\bng\bgt\bth\bhs\bs
 dhcpd(8)                                                 dhcpd(8)
 
 
+       assign a maximum lease length of 30 minutes - enough  time
+       to  go through a simple test procedure on a network appli-
+       ance before packaging it up for delivery.
+
+       It is possible to specify two lease lengths:  the  default
+       length  that  will be assigned if a client doesn't ask for
+       any particular lease length, and a maximum  lease  length.
+       These are specified as clauses to the subnet command:
+
             subnet 239.252.197.0 netmask 255.255.255.0 {
               range 239.252.197.10 239.252.197.107;
               default-lease-time 600;
               max-lease-time 7200;
             |
 
-       This particular subnet  declaration  specifies  a  default
-       lease  time  of  600  seconds (ten minutes), and a maximum
-       lease time of 7200 seconds  (two  hours).    Other  common
-       values  would  be  86400  (one day), 604800 (one week) and
+       This  particular  subnet  declaration  specifies a default
+       lease time of 600 seconds (ten  minutes),  and  a  maximum
+       lease  time  of  7200  seconds (two hours).   Other common
+       values would be 86400 (one day),  604800  (one  week)  and
        2592000 (30 days).
 
-       Each subnet need not have the same lease--in the  case  of
-       an  office  environment  and  a  manufacturing environment
-       served by the same DHCP server, it  might  make  sense  to
+       Each  subnet  need not have the same lease--in the case of
+       an office  environment  and  a  manufacturing  environment
+       served  by  the  same  DHCP server, it might make sense to
        have widely disparate values for default and maximum lease
        times on each subnet.
 
 B\bBO\bOO\bOT\bTP\bP S\bSu\bup\bpp\bpo\bor\brt\bt
-       Each BOOTP client  must  be  explicitly  declared  in  the
-       dhcpd.conf  file.    A  very basic client declaration will
-       specify the client network  interface's  hardware  address
-       and  the  IP  address  to  assign to that client.   If the
-       client needs to be able to  load  a  boot  file  from  the
-       server,  that  file's  name  must be specified.   A simple
+       Each  BOOTP  client  must  be  explicitly  declared in the
+       dhcpd.conf file.   A very basic  client  declaration  will
+       specify  the  client  network interface's hardware address
+       and the IP address to assign  to  that  client.    If  the
+       client  needs  to  be  able  to  load a boot file from the
+       server, that file's name must  be  specified.    A  simple
        bootp client declaration might look like this:
 
             host haagen hardware ethernet 08:00:2b:4c:59:23 {
@@ -235,27 +244,18 @@ B\bBO\bOO\bOT\bTP\bP S\bSu\bup\bpp\bpo\bor\brt\bt
             }
 
 O\bOp\bpt\bti\bio\bon\bns\bs
-       DHCP (and also BOOTP with  Vendor  Extensions)  provide  a
-       mechanism  whereby  the server can provide the client with
-       information about how to configure its  network  interface
-       (e.g.,  subnet  mask),  and also how the client can access
-       various network services (e.g., DNS, IP  routers,  and  so
+       DHCP  (and  also  BOOTP  with Vendor Extensions) provide a
+       mechanism whereby the server can provide the  client  with
+       information  about  how to configure its network interface
+       (e.g., subnet mask), and also how the  client  can  access
+       various  network  services  (e.g., DNS, IP routers, and so
        on).
 
        These options can be specified on a per-subnet basis, and,
-       for BOOTP clients, also on a per-client  basis.    In  the
-       event  that  a  BOOTP client declaration specifies options
-       that are also specified in  its  subnet  declaration,  the
-       options  specified  in  the client declaration take prece-
-       dence.   An reasonably complete DHCP  configuration  might
-       look something like this:
-
-            subnet 239.252.197.0 netmask 255.255.255.0 {
-              range 239.252.197.10 239.252.197.250;
-              default-lease-time 600 max-lease-time 7200;
-              option subnet-mask 255.255.255.0;
-              option broadcast-address 239.252.197.255;
-              option routers 239.252.197.1;
+       for  BOOTP  clients,  also on a per-client basis.   In the
+       event that a BOOTP client  declaration  specifies  options
+       that  are  also  specified  in its subnet declaration, the
+       options  specified  in   the   client   declaration   take
 
 
 
@@ -268,12 +268,21 @@ O\bOp\bpt\bti\bio\bon\bns\bs
 dhcpd(8)                                                 dhcpd(8)
 
 
+       precedence.    An  reasonably  complete DHCP configuration
+       might look something like this:
+
+            subnet 239.252.197.0 netmask 255.255.255.0 {
+              range 239.252.197.10 239.252.197.250;
+              default-lease-time 600 max-lease-time 7200;
+              option subnet-mask 255.255.255.0;
+              option broadcast-address 239.252.197.255;
+              option routers 239.252.197.1;
               option domain-name-servers 239.252.197.2, 239.252.197.3;
               option domain-name "isc.org";
             }
 
-       A  bootp host on that subnet that needs to be in a differ-
-       ent domain and  use  a  different  name  server  might  be
+       A bootp host on that subnet that needs to be in a  differ-
+       ent  domain  and  use  a  different  name  server might be
        declared as follows:
 
             host haagen hardware ethernet 08:00:2b:4c:59:23 {
@@ -283,7 +292,7 @@ dhcpd(8)                                                 dhcpd(8)
               option domain-name "vix.com";
             }
 
-       A  more complete description of the dhcpd.conf file syntax
+       A more complete description of the dhcpd.conf file  syntax
        is provided in dhcpd.conf(5).
 
 F\bFI\bIL\bLE\bES\bS
@@ -295,9 +304,9 @@ S\bSE\bEE\bE A\bAL\bLS\bSO\bO
 
 A\bAU\bUT\bTH\bHO\bOR\bR
        d\bdh\bhc\bcp\bpd\bd(\b(8\b8)\b) was written by Ted Lemon <mellon@vix.com> under a
-       contract with Vixie Labs.   Funding for this  project  was
-       provided  by  the Internet Software Corporation.  Informa-
-       tion about the Internet Software Consortium can  be  found
+       contract  with  Vixie Labs.   Funding for this project was
+       provided by the Internet Software  Corporation.   Informa-
+       tion  about  the Internet Software Consortium can be found
        at h\bht\btt\btp\bp:\b:/\b//\b/w\bww\bww\bw.\b.i\bis\bsc\bc.\b.o\bor\brg\bg/\b/i\bis\bsc\bc.\b.
 
 
@@ -310,15 +319,6 @@ A\bAU\bUT\bTH\bHO\bOR\bR
 
 
 
-
-
-
-
-
-
-
-
-
 
 
 
diff --git a/dhcpd.h b/dhcpd.h
index c4f4857ff4175f081ccb963fc40748fae62840f5..4336558e960874f7df372f648a78391b4fbca1e8 100644 (file)
--- a/dhcpd.h
+++ b/dhcpd.h
@@ -288,6 +288,10 @@ extern int log_perror;
 extern struct interface_info fallback_interface;
 #endif
 
+extern char *path_dhcpd_conf;
+extern char *path_dhcpd_db;
+extern char *path_dhcpd_pid;
+
 int main PROTO ((int, char **, char **));
 void cleanup PROTO ((void));
 
index c4f4857ff4175f081ccb963fc40748fae62840f5..4336558e960874f7df372f648a78391b4fbca1e8 100644 (file)
@@ -288,6 +288,10 @@ extern int log_perror;
 extern struct interface_info fallback_interface;
 #endif
 
+extern char *path_dhcpd_conf;
+extern char *path_dhcpd_db;
+extern char *path_dhcpd_pid;
+
 int main PROTO ((int, char **, char **));
 void cleanup PROTO ((void));
 
index ce53ea9c17bc26f72bb8a88ef36405b58f057d8b..e1f08e6fc0fe52084d881b593d1f0af91b4f6efb 100644 (file)
@@ -42,7 +42,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: confpars.c,v 1.31 1996/08/30 23:39:37 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
+"$Id: confpars.c,v 1.32 1996/09/02 21:16:25 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -61,7 +61,7 @@ int readconf ()
        int token;
        int declaration = 0;
 
-       new_parse (_PATH_DHCPD_CONF);
+       new_parse (path_dhcpd_conf);
 
        /* Set up the initial dhcp option universe. */
        initialize_universes ();
@@ -72,8 +72,8 @@ int readconf ()
        root_group.bootp_lease_cutoff = MAX_TIME;
        root_group.boot_unknown_clients = 1;
 
-       if ((cfile = fopen (_PATH_DHCPD_CONF, "r")) == NULL)
-               error ("Can't open %s: %m", _PATH_DHCPD_CONF);
+       if ((cfile = fopen (path_dhcpd_conf, "r")) == NULL)
+               error ("Can't open %s: %m", path_dhcpd_conf);
        do {
                token = peek_token (&val, cfile);
                if (token == EOF)
@@ -99,7 +99,7 @@ void read_leases ()
        char *val;
        int token;
 
-       new_parse (_PATH_DHCPD_DB);
+       new_parse (path_dhcpd_db);
 
        /* Open the lease file.   If we can't open it, fail.   The reason
           for this is that although on initial startup, the absence of
@@ -110,9 +110,9 @@ void read_leases ()
           human has corrected the database problem, then we are left
           thinking that no leases have been assigned to anybody, which
           could create severe network chaos. */
-       if ((cfile = fopen (_PATH_DHCPD_DB, "r")) == NULL)
+       if ((cfile = fopen (path_dhcpd_db, "r")) == NULL)
                error ("Can't open lease database %s: %m -- %s",
-                      _PATH_DHCPD_DB,
+                      path_dhcpd_db,
                       "check for failed database rewrite attempt!");
        do {
                token = next_token (&val, cfile);
index 06bef5a89d05d4de19958292649dfdfa41670a9e..afdaff2ec47d8d8ec757e8ee98c086e1753c0f1d 100644 (file)
@@ -42,7 +42,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: db.c,v 1.7 1996/08/27 09:42:26 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
+"$Id: db.c,v 1.8 1996/09/02 21:16:24 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -185,7 +185,7 @@ void new_lease_file ()
 
        /* Make a temporary lease file... */
        time (&t);
-       sprintf (newfname, "%s.%d", _PATH_DHCPD_DB, (int) (t & 32767));
+       sprintf (newfname, "%s.%d", path_dhcpd_db, (int) (t & 32767));
        if ((db_file = fopen (newfname, "w")) == NULL) {
                error ("Can't start new lease file: %m");
        }
@@ -195,18 +195,18 @@ void new_lease_file ()
        write_leases ();
 
        /* Get the old database out of the way... */
-       sprintf (backfname, "%s~", _PATH_DHCPD_DB);
+       sprintf (backfname, "%s~", path_dhcpd_db);
        if (unlink (backfname) < 0 && errno != ENOENT)
                error ("Can't remove old lease database backup %s: %m",
                       backfname);
-       if (link (_PATH_DHCPD_DB, backfname) < 0)
+       if (link (path_dhcpd_db, backfname) < 0)
                error ("Can't backup lease database %s to %s: %m",
-                      _PATH_DHCPD_DB, backfname);
+                      path_dhcpd_db, backfname);
        
        /* Move in the new file... */
-       if (rename (newfname, _PATH_DHCPD_DB) < 0)
+       if (rename (newfname, path_dhcpd_db) < 0)
                error ("Can't install new lease database %s to %s: %m",
-                      newfname, _PATH_DHCPD_DB);
+                      newfname, path_dhcpd_db);
 
        counting = 1;
 }
index d1719d3c2dbaa4077cbaa4d6ea890f1f7df394a8..7d04d632a1cdaa0dcde5e50189dd6e65908f3458 100644 (file)
@@ -51,6 +51,14 @@ dhcpd - Dynamic Host Configuration Protocol Server
 .B -d
 ]
 [
+.B -cf
+.I config-file
+]
+[
+.B -lf
+.I lease-file
+]
+[
 .I if0
 [
 .I ...ifN
@@ -153,6 +161,15 @@ complete log of all dhcp activity must be kept but syslogd is not
 reliable or otherwise cannot be used.   Normally, dhcpd will log all
 output using the syslog(3) function with the log facility set to
 LOG_DAEMON.
+.PP
+Dhcpd can be made to use an alternate configuration file with the
+.B -cf
+flag, or an alternate lease file with the
+.B -lf
+flag.   Because of the importance of using the same lease database at
+all times when running dhcpd in production, these options should be
+used \fBonly\fR for testing lease files or database files in a
+non-production environment.
 .SH CONFIGURATION
 The syntax of the dhcpd.conf(8) file is discussed seperately.   This
 section should be used as an overview of the configuration process,
index d98a8a8d94b231f28396e55374e4b5a01d32dfde..75a1b4a33a160923257a611da1b22526697b4ffc 100644 (file)
@@ -8,56 +8,56 @@ N\bNA\bAM\bME\bE
        dhcpd - Dynamic Host Configuration Protocol Server
 
 S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
-       d\bdh\bhc\bcp\bpd\bd [ -\b-p\bp _\bp_\bo_\br_\bt ] [ -\b-f\bf ] [ _\bi_\bf_\b0 [ _\b._\b._\b._\bi_\bf_\bN ] ]
+       d\bdh\bhc\bcp\bpd\bd  [ -\b-p\bp _\bp_\bo_\br_\bt ] [ -\b-f\bf ] [ -\b-d\bd ] [ -\b-c\bcf\bf _\bc_\bo_\bn_\bf_\bi_\bg_\b-_\bf_\bi_\bl_\be ] [ -\b-l\blf\bf
+       _\bl_\be_\ba_\bs_\be_\b-_\bf_\bi_\bl_\be ] [ _\bi_\bf_\b0 [ _\b._\b._\b._\bi_\bf_\bN ] ]
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        The  Internet  Software  Consortium  DHCP  Server,  dhcpd,
-       implements the Dynamic Host Configuration Protocol  (DHCP)
-       and  the Internet Bootstrap Protocol (BOOTP).  DHCP allows
-       hosts on a TCP/IP network to request and  be  assigned  IP
+       implements  the Dynamic Host Configuration Protocol (DHCP)
+       and the Internet Bootstrap Protocol (BOOTP).  DHCP  allows
+       hosts  on  a  TCP/IP network to request and be assigned IP
        addresses, and also to discover information about the net-
-       work to which they are attached.  BOOTP  provides  similar
+       work  to  which they are attached.  BOOTP provides similar
        functionality, with certain restrictions.
 
 O\bOP\bPE\bER\bRA\bAT\bTI\bIO\bON\bN
-       The  DHCP  protocol  allows a host which is unknown to the
-       network administrator to be automatically assigned  a  new
-       IP  address out of a pool of IP addresses for its network.
+       The DHCP protocol allows a host which is  unknown  to  the
+       network  administrator  to be automatically assigned a new
+       IP address out of a pool of IP addresses for its  network.
        In order for this to work, the network administrator allo-
-       cates  address  pools  in each subnet and enters them into
+       cates address pools in each subnet and  enters  them  into
        the dhcpd.conf(5) file.
 
-       On startup, dhcpd reads the _\bd_\bh_\bc_\bp_\bd_\b._\bc_\bo_\bn_\bf file and  stores  a
-       list  of  available  addresses  on  each subnet in memory.
+       On  startup,  dhcpd reads the _\bd_\bh_\bc_\bp_\bd_\b._\bc_\bo_\bn_\bf file and stores a
+       list of available addresses  on  each  subnet  in  memory.
        When a client requests an address using the DHCP protocol,
        dhcpd  allocates  an  address  for  it.   Each  client  is
-       assigned a lease, which expires after an  amount  of  time
+       assigned  a  lease,  which expires after an amount of time
        chosen by the administrator (by default, one day).  Before
-       leases expire, the clients to which  leases  are  assigned
+       leases  expire,  the  clients to which leases are assigned
        are expected to renew them in order to continue to use the
-       addresses.  Once a lease has expired, the client to  which
-       that  lease was assigned is no longer permitted to use the
+       addresses.   Once a lease has expired, the client to which
+       that lease was assigned is no longer permitted to use  the
        leased IP address.
 
        In order to keep track of leases across system reboots and
-       server  restarts,  dhcpd  keeps  a  list  of leases it has
+       server restarts, dhcpd keeps  a  list  of  leases  it  has
        assigned  in  the  dhcpd.leases(5)  file.    Before  dhcpd
-       grants  a  lease  to  a host, it records the lease in this
-       file and makes sure that the  contents  of  the  file  are
-       flushed  to disk.   This ensures that even in the event of
-       a system crash, dhcpd will not forget about a  lease  that
-       it   has   assigned.     On  startup,  after  reading  the
-       dhcpd.conf file, dhcpd  reads  the  dhcpd.leases  file  to
+       grants a lease to a host, it records  the  lease  in  this
+       file  and  makes  sure  that  the contents of the file are
+       flushed to disk.   This ensures that even in the event  of
+       a  system  crash, dhcpd will not forget about a lease that
+       it  has  assigned.    On  startup,   after   reading   the
+       dhcpd.conf  file,  dhcpd  reads  the  dhcpd.leases file to
        refresh its memory about what leases have been assigned.
 
-       New  leases  are  appended  to the end of the dhcpd.leases
-       file.   In order to prevent the file from  becoming  arbi-
-       trarily  large,  from  time  to  time  dhcpd creates a new
-       dhcpd.leases file from its in-core lease  database.   Once
-       this  file  has  been  written  to  disk,  the old file is
-       renamed  _\bd_\bh_\bc_\bp_\bd_\b._\bl_\be_\ba_\bs_\be_\bs_\b~,  and  the  new  file  is   renamed
-       dhcpd.leases.    If  the  system  crashes in the middle of
-       this process, whichever  dhcpd.leases  file  remains  will
+       New leases are appended to the  end  of  the  dhcpd.leases
+       file.    In  order to prevent the file from becoming arbi-
+       trarily large, from time  to  time  dhcpd  creates  a  new
+       dhcpd.leases  file  from its in-core lease database.  Once
+       this file has been  written  to  disk,  the  old  file  is
+       renamed   _\bd_\bh_\bc_\bp_\bd_\b._\bl_\be_\ba_\bs_\be_\bs_\b~,  and  the  new  file  is  renamed
+       dhcpd.leases.   If the system crashes  in  the  middle  of
 
 
 
@@ -70,60 +70,60 @@ O\bOP\bPE\bER\bRA\bAT\bTI\bIO\bON\bN
 dhcpd(8)                                                 dhcpd(8)
 
 
+       this  process,  whichever  dhcpd.leases  file remains will
        contain all the lease information, so there is no need for
        a special crash recovery process.
 
-       BOOTP support is also provided  by  this  server.   Unlike
-       DHCP,  the  BOOTP protocol does not provide a protocol for
+       BOOTP  support  is  also  provided by this server.  Unlike
+       DHCP, the BOOTP protocol does not provide a  protocol  for
        recovering dynamically-assigned addresses once they are no
-       longer  needed.    It  is  still  possible  to dynamically
+       longer needed.    It  is  still  possible  to  dynamically
        assign addresses to BOOTP clients, but some administrative
-       process   for   reclaiming  addresses  is  required.    By
-       default, leases are granted to BOOTP clients  in  perpetu-
+       process  for  reclaiming  addresses  is   required.     By
+       default,  leases  are granted to BOOTP clients in perpetu-
        ity, although the network administrator may set an earlier
-       cutoff date or a shorter lease length for BOOTP leases  if
+       cutoff  date or a shorter lease length for BOOTP leases if
        that makes sense.
 
-       BOOTP  clients may also be served in the old standard way,
+       BOOTP clients may also be served in the old standard  way,
        which is to simply provide a declaration in the dhcpd.conf
-       file  for  each  BOOTP  client,  permanently  assigning an
+       file for  each  BOOTP  client,  permanently  assigning  an
        address to each client.
 
-       Whenever changes are made to the  dhcpd.conf  file,  dhcpd
-       must  be  restarted.    To  restart  dhcpd, send a SIGTERM
-       (signal   15)   to   the   process   ID    contained    in
+       Whenever  changes  are  made to the dhcpd.conf file, dhcpd
+       must be restarted.   To  restart  dhcpd,  send  a  SIGTERM
+       (signal    15)    to   the   process   ID   contained   in
        _\b/_\bv_\ba_\br_\b/_\br_\bu_\bn_\b/_\bd_\bh_\bc_\bp_\bd_\b._\bp_\bi_\bd, and then re-invoke dhcpd.  Because the
-       DHCP server database is not  as  lightweight  as  a  BOOTP
+       DHCP  server  database  is  not  as lightweight as a BOOTP
        database, dhcpd does not automatically restart itself when
        it sees a change to the dhcpd.conf file.
 
 C\bCO\bOM\bMM\bMA\bAN\bND\bD L\bLI\bIN\bNE\bE
-       Dhcpd normally identifies all  interfaces  on  the  system
-       which  are  up, and listens on each interface.   If possi-
-       ble, point-to-point interfaces and the loopback  interface
-       are  eliminated, but on some systems this is not possible.
-       For this reason, the interfaces on which dhcpd should lis-
-       ten may be explicitly specified on the command line.
-
-       Dhcpd  normally  listens  on  port  67, which is the BOOTP
-       Server Port (the DHCP and BOOTP protocols  both  use  this
-       port).    If  desired,  dhcpd  may  be invoked with the -\b-p\bp
-       flag, followed by a port number, so  as  to  provide  DHCP
-       service  on  a different port.   This is mostly useful for
-       debugging purposes.
-
-       On some System-V systems, it may be desirable to run  dhcp
-       from  /etc/inittab.    If so, dhcpd should be invoked with
-       the -\b-f\bf flag, which causes dhcpd to run in the  foreground;
-       otherwise,  dhcpd  automatically  detaches itself from the
-       process group that started it and runs in the  background.
-       This is also useful when running dhcpd under a debugger.
-
-       Normally  dhcpd  logs its status using syslog(3).   If the
-       -\b-d\bd flag is specified, dhcpd will also log  its  status  to
-       its  standard  error  descriptor.   This can be useful for
-       debugging, and also at sites where a complete log  of  all
-       dhcp  activity must be kept but syslogd is not reliable or
+       The  names of the network interfaces on which dhcpd should
+       listen for broadcasts may  be  specified  on  the  command
+       line.   This  should  be  done  on  systems where dhcpd is
+       unable to identify non-broadcast  interfaces,  but  should
+       not  be  required on other systems.  If no interface names
+       are specified on the command line dhcpd will identify  all
+       network   interfaces  which  are  up,  elimininating  non-
+       broadcast interfaces if  possible,  and  listen  for  DHCP
+       broadcasts on each interface.
+
+       If  dhcpd  should listen on a port other than the standard
+       (port 67), the -\b-p\bp flag may used.  It should be followed by
+       the udp port number on which dhcpd should listen.  This is
+       mostly useful for debugging purposes.
+
+       To run dhcpd as a foreground process, rather than allowing
+       it  to  run  as  a  daemon  in the background, the -\b-f\bf flag
+       should be specified.  This is useful  when  running  dhcpd
+       under  a  debugger,  or  when running it out of inittab on
+       System V systems.
+
+       To have dhcpd log to the standard error descriptor,  spec-
+       ify  the  -\b-d\bd  flag.  This can be useful for debugging, and
+       also at sites where a complete log of  all  dhcp  activity
+       must  be  kept  but  syslogd  is not reliable or otherwise
 
 
 
@@ -136,10 +136,19 @@ C\bCO\bOM\bMM\bMA\bAN\bND\bD L\bLI\bIN\bNE\bE
 dhcpd(8)                                                 dhcpd(8)
 
 
-       otherwise cannot be used.
+       cannot be used.   Normally,  dhcpd  will  log  all  output
+       using  the syslog(3) function with the log facility set to
+       LOG_DAEMON.
+
+       Dhcpd can be made to use an alternate  configuration  file
+       with the -\b-c\bcf\bf flag, or an alternate lease file with the -\b-l\blf\bf
+       flag.   Because of the importance of using the same  lease
+       database  at  all  times when running dhcpd in production,
+       these options should be used o\bon\bnl\bly\by for testing lease  files
+       or database files in a non-production environment.
 
 C\bCO\bON\bNF\bFI\bIG\bGU\bUR\bRA\bAT\bTI\bIO\bON\bN
-       The syntax of the dhcpd.conf(8) file is  discussed  seper-
+       The  syntax  of the dhcpd.conf(8) file is discussed seper-
        ately.   This section should be used as an overview of the
        configuration process, and the dhcpd.conf(8) documentation
        should be consulted for detailed reference information.
@@ -148,10 +157,10 @@ C\bCO\bON\bNF\bFI\bIG\bGU\bUR\bRA\bAT\bTI\bIO\bON\bN
 S\bSu\bub\bbn\bne\bet\bts\bs
        dhcpd needs to know the subnet numbers and netmasks of all
        subnets for which it will be providing service.   In addi-
-       tion,  in order to dynamically allocate addresses, it must
+       tion, in order to dynamically allocate addresses, it  must
        be assigned one or more ranges of addresses on each subnet
-       which  it can in turn assign to client hosts as they boot.
-       Thus, a very simple configuration providing  DHCP  support
+       which it can in turn assign to client hosts as they  boot.
+       Thus,  a  very simple configuration providing DHCP support
        might look like this:
 
             subnet 239.252.197.0 netmask 255.255.255.0 {
@@ -165,31 +174,22 @@ S\bSu\bub\bbn\bne\bet\bts\bs
               range 239.252.197.113 239.252.197.250;
             }
 
-       If  a  subnet will only be provided with BOOTP service and
-       no dynamic address assignment, the  range  clause  can  be
+       If a subnet will only be provided with BOOTP  service  and
+       no  dynamic  address  assignment,  the range clause can be
        left out entirely, but the subnet statement must appear.
 
 
 L\bLe\bea\bas\bse\be L\bLe\ben\bng\bgt\bth\bhs\bs
-       DHCP  leases  can  be assigned almost any length from zero
-       seconds to infinity.   What lease length makes  sense  for
+       DHCP leases can be assigned almost any  length  from  zero
+       seconds  to  infinity.   What lease length makes sense for
        any given subnet, or for any given installation, will vary
        depending on the kinds of hosts being served.
 
-       For example, in an office environment  where  systems  are
+       For  example,  in  an office environment where systems are
        added from time to time and removed from time to time, but
        move relatively infrequently, it might make sense to allow
        lease times of a month of more.   In a final test environ-
-       ment on a manufacturing floor, it may make more  sense  to
-       assign  a maximum lease length of 30 minutes - enough time
-       to go through a simple test procedure on a network  appli-
-       ance before packaging it up for delivery.
-
-       It  is  possible to specify two lease lengths: the default
-       length that will be assigned if a client doesn't  ask  for
-       any  particular  lease length, and a maximum lease length.
-       These are specified as clauses to the subnet command:
-
+       ment  on  a manufacturing floor, it may make more sense to
 
 
 
@@ -202,31 +202,40 @@ L\bLe\bea\bas\bse\be L\bLe\ben\bng\bgt\bth\bhs\bs
 dhcpd(8)                                                 dhcpd(8)
 
 
+       assign a maximum lease length of 30 minutes - enough  time
+       to  go through a simple test procedure on a network appli-
+       ance before packaging it up for delivery.
+
+       It is possible to specify two lease lengths:  the  default
+       length  that  will be assigned if a client doesn't ask for
+       any particular lease length, and a maximum  lease  length.
+       These are specified as clauses to the subnet command:
+
             subnet 239.252.197.0 netmask 255.255.255.0 {
               range 239.252.197.10 239.252.197.107;
               default-lease-time 600;
               max-lease-time 7200;
             |
 
-       This particular subnet  declaration  specifies  a  default
-       lease  time  of  600  seconds (ten minutes), and a maximum
-       lease time of 7200 seconds  (two  hours).    Other  common
-       values  would  be  86400  (one day), 604800 (one week) and
+       This  particular  subnet  declaration  specifies a default
+       lease time of 600 seconds (ten  minutes),  and  a  maximum
+       lease  time  of  7200  seconds (two hours).   Other common
+       values would be 86400 (one day),  604800  (one  week)  and
        2592000 (30 days).
 
-       Each subnet need not have the same lease--in the  case  of
-       an  office  environment  and  a  manufacturing environment
-       served by the same DHCP server, it  might  make  sense  to
+       Each  subnet  need not have the same lease--in the case of
+       an office  environment  and  a  manufacturing  environment
+       served  by  the  same  DHCP server, it might make sense to
        have widely disparate values for default and maximum lease
        times on each subnet.
 
 B\bBO\bOO\bOT\bTP\bP S\bSu\bup\bpp\bpo\bor\brt\bt
-       Each BOOTP client  must  be  explicitly  declared  in  the
-       dhcpd.conf  file.    A  very basic client declaration will
-       specify the client network  interface's  hardware  address
-       and  the  IP  address  to  assign to that client.   If the
-       client needs to be able to  load  a  boot  file  from  the
-       server,  that  file's  name  must be specified.   A simple
+       Each  BOOTP  client  must  be  explicitly  declared in the
+       dhcpd.conf file.   A very basic  client  declaration  will
+       specify  the  client  network interface's hardware address
+       and the IP address to assign  to  that  client.    If  the
+       client  needs  to  be  able  to  load a boot file from the
+       server, that file's name must  be  specified.    A  simple
        bootp client declaration might look like this:
 
             host haagen hardware ethernet 08:00:2b:4c:59:23 {
@@ -235,27 +244,18 @@ B\bBO\bOO\bOT\bTP\bP S\bSu\bup\bpp\bpo\bor\brt\bt
             }
 
 O\bOp\bpt\bti\bio\bon\bns\bs
-       DHCP (and also BOOTP with  Vendor  Extensions)  provide  a
-       mechanism  whereby  the server can provide the client with
-       information about how to configure its  network  interface
-       (e.g.,  subnet  mask),  and also how the client can access
-       various network services (e.g., DNS, IP  routers,  and  so
+       DHCP  (and  also  BOOTP  with Vendor Extensions) provide a
+       mechanism whereby the server can provide the  client  with
+       information  about  how to configure its network interface
+       (e.g., subnet mask), and also how the  client  can  access
+       various  network  services  (e.g., DNS, IP routers, and so
        on).
 
        These options can be specified on a per-subnet basis, and,
-       for BOOTP clients, also on a per-client  basis.    In  the
-       event  that  a  BOOTP client declaration specifies options
-       that are also specified in  its  subnet  declaration,  the
-       options  specified  in  the client declaration take prece-
-       dence.   An reasonably complete DHCP  configuration  might
-       look something like this:
-
-            subnet 239.252.197.0 netmask 255.255.255.0 {
-              range 239.252.197.10 239.252.197.250;
-              default-lease-time 600 max-lease-time 7200;
-              option subnet-mask 255.255.255.0;
-              option broadcast-address 239.252.197.255;
-              option routers 239.252.197.1;
+       for  BOOTP  clients,  also on a per-client basis.   In the
+       event that a BOOTP client  declaration  specifies  options
+       that  are  also  specified  in its subnet declaration, the
+       options  specified  in   the   client   declaration   take
 
 
 
@@ -268,12 +268,21 @@ O\bOp\bpt\bti\bio\bon\bns\bs
 dhcpd(8)                                                 dhcpd(8)
 
 
+       precedence.    An  reasonably  complete DHCP configuration
+       might look something like this:
+
+            subnet 239.252.197.0 netmask 255.255.255.0 {
+              range 239.252.197.10 239.252.197.250;
+              default-lease-time 600 max-lease-time 7200;
+              option subnet-mask 255.255.255.0;
+              option broadcast-address 239.252.197.255;
+              option routers 239.252.197.1;
               option domain-name-servers 239.252.197.2, 239.252.197.3;
               option domain-name "isc.org";
             }
 
-       A  bootp host on that subnet that needs to be in a differ-
-       ent domain and  use  a  different  name  server  might  be
+       A bootp host on that subnet that needs to be in a  differ-
+       ent  domain  and  use  a  different  name  server might be
        declared as follows:
 
             host haagen hardware ethernet 08:00:2b:4c:59:23 {
@@ -283,7 +292,7 @@ dhcpd(8)                                                 dhcpd(8)
               option domain-name "vix.com";
             }
 
-       A  more complete description of the dhcpd.conf file syntax
+       A more complete description of the dhcpd.conf file  syntax
        is provided in dhcpd.conf(5).
 
 F\bFI\bIL\bLE\bES\bS
@@ -295,9 +304,9 @@ S\bSE\bEE\bE A\bAL\bLS\bSO\bO
 
 A\bAU\bUT\bTH\bHO\bOR\bR
        d\bdh\bhc\bcp\bpd\bd(\b(8\b8)\b) was written by Ted Lemon <mellon@vix.com> under a
-       contract with Vixie Labs.   Funding for this  project  was
-       provided  by  the Internet Software Corporation.  Informa-
-       tion about the Internet Software Consortium can  be  found
+       contract  with  Vixie Labs.   Funding for this project was
+       provided by the Internet Software  Corporation.   Informa-
+       tion  about  the Internet Software Consortium can be found
        at h\bht\btt\btp\bp:\b:/\b//\b/w\bww\bww\bw.\b.i\bis\bsc\bc.\b.o\bor\brg\bg/\b/i\bis\bsc\bc.\b.
 
 
@@ -310,15 +319,6 @@ A\bAU\bUT\bTH\bHO\bOR\bR
 
 
 
-
-
-
-
-
-
-
-
-