16e91bba0SGirish Moodalbail /* 26e91bba0SGirish Moodalbail * CDDL HEADER START 36e91bba0SGirish Moodalbail * 46e91bba0SGirish Moodalbail * The contents of this file are subject to the terms of the 56e91bba0SGirish Moodalbail * Common Development and Distribution License (the "License"). 66e91bba0SGirish Moodalbail * You may not use this file except in compliance with the License. 76e91bba0SGirish Moodalbail * 86e91bba0SGirish Moodalbail * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96e91bba0SGirish Moodalbail * or http://www.opensolaris.org/os/licensing. 106e91bba0SGirish Moodalbail * See the License for the specific language governing permissions 116e91bba0SGirish Moodalbail * and limitations under the License. 126e91bba0SGirish Moodalbail * 136e91bba0SGirish Moodalbail * When distributing Covered Code, include this CDDL HEADER in each 146e91bba0SGirish Moodalbail * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156e91bba0SGirish Moodalbail * If applicable, add the following below this CDDL HEADER, with the 166e91bba0SGirish Moodalbail * fields enclosed by brackets "[]" replaced with your own identifying 176e91bba0SGirish Moodalbail * information: Portions Copyright [yyyy] [name of copyright owner] 186e91bba0SGirish Moodalbail * 196e91bba0SGirish Moodalbail * CDDL HEADER END 206e91bba0SGirish Moodalbail */ 216e91bba0SGirish Moodalbail /* 22ec3706caSVasumathi Sundaram * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 23b31320a7SChris Fraire * Copyright (c) 2016, Chris Fraire <cfraire@me.com>. 240a8fc1cbSHans Rosenfeld * Copyright 2021, Tintri by DDN. All rights reserved. 256e91bba0SGirish Moodalbail */ 266e91bba0SGirish Moodalbail 276e91bba0SGirish Moodalbail #ifndef _IPADM_IPMGMT_H 286e91bba0SGirish Moodalbail #define _IPADM_IPMGMT_H 296e91bba0SGirish Moodalbail 306e91bba0SGirish Moodalbail #ifdef __cplusplus 316e91bba0SGirish Moodalbail extern "C" { 326e91bba0SGirish Moodalbail #endif 336e91bba0SGirish Moodalbail #include <sys/types.h> 346e91bba0SGirish Moodalbail #include <sys/stat.h> 356e91bba0SGirish Moodalbail #include <fcntl.h> 366e91bba0SGirish Moodalbail #include <sys/mman.h> 376e91bba0SGirish Moodalbail #include <door.h> 386e91bba0SGirish Moodalbail #include <libipadm.h> 396e91bba0SGirish Moodalbail #include <inet/tunables.h> 406e91bba0SGirish Moodalbail 416e91bba0SGirish Moodalbail /* 426e91bba0SGirish Moodalbail * Function declarations and data structures shared by libipadm.so and 436e91bba0SGirish Moodalbail * the IP management daemon. 446e91bba0SGirish Moodalbail */ 456e91bba0SGirish Moodalbail 466e91bba0SGirish Moodalbail /* Authorization required to configure network interfaces */ 476e91bba0SGirish Moodalbail #define NETWORK_INTERFACE_CONFIG_AUTH "solaris.network.interface.config" 486e91bba0SGirish Moodalbail 496e91bba0SGirish Moodalbail /* 506e91bba0SGirish Moodalbail * Data store read/write utilities related declarations. 516e91bba0SGirish Moodalbail */ 526e91bba0SGirish Moodalbail /* 536e91bba0SGirish Moodalbail * For more information on these definitions please refer to the top of 546e91bba0SGirish Moodalbail * ipadm_persist.c. These are the name of the nvpairs which hold the 556e91bba0SGirish Moodalbail * respective values. All nvpairs private to ipadm have names that begin 56b31320a7SChris Fraire * with "_". Note below that 'prefixlen' and 'reqhost' are address 57b31320a7SChris Fraire * properties and therefore not a private nvpair name. 586e91bba0SGirish Moodalbail */ 596e91bba0SGirish Moodalbail #define IPADM_NVP_PROTONAME "_protocol" /* protocol name */ 606e91bba0SGirish Moodalbail #define IPADM_NVP_IFNAME "_ifname" /* interface name */ 61*a73be61aSHans Rosenfeld #define IPADM_NVP_IFCLASS "_ifclass" /* interface class */ 62*a73be61aSHans Rosenfeld #define IPADM_NVP_FAMILIES "_families" /* interface families */ 63*a73be61aSHans Rosenfeld #define IPADM_NVP_GIFNAME "_gifname" /* IPMP group interface name */ 64*a73be61aSHans Rosenfeld #define IPADM_NVP_MIFNAMES "_mifnames" /* IPMP group members */ 656e91bba0SGirish Moodalbail #define IPADM_NVP_AOBJNAME "_aobjname" /* addrobj name */ 666e91bba0SGirish Moodalbail #define IPADM_NVP_FAMILY "_family" /* address family */ 676e91bba0SGirish Moodalbail #define IPADM_NVP_IPV4ADDR "_ipv4addr" /* name of IPv4 addr nvlist */ 686e91bba0SGirish Moodalbail #define IPADM_NVP_IPNUMADDR "_addr" /* local address */ 696e91bba0SGirish Moodalbail #define IPADM_NVP_IPADDRHNAME "_aname" /* local hostname */ 706e91bba0SGirish Moodalbail #define IPADM_NVP_IPDADDRHNAME "_dname" /* remote hostname */ 716e91bba0SGirish Moodalbail #define IPADM_NVP_PREFIXLEN "prefixlen" /* prefixlen */ 72b31320a7SChris Fraire #define IPADM_NVP_REQHOST "reqhost" /* requested hostname */ 736e91bba0SGirish Moodalbail #define IPADM_NVP_IPV6ADDR "_ipv6addr" /* name of IPv6 addr nvlist */ 746e91bba0SGirish Moodalbail #define IPADM_NVP_DHCP "_dhcp" /* name of DHCP nvlist */ 756e91bba0SGirish Moodalbail #define IPADM_NVP_WAIT "_wait" /* DHCP timeout value */ 766e91bba0SGirish Moodalbail #define IPADM_NVP_PRIMARY "_primary" /* DHCP primary interface */ 776e91bba0SGirish Moodalbail #define IPADM_NVP_LIFNUM "_lifnum" /* logical interface number */ 786e91bba0SGirish Moodalbail #define IPADM_NVP_INTFID "_intfid" /* name of IPv6 intfid nvlist */ 796e91bba0SGirish Moodalbail #define IPADM_NVP_STATELESS "_stateless" /* IPv6 autoconf stateless */ 806e91bba0SGirish Moodalbail #define IPADM_NVP_STATEFUL "_stateful" /* IPv6 autoconf dhcpv6 */ 816e91bba0SGirish Moodalbail 828887b57dSGirish Moodalbail #define IPADM_PRIV_NVP(s) ((s)[0] == '_' && (s)[1] != '_') 838887b57dSGirish Moodalbail 848887b57dSGirish Moodalbail /* 858887b57dSGirish Moodalbail * All protocol properties that are private to ipadm are stored in the 868887b57dSGirish Moodalbail * ipadm datastore with "__" as prefix. This is to ensure there 878887b57dSGirish Moodalbail * is no collision of namespace between ipadm private nvpair names and 888887b57dSGirish Moodalbail * the private protocol property names. 898887b57dSGirish Moodalbail */ 908887b57dSGirish Moodalbail #define IPADM_PERSIST_PRIVPROP_PREFIX "__" 916e91bba0SGirish Moodalbail 926e91bba0SGirish Moodalbail /* data-store operations */ 936e91bba0SGirish Moodalbail typedef enum { 946e91bba0SGirish Moodalbail IPADM_DB_WRITE = 0, /* Writes to DB */ 956e91bba0SGirish Moodalbail IPADM_DB_DELETE, /* Deletes an entry from DB */ 966e91bba0SGirish Moodalbail IPADM_DB_READ /* Read from DB */ 976e91bba0SGirish Moodalbail } ipadm_db_op_t; 986e91bba0SGirish Moodalbail 996e91bba0SGirish Moodalbail /* 1006e91bba0SGirish Moodalbail * callback arg used by db_wfunc_t that writes to DB. The contents to be 1016e91bba0SGirish Moodalbail * written to DB are captured in `dbw_nvl'. 1026e91bba0SGirish Moodalbail */ 1036e91bba0SGirish Moodalbail typedef struct ipadm_dbwrite_cbarg_s { 1046e91bba0SGirish Moodalbail nvlist_t *dbw_nvl; 1056e91bba0SGirish Moodalbail uint_t dbw_flags; 1066e91bba0SGirish Moodalbail } ipadm_dbwrite_cbarg_t; 1076e91bba0SGirish Moodalbail 1086e91bba0SGirish Moodalbail /* 1096e91bba0SGirish Moodalbail * door related function declarations and data structures. 1106e91bba0SGirish Moodalbail */ 1116e91bba0SGirish Moodalbail 1126e91bba0SGirish Moodalbail /* The door file for the ipmgmt (ip-interface management) daemon */ 1136e91bba0SGirish Moodalbail #define IPMGMT_DOOR "/etc/svc/volatile/ipadm/ipmgmt_door" 1146e91bba0SGirish Moodalbail #define MAXPROTONAMELEN 32 1156e91bba0SGirish Moodalbail 116*a73be61aSHans Rosenfeld /* 117*a73be61aSHans Rosenfeld * ia_flags used inside the arguments for interface/address commands 118*a73be61aSHans Rosenfeld * 119*a73be61aSHans Rosenfeld * - APPEND updates the multi-valued ipadm DB entry with a new value 120*a73be61aSHans Rosenfeld * - REMOVE updates the multi-valued ipadm DB entry by removing a value 121*a73be61aSHans Rosenfeld * - ACTIVE updates the running configuration 122*a73be61aSHans Rosenfeld * - PERSIST updates the permanent data store 123*a73be61aSHans Rosenfeld * - INIT indicates that operation being performed is under init context 124*a73be61aSHans Rosenfeld * - PROPS_ONLY indicates the update changes the running configuration of 125*a73be61aSHans Rosenfeld * "props" data on the interface/address object. The props are cached 126*a73be61aSHans Rosenfeld * there on the parent, so a PROPS_ONLY change does not affect the 127*a73be61aSHans Rosenfeld * ACTIVE/PERSIST state of the parent. 128*a73be61aSHans Rosenfeld * 129*a73be61aSHans Rosenfeld * These two flags are used by ipmgmt_db_update_if function, 130*a73be61aSHans Rosenfeld * because it can be used to update more that one DB line 131*a73be61aSHans Rosenfeld * and we need to be sure that we finished all operations, 132*a73be61aSHans Rosenfeld * after the operation has finished the related flag is cleared 133*a73be61aSHans Rosenfeld * 134*a73be61aSHans Rosenfeld * - UPDATE_IF - used when we need to update IPADM_NVP_FAMILIES and 135*a73be61aSHans Rosenfeld * IPADM_NVP_MIFNAMES fields 136*a73be61aSHans Rosenfeld * - UPDATE_IPMP - used when we need to update IPADM_NVP_GIFNAME 137*a73be61aSHans Rosenfeld */ 138*a73be61aSHans Rosenfeld #define IPMGMT_APPEND 0x00000001 139*a73be61aSHans Rosenfeld #define IPMGMT_REMOVE 0x00000002 140*a73be61aSHans Rosenfeld #define IPMGMT_ACTIVE 0x00000004 141*a73be61aSHans Rosenfeld #define IPMGMT_PERSIST 0x00000008 142*a73be61aSHans Rosenfeld #define IPMGMT_INIT 0x00000010 143*a73be61aSHans Rosenfeld #define IPMGMT_PROPS_ONLY 0x00000020 144*a73be61aSHans Rosenfeld #define IPMGMT_UPDATE_IF 0x00000040 145*a73be61aSHans Rosenfeld #define IPMGMT_UPDATE_IPMP 0x00000080 146*a73be61aSHans Rosenfeld 147*a73be61aSHans Rosenfeld 1486e91bba0SGirish Moodalbail /* door call command type */ 1496e91bba0SGirish Moodalbail typedef enum { 1506e91bba0SGirish Moodalbail IPMGMT_CMD_SETPROP = 1, /* persist property */ 1516e91bba0SGirish Moodalbail IPMGMT_CMD_SETIF, /* persist interface */ 1526e91bba0SGirish Moodalbail IPMGMT_CMD_SETADDR, /* persist address */ 1536e91bba0SGirish Moodalbail IPMGMT_CMD_GETPROP, /* retrieve persisted property value */ 1546e91bba0SGirish Moodalbail IPMGMT_CMD_GETIF, /* retrieve persisted interface conf. */ 1556e91bba0SGirish Moodalbail IPMGMT_CMD_GETADDR, /* retrieve persisted addresses */ 1566e91bba0SGirish Moodalbail IPMGMT_CMD_RESETIF, /* purge interface configuration */ 1576e91bba0SGirish Moodalbail IPMGMT_CMD_RESETADDR, /* purge address configuration */ 1586e91bba0SGirish Moodalbail IPMGMT_CMD_RESETPROP, /* purge property configuration */ 1596e91bba0SGirish Moodalbail IPMGMT_CMD_INITIF, /* retrieve interfaces to initialize */ 1606e91bba0SGirish Moodalbail IPMGMT_CMD_ADDROBJ_LOOKUPADD, /* addr. object lookup & add */ 161ec3706caSVasumathi Sundaram IPMGMT_CMD_ADDROBJ_SETLIFNUM, /* set lifnum on the addrobj */ 1626e91bba0SGirish Moodalbail IPMGMT_CMD_ADDROBJ_ADD, /* add addr. object to addrobj map */ 1636e91bba0SGirish Moodalbail IPMGMT_CMD_LIF2ADDROBJ, /* lifname to addrobj mapping */ 164*a73be61aSHans Rosenfeld IPMGMT_CMD_AOBJNAME2ADDROBJ, /* aobjname to addrobj mapping */ 165*a73be61aSHans Rosenfeld IPMGMT_CMD_IPMP_UPDATE /* update IPMP group members */ 1666e91bba0SGirish Moodalbail } ipmgmt_door_cmd_type_t; 1676e91bba0SGirish Moodalbail 1686e91bba0SGirish Moodalbail /* 1696e91bba0SGirish Moodalbail * Note: We need to keep the size of the structure the same on amd64 and i386 1706e91bba0SGirish Moodalbail * for all door_call arguments and door_return structures. 1716e91bba0SGirish Moodalbail */ 1726e91bba0SGirish Moodalbail /* door_call argument */ 1736e91bba0SGirish Moodalbail typedef struct ipmgmt_arg { 1746e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 1756e91bba0SGirish Moodalbail } ipmgmt_arg_t; 1766e91bba0SGirish Moodalbail 1776e91bba0SGirish Moodalbail /* IPMGMT_CMD_{SETPROP|GETPROP|RESETPROP} door_call argument */ 1786e91bba0SGirish Moodalbail typedef struct ipmgmt_prop_arg_s { 1796e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 1806e91bba0SGirish Moodalbail uint32_t ia_flags; 1816e91bba0SGirish Moodalbail char ia_ifname[LIFNAMSIZ]; 1826e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 1836e91bba0SGirish Moodalbail char ia_module[MAXPROTONAMELEN]; 1846e91bba0SGirish Moodalbail char ia_pname[MAXPROPNAMELEN]; 1856e91bba0SGirish Moodalbail char ia_pval[MAXPROPVALLEN]; 1866e91bba0SGirish Moodalbail } ipmgmt_prop_arg_t; 1876e91bba0SGirish Moodalbail 188b31320a7SChris Fraire /* 189b31320a7SChris Fraire * ipadm_addr_type_t-specific values that are cached in ipmgmtd and can 190b31320a7SChris Fraire * make a round-trip back to client programs 191b31320a7SChris Fraire */ 192b31320a7SChris Fraire typedef union { 193b31320a7SChris Fraire struct { 194b31320a7SChris Fraire boolean_t ipmgmt_linklocal; 195b31320a7SChris Fraire struct sockaddr_in6 ipmgmt_ifid; 196b31320a7SChris Fraire } ipmgmt_ipv6_cache_s; 197b31320a7SChris Fraire struct { 198b31320a7SChris Fraire char ipmgmt_reqhost[MAXNAMELEN]; 199b31320a7SChris Fraire } ipmgmt_dhcp_cache_s; 200b31320a7SChris Fraire } ipmgmt_addr_type_cache_u; 201b31320a7SChris Fraire 2026e91bba0SGirish Moodalbail /* IPMGMT_CMD_GETIF door_call argument structure */ 2036e91bba0SGirish Moodalbail typedef struct ipmgmt_getif_arg_s { 2046e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2056e91bba0SGirish Moodalbail uint32_t ia_flags; 2066e91bba0SGirish Moodalbail char ia_ifname[LIFNAMSIZ]; 2076e91bba0SGirish Moodalbail } ipmgmt_getif_arg_t; 2086e91bba0SGirish Moodalbail 2096e91bba0SGirish Moodalbail /* IPMGMT_CMD_RESETIF, IPMGMT_CMD_SETIF door_call argument structure */ 2106e91bba0SGirish Moodalbail typedef struct ipmgmt_if_arg_s { 2116e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2126e91bba0SGirish Moodalbail uint32_t ia_flags; 2136e91bba0SGirish Moodalbail char ia_ifname[LIFNAMSIZ]; 2146e91bba0SGirish Moodalbail sa_family_t ia_family; 215*a73be61aSHans Rosenfeld ipadm_if_class_t ia_ifclass; 2166e91bba0SGirish Moodalbail } ipmgmt_if_arg_t; 2176e91bba0SGirish Moodalbail 2186e91bba0SGirish Moodalbail /* IPMGMT_CMD_INITIF door_call argument structure */ 2196e91bba0SGirish Moodalbail typedef struct ipmgmt_initif_arg_s { 2206e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2216e91bba0SGirish Moodalbail uint32_t ia_flags; 2226e91bba0SGirish Moodalbail sa_family_t ia_family; 2236e91bba0SGirish Moodalbail size_t ia_nvlsize; 2246e91bba0SGirish Moodalbail /* packed nvl follows */ 2256e91bba0SGirish Moodalbail } ipmgmt_initif_arg_t; 2266e91bba0SGirish Moodalbail 227*a73be61aSHans Rosenfeld /* IPMGMT_CMD_IPMP_UPDATE door_call argument structure */ 228*a73be61aSHans Rosenfeld typedef struct ipmgmt_ipmp_update_arg_s { 229*a73be61aSHans Rosenfeld ipmgmt_door_cmd_type_t ia_cmd; 230*a73be61aSHans Rosenfeld uint32_t ia_flags; 231*a73be61aSHans Rosenfeld char ia_gifname[LIFNAMSIZ]; /* group interface name */ 232*a73be61aSHans Rosenfeld char ia_mifname[LIFNAMSIZ]; /* group's member interface name */ 233*a73be61aSHans Rosenfeld } ipmgmt_ipmp_update_arg_t; 234*a73be61aSHans Rosenfeld 2356e91bba0SGirish Moodalbail /* IPMGMT_CMD_SETADDR door_call argument */ 2366e91bba0SGirish Moodalbail typedef struct ipmgmt_setaddr_arg_s { 2376e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2386e91bba0SGirish Moodalbail uint32_t ia_flags; 2396e91bba0SGirish Moodalbail size_t ia_nvlsize; 2406e91bba0SGirish Moodalbail /* packed nvl follows */ 2416e91bba0SGirish Moodalbail } ipmgmt_setaddr_arg_t; 2426e91bba0SGirish Moodalbail 2436e91bba0SGirish Moodalbail /* IPMGMT_CMD_GETADDR door_call argument */ 2446e91bba0SGirish Moodalbail typedef struct ipmgmt_getaddr_arg_s { 2456e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2466e91bba0SGirish Moodalbail uint32_t ia_flags; 2476e91bba0SGirish Moodalbail char ia_ifname[LIFNAMSIZ]; 2486e91bba0SGirish Moodalbail sa_family_t ia_family; 2496e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 2506e91bba0SGirish Moodalbail } ipmgmt_getaddr_arg_t; 2516e91bba0SGirish Moodalbail 2526e91bba0SGirish Moodalbail /* IPMGMT_CMD_RESETADDR door_call argument */ 2536e91bba0SGirish Moodalbail typedef struct ipmgmt_addr_arg_s { 2546e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2556e91bba0SGirish Moodalbail uint32_t ia_flags; 2566e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 2576e91bba0SGirish Moodalbail int32_t ia_lnum; 2586e91bba0SGirish Moodalbail } ipmgmt_addr_arg_t; 2596e91bba0SGirish Moodalbail 2606e91bba0SGirish Moodalbail /* 2616e91bba0SGirish Moodalbail * IPMGMT_CMD_{ADDROBJ_ADD|ADDROBJ_LOOKUPADD|LIFNUM2ADDROBJ| 2626e91bba0SGirish Moodalbail * ADDROBJ2LIFNUM} door_call argument. 2636e91bba0SGirish Moodalbail */ 2646e91bba0SGirish Moodalbail typedef struct ipmgmt_aobjop_arg_s { 2656e91bba0SGirish Moodalbail ipmgmt_door_cmd_type_t ia_cmd; 2666e91bba0SGirish Moodalbail uint32_t ia_flags; 2676e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 2686e91bba0SGirish Moodalbail char ia_ifname[LIFNAMSIZ]; 2696e91bba0SGirish Moodalbail int32_t ia_lnum; 2706e91bba0SGirish Moodalbail sa_family_t ia_family; 2716e91bba0SGirish Moodalbail ipadm_addr_type_t ia_atype; 2726e91bba0SGirish Moodalbail } ipmgmt_aobjop_arg_t; 2736e91bba0SGirish Moodalbail 2746e91bba0SGirish Moodalbail /* door call return value */ 2756e91bba0SGirish Moodalbail typedef struct ipmgmt_retval_s { 2766e91bba0SGirish Moodalbail int32_t ir_err; 2776e91bba0SGirish Moodalbail } ipmgmt_retval_t; 2786e91bba0SGirish Moodalbail 2796e91bba0SGirish Moodalbail /* IPMGMT_CMD_GETADDR door_return value */ 2806e91bba0SGirish Moodalbail typedef struct ipmgmt_get_rval_s { 2816e91bba0SGirish Moodalbail int32_t ir_err; 2820a8fc1cbSHans Rosenfeld uint32_t ir_nvlsize; 2836e91bba0SGirish Moodalbail /* packed nvl follows */ 2846e91bba0SGirish Moodalbail } ipmgmt_get_rval_t; 2856e91bba0SGirish Moodalbail 2866e91bba0SGirish Moodalbail /* IPMGMT_CMD_GETPROP door_return value */ 2876e91bba0SGirish Moodalbail typedef struct ipmgmt_getprop_rval_s { 2886e91bba0SGirish Moodalbail int32_t ir_err; 2896e91bba0SGirish Moodalbail char ir_pval[MAXPROPVALLEN]; 2906e91bba0SGirish Moodalbail } ipmgmt_getprop_rval_t; 2916e91bba0SGirish Moodalbail 2926e91bba0SGirish Moodalbail /* IPMGMT_CMD_GETIF door_return value */ 2936e91bba0SGirish Moodalbail typedef struct ipmgmt_getif_rval_s { 2946e91bba0SGirish Moodalbail int32_t ir_err; 2956e91bba0SGirish Moodalbail uint32_t ir_ifcnt; 2966e91bba0SGirish Moodalbail ipadm_if_info_t ir_ifinfo[1]; 2976e91bba0SGirish Moodalbail } ipmgmt_getif_rval_t; 2986e91bba0SGirish Moodalbail 2996e91bba0SGirish Moodalbail /* IPMGMT_CMD_{LOOKUPADD|LIFNUM2ADDROBJ|ADDROBJ2LIFNUM} door_return value */ 3006e91bba0SGirish Moodalbail typedef struct ipmgmt_aobjop_rval_s { 3016e91bba0SGirish Moodalbail int32_t ir_err; 3026e91bba0SGirish Moodalbail char ir_aobjname[IPADM_AOBJSIZ]; 3036e91bba0SGirish Moodalbail char ir_ifname[LIFNAMSIZ]; 3046e91bba0SGirish Moodalbail int32_t ir_lnum; 3056e91bba0SGirish Moodalbail sa_family_t ir_family; 3066e91bba0SGirish Moodalbail uint32_t ir_flags; 3076e91bba0SGirish Moodalbail ipadm_addr_type_t ir_atype; 308b31320a7SChris Fraire ipmgmt_addr_type_cache_u ir_atype_cache; 3096e91bba0SGirish Moodalbail } ipmgmt_aobjop_rval_t; 3106e91bba0SGirish Moodalbail 311b31320a7SChris Fraire #define ipmgmt_ir_intfid ir_atype_cache. \ 312b31320a7SChris Fraire ipmgmt_ipv6_cache_s.ipmgmt_ifid 313b31320a7SChris Fraire #define ipmgmt_ir_reqhost ir_atype_cache. \ 314b31320a7SChris Fraire ipmgmt_dhcp_cache_s.ipmgmt_reqhost 315b31320a7SChris Fraire 3166e91bba0SGirish Moodalbail /* DB walk callback functions */ 3176e91bba0SGirish Moodalbail typedef boolean_t db_wfunc_t(void *, nvlist_t *, char *, size_t, int *); 3186e91bba0SGirish Moodalbail extern int ipadm_rw_db(db_wfunc_t *, void *, const char *, mode_t, 3196e91bba0SGirish Moodalbail ipadm_db_op_t); 3206e91bba0SGirish Moodalbail 321550b6e40SSowmini Varadhan /* zone related functions */ 322550b6e40SSowmini Varadhan /* 323550b6e40SSowmini Varadhan * callback function to persist an interface in ipmgmtd data store 324550b6e40SSowmini Varadhan */ 325550b6e40SSowmini Varadhan typedef void (*persist_cb_t)(char *, boolean_t, boolean_t); 326550b6e40SSowmini Varadhan /* 327550b6e40SSowmini Varadhan * ipmgmtd/libipadm network initialization interface. 328550b6e40SSowmini Varadhan */ 329550b6e40SSowmini Varadhan extern ipadm_status_t ipadm_init_net_from_gz(ipadm_handle_t, char *, 330550b6e40SSowmini Varadhan persist_cb_t); 331550b6e40SSowmini Varadhan 3326e91bba0SGirish Moodalbail #ifdef __cplusplus 3336e91bba0SGirish Moodalbail } 3346e91bba0SGirish Moodalbail #endif 3356e91bba0SGirish Moodalbail 3366e91bba0SGirish Moodalbail #endif /* _IPADM_IPMGMT_H */ 337