joinc - Daemon for DHCP client configuration
/usr/sbin/joinc [-f] [-dn] [-ln]
-dn Sets debug level to n. If debug is turned on, log messages are also
-f Runs in the foreground instead of as a daemon process.
-ln Enables warning (n > 0) and log (n > 1) messages. If n is not expli-
citly given, the value one is assumed (warnings are turned on).
The joinc daemon implements the client half of the Dynamic Host Configura-
tion Protocol (DHCP) with hardware extensions.
(JOIN is a trademark of Competitive Automation.)
The DHCP protocol, among other things, permits a client to establish an
endpoint for communication with a network by delivering an IP address for
each of the client's network interfaces, and a "lease" on that address. The
lease specifies the interval for which the address remains valid: it may be
infinite or of fixed duration. If it appears that the client wishes to con-
tinue using the IP address after its expiration, the DHCP protocol must
negotiate an extension. For this reason the DHCP client code must run as a
daemon, only terminating when the client powers down.
Communication with the joinc daemon is effected through the agency of an
auxiliary program called dhcpconf. The joinc daemon may be invoked as a
user process (requiring root privileges), but this is not necessary as the
dhcpconf program will start it implicitly.
When started, joinc reads its startup file, /etc/join/client.pcy and either
proceeds to act on the instruction(s) passed to it by the dhcpconf program,
or enters a passive state while awaiting a new command. When joinc receives
a command to configure an interface the DHCP protocol starts. If successful
the interface is configured. The configuration received is stored in the
interface.dhc file located (by default) under the /etc/join directory. The
client daemon sleeps until it needs to renew the lease, which happens well
before the lease expires. Upon wakeup, if the interface is found to be
down or has a different IP address, joinc considers that the interface is
no longer under its control and drops it from future consideration, until
an explicit request arrives from dhcpconf. If the lease cannot be renewed,
joinc takes down the interface when it expires as required by the DHCP pro-
tocol. See RFC 1541 for details.
The DHCP protocol also acts as a mechanism to configure other information
needed by the client such as name domain and router addresses. The joinc
daemon does not configure this information but acts as a database which may
be interrogated by other programs, particularly by dhcpconf. This approach
is more flexible in that it allows third party software access to the data
through a published API, and allows system administrators to control client
configuration by customizing startup scripts to permit various aspects of
the client and its software to be customized in a specific order. On
clients with a single interface this is straightforward; clients with mul-
tiple interfaces may present difficulties because some information arriving
on different interfaces may need to be merged, or may be inconsistent.
Furthermore, the configuration of the interfaces is asynchronous; requests
may arrive while some or all of the interfaces are still unconfigured. The
joinc daemon resolves these problems as follows. When a request for a glo-
bal parameter arrives, joinc searches all interfaces that were successfully
configured, and returns to the requester the name of the first one it find
to contain the pertinent data. The client program may then access the data
by an API which reads the appropriate interface.dhc file. If no interfaces
are successfully configured when the request is received, or if the none of
those which are configured have the data, the request fails. The dhcpconf
program allows this behavior to be overridden by insisting that the global
data sought be associated with a particular interface. See dhcpconf(8) for
The joinc daemon writes informational and error messages in four
Errors are severe, usually unrecoverable, events due to resource
exhaustion and other unexpected failure of system calls. An error is
also generated if the client's lease on an IP address is in danger of
Warnings are less severe, and in most cases describe unusual or
incorrect datagrams received from clients, or requests for service that
cannot be provided.
Informational messages provide a 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.
Warning, informational, and debug messages are discarded. Errors are writ-
ten to /dev/console and are sent to the system logger syslog(3) at priority
LOG_ERR and with a facility identifier LOG_DAEMON. If warnings are enabled
they also are written to the system console and syslog with the same facil-
ity, but at priority LOG_WARNING. The creation and disposition of messages
is controlled by the -f, -d, and -l command line options, and the JOINLOG
environment variable. When present, JOINLOG names a file to which mes-
sages are sent in preference to the system console. Note that until the
root file system is mounted read-write no ordinary file can be used for
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.
The joinc daemon can configure clients with two or more interfaces giving
each an IP address. However, each interface so configured must be on a dif-
ferent physical network and subnet.
Upon receipt of SIGUSR1 signals, the joinc daemon dumps the contents of its
scheduling table and the status of each interface under its control.
By default, the joinc daemon expects to read its policy file and read and
write its configuration databases in the /etc/join directory. The JOINCON-
FIG environment variable may be used to select a different directory.
Contains parameters that govern the behavior of joinc, and general pol-
icies concerning network administration.
Contains the configuration for interface. The existence of this file
does not imply that the configuration is correct, since the lease may
Commands: dhcpconf(8), dhcpparm(8), joind(8), showdhc(8), shleases(8)