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

@@ -19,10 +19,11 @@
  * CDDL HEADER END
  */
 
 /*
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
  */
 
 #ifndef _IPMGMT_IMPL_H
 #define _IPMGMT_IMPL_H
 

@@ -101,12 +102,16 @@
  *      - address family
  *      - `am_nextnum' identifies the next number to use to generate user part
  *        of `aobjname'.
  *      - address type (static, dhcp or addrconf)
  *      - `am_flags' indicates if this addrobj in active and/or persist config
- *      - if `am_atype' is IPADM_ADDR_IPV6_ADDRCONF then `am_ifid' holds the
- *        interface-id used to configure auto-configured addresses
+ *      - other, ipadm_addr_type_t-specific values are cached in
+ *        am_addr_cache (see type ipmgmt_addr_cache_u):
+ *        -     ipv6: ipmgmt_am_linklocal (macro)
+ *        -     ipv6: ipmgmt_am_ifid (macro)
+ *        -     dhcp: ipmgmt_am_primary (macro)
+ *        -     dhcp: ipmgmt_am_reqhost (macro)
  */
 typedef struct ipmgmt_aobjmap_s {
         struct ipmgmt_aobjmap_s *am_next;
         char                    am_aobjname[IPADM_AOBJSIZ];
         char                    am_ifname[LIFNAMSIZ];

@@ -113,14 +118,18 @@
         int32_t                 am_lnum;
         sa_family_t             am_family;
         ipadm_addr_type_t       am_atype;
         uint32_t                am_nextnum;
         uint32_t                am_flags;
-        boolean_t               am_linklocal;
-        struct sockaddr_storage am_ifid;
+        ipmgmt_addr_type_cache_u        am_atype_cache;
 } ipmgmt_aobjmap_t;
 
+#define ipmgmt_am_linklocal     am_atype_cache.ipmgmt_ipv6_cache_s.ipmgmt_linklocal
+#define ipmgmt_am_ifid          am_atype_cache.ipmgmt_ipv6_cache_s.ipmgmt_ifid
+#define ipmgmt_am_primary       am_atype_cache.ipmgmt_dhcp_cache_s.ipmgmt_primary
+#define ipmgmt_am_reqhost       am_atype_cache.ipmgmt_dhcp_cache_s.ipmgmt_reqhost
+
 /* linked list of `aobjmap' nodes, protected by RW lock */
 typedef struct ipmgmt_aobjmap_list_s {
         ipmgmt_aobjmap_t        *aobjmap_head;
         pthread_rwlock_t        aobjmap_rwlock;
 } ipmgmt_aobjmap_list_t;