Print this page
7388 Support DHCP Client FQDN. Allow IAID/DUID for all v4.

@@ -18,20 +18,20 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
  *
  * SELECTING state of the client state machine.
  */
 
 #include <sys/types.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <strings.h>
 #include <time.h>
-#include <limits.h>
 #include <netinet/in.h>
 #include <net/route.h>
 #include <net/if.h>
 #include <netinet/dhcp.h>
 #include <netinet/udp.h>

@@ -104,12 +104,10 @@
 
 void
 dhcp_selecting(dhcp_smach_t *dsmp)
 {
         dhcp_pkt_t              *dpkt;
-        const char              *reqhost;
-        char                    hostfile[PATH_MAX + 1];
 
         /*
          * We first set up to collect OFFER/Advertise packets as they arrive.
          * We then send out DISCOVER/Solicit probes.  Then we wait a
          * user-tunable number of seconds before seeing if OFFERs/

@@ -176,10 +174,13 @@
                 /* Enable Rapid-Commit */
                 (void) add_pkt_opt(dpkt, DHCPV6_OPT_RAPID_COMMIT, NULL, 0);
 
                 /* xxx add Reconfigure Accept */
 
+                /* Add FQDN if configured */
+                (void) dhcp_add_fqdn_opt(dpkt, dsmp);
+
                 (void) send_pkt_v6(dsmp, dpkt, ipv6_all_dhcp_relay_and_servers,
                     stop_selecting, DHCPV6_SOL_TIMEOUT, DHCPV6_SOL_MAX_RT);
         } else {
                 if ((dpkt = init_pkt(dsmp, DISCOVER)) == NULL) {
                         dhcpmsg(MSG_ERROR, "dhcp_selecting: unable to set up "

@@ -199,31 +200,13 @@
                         (void) add_pkt_opt(dpkt, CD_CLASS_ID, class_id,
                             class_id_len);
                 }
                 (void) add_pkt_prl(dpkt, dsmp);
 
-                if (df_get_bool(dsmp->dsm_name, dsmp->dsm_isv6,
-                    DF_REQUEST_HOSTNAME)) {
-                        dhcpmsg(MSG_DEBUG,
-                            "dhcp_selecting: DF_REQUEST_HOSTNAME");
-                        (void) snprintf(hostfile, sizeof (hostfile),
-                            "/etc/hostname.%s", dsmp->dsm_name);
+                if (dhcp_add_fqdn_opt(dpkt, dsmp) != 0)
+                        (void) dhcp_add_hostname_opt(dpkt, dsmp);
 
-                        if ((reqhost = iffile_to_hostname(hostfile)) != NULL) {
-                                dhcpmsg(MSG_DEBUG, "dhcp_selecting: host %s",
-                                    reqhost);
-                                dsmp->dsm_reqhost = strdup(reqhost);
-                                if (dsmp->dsm_reqhost != NULL)
-                                        (void) add_pkt_opt(dpkt, CD_HOSTNAME,
-                                            dsmp->dsm_reqhost,
-                                            strlen(dsmp->dsm_reqhost));
-                                else
-                                        dhcpmsg(MSG_WARNING,
-                                            "dhcp_selecting: cannot allocate "
-                                            "memory for host name option");
-                        }
-                }
                 (void) add_pkt_opt(dpkt, CD_END, NULL, 0);
 
                 (void) send_pkt(dsmp, dpkt, htonl(INADDR_BROADCAST),
                     stop_selecting);
         }