Print this page
7388 Support DHCP Client FQDN. Allow IAID/DUID for all v4.
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
*/
#ifndef _IPADM_IPMGMT_H
#define _IPADM_IPMGMT_H
*** 49,60 ****
*/
/*
* For more information on these definitions please refer to the top of
* ipadm_persist.c. These are the name of the nvpairs which hold the
* respective values. All nvpairs private to ipadm have names that begin
! * with "_". Note below that 'prefixlen' is an address property and therefore
! * not a private nvpair name.
*/
#define IPADM_NVP_PROTONAME "_protocol" /* protocol name */
#define IPADM_NVP_IFNAME "_ifname" /* interface name */
#define IPADM_NVP_AOBJNAME "_aobjname" /* addrobj name */
#define IPADM_NVP_FAMILY "_family" /* address family */
--- 50,61 ----
*/
/*
* For more information on these definitions please refer to the top of
* ipadm_persist.c. These are the name of the nvpairs which hold the
* respective values. All nvpairs private to ipadm have names that begin
! * with "_". Note below that 'prefixlen' and 'reqhost' are address
! * properties and therefore not a private nvpair name.
*/
#define IPADM_NVP_PROTONAME "_protocol" /* protocol name */
#define IPADM_NVP_IFNAME "_ifname" /* interface name */
#define IPADM_NVP_AOBJNAME "_aobjname" /* addrobj name */
#define IPADM_NVP_FAMILY "_family" /* address family */
*** 61,70 ****
--- 62,72 ----
#define IPADM_NVP_IPV4ADDR "_ipv4addr" /* name of IPv4 addr nvlist */
#define IPADM_NVP_IPNUMADDR "_addr" /* local address */
#define IPADM_NVP_IPADDRHNAME "_aname" /* local hostname */
#define IPADM_NVP_IPDADDRHNAME "_dname" /* remote hostname */
#define IPADM_NVP_PREFIXLEN "prefixlen" /* prefixlen */
+ #define IPADM_NVP_REQHOST "reqhost" /* requested hostname */
#define IPADM_NVP_IPV6ADDR "_ipv6addr" /* name of IPv6 addr nvlist */
#define IPADM_NVP_DHCP "_dhcp" /* name of DHCP nvlist */
#define IPADM_NVP_WAIT "_wait" /* DHCP timeout value */
#define IPADM_NVP_PRIMARY "_primary" /* DHCP primary interface */
#define IPADM_NVP_LIFNUM "_lifnum" /* logical interface number */
*** 150,159 ****
--- 152,176 ----
* - REDUCE updates the multi-valued property entry by removing a value
*/
#define IPMGMT_APPEND 0x00000001
#define IPMGMT_REMOVE 0x00000002
+ /*
+ * ipadm_addr_type_t-specific values that are cached in ipmgmtd and can
+ * make a round-trip back to client programs
+ */
+ typedef union {
+ struct {
+ boolean_t ipmgmt_linklocal;
+ struct sockaddr_in6 ipmgmt_ifid;
+ } ipmgmt_ipv6_cache_s;
+ struct {
+ boolean_t ipmgmt_primary;
+ char ipmgmt_reqhost[MAXNAMELEN];
+ } ipmgmt_dhcp_cache_s;
+ } ipmgmt_addr_type_cache_u;
+
/* IPMGMT_CMD_GETIF door_call argument structure */
typedef struct ipmgmt_getif_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
char ia_ifname[LIFNAMSIZ];
*** 219,232 ****
--- 236,254 ----
* ia_flags used inside the arguments for interface/address commands
* - ACTIVE updates the running configuration
* - PERSIST updates the permanent data store
* - INIT indicates that operation being performed is under init
* context
+ * - PROPS_ONLY indicates the update changes the running configuration of
+ * "props" data on the interface/address object. The props are
+ * cached there on the parent, so a PROPS_ONLY change does not
+ * affect the ACTIVE/PERSIST state of the parent.
*/
#define IPMGMT_ACTIVE 0x00000001
#define IPMGMT_PERSIST 0x00000002
#define IPMGMT_INIT 0x00000004
+ #define IPMGMT_PROPS_ONLY 0x00000008
/* door call return value */
typedef struct ipmgmt_retval_s {
int32_t ir_err;
} ipmgmt_retval_t;
*** 258,270 ****
char ir_ifname[LIFNAMSIZ];
int32_t ir_lnum;
sa_family_t ir_family;
uint32_t ir_flags;
ipadm_addr_type_t ir_atype;
! struct sockaddr_storage ir_ifid;
} ipmgmt_aobjop_rval_t;
/* DB walk callback functions */
typedef boolean_t db_wfunc_t(void *, nvlist_t *, char *, size_t, int *);
extern int ipadm_rw_db(db_wfunc_t *, void *, const char *, mode_t,
ipadm_db_op_t);
--- 280,299 ----
char ir_ifname[LIFNAMSIZ];
int32_t ir_lnum;
sa_family_t ir_family;
uint32_t ir_flags;
ipadm_addr_type_t ir_atype;
! ipmgmt_addr_type_cache_u ir_atype_cache;
} ipmgmt_aobjop_rval_t;
+ #define ipmgmt_ir_intfid ir_atype_cache. \
+ ipmgmt_ipv6_cache_s.ipmgmt_ifid
+ #define ipmgmt_ir_primary ir_atype_cache. \
+ ipmgmt_dhcp_cache_s.ipmgmt_primary
+ #define ipmgmt_ir_reqhost ir_atype_cache. \
+ ipmgmt_dhcp_cache_s.ipmgmt_reqhost
+
/* DB walk callback functions */
typedef boolean_t db_wfunc_t(void *, nvlist_t *, char *, size_t, int *);
extern int ipadm_rw_db(db_wfunc_t *, void *, const char *, mode_t,
ipadm_db_op_t);