In cases where we have both a DHCP and ProxyDHCP response we retrieve the next-server and filename independently. This means they can actually come from different settings blocks. For instance, net0.dhcp is currently ordered before proxydhcp, so we can take the filename from proxydhcp and next-server from net0.dhcp. It's sensible that filename+next-server should be treated as a pair and retrieved from the same settings block. Re-order fetch_next_server_and_filename to get filename first, find the origin settings block, and get next_server from the same.
Signed-off-by: Alex Williamson <[email protected]> --- src/usr/autoboot.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/usr/autoboot.c b/src/usr/autoboot.c index b2d288e..6a1a70c 100644 --- a/src/usr/autoboot.c +++ b/src/usr/autoboot.c @@ -252,15 +252,11 @@ static void close_all_netdevs ( void ) { */ struct uri * fetch_next_server_and_filename ( struct settings *settings ) { struct in_addr next_server; + struct settings *filename_settings; char buf[256]; char *filename; struct uri *uri; - /* Fetch next-server setting */ - fetch_ipv4_setting ( settings, &next_server_setting, &next_server ); - if ( next_server.s_addr ) - printf ( "Next server: %s\n", inet_ntoa ( next_server ) ); - /* Fetch filename setting */ fetch_string_setting ( settings, &filename_setting, buf, sizeof ( buf ) ); @@ -272,6 +268,16 @@ struct uri * fetch_next_server_and_filename ( struct settings *settings ) { if ( ! filename ) return NULL; + /* Get settings block for filename; use next-server from same */ + filename_settings = fetch_setting_origin ( settings, + &filename_setting ); + + /* Fetch next-server setting */ + fetch_ipv4_setting ( filename_settings, + &next_server_setting, &next_server ); + if ( next_server.s_addr ) + printf ( "Next server: %s\n", inet_ntoa ( next_server ) ); + /* Parse next server and filename */ uri = parse_next_server_and_filename ( next_server, filename ); _______________________________________________ ipxe-devel mailing list [email protected] https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

