BOOTPD(8)

NAME
bootpd - Internet BOOTP Protocol Server

SYNOPSIS
bootpd [-i <interface> [-i <interface>]...] [-n <netinfo_domain> [-n <netinfo_domain]...] [-d] [-v] [-b] [-q] [-e] [-m]

DESCRIPTION
bootpd implements an Internet Bootstrap Protocol (BOOTP) server as defined in RFC951, RFC1542, and RFC2132.

One host on each network segment is normally configured to run bootpd by setting CONFIGSERVER=-YES- in /etc/hostconfig.

The server can also be started by inetd by modifying the file /etc/inetd.conf to include a line:
  bootps dgram udp wait root /usr/libexec/bootpd bootpd

In this case, bootpd is started when a BOOTP request arrives. The server continues servicing requests until it is idle for more than 5 minutes, after which it exits to conserve system resources.

When a request from a known client arrives, the server (by default) logs an entry to /var/log/system.log indicating which client made the request, and logs another entry once a reply is sent. This feature can be turned off using the -q option described below.

OPTIONS

-d  Remain in the foreground and produce extra debugging output to stderr.

-v  Be more verbose in messages logged to /var/log/system.log.

-q  Be quiet as possible. Only report serious errors to /var/log/system.log.

-b  Only respond if the bootfile exists.

-e  Lookup ethernet hosts using the identifier property instead of en_address.

-i <interface>
    Only respond to requests received on the specified interfaces. For example,
        bootpd -i en0 -i en1
    forces bootpd to only respond to requests received on ethernet ports en0 and en1.

-n <netinfo_domain>
    Search for host entries in the given netinfo domain. This flag may appear multiple times, the order of lookups is the order in which the flags appear. The value "..." means search the entire netinfo hierarchy (the default). The <netinfo_domain> value can be specified as a domain path or as host/tag. For example,
            bootpd -n ...
    is the same as simply invoking bootpd without any options, and
            bootpd -n .. -n localhost/local
    forces bootpd to look in the parent domain then in the local domain.

-m  Act as a network boot server for diskless Macintosh computers (see the NetBoot Server documentation for more details on this mode of operation).

HOST DATABASE
bootpd uses netinfo (see netinfo(5)) to lookup host entries. [The server reads host entries from /etc/bootptab only if invoked with the -F flag, though this mode of operation is discouraged and may disappear in future versions of the server.]

Host entries appear as individual subdirectories within the /machines directory of a netinfo domain. The following list of properties are read by the server:

name
    The name of the host.

en_address
    Ethernet address(es) of the host stored in colon hex ie. "%x:%x:%x:%x:%x:%x" format.

identifier
    Client identifer(s) of the host (see -e option above) stored as "%x/%x:%x:...:%x" where the hex byte number preceding the slash '/' character is the hardware type, and the bytes following the slash are in colon hex format. Ethernet addresses stored in this format would be stored as "1/%x:%x:%x:%x:%x:%x".

ip_address
    IP address(es) stored in dotted decimal ie. "%d.%d.%d.%d" format.

bootfile
    Executable image file to be downloaded by the client via TFTP.

BOOTP CLIENT HOST LOOKUP

A BOOTP client is identified by its unique hardware (MAC) address, and is stored in either the en_address or identifier property. By default, ethernet hosts are looked up using the en_address property.

The server searches for a host entry containing both its hardware address and a relevant IP address. A relevant IP address is one which is useful for the subnet on which the client is attempting to boot. If none is found, the server does not respond. The server supports having more than one IP address associated with a single client: a single BOOTP client can boot on multiple subnets at different times (eg. a laptop that is frequently moved from one location to another). Multiple host entries may include the same hardware address but should have distinct IP addresses to avoid having more than one host trying to use the same IP address. If there is more than one relevant IP address for a client, the server chooses the first one that it finds.

The server supports multi-homed hosts (host with the same name but multiple IP addresses) by treating the en_address, identifier, and ip_address properties as parallel arrays. For example, consider a host entry with the following values:
{
    "name" = "orange";
    "en_address" = { "0:5:2:f:a:b", "0:5:2:1c:9e:d6" };
    "ip_address" = { "17.202.42.110", "17.202.21.221" };
}

Host "orange" has two IP addresses associated with its name. The interface with ethernet address "0:5:2:f:a:b" has IP address "17.202.42.110", and interface "0:5:2:1c:9e:d6" has IP address "17.202.21.221".

BOOTP VENDOR EXTENSIONS
bootpd supplies a BOOTP client with its hostname, subnet mask, default router(s), domain name server(s), and domain name. If bootpd has no explicitly configured values for the client's subnet, it attempts to supply values from the server's own configuration. Explicit configuration is required in several cases: to service requests that arrive via a BOOTP relay agent, when the server is multi-homed ie. has multiple network interfaces, and when any of the subnets share the same physical wire (see supernet property below).

Explicit configuration values are specified in subnet entries stored under netinfo. The entries appear as subdirectories of /config/dhcp/subnets. The server searches the netinfo domain hierarchy looking for this directory hierarchy, and stops when it finds the first occurrence.

A subnet entry contains the following properties:

name
    The name of the subnet, by convention this is the network address eg. 17.202.40/22 for a subnet with 22 bits of network address. The name is not significant to the server.

net_address
    IP address for this subnet.

net_mask
    IP subnet mask.

client_types
    Must be set to "bootp" for BOOTP clients.

net_range
    The range of client IP addresses for which this entry applies. Specified using two IP addresses, the start and end of the range.

dhcp_router
    IP address(es) of IP router(s). (optional)

dhcp_domain_name_server
    The list of IP addresses for DNS servers. (optional)

dhcp_domain_name
    Default domain name. (optional)

supernet
    Subnets that share the same physical wire have the same supernet value. The value is a string value. (optional)

Subnet entries may not overlap, or specify values that are inconsistent. Errors in configuration are logged to /var/log/system.log. There may be multiple subnet entries for a given subnet, allowing different configuration values to be specified for a given range of IP addresses within the subnet.

A BOOTP client must set the magic number field (first 4 bytes of the vendor extensions field) to 99.130.83.99 (dotted decimal) to have the server fill in the vendor extensions.

SEE ALSO

bootpc(8), inetd(8), tftpd(8)