xref: /titanic_50/usr/src/lib/libipadm/common/libipadm.h (revision 6a634c9dca3093f3922e4b7ab826d7bdf17bf78e)
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 /*
2236b41818SGirish Moodalbail  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
236e91bba0SGirish Moodalbail  */
246e91bba0SGirish Moodalbail #ifndef _LIBIPADM_H
256e91bba0SGirish Moodalbail #define	_LIBIPADM_H
266e91bba0SGirish Moodalbail 
276e91bba0SGirish Moodalbail #ifdef	__cplusplus
286e91bba0SGirish Moodalbail extern "C" {
296e91bba0SGirish Moodalbail #endif
306e91bba0SGirish Moodalbail 
316e91bba0SGirish Moodalbail #include <sys/types.h>
326e91bba0SGirish Moodalbail #include <sys/socket.h>
336e91bba0SGirish Moodalbail #include <net/if.h>
346e91bba0SGirish Moodalbail #include <netdb.h>
356e91bba0SGirish Moodalbail #include <ifaddrs.h>
366e91bba0SGirish Moodalbail #include <libnvpair.h>
376e91bba0SGirish Moodalbail #include <netinet/tcp.h>
386e91bba0SGirish Moodalbail #include <sys/stropts.h>
396e91bba0SGirish Moodalbail 
406e91bba0SGirish Moodalbail #define	IPADM_AOBJ_USTRSIZ	32
416e91bba0SGirish Moodalbail #define	IPADM_AOBJSIZ		(LIFNAMSIZ + IPADM_AOBJ_USTRSIZ)
426e91bba0SGirish Moodalbail #define	MAXPROPVALLEN		512
436e91bba0SGirish Moodalbail #define	LOOPBACK_IF		"lo0"
446e91bba0SGirish Moodalbail 
456e91bba0SGirish Moodalbail /* special timeout values for dhcp operations */
466e91bba0SGirish Moodalbail #define	IPADM_DHCP_WAIT_DEFAULT	(-1)
476e91bba0SGirish Moodalbail #define	IPADM_DHCP_WAIT_FOREVER	(-2)
486e91bba0SGirish Moodalbail 
496e91bba0SGirish Moodalbail /*
506e91bba0SGirish Moodalbail  * Specifies that the string passed to ipadm_str2nvlist() is a string of comma
516e91bba0SGirish Moodalbail  * separated names and that each name does not have values associated with it.
526e91bba0SGirish Moodalbail  */
536e91bba0SGirish Moodalbail #define	IPADM_NORVAL		0x00000001
546e91bba0SGirish Moodalbail 
556e91bba0SGirish Moodalbail /* error codes */
566e91bba0SGirish Moodalbail typedef enum {
576e91bba0SGirish Moodalbail 	IPADM_SUCCESS,		/* No error occurred */
586e91bba0SGirish Moodalbail 	IPADM_FAILURE,		/* Generic failure */
596e91bba0SGirish Moodalbail 	IPADM_EAUTH,		/* Insufficient user authorizations */
606e91bba0SGirish Moodalbail 	IPADM_EPERM,		/* Permission denied */
616e91bba0SGirish Moodalbail 	IPADM_NO_BUFS,		/* No Buffer space available */
626e91bba0SGirish Moodalbail 	IPADM_NO_MEMORY,	/* Insufficient memory */
636e91bba0SGirish Moodalbail 	IPADM_BAD_ADDR,		/* Invalid address */
646e91bba0SGirish Moodalbail 	IPADM_BAD_PROTOCOL,	/* Wrong protocol family for operation */
656e91bba0SGirish Moodalbail 	IPADM_DAD_FOUND,	/* Duplicate address detected */
666e91bba0SGirish Moodalbail 	IPADM_EXISTS,		/* Already exists */
676e91bba0SGirish Moodalbail 	IPADM_IF_EXISTS,	/* Interface already exists */
686e91bba0SGirish Moodalbail 	IPADM_ADDROBJ_EXISTS,	/* Address object already exists */
696e91bba0SGirish Moodalbail 	IPADM_ADDRCONF_EXISTS,	/* Addrconf already in progress */
706e91bba0SGirish Moodalbail 	IPADM_ENXIO,		/* Interface does not exist */
716e91bba0SGirish Moodalbail 	IPADM_GRP_NOTEMPTY,	/* IPMP Group non-empty on unplumb */
726e91bba0SGirish Moodalbail 	IPADM_INVALID_ARG,	/* Invalid argument */
736e91bba0SGirish Moodalbail 	IPADM_INVALID_NAME,	/* Invalid name */
746e91bba0SGirish Moodalbail 	IPADM_DLPI_FAILURE,	/* Could not open DLPI link */
756e91bba0SGirish Moodalbail 	IPADM_DLADM_FAILURE,	/* DLADM error encountered */
766e91bba0SGirish Moodalbail 	IPADM_PROP_UNKNOWN,	/* Unknown property */
776e91bba0SGirish Moodalbail 	IPADM_ERANGE,		/* Value is outside the allowed range */
786e91bba0SGirish Moodalbail 	IPADM_ESRCH,		/* Value does not exist */
796e91bba0SGirish Moodalbail 	IPADM_EOVERFLOW,	/* Number of values exceed the allowed limit */
806e91bba0SGirish Moodalbail 	IPADM_NOTFOUND,		/* Object not found */
816e91bba0SGirish Moodalbail 	IPADM_IF_INUSE,		/* Interface already in use */
826e91bba0SGirish Moodalbail 	IPADM_ADDR_INUSE,	/* Address alrelady in use */
836e91bba0SGirish Moodalbail 	IPADM_BAD_HOSTNAME,	/* hostname maps to multiple IP addresses */
846e91bba0SGirish Moodalbail 	IPADM_ADDR_NOTAVAIL,	/* Can't assign requested address */
856e91bba0SGirish Moodalbail 	IPADM_ALL_ADDRS_NOT_ENABLED, /* All addresses could not be enabled */
866e91bba0SGirish Moodalbail 	IPADM_NDPD_NOT_RUNNING,	/* in.ndpd not running */
876e91bba0SGirish Moodalbail 	IPADM_DHCP_START_ERROR,	/* Cannot start dhcpagent */
886e91bba0SGirish Moodalbail 	IPADM_DHCP_IPC_ERROR,	/* Cannot communicate with dhcpagent */
896e91bba0SGirish Moodalbail 	IPADM_DHCP_IPC_TIMEOUT,	/* Communication with dhcpagent timed out */
906e91bba0SGirish Moodalbail 	IPADM_TEMPORARY_OBJ,	/* Permanent operation on temporary object */
916e91bba0SGirish Moodalbail 	IPADM_IPC_ERROR,	/* Cannot communicate with ipmgmtd */
926e91bba0SGirish Moodalbail 	IPADM_OP_DISABLE_OBJ,	/* Operation on disable object */
936e91bba0SGirish Moodalbail 	IPADM_NOTSUP,		/* Operation not supported */
94550b6e40SSowmini Varadhan 	IPADM_EBADE,		/* Invalid data exchange with ipmgmtd */
95550b6e40SSowmini Varadhan 	IPADM_GZ_PERM		/* Operation not permitted on from-gz intf */
966e91bba0SGirish Moodalbail } ipadm_status_t;
976e91bba0SGirish Moodalbail 
986e91bba0SGirish Moodalbail /*
996e91bba0SGirish Moodalbail  * option flags taken by the libipadm functions
1006e91bba0SGirish Moodalbail  *
1016e91bba0SGirish Moodalbail  *  - IPADM_OPT_PERSIST:
1026e91bba0SGirish Moodalbail  *	For all the create/delete/up/down/set/get functions,
1036e91bba0SGirish Moodalbail  * 	requests to persist the configuration so that it can be
1046e91bba0SGirish Moodalbail  *	re-enabled or reapplied on boot.
1056e91bba0SGirish Moodalbail  *
1066e91bba0SGirish Moodalbail  *  - IPADM_OPT_ACTIVE:
1076e91bba0SGirish Moodalbail  *	Requests to apply configuration without persisting it and
1086e91bba0SGirish Moodalbail  *	used by show-* subcommands to retrieve current values.
1096e91bba0SGirish Moodalbail  *
1106e91bba0SGirish Moodalbail  *  - IPADM_OPT_DEFAULT:
1116e91bba0SGirish Moodalbail  *	retrieves the default value for a given property
1126e91bba0SGirish Moodalbail  *
1136e91bba0SGirish Moodalbail  *  - IPADM_OPT_PERM
1146e91bba0SGirish Moodalbail  *	retrieves the permission for a given property
1156e91bba0SGirish Moodalbail  *
1166e91bba0SGirish Moodalbail  *  - IPADM_OPT_POSSIBLE
1176e91bba0SGirish Moodalbail  *	retrieves the range of values for a given property
1186e91bba0SGirish Moodalbail  *
1196e91bba0SGirish Moodalbail  *  - IPADM_OPT_APPEND
1206e91bba0SGirish Moodalbail  *	for multi-valued properties, appends a new value.
1216e91bba0SGirish Moodalbail  *
1226e91bba0SGirish Moodalbail  *  - IPADM_OPT_REMOVE
1236e91bba0SGirish Moodalbail  *	for multi-valued properties, removes the specified value
1246e91bba0SGirish Moodalbail  *
1256e91bba0SGirish Moodalbail  *  - IPADM_OPT_IPMP
1266e91bba0SGirish Moodalbail  *	Used in ipadm_create_if() to plumb ipmp interfaces.
1276e91bba0SGirish Moodalbail  *
1286e91bba0SGirish Moodalbail  *  - IPADM_OPT_GENPPA
1296e91bba0SGirish Moodalbail  *	Used in ipadm_create_if() to generate a ppa for the given interface.
1306e91bba0SGirish Moodalbail  *
1316e91bba0SGirish Moodalbail  *  - IPADM_OPT_ZEROADDR
1326e91bba0SGirish Moodalbail  *	return :: or INADDR_ANY
1336e91bba0SGirish Moodalbail  *
1346e91bba0SGirish Moodalbail  *  - IPADM_OPT_RELEASE
1356e91bba0SGirish Moodalbail  *	Used to release the lease on a dhcp address object
1366e91bba0SGirish Moodalbail  *
1376e91bba0SGirish Moodalbail  *  - IPADM_OPT_INFORM
1386e91bba0SGirish Moodalbail  *	Used to perform DHCP_INFORM on a specified static address object
1396e91bba0SGirish Moodalbail  *
1406e91bba0SGirish Moodalbail  *  - IPADM_OPT_UP
1416e91bba0SGirish Moodalbail  *	Used to bring up a static address on creation
142f6da83d4SAnurag S. Maskey  *
143f6da83d4SAnurag S. Maskey  *  - IPADM_OPT_V46
144f6da83d4SAnurag S. Maskey  *      Used to plumb both IPv4 and IPv6 interfaces by ipadm_create_addr()
1456e91bba0SGirish Moodalbail  */
1466e91bba0SGirish Moodalbail #define	IPADM_OPT_PERSIST	0x00000001
1476e91bba0SGirish Moodalbail #define	IPADM_OPT_ACTIVE	0x00000002
1486e91bba0SGirish Moodalbail #define	IPADM_OPT_DEFAULT	0x00000004
1496e91bba0SGirish Moodalbail #define	IPADM_OPT_PERM		0x00000008
1506e91bba0SGirish Moodalbail #define	IPADM_OPT_POSSIBLE	0x00000010
1516e91bba0SGirish Moodalbail #define	IPADM_OPT_APPEND	0x00000020
1526e91bba0SGirish Moodalbail #define	IPADM_OPT_REMOVE	0x00000040
1536e91bba0SGirish Moodalbail #define	IPADM_OPT_IPMP		0x00000080
1546e91bba0SGirish Moodalbail #define	IPADM_OPT_GENPPA	0x00000100
1556e91bba0SGirish Moodalbail #define	IPADM_OPT_ZEROADDR	0x00000200
1566e91bba0SGirish Moodalbail #define	IPADM_OPT_RELEASE	0x00000400
1576e91bba0SGirish Moodalbail #define	IPADM_OPT_INFORM	0x00000800
1586e91bba0SGirish Moodalbail #define	IPADM_OPT_UP		0x00001000
159f6da83d4SAnurag S. Maskey #define	IPADM_OPT_V46		0x00002000
1606e91bba0SGirish Moodalbail 
1616e91bba0SGirish Moodalbail /* IPADM property class */
1626e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_MODULE	0x00000001	/* on 'protocol' only */
1636e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_IF	0x00000002	/* on 'IP interface' only */
1646e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_ADDR	0x00000004	/* on 'IP address' only */
1656e91bba0SGirish Moodalbail /* protocol property that can be applied on interface too */
1666e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_MODIF	(IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF)
1676e91bba0SGirish Moodalbail 
1686e91bba0SGirish Moodalbail /* opaque ipadm handle to libipadm functions */
1696e91bba0SGirish Moodalbail struct ipadm_handle;
1706e91bba0SGirish Moodalbail typedef struct ipadm_handle	*ipadm_handle_t;
1716e91bba0SGirish Moodalbail 
1726e91bba0SGirish Moodalbail /* ipadm_handle flags */
1736e91bba0SGirish Moodalbail #define	IPH_VRRP		0x00000001	/* Caller is VRRP */
1746e91bba0SGirish Moodalbail #define	IPH_LEGACY		0x00000002	/* Caller is legacy app */
175550b6e40SSowmini Varadhan #define	IPH_IPMGMTD		0x00000004	/* Caller is ipmgmtd itself */
176*8887b57dSGirish Moodalbail /*
177*8887b57dSGirish Moodalbail  * Indicates that the operation being invoked is in 'init' context. This is
178*8887b57dSGirish Moodalbail  * a library private flag.
179*8887b57dSGirish Moodalbail  */
180*8887b57dSGirish Moodalbail #define	IPH_INIT		0x10000000
1816e91bba0SGirish Moodalbail 
1826e91bba0SGirish Moodalbail /* opaque address object structure */
1836e91bba0SGirish Moodalbail typedef struct ipadm_addrobj_s	*ipadm_addrobj_t;
1846e91bba0SGirish Moodalbail 
1856e91bba0SGirish Moodalbail /* ipadm_if_info_t states */
1866e91bba0SGirish Moodalbail typedef enum {
1876e91bba0SGirish Moodalbail 	IFIS_OK,		/* Interface is usable */
1886e91bba0SGirish Moodalbail 	IFIS_DOWN,		/* Interface has no UP addresses */
1896e91bba0SGirish Moodalbail 	IFIS_FAILED,		/* Interface has failed. */
1906e91bba0SGirish Moodalbail 	IFIS_OFFLINE,		/* Interface has been offlined */
1916e91bba0SGirish Moodalbail 	IFIS_DISABLED		/* Interface has been disabled. */
1926e91bba0SGirish Moodalbail } ipadm_if_state_t;
1936e91bba0SGirish Moodalbail 
1946e91bba0SGirish Moodalbail typedef struct ipadm_if_info_s {
1956e91bba0SGirish Moodalbail 	struct ipadm_if_info_s	*ifi_next;
1966e91bba0SGirish Moodalbail 	char			ifi_name[LIFNAMSIZ];	/* interface name */
1976e91bba0SGirish Moodalbail 	ipadm_if_state_t	ifi_state;		/* see above */
1986e91bba0SGirish Moodalbail 	uint_t			ifi_cflags;		/* current flags */
1996e91bba0SGirish Moodalbail 	uint_t			ifi_pflags;		/* persistent flags */
2006e91bba0SGirish Moodalbail } ipadm_if_info_t;
2016e91bba0SGirish Moodalbail 
2026e91bba0SGirish Moodalbail /* ipadm_if_info_t flags */
2036e91bba0SGirish Moodalbail #define	IFIF_BROADCAST		0x00000001
2046e91bba0SGirish Moodalbail #define	IFIF_MULTICAST		0x00000002
2056e91bba0SGirish Moodalbail #define	IFIF_POINTOPOINT	0x00000004
2066e91bba0SGirish Moodalbail #define	IFIF_VIRTUAL		0x00000008
2076e91bba0SGirish Moodalbail #define	IFIF_IPMP		0x00000010
2086e91bba0SGirish Moodalbail #define	IFIF_STANDBY		0x00000020
2096e91bba0SGirish Moodalbail #define	IFIF_INACTIVE		0x00000040
2106e91bba0SGirish Moodalbail #define	IFIF_VRRP		0x00000080
2116e91bba0SGirish Moodalbail #define	IFIF_NOACCEPT		0x00000100
2126e91bba0SGirish Moodalbail #define	IFIF_IPV4		0x00000200
2136e91bba0SGirish Moodalbail #define	IFIF_IPV6		0x00000400
214550b6e40SSowmini Varadhan #define	IFIF_L3PROTECT		0x00000800
2156e91bba0SGirish Moodalbail 
2166e91bba0SGirish Moodalbail /* ipadm_addr_info_t state */
2176e91bba0SGirish Moodalbail typedef enum {
2186e91bba0SGirish Moodalbail 	IFA_DISABLED,		/* Address not in active configuration. */
2196e91bba0SGirish Moodalbail 	IFA_DUPLICATE,		/* DAD failed. */
2206e91bba0SGirish Moodalbail 	IFA_DOWN,		/* Address is not IFF_UP */
2216e91bba0SGirish Moodalbail 	IFA_TENTATIVE,		/* DAD verification initiated */
2226e91bba0SGirish Moodalbail 	IFA_OK,			/* Address is usable */
2236e91bba0SGirish Moodalbail 	IFA_INACCESSIBLE	/* Interface has failed */
2246e91bba0SGirish Moodalbail } ipadm_addr_state_t;
2256e91bba0SGirish Moodalbail 
2266e91bba0SGirish Moodalbail /* possible address types */
2276e91bba0SGirish Moodalbail typedef enum  {
2286e91bba0SGirish Moodalbail 	IPADM_ADDR_NONE,
2296e91bba0SGirish Moodalbail 	IPADM_ADDR_STATIC,
2306e91bba0SGirish Moodalbail 	IPADM_ADDR_IPV6_ADDRCONF,
2316e91bba0SGirish Moodalbail 	IPADM_ADDR_DHCP
2326e91bba0SGirish Moodalbail } ipadm_addr_type_t;
2336e91bba0SGirish Moodalbail 
2346e91bba0SGirish Moodalbail typedef struct ipadm_addr_info_s {
2356e91bba0SGirish Moodalbail 	struct ifaddrs		ia_ifa;		/* list of addresses */
2366e91bba0SGirish Moodalbail 	char			ia_sname[NI_MAXHOST];	/* local hostname */
2376e91bba0SGirish Moodalbail 	char			ia_dname[NI_MAXHOST];	/* remote hostname */
2386e91bba0SGirish Moodalbail 	char			ia_aobjname[IPADM_AOBJSIZ];
2396e91bba0SGirish Moodalbail 	uint_t			ia_cflags;	/* active flags */
2406e91bba0SGirish Moodalbail 	uint_t			ia_pflags;	/* persistent flags */
2416e91bba0SGirish Moodalbail 	ipadm_addr_type_t	ia_atype;	/* see above */
2426e91bba0SGirish Moodalbail 	ipadm_addr_state_t	ia_state;	/* see above */
2436e91bba0SGirish Moodalbail } ipadm_addr_info_t;
2446e91bba0SGirish Moodalbail #define	IA_NEXT(ia)		((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next))
2456e91bba0SGirish Moodalbail 
2466e91bba0SGirish Moodalbail /* ipadm_addr_info_t flags */
2476e91bba0SGirish Moodalbail #define	IA_UP			0x00000001
2486e91bba0SGirish Moodalbail #define	IA_UNNUMBERED		0x00000002
2496e91bba0SGirish Moodalbail #define	IA_PRIVATE		0x00000004
2506e91bba0SGirish Moodalbail #define	IA_TEMPORARY		0x00000008
2516e91bba0SGirish Moodalbail #define	IA_DEPRECATED		0x00000010
2526e91bba0SGirish Moodalbail 
2536e91bba0SGirish Moodalbail /* open/close libipadm handle */
2546e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_open(ipadm_handle_t *, uint32_t);
2556e91bba0SGirish Moodalbail extern void		ipadm_close(ipadm_handle_t);
2566e91bba0SGirish Moodalbail 
2576e91bba0SGirish Moodalbail /* Check authorization for network configuration */
2586e91bba0SGirish Moodalbail extern boolean_t	ipadm_check_auth(void);
2596e91bba0SGirish Moodalbail /*
2606e91bba0SGirish Moodalbail  * Interface mangement functions
2616e91bba0SGirish Moodalbail  */
2626e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_create_if(ipadm_handle_t, char *, sa_family_t,
2636e91bba0SGirish Moodalbail 			    uint32_t);
2646e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_disable_if(ipadm_handle_t, const char *,
2656e91bba0SGirish Moodalbail 			    uint32_t);
2666e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_enable_if(ipadm_handle_t, const char *, uint32_t);
2676e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_if_info(ipadm_handle_t, const char *,
2686e91bba0SGirish Moodalbail 			    ipadm_if_info_t **, uint32_t, int64_t);
2696e91bba0SGirish Moodalbail extern void		ipadm_free_if_info(ipadm_if_info_t *);
2706e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_delete_if(ipadm_handle_t, const char *,
2716e91bba0SGirish Moodalbail 			    sa_family_t, uint32_t);
27236b41818SGirish Moodalbail extern void		ipadm_if_move(ipadm_handle_t, const char *);
2736e91bba0SGirish Moodalbail 
2746e91bba0SGirish Moodalbail /*
2756e91bba0SGirish Moodalbail  * Address management functions
2766e91bba0SGirish Moodalbail  */
2776e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t,
2786e91bba0SGirish Moodalbail 			    uint32_t);
2796e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_disable_addr(ipadm_handle_t, const char *,
2806e91bba0SGirish Moodalbail 			    uint32_t);
2816e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_enable_addr(ipadm_handle_t, const char *,
2826e91bba0SGirish Moodalbail 			    uint32_t);
2836e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_addr_info(ipadm_handle_t, const char *,
2846e91bba0SGirish Moodalbail 			    ipadm_addr_info_t **, uint32_t, int64_t);
2856e91bba0SGirish Moodalbail extern void		ipadm_free_addr_info(ipadm_addr_info_t *);
2866e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_up_addr(ipadm_handle_t, const char *,
2876e91bba0SGirish Moodalbail 			    uint32_t);
2886e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_down_addr(ipadm_handle_t, const char *,
2896e91bba0SGirish Moodalbail 			    uint32_t);
2906e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_refresh_addr(ipadm_handle_t, const char *,
2916e91bba0SGirish Moodalbail 			    uint32_t);
2926e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_delete_addr(ipadm_handle_t, const char *,
2936e91bba0SGirish Moodalbail 			    uint32_t);
2946e91bba0SGirish Moodalbail 
2956e91bba0SGirish Moodalbail /* Functions related to creating/deleting/modifying opaque address object */
2966e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_create_addrobj(ipadm_addr_type_t, const char *,
2976e91bba0SGirish Moodalbail 			    ipadm_addrobj_t *);
2986e91bba0SGirish Moodalbail extern void		ipadm_destroy_addrobj(ipadm_addrobj_t);
299f6da83d4SAnurag S. Maskey extern ipadm_status_t   ipadm_get_aobjname(const ipadm_addrobj_t, char *,
300f6da83d4SAnurag S. Maskey 			    size_t);
3016e91bba0SGirish Moodalbail 
3026e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for static addresses */
3036e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_addr(ipadm_addrobj_t, const char *,
3046e91bba0SGirish Moodalbail 			    sa_family_t);
3056e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_dst_addr(ipadm_addrobj_t, const char *,
3066e91bba0SGirish Moodalbail 			    sa_family_t);
307f6da83d4SAnurag S. Maskey extern ipadm_status_t   ipadm_get_addr(const ipadm_addrobj_t,
308f6da83d4SAnurag S. Maskey 			    struct sockaddr_storage *);
3096e91bba0SGirish Moodalbail 
3106e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for IPv6 addrconf */
3116e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_interface_id(ipadm_addrobj_t, const char *);
3126e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_stateless(ipadm_addrobj_t, boolean_t);
3136e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_stateful(ipadm_addrobj_t, boolean_t);
3146e91bba0SGirish Moodalbail 
3156e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for DHCP */
3166e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_primary(ipadm_addrobj_t, boolean_t);
3176e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_wait_time(ipadm_addrobj_t, int32_t);
3186e91bba0SGirish Moodalbail 
3196e91bba0SGirish Moodalbail /*
3206e91bba0SGirish Moodalbail  * Property management functions
3216e91bba0SGirish Moodalbail  */
3226e91bba0SGirish Moodalbail /* call back function for the property walker */
3236e91bba0SGirish Moodalbail typedef boolean_t	ipadm_prop_wfunc_t(void *, const char *, uint_t);
3246e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *,
3256e91bba0SGirish Moodalbail 			    void *);
3266e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_walk_prop(const char *, uint_t, uint_t,
3276e91bba0SGirish Moodalbail 			    ipadm_prop_wfunc_t *, void *);
3286e91bba0SGirish Moodalbail 
3296e91bba0SGirish Moodalbail /* Interface property management - set, reset and get */
3306e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_ifprop(ipadm_handle_t, const char *,
3316e91bba0SGirish Moodalbail 			    const char *, const char *, uint_t, uint_t);
3326e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_get_ifprop(ipadm_handle_t, const char *,
3336e91bba0SGirish Moodalbail 			    const char *, char *, uint_t *, uint_t, uint_t);
3346e91bba0SGirish Moodalbail 
3356e91bba0SGirish Moodalbail /* Address property management - set, reset and get */
3366e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_addrprop(ipadm_handle_t, const char *,
3376e91bba0SGirish Moodalbail 			    const char *, const char *, uint_t);
3386e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_get_addrprop(ipadm_handle_t, const char *, char *,
3396e91bba0SGirish Moodalbail 			    uint_t *, const char *, uint_t);
3406e91bba0SGirish Moodalbail 
3416e91bba0SGirish Moodalbail /* Protoocl property management - set, reset and get */
3426e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_prop(ipadm_handle_t, const char *,
3436e91bba0SGirish Moodalbail 			    const char *, uint_t, uint_t);
3446e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_get_prop(ipadm_handle_t, const char *, char *,
3456e91bba0SGirish Moodalbail 			    uint_t *, uint_t, uint_t);
3466e91bba0SGirish Moodalbail 
3476e91bba0SGirish Moodalbail /*
3486e91bba0SGirish Moodalbail  * miscellaneous helper functions.
3496e91bba0SGirish Moodalbail  */
3506e91bba0SGirish Moodalbail extern const char 	*ipadm_status2str(ipadm_status_t);
3516e91bba0SGirish Moodalbail extern int		ipadm_str2nvlist(const char *, nvlist_t **, uint_t);
3526e91bba0SGirish Moodalbail extern size_t		ipadm_nvlist2str(nvlist_t *, char *, size_t);
3536e91bba0SGirish Moodalbail extern char		*ipadm_proto2str(uint_t);
3546e91bba0SGirish Moodalbail extern uint_t		ipadm_str2proto(const char *);
3556e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_open_arp_on_udp(const char *, int *);
356*8887b57dSGirish Moodalbail extern int		ipadm_legacy2new_propname(const char *, char *,
357*8887b57dSGirish Moodalbail 			    uint_t, uint_t *);
358*8887b57dSGirish Moodalbail extern int		ipadm_new2legacy_propname(const char *, char *,
359*8887b57dSGirish Moodalbail 			    uint_t, uint_t);
3606e91bba0SGirish Moodalbail 
3616e91bba0SGirish Moodalbail #ifdef	__cplusplus
3626e91bba0SGirish Moodalbail }
3636e91bba0SGirish Moodalbail #endif
3646e91bba0SGirish Moodalbail 
3656e91bba0SGirish Moodalbail #endif	/* _LIBIPADM_H */
366