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

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/cmd-inet/sbin/dhcpagent/renew.c
          +++ new/usr/src/cmd/cmd-inet/sbin/dhcpagent/renew.c
↓ open down ↓ 12 lines elided ↑ open up ↑
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
       23 + * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
  23   24   */
  24   25  
  25   26  #include <sys/types.h>
  26   27  #include <time.h>
  27   28  #include <netinet/in.h>
  28   29  #include <netinet/dhcp.h>
  29   30  #include <netinet/udp.h>
  30   31  #include <netinet/ip_var.h>
  31   32  #include <netinet/udp_var.h>
  32   33  #include <libinetutil.h>
↓ open down ↓ 422 lines elided ↑ open up ↑
 455  456                          for (nlifs = dlp->dl_nlifs; nlifs > 0;
 456  457                              nlifs--, lif = lif->lif_next) {
 457  458                                  (void) add_pkt_lif(dpkt, lif,
 458  459                                      DHCPV6_STAT_SUCCESS, NULL);
 459  460                          }
 460  461                  }
 461  462  
 462  463                  /* Add required Option Request option */
 463  464                  (void) add_pkt_prl(dpkt, dsmp);
 464  465  
      466 +                /* Add FQDN if configured */
      467 +                (void) dhcp_add_fqdn_opt(dpkt, dsmp);
      468 +
 465  469                  return (send_pkt_v6(dsmp, dpkt, dsmp->dsm_server,
 466  470                      stop_extending, irt, mrt));
 467  471          } else {
 468  472                  dhcp_lif_t *lif = dsmp->dsm_lif;
 469  473                  ipaddr_t server;
 470  474  
 471  475                  /* assemble the DHCPREQUEST message. */
 472  476                  dpkt = init_pkt(dsmp, REQUEST);
 473  477                  dpkt->pkt->ciaddr.s_addr = lif->lif_addr;
 474  478  
↓ open down ↓ 8 lines elided ↑ open up ↑
 483  487                  if (class_id_len != 0) {
 484  488                          (void) add_pkt_opt(dpkt, CD_CLASS_ID, class_id,
 485  489                              class_id_len);
 486  490                  }
 487  491                  (void) add_pkt_prl(dpkt, dsmp);
 488  492                  /*
 489  493                   * dsm_reqhost was set for this state machine in
 490  494                   * dhcp_selecting() if the REQUEST_HOSTNAME option was set and
 491  495                   * a host name was found.
 492  496                   */
 493      -                if (dsmp->dsm_reqhost != NULL) {
      497 +                if (dhcp_add_fqdn_opt(dpkt, dsmp) != 0 &&
      498 +                    dsmp->dsm_reqhost != NULL) {
 494  499                          (void) add_pkt_opt(dpkt, CD_HOSTNAME, dsmp->dsm_reqhost,
 495  500                              strlen(dsmp->dsm_reqhost));
 496  501                  }
 497  502                  (void) add_pkt_opt(dpkt, CD_END, NULL, 0);
 498  503  
 499  504                  IN6_V4MAPPED_TO_IPADDR(&dsmp->dsm_server, server);
 500  505                  return (send_pkt(dsmp, dpkt, server, stop_extending));
 501  506          }
 502  507  }
 503  508  
↓ open down ↓ 53 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX