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*4558d122SViswanathan Kannappan  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
23a6d42e7dSPeter Dunlap  */
24a6d42e7dSPeter Dunlap #ifndef _ISNS_CLIENT_H_
25a6d42e7dSPeter Dunlap #define	_ISNS_CLIENT_H_
26a6d42e7dSPeter Dunlap 
27*4558d122SViswanathan Kannappan #include "iscsit.h"
28a6d42e7dSPeter Dunlap 
29a6d42e7dSPeter Dunlap /*
30a6d42e7dSPeter Dunlap  * List of iSNS servers with which we register.
31a6d42e7dSPeter Dunlap  */
32a6d42e7dSPeter Dunlap 
33a6d42e7dSPeter Dunlap typedef struct {
34a6d42e7dSPeter Dunlap 	int			svr_retry_count;
35a6d42e7dSPeter Dunlap 	struct sockaddr_storage	svr_sa;
36a6d42e7dSPeter Dunlap 	clock_t			svr_last_msg;
37a6d42e7dSPeter Dunlap 	list_node_t		svr_ln;
38bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint32_t		svr_registered:1,
39bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 				svr_reset_needed:1,
40bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 				svr_delete_needed:1,
41fada6495SPeter Cudhea - Sun Microsystems - Burlington, MA United States 				svr_targets_changed:1,
42fada6495SPeter Cudhea - Sun Microsystems - Burlington, MA United States 				svr_monitor_hold:1;
43bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint32_t		svr_last_target_index;
44e42a0851Speter dunlap 	uint32_t		svr_esi_interval;
45bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	avl_tree_t		svr_target_list;
46a6d42e7dSPeter Dunlap } iscsit_isns_svr_t;
47a6d42e7dSPeter Dunlap 
48a6d42e7dSPeter Dunlap /*
49a6d42e7dSPeter Dunlap  * Type of registration to perform (deregister, register, update)
50a6d42e7dSPeter Dunlap  */
51a6d42e7dSPeter Dunlap typedef enum {
52a6d42e7dSPeter Dunlap 	ISNS_DEREGISTER_TARGET = 0,
53a6d42e7dSPeter Dunlap 	ISNS_DEREGISTER_ALL,
54a6d42e7dSPeter Dunlap 	ISNS_REGISTER_TARGET,
55a6d42e7dSPeter Dunlap 	ISNS_REGISTER_ALL,
56bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	ISNS_MODIFY_TARGET
57a6d42e7dSPeter Dunlap } isns_reg_type_t;
58a6d42e7dSPeter Dunlap 
59a6d42e7dSPeter Dunlap /*
60a6d42e7dSPeter Dunlap  * This structure is used to keep state with regard to the RX threads used
61bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  * for ESI.
62a6d42e7dSPeter Dunlap  */
63a6d42e7dSPeter Dunlap 
64a6d42e7dSPeter Dunlap 
65a6d42e7dSPeter Dunlap typedef struct {
66a6d42e7dSPeter Dunlap 	kthread_t			*esi_thread;
67a6d42e7dSPeter Dunlap 	kt_did_t			esi_thread_did;
680f1702c5SYu Xiangning 	ksocket_t			esi_so;
69e42a0851Speter dunlap 	kmutex_t			esi_mutex;
70e42a0851Speter dunlap 	kcondvar_t			esi_cv;
71a6d42e7dSPeter Dunlap 	uint16_t			esi_port;
72e42a0851Speter dunlap 	boolean_t			esi_enabled;
73e42a0851Speter dunlap 	boolean_t			esi_valid;
74a6d42e7dSPeter Dunlap 	boolean_t			esi_thread_running;
75a6d42e7dSPeter Dunlap } isns_esi_tinfo_t;
76a6d42e7dSPeter Dunlap 
77e42a0851Speter dunlap 
78a6d42e7dSPeter Dunlap /*
79bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Portal list - both default portals from idm_get_ipaddr and portals
80bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  * defined in target port groups.
81a6d42e7dSPeter Dunlap  */
82a6d42e7dSPeter Dunlap 
83bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States typedef struct isns_portal_s {
84a6d42e7dSPeter Dunlap 	struct sockaddr_storage		portal_addr;
85bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	avl_node_t			portal_node;
86e42a0851Speter dunlap 	timespec_t			portal_esi_timestamp;
87bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	iscsit_portal_t			*portal_iscsit;	/* if in TPG */
88bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	boolean_t			portal_default; /* if in default */
89bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States } isns_portal_t;
90a6d42e7dSPeter Dunlap 
91bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
92bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States typedef struct isns_tpgt_addr_s {
93bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	list_node_t		portal_ln;
94bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	struct sockaddr_storage	portal_addr;
95bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States } isns_tpgt_addr_t;
96bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
97bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States typedef struct isns_tpgt_s {
98bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	list_node_t		ti_tpgt_ln;
99bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint16_t		ti_tpgt_tag;
100bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	list_t			ti_portal_list;
101bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States } isns_tpgt_t;
102bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
103bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States typedef struct isns_target_info_s {
104bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	idm_refcnt_t		ti_refcnt;
105bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	char			ti_tgt_name[MAX_ISCSI_NODENAMELEN];
106bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	char			ti_tgt_alias[MAX_ISCSI_NODENAMELEN];
107bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	list_t			ti_tpgt_list;
108bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States } isns_target_info_t;
109bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
110bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States /* Contents of isns_target_list and svr->svr_target_list */
111a6d42e7dSPeter Dunlap typedef struct isns_target_s {
112a6d42e7dSPeter Dunlap 	iscsit_tgt_t		*target;
113a6d42e7dSPeter Dunlap 	avl_node_t		target_node;
114a6d42e7dSPeter Dunlap 	boolean_t		target_registered;
115bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	boolean_t		target_update_needed;
116bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	boolean_t		target_delete_needed;
117bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 	isns_target_info_t	*target_info;
118a6d42e7dSPeter Dunlap } isns_target_t;
119a6d42e7dSPeter Dunlap 
120a6d42e7dSPeter Dunlap /*
121a6d42e7dSPeter Dunlap  * If no ESI request is received within this number of intervals, we'll
122a6d42e7dSPeter Dunlap  * try to re-register with the server.
123a6d42e7dSPeter Dunlap  */
124bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States #define	MAX_ESI_INTERVALS			3
125bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
126bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States /*
127bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Interval to ask the server to send us ESI probes, in seconds.
128bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  */
129bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States #define	ISNS_DEFAULT_ESI_INTERVAL		20
130bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
131bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States /*
132bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Registration Period (when not using ESI), in seconds. (15 min)
133bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  */
134bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States #define	ISNS_DEFAULT_REGISTRATION_PERIOD	900
135bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States 
136bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States /*
137bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Initial delay before sending first DevAttrReg message.
138bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States  */
139bdbe8dc6SPeter Cudhea - Sun Microsystems - Burlington, MA United States #define	ISNS_INITIAL_DELAY			5
140a6d42e7dSPeter Dunlap 
141a6d42e7dSPeter Dunlap it_cfg_status_t
142a6d42e7dSPeter Dunlap isnst_config_merge(it_config_t *cfg);
143a6d42e7dSPeter Dunlap 
144a6d42e7dSPeter Dunlap int iscsit_isns_init(iscsit_hostinfo_t *hostinfo);
145a6d42e7dSPeter Dunlap void iscsit_isns_fini();
146a6d42e7dSPeter Dunlap int iscsit_isns_register(iscsit_tgt_t *target);
147a6d42e7dSPeter Dunlap int iscsit_isns_deregister(iscsit_tgt_t *target);
148a6d42e7dSPeter Dunlap void iscsit_isns_target_update(iscsit_tgt_t *target);
149a6d42e7dSPeter Dunlap void iscsit_isns_portal_online(iscsit_portal_t *portal);
150a6d42e7dSPeter Dunlap void iscsit_isns_portal_offline(iscsit_portal_t *portal);
151a6d42e7dSPeter Dunlap 
152a6d42e7dSPeter Dunlap #endif /* _ISNS_CLIENT_H_ */
153