| 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. |