joind - BOOTP and DHCP server daemon
/usr/sbin/joind [-f] [-dn] [-ln] [-t minutes]
-f Sets foreground mode. In this mode, joind will not run as a daemon.
All messages are written to standard out (stdout) and standard error
(stderr), although warnings and errors are still sent to syslog(3) as
-dn Sets debug level to n. If debug is turned on, log messages are also
-ln Enables warning (n > 0) and log (n > 1) messages. If n is not expli-
citly given, the value one (1) is assumed (warnings are turned on).
Terminates if minutes have passed and no packets have been received.
This option is valid only if joind was started from inetd.
The joind server is the server that provides configurations to clients on
the network using the DHCP or BOOTP protocols; it normally runs as a daemon
process, and may be started either from the shell command line interface or
by the inetd daemon.
In default mode of operation, joind reads configuration and policy informa-
tion from files created by xjoin, the graphical user interface tool for
administering these databases. It then listens on a well-known port for
client hosts requesting configuration either by the DHCP protocol or by the
The joind daemon looks in the /etc/services file to find the port numbers
it should use. Two entries are extracted:
The BOOTP server listening port.
The destination port used to reply to clients.
If the port numbers cannot be determined in this manner, they are assumed
to be port 67 for the server and port 68 for the client.
When a request is received from a client on a network that is administered
by a joind daemon, it responds with an Internet address that the client can
use, and sufficient information to permit the client to boot and configure
its TCP/IP stack according to either the DHCP or BOOTP protocols as
described in RFC1541 and RFC1497, respectively.
The joind daemon rereads its configuration file when it receives a hangup
signal (SIGHUP) or when it receives a BOOTP request packet and detects that
the file has been updated. Hosts can be added, deleted, or modified when
the configuration file is reread.
The joind server writes informational and error messages in four
categories: errors, warnings, information, and debug. Errors are severe,
usually unrecoverable events within the server due to resource exhaustion
and other unexpected failure of system calls. Warnings are less severe, do
not terminate the server, and in most cases describe unusual or incorrect
datagrams received from clients, or requests for service that cannot be
provided. Informational messages provide a human readable transcription of
(correct) actions performed by the server on behalf of client hosts. Debug
messages may be generated at various levels of verbosity from zero (not at
all) through nine, as controlled by the -d option.
The disposition of messages is (by default) as follows: warning, informa-
tion, and debug messages are discarded: errors are written to /var/join/log
and are sent to the system logger syslog(3) at priority LOG_ERR and with a
facility identifier LOG_DAEMON. If warnings were enabled, they are also
sent to syslog with the same facility, but at priority LOG_WARNING. The
creation and disposition of messages is controlled by the -f, -d, and -l
command line options, and the environment variable JOINLOG.
If you plan to use the joind daemon to support BOOTP requests only, you
might want the inetd daemon start joind automatically. To do this, uncom-
ment the following line in the /etc/inetd.conf file:
bootps dgram udp wait root /usr/sbin/joind joind
This causes joind to be started only when a boot request arrives. If joind
does not receive another boot request within fifteen minutes of the last
one it received, it exits to conserve system resources.
To run the joind daemon, you must also run the tftpd daemon.
Upon startup, joind first reads its configuration file, /etc/bootptab, and
then begins listening for BOOTREQUEST packets.
A cluster member should never be a DHCP client. It should always use static
If a cluster is to support a DHCP server, there can be only one DHCP server
for all the cluster members using a common database with failover.
Do not terminate the server with SIGKILL. Doing so leads to data loss, and
frequently results in a corrupted database. Use SIGTERM, SIGINT or SIGQUIT
Nonstandard subnet masks for all networks administered by the server must
be available either through /etc/join/netmasks or NIS.
The database used by the server does not support multiuser write con-
currency. When the server is in operation the entire database is locked
against other applications. This means that you cannot use jdbmod or
xjdbmod to modify records in the database while the server is running. The
converse is also true.
If the naming policy is to be changed (for example, from assigning names by
MAC address to assigning names by IP address) you must first, before chang-
ing the server policy database, stop the server, dump the name data (using
jdbdump), and then reload after the policy file has changed.
SIGTERM, SIGINT, SIGQUIT and SIGUSR2 terminate the server in a controlled
manner. SIGHUP tells the server to reread its configuration databases.
SIGUSR1 dumps database internals.
Never stop the server with SIGKILL. This leads to data loss and corruption
of the lease and names databases.
By default, joind reads its configuration and policy databases from files
in the /etc/join directory. The environment variable JOINCONFIG may be
used to select a different directory. These databases may be stored as text
or binary. The text files are:
Parameters and configuration data for individual clients, client
classes, and networks.
Networks joind controls, and a pool of IP addresses which are available
for the server to assign to clients.
A collection of names available on a per-join-server, per domain-name
that the server can assign to clients.
Parameters governing the behavior of joind, and general policies con-
cerning network administration and their binary counterparts:
bootptab.hsh, nets.hsh, namepool.hsh, and server.hsh.
During operation, the server creates dynamic database bindings of IP
addresses and names to MAC addresses. The following files are stored under
the /var/join directory, unless overridden by the environment variable
*.hsh Hash indexes.
The joind daemon writes a startup message and other messages previously
described in the $JOINSPOOL/log file unless the environment variable JOIN-
LOG is set, in which case the file named by that variable is used (NOTE:
this must be an absolute filename, not a directory, nor a path relative
log The (human readable) log.
Commands: inetd(8), joinc(8), xjoin(8)
System calls: syslog(3)
Files: bootptab(4), namepool(4), nets(4), server.pcy(4)
RFC1497, RFC1541, RFC1542, RFC1533, RFC1534