[ipxe-devel] DHCP/ProxyDHCP settings ordering bug

Michael Brown mcb30 at ipxe.org
Fri Jun 7 12:28:13 UTC 2013

On 06/06/13 23:37, Alex Williamson wrote:
> When iPXE tries to boot in the above environment, it tries to load
> tftp:// as the boot file.  The next-server comes from
> server1's DHCP packet and filename comes from server2's.  Clearly this
> is wrong.
> From what I can gather, this is a result of neither packet having a
> priority and the ordering of adding the settings from the DHCP packet
> before the ProxyDHCP packet.  list_add_tail bites us.  DHCP packets
> don't support reallocation, so I can't add an artificial priority to get
> them in the correct order.  Registering the settings from the ProxyDHCP
> packet before the DHCP packet does work, but it's ugly and prone to
> being broken by changes to the list manipulation code in settings.
> Suggestions?

You could work around it by adding an artifical priority to "net0".  The 
DHCP settings will show up as "net0.dhcp" while the ProxyDHCP settings 
will show up as just "proxydhcp" (outside the scope of "net0"); setting 
"net0/priority" will therefore affect "net0.dhcp" but not "proxydhcp". 
This is an ugly hack and I wouldn't suggest using it, but it can be done.

As for a proper fix: it's difficult to reconcile the conflicting 
requirements of the PXE spec (which conflicts with itself) and iPXE's 
settings model (which incorporates multiple sources of settings not 
envisioned by the PXE spec).  The best solution I can think of off-hand 
would be for fetch_next_server_and_filename() to ensure that both 
next-server and filename come from the same settings block.

This could be done by using fetch_setting_origin() to determine the 
settings block containing the filename and then using that as the 
settings block when fetching next-server.  (As in your example, some 
DHCP servers will provide a spurious next-server defaulting to the DHCP 
server's own IP address; it therefore seems sensible to treat the 
presence of a filename as indicating the intended presence of a 
next-server+filename pair.)



More information about the ipxe-devel mailing list