mirror of
https://github.com/ipxe/ipxe
synced 2025-12-17 01:52:08 +03:00
[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>
This commit is contained in:
committed by
Marty Connor
parent
337e1ed4b4
commit
b1ba80f8fb
@@ -55,8 +55,13 @@ int dhcp ( struct net_device *netdev ) {
|
||||
printf ( "DHCP (%s ", netdev->name );
|
||||
while ( hlen-- )
|
||||
printf ( "%02x%c", *(chaddr++), ( hlen ? ':' : ')' ) );
|
||||
if ( ( rc = start_dhcp ( &monojob, netdev ) ) == 0 )
|
||||
|
||||
if ( ( rc = start_dhcp ( &monojob, netdev ) ) == 0 ) {
|
||||
rc = monojob_wait ( "" );
|
||||
} else if ( rc > 0 ) {
|
||||
printf ( " using cached\n" );
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user