ipadm_ipmgmt.h revision 6e91bba0d6c6bdabbba62cefae583715a4a58e2a
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * CDDL HEADER START
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim *
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * The contents of this file are subject to the terms of the
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * Common Development and Distribution License (the "License").
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * You may not use this file except in compliance with the License.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim *
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * or http://www.opensolaris.org/os/licensing.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * See the License for the specific language governing permissions
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * and limitations under the License.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim *
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * When distributing Covered Code, include this CDDL HEADER in each
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * If applicable, add the following below this CDDL HEADER, with the
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * fields enclosed by brackets "[]" replaced with your own identifying
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * information: Portions Copyright [yyyy] [name of copyright owner]
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim *
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * CDDL HEADER END
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * Use is subject to license terms.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#ifndef _IPADM_IPMGMT_H
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define _IPADM_IPMGMT_H
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#ifdef __cplusplus
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimextern "C" {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#endif
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <sys/types.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <sys/stat.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <fcntl.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <sys/mman.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <door.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <libipadm.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#include <inet/tunables.h>
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * Function declarations and data structures shared by libipadm.so and
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * the IP management daemon.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* Authorization required to configure network interfaces */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define NETWORK_INTERFACE_CONFIG_AUTH "solaris.network.interface.config"
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * Data store read/write utilities related declarations.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* Permanent data store for ipadm */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_DB_FILE "/etc/ipadm/ipadm.conf"
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_TMPFS_DIR "/etc/svc/volatile/ipadm"
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * For more information on these definitions please refer to the top of
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * ipadm_persist.c. These are the name of the nvpairs which hold the
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * respective values. All nvpairs private to ipadm have names that begin
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * with "_". Note below that 'prefixlen' is an address property and therefore
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * not a private nvpair name.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_PROTONAME "_protocol" /* protocol name */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_IFNAME "_ifname" /* interface name */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_AOBJNAME "_aobjname" /* addrobj name */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_FAMILY "_family" /* address family */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_IPV4ADDR "_ipv4addr" /* name of IPv4 addr nvlist */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_IPNUMADDR "_addr" /* local address */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_IPADDRHNAME "_aname" /* local hostname */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_IPDADDRHNAME "_dname" /* remote hostname */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_PREFIXLEN "prefixlen" /* prefixlen */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_IPV6ADDR "_ipv6addr" /* name of IPv6 addr nvlist */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_DHCP "_dhcp" /* name of DHCP nvlist */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_WAIT "_wait" /* DHCP timeout value */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_PRIMARY "_primary" /* DHCP primary interface */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_LIFNUM "_lifnum" /* logical interface number */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_INTFID "_intfid" /* name of IPv6 intfid nvlist */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_STATELESS "_stateless" /* IPv6 autoconf stateless */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_NVP_STATEFUL "_stateful" /* IPv6 autoconf dhcpv6 */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPADM_PRIV_NVP(s) ((s)[0] == '_')
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* data-store operations */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimtypedef enum {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPADM_DB_WRITE = 0, /* Writes to DB */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPADM_DB_DELETE, /* Deletes an entry from DB */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPADM_DB_READ /* Read from DB */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim} ipadm_db_op_t;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * callback arg used by db_wfunc_t that writes to DB. The contents to be
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * written to DB are captured in `dbw_nvl'.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimtypedef struct ipadm_dbwrite_cbarg_s {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim nvlist_t *dbw_nvl;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim uint_t dbw_flags;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim} ipadm_dbwrite_cbarg_t;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * door related function declarations and data structures.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* The door file for the ipmgmt (ip-interface management) daemon */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPMGMT_DOOR "/etc/svc/volatile/ipadm/ipmgmt_door"
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define MAXPROTONAMELEN 32
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* door call command type */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimtypedef enum {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_SETPROP = 1, /* persist property */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_SETIF, /* persist interface */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_SETADDR, /* persist address */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_GETPROP, /* retrieve persisted property value */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_GETIF, /* retrieve persisted interface conf. */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_GETADDR, /* retrieve persisted addresses */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_RESETIF, /* purge interface configuration */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_RESETADDR, /* purge address configuration */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_RESETPROP, /* purge property configuration */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_INITIF, /* retrieve interfaces to initialize */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_ADDROBJ_LOOKUPADD, /* addr. object lookup & add */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_ADDROBJ_ADD, /* add addr. object to addrobj map */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_LIF2ADDROBJ, /* lifname to addrobj mapping */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim IPMGMT_CMD_AOBJNAME2ADDROBJ /* aobjname to addrobj mapping */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim} ipmgmt_door_cmd_type_t;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * Note: We need to keep the size of the structure the same on amd64 and i386
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * for all door_call arguments and door_return structures.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* door_call argument */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimtypedef struct ipmgmt_arg {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim ipmgmt_door_cmd_type_t ia_cmd;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim} ipmgmt_arg_t;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* IPMGMT_CMD_{SETPROP|GETPROP|RESETPROP} door_call argument */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimtypedef struct ipmgmt_prop_arg_s {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim ipmgmt_door_cmd_type_t ia_cmd;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim uint32_t ia_flags;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim char ia_ifname[LIFNAMSIZ];
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim char ia_aobjname[IPADM_AOBJSIZ];
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim char ia_module[MAXPROTONAMELEN];
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim char ia_pname[MAXPROPNAMELEN];
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim char ia_pval[MAXPROPVALLEN];
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim} ipmgmt_prop_arg_t;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/*
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * ia_flags used in ipmgmt_prop_arg_t.
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * - APPEND updates the multi-valued property entry with a new value
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim * - REDUCE updates the multi-valued property entry by removing a value
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPMGMT_APPEND 0x00000001
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim#define IPMGMT_REMOVE 0x00000002
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim/* IPMGMT_CMD_GETIF door_call argument structure */
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kimtypedef struct ipmgmt_getif_arg_s {
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim ipmgmt_door_cmd_type_t ia_cmd;
9e86db79b7d1bbc5f2f04e99954cbd5eae0e22bbHyon Kim uint32_t ia_flags;
char ia_ifname[LIFNAMSIZ];
} ipmgmt_getif_arg_t;
/* IPMGMT_CMD_RESETIF, IPMGMT_CMD_SETIF door_call argument structure */
typedef struct ipmgmt_if_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
char ia_ifname[LIFNAMSIZ];
sa_family_t ia_family;
} ipmgmt_if_arg_t;
/* IPMGMT_CMD_INITIF door_call argument structure */
typedef struct ipmgmt_initif_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
sa_family_t ia_family;
size_t ia_nvlsize;
/* packed nvl follows */
} ipmgmt_initif_arg_t;
/* IPMGMT_CMD_SETADDR door_call argument */
typedef struct ipmgmt_setaddr_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
size_t ia_nvlsize;
/* packed nvl follows */
} ipmgmt_setaddr_arg_t;
/* IPMGMT_CMD_GETADDR door_call argument */
typedef struct ipmgmt_getaddr_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
char ia_ifname[LIFNAMSIZ];
sa_family_t ia_family;
char ia_aobjname[IPADM_AOBJSIZ];
} ipmgmt_getaddr_arg_t;
/* IPMGMT_CMD_RESETADDR door_call argument */
typedef struct ipmgmt_addr_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
char ia_aobjname[IPADM_AOBJSIZ];
int32_t ia_lnum;
} ipmgmt_addr_arg_t;
/*
* IPMGMT_CMD_{ADDROBJ_ADD|ADDROBJ_LOOKUPADD|LIFNUM2ADDROBJ|
* ADDROBJ2LIFNUM} door_call argument.
*/
typedef struct ipmgmt_aobjop_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
char ia_aobjname[IPADM_AOBJSIZ];
char ia_ifname[LIFNAMSIZ];
int32_t ia_lnum;
sa_family_t ia_family;
ipadm_addr_type_t ia_atype;
} ipmgmt_aobjop_arg_t;
/*
* 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
*/
#define IPMGMT_ACTIVE 0x00000001
#define IPMGMT_PERSIST 0x00000002
#define IPMGMT_INIT 0x00000004
/* door call return value */
typedef struct ipmgmt_retval_s {
int32_t ir_err;
} ipmgmt_retval_t;
/* IPMGMT_CMD_GETADDR door_return value */
typedef struct ipmgmt_get_rval_s {
int32_t ir_err;
size_t ir_nvlsize;
/* packed nvl follows */
} ipmgmt_get_rval_t;
/* IPMGMT_CMD_GETPROP door_return value */
typedef struct ipmgmt_getprop_rval_s {
int32_t ir_err;
char ir_pval[MAXPROPVALLEN];
} ipmgmt_getprop_rval_t;
/* IPMGMT_CMD_GETIF door_return value */
typedef struct ipmgmt_getif_rval_s {
int32_t ir_err;
uint32_t ir_ifcnt;
ipadm_if_info_t ir_ifinfo[1];
} ipmgmt_getif_rval_t;
/* IPMGMT_CMD_{LOOKUPADD|LIFNUM2ADDROBJ|ADDROBJ2LIFNUM} door_return value */
typedef struct ipmgmt_aobjop_rval_s {
int32_t ir_err;
char ir_aobjname[IPADM_AOBJSIZ];
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);
#ifdef __cplusplus
}
#endif
#endif /* _IPADM_IPMGMT_H */