[gPXE-devel] [PATCH]: don't use next-server from DHCP with filename from ProxyDHCP

Gianni Tedesco gianni.tedesco at citrix.com
Fri Sep 17 13:02:39 EDT 2010


When doing autoboot in a proxydhcp environment, the settings-fetch for
next-server returns the IP given by a DHCP server which has nothing to
do with PXEboot and has not specified a boot filename. This happens even
when ProxyDHCP has been selected for boot and has returned a boot
filename. Fix this by ensuring that the (next-server, filename) tuple
have either both come from ProxyDHCP or from netdev DHCP settings block
but not one from each.

Signed-off-by: Gianni Tedesco <gianni.tedesco at citrix.com>

diff --git a/src/usr/autoboot.c b/src/usr/autoboot.c
index d76751b..0eb7175 100644
--- a/src/usr/autoboot.c
+++ b/src/usr/autoboot.c
@@ -145,6 +145,7 @@ static int netboot ( struct net_device *netdev ) {
 	char buf[256];
 	struct in_addr next_server;
 	unsigned int pxe_discovery_control;
+	struct settings *settings;
 	int rc;
 
 	/* Open device and display device status */
@@ -171,8 +172,20 @@ static int netboot ( struct net_device *netdev ) {
 	}
 
 	/* Try to download and boot whatever we are given as a filename */
-	fetch_ipv4_setting ( NULL, &next_server_setting, &next_server );
-	fetch_string_setting ( NULL, &filename_setting, buf, sizeof ( buf ) );
+	settings = find_settings ( PROXYDHCP_SETTINGS_NAME );
+	if ( settings ) {
+		fetch_ipv4_setting ( settings, &next_server_setting,
+					&next_server );
+		fetch_string_setting ( settings, &filename_setting,
+					buf, sizeof ( buf ) );
+	}
+	settings = netdev_settings(netdev);
+	if ( !buf[0] && settings ) {
+		fetch_ipv4_setting ( settings, &next_server_setting,
+					&next_server );
+		fetch_string_setting ( settings, &filename_setting,
+					buf, sizeof ( buf ) );
+	}
 	if ( buf[0] ) {
 		printf ( "Booting from filename \"%s\"\n", buf );
 		if ( ( rc = boot_next_server_and_filename ( next_server,




More information about the gPXE-devel mailing list