Big Code Drops

11 Apr 2008 • 3 min read

OK, no-one likes big code drops. But I've just dropped a large one into dhcpcd git. Here's the commit message

Normally I hate massive code drops, but heh.
 The code has been drastically re-arranged.
 Instead of populating a custom structure while parsing dhcp messages, we now pluck what we need right out of the message itself. We have custom functions and a lookup table to make this really easy.
 This makes us more like dhclient and udhcpc, and will enable us to easily add (and remove!) more dhcp options without having to actually change the code (much).
 We now store the real dhcp message we got in /var/db/dhcpcd-$, the mtime of the file being used as when we got the lease. This file is read in when re-using an old lease instead of parsing the .info file.
 The benefit of all of this means that we're actually ~15k smaller when compiled with the same features.
 This has been tested for quite some time, and I'm pretty sure most bugs with the 3.2 branch have been fixed whilst making this. Right now, we are 99% command line compatible with the 3.2 branch.

That's pretty much it 😃 I've made this now, knowing that it will change very soon. Basically we're going to add knobs such that the default config will just do the basics - configure interface, routes and DNS. This satisfies NetBSD minimalistic requirements (more on this). Then the extra knobs will configure things like NTP, NIS, MTU and the hostname automagically like dhcpcd does at present. Don't panic though - the command line options to turn those off aren't going away either!

After this is done, we'll then add an interface to pull any DHCP option via our new generic interface, maybe something like so `dhcpcd -o LOGSERVERS,99`` Which will pull 2 options, one named which dhcpcd knows about, and the other numeric which dhcpcd doesn't. When dhcpcd doesn't know about it, you'll get the raw data as a hex string I would imagine.

This should make dhcpcd a lot more flexable 😃 As it's very small, and already feature rich I've put it forward to the NetBSD tech-net mailing list to fullfill a tiny dhcp client to replace the bloated dhclient from ISC. It's not being done as a SoC project (I don't feel that I qualify as dhcpcd was already written really) and it's not a done deal that it will be used in NetBSD, but I am hopeful 😃