From f0c6c4efd8008d07911a552fe5e44dfe3ad7e06d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 26 Aug 2015 16:02:46 +0100 Subject: [PATCH] [dhcp] Do not skip ProxyDHCPREQUEST if next-server is empty We attempt to mimic the behaviour of Intel's PXE ROM by skipping the separate ProxyDHCPREQUEST if the ProxyDHCPOFFER already contains a boot filename or a PXE boot menu. Experimentation reveals that Intel's PXE ROM will also check for a non-empty next-server address alongside the boot filename. Update our test to match this behaviour. Reported-by: Wissam Shoukair Tested-by: Wissam Shoukair Signed-off-by: Michael Brown --- src/net/udp/dhcp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index aed5ee36..36c2b13a 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -296,8 +296,9 @@ static void dhcp_set_state ( struct dhcp_session *dhcp, */ static int dhcp_has_pxeopts ( struct dhcp_packet *dhcppkt ) { - /* Check for a boot filename */ - if ( dhcppkt_fetch ( dhcppkt, DHCP_BOOTFILE_NAME, NULL, 0 ) > 0 ) + /* Check for a next-server and boot filename */ + if ( dhcppkt->dhcphdr->siaddr.s_addr && + ( dhcppkt_fetch ( dhcppkt, DHCP_BOOTFILE_NAME, NULL, 0 ) > 0 ) ) return 1; /* Check for a PXE boot menu */