xref: /titanic_52/usr/src/uts/common/sys/iscsit/iscsit_common.h (revision 42bf653b44c42fc6b637ae50e590489d69399241)
1a6d42e7dSPeter Dunlap /*
2a6d42e7dSPeter Dunlap  * CDDL HEADER START
3a6d42e7dSPeter Dunlap  *
4a6d42e7dSPeter Dunlap  * The contents of this file are subject to the terms of the
5a6d42e7dSPeter Dunlap  * Common Development and Distribution License (the "License").
6a6d42e7dSPeter Dunlap  * You may not use this file except in compliance with the License.
7a6d42e7dSPeter Dunlap  *
8a6d42e7dSPeter Dunlap  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9a6d42e7dSPeter Dunlap  * or http://www.opensolaris.org/os/licensing.
10a6d42e7dSPeter Dunlap  * See the License for the specific language governing permissions
11a6d42e7dSPeter Dunlap  * and limitations under the License.
12a6d42e7dSPeter Dunlap  *
13a6d42e7dSPeter Dunlap  * When distributing Covered Code, include this CDDL HEADER in each
14a6d42e7dSPeter Dunlap  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15a6d42e7dSPeter Dunlap  * If applicable, add the following below this CDDL HEADER, with the
16a6d42e7dSPeter Dunlap  * fields enclosed by brackets "[]" replaced with your own identifying
17a6d42e7dSPeter Dunlap  * information: Portions Copyright [yyyy] [name of copyright owner]
18a6d42e7dSPeter Dunlap  *
19a6d42e7dSPeter Dunlap  * CDDL HEADER END
20a6d42e7dSPeter Dunlap  */
21a6d42e7dSPeter Dunlap /*
22*42bf653bSPeter Gill  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
23a6d42e7dSPeter Dunlap  */
24a6d42e7dSPeter Dunlap 
25a6d42e7dSPeter Dunlap #ifndef _ISCSIT_COMMON_H_
26a6d42e7dSPeter Dunlap #define	_ISCSIT_COMMON_H_
27a6d42e7dSPeter Dunlap 
28a6d42e7dSPeter Dunlap #ifdef	_KERNEL
29a6d42e7dSPeter Dunlap #include <sys/nvpair.h>
30a6d42e7dSPeter Dunlap #else
31a6d42e7dSPeter Dunlap #include <libnvpair.h>
32a6d42e7dSPeter Dunlap #endif
33a6d42e7dSPeter Dunlap 
34a6d42e7dSPeter Dunlap #ifdef __cplusplus
35a6d42e7dSPeter Dunlap extern "C" {
36a6d42e7dSPeter Dunlap #endif
37a6d42e7dSPeter Dunlap 
38a6d42e7dSPeter Dunlap #define	ISCSIT_API_VERS0		0
39a6d42e7dSPeter Dunlap 
40bf604c64SPeter Dunlap #define	ISCSIT_MODNAME		"iscsit"
41bf604c64SPeter Dunlap #define	ISCSIT_NODE		"/devices/pseudo/iscsit@0:iscsit"
42bf604c64SPeter Dunlap 
43a6d42e7dSPeter Dunlap typedef enum {
44a6d42e7dSPeter Dunlap 	ITCFG_SUCCESS = 0,
45a6d42e7dSPeter Dunlap 	ITCFG_INVALID,
46a6d42e7dSPeter Dunlap 	ITCFG_TGT_CREATE_ERR,
47a6d42e7dSPeter Dunlap 	ITCFG_MISC_ERR
48a6d42e7dSPeter Dunlap } it_cfg_status_t;
49a6d42e7dSPeter Dunlap 
50a6d42e7dSPeter Dunlap /*
51a6d42e7dSPeter Dunlap  * This structure is passed back to the driver during ISCSIT_IOC_ENABLE_SVC
52a6d42e7dSPeter Dunlap  * in order to provide the fully qualified hostname for use as the EID
53a6d42e7dSPeter Dunlap  * by iSNS.
54a6d42e7dSPeter Dunlap  */
55a6d42e7dSPeter Dunlap 
56a6d42e7dSPeter Dunlap #define	ISCSIT_MAX_HOSTNAME_LEN	256
57a6d42e7dSPeter Dunlap 
58a6d42e7dSPeter Dunlap typedef struct iscsit_hostinfo_s {
59a6d42e7dSPeter Dunlap 	uint32_t	length;
60a6d42e7dSPeter Dunlap 	char		fqhn[ISCSIT_MAX_HOSTNAME_LEN];
61a6d42e7dSPeter Dunlap } iscsit_hostinfo_t;
62a6d42e7dSPeter Dunlap 
63a6d42e7dSPeter Dunlap #define	ISCSIT_IOC_SET_CONFIG		1
64a6d42e7dSPeter Dunlap #define	ISCSIT_IOC_GET_STATE		2
65a6d42e7dSPeter Dunlap #define	ISCSIT_IOC_ENABLE_SVC		101
66a6d42e7dSPeter Dunlap #define	ISCSIT_IOC_DISABLE_SVC		102
67a6d42e7dSPeter Dunlap 
68a6d42e7dSPeter Dunlap /* XXX Rationalize these with other error values (used in it_smf.c */
69a6d42e7dSPeter Dunlap #define	ITADM_SUCCESS		0
70a6d42e7dSPeter Dunlap #define	ITADM_FATAL_ERROR	0x1
71a6d42e7dSPeter Dunlap #define	ITADM_NO_MEM		0x2
72a6d42e7dSPeter Dunlap #define	ITADM_INVALID		0x4
73a6d42e7dSPeter Dunlap #define	ITADM_NODATA		0x8
74a6d42e7dSPeter Dunlap #define	ITADM_PERM		0x10
75a6d42e7dSPeter Dunlap 
76a6d42e7dSPeter Dunlap 
77a6d42e7dSPeter Dunlap #define	PROP_AUTH		"auth"
78a6d42e7dSPeter Dunlap #define	PROP_ALIAS		"alias"
79a6d42e7dSPeter Dunlap #define	PROP_CHAP_USER		"chapuser"
80a6d42e7dSPeter Dunlap #define	PROP_CHAP_SECRET	"chapsecret"
81a6d42e7dSPeter Dunlap #define	PROP_TARGET_CHAP_USER	"targetchapuser"
82a6d42e7dSPeter Dunlap #define	PROP_TARGET_CHAP_SECRET	"targetchapsecret"
83a6d42e7dSPeter Dunlap #define	PROP_RADIUS_SERVER	"radiusserver"
84a6d42e7dSPeter Dunlap #define	PROP_RADIUS_SECRET	"radiussecret"
85a6d42e7dSPeter Dunlap #define	PROP_ISNS_ENABLED	"isns"
86a6d42e7dSPeter Dunlap #define	PROP_ISNS_SERVER	"isnsserver"
87a6d42e7dSPeter Dunlap #define	PROP_OLD_TARGET_NAME	"oldtargetname"
88a6d42e7dSPeter Dunlap 
89a6d42e7dSPeter Dunlap #define	PA_AUTH_RADIUS		"radius"
90a6d42e7dSPeter Dunlap #define	PA_AUTH_CHAP		"chap"
91a6d42e7dSPeter Dunlap #define	PA_AUTH_NONE		"none"
92a6d42e7dSPeter Dunlap 
93a6d42e7dSPeter Dunlap typedef struct {
94a6d42e7dSPeter Dunlap 	int		set_cfg_vers;
95a6d42e7dSPeter Dunlap 	int		set_cfg_pnvlist_len;
96a6d42e7dSPeter Dunlap 	caddr_t		set_cfg_pnvlist;
97a6d42e7dSPeter Dunlap } iscsit_ioc_set_config_t;
98a6d42e7dSPeter Dunlap 
99a6d42e7dSPeter Dunlap typedef struct {
100a6d42e7dSPeter Dunlap 	int		getst_vers;
101a6d42e7dSPeter Dunlap 	int		getst_pnvlist_len;
102a6d42e7dSPeter Dunlap 	char		*getst_pnvlist;
103a6d42e7dSPeter Dunlap } iscsit_ioc_getstate_t;
104a6d42e7dSPeter Dunlap 
105a6d42e7dSPeter Dunlap #ifdef _SYSCALL32
106a6d42e7dSPeter Dunlap typedef struct {
107a6d42e7dSPeter Dunlap 	int		set_cfg_vers;
108a6d42e7dSPeter Dunlap 	int		set_cfg_pnvlist_len;
109a6d42e7dSPeter Dunlap 	caddr32_t	set_cfg_pnvlist;
110a6d42e7dSPeter Dunlap } iscsit_ioc_set_config32_t;
111a6d42e7dSPeter Dunlap 
112a6d42e7dSPeter Dunlap typedef struct {
113a6d42e7dSPeter Dunlap 	int		getst_vers;
114a6d42e7dSPeter Dunlap 	int		getst_pnvlist_len;
115a6d42e7dSPeter Dunlap 	caddr32_t	getst_pnvlist;
116a6d42e7dSPeter Dunlap } iscsit_ioc_getstate32_t;
117a6d42e7dSPeter Dunlap #endif /* _SYSCALL32 */
118a6d42e7dSPeter Dunlap 
119bf604c64SPeter Dunlap /* Shared user/kernel structures */
120bf604c64SPeter Dunlap /*  Maximum size of a Target Portal Group name */
121bf604c64SPeter Dunlap #define	MAX_TPG_NAMELEN		256		/* XXX */
122bf604c64SPeter Dunlap 
123bf604c64SPeter Dunlap /* Maximum size of an iSCSI Target Node name */
124bf604c64SPeter Dunlap #define	MAX_ISCSI_NODENAMELEN	256		/* XXX */
125bf604c64SPeter Dunlap 
126bf604c64SPeter Dunlap /*
127bf604c64SPeter Dunlap  * A target portal group tag is a binding between a target and a target
128bf604c64SPeter Dunlap  * portal group along with a numerical value associated with that binding.
129bf604c64SPeter Dunlap  * The numerical identifier is used as the 'target portal group tag' defined
130bf604c64SPeter Dunlap  * in RFC3720.
131bf604c64SPeter Dunlap  *
132bf604c64SPeter Dunlap  *  tpgt_tpg_name	The name of the target portal group associated with
133bf604c64SPeter Dunlap  *			this target portal group tag.
134bf604c64SPeter Dunlap  *  tpgt_generation	Generation number which is incremented each time the
135bf604c64SPeter Dunlap  *			structure changes.
136bf604c64SPeter Dunlap  *  tpgt_next		Next target portal group tag in th list of target portal
137bf604c64SPeter Dunlap  *			group tags.  If tpgt_next is NUL, then this is the last
138bf604c64SPeter Dunlap  *			target portal group in the list.
139bf604c64SPeter Dunlap  *  tpgt_tag		A numerical identifier that uniquely identifies a
140bf604c64SPeter Dunlap  *			target portal group within the associated target node.
141bf604c64SPeter Dunlap  */
142bf604c64SPeter Dunlap typedef struct it_tpgt_s {
143bf604c64SPeter Dunlap 	char			tpgt_tpg_name[MAX_TPG_NAMELEN];
144bf604c64SPeter Dunlap 	uint64_t		tpgt_generation;
145bf604c64SPeter Dunlap 	struct it_tpgt_s	*tpgt_next;
146bf604c64SPeter Dunlap 	uint16_t		tpgt_tag;
147bf604c64SPeter Dunlap } it_tpgt_t;
148bf604c64SPeter Dunlap 
149bf604c64SPeter Dunlap /*
150bf604c64SPeter Dunlap  * An iSCSI target node is represented by an it_tgt_structure.  Each
151bf604c64SPeter Dunlap  * target node includes a list of associated target portal group tags
152bf604c64SPeter Dunlap  * and a list of properties.
153bf604c64SPeter Dunlap  *
154bf604c64SPeter Dunlap  *  tgt_name		The iSCSI target node name in either IQN or EUI
155bf604c64SPeter Dunlap  *			format (see RFC3720).
156bf604c64SPeter Dunlap  *  tgt_generation	Generation number which is incremented each time
157bf604c64SPeter Dunlap  *			the structure changes.
158bf604c64SPeter Dunlap  *  tgt_next		Next target in the list of targets.  If tgt_next
159bf604c64SPeter Dunlap  *			is NULL, then this is the last target in the list.
160bf604c64SPeter Dunlap  *  tgt_tpgt_list	A linked list representing the current target
161bf604c64SPeter Dunlap  *			portal group tags associated with this target.
162bf604c64SPeter Dunlap  *  tgt_tpgt_count	The number of currently defined target portal
163bf604c64SPeter Dunlap  *			group tags.
164bf604c64SPeter Dunlap  *  tgt_properties	An nvlist representation of the properties
165bf604c64SPeter Dunlap  *			associated with this target.  This list can be
166bf604c64SPeter Dunlap  *			manipulated using libnvpair(3lib), and should be
167bf604c64SPeter Dunlap  *			validated and stored using it_tgt_setprop().
168bf604c64SPeter Dunlap  *
169bf604c64SPeter Dunlap  * Target nvlist Properties:
170bf604c64SPeter Dunlap  *
171bf604c64SPeter Dunlap  *  nvlist Key		Type		Valid Values
172bf604c64SPeter Dunlap  *  --------------------------------------------------------------------
173bf604c64SPeter Dunlap  *  targetchapuser	string		any string or "none" to remove
174bf604c64SPeter Dunlap  *  targetchapsecret	string		string of at least 12 characters
175bf604c64SPeter Dunlap  *					but not more than 255 characters.
176bf604c64SPeter Dunlap  *					secret will be base64 encoded when
177bf604c64SPeter Dunlap  *					stored.
178bf604c64SPeter Dunlap  *  alias		string		any string or "none" to remove
179bf604c64SPeter Dunlap  *  auth		string		"radius", "chap", or "none"
180bf604c64SPeter Dunlap  *
181bf604c64SPeter Dunlap  */
182bf604c64SPeter Dunlap typedef struct it_tgt_s {
183bf604c64SPeter Dunlap 	char			tgt_name[MAX_ISCSI_NODENAMELEN];
184bf604c64SPeter Dunlap 	uint64_t		tgt_generation;
185bf604c64SPeter Dunlap 	struct it_tgt_s		*tgt_next;
186bf604c64SPeter Dunlap 	it_tpgt_t		*tgt_tpgt_list;
187bf604c64SPeter Dunlap 	uint32_t		tgt_tpgt_count;
188bf604c64SPeter Dunlap 	nvlist_t		*tgt_properties;
189bf604c64SPeter Dunlap } it_tgt_t;
190bf604c64SPeter Dunlap 
191bf604c64SPeter Dunlap /*
192bf604c64SPeter Dunlap  * A target portal is represented by an IP address and a listening
193bf604c64SPeter Dunlap  * TCP port.
194bf604c64SPeter Dunlap  *
195bf604c64SPeter Dunlap  *  portal_addr		sockaddr_storage structure representing the
196bf604c64SPeter Dunlap  *			IPv4 or IPv6 address and TCP port associated
197bf604c64SPeter Dunlap  *			with the portal.
198bf604c64SPeter Dunlap  *  portal_next		Next portal in the list of portals.  If
199bf604c64SPeter Dunlap  *			portal_next is NULL, this is the last portal
200bf604c64SPeter Dunlap  *			in the list.
201bf604c64SPeter Dunlap  */
202bf604c64SPeter Dunlap typedef struct it_portal_s {
203bf604c64SPeter Dunlap 	struct sockaddr_storage portal_addr;
204*42bf653bSPeter Gill 	struct it_portal_s	*portal_next;
205bf604c64SPeter Dunlap } it_portal_t;
206bf604c64SPeter Dunlap 
207bf604c64SPeter Dunlap /*
208bf604c64SPeter Dunlap  * A portal is an IP address and TCP port and a portal group is a set
209bf604c64SPeter Dunlap  * of portals.  Each defined portal belongs to exactly one portal group.
210bf604c64SPeter Dunlap  * Applications can associate a target portal group with a particular
211bf604c64SPeter Dunlap  * target using a target portal group name.  Initiators can only connect
212bf604c64SPeter Dunlap  * to targets through the portals associated with the target's target
213bf604c64SPeter Dunlap  * portal group tags.
214bf604c64SPeter Dunlap  *
215bf604c64SPeter Dunlap  *  tpg_name		Identifier for the target portal group.
216bf604c64SPeter Dunlap  *  tpg_generation	Generation number which is incremented each
217bf604c64SPeter Dunlap  *			time this structure changes.
218bf604c64SPeter Dunlap  *  tpg_next		Next target portal group in the list of target
219bf604c64SPeter Dunlap  *			portal groups.  If tpg_next is NULL, this is the
220bf604c64SPeter Dunlap  *			last target portal group in the list.
221bf604c64SPeter Dunlap  *  tpg_portal_count	Number of it_portal_t structures in the list.
222bf604c64SPeter Dunlap  *  tpg_portal_list	Linked list of it_portal_t structures.
223bf604c64SPeter Dunlap  */
224bf604c64SPeter Dunlap typedef struct it_tpg_s {
225bf604c64SPeter Dunlap 	char			tpg_name[MAX_TPG_NAMELEN];
226bf604c64SPeter Dunlap 	uint64_t		tpg_generation;
227bf604c64SPeter Dunlap 	struct it_tpg_s		*tpg_next;
228bf604c64SPeter Dunlap 	uint32_t		tpg_portal_count;
229bf604c64SPeter Dunlap 	it_portal_t		*tpg_portal_list;
230bf604c64SPeter Dunlap } it_tpg_t;
231bf604c64SPeter Dunlap 
232bf604c64SPeter Dunlap /*
233bf604c64SPeter Dunlap  * A context representing a remote iSCSI initiator node.  The purpose
234bf604c64SPeter Dunlap  * of this structure is to maintain information specific to a remote
235bf604c64SPeter Dunlap  * initiator such as the CHAP username and CHAP secret.
236bf604c64SPeter Dunlap  *
237bf604c64SPeter Dunlap  *  ini_name		the iSCSI node name of the remote initiator.
238bf604c64SPeter Dunlap  *  ini_generation	Generation number which is incremented each
239bf604c64SPeter Dunlap  *			time this structure changes.
240bf604c64SPeter Dunlap  *  ini_next		Next initiator in the list of initiators.
241bf604c64SPeter Dunlap  *			If ini_next is NULL, this is the last initiator
242bf604c64SPeter Dunlap  *			in the list.
243bf604c64SPeter Dunlap  *  ini_properties	Name/Value list containing the properties
244bf604c64SPeter Dunlap  *			associated with the initiator context.  This list
245bf604c64SPeter Dunlap  *			can be manipulated using libnvpair(3lib), and should
246bf604c64SPeter Dunlap  *			be validated and stored using it_ini_setprop().
247bf604c64SPeter Dunlap  *
248bf604c64SPeter Dunlap  * Initiator nvlist Properties:
249bf604c64SPeter Dunlap  *
250bf604c64SPeter Dunlap  *  nvlist Key		Type		Valid Values
251bf604c64SPeter Dunlap  *  --------------------------------------------------------------------
252bf604c64SPeter Dunlap  *  chapuser		string		any string
253bf604c64SPeter Dunlap  *  chapsecret		string		string of at least 12 characters
254bf604c64SPeter Dunlap  *					but not more than 255 characters.
255bf604c64SPeter Dunlap  *					secret will be base64 encoded when
256bf604c64SPeter Dunlap  *					stored.
257bf604c64SPeter Dunlap  */
258bf604c64SPeter Dunlap typedef struct it_ini_s {
259bf604c64SPeter Dunlap 	char		ini_name[MAX_ISCSI_NODENAMELEN];
260bf604c64SPeter Dunlap 	uint64_t	ini_generation;
261bf604c64SPeter Dunlap 	struct it_ini_s	*ini_next;
262bf604c64SPeter Dunlap 	nvlist_t	*ini_properties;
263bf604c64SPeter Dunlap } it_ini_t;
264bf604c64SPeter Dunlap 
265bf604c64SPeter Dunlap 
266bf604c64SPeter Dunlap /*
267bf604c64SPeter Dunlap  * This structure represents a complete configuration for the iscsit
268bf604c64SPeter Dunlap  * port provider.  In addition to the global configuration, it_config_t
269bf604c64SPeter Dunlap  * includes lists of child objects including targets, target portal
270bf604c64SPeter Dunlap  * groups and initiator contexts.  Each object includes a "generation"
271bf604c64SPeter Dunlap  * value which is used by the iscsit kernel driver to identify changes
272bf604c64SPeter Dunlap  * from one configuration update to the next.
273bf604c64SPeter Dunlap  *
274bf604c64SPeter Dunlap  *  stmf_token		A uint64_t that contains the value returned from a
275bf604c64SPeter Dunlap  *			successful call to stmfGetProviderDataProt(3STMF).
276bf604c64SPeter Dunlap  *			This token is used to verify that the configuration
277bf604c64SPeter Dunlap  *			data persistently stored in COMSTAR has not been
278bf604c64SPeter Dunlap  *			modified since this version was loaded.
279bf604c64SPeter Dunlap  *  config_version	Version number for this configuration structure
280bf604c64SPeter Dunlap  *  config_tgt_list	Linked list of target contexts representing the
281bf604c64SPeter Dunlap  *			currently defined targets.  Applications can add
282bf604c64SPeter Dunlap  *			targets to or remove targets from this list using
283bf604c64SPeter Dunlap  *			the it_tgt_create and it_tgt_delete functions.
284bf604c64SPeter Dunlap  *  config_tgt_count	The number of currently defined targets.
285bf604c64SPeter Dunlap  *  config_tpg_list	Linked list of target portal group contexts.
286bf604c64SPeter Dunlap  *			Applications can add or remove target portal groups
287bf604c64SPeter Dunlap  *			to/from this list using the it_tpg_create and
288bf604c64SPeter Dunlap  *			it_tpg_delete functions.
289bf604c64SPeter Dunlap  *  config_tpg_count	The number of currently defined target portal groups
290bf604c64SPeter Dunlap  *  config_ini_list	Linked list of initiator contexts.  Applications
291bf604c64SPeter Dunlap  *			can add initiator contexts or remove initiator
292bf604c64SPeter Dunlap  *			contexts from this list using the it_ini_create
293bf604c64SPeter Dunlap  *			and it_ini_delete functions.
294bf604c64SPeter Dunlap  *  config_ini_count	The number of currently defined initiator contexts.
295bf604c64SPeter Dunlap  *  config_global_properties
296bf604c64SPeter Dunlap  *			Name/Value list representing the current global
297bf604c64SPeter Dunlap  *			property settings.  This list can be manipulated
298bf604c64SPeter Dunlap  *			using libnvpair(3lib), and should be validated
299bf604c64SPeter Dunlap  *			and stored using it_config_setprop().
300bf604c64SPeter Dunlap  *  config_isns_svr_list
301bf604c64SPeter Dunlap  *			Linked list of currently defined iSNS servers.
302bf604c64SPeter Dunlap  *			Applications can add or remove iSNS servers by
303bf604c64SPeter Dunlap  *			using the it_config_setprop() function and changing
304bf604c64SPeter Dunlap  *			the array of iSNS servers stored in the "isnsserver"
305bf604c64SPeter Dunlap  *			property.
306bf604c64SPeter Dunlap  *  config_isns_svr_count
307bf604c64SPeter Dunlap  *			The number of currently defined iSNS servers.
308bf604c64SPeter Dunlap  *
309bf604c64SPeter Dunlap  * Global nvlist Properties:
310bf604c64SPeter Dunlap  *
311bf604c64SPeter Dunlap  *  nvlist Key		Type		Valid Values
312bf604c64SPeter Dunlap  *  --------------------------------------------------------------------
313bf604c64SPeter Dunlap  *  alias		string		any string
314bf604c64SPeter Dunlap  *  auth		string		"radius", "chap", or "none"
315bf604c64SPeter Dunlap  *  isns		boolean		B_TRUE, B_FALSE
316bf604c64SPeter Dunlap  *  isnsserver		string array	Array of portal specifications of
317bf604c64SPeter Dunlap  *					the form IPaddress:port.  Port
318bf604c64SPeter Dunlap  *					is optional; if not specified, the
319bf604c64SPeter Dunlap  *					default iSNS port number of 3205 will
320bf604c64SPeter Dunlap  *					be used.  IPv6 addresses should
321bf604c64SPeter Dunlap  *					be enclosed in square brackets '[' ']'.
322bf604c64SPeter Dunlap  *					If "none" is specified, all defined
323bf604c64SPeter Dunlap  *					iSNS servers will be removed from the
324bf604c64SPeter Dunlap  *					configuration.
325bf604c64SPeter Dunlap  *  radiusserver	string		IPaddress:port specification as
326bf604c64SPeter Dunlap  *					described for 'isnsserver'.
327bf604c64SPeter Dunlap  *  radiussecret	string		string of at least 12 characters
328bf604c64SPeter Dunlap  *					but not more than 255 characters.
329bf604c64SPeter Dunlap  *					secret will be base64 encoded when
330bf604c64SPeter Dunlap  *					stored.
331bf604c64SPeter Dunlap  */
332bf604c64SPeter Dunlap typedef struct it_config_s {
333bf604c64SPeter Dunlap 	uint64_t		stmf_token;
334bf604c64SPeter Dunlap 	uint32_t		config_version;
335bf604c64SPeter Dunlap 	it_tgt_t		*config_tgt_list;
336bf604c64SPeter Dunlap 	uint32_t		config_tgt_count;
337bf604c64SPeter Dunlap 	it_tpg_t		*config_tpg_list;
338bf604c64SPeter Dunlap 	uint32_t		config_tpg_count;
339bf604c64SPeter Dunlap 	it_ini_t		*config_ini_list;
340bf604c64SPeter Dunlap 	uint32_t		config_ini_count;
341bf604c64SPeter Dunlap 	it_portal_t		*config_isns_svr_list;
342bf604c64SPeter Dunlap 	uint32_t		config_isns_svr_count;
343bf604c64SPeter Dunlap 	nvlist_t		*config_global_properties;
344bf604c64SPeter Dunlap } it_config_t;
345bf604c64SPeter Dunlap 
346bf604c64SPeter Dunlap 
347a6d42e7dSPeter Dunlap /*  Functions to convert iSCSI target structures to/from nvlists. */
348a6d42e7dSPeter Dunlap int
349a6d42e7dSPeter Dunlap it_config_to_nv(it_config_t *cfg, nvlist_t **nvl);
350a6d42e7dSPeter Dunlap 
351a6d42e7dSPeter Dunlap /*
352a6d42e7dSPeter Dunlap  * nvlist version of config is 3 list-of-list, + 1 proplist.  arrays
353a6d42e7dSPeter Dunlap  * are interesting, but lists-of-lists are more useful when doing
354a6d42e7dSPeter Dunlap  * individual lookups when we later add support for it.  Also, no
355a6d42e7dSPeter Dunlap  * need to store name in individual struct representation.
356a6d42e7dSPeter Dunlap  */
357a6d42e7dSPeter Dunlap int
358a6d42e7dSPeter Dunlap it_nv_to_config(nvlist_t *nvl, it_config_t **cfg);
359a6d42e7dSPeter Dunlap 
360a6d42e7dSPeter Dunlap int
361a6d42e7dSPeter Dunlap it_nv_to_tgtlist(nvlist_t *nvl, uint32_t *count, it_tgt_t **tgtlist);
362a6d42e7dSPeter Dunlap 
363a6d42e7dSPeter Dunlap int
364a6d42e7dSPeter Dunlap it_tgtlist_to_nv(it_tgt_t *tgtlist, nvlist_t **nvl);
365a6d42e7dSPeter Dunlap 
366a6d42e7dSPeter Dunlap int
367a6d42e7dSPeter Dunlap it_tgt_to_nv(it_tgt_t *tgt, nvlist_t **nvl);
368a6d42e7dSPeter Dunlap 
369a6d42e7dSPeter Dunlap int
370a6d42e7dSPeter Dunlap it_nv_to_tgt(nvlist_t *nvl, char *name, it_tgt_t **tgt);
371a6d42e7dSPeter Dunlap 
372a6d42e7dSPeter Dunlap int
373a6d42e7dSPeter Dunlap it_tpgt_to_nv(it_tpgt_t *tpgt, nvlist_t **nvl);
374a6d42e7dSPeter Dunlap 
375a6d42e7dSPeter Dunlap int
376a6d42e7dSPeter Dunlap it_nv_to_tpgt(nvlist_t *nvl, char *name, it_tpgt_t **tpgt);
377a6d42e7dSPeter Dunlap 
378a6d42e7dSPeter Dunlap int
379a6d42e7dSPeter Dunlap it_tpgtlist_to_nv(it_tpgt_t *tpgtlist, nvlist_t **nvl);
380a6d42e7dSPeter Dunlap 
381a6d42e7dSPeter Dunlap int
382a6d42e7dSPeter Dunlap it_nv_to_tpgtlist(nvlist_t *nvl, uint32_t *count, it_tpgt_t **tpgtlist);
383a6d42e7dSPeter Dunlap 
384a6d42e7dSPeter Dunlap int
385a6d42e7dSPeter Dunlap it_tpg_to_nv(it_tpg_t *tpg, nvlist_t **nvl);
386a6d42e7dSPeter Dunlap 
387a6d42e7dSPeter Dunlap int
388a6d42e7dSPeter Dunlap it_nv_to_tpg(nvlist_t *nvl, char *name, it_tpg_t **tpg);
389a6d42e7dSPeter Dunlap 
390a6d42e7dSPeter Dunlap int
391a6d42e7dSPeter Dunlap it_tpglist_to_nv(it_tpg_t *tpglist, nvlist_t **nvl);
392a6d42e7dSPeter Dunlap 
393a6d42e7dSPeter Dunlap int
394a6d42e7dSPeter Dunlap it_nv_to_tpglist(nvlist_t *nvl, uint32_t *count, it_tpg_t **tpglist);
395a6d42e7dSPeter Dunlap 
396a6d42e7dSPeter Dunlap int
397a6d42e7dSPeter Dunlap it_ini_to_nv(it_ini_t *ini, nvlist_t **nvl);
398a6d42e7dSPeter Dunlap 
399a6d42e7dSPeter Dunlap int
400a6d42e7dSPeter Dunlap it_nv_to_ini(nvlist_t *nvl, char *name, it_ini_t **ini);
401a6d42e7dSPeter Dunlap 
402a6d42e7dSPeter Dunlap int
403a6d42e7dSPeter Dunlap it_inilist_to_nv(it_ini_t *inilist, nvlist_t **nvl);
404a6d42e7dSPeter Dunlap 
405a6d42e7dSPeter Dunlap int
406a6d42e7dSPeter Dunlap it_nv_to_inilist(nvlist_t *nvl, uint32_t *count, it_ini_t **inilist);
407a6d42e7dSPeter Dunlap 
408a6d42e7dSPeter Dunlap it_tgt_t *
409a6d42e7dSPeter Dunlap it_tgt_lookup(it_config_t *cfg, char *tgt_name);
410a6d42e7dSPeter Dunlap 
411a6d42e7dSPeter Dunlap it_tpg_t *
412a6d42e7dSPeter Dunlap it_tpg_lookup(it_config_t *cfg, char *tpg_name);
413a6d42e7dSPeter Dunlap 
414a6d42e7dSPeter Dunlap it_portal_t *
415a6d42e7dSPeter Dunlap it_sns_svr_lookup(it_config_t *cfg, struct sockaddr_storage *sa);
416a6d42e7dSPeter Dunlap 
417a6d42e7dSPeter Dunlap it_portal_t *
418a6d42e7dSPeter Dunlap it_portal_lookup(it_tpg_t *cfg_tpg, struct sockaddr_storage *sa);
419a6d42e7dSPeter Dunlap 
420a6d42e7dSPeter Dunlap int
421a6d42e7dSPeter Dunlap it_sa_compare(struct sockaddr_storage *sa1, struct sockaddr_storage *sa2);
422a6d42e7dSPeter Dunlap 
423a6d42e7dSPeter Dunlap /*
424a6d42e7dSPeter Dunlap  * Convert a sockaddr to the string representation, suitable for
425a6d42e7dSPeter Dunlap  * storing in an nvlist or printing out in a list.
426a6d42e7dSPeter Dunlap  */
427a6d42e7dSPeter Dunlap int
428a6d42e7dSPeter Dunlap sockaddr_to_str(struct sockaddr_storage *sa, char **addr);
429a6d42e7dSPeter Dunlap 
430a6d42e7dSPeter Dunlap /*
431a6d42e7dSPeter Dunlap  * Convert a char string to a sockaddr structure
432a6d42e7dSPeter Dunlap  *
433a6d42e7dSPeter Dunlap  * default_port should be the port to be used, if not specified
434a6d42e7dSPeter Dunlap  * as part of the supplied string 'arg'.
435a6d42e7dSPeter Dunlap  */
436a6d42e7dSPeter Dunlap struct sockaddr_storage *
437a6d42e7dSPeter Dunlap it_common_convert_sa(char *arg, struct sockaddr_storage *buf,
438a6d42e7dSPeter Dunlap     uint32_t default_port);
439a6d42e7dSPeter Dunlap 
440a6d42e7dSPeter Dunlap /*
441a6d42e7dSPeter Dunlap  * Convert an string array of IP-addr:port to a portal list
442a6d42e7dSPeter Dunlap  */
443a6d42e7dSPeter Dunlap int
444a6d42e7dSPeter Dunlap it_array_to_portallist(char **arr, uint32_t count, uint32_t default_port,
445a6d42e7dSPeter Dunlap     it_portal_t **portallist, uint32_t *list_count);
446a6d42e7dSPeter Dunlap 
447a6d42e7dSPeter Dunlap /*
448a6d42e7dSPeter Dunlap  * Function:  it_config_free_cmn()
449a6d42e7dSPeter Dunlap  *
450a6d42e7dSPeter Dunlap  * Free any resources associated with the it_config_t structure.
451a6d42e7dSPeter Dunlap  *
452a6d42e7dSPeter Dunlap  * Parameters:
453a6d42e7dSPeter Dunlap  *    cfg       A C representation of the current iSCSI configuration
454a6d42e7dSPeter Dunlap  */
455a6d42e7dSPeter Dunlap void
456a6d42e7dSPeter Dunlap it_config_free_cmn(it_config_t *cfg);
457a6d42e7dSPeter Dunlap 
458a6d42e7dSPeter Dunlap /*
459a6d42e7dSPeter Dunlap  * Function:  it_tgt_free_cmn()
460a6d42e7dSPeter Dunlap  *
461a6d42e7dSPeter Dunlap  * Frees an it_tgt_t structure.  If tgt_next is not NULL, frees
462a6d42e7dSPeter Dunlap  * all structures in the list.
463a6d42e7dSPeter Dunlap  */
464a6d42e7dSPeter Dunlap void
465a6d42e7dSPeter Dunlap it_tgt_free_cmn(it_tgt_t *tgt);
466a6d42e7dSPeter Dunlap 
467a6d42e7dSPeter Dunlap /*
468a6d42e7dSPeter Dunlap  * Function:  it_tpgt_free_cmn()
469a6d42e7dSPeter Dunlap  *
470a6d42e7dSPeter Dunlap  * Deallocates resources of an it_tpgt_t structure.  If tpgt->next
471a6d42e7dSPeter Dunlap  * is not NULL, frees all members of the list.
472a6d42e7dSPeter Dunlap  */
473a6d42e7dSPeter Dunlap void
474a6d42e7dSPeter Dunlap it_tpgt_free_cmn(it_tpgt_t *tpgt);
475a6d42e7dSPeter Dunlap 
476a6d42e7dSPeter Dunlap /*
477a6d42e7dSPeter Dunlap  * Function:  it_tpg_free_cmn()
478a6d42e7dSPeter Dunlap  *
479a6d42e7dSPeter Dunlap  * Deallocates resources associated with an it_tpg_t structure.
480a6d42e7dSPeter Dunlap  * If tpg->next is not NULL, frees all members of the list.
481a6d42e7dSPeter Dunlap  */
482a6d42e7dSPeter Dunlap void
483a6d42e7dSPeter Dunlap it_tpg_free_cmn(it_tpg_t *tpg);
484a6d42e7dSPeter Dunlap 
485a6d42e7dSPeter Dunlap /*
486a6d42e7dSPeter Dunlap  * Function:  it_ini_free_cmn()
487a6d42e7dSPeter Dunlap  *
488a6d42e7dSPeter Dunlap  * Deallocates resources of an it_ini_t structure. If ini->next is
489a6d42e7dSPeter Dunlap  * not NULL, frees all members of the list.
490a6d42e7dSPeter Dunlap  */
491a6d42e7dSPeter Dunlap void
492a6d42e7dSPeter Dunlap it_ini_free_cmn(it_ini_t *ini);
493a6d42e7dSPeter Dunlap 
494a6d42e7dSPeter Dunlap /*
495a6d42e7dSPeter Dunlap  * Function:  iscsi_binary_to_base64_str()
496a6d42e7dSPeter Dunlap  *
497a6d42e7dSPeter Dunlap  * Encodes a byte array into a base64 string.
498a6d42e7dSPeter Dunlap  */
499a6d42e7dSPeter Dunlap int
500a6d42e7dSPeter Dunlap iscsi_binary_to_base64_str(uint8_t *in_buf, int in_buf_len,
501a6d42e7dSPeter Dunlap     char *base64_str_buf, int base64_buf_len);
502a6d42e7dSPeter Dunlap 
503a6d42e7dSPeter Dunlap /*
504a6d42e7dSPeter Dunlap  * Function:  iscsi_base64_str_to_binary()
505a6d42e7dSPeter Dunlap  *
506a6d42e7dSPeter Dunlap  * Decodes a base64 string into a byte array
507a6d42e7dSPeter Dunlap  */
508a6d42e7dSPeter Dunlap int
509a6d42e7dSPeter Dunlap iscsi_base64_str_to_binary(char *hstr, int hstr_len,
510a6d42e7dSPeter Dunlap     uint8_t *binary, int binary_buf_len, int *out_len);
511a6d42e7dSPeter Dunlap 
512a6d42e7dSPeter Dunlap #ifdef __cplusplus
513a6d42e7dSPeter Dunlap }
514a6d42e7dSPeter Dunlap #endif
515a6d42e7dSPeter Dunlap 
516a6d42e7dSPeter Dunlap #endif /* _ISCSIT_COMMON_H_ */
517