diff options
Diffstat (limited to 'src/net/udp/dhcp.c')
| -rw-r--r-- | src/net/udp/dhcp.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index a335a778a..bd2c4a197 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -46,7 +46,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include <ipxe/dhcp.h> #include <ipxe/dhcpopts.h> #include <ipxe/dhcppkt.h> -#include <ipxe/dhcp_arch.h> +#include <ipxe/dhcparch.h> #include <ipxe/features.h> #include <config/dhcp.h> @@ -571,6 +571,10 @@ static void dhcp_request_rx ( struct dhcp_session *dhcp, if ( peer->sin_port != htons ( BOOTPS_PORT ) ) return; + /* Filter out non-selected servers */ + if ( server_id.s_addr != dhcp->server.s_addr ) + return; + /* Handle DHCPNAK */ if ( msgtype == DHCPNAK ) { dhcp_defer ( dhcp ); @@ -580,8 +584,6 @@ static void dhcp_request_rx ( struct dhcp_session *dhcp, /* Filter out unacceptable responses */ if ( msgtype /* BOOTP */ && ( msgtype != DHCPACK ) ) return; - if ( server_id.s_addr != dhcp->server.s_addr ) - return; if ( ip.s_addr != dhcp->offer.s_addr ) return; @@ -599,6 +601,12 @@ static void dhcp_request_rx ( struct dhcp_session *dhcp, return; } + /* Unregister any existing ProxyDHCP or PXEBS settings */ + if ( ( settings = find_settings ( PROXYDHCP_SETTINGS_NAME ) ) != NULL ) + unregister_settings ( settings ); + if ( ( settings = find_settings ( PXEBS_SETTINGS_NAME ) ) != NULL ) + unregister_settings ( settings ); + /* Perform ProxyDHCP if applicable */ if ( dhcp->proxy_offer /* Have ProxyDHCP offer */ && ( ! dhcp->no_pxedhcp ) /* ProxyDHCP not disabled */ ) { |
