the subject says it all ;-) debian stable busybox udhcp client does not support /32 netmasks. Changing the netmask to <32 works. Debian boots with busybox udhcp and the DHCP configuration fails. Once Debian is booted and running with the isc dhclient, the configuration works ok.
This is http://bugs.debian.org/652573 .
After quite some digging it appears the issue is in ip addr implementation, which does not allow /32 netmask.
Please excuse me for the noize. -Etoomuchwork today. This was completely wrong change... And the problem might be debian-specific after all, but generic enough so can affect all users. I'll post a followup here if/when I'll able to diagnose it further.
The problem here is more, well, complex. With /32 netmask, any routes will be outside the "host network", since it includes only one host address and nothing more. So any routes has to be handled in a special, two-step, way: first adding a route to the router itself, and second adding the regular route using that router. Or, with modern iproute command, one-step using "onlink" attribute. Original issue was in debian udhcpc script, which does not handle such complexity. Busybox code does the right thing, it merely passes all the info to the script for further processing. So I'm not sure what to do with this bugreport now: the busybox code is correct, but the issue is tricky enough to hit other users too, who implements the script, and cloud environments (where this issue is most likely to happen) becomes more and more popular and widespread to affect more users, so this buugreport should at least be visible somehow. Maybe adding some notes to examples/udhcp/simple.script will do the trick? Thanks, /mjt
I fixed this bug in debian finally. It required 2 components: 1) the "onlink" keyword patch for ip route, and 2) the fix for udhcpc default.script to use this keyword when the netmask is all-ones. Other my attempts to fix this, by adding host routes to the gateway first, failed, because there's no easy way to reset routes on renew if something is changed, at least not without keeping a state information somewhere. I also special-cased the /32 subnet there, -- onlink keyword can be used unconditionally, but since it is a rarely-used feature, I don't know what extra surprizes it can give us.
Fixed in git: commit 1a1143907c84308781e23f07d0c6c597bfd13abb Author: Michael Tokarev <mjt@tls.msk.ru> Date: Mon Jul 28 10:05:41 2014 +0400 iproute: support onelink route option and print route flags commit 9c192e7f946a351c811e2278bbf56b4dc6a4b663 Author: Denys Vlasenko <vda.linux@googlemail.com> Date: Thu Apr 6 00:53:43 2017 +0200 examples: make udhcpc script handle /32 netmasks