[9] | 1 | .TH DHCPD 8
|
---|
| 2 | .SH NAME
|
---|
| 3 | dhcpd \- dynamic host configuration protocol daemon
|
---|
| 4 | .SH SYNOPSIS
|
---|
| 5 | .in +.5i
|
---|
| 6 | .ti -.5i
|
---|
| 7 | .B dhdpd
|
---|
| 8 | .RB [ \-qar ]
|
---|
| 9 | .RB [ \-t [\fIlevel\fP]]
|
---|
| 10 | .RB [ \-d [\fIlevel\fP]]
|
---|
| 11 | .RB [ \-f
|
---|
| 12 | .IR configfile ]
|
---|
| 13 | .RB [ \-c
|
---|
| 14 | .IR cachefile ]
|
---|
| 15 | .RB [ \-p
|
---|
| 16 | .IR poolfile ]
|
---|
| 17 | .RI [ host " ...]"
|
---|
| 18 | .in -.5i
|
---|
| 19 | .SH DESCRIPTION
|
---|
| 20 | .de SP
|
---|
| 21 | .if t .sp 0.4
|
---|
| 22 | .if n .sp
|
---|
| 23 | ..
|
---|
| 24 | .B Dhcpd
|
---|
| 25 | is a client and a server for the Dynamic Host Configuration Protocol. As a
|
---|
| 26 | client it collects DHCP data to configure the Ethernet networks with, and as
|
---|
| 27 | a server it answers DHCP queries from other machines.
|
---|
| 28 | .PP
|
---|
| 29 | This manual page describes the operation of
|
---|
| 30 | .BR dhcpd ,
|
---|
| 31 | the associated configuration file is described in
|
---|
| 32 | .BR dhcp.conf (5).
|
---|
| 33 | (The latter, together with
|
---|
| 34 | .BR boot (8),
|
---|
| 35 | is of more practical value when it comes to getting a machine's networks
|
---|
| 36 | interfaces up and running. See the options section below for debugging DCHP
|
---|
| 37 | problems.)
|
---|
| 38 | .SS Initialization
|
---|
| 39 | On a normal startup, i.e. none of the
|
---|
| 40 | .BR \-q ,
|
---|
| 41 | .BR \-a
|
---|
| 42 | or
|
---|
| 43 | .BR \-r
|
---|
| 44 | options are given,
|
---|
| 45 | .B dhcpd
|
---|
| 46 | determines what IP devices are present, and which of those are Ethernets.
|
---|
| 47 | For each network it looks for information in the configuration file as if
|
---|
| 48 | it were a server answering a query for that network. If any information is
|
---|
| 49 | found then the IP address is configured and the information stored in the
|
---|
| 50 | cache file.
|
---|
| 51 | .SS "Client Operation"
|
---|
| 52 | For each still unconfigured network a DHCP DISCOVER request is broadcast on
|
---|
| 53 | that network. If a DHCP OFFER reply is received then a DHCP REQUEST is
|
---|
| 54 | broadcast for the IP address offered, and if a DHCP ACK is received then the
|
---|
| 55 | network is configured and the information stored in the cache file.
|
---|
| 56 | .PP
|
---|
| 57 | If no reply is received then another query is sent after 4 seconds, and then
|
---|
| 58 | again after 8 seconds, doubling each time until 64 seconds. Every 64
|
---|
| 59 | seconds thereafter a request is broadcast until a reply is received.
|
---|
| 60 | .PP
|
---|
| 61 | Once configured the DHCP lease, rebind and renew times are computed. At the
|
---|
| 62 | renew time a DHCP REQUEST is sent to the DHCP server to extend the lease.
|
---|
| 63 | Normally we get an answer and refresh our information, but if no reply is
|
---|
| 64 | received we wait for half the remaining time until the rebind time and keep
|
---|
| 65 | retrying and halving the remaining time. When the rebind time is reached
|
---|
| 66 | the DHCP REQUEST is broadcast to try and reach some other DHCP server.
|
---|
| 67 | Halving the remaining time again and again until the lease expires. At that
|
---|
| 68 | point we go back to square one and broadcast a DHCP DISCOVER.
|
---|
| 69 | .PP
|
---|
| 70 | If at any point a DHCP NAK is received we start over completely. After a
|
---|
| 71 | DHCP OFFER an ARP request is transmitted just before the DHCP REQUEST to
|
---|
| 72 | check if the address offered is already in use. If an ARP reply is received
|
---|
| 73 | before the DHCP ACK then after the ACK we send a DHCP DECLINE to the server
|
---|
| 74 | to tell that the address isn't what we want and again we start over.
|
---|
| 75 | .SS "Router Discovery"
|
---|
| 76 | The gateway offered by the DHCP server is made known to the TCP/IP server by
|
---|
| 77 | sending an ICMP router advertisement to the local interface with a short
|
---|
| 78 | lifetime and a low priority. Then up to three router solicitations are
|
---|
| 79 | broadcast three seconds apart to look for a router. If a router answers
|
---|
| 80 | with a router advertisement then we no longer worry about routing for that
|
---|
| 81 | interface. Otherwise the router information is refreshed before it expires
|
---|
| 82 | and another solicitation is sent out. This happens about twice an hour.
|
---|
| 83 | .SS "Server Operation"
|
---|
| 84 | Once all networks so marked are configured the daemon starts answering
|
---|
| 85 | requests by other machines or relaying requests to other DHCP servers.
|
---|
| 86 | DHCP requests are answered if information for a client
|
---|
| 87 | can be found in the configuration file, or if a free address can be found in
|
---|
| 88 | the pool file, or if a client rerequests an address it already owns.
|
---|
| 89 | .PP
|
---|
| 90 | If the daemon is both a server and a relay for a network then it will try
|
---|
| 91 | to answer a request and only relay if it has no answer.
|
---|
| 92 | .SS "Nothing more to do?"
|
---|
| 93 | If the daemon finds out that all networks have an infinite lease (configured
|
---|
| 94 | with a fixed address), there is no router information to keep warm, and
|
---|
| 95 | it isn't a server then it simply exits.
|
---|
| 96 | .SS "Asynchronous I/O?"
|
---|
| 97 | MINIX 3 doesn't have the asynchronous I/O that Minix-vmd has, so under MINIX 3
|
---|
| 98 | the daemon only works with one network at a time. If it's stuck on the same
|
---|
| 99 | network for 32 seconds then that network is closed and another network is
|
---|
| 100 | tried for 32 seconds. This usually works ok as a client, but as a server it
|
---|
| 101 | can only handle one network.
|
---|
| 102 | .SH OPTIONS
|
---|
| 103 | .TP
|
---|
| 104 | .B \-q
|
---|
| 105 | Read and print the cache and pool file contents, showing DHCP information
|
---|
| 106 | for each network, and the IP addresses in the pool with lease times and
|
---|
| 107 | current/last owners of those addresses.
|
---|
| 108 | .TP
|
---|
| 109 | .B \-a
|
---|
| 110 | Add the named hosts (or IP addresses) to the pool file.
|
---|
| 111 | .TP
|
---|
| 112 | .B \-r
|
---|
| 113 | Remove hosts from the pool file.
|
---|
| 114 | .TP
|
---|
| 115 | .RB [ \-t [\fIlevel\fP]]
|
---|
| 116 | Set the test level (by default 1). At test level 1 all networks are seen as
|
---|
| 117 | unconfigured, will not be configured and no data will be put in the cache.
|
---|
| 118 | The program will just act as-if. At test level 2 the interfaces will not be
|
---|
| 119 | configured from the configuration file, the data must come from a remote
|
---|
| 120 | server. At level 3 the renewal, rebind and lease time will be 60, 120
|
---|
| 121 | and 180 seconds. At level 4 these times will be 60, 60, and 120. At
|
---|
| 122 | level 5 these times will be 60, 60, and 60. These test levels are meant
|
---|
| 123 | to debug the DHCP client code, and are best used with a high debug level.
|
---|
| 124 | .TP
|
---|
| 125 | .RB [ \-d [\fIlevel\fP]]
|
---|
| 126 | Set the debug level (by default 1). At debug level 1 the program shows
|
---|
| 127 | Ethernet and IP addresses as they are determined or configured, DHCP
|
---|
| 128 | messages sent and received with little detail (one line per message), and
|
---|
| 129 | memory use. At debug level 2 each DHCP packet is decoded and shown in
|
---|
| 130 | detail. At debug level 3 device opens and closes are shown. The debugging
|
---|
| 131 | level may also be increased by 1 at runtime by sending signal
|
---|
| 132 | .BR SIGUSR1
|
---|
| 133 | or turned off (set to 0) with
|
---|
| 134 | .BR SIGUSR2 .
|
---|
| 135 | .TP
|
---|
| 136 | .BI \-f " configfile"
|
---|
| 137 | Names the configuration file, by default
|
---|
| 138 | .BR /etc/dhcp.conf .
|
---|
| 139 | .TP
|
---|
| 140 | .BI \-c " cachefile"
|
---|
| 141 | Names the cache file, by default
|
---|
| 142 | .BR /usr/adm/dhcp.cache .
|
---|
| 143 | .TP
|
---|
| 144 | .BI \-p " poolfile"
|
---|
| 145 | Names the IP address pool, by default
|
---|
| 146 | .BR /usr/adm/dhcp.pool .
|
---|
| 147 | .SH "SEE ALSO"
|
---|
| 148 | .BR RFC-2131 ,
|
---|
| 149 | .BR RFC-1533 ,
|
---|
| 150 | .BR dhcp.conf (5),
|
---|
| 151 | .BR hosts (5),
|
---|
| 152 | .BR ifconfig (8),
|
---|
| 153 | .BR inet (8),
|
---|
| 154 | .BR boot (8),
|
---|
| 155 | .BR inetd (8),
|
---|
| 156 | .BR nonamed (8).
|
---|
| 157 | .SH DIAGNOSTICS
|
---|
| 158 | .TP
|
---|
| 159 | "'/etc/dhcp.conf', line ..."
|
---|
| 160 | The program exits on any configuration file error. You have to correct the
|
---|
| 161 | error and restart the program.
|
---|
| 162 | .TP
|
---|
| 163 | "No lease set for address ..."
|
---|
| 164 | There must be a lease time defined for addresses in the pool. Correct and
|
---|
| 165 | restart the program.
|
---|
| 166 | .TP
|
---|
| 167 | "###### declines #.#.#.# saying '...'"
|
---|
| 168 | A client with the given client identifier (usually 01 followed by the client's
|
---|
| 169 | Ethernet address) declines an IP address, hopefully with a message telling
|
---|
| 170 | why. This usually means that the IP address is already in use by another
|
---|
| 171 | host. This program, acting as a client, will tell what other host in its
|
---|
| 172 | message, but Windows has no additional info alas.
|
---|
| 173 | .TP
|
---|
| 174 | "Got a NAK from #.#.#.# [through #.#.#.#] saying '...'"
|
---|
| 175 | The server with the given IP address doesn't want us to have or keep the IP
|
---|
| 176 | address we were offered or are rerequesting. This could mean that the server
|
---|
| 177 | has forgotten about us and has given our address to another machine. This
|
---|
| 178 | is bad if our lease hasn't yet expired. There may be a relay involved, and
|
---|
| 179 | there may even be a text message with precise information.
|
---|
| 180 | .TP
|
---|
| 181 | "#.#.#.# offered by #.#.#.# is already in use by #:#:#:#:#:#"
|
---|
| 182 | We got an ARP reply for an offered address. We won't accept it, and send
|
---|
| 183 | out a DECLINE when we get an ACK.
|
---|
| 184 | .TP
|
---|
| 185 | "DHCP packet too big, ..."
|
---|
| 186 | You've got way to much information in the configuration file, more than fits
|
---|
| 187 | in a minimum size DHCP packet. (Notify the author if you really need to send
|
---|
| 188 | more information. He doesn't think anyone needs to.)
|
---|
| 189 | .TP
|
---|
| 190 | "Pool table is corrupt"
|
---|
| 191 | You will have to remove and refill the pool file. Chaos may ensue if
|
---|
| 192 | there are active clients and they don't use ARP to detect each other.
|
---|
| 193 | (Most do.)
|
---|
| 194 | .SH BUGS
|
---|
| 195 | There is no randomization of timers. Modern systems don't blink under the
|
---|
| 196 | load of several clients broadcasting a few packets in sync.
|
---|
| 197 | .PP
|
---|
| 198 | There is no extra time spent waiting for an ARP reply. It is assumed that
|
---|
| 199 | any IP stack will immediately respond, so that the DHCP server can't
|
---|
| 200 | possibly beat it at sending out an ACK. (The DHCP server has to commit the
|
---|
| 201 | lease to stable storage first anyway.)
|
---|
| 202 | .PP
|
---|
| 203 | Way more nonsense can be sent in a DHCP packet that MINIX 3 could do
|
---|
| 204 | something with, but nobody does so we don't bother.
|
---|
| 205 | .PP
|
---|
| 206 | DHCP was invented by a rabid gerbil on speed.
|
---|
| 207 | .SH AUTHOR
|
---|
| 208 | Kees J. Bot <kjb@cs.vu.nl>
|
---|