udhcp Server/Client Package
The udhcp package is no longer maintained/packaged as a standalone project. It
has been fully integrated into busybox
you want to use only udhcp, you should download the latest version of busybox
and disable all other applets.
The udhcp Server/Client Package (licensed under the GPL -- see COPYING for details) was originally designed to run on a
runs on Greg Ungerer's
uClinux-coldfire linux port).
Call for testing
The 0.9.x version of udhcp is basically a complete rewrite of the previous versions and has matured very quickly. I'd like to get a list together of both known interoptability, and platforms that udhcp compiles/works on. I've noticed that win98 often requests unicast packets when it can only receive broadcast packets, so I started a unicast blacklist within the server, and I'm suspected that win95 will go in there too. If I notice that this behavior is too widespread, I'll probably just drop unicasting altogether. As soon as the list is more or less complete, I'll release a stable version of udhcp
If you have something to add to the list, let
Client Interoptability list
Server Interoptability list
Working client platforms
Working server platforms
Download the latest version (includes client):
udhcp-0.9.8.tar.gz (43k) 31 Oct, 2002
Download the latest development tree of udhcp or browse the source tree.
Download daily snapshots of udhcp:
Download on old version of udhcp:
dhcpd-0.8.25.tgz (22k) 20 January, 2000
Download a windows port by Daniel Parnell
dhcpd-win-0.8.25.tgz (65k) 6 April, 2000
Download the old development version:
dhcpd-0.8.29.tgz (22k) 6 April, 2000
- split up README files (me)
- use /dev/urandom to seed xid's (instead of time(0)) (me)
- fixed renew behavior (me)
- udhcp now fits nicely into busybox (Glenn McGrath as well as myself)
- updated client manpage (me)
- both client and server now use sockets for signal handling,
hopefully, this will be the last needed change in signal
handling, I'm fairly certain all the possible races are now
- The server now restarts the auto_time timer when it receives
a SIGUSR1 (write out config file). (me)
- Improve signal handling (David Poole)
- Fix to config file parsing (Matt Kraai)
- Fix load lease logic (me)
- Fix clear_lease logic (me)
- -h is now an alias for -H (udhcp bug #1253)
- Shorter timeout on not receiving offers (me)
- Improved signal behavior by client (me)
- Would never assign end address (Keith Smith)
- Was improperly reporting yiaddr as siaddr (ben)
- Fixed reading of client id (David Poole)
- change sys_errlist to strerror() as it aparently doesn't exist (Erik Anderson)
- fixed get_raw_packet so it returns -2 on non fatal errors (Ted Lemon)
- Improved (hopefully) NAKing behavior (me)
- Added -b option (Jouni Malinen)
- Compute checksums correctly on big endian hosts (Jouni Malinen)
- Use add_lease in read_leases, sanitizes leases more, and clears out exprired ones if there is no more room (me)
- Moved udhcpd.leases to /var/lib/misc/udhcpd.leases (Debian bug #147747)
- Change (obsolete) AF_INET in arping.c to PF_PACKET (Debian bug #127049)
- Added script hook for DHCPNAK (nak), as well as providing the message option (me)
- Generate the paramaters request list by seeing what options in options.c are ored with OPTION_REQ in options.c
- Fix dhcp renew forgetfullness on client (bug #1230)
- Fix dhcp release bug on client (bug #1231)
- Set option request list for DHCP renew (bug #1233)
- Set BOOTREQUEST/REPLY properly
- Change client-identifier field to popularly expected behavior (me)
- Only reopen port on errors (me)
- Change fork/close/setsid structures to daemon() (me)
- Allow user to specify udhcpd config file at run time (Steven, me)
- Write pidfile after changing it (Steven CTR Carr)
- Added env var docs to udhcpc man page (Matt)
- Standardized lowercase udhcp in documentation (me)
- Accept packets without a UDP checksum (me)
- Accept packets with extra garbage (me)
- Better error handling in files.c (me)
- Combined read_interface function to reduce COMBINED_BINARY size (me)
- Drop calc_length(), some servers choke on smaller packets (me)
- Try to clean some fat out (me)
- Added bootp paramaters to server (me)
- Added bootp paramaters to client (me)
- Added vendor id to client (me)
- Better pidfile handling in client and server (me)
- Added man pages (Matt Kraai)
- Fixed $HOME and $PATH env passing (me)
- Fixed client to only listen for raw packets on correct interface (me)
- added --quit,-q option to quit after a lease is obtained (me)
- Fixed 100% CPU utilization by client when interface is down (me)
- Force broadcast to broken clients that request unicast (ie, MSFT 98) (me)
- Make install rules (Adam J. Richter)
- One scripts, instead of many (Adam)
- Removed script paramater info files (env vars only) (Adam)
- Controlling of forking behavior in client (Adam)
- General script.c/dhcpc.c cleanups (Adam)
- Increased debugging verbosity (me)
- Cut trailing whitespace when reading config file (me)
- added hostname option to client (me)
- fixed a strncpy bug in script.c (me)
- fixed a leaky socket in dhcpc.c (me)
- fixed a leaky socket in dhcpd.c (me)
- Added raw sockets to client (me)
- alignment fixes (Mark Huang)
- compiler warning fixes (Mark Huang)
- client now sends parameter list (Mark Huang/me)
- added ipttl option
- Does now not request broadcast packets
- Added udhcpc client
- reorganized functions/files
- listening socket now only binds to one interface
0.9.0 (010720) Major rewrite, current changes, goals:
- should not segfault on bogus packets.
- Options can be read from sname and file fields.
- supports all DHCP messages (release, decline, inform).
- IP block is now specified by a range of IP's.
- Leases file now contains lease time (relative, or absolute).
- Just about any DHCP option is now supported.
- DNS entries are no longer read from resolv.conf
- Lease file can be written periodically when the process receives a SIGUSR1
- arpping should be supported on all arches.
- support for DHCP relays.
- DHCP messages can be unicast if the client requests it.
- many, many, many other things.
Development is quite active right now, so I'd really like to know what you think.
Why would I want to use the udhcp server/client
The udhcp server/client is targeted deliberately at embedded environments...
Other linux DHCP servers out there (such as the ISC DHCP server) are targeted
at larger systems such as PCs (with more RAM/disk space/etc.).
As a result, the udhcp package does not have as large a feature set
as some of these DHCP packages.
Compiled against uClibc, both the server and client binaries are around 18k and when
compiled as one combined binary, has a size of 28k. udhcp is a perfect fit for embedded
systems requring DHCP capabilities.
The udhcp server lease file is in binary format making the additional storage space required
for IP and MAC addresses minimal. It also has the option of storing lease times in absolute
form, or relative form, for systems without a clock. The lease file can also be saved
periodically or by using a signal for systems with flash memory.
The client accepts all options on the command line, and calls external scripts to handle the
configuration of interfaces to allow for the ultimate flexibility.
The operation is fairly straightforward, and the latest README can be found here.
Server README README.udhcpd
Client README README.udhcpc
Dump leases README README.dumpleases
Sample server config file udhcpd.conf
udhcp now has a mailing list
To subscribe, click here
Other Lineo opensoure projects
Embedded open source consulting in Europe.
Web hosting (they host busybox.net and uclibc.org).
Custom Linux, embedded Linux, BusyBox, and uClibc development.
Have a question/comment? Have a patch? Email me:
$Id: index.html,v 1.19 2004/12/04 02:13:37 vapier Exp $