[dhcp] Add generic facility for using cached network settings
[people/cooldavid/gpxe.git] / src / net / udp / dhcp.c
index aba9000..0edd0ad 100644 (file)
@@ -110,6 +110,14 @@ struct setting user_class_setting __setting = {
        .type = &setting_type_string,
 };
 
+/** Use cached network settings */
+struct setting use_cached_setting __setting = {
+       .name = "use-cached",
+       .description = "Use cached network settings",
+       .tag = DHCP_EB_USE_CACHED,
+       .type = &setting_type_uint8,
+};
+
 /**
  * Name a DHCP packet type
  *
@@ -1237,16 +1245,28 @@ static struct sockaddr dhcp_peer = {
  *
  * @v job              Job control interface
  * @v netdev           Network device
- * @ret rc             Return status code
+ * @ret rc             Return status code, or positive if cached
  *
  * Starts DHCP on the specified network device.  If successful, the
  * DHCPACK (and ProxyDHCPACK, if applicable) will be registered as
  * option sources.
+ *
+ * On a return of 0, a background job has been started to perform the
+ * DHCP request. Any nonzero return means the job has not been
+ * started; a positive return value indicates the success condition of
+ * having fetched the appropriate data from cached information.
  */
 int start_dhcp ( struct job_interface *job, struct net_device *netdev ) {
        struct dhcp_session *dhcp;
        int rc;
 
+       /* Check for cached DHCP information */
+       get_cached_dhcpack();
+       if ( fetch_uintz_setting ( NULL, &use_cached_setting ) ) {
+               DBG ( "DHCP using cached network settings\n" );
+               return 1;
+       }
+
        /* Allocate and initialise structure */
        dhcp = zalloc ( sizeof ( *dhcp ) );
        if ( ! dhcp )