4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright (c) 2013 by Delphix. All rights reserved.
24 */
25
26 #ifndef _LIBIPADM_IMPL_H
27 #define _LIBIPADM_IMPL_H
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #include <sys/socket.h>
34 #include <net/if.h>
35 #include <libipadm.h>
36 #include <libdladm.h>
37 #include <ipadm_ipmgmt.h>
38 #include <inet/tunables.h>
39 #include <netinet/in.h>
40 #include <pthread.h>
41 #include <libinetutil.h>
42 #include <libsocket_priv.h>
43
70 ipadm_addr_type_t ipadm_atype;
71 uint32_t ipadm_flags;
72 sa_family_t ipadm_af;
73 union {
74 struct {
75 char ipadm_ahname[MAXNAMELEN];
76 struct sockaddr_storage ipadm_addr;
77 uint32_t ipadm_prefixlen;
78 char ipadm_dhname[MAXNAMELEN];
79 struct sockaddr_storage ipadm_dstaddr;
80 } ipadm_static_addr_s;
81 struct {
82 struct sockaddr_in6 ipadm_intfid;
83 uint32_t ipadm_intfidlen;
84 boolean_t ipadm_stateless;
85 boolean_t ipadm_stateful;
86 } ipadm_ipv6_intfid_s;
87 struct {
88 boolean_t ipadm_primary;
89 int32_t ipadm_wait;
90 } ipadm_dhcp_s;
91 } ipadm_addr_u;
92 };
93
94 #define ipadm_static_addr ipadm_addr_u.ipadm_static_addr_s.ipadm_addr
95 #define ipadm_static_aname ipadm_addr_u.ipadm_static_addr_s.ipadm_ahname
96 #define ipadm_static_prefixlen ipadm_addr_u.ipadm_static_addr_s.ipadm_prefixlen
97 #define ipadm_static_dst_addr ipadm_addr_u.ipadm_static_addr_s.ipadm_dstaddr
98 #define ipadm_static_dname ipadm_addr_u.ipadm_static_addr_s.ipadm_dhname
99 #define ipadm_intfid ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_intfid
100 #define ipadm_intfidlen ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_intfidlen
101 #define ipadm_stateless ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_stateless
102 #define ipadm_stateful ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_stateful
103 #define ipadm_primary ipadm_addr_u.ipadm_dhcp_s.ipadm_primary
104 #define ipadm_wait ipadm_addr_u.ipadm_dhcp_s.ipadm_wait
105
106 /*
107 * Data structures and callback functions related to property management
108 */
109 struct ipadm_prop_desc;
110 typedef struct ipadm_prop_desc ipadm_prop_desc_t;
111
112 /* property set() callback */
113 typedef ipadm_status_t ipadm_pd_setf_t(ipadm_handle_t, const void *,
114 ipadm_prop_desc_t *, const void *, uint_t, uint_t);
115
116 /* property get() callback */
117 typedef ipadm_status_t ipadm_pd_getf_t(ipadm_handle_t, const void *,
118 ipadm_prop_desc_t *, char *, uint_t *, uint_t, uint_t);
119
120 struct ipadm_prop_desc {
121 char *ipd_name; /* property name */
122 char *ipd_old_name; /* for backward compatibility */
123 uint_t ipd_class; /* prop. class - global/perif/both */
124 uint_t ipd_proto; /* protocol to which property belongs */
128 ipadm_pd_getf_t *ipd_get; /* get value callback function */
129 };
130
131 /* ipd_flags values */
132 #define IPADMPROP_MULVAL 0x00000001 /* property multi-valued */
133
134 extern ipadm_prop_desc_t ipadm_addrprop_table[];
135 extern ipadm_pd_getf_t i_ipadm_get_onoff;
136
137 /* libipadm.c */
138 extern ipadm_status_t i_ipadm_get_flags(ipadm_handle_t, const char *,
139 sa_family_t, uint64_t *);
140 extern ipadm_status_t i_ipadm_set_flags(ipadm_handle_t, const char *,
141 sa_family_t, uint64_t, uint64_t);
142 extern ipadm_status_t i_ipadm_init_ifs(ipadm_handle_t, const char *,
143 nvlist_t **);
144 extern ipadm_status_t i_ipadm_init_ifobj(ipadm_handle_t, const char *,
145 nvlist_t *);
146 extern ipadm_status_t i_ipadm_init_addrobj(ipadm_handle_t, nvlist_t *);
147 extern ipadm_status_t i_ipadm_addr_persist(ipadm_handle_t,
148 const ipadm_addrobj_t, boolean_t, uint32_t);
149 extern ipadm_status_t i_ipadm_delete_addr(ipadm_handle_t, ipadm_addrobj_t);
150 extern int i_ipadm_strioctl(int, int, char *, int);
151 extern boolean_t i_ipadm_is_loopback(const char *);
152 extern boolean_t i_ipadm_is_vni(const char *);
153 extern boolean_t i_ipadm_is_ipmp(ipadm_handle_t, const char *);
154 extern boolean_t i_ipadm_is_under_ipmp(ipadm_handle_t, const char *);
155 extern boolean_t i_ipadm_is_6to4(ipadm_handle_t, char *);
156 extern boolean_t i_ipadm_validate_ifname(ipadm_handle_t, const char *);
157 extern ipadm_status_t ipadm_errno2status(int);
158 extern int ipadm_door_call(ipadm_handle_t, void *, size_t, void **,
159 size_t, boolean_t);
160 extern boolean_t ipadm_if_enabled(ipadm_handle_t, const char *,
161 sa_family_t);
162
163 /* ipadm_ndpd.c */
164 extern ipadm_status_t i_ipadm_create_ipv6addrs(ipadm_handle_t,
165 ipadm_addrobj_t, uint32_t);
166 extern ipadm_status_t i_ipadm_delete_ipv6addrs(ipadm_handle_t,
167 ipadm_addrobj_t);
168 extern ipadm_status_t i_ipadm_disable_autoconf(const char *);
169 extern ipadm_status_t i_ipadm_enable_autoconf(const char *);
170
171 /* ipadm_persist.c */
172 extern ipadm_status_t i_ipadm_add_ipaddr2nvl(nvlist_t *, ipadm_addrobj_t);
173 extern ipadm_status_t i_ipadm_add_ip6addr2nvl(nvlist_t *, ipadm_addrobj_t);
174 extern ipadm_status_t i_ipadm_add_intfid2nvl(nvlist_t *, ipadm_addrobj_t);
175 extern ipadm_status_t i_ipadm_add_dhcp2nvl(nvlist_t *, boolean_t, int32_t);
176
177 /* ipadm_prop.c */
178 extern ipadm_status_t i_ipadm_persist_propval(ipadm_handle_t,
179 ipadm_prop_desc_t *, const char *, const void *,
180 uint_t);
181 extern ipadm_status_t i_ipadm_get_persist_propval(ipadm_handle_t,
182 ipadm_prop_desc_t *, char *, uint_t *,
183 const void *);
184
185 /* ipadm_addr.c */
186 extern void i_ipadm_init_addr(ipadm_addrobj_t, const char *,
187 const char *, ipadm_addr_type_t);
188 extern ipadm_status_t i_ipadm_merge_prefixlen_from_nvl(nvlist_t *, nvlist_t *,
189 const char *);
190 extern ipadm_status_t i_ipadm_get_addrobj(ipadm_handle_t, ipadm_addrobj_t);
191 extern ipadm_status_t i_ipadm_enable_static(ipadm_handle_t, const char *,
192 nvlist_t *, sa_family_t);
193 extern ipadm_status_t i_ipadm_enable_dhcp(ipadm_handle_t, const char *,
194 nvlist_t *);
195 extern ipadm_status_t i_ipadm_enable_addrconf(ipadm_handle_t, const char *,
196 nvlist_t *);
197 extern void i_ipadm_addrobj2lifname(ipadm_addrobj_t, char *, int);
198 extern ipadm_status_t i_ipadm_nvl2in6_addr(nvlist_t *, char *,
199 in6_addr_t *);
200 extern ipadm_status_t i_ipadm_get_lif2addrobj(ipadm_handle_t,
201 ipadm_addrobj_t);
202 extern ipadm_status_t i_ipadm_lookupadd_addrobj(ipadm_handle_t,
203 ipadm_addrobj_t);
204 extern ipadm_status_t i_ipadm_setlifnum_addrobj(ipadm_handle_t,
205 ipadm_addrobj_t);
206 extern ipadm_status_t i_ipadm_do_addif(ipadm_handle_t, ipadm_addrobj_t);
207 extern ipadm_status_t i_ipadm_delete_addrobj(ipadm_handle_t,
208 const ipadm_addrobj_t, uint32_t);
|
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright (c) 2013 by Delphix. All rights reserved.
24 * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
25 */
26
27 #ifndef _LIBIPADM_IMPL_H
28 #define _LIBIPADM_IMPL_H
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include <sys/socket.h>
35 #include <net/if.h>
36 #include <libipadm.h>
37 #include <libdladm.h>
38 #include <ipadm_ipmgmt.h>
39 #include <inet/tunables.h>
40 #include <netinet/in.h>
41 #include <pthread.h>
42 #include <libinetutil.h>
43 #include <libsocket_priv.h>
44
71 ipadm_addr_type_t ipadm_atype;
72 uint32_t ipadm_flags;
73 sa_family_t ipadm_af;
74 union {
75 struct {
76 char ipadm_ahname[MAXNAMELEN];
77 struct sockaddr_storage ipadm_addr;
78 uint32_t ipadm_prefixlen;
79 char ipadm_dhname[MAXNAMELEN];
80 struct sockaddr_storage ipadm_dstaddr;
81 } ipadm_static_addr_s;
82 struct {
83 struct sockaddr_in6 ipadm_intfid;
84 uint32_t ipadm_intfidlen;
85 boolean_t ipadm_stateless;
86 boolean_t ipadm_stateful;
87 } ipadm_ipv6_intfid_s;
88 struct {
89 boolean_t ipadm_primary;
90 int32_t ipadm_wait;
91 char ipadm_reqhost[MAXNAMELEN];
92 } ipadm_dhcp_s;
93 } ipadm_addr_u;
94 };
95
96 #define ipadm_static_addr ipadm_addr_u.ipadm_static_addr_s.ipadm_addr
97 #define ipadm_static_aname ipadm_addr_u.ipadm_static_addr_s.ipadm_ahname
98 #define ipadm_static_prefixlen ipadm_addr_u.ipadm_static_addr_s.ipadm_prefixlen
99 #define ipadm_static_dst_addr ipadm_addr_u.ipadm_static_addr_s.ipadm_dstaddr
100 #define ipadm_static_dname ipadm_addr_u.ipadm_static_addr_s.ipadm_dhname
101 #define ipadm_intfid ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_intfid
102 #define ipadm_intfidlen ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_intfidlen
103 #define ipadm_stateless ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_stateless
104 #define ipadm_stateful ipadm_addr_u.ipadm_ipv6_intfid_s.ipadm_stateful
105 #define ipadm_primary ipadm_addr_u.ipadm_dhcp_s.ipadm_primary
106 #define ipadm_wait ipadm_addr_u.ipadm_dhcp_s.ipadm_wait
107 #define ipadm_reqhost ipadm_addr_u.ipadm_dhcp_s.ipadm_reqhost
108
109 /*
110 * Data structures and callback functions related to property management
111 */
112 struct ipadm_prop_desc;
113 typedef struct ipadm_prop_desc ipadm_prop_desc_t;
114
115 /* property set() callback */
116 typedef ipadm_status_t ipadm_pd_setf_t(ipadm_handle_t, const void *,
117 ipadm_prop_desc_t *, const void *, uint_t, uint_t);
118
119 /* property get() callback */
120 typedef ipadm_status_t ipadm_pd_getf_t(ipadm_handle_t, const void *,
121 ipadm_prop_desc_t *, char *, uint_t *, uint_t, uint_t);
122
123 struct ipadm_prop_desc {
124 char *ipd_name; /* property name */
125 char *ipd_old_name; /* for backward compatibility */
126 uint_t ipd_class; /* prop. class - global/perif/both */
127 uint_t ipd_proto; /* protocol to which property belongs */
131 ipadm_pd_getf_t *ipd_get; /* get value callback function */
132 };
133
134 /* ipd_flags values */
135 #define IPADMPROP_MULVAL 0x00000001 /* property multi-valued */
136
137 extern ipadm_prop_desc_t ipadm_addrprop_table[];
138 extern ipadm_pd_getf_t i_ipadm_get_onoff;
139
140 /* libipadm.c */
141 extern ipadm_status_t i_ipadm_get_flags(ipadm_handle_t, const char *,
142 sa_family_t, uint64_t *);
143 extern ipadm_status_t i_ipadm_set_flags(ipadm_handle_t, const char *,
144 sa_family_t, uint64_t, uint64_t);
145 extern ipadm_status_t i_ipadm_init_ifs(ipadm_handle_t, const char *,
146 nvlist_t **);
147 extern ipadm_status_t i_ipadm_init_ifobj(ipadm_handle_t, const char *,
148 nvlist_t *);
149 extern ipadm_status_t i_ipadm_init_addrobj(ipadm_handle_t, nvlist_t *);
150 extern ipadm_status_t i_ipadm_addr_persist(ipadm_handle_t,
151 const ipadm_addrobj_t, boolean_t, uint32_t, const char *);
152 extern ipadm_status_t i_ipadm_delete_addr(ipadm_handle_t, ipadm_addrobj_t);
153 extern int i_ipadm_strioctl(int, int, char *, int);
154 extern boolean_t i_ipadm_is_loopback(const char *);
155 extern boolean_t i_ipadm_is_vni(const char *);
156 extern boolean_t i_ipadm_is_ipmp(ipadm_handle_t, const char *);
157 extern boolean_t i_ipadm_is_under_ipmp(ipadm_handle_t, const char *);
158 extern boolean_t i_ipadm_is_6to4(ipadm_handle_t, char *);
159 extern boolean_t i_ipadm_validate_ifname(ipadm_handle_t, const char *);
160 extern ipadm_status_t ipadm_errno2status(int);
161 extern int ipadm_door_call(ipadm_handle_t, void *, size_t, void **,
162 size_t, boolean_t);
163 extern boolean_t ipadm_if_enabled(ipadm_handle_t, const char *,
164 sa_family_t);
165
166 /* ipadm_ndpd.c */
167 extern ipadm_status_t i_ipadm_create_ipv6addrs(ipadm_handle_t,
168 ipadm_addrobj_t, uint32_t);
169 extern ipadm_status_t i_ipadm_delete_ipv6addrs(ipadm_handle_t,
170 ipadm_addrobj_t);
171 extern ipadm_status_t i_ipadm_disable_autoconf(const char *);
172 extern ipadm_status_t i_ipadm_enable_autoconf(const char *);
173
174 /* ipadm_persist.c */
175 extern ipadm_status_t i_ipadm_add_ipaddr2nvl(nvlist_t *, ipadm_addrobj_t);
176 extern ipadm_status_t i_ipadm_add_ip6addr2nvl(nvlist_t *, ipadm_addrobj_t);
177 extern ipadm_status_t i_ipadm_add_intfid2nvl(nvlist_t *, ipadm_addrobj_t);
178 extern ipadm_status_t i_ipadm_add_dhcp2nvl(nvlist_t *, boolean_t, int32_t);
179
180 /* ipadm_prop.c */
181 extern ipadm_status_t i_ipadm_persist_propval(ipadm_handle_t,
182 ipadm_prop_desc_t *, const char *, const void *,
183 uint_t);
184 extern ipadm_status_t i_ipadm_get_persist_propval(ipadm_handle_t,
185 ipadm_prop_desc_t *, char *, uint_t *,
186 const void *);
187
188 /* ipadm_addr.c */
189 extern void i_ipadm_init_addr(ipadm_addrobj_t, const char *,
190 const char *, ipadm_addr_type_t);
191 extern ipadm_status_t i_ipadm_merge_addrprops_from_nvl(nvlist_t *, nvlist_t *,
192 const char *);
193 extern ipadm_status_t i_ipadm_get_addrobj(ipadm_handle_t, ipadm_addrobj_t);
194 extern ipadm_status_t i_ipadm_enable_static(ipadm_handle_t, const char *,
195 nvlist_t *, sa_family_t);
196 extern ipadm_status_t i_ipadm_enable_dhcp(ipadm_handle_t, const char *,
197 nvlist_t *);
198 extern ipadm_status_t i_ipadm_enable_addrconf(ipadm_handle_t, const char *,
199 nvlist_t *);
200 extern void i_ipadm_addrobj2lifname(ipadm_addrobj_t, char *, int);
201 extern ipadm_status_t i_ipadm_nvl2in6_addr(nvlist_t *, char *,
202 in6_addr_t *);
203 extern ipadm_status_t i_ipadm_get_lif2addrobj(ipadm_handle_t,
204 ipadm_addrobj_t);
205 extern ipadm_status_t i_ipadm_lookupadd_addrobj(ipadm_handle_t,
206 ipadm_addrobj_t);
207 extern ipadm_status_t i_ipadm_setlifnum_addrobj(ipadm_handle_t,
208 ipadm_addrobj_t);
209 extern ipadm_status_t i_ipadm_do_addif(ipadm_handle_t, ipadm_addrobj_t);
210 extern ipadm_status_t i_ipadm_delete_addrobj(ipadm_handle_t,
211 const ipadm_addrobj_t, uint32_t);
|