summaryrefslogtreecommitdiffstats
path: root/src/include/gpxe/dhcp.h
diff options
context:
space:
mode:
authorMichael Brown2008-03-27 17:31:31 +0100
committerMichael Brown2008-03-27 17:45:15 +0100
commitaa74a7d53cb972775efb0f3412f9cbc3b929ee43 (patch)
tree00df302e454b27eb8efcddf5e90fa02864c568e4 /src/include/gpxe/dhcp.h
parent[Settings] find_child_settings() accepts a NULL parent (diff)
downloadipxe-aa74a7d53cb972775efb0f3412f9cbc3b929ee43.tar.gz
ipxe-aa74a7d53cb972775efb0f3412f9cbc3b929ee43.tar.xz
ipxe-aa74a7d53cb972775efb0f3412f9cbc3b929ee43.zip
[DHCP] Add support for ProxyDHCP requests
The PXE spec is (as usual) unclear on precisely when ProxyDHCPREQUESTs should be issued. We adapt the following, slightly paranoid approach: If an offer contains an IP address, then it is a normal DHCPOFFER. If an offer contains an option #60 "PXEClient", then it is a ProxyDHCPOFFER. Note that the same packet can be both a normal DHCPOFFER and a ProxyDHCPOFFER. After receiving the normal DHCPACK, if we have received a ProxyDHCPOFFER, we unicast a ProxyDHCPREQUEST back to the ProxyDHCP server on port 4011. If we time out waiting for a ProxyDHCPACK, we treat this as a non-fatal error.
Diffstat (limited to 'src/include/gpxe/dhcp.h')
-rw-r--r--src/include/gpxe/dhcp.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/include/gpxe/dhcp.h b/src/include/gpxe/dhcp.h
index 94cc2010..61445977 100644
--- a/src/include/gpxe/dhcp.h
+++ b/src/include/gpxe/dhcp.h
@@ -24,6 +24,9 @@ struct dhcp_packet;
/** BOOTP/DHCP client port */
#define BOOTPC_PORT 68
+/** ProxyDHCP server port */
+#define PROXYDHCP_PORT 4011
+
/** Construct a tag value for an encapsulated option
*
* This tag value can be passed to Etherboot functions when searching
@@ -433,7 +436,7 @@ struct dhcphdr {
*/
#define DHCP_MIN_LEN 552
-/** Maximum time that we will wait for ProxyDHCP offers */
+/** Maximum time that we will wait for ProxyDHCP responses */
#define PROXYDHCP_WAIT_TIME ( TICKS_PER_SEC * 1 )
/** Settings block name used for DHCP responses */
@@ -442,12 +445,13 @@ struct dhcphdr {
/** Settings block name used for ProxyDHCP responses */
#define PROXYDHCP_SETTINGS_NAME "proxydhcp"
-extern int create_dhcp_packet ( struct dhcp_packet *dhcppkt,
+extern int dhcp_create_packet ( struct dhcp_packet *dhcppkt,
struct net_device *netdev, uint8_t msgtype,
struct dhcp_options *options,
void *data, size_t max_len );
-extern int create_dhcp_request ( struct dhcp_packet *dhcppkt,
+extern int dhcp_create_request ( struct dhcp_packet *dhcppkt,
struct net_device *netdev,
+ struct in_addr ciaddr,
struct dhcp_packet *dhcpoffer,
void *data, size_t max_len );
extern int start_dhcp ( struct job_interface *job, struct net_device *netdev );