xref: /onnv-gate/usr/src/lib/libipadm/common/libipadm_impl.h (revision 13125:34b1540309cc)
112016SGirish.Moodalbail@Sun.COM /*
212016SGirish.Moodalbail@Sun.COM  * CDDL HEADER START
312016SGirish.Moodalbail@Sun.COM  *
412016SGirish.Moodalbail@Sun.COM  * The contents of this file are subject to the terms of the
512016SGirish.Moodalbail@Sun.COM  * Common Development and Distribution License (the "License").
612016SGirish.Moodalbail@Sun.COM  * You may not use this file except in compliance with the License.
712016SGirish.Moodalbail@Sun.COM  *
812016SGirish.Moodalbail@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
912016SGirish.Moodalbail@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1012016SGirish.Moodalbail@Sun.COM  * See the License for the specific language governing permissions
1112016SGirish.Moodalbail@Sun.COM  * and limitations under the License.
1212016SGirish.Moodalbail@Sun.COM  *
1312016SGirish.Moodalbail@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1412016SGirish.Moodalbail@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1512016SGirish.Moodalbail@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1612016SGirish.Moodalbail@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1712016SGirish.Moodalbail@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1812016SGirish.Moodalbail@Sun.COM  *
1912016SGirish.Moodalbail@Sun.COM  * CDDL HEADER END
2012016SGirish.Moodalbail@Sun.COM  */
2112016SGirish.Moodalbail@Sun.COM /*
2212088SGirish.Moodalbail@Sun.COM  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
2312016SGirish.Moodalbail@Sun.COM  */
2412016SGirish.Moodalbail@Sun.COM 
2512016SGirish.Moodalbail@Sun.COM #ifndef _LIBIPADM_IMPL_H
2612016SGirish.Moodalbail@Sun.COM #define	_LIBIPADM_IMPL_H
2712016SGirish.Moodalbail@Sun.COM 
2812016SGirish.Moodalbail@Sun.COM #ifdef	__cplusplus
2912016SGirish.Moodalbail@Sun.COM extern "C" {
3012016SGirish.Moodalbail@Sun.COM #endif
3112016SGirish.Moodalbail@Sun.COM 
3212016SGirish.Moodalbail@Sun.COM #include <sys/socket.h>
3312016SGirish.Moodalbail@Sun.COM #include <net/if.h>
3412016SGirish.Moodalbail@Sun.COM #include <libipadm.h>
3512016SGirish.Moodalbail@Sun.COM #include <libdladm.h>
3612016SGirish.Moodalbail@Sun.COM #include <ipadm_ipmgmt.h>
3712016SGirish.Moodalbail@Sun.COM #include <inet/tunables.h>
3812016SGirish.Moodalbail@Sun.COM #include <netinet/in.h>
3912016SGirish.Moodalbail@Sun.COM #include <pthread.h>
4012016SGirish.Moodalbail@Sun.COM #include <libinetutil.h>
4112016SGirish.Moodalbail@Sun.COM #include <libsocket_priv.h>
4212016SGirish.Moodalbail@Sun.COM 
4312016SGirish.Moodalbail@Sun.COM #define	IPADM_STRSIZE		256
4412016SGirish.Moodalbail@Sun.COM #define	IPADM_ONSTR		"on"
4512016SGirish.Moodalbail@Sun.COM #define	IPADM_OFFSTR		"off"
4612016SGirish.Moodalbail@Sun.COM #define	ARP_MOD_NAME		"arp"
4712016SGirish.Moodalbail@Sun.COM #define	IPADM_LOGICAL_SEP	':'
4812016SGirish.Moodalbail@Sun.COM #define	IPV6_MIN_MTU		1280	/* rfc2460 */
4912016SGirish.Moodalbail@Sun.COM 
5012016SGirish.Moodalbail@Sun.COM /* mask for flags accepted by libipadm functions */
5112016SGirish.Moodalbail@Sun.COM #define	IPADM_COMMON_OPT_MASK	(IPADM_OPT_ACTIVE | IPADM_OPT_PERSIST)
5212016SGirish.Moodalbail@Sun.COM 
5312016SGirish.Moodalbail@Sun.COM /* Opaque library handle */
5412016SGirish.Moodalbail@Sun.COM struct ipadm_handle {
5512016SGirish.Moodalbail@Sun.COM 	int		iph_sock;	/* socket to interface */
5612016SGirish.Moodalbail@Sun.COM 	int		iph_sock6;	/* socket to interface */
5712016SGirish.Moodalbail@Sun.COM 	int		iph_door_fd;	/* door descriptor to ipmgmtd */
58*12748SSowmini.Varadhan@oracle.COM 	int		iph_rtsock;	/* routing socket */
5912016SGirish.Moodalbail@Sun.COM 	dladm_handle_t	iph_dlh;	/* handle to libdladm library */
6012016SGirish.Moodalbail@Sun.COM 	uint32_t	iph_flags;	/* internal flags */
6112016SGirish.Moodalbail@Sun.COM 	pthread_mutex_t	iph_lock;	/* lock to set door_fd */
62*12748SSowmini.Varadhan@oracle.COM 	zoneid_t	iph_zoneid;	/* zoneid where handle was opened */
6312016SGirish.Moodalbail@Sun.COM };
6412016SGirish.Moodalbail@Sun.COM 
6512016SGirish.Moodalbail@Sun.COM struct ipadm_addrobj_s {
6612016SGirish.Moodalbail@Sun.COM 	char 			ipadm_ifname[LIFNAMSIZ];
6712016SGirish.Moodalbail@Sun.COM 	int32_t			ipadm_lifnum;
6812016SGirish.Moodalbail@Sun.COM 	char			ipadm_aobjname[IPADM_AOBJSIZ];
6912016SGirish.Moodalbail@Sun.COM 	ipadm_addr_type_t	ipadm_atype;
7012016SGirish.Moodalbail@Sun.COM 	uint32_t		ipadm_flags;
7112016SGirish.Moodalbail@Sun.COM 	sa_family_t		ipadm_af;
7212016SGirish.Moodalbail@Sun.COM 	union {
7312016SGirish.Moodalbail@Sun.COM 		struct {
7412016SGirish.Moodalbail@Sun.COM 			char			ipadm_ahname[MAXNAMELEN];
7512016SGirish.Moodalbail@Sun.COM 			struct sockaddr_storage	ipadm_addr;
7612016SGirish.Moodalbail@Sun.COM 			uint32_t		ipadm_prefixlen;
7712016SGirish.Moodalbail@Sun.COM 			char			ipadm_dhname[MAXNAMELEN];
7812016SGirish.Moodalbail@Sun.COM 			struct sockaddr_storage ipadm_dstaddr;
7912016SGirish.Moodalbail@Sun.COM 		} ipadm_static_addr_s;
8012016SGirish.Moodalbail@Sun.COM 		struct {
8112016SGirish.Moodalbail@Sun.COM 			struct sockaddr_in6	ipadm_intfid;
8212016SGirish.Moodalbail@Sun.COM 			uint32_t		ipadm_intfidlen;
8312016SGirish.Moodalbail@Sun.COM 			boolean_t		ipadm_stateless;
8412016SGirish.Moodalbail@Sun.COM 			boolean_t		ipadm_stateful;
8512016SGirish.Moodalbail@Sun.COM 		} ipadm_ipv6_intfid_s;
8612016SGirish.Moodalbail@Sun.COM 		struct {
8712016SGirish.Moodalbail@Sun.COM 			boolean_t		ipadm_primary;
8812016SGirish.Moodalbail@Sun.COM 			int32_t			ipadm_wait;
8912016SGirish.Moodalbail@Sun.COM 		} ipadm_dhcp_s;
9012016SGirish.Moodalbail@Sun.COM 	} ipadm_addr_u;
9112016SGirish.Moodalbail@Sun.COM };
9212016SGirish.Moodalbail@Sun.COM 
9312016SGirish.Moodalbail@Sun.COM #define	ipadm_static_addr	ipadm_addr_u.ipadm_static_addr_s.ipadm_addr
9412016SGirish.Moodalbail@Sun.COM #define	ipadm_static_aname	ipadm_addr_u.ipadm_static_addr_s.ipadm_ahname
9512016SGirish.Moodalbail@Sun.COM #define	ipadm_static_prefixlen	ipadm_addr_u.ipadm_static_addr_s.ipadm_prefixlen
9612016SGirish.Moodalbail@Sun.COM #define	ipadm_static_dst_addr	ipadm_addr_u.ipadm_static_addr_s.ipadm_dstaddr
9712016SGirish.Moodalbail@Sun.COM #define	ipadm_static_dname	ipadm_addr_u.ipadm_static_addr_s.ipadm_dhname
9812016SGirish.Moodalbail@Sun.COM #define	ipadm_intfid		ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_intfid
9912016SGirish.Moodalbail@Sun.COM #define	ipadm_intfidlen		ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_intfidlen
10012016SGirish.Moodalbail@Sun.COM #define	ipadm_stateless		ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_stateless
10112016SGirish.Moodalbail@Sun.COM #define	ipadm_stateful		ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_stateful
10212016SGirish.Moodalbail@Sun.COM #define	ipadm_primary		ipadm_addr_u.ipadm_dhcp_s.ipadm_primary
10312016SGirish.Moodalbail@Sun.COM #define	ipadm_wait		ipadm_addr_u.ipadm_dhcp_s.ipadm_wait
10412016SGirish.Moodalbail@Sun.COM 
10512016SGirish.Moodalbail@Sun.COM /*
10612016SGirish.Moodalbail@Sun.COM  * Data structures and callback functions related to property management
10712016SGirish.Moodalbail@Sun.COM  */
10812016SGirish.Moodalbail@Sun.COM struct ipadm_prop_desc;
10912016SGirish.Moodalbail@Sun.COM typedef struct ipadm_prop_desc ipadm_prop_desc_t;
11012016SGirish.Moodalbail@Sun.COM 
11112016SGirish.Moodalbail@Sun.COM /* property set() callback */
11212016SGirish.Moodalbail@Sun.COM typedef ipadm_status_t	ipadm_pd_setf_t(ipadm_handle_t, const void *,
11312016SGirish.Moodalbail@Sun.COM     ipadm_prop_desc_t *, const void *, uint_t, uint_t);
11412016SGirish.Moodalbail@Sun.COM 
11512016SGirish.Moodalbail@Sun.COM /* property get() callback */
11612016SGirish.Moodalbail@Sun.COM typedef ipadm_status_t	ipadm_pd_getf_t(ipadm_handle_t, const void *,
11712016SGirish.Moodalbail@Sun.COM     ipadm_prop_desc_t *, char *, uint_t *, uint_t, uint_t);
11812016SGirish.Moodalbail@Sun.COM 
11912016SGirish.Moodalbail@Sun.COM struct ipadm_prop_desc {
12012016SGirish.Moodalbail@Sun.COM 	char		*ipd_name;	/* property name */
12112016SGirish.Moodalbail@Sun.COM 	uint_t		ipd_class; 	/* prop. class - global/perif/both */
12212016SGirish.Moodalbail@Sun.COM 	uint_t		ipd_proto;	/* protocol to which property belongs */
12312088SGirish.Moodalbail@Sun.COM 	uint_t		ipd_flags;	/* see below */
12412016SGirish.Moodalbail@Sun.COM 	ipadm_pd_setf_t	*ipd_set;	/* set callback function */
12512016SGirish.Moodalbail@Sun.COM 	ipadm_pd_getf_t	*ipd_get_range;	/* get range callback function */
12612016SGirish.Moodalbail@Sun.COM 	ipadm_pd_getf_t	*ipd_get;	/* get value callback function */
12712016SGirish.Moodalbail@Sun.COM };
12812016SGirish.Moodalbail@Sun.COM 
12912088SGirish.Moodalbail@Sun.COM /* ipd_flags values */
13012088SGirish.Moodalbail@Sun.COM #define	IPADMPROP_MULVAL	0x00000001	/* property multi-valued */
13112088SGirish.Moodalbail@Sun.COM 
13212016SGirish.Moodalbail@Sun.COM extern ipadm_prop_desc_t	ipadm_addrprop_table[];
13312016SGirish.Moodalbail@Sun.COM extern ipadm_pd_getf_t		i_ipadm_get_onoff;
13412016SGirish.Moodalbail@Sun.COM 
13512016SGirish.Moodalbail@Sun.COM /* libipadm.c */
13612016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_get_flags(ipadm_handle_t, const char *,
13712016SGirish.Moodalbail@Sun.COM 			    sa_family_t, uint64_t *);
13812016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_set_flags(ipadm_handle_t, const char *,
13912016SGirish.Moodalbail@Sun.COM 			    sa_family_t, uint64_t, uint64_t);
14012016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_init_ifs(ipadm_handle_t, const char *,
14112016SGirish.Moodalbail@Sun.COM 			    nvlist_t **);
14212016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_init_ifobj(ipadm_handle_t, const char *,
14312016SGirish.Moodalbail@Sun.COM 			    nvlist_t *);
14412016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_init_addrobj(ipadm_handle_t, nvlist_t *);
14512016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_addr_persist(ipadm_handle_t,
14612016SGirish.Moodalbail@Sun.COM 			    const ipadm_addrobj_t, boolean_t, uint32_t);
14712016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_delete_addr(ipadm_handle_t, ipadm_addrobj_t);
14812016SGirish.Moodalbail@Sun.COM extern int		i_ipadm_strioctl(int, int, char *, int);
14912016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_is_loopback(const char *);
15012016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_is_vni(const char *);
15112016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_is_ipmp(ipadm_handle_t, const char *);
15212016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_is_under_ipmp(ipadm_handle_t, const char *);
15312016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_is_6to4(ipadm_handle_t, char *);
15412016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_validate_ifname(ipadm_handle_t, const char *);
15512016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	ipadm_errno2status(int);
15612016SGirish.Moodalbail@Sun.COM extern int		ipadm_door_call(ipadm_handle_t, void *, size_t, void **,
15712016SGirish.Moodalbail@Sun.COM 			    size_t, boolean_t);
15812016SGirish.Moodalbail@Sun.COM extern boolean_t 	ipadm_if_enabled(ipadm_handle_t, const char *,
15912016SGirish.Moodalbail@Sun.COM 			    sa_family_t);
16012016SGirish.Moodalbail@Sun.COM 
16112016SGirish.Moodalbail@Sun.COM /* ipadm_ndpd.c */
16212016SGirish.Moodalbail@Sun.COM extern	ipadm_status_t	i_ipadm_create_ipv6addrs(ipadm_handle_t,
16312016SGirish.Moodalbail@Sun.COM 			    ipadm_addrobj_t, uint32_t);
16412016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_delete_ipv6addrs(ipadm_handle_t,
16512016SGirish.Moodalbail@Sun.COM 			    ipadm_addrobj_t);
16612016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_disable_autoconf(const char *);
16712016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_enable_autoconf(const char *);
16812016SGirish.Moodalbail@Sun.COM 
16912016SGirish.Moodalbail@Sun.COM /* ipadm_persist.c */
17012016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_add_ipaddr2nvl(nvlist_t *, ipadm_addrobj_t);
17112016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_add_ip6addr2nvl(nvlist_t *, ipadm_addrobj_t);
17212016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_add_intfid2nvl(nvlist_t *, ipadm_addrobj_t);
17312016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_add_dhcp2nvl(nvlist_t *, boolean_t, int32_t);
17412016SGirish.Moodalbail@Sun.COM 
17512016SGirish.Moodalbail@Sun.COM /* ipadm_prop.c */
17612016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_persist_propval(ipadm_handle_t,
17712016SGirish.Moodalbail@Sun.COM 			    ipadm_prop_desc_t *, const char *, const void *,
17812016SGirish.Moodalbail@Sun.COM 			    uint_t);
17912016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_get_persist_propval(ipadm_handle_t,
18012016SGirish.Moodalbail@Sun.COM 			    ipadm_prop_desc_t *, char *, uint_t *,
18112016SGirish.Moodalbail@Sun.COM 			    const void *);
18212016SGirish.Moodalbail@Sun.COM 
18312016SGirish.Moodalbail@Sun.COM /* ipadm_addr.c */
18412016SGirish.Moodalbail@Sun.COM extern void		i_ipadm_init_addr(ipadm_addrobj_t, const char *,
18512016SGirish.Moodalbail@Sun.COM 			    const char *, ipadm_addr_type_t);
18612016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_merge_prefixlen_from_nvl(nvlist_t *, nvlist_t *,
18712016SGirish.Moodalbail@Sun.COM 			    const char *);
18812016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_get_addrobj(ipadm_handle_t, ipadm_addrobj_t);
18912016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_enable_static(ipadm_handle_t, const char *,
19012016SGirish.Moodalbail@Sun.COM 			    nvlist_t *, sa_family_t);
19112016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_enable_dhcp(ipadm_handle_t, const char *,
19212016SGirish.Moodalbail@Sun.COM 			    nvlist_t *);
19312016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_enable_addrconf(ipadm_handle_t, const char *,
19412016SGirish.Moodalbail@Sun.COM 			    nvlist_t *);
19512016SGirish.Moodalbail@Sun.COM extern void		i_ipadm_addrobj2lifname(ipadm_addrobj_t, char *, int);
19612016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_nvl2in6_addr(nvlist_t *, char *,
19712016SGirish.Moodalbail@Sun.COM 			    in6_addr_t *);
19812016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_get_lif2addrobj(ipadm_handle_t,
19912016SGirish.Moodalbail@Sun.COM 			    ipadm_addrobj_t);
20012016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_lookupadd_addrobj(ipadm_handle_t,
20112016SGirish.Moodalbail@Sun.COM 			    ipadm_addrobj_t);
20212297SVasumathi.Sundaram@oracle.COM extern ipadm_status_t	i_ipadm_setlifnum_addrobj(ipadm_handle_t,
20312297SVasumathi.Sundaram@oracle.COM 			    ipadm_addrobj_t);
20412297SVasumathi.Sundaram@oracle.COM extern ipadm_status_t	i_ipadm_do_addif(ipadm_handle_t, ipadm_addrobj_t);
20512016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_delete_addrobj(ipadm_handle_t,
20612016SGirish.Moodalbail@Sun.COM 			    const ipadm_addrobj_t, uint32_t);
20712016SGirish.Moodalbail@Sun.COM extern boolean_t	i_ipadm_name2atype(const char *, sa_family_t *,
20812016SGirish.Moodalbail@Sun.COM 			    ipadm_addr_type_t *);
209*12748SSowmini.Varadhan@oracle.COM extern ipadm_status_t	i_ipadm_resolve_addr(const char *, sa_family_t,
210*12748SSowmini.Varadhan@oracle.COM 			    struct sockaddr_storage *);
21112016SGirish.Moodalbail@Sun.COM 
21212016SGirish.Moodalbail@Sun.COM /* ipadm_if.c */
21312016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_create_if(ipadm_handle_t, char *,  sa_family_t,
21412016SGirish.Moodalbail@Sun.COM 			    uint32_t);
21512016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_delete_if(ipadm_handle_t, const char *,
21612016SGirish.Moodalbail@Sun.COM 			    sa_family_t, uint32_t);
21712016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_plumb_if(ipadm_handle_t, char *, sa_family_t,
21812016SGirish.Moodalbail@Sun.COM 			    uint32_t);
21912016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_unplumb_if(ipadm_handle_t, const char *,
22012016SGirish.Moodalbail@Sun.COM 			    sa_family_t);
22112016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_if_pexists(ipadm_handle_t, const char *,
22212016SGirish.Moodalbail@Sun.COM 			    sa_family_t, boolean_t *);
22312016SGirish.Moodalbail@Sun.COM extern ipadm_status_t	i_ipadm_delete_ifobj(ipadm_handle_t, const char *,
22412016SGirish.Moodalbail@Sun.COM 			    sa_family_t, boolean_t);
22512016SGirish.Moodalbail@Sun.COM extern int		i_ipadm_get_lnum(const char *);
22612016SGirish.Moodalbail@Sun.COM 
22712016SGirish.Moodalbail@Sun.COM #ifdef	__cplusplus
22812016SGirish.Moodalbail@Sun.COM }
22912016SGirish.Moodalbail@Sun.COM #endif
23012016SGirish.Moodalbail@Sun.COM 
23112016SGirish.Moodalbail@Sun.COM #endif	/* _LIBIPADM_IMPL_H */
232