xref: /titanic_50/usr/src/lib/libipadm/common/libipadm.h (revision 6e91bba0d6c6bdabbba62cefae583715a4a58e2a)
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