In 2004 working in France Telecom, we were looking for a robust high performance DHCP server suitable for an xDSL IPTV solution. There was an existing prototype developped on an ISC dhcpd base, but it proved to be very hard to maintain and to plug to an existing Oracle database.
At that time, the DHCP algorithm was very simple. Each client had a fixed address depending on line-ID in the DSLAM marked via the option-82. This simple algorithm would calculate the client address then update the Oracle database to mark the client as connected. ISC dhpcd was absolutely not suited for such an “algorithmic” address alocation.
I have already believed that DHCP was a simple protocol and that developing a industrial-strength server solution was not so difficult. My thoughts were quickly confirmed.
And yet, we did not find any suitable solutions at that time. So I decided to develop a simple prototype in Perl to check the faisability. A few weeks later it was ready and gave excellent results. At the same time, I revived the Perl module Net::DHCP to offer a full DHCP API.
The full server was then industrialized by a small project team and eventually put into production by end 2004. Performance was still quite high despite the interprative nature of Perl, resulting in more than 600rq/s on a standard Xeon 3.2GHz server.
Note: the module Net::DHCP is not very active anymore but I still do some bug correction from time to time. The active version is the Java one - dhcp4java.
The IPTV service evolved to a more classical dynamic addresses allocation mecanism. We had lots of discussion about what would be the best software architecture with internal R&D people, and this is where the dhcpd-j architecture came into life. It is basically a transposition of the classical Web architecture - application frontend / Database persistant store.
We first plugged the Perl front-end to an Oracle database. It shortly became obvious that we had to share our developments with a broader community of people in the company, and Perl was not the most easily readable and sharable code. I decided to switch to Java. The good news at that time was that the Java version was nearly 10x faster than the Perl version (which was already not so bad).
Stephan Hadinger
First PERL version (without database) was developed by: Bruno Crane, Stephan Hadinger with huge support from Eric Bottarlini, Pierre-Yves Eymard, Laurent Gaillard.
Second PERL version (with database) was developed by: Bruno Crane, Pierre Fischer (Oracle dev). Architecture and global design made by François Bourdaix ans his team.