1*6e91bba0SGirish Moodalbail /* 2*6e91bba0SGirish Moodalbail * CDDL HEADER START 3*6e91bba0SGirish Moodalbail * 4*6e91bba0SGirish Moodalbail * The contents of this file are subject to the terms of the 5*6e91bba0SGirish Moodalbail * Common Development and Distribution License (the "License"). 6*6e91bba0SGirish Moodalbail * You may not use this file except in compliance with the License. 7*6e91bba0SGirish Moodalbail * 8*6e91bba0SGirish Moodalbail * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*6e91bba0SGirish Moodalbail * or http://www.opensolaris.org/os/licensing. 10*6e91bba0SGirish Moodalbail * See the License for the specific language governing permissions 11*6e91bba0SGirish Moodalbail * and limitations under the License. 12*6e91bba0SGirish Moodalbail * 13*6e91bba0SGirish Moodalbail * When distributing Covered Code, include this CDDL HEADER in each 14*6e91bba0SGirish Moodalbail * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*6e91bba0SGirish Moodalbail * If applicable, add the following below this CDDL HEADER, with the 16*6e91bba0SGirish Moodalbail * fields enclosed by brackets "[]" replaced with your own identifying 17*6e91bba0SGirish Moodalbail * information: Portions Copyright [yyyy] [name of copyright owner] 18*6e91bba0SGirish Moodalbail * 19*6e91bba0SGirish Moodalbail * CDDL HEADER END 20*6e91bba0SGirish Moodalbail */ 21*6e91bba0SGirish Moodalbail /* 22*6e91bba0SGirish Moodalbail * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 23*6e91bba0SGirish Moodalbail * Use is subject to license terms. 24*6e91bba0SGirish Moodalbail */ 25*6e91bba0SGirish Moodalbail #ifndef _LIBIPADM_H 26*6e91bba0SGirish Moodalbail #define _LIBIPADM_H 27*6e91bba0SGirish Moodalbail 28*6e91bba0SGirish Moodalbail #ifdef __cplusplus 29*6e91bba0SGirish Moodalbail extern "C" { 30*6e91bba0SGirish Moodalbail #endif 31*6e91bba0SGirish Moodalbail 32*6e91bba0SGirish Moodalbail #include <sys/types.h> 33*6e91bba0SGirish Moodalbail #include <sys/socket.h> 34*6e91bba0SGirish Moodalbail #include <net/if.h> 35*6e91bba0SGirish Moodalbail #include <netdb.h> 36*6e91bba0SGirish Moodalbail #include <ifaddrs.h> 37*6e91bba0SGirish Moodalbail #include <libnvpair.h> 38*6e91bba0SGirish Moodalbail #include <netinet/tcp.h> 39*6e91bba0SGirish Moodalbail #include <sys/stropts.h> 40*6e91bba0SGirish Moodalbail 41*6e91bba0SGirish Moodalbail #define IPADM_AOBJ_USTRSIZ 32 42*6e91bba0SGirish Moodalbail #define IPADM_AOBJSIZ (LIFNAMSIZ + IPADM_AOBJ_USTRSIZ) 43*6e91bba0SGirish Moodalbail #define MAXPROPVALLEN 512 44*6e91bba0SGirish Moodalbail #define LOOPBACK_IF "lo0" 45*6e91bba0SGirish Moodalbail 46*6e91bba0SGirish Moodalbail /* special timeout values for dhcp operations */ 47*6e91bba0SGirish Moodalbail #define IPADM_DHCP_WAIT_DEFAULT (-1) 48*6e91bba0SGirish Moodalbail #define IPADM_DHCP_WAIT_FOREVER (-2) 49*6e91bba0SGirish Moodalbail 50*6e91bba0SGirish Moodalbail /* 51*6e91bba0SGirish Moodalbail * Specifies that the string passed to ipadm_str2nvlist() is a string of comma 52*6e91bba0SGirish Moodalbail * separated names and that each name does not have values associated with it. 53*6e91bba0SGirish Moodalbail */ 54*6e91bba0SGirish Moodalbail #define IPADM_NORVAL 0x00000001 55*6e91bba0SGirish Moodalbail 56*6e91bba0SGirish Moodalbail /* error codes */ 57*6e91bba0SGirish Moodalbail typedef enum { 58*6e91bba0SGirish Moodalbail IPADM_SUCCESS, /* No error occurred */ 59*6e91bba0SGirish Moodalbail IPADM_FAILURE, /* Generic failure */ 60*6e91bba0SGirish Moodalbail IPADM_EAUTH, /* Insufficient user authorizations */ 61*6e91bba0SGirish Moodalbail IPADM_EPERM, /* Permission denied */ 62*6e91bba0SGirish Moodalbail IPADM_NO_BUFS, /* No Buffer space available */ 63*6e91bba0SGirish Moodalbail IPADM_NO_MEMORY, /* Insufficient memory */ 64*6e91bba0SGirish Moodalbail IPADM_BAD_ADDR, /* Invalid address */ 65*6e91bba0SGirish Moodalbail IPADM_BAD_PROTOCOL, /* Wrong protocol family for operation */ 66*6e91bba0SGirish Moodalbail IPADM_DAD_FOUND, /* Duplicate address detected */ 67*6e91bba0SGirish Moodalbail IPADM_EXISTS, /* Already exists */ 68*6e91bba0SGirish Moodalbail IPADM_IF_EXISTS, /* Interface already exists */ 69*6e91bba0SGirish Moodalbail IPADM_ADDROBJ_EXISTS, /* Address object already exists */ 70*6e91bba0SGirish Moodalbail IPADM_ADDRCONF_EXISTS, /* Addrconf already in progress */ 71*6e91bba0SGirish Moodalbail IPADM_ENXIO, /* Interface does not exist */ 72*6e91bba0SGirish Moodalbail IPADM_GRP_NOTEMPTY, /* IPMP Group non-empty on unplumb */ 73*6e91bba0SGirish Moodalbail IPADM_INVALID_ARG, /* Invalid argument */ 74*6e91bba0SGirish Moodalbail IPADM_INVALID_NAME, /* Invalid name */ 75*6e91bba0SGirish Moodalbail IPADM_DLPI_FAILURE, /* Could not open DLPI link */ 76*6e91bba0SGirish Moodalbail IPADM_DLADM_FAILURE, /* DLADM error encountered */ 77*6e91bba0SGirish Moodalbail IPADM_PROP_UNKNOWN, /* Unknown property */ 78*6e91bba0SGirish Moodalbail IPADM_ERANGE, /* Value is outside the allowed range */ 79*6e91bba0SGirish Moodalbail IPADM_ESRCH, /* Value does not exist */ 80*6e91bba0SGirish Moodalbail IPADM_EOVERFLOW, /* Number of values exceed the allowed limit */ 81*6e91bba0SGirish Moodalbail IPADM_NOTFOUND, /* Object not found */ 82*6e91bba0SGirish Moodalbail IPADM_IF_INUSE, /* Interface already in use */ 83*6e91bba0SGirish Moodalbail IPADM_ADDR_INUSE, /* Address alrelady in use */ 84*6e91bba0SGirish Moodalbail IPADM_BAD_HOSTNAME, /* hostname maps to multiple IP addresses */ 85*6e91bba0SGirish Moodalbail IPADM_ADDR_NOTAVAIL, /* Can't assign requested address */ 86*6e91bba0SGirish Moodalbail IPADM_ALL_ADDRS_NOT_ENABLED, /* All addresses could not be enabled */ 87*6e91bba0SGirish Moodalbail IPADM_NDPD_NOT_RUNNING, /* in.ndpd not running */ 88*6e91bba0SGirish Moodalbail IPADM_DHCP_START_ERROR, /* Cannot start dhcpagent */ 89*6e91bba0SGirish Moodalbail IPADM_DHCP_IPC_ERROR, /* Cannot communicate with dhcpagent */ 90*6e91bba0SGirish Moodalbail IPADM_DHCP_IPC_TIMEOUT, /* Communication with dhcpagent timed out */ 91*6e91bba0SGirish Moodalbail IPADM_TEMPORARY_OBJ, /* Permanent operation on temporary object */ 92*6e91bba0SGirish Moodalbail IPADM_IPC_ERROR, /* Cannot communicate with ipmgmtd */ 93*6e91bba0SGirish Moodalbail IPADM_OP_DISABLE_OBJ, /* Operation on disable object */ 94*6e91bba0SGirish Moodalbail IPADM_NOTSUP, /* Operation not supported */ 95*6e91bba0SGirish Moodalbail IPADM_EBADE /* Invalid data exchange with ipmgmtd */ 96*6e91bba0SGirish Moodalbail } ipadm_status_t; 97*6e91bba0SGirish Moodalbail 98*6e91bba0SGirish Moodalbail /* 99*6e91bba0SGirish Moodalbail * option flags taken by the libipadm functions 100*6e91bba0SGirish Moodalbail * 101*6e91bba0SGirish Moodalbail * - IPADM_OPT_PERSIST: 102*6e91bba0SGirish Moodalbail * For all the create/delete/up/down/set/get functions, 103*6e91bba0SGirish Moodalbail * requests to persist the configuration so that it can be 104*6e91bba0SGirish Moodalbail * re-enabled or reapplied on boot. 105*6e91bba0SGirish Moodalbail * 106*6e91bba0SGirish Moodalbail * - IPADM_OPT_ACTIVE: 107*6e91bba0SGirish Moodalbail * Requests to apply configuration without persisting it and 108*6e91bba0SGirish Moodalbail * used by show-* subcommands to retrieve current values. 109*6e91bba0SGirish Moodalbail * 110*6e91bba0SGirish Moodalbail * - IPADM_OPT_DEFAULT: 111*6e91bba0SGirish Moodalbail * retrieves the default value for a given property 112*6e91bba0SGirish Moodalbail * 113*6e91bba0SGirish Moodalbail * - IPADM_OPT_PERM 114*6e91bba0SGirish Moodalbail * retrieves the permission for a given property 115*6e91bba0SGirish Moodalbail * 116*6e91bba0SGirish Moodalbail * - IPADM_OPT_POSSIBLE 117*6e91bba0SGirish Moodalbail * retrieves the range of values for a given property 118*6e91bba0SGirish Moodalbail * 119*6e91bba0SGirish Moodalbail * - IPADM_OPT_APPEND 120*6e91bba0SGirish Moodalbail * for multi-valued properties, appends a new value. 121*6e91bba0SGirish Moodalbail * 122*6e91bba0SGirish Moodalbail * - IPADM_OPT_REMOVE 123*6e91bba0SGirish Moodalbail * for multi-valued properties, removes the specified value 124*6e91bba0SGirish Moodalbail * 125*6e91bba0SGirish Moodalbail * - IPADM_OPT_IPMP 126*6e91bba0SGirish Moodalbail * Used in ipadm_create_if() to plumb ipmp interfaces. 127*6e91bba0SGirish Moodalbail * 128*6e91bba0SGirish Moodalbail * - IPADM_OPT_GENPPA 129*6e91bba0SGirish Moodalbail * Used in ipadm_create_if() to generate a ppa for the given interface. 130*6e91bba0SGirish Moodalbail * 131*6e91bba0SGirish Moodalbail * - IPADM_OPT_ZEROADDR 132*6e91bba0SGirish Moodalbail * return :: or INADDR_ANY 133*6e91bba0SGirish Moodalbail * 134*6e91bba0SGirish Moodalbail * - IPADM_OPT_RELEASE 135*6e91bba0SGirish Moodalbail * Used to release the lease on a dhcp address object 136*6e91bba0SGirish Moodalbail * 137*6e91bba0SGirish Moodalbail * - IPADM_OPT_INFORM 138*6e91bba0SGirish Moodalbail * Used to perform DHCP_INFORM on a specified static address object 139*6e91bba0SGirish Moodalbail * 140*6e91bba0SGirish Moodalbail * - IPADM_OPT_UP 141*6e91bba0SGirish Moodalbail * Used to bring up a static address on creation 142*6e91bba0SGirish Moodalbail */ 143*6e91bba0SGirish Moodalbail #define IPADM_OPT_PERSIST 0x00000001 144*6e91bba0SGirish Moodalbail #define IPADM_OPT_ACTIVE 0x00000002 145*6e91bba0SGirish Moodalbail #define IPADM_OPT_DEFAULT 0x00000004 146*6e91bba0SGirish Moodalbail #define IPADM_OPT_PERM 0x00000008 147*6e91bba0SGirish Moodalbail #define IPADM_OPT_POSSIBLE 0x00000010 148*6e91bba0SGirish Moodalbail #define IPADM_OPT_APPEND 0x00000020 149*6e91bba0SGirish Moodalbail #define IPADM_OPT_REMOVE 0x00000040 150*6e91bba0SGirish Moodalbail #define IPADM_OPT_IPMP 0x00000080 151*6e91bba0SGirish Moodalbail #define IPADM_OPT_GENPPA 0x00000100 152*6e91bba0SGirish Moodalbail #define IPADM_OPT_ZEROADDR 0x00000200 153*6e91bba0SGirish Moodalbail #define IPADM_OPT_RELEASE 0x00000400 154*6e91bba0SGirish Moodalbail #define IPADM_OPT_INFORM 0x00000800 155*6e91bba0SGirish Moodalbail #define IPADM_OPT_UP 0x00001000 156*6e91bba0SGirish Moodalbail 157*6e91bba0SGirish Moodalbail /* IPADM property class */ 158*6e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODULE 0x00000001 /* on 'protocol' only */ 159*6e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_IF 0x00000002 /* on 'IP interface' only */ 160*6e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_ADDR 0x00000004 /* on 'IP address' only */ 161*6e91bba0SGirish Moodalbail /* protocol property that can be applied on interface too */ 162*6e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODIF (IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF) 163*6e91bba0SGirish Moodalbail 164*6e91bba0SGirish Moodalbail /* opaque ipadm handle to libipadm functions */ 165*6e91bba0SGirish Moodalbail struct ipadm_handle; 166*6e91bba0SGirish Moodalbail typedef struct ipadm_handle *ipadm_handle_t; 167*6e91bba0SGirish Moodalbail 168*6e91bba0SGirish Moodalbail /* ipadm_handle flags */ 169*6e91bba0SGirish Moodalbail #define IPH_VRRP 0x00000001 /* Caller is VRRP */ 170*6e91bba0SGirish Moodalbail #define IPH_LEGACY 0x00000002 /* Caller is legacy app */ 171*6e91bba0SGirish Moodalbail 172*6e91bba0SGirish Moodalbail /* opaque address object structure */ 173*6e91bba0SGirish Moodalbail typedef struct ipadm_addrobj_s *ipadm_addrobj_t; 174*6e91bba0SGirish Moodalbail 175*6e91bba0SGirish Moodalbail /* ipadm_if_info_t states */ 176*6e91bba0SGirish Moodalbail typedef enum { 177*6e91bba0SGirish Moodalbail IFIS_OK, /* Interface is usable */ 178*6e91bba0SGirish Moodalbail IFIS_DOWN, /* Interface has no UP addresses */ 179*6e91bba0SGirish Moodalbail IFIS_FAILED, /* Interface has failed. */ 180*6e91bba0SGirish Moodalbail IFIS_OFFLINE, /* Interface has been offlined */ 181*6e91bba0SGirish Moodalbail IFIS_DISABLED /* Interface has been disabled. */ 182*6e91bba0SGirish Moodalbail } ipadm_if_state_t; 183*6e91bba0SGirish Moodalbail 184*6e91bba0SGirish Moodalbail typedef struct ipadm_if_info_s { 185*6e91bba0SGirish Moodalbail struct ipadm_if_info_s *ifi_next; 186*6e91bba0SGirish Moodalbail char ifi_name[LIFNAMSIZ]; /* interface name */ 187*6e91bba0SGirish Moodalbail ipadm_if_state_t ifi_state; /* see above */ 188*6e91bba0SGirish Moodalbail uint_t ifi_cflags; /* current flags */ 189*6e91bba0SGirish Moodalbail uint_t ifi_pflags; /* persistent flags */ 190*6e91bba0SGirish Moodalbail } ipadm_if_info_t; 191*6e91bba0SGirish Moodalbail 192*6e91bba0SGirish Moodalbail /* ipadm_if_info_t flags */ 193*6e91bba0SGirish Moodalbail #define IFIF_BROADCAST 0x00000001 194*6e91bba0SGirish Moodalbail #define IFIF_MULTICAST 0x00000002 195*6e91bba0SGirish Moodalbail #define IFIF_POINTOPOINT 0x00000004 196*6e91bba0SGirish Moodalbail #define IFIF_VIRTUAL 0x00000008 197*6e91bba0SGirish Moodalbail #define IFIF_IPMP 0x00000010 198*6e91bba0SGirish Moodalbail #define IFIF_STANDBY 0x00000020 199*6e91bba0SGirish Moodalbail #define IFIF_INACTIVE 0x00000040 200*6e91bba0SGirish Moodalbail #define IFIF_VRRP 0x00000080 201*6e91bba0SGirish Moodalbail #define IFIF_NOACCEPT 0x00000100 202*6e91bba0SGirish Moodalbail #define IFIF_IPV4 0x00000200 203*6e91bba0SGirish Moodalbail #define IFIF_IPV6 0x00000400 204*6e91bba0SGirish Moodalbail 205*6e91bba0SGirish Moodalbail /* ipadm_addr_info_t state */ 206*6e91bba0SGirish Moodalbail typedef enum { 207*6e91bba0SGirish Moodalbail IFA_DISABLED, /* Address not in active configuration. */ 208*6e91bba0SGirish Moodalbail IFA_DUPLICATE, /* DAD failed. */ 209*6e91bba0SGirish Moodalbail IFA_DOWN, /* Address is not IFF_UP */ 210*6e91bba0SGirish Moodalbail IFA_TENTATIVE, /* DAD verification initiated */ 211*6e91bba0SGirish Moodalbail IFA_OK, /* Address is usable */ 212*6e91bba0SGirish Moodalbail IFA_INACCESSIBLE /* Interface has failed */ 213*6e91bba0SGirish Moodalbail } ipadm_addr_state_t; 214*6e91bba0SGirish Moodalbail 215*6e91bba0SGirish Moodalbail /* possible address types */ 216*6e91bba0SGirish Moodalbail typedef enum { 217*6e91bba0SGirish Moodalbail IPADM_ADDR_NONE, 218*6e91bba0SGirish Moodalbail IPADM_ADDR_STATIC, 219*6e91bba0SGirish Moodalbail IPADM_ADDR_IPV6_ADDRCONF, 220*6e91bba0SGirish Moodalbail IPADM_ADDR_DHCP 221*6e91bba0SGirish Moodalbail } ipadm_addr_type_t; 222*6e91bba0SGirish Moodalbail 223*6e91bba0SGirish Moodalbail typedef struct ipadm_addr_info_s { 224*6e91bba0SGirish Moodalbail struct ifaddrs ia_ifa; /* list of addresses */ 225*6e91bba0SGirish Moodalbail char ia_sname[NI_MAXHOST]; /* local hostname */ 226*6e91bba0SGirish Moodalbail char ia_dname[NI_MAXHOST]; /* remote hostname */ 227*6e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 228*6e91bba0SGirish Moodalbail uint_t ia_cflags; /* active flags */ 229*6e91bba0SGirish Moodalbail uint_t ia_pflags; /* persistent flags */ 230*6e91bba0SGirish Moodalbail ipadm_addr_type_t ia_atype; /* see above */ 231*6e91bba0SGirish Moodalbail ipadm_addr_state_t ia_state; /* see above */ 232*6e91bba0SGirish Moodalbail } ipadm_addr_info_t; 233*6e91bba0SGirish Moodalbail #define IA_NEXT(ia) ((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next)) 234*6e91bba0SGirish Moodalbail 235*6e91bba0SGirish Moodalbail /* ipadm_addr_info_t flags */ 236*6e91bba0SGirish Moodalbail #define IA_UP 0x00000001 237*6e91bba0SGirish Moodalbail #define IA_UNNUMBERED 0x00000002 238*6e91bba0SGirish Moodalbail #define IA_PRIVATE 0x00000004 239*6e91bba0SGirish Moodalbail #define IA_TEMPORARY 0x00000008 240*6e91bba0SGirish Moodalbail #define IA_DEPRECATED 0x00000010 241*6e91bba0SGirish Moodalbail 242*6e91bba0SGirish Moodalbail /* open/close libipadm handle */ 243*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open(ipadm_handle_t *, uint32_t); 244*6e91bba0SGirish Moodalbail extern void ipadm_close(ipadm_handle_t); 245*6e91bba0SGirish Moodalbail 246*6e91bba0SGirish Moodalbail /* Check authorization for network configuration */ 247*6e91bba0SGirish Moodalbail extern boolean_t ipadm_check_auth(void); 248*6e91bba0SGirish Moodalbail /* 249*6e91bba0SGirish Moodalbail * Interface mangement functions 250*6e91bba0SGirish Moodalbail */ 251*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_if(ipadm_handle_t, char *, sa_family_t, 252*6e91bba0SGirish Moodalbail uint32_t); 253*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_if(ipadm_handle_t, const char *, 254*6e91bba0SGirish Moodalbail uint32_t); 255*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_if(ipadm_handle_t, const char *, uint32_t); 256*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_if_info(ipadm_handle_t, const char *, 257*6e91bba0SGirish Moodalbail ipadm_if_info_t **, uint32_t, int64_t); 258*6e91bba0SGirish Moodalbail extern void ipadm_free_if_info(ipadm_if_info_t *); 259*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_if(ipadm_handle_t, const char *, 260*6e91bba0SGirish Moodalbail sa_family_t, uint32_t); 261*6e91bba0SGirish Moodalbail 262*6e91bba0SGirish Moodalbail /* 263*6e91bba0SGirish Moodalbail * Address management functions 264*6e91bba0SGirish Moodalbail */ 265*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t, 266*6e91bba0SGirish Moodalbail uint32_t); 267*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_addr(ipadm_handle_t, const char *, 268*6e91bba0SGirish Moodalbail uint32_t); 269*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_addr(ipadm_handle_t, const char *, 270*6e91bba0SGirish Moodalbail uint32_t); 271*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_addr_info(ipadm_handle_t, const char *, 272*6e91bba0SGirish Moodalbail ipadm_addr_info_t **, uint32_t, int64_t); 273*6e91bba0SGirish Moodalbail extern void ipadm_free_addr_info(ipadm_addr_info_t *); 274*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_up_addr(ipadm_handle_t, const char *, 275*6e91bba0SGirish Moodalbail uint32_t); 276*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_down_addr(ipadm_handle_t, const char *, 277*6e91bba0SGirish Moodalbail uint32_t); 278*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_refresh_addr(ipadm_handle_t, const char *, 279*6e91bba0SGirish Moodalbail uint32_t); 280*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_addr(ipadm_handle_t, const char *, 281*6e91bba0SGirish Moodalbail uint32_t); 282*6e91bba0SGirish Moodalbail 283*6e91bba0SGirish Moodalbail /* Functions related to creating/deleting/modifying opaque address object */ 284*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addrobj(ipadm_addr_type_t, const char *, 285*6e91bba0SGirish Moodalbail ipadm_addrobj_t *); 286*6e91bba0SGirish Moodalbail extern void ipadm_destroy_addrobj(ipadm_addrobj_t); 287*6e91bba0SGirish Moodalbail 288*6e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for static addresses */ 289*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addr(ipadm_addrobj_t, const char *, 290*6e91bba0SGirish Moodalbail sa_family_t); 291*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_dst_addr(ipadm_addrobj_t, const char *, 292*6e91bba0SGirish Moodalbail sa_family_t); 293*6e91bba0SGirish Moodalbail 294*6e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for IPv6 addrconf */ 295*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_interface_id(ipadm_addrobj_t, const char *); 296*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateless(ipadm_addrobj_t, boolean_t); 297*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateful(ipadm_addrobj_t, boolean_t); 298*6e91bba0SGirish Moodalbail 299*6e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for DHCP */ 300*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_primary(ipadm_addrobj_t, boolean_t); 301*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_wait_time(ipadm_addrobj_t, int32_t); 302*6e91bba0SGirish Moodalbail 303*6e91bba0SGirish Moodalbail /* 304*6e91bba0SGirish Moodalbail * Property management functions 305*6e91bba0SGirish Moodalbail */ 306*6e91bba0SGirish Moodalbail /* call back function for the property walker */ 307*6e91bba0SGirish Moodalbail typedef boolean_t ipadm_prop_wfunc_t(void *, const char *, uint_t); 308*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *, 309*6e91bba0SGirish Moodalbail void *); 310*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_prop(const char *, uint_t, uint_t, 311*6e91bba0SGirish Moodalbail ipadm_prop_wfunc_t *, void *); 312*6e91bba0SGirish Moodalbail 313*6e91bba0SGirish Moodalbail /* Interface property management - set, reset and get */ 314*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_ifprop(ipadm_handle_t, const char *, 315*6e91bba0SGirish Moodalbail const char *, const char *, uint_t, uint_t); 316*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_ifprop(ipadm_handle_t, const char *, 317*6e91bba0SGirish Moodalbail const char *, char *, uint_t *, uint_t, uint_t); 318*6e91bba0SGirish Moodalbail 319*6e91bba0SGirish Moodalbail /* Address property management - set, reset and get */ 320*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addrprop(ipadm_handle_t, const char *, 321*6e91bba0SGirish Moodalbail const char *, const char *, uint_t); 322*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_addrprop(ipadm_handle_t, const char *, char *, 323*6e91bba0SGirish Moodalbail uint_t *, const char *, uint_t); 324*6e91bba0SGirish Moodalbail 325*6e91bba0SGirish Moodalbail /* Protoocl property management - set, reset and get */ 326*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_prop(ipadm_handle_t, const char *, 327*6e91bba0SGirish Moodalbail const char *, uint_t, uint_t); 328*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_prop(ipadm_handle_t, const char *, char *, 329*6e91bba0SGirish Moodalbail uint_t *, uint_t, uint_t); 330*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_init_prop(void); 331*6e91bba0SGirish Moodalbail 332*6e91bba0SGirish Moodalbail /* 333*6e91bba0SGirish Moodalbail * miscellaneous helper functions. 334*6e91bba0SGirish Moodalbail */ 335*6e91bba0SGirish Moodalbail extern const char *ipadm_status2str(ipadm_status_t); 336*6e91bba0SGirish Moodalbail extern int ipadm_str2nvlist(const char *, nvlist_t **, uint_t); 337*6e91bba0SGirish Moodalbail extern size_t ipadm_nvlist2str(nvlist_t *, char *, size_t); 338*6e91bba0SGirish Moodalbail extern char *ipadm_proto2str(uint_t); 339*6e91bba0SGirish Moodalbail extern uint_t ipadm_str2proto(const char *); 340*6e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open_arp_on_udp(const char *, int *); 341*6e91bba0SGirish Moodalbail 342*6e91bba0SGirish Moodalbail #ifdef __cplusplus 343*6e91bba0SGirish Moodalbail } 344*6e91bba0SGirish Moodalbail #endif 345*6e91bba0SGirish Moodalbail 346*6e91bba0SGirish Moodalbail #endif /* _LIBIPADM_H */ 347