[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