[dhcp] Keep multiple DHCP offers received, and use them intelligently
commit5efc2fcb602864e82de2cd7414e3828f589034e5
authorJoshua Oreman <oremanj@rwcr.net>
Tue, 3 Nov 2009 18:45:58 +0000 (3 13:45 -0500)
committerMarty Connor <mdc@etherboot.org>
Thu, 21 Jan 2010 23:36:26 +0000 (21 18:36 -0500)
tree45e1981406297577a3a27f4bed99cf347be37903
parent466d8fc234cf32cb63d9d773e2f92f51860165f9
[dhcp] Keep multiple DHCP offers received, and use them intelligently

Instead of keeping only the best IP and PXE offers, store all of them,
and pick the best to use just before a request is sent. This allows
priority differentiation to work even when lower-priority offers
provide PXE options, and improves robustness at sites with broken PXE
servers intermingled with working ones: when a ProxyDHCP request times
out, instead of giving up, we try the next PXE offer we've received.
It also allows us to avoid breaking up combined IP+PXE offers, which
can be important with some firewall configurations. This behavior
matches that of most vendor PXE ROMs.

Store a reference to the DHCPOFFER packet in the offer structure, so
that when registering settings after a successful ACK we can register
the proxy PXE settings we originally received; this removes the need
for a nonstandard duplicate REQUEST/ACK to port 67 of proxy servers
like dnsmasq that provide PXE options in the OFFER.

Total cost: 450 bytes uncompressed.

Signed-off-by: Marty Connor <mdc@etherboot.org>
src/net/udp/dhcp.c