diff options
| author | Joshua Oreman | 2009-12-08 09:40:50 +0100 |
|---|---|---|
| committer | Marty Connor | 2010-01-20 23:15:51 +0100 |
| commit | b1ba80f8fbe2377e992848c3c6e6eb55fbe6d909 (patch) | |
| tree | 7f999145480b9dfdfa8ab094230d395374de3303 /src/include | |
| parent | [pxe] Separate parent PXE API caller from UNDINET driver (diff) | |
| download | ipxe-b1ba80f8fbe2377e992848c3c6e6eb55fbe6d909.tar.gz ipxe-b1ba80f8fbe2377e992848c3c6e6eb55fbe6d909.tar.xz ipxe-b1ba80f8fbe2377e992848c3c6e6eb55fbe6d909.zip | |
[dhcp] Add generic facility for using cached network settings
When a DHCP session is started (using autoboot or a command-line `dhcp
net0'), check whether the new setting use-cached (DHCP option 175.178)
is TRUE; if so, skip DHCP and rely on currently registered
settings. This lets one combine a static IP with autoboot.
Before checking the use-cached setting, call a weak
get_cached_dhcpack() hook that can be implemented by particular builds
of gPXE supporting some fashion of retrieving a cached DHCPACK packet.
If one is available, it is registered as an options source, and then
either that packet's option 175.178 or the user's prior manual
use-cached setting can allow skipping duplicate DHCP.
Using cached packets is not the default because DHCP servers are often
configured to give gPXE different options than they give a vendor PXE
client; in order to break the infinite loop of PXE chaining, one would
need to load a gPXE with an embedded image that does something more
than autoboot.
Signed-off-by: Marty Connor <mdc@etherboot.org>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/gpxe/dhcp.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/include/gpxe/dhcp.h b/src/include/gpxe/dhcp.h index 2d9f88533..ebfe8edeb 100644 --- a/src/include/gpxe/dhcp.h +++ b/src/include/gpxe/dhcp.h @@ -16,6 +16,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <gpxe/tables.h> #include <gpxe/uuid.h> #include <gpxe/netdevice.h> +#include <gpxe/uaccess.h> struct job_interface; struct dhcp_options; @@ -332,6 +333,16 @@ struct dhcp_netdev_desc { uint16_t device; } __attribute__ (( packed )); +/** Use cached network settings + * + * Cached network settings may be available from a prior DHCP request + * (if running as a PXE NBP), non-volatile storage on the NIC, or + * settings set via the command line or an embedded image. If this + * flag is not set, it will be assumed that those sources are + * insufficient and that DHCP should still be run when autobooting. + */ +#define DHCP_EB_USE_CACHED DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xb2 ) + /** BIOS drive number * * This is the drive number for a drive emulated via INT 13. 0x80 is @@ -615,4 +626,12 @@ extern int start_dhcp ( struct job_interface *job, struct net_device *netdev ); extern int start_pxebs ( struct job_interface *job, struct net_device *netdev, unsigned int pxe_type ); +/* In environments that can provide cached DHCP packets, this function + * should look for such a packet and call store_cached_dhcpack() with + * it if it exists. + */ +__weak_decl ( void, get_cached_dhcpack, ( void ), (), ); + +extern void store_cached_dhcpack ( userptr_t data, size_t len ); + #endif /* _GPXE_DHCP_H */ |
