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.
23b31320a7SChris Fraire  * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
24*a73be61aSHans Rosenfeld  * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
256e91bba0SGirish Moodalbail  */
266e91bba0SGirish Moodalbail #ifndef _LIBIPADM_H
276e91bba0SGirish Moodalbail #define	_LIBIPADM_H
286e91bba0SGirish Moodalbail 
296e91bba0SGirish Moodalbail #ifdef	__cplusplus
306e91bba0SGirish Moodalbail extern "C" {
316e91bba0SGirish Moodalbail #endif
326e91bba0SGirish Moodalbail 
336e91bba0SGirish Moodalbail #include <sys/types.h>
34b31320a7SChris Fraire #include <sys/param.h>
356e91bba0SGirish Moodalbail #include <sys/socket.h>
366e91bba0SGirish Moodalbail #include <net/if.h>
376e91bba0SGirish Moodalbail #include <netdb.h>
386e91bba0SGirish Moodalbail #include <ifaddrs.h>
396e91bba0SGirish Moodalbail #include <libnvpair.h>
406e91bba0SGirish Moodalbail #include <netinet/tcp.h>
416e91bba0SGirish Moodalbail #include <sys/stropts.h>
42*a73be61aSHans Rosenfeld #include <sys/list.h>
43*a73be61aSHans Rosenfeld #include <stddef.h>
446e91bba0SGirish Moodalbail 
456e91bba0SGirish Moodalbail #define	IPADM_AOBJ_USTRSIZ	32
466e91bba0SGirish Moodalbail #define	IPADM_AOBJSIZ		(LIFNAMSIZ + IPADM_AOBJ_USTRSIZ)
476e91bba0SGirish Moodalbail #define	MAXPROPVALLEN		512
486e91bba0SGirish Moodalbail #define	LOOPBACK_IF		"lo0"
496e91bba0SGirish Moodalbail 
506e91bba0SGirish Moodalbail /* special timeout values for dhcp operations */
516e91bba0SGirish Moodalbail #define	IPADM_DHCP_WAIT_DEFAULT	(-1)
526e91bba0SGirish Moodalbail #define	IPADM_DHCP_WAIT_FOREVER	(-2)
536e91bba0SGirish Moodalbail 
546e91bba0SGirish Moodalbail /*
556e91bba0SGirish Moodalbail  * Specifies that the string passed to ipadm_str2nvlist() is a string of comma
566e91bba0SGirish Moodalbail  * separated names and that each name does not have values associated with it.
576e91bba0SGirish Moodalbail  */
586e91bba0SGirish Moodalbail #define	IPADM_NORVAL		0x00000001
596e91bba0SGirish Moodalbail 
606e91bba0SGirish Moodalbail /* error codes */
616e91bba0SGirish Moodalbail typedef enum {
626e91bba0SGirish Moodalbail 	IPADM_SUCCESS,		/* No error occurred */
636e91bba0SGirish Moodalbail 	IPADM_FAILURE,		/* Generic failure */
646e91bba0SGirish Moodalbail 	IPADM_EAUTH,		/* Insufficient user authorizations */
656e91bba0SGirish Moodalbail 	IPADM_EPERM,		/* Permission denied */
666e91bba0SGirish Moodalbail 	IPADM_NO_BUFS,		/* No Buffer space available */
676e91bba0SGirish Moodalbail 	IPADM_NO_MEMORY,	/* Insufficient memory */
686e91bba0SGirish Moodalbail 	IPADM_BAD_ADDR,		/* Invalid address */
696e91bba0SGirish Moodalbail 	IPADM_BAD_PROTOCOL,	/* Wrong protocol family for operation */
706e91bba0SGirish Moodalbail 	IPADM_DAD_FOUND,	/* Duplicate address detected */
716e91bba0SGirish Moodalbail 	IPADM_EXISTS,		/* Already exists */
726e91bba0SGirish Moodalbail 	IPADM_IF_EXISTS,	/* Interface already exists */
736e91bba0SGirish Moodalbail 	IPADM_ADDROBJ_EXISTS,	/* Address object already exists */
746e91bba0SGirish Moodalbail 	IPADM_ADDRCONF_EXISTS,	/* Addrconf already in progress */
756e91bba0SGirish Moodalbail 	IPADM_ENXIO,		/* Interface does not exist */
766e91bba0SGirish Moodalbail 	IPADM_GRP_NOTEMPTY,	/* IPMP Group non-empty on unplumb */
776e91bba0SGirish Moodalbail 	IPADM_INVALID_ARG,	/* Invalid argument */
786e91bba0SGirish Moodalbail 	IPADM_INVALID_NAME,	/* Invalid name */
796e91bba0SGirish Moodalbail 	IPADM_DLPI_FAILURE,	/* Could not open DLPI link */
806e91bba0SGirish Moodalbail 	IPADM_DLADM_FAILURE,	/* DLADM error encountered */
816e91bba0SGirish Moodalbail 	IPADM_PROP_UNKNOWN,	/* Unknown property */
826e91bba0SGirish Moodalbail 	IPADM_ERANGE,		/* Value is outside the allowed range */
836e91bba0SGirish Moodalbail 	IPADM_ESRCH,		/* Value does not exist */
846e91bba0SGirish Moodalbail 	IPADM_EOVERFLOW,	/* Number of values exceed the allowed limit */
856e91bba0SGirish Moodalbail 	IPADM_NOTFOUND,		/* Object not found */
866e91bba0SGirish Moodalbail 	IPADM_IF_INUSE,		/* Interface already in use */
876e91bba0SGirish Moodalbail 	IPADM_ADDR_INUSE,	/* Address alrelady in use */
886e91bba0SGirish Moodalbail 	IPADM_BAD_HOSTNAME,	/* hostname maps to multiple IP addresses */
896e91bba0SGirish Moodalbail 	IPADM_ADDR_NOTAVAIL,	/* Can't assign requested address */
906e91bba0SGirish Moodalbail 	IPADM_ALL_ADDRS_NOT_ENABLED, /* All addresses could not be enabled */
916e91bba0SGirish Moodalbail 	IPADM_NDPD_NOT_RUNNING,	/* in.ndpd not running */
926e91bba0SGirish Moodalbail 	IPADM_DHCP_START_ERROR,	/* Cannot start dhcpagent */
936e91bba0SGirish Moodalbail 	IPADM_DHCP_IPC_ERROR,	/* Cannot communicate with dhcpagent */
946e91bba0SGirish Moodalbail 	IPADM_DHCP_IPC_TIMEOUT,	/* Communication with dhcpagent timed out */
956e91bba0SGirish Moodalbail 	IPADM_TEMPORARY_OBJ,	/* Permanent operation on temporary object */
966e91bba0SGirish Moodalbail 	IPADM_IPC_ERROR,	/* Cannot communicate with ipmgmtd */
976e91bba0SGirish Moodalbail 	IPADM_OP_DISABLE_OBJ,	/* Operation on disable object */
986e91bba0SGirish Moodalbail 	IPADM_NOTSUP,		/* Operation not supported */
99550b6e40SSowmini Varadhan 	IPADM_EBADE,		/* Invalid data exchange with ipmgmtd */
100550b6e40SSowmini Varadhan 	IPADM_GZ_PERM		/* Operation not permitted on from-gz intf */
1016e91bba0SGirish Moodalbail } ipadm_status_t;
1026e91bba0SGirish Moodalbail 
1036e91bba0SGirish Moodalbail /*
1046e91bba0SGirish Moodalbail  * option flags taken by the libipadm functions
1056e91bba0SGirish Moodalbail  *
1066e91bba0SGirish Moodalbail  *  - IPADM_OPT_PERSIST:
1076e91bba0SGirish Moodalbail  *	For all the create/delete/up/down/set/get functions,
108b31320a7SChris Fraire  *	requests to persist the configuration so that it can be
109b31320a7SChris Fraire  *	re-enabled or re-applied on boot.
1106e91bba0SGirish Moodalbail  *
1116e91bba0SGirish Moodalbail  *  - IPADM_OPT_ACTIVE:
1126e91bba0SGirish Moodalbail  *	Requests to apply configuration without persisting it and
1136e91bba0SGirish Moodalbail  *	used by show-* subcommands to retrieve current values.
1146e91bba0SGirish Moodalbail  *
1156e91bba0SGirish Moodalbail  *  - IPADM_OPT_DEFAULT:
1166e91bba0SGirish Moodalbail  *	retrieves the default value for a given property
1176e91bba0SGirish Moodalbail  *
1186e91bba0SGirish Moodalbail  *  - IPADM_OPT_PERM
1196e91bba0SGirish Moodalbail  *	retrieves the permission for a given property
1206e91bba0SGirish Moodalbail  *
1216e91bba0SGirish Moodalbail  *  - IPADM_OPT_POSSIBLE
1226e91bba0SGirish Moodalbail  *	retrieves the range of values for a given property
1236e91bba0SGirish Moodalbail  *
1246e91bba0SGirish Moodalbail  *  - IPADM_OPT_APPEND
1256e91bba0SGirish Moodalbail  *	for multi-valued properties, appends a new value.
1266e91bba0SGirish Moodalbail  *
1276e91bba0SGirish Moodalbail  *  - IPADM_OPT_REMOVE
1286e91bba0SGirish Moodalbail  *	for multi-valued properties, removes the specified value
1296e91bba0SGirish Moodalbail  *
1306e91bba0SGirish Moodalbail  *  - IPADM_OPT_IPMP
1316e91bba0SGirish Moodalbail  *	Used in ipadm_create_if() to plumb ipmp interfaces.
1326e91bba0SGirish Moodalbail  *
1336e91bba0SGirish Moodalbail  *  - IPADM_OPT_GENPPA
1346e91bba0SGirish Moodalbail  *	Used in ipadm_create_if() to generate a ppa for the given interface.
1356e91bba0SGirish Moodalbail  *
1366e91bba0SGirish Moodalbail  *  - IPADM_OPT_ZEROADDR
1376e91bba0SGirish Moodalbail  *	return :: or INADDR_ANY
1386e91bba0SGirish Moodalbail  *
1396e91bba0SGirish Moodalbail  *  - IPADM_OPT_RELEASE
1406e91bba0SGirish Moodalbail  *	Used to release the lease on a dhcp address object
1416e91bba0SGirish Moodalbail  *
1426e91bba0SGirish Moodalbail  *  - IPADM_OPT_INFORM
1436e91bba0SGirish Moodalbail  *	Used to perform DHCP_INFORM on a specified static address object
1446e91bba0SGirish Moodalbail  *
1456e91bba0SGirish Moodalbail  *  - IPADM_OPT_UP
1466e91bba0SGirish Moodalbail  *	Used to bring up a static address on creation
147f6da83d4SAnurag S. Maskey  *
148f6da83d4SAnurag S. Maskey  *  - IPADM_OPT_V46
149b31320a7SChris Fraire  *	Used to plumb both IPv4 and IPv6 interfaces by ipadm_create_addr()
150b31320a7SChris Fraire  *
151b31320a7SChris Fraire  *  - IPADM_OPT_SET_PROPS
152b31320a7SChris Fraire  *	Used to indicate the update changes the running configuration of
153b31320a7SChris Fraire  *	"props" data on the object. The props are cached there on the parent,
154b31320a7SChris Fraire  *	but the PROPS_ONLY change does not affect the ACTIVE/PERSIST state of
155b31320a7SChris Fraire  *	the parent.
156b31320a7SChris Fraire  *
157b31320a7SChris Fraire  *  - IPADM_OPT_PERSIST_PROPS
158b31320a7SChris Fraire  *	Used when IPADM_OPT_SET_PROPS is active to indicate the update changes
159b31320a7SChris Fraire  *  the persistent configuration of the "props" data on the object.
1606e91bba0SGirish Moodalbail  */
1616e91bba0SGirish Moodalbail #define	IPADM_OPT_PERSIST	0x00000001
1626e91bba0SGirish Moodalbail #define	IPADM_OPT_ACTIVE	0x00000002
1636e91bba0SGirish Moodalbail #define	IPADM_OPT_DEFAULT	0x00000004
1646e91bba0SGirish Moodalbail #define	IPADM_OPT_PERM		0x00000008
1656e91bba0SGirish Moodalbail #define	IPADM_OPT_POSSIBLE	0x00000010
1666e91bba0SGirish Moodalbail #define	IPADM_OPT_APPEND	0x00000020
1676e91bba0SGirish Moodalbail #define	IPADM_OPT_REMOVE	0x00000040
1686e91bba0SGirish Moodalbail #define	IPADM_OPT_IPMP		0x00000080
1696e91bba0SGirish Moodalbail #define	IPADM_OPT_GENPPA	0x00000100
1706e91bba0SGirish Moodalbail #define	IPADM_OPT_ZEROADDR	0x00000200
1716e91bba0SGirish Moodalbail #define	IPADM_OPT_RELEASE	0x00000400
1726e91bba0SGirish Moodalbail #define	IPADM_OPT_INFORM	0x00000800
1736e91bba0SGirish Moodalbail #define	IPADM_OPT_UP		0x00001000
174f6da83d4SAnurag S. Maskey #define	IPADM_OPT_V46		0x00002000
175b31320a7SChris Fraire #define	IPADM_OPT_SET_PROPS	0x00004000
176b31320a7SChris Fraire #define	IPADM_OPT_PERSIST_PROPS		0x00008000
1776e91bba0SGirish Moodalbail 
1786e91bba0SGirish Moodalbail /* IPADM property class */
1796e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_MODULE	0x00000001	/* on 'protocol' only */
1806e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_IF	0x00000002	/* on 'IP interface' only */
1816e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_ADDR	0x00000004	/* on 'IP address' only */
1826e91bba0SGirish Moodalbail /* protocol property that can be applied on interface too */
1836e91bba0SGirish Moodalbail #define	IPADMPROP_CLASS_MODIF	(IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF)
1846e91bba0SGirish Moodalbail 
1856e91bba0SGirish Moodalbail /* opaque ipadm handle to libipadm functions */
1866e91bba0SGirish Moodalbail struct ipadm_handle;
1876e91bba0SGirish Moodalbail typedef struct ipadm_handle	*ipadm_handle_t;
1886e91bba0SGirish Moodalbail 
1896e91bba0SGirish Moodalbail /* ipadm_handle flags */
1906e91bba0SGirish Moodalbail #define	IPH_VRRP		0x00000001	/* Caller is VRRP */
1916e91bba0SGirish Moodalbail #define	IPH_LEGACY		0x00000002	/* Caller is legacy app */
192550b6e40SSowmini Varadhan #define	IPH_IPMGMTD		0x00000004	/* Caller is ipmgmtd itself */
1938887b57dSGirish Moodalbail /*
1948887b57dSGirish Moodalbail  * Indicates that the operation being invoked is in 'init' context. This is
1958887b57dSGirish Moodalbail  * a library private flag.
1968887b57dSGirish Moodalbail  */
1978887b57dSGirish Moodalbail #define	IPH_INIT		0x10000000
1986e91bba0SGirish Moodalbail 
1996e91bba0SGirish Moodalbail /* opaque address object structure */
2006e91bba0SGirish Moodalbail typedef struct ipadm_addrobj_s	*ipadm_addrobj_t;
2016e91bba0SGirish Moodalbail 
2026e91bba0SGirish Moodalbail /* ipadm_if_info_t states */
2036e91bba0SGirish Moodalbail typedef enum {
2046e91bba0SGirish Moodalbail 	IFIS_OK,		/* Interface is usable */
2056e91bba0SGirish Moodalbail 	IFIS_DOWN,		/* Interface has no UP addresses */
2066e91bba0SGirish Moodalbail 	IFIS_FAILED,		/* Interface has failed. */
2076e91bba0SGirish Moodalbail 	IFIS_OFFLINE,		/* Interface has been offlined */
2086e91bba0SGirish Moodalbail 	IFIS_DISABLED		/* Interface has been disabled. */
2096e91bba0SGirish Moodalbail } ipadm_if_state_t;
2106e91bba0SGirish Moodalbail 
211*a73be61aSHans Rosenfeld typedef list_t ipadm_ipmp_members_t;
212*a73be61aSHans Rosenfeld 
213*a73be61aSHans Rosenfeld typedef struct {
214*a73be61aSHans Rosenfeld     list_node_t node;
215*a73be61aSHans Rosenfeld     char if_name[LIFNAMSIZ];
216*a73be61aSHans Rosenfeld } ipadm_ipmp_member_t;
217*a73be61aSHans Rosenfeld 
218*a73be61aSHans Rosenfeld typedef enum {
219*a73be61aSHans Rosenfeld     IPADM_IF_CLASS_REGULAR,
220*a73be61aSHans Rosenfeld     IPADM_IF_CLASS_IPMP,
221*a73be61aSHans Rosenfeld     IPADM_IF_CLASS_VIRTUAL,
222*a73be61aSHans Rosenfeld     IPADM_IF_CLASS_UNKNOWN
223*a73be61aSHans Rosenfeld } ipadm_if_class_t;
224*a73be61aSHans Rosenfeld 
2256e91bba0SGirish Moodalbail typedef struct ipadm_if_info_s {
226*a73be61aSHans Rosenfeld 	struct ipadm_if_info_s	*ifi_next;
2276e91bba0SGirish Moodalbail 	char			ifi_name[LIFNAMSIZ];	/* interface name */
228*a73be61aSHans Rosenfeld 	ipadm_if_class_t	ifi_class;		/* interface class */
2296e91bba0SGirish Moodalbail 	ipadm_if_state_t	ifi_state;		/* see above */
2306e91bba0SGirish Moodalbail 	uint_t			ifi_cflags;		/* current flags */
2316e91bba0SGirish Moodalbail 	uint_t			ifi_pflags;		/* persistent flags */
232*a73be61aSHans Rosenfeld 	ipadm_ipmp_members_t    ifi_ipmp_cmembers; /* current IPMP members */
233*a73be61aSHans Rosenfeld 	ipadm_ipmp_members_t    ifi_ipmp_pmembers; /* persistent IPMP members */
2346e91bba0SGirish Moodalbail } ipadm_if_info_t;
2356e91bba0SGirish Moodalbail 
2366e91bba0SGirish Moodalbail /* ipadm_if_info_t flags */
2376e91bba0SGirish Moodalbail #define	IFIF_BROADCAST		0x00000001
2386e91bba0SGirish Moodalbail #define	IFIF_MULTICAST		0x00000002
2396e91bba0SGirish Moodalbail #define	IFIF_POINTOPOINT	0x00000004
2406e91bba0SGirish Moodalbail #define	IFIF_VIRTUAL		0x00000008
2416e91bba0SGirish Moodalbail #define	IFIF_IPMP		0x00000010
2426e91bba0SGirish Moodalbail #define	IFIF_STANDBY		0x00000020
2436e91bba0SGirish Moodalbail #define	IFIF_INACTIVE		0x00000040
2446e91bba0SGirish Moodalbail #define	IFIF_VRRP		0x00000080
2456e91bba0SGirish Moodalbail #define	IFIF_NOACCEPT		0x00000100
2466e91bba0SGirish Moodalbail #define	IFIF_IPV4		0x00000200
2476e91bba0SGirish Moodalbail #define	IFIF_IPV6		0x00000400
248550b6e40SSowmini Varadhan #define	IFIF_L3PROTECT		0x00000800
2496e91bba0SGirish Moodalbail 
2506e91bba0SGirish Moodalbail /* ipadm_addr_info_t state */
2516e91bba0SGirish Moodalbail typedef enum {
2526e91bba0SGirish Moodalbail 	IFA_DISABLED,		/* Address not in active configuration. */
2536e91bba0SGirish Moodalbail 	IFA_DUPLICATE,		/* DAD failed. */
2546e91bba0SGirish Moodalbail 	IFA_DOWN,		/* Address is not IFF_UP */
2556e91bba0SGirish Moodalbail 	IFA_TENTATIVE,		/* DAD verification initiated */
2566e91bba0SGirish Moodalbail 	IFA_OK,			/* Address is usable */
2576e91bba0SGirish Moodalbail 	IFA_INACCESSIBLE	/* Interface has failed */
2586e91bba0SGirish Moodalbail } ipadm_addr_state_t;
2596e91bba0SGirish Moodalbail 
2606e91bba0SGirish Moodalbail /* possible address types */
2616e91bba0SGirish Moodalbail typedef enum  {
2626e91bba0SGirish Moodalbail 	IPADM_ADDR_NONE,
2636e91bba0SGirish Moodalbail 	IPADM_ADDR_STATIC,
2646e91bba0SGirish Moodalbail 	IPADM_ADDR_IPV6_ADDRCONF,
2656e91bba0SGirish Moodalbail 	IPADM_ADDR_DHCP
2666e91bba0SGirish Moodalbail } ipadm_addr_type_t;
2676e91bba0SGirish Moodalbail 
2686e91bba0SGirish Moodalbail typedef struct ipadm_addr_info_s {
2696e91bba0SGirish Moodalbail 	struct ifaddrs		ia_ifa;		/* list of addresses */
2706e91bba0SGirish Moodalbail 	char			ia_sname[NI_MAXHOST];	/* local hostname */
2716e91bba0SGirish Moodalbail 	char			ia_dname[NI_MAXHOST];	/* remote hostname */
2726e91bba0SGirish Moodalbail 	char			ia_aobjname[IPADM_AOBJSIZ];
2736e91bba0SGirish Moodalbail 	uint_t			ia_cflags;	/* active flags */
2746e91bba0SGirish Moodalbail 	uint_t			ia_pflags;	/* persistent flags */
2756e91bba0SGirish Moodalbail 	ipadm_addr_type_t	ia_atype;	/* see above */
2766e91bba0SGirish Moodalbail 	ipadm_addr_state_t	ia_state;	/* see above */
2776e91bba0SGirish Moodalbail } ipadm_addr_info_t;
2786e91bba0SGirish Moodalbail #define	IA_NEXT(ia)		((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next))
2796e91bba0SGirish Moodalbail 
2806e91bba0SGirish Moodalbail /* ipadm_addr_info_t flags */
2816e91bba0SGirish Moodalbail #define	IA_UP			0x00000001
2826e91bba0SGirish Moodalbail #define	IA_UNNUMBERED		0x00000002
2836e91bba0SGirish Moodalbail #define	IA_PRIVATE		0x00000004
2846e91bba0SGirish Moodalbail #define	IA_TEMPORARY		0x00000008
2856e91bba0SGirish Moodalbail #define	IA_DEPRECATED		0x00000010
2866e91bba0SGirish Moodalbail 
2876e91bba0SGirish Moodalbail /* open/close libipadm handle */
2886e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_open(ipadm_handle_t *, uint32_t);
2896e91bba0SGirish Moodalbail extern void		ipadm_close(ipadm_handle_t);
2906e91bba0SGirish Moodalbail 
2916e91bba0SGirish Moodalbail /* Check authorization for network configuration */
2926e91bba0SGirish Moodalbail extern boolean_t	ipadm_check_auth(void);
2936e91bba0SGirish Moodalbail /*
294b31320a7SChris Fraire  * Interface management functions
2956e91bba0SGirish Moodalbail  */
2966e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_create_if(ipadm_handle_t, char *, sa_family_t,
2976e91bba0SGirish Moodalbail 			    uint32_t);
2986e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_disable_if(ipadm_handle_t, const char *,
2996e91bba0SGirish Moodalbail 			    uint32_t);
3006e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_enable_if(ipadm_handle_t, const char *, uint32_t);
3016e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_if_info(ipadm_handle_t, const char *,
302*a73be61aSHans Rosenfeld 			    ipadm_if_info_t **, uint32_t, int64_t);
303*a73be61aSHans Rosenfeld extern void		ipadm_free_if_info(ipadm_if_info_t *);
3046e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_delete_if(ipadm_handle_t, const char *,
3056e91bba0SGirish Moodalbail 			    sa_family_t, uint32_t);
30636b41818SGirish Moodalbail extern void		ipadm_if_move(ipadm_handle_t, const char *);
307*a73be61aSHans Rosenfeld extern ipadm_status_t ipadm_add_ipmp_member(ipadm_handle_t, const char *,
308*a73be61aSHans Rosenfeld 	    const char *, uint32_t);
309*a73be61aSHans Rosenfeld extern ipadm_status_t ipadm_remove_ipmp_member(ipadm_handle_t, const char *,
310*a73be61aSHans Rosenfeld 	    const char *, uint32_t);
3116e91bba0SGirish Moodalbail 
3126e91bba0SGirish Moodalbail /*
3136e91bba0SGirish Moodalbail  * Address management functions
3146e91bba0SGirish Moodalbail  */
3156e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t,
3166e91bba0SGirish Moodalbail 			    uint32_t);
3176e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_disable_addr(ipadm_handle_t, const char *,
3186e91bba0SGirish Moodalbail 			    uint32_t);
3196e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_enable_addr(ipadm_handle_t, const char *,
3206e91bba0SGirish Moodalbail 			    uint32_t);
3216e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_addr_info(ipadm_handle_t, const char *,
3226e91bba0SGirish Moodalbail 			    ipadm_addr_info_t **, uint32_t, int64_t);
3236e91bba0SGirish Moodalbail extern void		ipadm_free_addr_info(ipadm_addr_info_t *);
3246e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_up_addr(ipadm_handle_t, const char *,
3256e91bba0SGirish Moodalbail 			    uint32_t);
3266e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_down_addr(ipadm_handle_t, const char *,
3276e91bba0SGirish Moodalbail 			    uint32_t);
3286e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_refresh_addr(ipadm_handle_t, const char *,
3296e91bba0SGirish Moodalbail 			    uint32_t);
3306e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_delete_addr(ipadm_handle_t, const char *,
3316e91bba0SGirish Moodalbail 			    uint32_t);
3326e91bba0SGirish Moodalbail 
3336e91bba0SGirish Moodalbail /* Functions related to creating/deleting/modifying opaque address object */
3346e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_create_addrobj(ipadm_addr_type_t, const char *,
3356e91bba0SGirish Moodalbail 			    ipadm_addrobj_t *);
3366e91bba0SGirish Moodalbail extern void		ipadm_destroy_addrobj(ipadm_addrobj_t);
337f6da83d4SAnurag S. Maskey extern ipadm_status_t   ipadm_get_aobjname(const ipadm_addrobj_t, char *,
338f6da83d4SAnurag S. Maskey 			    size_t);
3396e91bba0SGirish Moodalbail 
3406e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for static addresses */
3416e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_addr(ipadm_addrobj_t, const char *,
3426e91bba0SGirish Moodalbail 			    sa_family_t);
3436e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_dst_addr(ipadm_addrobj_t, const char *,
3446e91bba0SGirish Moodalbail 			    sa_family_t);
345f6da83d4SAnurag S. Maskey extern ipadm_status_t   ipadm_get_addr(const ipadm_addrobj_t,
346f6da83d4SAnurag S. Maskey 			    struct sockaddr_storage *);
3476e91bba0SGirish Moodalbail 
3486e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for IPv6 addrconf */
3496e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_interface_id(ipadm_addrobj_t, const char *);
3506e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_stateless(ipadm_addrobj_t, boolean_t);
3516e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_stateful(ipadm_addrobj_t, boolean_t);
3526e91bba0SGirish Moodalbail 
3536e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for DHCP */
3546e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_primary(ipadm_addrobj_t, boolean_t);
3556e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_wait_time(ipadm_addrobj_t, int32_t);
356b31320a7SChris Fraire extern ipadm_status_t	ipadm_set_reqhost(ipadm_addrobj_t, const char *);
3576e91bba0SGirish Moodalbail 
3586e91bba0SGirish Moodalbail /*
3596e91bba0SGirish Moodalbail  * Property management functions
3606e91bba0SGirish Moodalbail  */
3616e91bba0SGirish Moodalbail /* call back function for the property walker */
3626e91bba0SGirish Moodalbail typedef boolean_t	ipadm_prop_wfunc_t(void *, const char *, uint_t);
3636e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *,
3646e91bba0SGirish Moodalbail 			    void *);
3656e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_walk_prop(const char *, uint_t, uint_t,
3666e91bba0SGirish Moodalbail 			    ipadm_prop_wfunc_t *, void *);
3676e91bba0SGirish Moodalbail 
3686e91bba0SGirish Moodalbail /* Interface property management - set, reset and get */
3696e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_ifprop(ipadm_handle_t, const char *,
3706e91bba0SGirish Moodalbail 			    const char *, const char *, uint_t, uint_t);
3716e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_get_ifprop(ipadm_handle_t, const char *,
3726e91bba0SGirish Moodalbail 			    const char *, char *, uint_t *, uint_t, uint_t);
3736e91bba0SGirish Moodalbail 
3746e91bba0SGirish Moodalbail /* Address property management - set, reset and get */
3756e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_addrprop(ipadm_handle_t, const char *,
3766e91bba0SGirish Moodalbail 			    const char *, const char *, uint_t);
3776e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_get_addrprop(ipadm_handle_t, const char *, char *,
3786e91bba0SGirish Moodalbail 			    uint_t *, const char *, uint_t);
3796e91bba0SGirish Moodalbail 
3806e91bba0SGirish Moodalbail /* Protoocl property management - set, reset and get */
3816e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_set_prop(ipadm_handle_t, const char *,
3826e91bba0SGirish Moodalbail 			    const char *, uint_t, uint_t);
3836e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_get_prop(ipadm_handle_t, const char *, char *,
3846e91bba0SGirish Moodalbail 			    uint_t *, uint_t, uint_t);
3856e91bba0SGirish Moodalbail 
3866e91bba0SGirish Moodalbail /*
3876e91bba0SGirish Moodalbail  * miscellaneous helper functions.
3886e91bba0SGirish Moodalbail  */
389ed1e9379SHans Rosenfeld extern const char	*ipadm_status2str(ipadm_status_t);
390*a73be61aSHans Rosenfeld extern ipadm_status_t	ipadm_str2nvlist(const char *, nvlist_t **, uint_t);
3916e91bba0SGirish Moodalbail extern size_t		ipadm_nvlist2str(nvlist_t *, char *, size_t);
3926e91bba0SGirish Moodalbail extern char		*ipadm_proto2str(uint_t);
3936e91bba0SGirish Moodalbail extern uint_t		ipadm_str2proto(const char *);
3946e91bba0SGirish Moodalbail extern ipadm_status_t	ipadm_open_arp_on_udp(const char *, int *);
3958887b57dSGirish Moodalbail extern int		ipadm_legacy2new_propname(const char *, char *,
3968887b57dSGirish Moodalbail 			    uint_t, uint_t *);
3978887b57dSGirish Moodalbail extern int		ipadm_new2legacy_propname(const char *, char *,
3988887b57dSGirish Moodalbail 			    uint_t, uint_t);
399b31320a7SChris Fraire extern boolean_t	ipadm_is_valid_hostname(const char *hostname);
400b31320a7SChris Fraire extern boolean_t	ipadm_is_nil_hostname(const char *hostname);
4016e91bba0SGirish Moodalbail 
4026e91bba0SGirish Moodalbail #ifdef	__cplusplus
4036e91bba0SGirish Moodalbail }
4046e91bba0SGirish Moodalbail #endif
4056e91bba0SGirish Moodalbail 
4066e91bba0SGirish Moodalbail #endif	/* _LIBIPADM_H */
407