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