diff options
author | Michael Brown | 2008-03-27 17:31:31 +0100 |
---|---|---|
committer | Michael Brown | 2008-03-27 17:45:15 +0100 |
commit | aa74a7d53cb972775efb0f3412f9cbc3b929ee43 (patch) | |
tree | 00df302e454b27eb8efcddf5e90fa02864c568e4 /src/include/gpxe/dhcp.h | |
parent | [Settings] find_child_settings() accepts a NULL parent (diff) | |
download | ipxe-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.h | 10 |
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 ); |