bootp - server for Internet Bootstrap Protocol
/usr/etc/bootp [ -d ] [ -f ]
bootp is a server that supports the Internet Bootstrap Protocol (BOOTP).
This protocol is designed to allow a (possibly diskless) client machine
to determine its own Internet address, the address of a boot server, and
the name of an appropriate boot file to be loaded and executed. BOOTP
does not provide the actual transfer of the boot file, which is typically
done with a simple file transfer protocol such as TFTP. A detailed
protocol specification for BOOTP is contained in RFC 951, which is
available from the Network Information Center.
The BOOTP protocol uses UDP/IP as its transport mechanism. The BOOTP
server receives service requests at the UDP port indicated in the
``bootp'' service description contained in the file /etc/services (see
services(4)). The BOOTP server is started by inetd(1M), as configured in
the inetd.conf file.
The basic operation of the BOOTP protocol is a single packet exchange as
1. The booting client machine broadcasts a BOOTP request packet to the
BOOTP server UDP port, using a UDP broadcast or the equivalent
thereof. The request packet includes the following information:
requester's network hardware address
requester's Internet address (optional)
desired server's name (optional)
boot filename (optional)
2. All the BOOTP servers on the same network as the client machine
receive the client's request. If the client has specified a
particular server, then only that server responds.
3. The server looks up the requester in its configuration file by
Internet address or network hardware address, in that order of
preference. (The BOOTP configuration file is described below.) If
the Internet address was not specified by the requester and a
configuration record is not found, the server looks in the
/etc/ethers file (see ethers(4)) for an entry with the client's
network hardware address. If an entry is found, the server checks
the hostname of that entry against the /etc/hosts file (see hosts(4))
in order to complete the network hardware address to Internet address
mapping. If the BOOTP request does not include the client's Internet
address and the server is unable to translate the client's network
hardware address into an Internet address by either of the two
methods described, the server does not respond to the request.
4. The server performs name translation on the boot filename requested
and then checks for the presence of that file. If the file is
present, then the server sends a response packet to the requester
that includes the following information:
requester's Internet address
server's Internet address
Internet address of a gateway to the server
vendor-specific information (not defined by the protocol)
If the boot file is missing, the server returns a response packet
with a null filename but only if the request was specifically
directed to that server. The pathname translation is: if the boot
filename is rooted, use it as is; else concatenate the root of the
boot subtree, as specified by the BOOTP configuration file, followed
by the filename supplied by the requester, followed by a period and
the requester's hostname. If that file is not present, remove the
trailing period and hostname and try again. If no boot filename is
requested, use the default boot file for that host from the
configuration table. If there is no default specified for that host,
use the general default boot filename, first with .hostname as a
suffix and then without. Note that tftpd(1M) must be configured to
allow access to the boot file (see the tftpd(1M) reference page for
Options [Toc] [Back]
The -d option causes bootp to generate debugging messages. All messages
from bootp go through syslogd(1M), the system logging daemon.
The -f option enables the forwarding function of bootp. Refer to the
following section, ``Booting through Gateways,'' for an explanation.
Bootp Configuration File [Toc] [Back]
In order to perform its name translation and address resolution
functions, bootp requires configuration information that it gets from an
ASCII file called /etc/bootptab and from other system configuration files
like /etc/ethers and /etc/hosts. Here is a sample bootptab file:
# /etc/bootptab: database for bootp server
# Blank lines and lines beginning with '#' are ignored.
# Root of boot subtree:
# Default bootfile:
# The remainder of this file contains one line per client
# interface with the information shown by the table headings
# below. The 'host' name is also tried as a suffix for the
# 'bootfile' when searching the boot directory.
# (e.g., bootfile.host)
# host htype haddr iaddr bootfile
IRIS 1 01:02:03:8a:8b:8c 192.0.2.1 unix
The fields of each line can be separated by variable amounts of white
space (blanks and tabs). The first section, up to the line beginning %%,
defines the place where bootp looks for boot files when the client
requests a boot file using a nonrooted pathname. The second section of
the file is used for mapping client network hardware addresses into
Internet addresses. Up to 512 hosts can be specified. The htype field
should always have a value of 1 for now; this indicates that the hardware
address is a 48-bit Ethernet address. The haddr field is the Ethernet
address of the system in question expressed as six hexadecimal bytes
separated by colons. The iaddr field is the 32-bit Internet address of
the system expressed in standard Internet dot notation (see inetd(3N)).
Each line in the second section can also specify a default boot file for
each specific host. In the example above, if the host called unixbox
makes a BOOTP request with no boot file specified, the server selects the
first of the following that it finds:
The length of the boot filename must not exceed 127 characters.
It is not necessary to create a record for every potential client in the
bootptab file. The only constraint is that bootp responds only to a
request from a client if it can deduce the client's Internet address.
There are three ways that this can happen:
o The client already knows its Internet address and includes it in the
BOOTP request packet.
o There is an entry in /etc/bootptab that matches the client's network
o There are entries in the /etc/ethers and /etc/hosts files (or their
NIS equivalents) that allow the client's network hardware address to
be translated into an Internet address.
Booting through Gateways [Toc] [Back]
Since the BOOTP request is distributed using a UDP broadcast, it is only
received by other hosts on the same network as the client. In some cases
the client may wish to boot from a host on another network. This can be
accomplished by using the forwarding function of BOOTP servers on the
local network. To use BOOTP forwarding, there must be a bootp process
running in a gateway machine on the local network. A gateway machine is
simply a machine with more than one network interface board. The gateway
bootp must be invoked with the -f option to activate forwarding. Such a
forwarding bootp resends any BOOTP request it receives that asks for a
specific host by name, if that host is on a different network from the
client that sent the request. The BOOTP server forwards the packet using
the full routing capabilities of the underlying IP layer in the kernel,
so the forwarded packet is automatically routed to the requested BOOTP
server if the kernel routing tables contain a route to the destination
The BOOTP server logs messages using the system logging daemon,
syslogd(1M). The actual disposition of these messages depends on the
configuration of syslogd on the machine in question. Consult syslogd(1M)
for further information.
bootp can produce the following messages:
'get interface config' ioctl failed (message)
'get interface netmask' ioctl failed (message)
getsockname failed (message)
forwarding failed (message)
send failed (message)
set arp ioctl failed
Each of the above messages means that a system call has returned an
error unexpectedly. Such errors usually cause bootp to terminate.
The message is the appropriate standard system error message.
less than two interfaces, -f flag ignored
Warning only (debug mode). Means that the -f option was specified
on a machine that is not a gateway. Forwarding only works on
request for unknown host xxx from yyy
Information only. A BOOTP request was received asking for host xxx,
but that host is not in the host database. The request was
generated by yyy, which can be given as a hostname or an Internet
request from xxx for 'fff'
Information only. bootp logs each request for a boot file. The
host xxx has requested boot file fff.
can't access boot file fff (message)
A request has been received for the boot file fff, but that file is
reply boot filename fff too long
The filename length fff exceeds the BOOTP protocol limit of 127
reply boot file fff
Information only. bootp has selected the file fff as the boot file
to satisfy a request.
can't reply to dd.dd.dd.dd (unknown net)
This bootp has generated a response to a client and is trying to
send the response directly to the client (that is, the request did
not get forwarded by another bootp), but none of the network
interfaces on this machine is on the same directly connected network
as the client machine.
reply: can't find net for dd.dd.dd.dd
The server is acting as BOOTP forwarder and has received a datagram
with a client address that is not on a directly connected network.
can't open /etc/bootptab
The bootp configuration file is missing or has wrong permissions.
Information only. bootp checks the modification date of the
configuration file on the receipt of each request and rereads it if
it has been modified since the last time it was read.
bad hex address: xxx at line nnn of bootptab
bad internet address: sss at line nnn of bootptab
string truncated: sss, on line nnn of bootptab
These messages mean that the format of the BOOTP configuration file
is not valid.
'hosts' table length exceeded
There are too many lines in the second section of the BOOTP
configuration file. The current limit is 512.
can't allocate memory
A call to malloc(3C) failed.
gethostbyname(sss) failed (message)
A call to gethostbyname(3N) with the argument sss has failed.
gethostbyaddr(dd.dd.dd.dd) failed (message)
A call to gethostbyaddr(3N) with the argument dd.dd.dd.dd has
dhcp_bootp(1M), inetd(1M), rarpd(1M), syslogd(1M), tftpd(1M), ethers(4),
PPPPaaaaggggeeee 5555 [ Back ]