[dhcp] Allow pseudo-DHCP servers to use pseudo-identifiers
authorMichael Brown <mcb30@ipxe.org>
Tue, 18 Aug 2015 14:43:06 +0000 (15:43 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 18 Aug 2015 14:43:06 +0000 (15:43 +0100)
commit60e2b71471aabce2b289320dd4322a994c772ce9
treebb8888e5337c7ce33bf44683d268bb40cc40afdd
parentc0b61bad99badd575bcae3a25b9de0aa43e88f25
[dhcp] Allow pseudo-DHCP servers to use pseudo-identifiers

Some ProxyDHCP servers and PXE boot servers do not specify a DHCP
server identifier via option 54.  We currently work around this in a
variety of ad-hoc ways:

 - if a ProxyDHCPACK has no server identifier then we treat it as
   having the correct server identifier,

 - if a boot server ACK has no server identifier then we use the
   packet's source IP address as the server identifier.

Introduce the concept of a DHCP server pseudo-identifier, defined as
being:

 - the server identifier (option 54), or

 - if there is no server identifier, then the next-server address
   (siaddr),

 - if there is no server identifier or next-server address, then the
   DHCP packet's source IP address.

Use the pseudo-identifier in place of the server identifier when
handling ProxyDHCP and PXE boot server responses.

Originally-fixed-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/udp/dhcp.c