From b1ba80f8fbe2377e992848c3c6e6eb55fbe6d909 Mon Sep 17 00:00:00 2001 From: Joshua Oreman Date: Tue, 8 Dec 2009 03:40:50 -0500 Subject: [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 --- src/usr/dhcpmgmt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/usr') diff --git a/src/usr/dhcpmgmt.c b/src/usr/dhcpmgmt.c index aa96985..f82a3bb 100644 --- a/src/usr/dhcpmgmt.c +++ b/src/usr/dhcpmgmt.c @@ -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; } -- cgit v1.1