udhcp server/client package readme
-------------------------

The udhcp server/client package is primarily geared towards embedded
systems. It does however, strive to be fully functional, and RFC
compliant.

udhcp server (udhcpd)
--------------------

The only command line argument to udhcpd is an optional specifed
config file. If no config file is specified, udhcpd uses the default
config file, /etc/udhcpd.conf. Ex:

udhcpd /etc/udhcpd.eth1.conf

The udhcp server employs a number of simple config files:

udhcpd.leases
------------

The udhcpd.leases behavior is designed for an embedded system. The
file is written either every auto_time seconds, or when a SIGUSR1
is received (the auto_time timer restarts if a SIGUSR1 is received). 
If you send a SIGTERM to udhcpd directly after a SIGUSR1, udhcpd will
finish writing the leases file and wait for the aftermentioned script
to be executed and finish before quiting, so you do not need to sleep
between sending signals. When the file is written, a script can be
optionally called to commit the file to flash. Lease times are stored
in the file by time remaining in lease (for systems without clock
that works when there is no power), or by the absolute time that it
expires in seconds from epoch. In the remainig format, expired leases
are stored as zero. The file is of the format:

16 byte MAC
4 byte ip address
u32 expire time
16 byte MAC
4 byte ip address
u32 expire time
.
etc.

example: hexdump udhcpd.leases

0000000 1000 c95a 27d9 0000 0000 0000 0000 0000
0000010 a8c0 150a 0d00 2d29 5000 23fc 8566 0000
0000020 0000 0000 0000 0000 a8c0 140a 0d00 4e29
0000030


udhcpd.conf
----------

The format is fairly simple, there is a sample file with all the
available options and comments describing them in samples/udhcpd.conf


udhcp client (udhcpc)
--------------------

The udhcp client negotiates a lease with the DHCP server and notifies
a set of scripts when a leases is obtained or lost. The command line
options for the udhcp client are:

-c, --clientid=CLIENTID         Client identifier
-H, --hostname=HOSTNAME         Client hostname
-h,				Alias for -H
-f, --foreground                Do not fork after getting lease
-b, --background                Fork to background if lease cannot be
                                immediately negotiated.
-i, --interface=INTERFACE       Interface to use (default: eth0)
-n, --now                       Exit with failure if lease cannot be
                                immediately negotiated.
-p, --pidfile=file              Store process ID of daemon in file
-q, --quit                      Quit after obtaining lease
-r, --request=IP                IP address to request (default: none)
-s, --script=file               Run file at dhcp events (default:
                                /usr/share/udhcpc/default.script)
-v, --version                   Display version

If the requested IP address cannot be obtained, the client accepts the
address that the server offers.

When an event occurs, udhcpc calls the action script. The script by
default is /usr/share/udhcpc/default.script but this can be changed via 
the command line arguments. The three possible arguments to the script 
are:

	deconfig: This argument is used when udhcpc starts, and
	when a leases is lost. The script should put the interface in an
	up, but deconfigured state, ie: ifconfig $interface 0.0.0.0.
	
	bound: This argument is used when udhcpc moves from an
	unbound, to a bound state. All of the paramaters are set in
	enviromental variables, The script should configure the interface,
	and set any other relavent parameters (default gateway, dns server, 
	etc).
	
	renew: This argument is used when a DHCP lease is renewed. All of
	the paramaters are set in enviromental variables. This argument is
	used when the interface is already configured, so the IP address,
	will not change, however, the other DHCP paramaters, such as the
	default gateway, subnet mask, and dns server may change.

	nak: This argument is used with udhcpc receives a NAK message.
	The script with the deconfig argument will be called directly
	afterwards, so no changes to the network interface are neccessary.
	This hook is provided for purely informational purposes (the
	message option may contain a reason for the NAK).

The paramaters for enviromental variables are as follows:

	$HOME		- The set $HOME env or "/"
	$PATH		- the set $PATH env or "/bin:/usr/bin:/sbin:/usr/sbin"
	$1		- What action the script should perform
	interface	- The interface this was obtained on
	ip		- The obtained IP
	siaddr		- The bootp next server option
	sname		- The bootp server name option
	boot_file	- The bootp boot file option
	subnet		- The assigend subnet mask
	timezone	- Offset in seconds from UTC
	router		- A list of routers
	timesvr		- A list of time servers
	namesvr		- A list of IEN 116 name servers
	dns		- A list of DNS server
	logsvr		- A list of MIT-LCS UDP log servers
	cookiesvr	- A list of RFC 865 cookie servers
	lprsvr		- A list of LPR servers
	hostname	- The assigned hostname
	bootsize	- The length in 512 octect blocks of the bootfile
	domain		- The domain name of the network
	swapsvr		- The IP address of the client's swap server
	rootpath	- The path name of the client's root disk
	ipttl		- The TTL to use for this network
	mtu		- The MTU to use for this network
	broadcast	- The broadcast address for this network
	ntpsrv		- A list of NTP servers
	wins		- A list of WINS servers
	lease		- The lease time, in seconds
	dhcptype	- DHCP message type (safely ignored)
	serverid	- The IP of the server
	message		- Reason for a DHCPNAK
	tftp		- The TFTP server name
	bootfile	- The bootfile name

additional options are easily added in options.c.
	
udhcpc also responds to SIGUSR1 and SIGUSR2. SIGUSR1 will force a renew state,
and SIGUSR2 will force a release of the current lease, and cause udhcpc to
go into an inactive state (until it is killed, or receives a SIGUSR1). You do
not need to sleep between sending signals, as signals received are processed
sequencially in the order they are received.



compile time options
-------------------

The Makefile contains three of the compile time options:
	
	DEBUG: If DEBUG is defined, udhcpd will output extra debugging
	output, compile with -g, and not fork to the background when run.
	SYSLOG: If SYSLOG is defined, udhcpd will log all its messages
	syslog, otherwise, it will attempt to log them to stdout.
	
	COMBINED_BINARY: If COMBINED_BINARY is define, one binary, udhcpd,
	is created. If called as udhcpd, the dhcp server will be started.
	If called as udhcpc, the dhcp client will be started.
	
dhcpd.h contains the other two compile time options:
	
	LEASE_TIME: The default lease time if not specified in the config
	file.
	
	DHCPD_CONFIG_FILE: The defualt config file to use.
	
options.c contains a set of dhcp options for the client:

	name[10]: The name of the option as it will appear in scripts
	
	flags: The type of option, as well as if it will be requested
	by the client (OPTION_REQ)

	code: The DHCP code for this option

busybox drop-in
--------------
udhcp is now a drop-in component for busybox (http://busybox.net).
To update busybox to the latest revision, simply do a:

cp *.[ch] README AUTHORS COPYING ChangeLog TODO \ 
	<busybox_source>/networking/udhcp

The only two files udhcp does not provide are config.in and
Makefile.in, so these may need to be updated from time to time.
