xref: /onnv-gate/usr/src/uts/common/sys/idm/idm.h (revision 11081:5c9c847827a4)
17978SPeter.Dunlap@Sun.COM /*
27978SPeter.Dunlap@Sun.COM  * CDDL HEADER START
37978SPeter.Dunlap@Sun.COM  *
47978SPeter.Dunlap@Sun.COM  * The contents of this file are subject to the terms of the
57978SPeter.Dunlap@Sun.COM  * Common Development and Distribution License (the "License").
67978SPeter.Dunlap@Sun.COM  * You may not use this file except in compliance with the License.
77978SPeter.Dunlap@Sun.COM  *
87978SPeter.Dunlap@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97978SPeter.Dunlap@Sun.COM  * or http://www.opensolaris.org/os/licensing.
107978SPeter.Dunlap@Sun.COM  * See the License for the specific language governing permissions
117978SPeter.Dunlap@Sun.COM  * and limitations under the License.
127978SPeter.Dunlap@Sun.COM  *
137978SPeter.Dunlap@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
147978SPeter.Dunlap@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157978SPeter.Dunlap@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
167978SPeter.Dunlap@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
177978SPeter.Dunlap@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
187978SPeter.Dunlap@Sun.COM  *
197978SPeter.Dunlap@Sun.COM  * CDDL HEADER END
207978SPeter.Dunlap@Sun.COM  */
217978SPeter.Dunlap@Sun.COM 
227978SPeter.Dunlap@Sun.COM /*
239162SPeter.Dunlap@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
247978SPeter.Dunlap@Sun.COM  * Use is subject to license terms.
257978SPeter.Dunlap@Sun.COM  */
267978SPeter.Dunlap@Sun.COM 
277978SPeter.Dunlap@Sun.COM #ifndef _IDM_H
287978SPeter.Dunlap@Sun.COM #define	_IDM_H
297978SPeter.Dunlap@Sun.COM 
307978SPeter.Dunlap@Sun.COM #ifdef	__cplusplus
317978SPeter.Dunlap@Sun.COM extern "C" {
327978SPeter.Dunlap@Sun.COM #endif
337978SPeter.Dunlap@Sun.COM 
347978SPeter.Dunlap@Sun.COM typedef enum {
357978SPeter.Dunlap@Sun.COM 	IDM_STATUS_SUCCESS = 0,
367978SPeter.Dunlap@Sun.COM 	IDM_STATUS_FAIL,
377978SPeter.Dunlap@Sun.COM 	IDM_STATUS_NORESOURCES,
387978SPeter.Dunlap@Sun.COM 	IDM_STATUS_REJECT,
397978SPeter.Dunlap@Sun.COM 	IDM_STATUS_IO,
407978SPeter.Dunlap@Sun.COM 	IDM_STATUS_ABORTED,
417978SPeter.Dunlap@Sun.COM 	IDM_STATUS_SUSPENDED,
427978SPeter.Dunlap@Sun.COM 	IDM_STATUS_HEADER_DIGEST,
437978SPeter.Dunlap@Sun.COM 	IDM_STATUS_DATA_DIGEST,
449162SPeter.Dunlap@Sun.COM 	IDM_STATUS_PROTOCOL_ERROR,
459162SPeter.Dunlap@Sun.COM 	IDM_STATUS_LOGIN_FAIL
467978SPeter.Dunlap@Sun.COM } idm_status_t;
477978SPeter.Dunlap@Sun.COM 
489162SPeter.Dunlap@Sun.COM 
497978SPeter.Dunlap@Sun.COM typedef enum {
507978SPeter.Dunlap@Sun.COM 	CN_CONNECT_ACCEPT = 1,	/* Target only */
519162SPeter.Dunlap@Sun.COM 	CN_LOGIN_FAIL,
527978SPeter.Dunlap@Sun.COM 	CN_READY_FOR_LOGIN,	/* Initiator only */
537978SPeter.Dunlap@Sun.COM 	CN_FFP_ENABLED,
547978SPeter.Dunlap@Sun.COM 	CN_FFP_DISABLED,
557978SPeter.Dunlap@Sun.COM 	CN_CONNECT_LOST,
569162SPeter.Dunlap@Sun.COM 	CN_CONNECT_DESTROY,
579162SPeter.Dunlap@Sun.COM 	CN_CONNECT_FAIL,
589162SPeter.Dunlap@Sun.COM 	CN_MAX
597978SPeter.Dunlap@Sun.COM } idm_client_notify_t;
607978SPeter.Dunlap@Sun.COM 
619162SPeter.Dunlap@Sun.COM #ifdef IDM_CN_NOTIFY_STRINGS
629162SPeter.Dunlap@Sun.COM static const char *idm_cn_strings[CN_MAX + 1] = {
639162SPeter.Dunlap@Sun.COM 	"CN_UNDEFINED",
649162SPeter.Dunlap@Sun.COM 	"CN_CONNECT_ACCEPT",
659162SPeter.Dunlap@Sun.COM 	"CN_LOGIN_FAIL",
669162SPeter.Dunlap@Sun.COM 	"CN_READY_FOR_LOGIN",
679162SPeter.Dunlap@Sun.COM 	"CN_FFP_ENABLED",
689162SPeter.Dunlap@Sun.COM 	"CN_FFP_DISABLED",
699162SPeter.Dunlap@Sun.COM 	"CN_CONNECT_LOST",
709162SPeter.Dunlap@Sun.COM 	"CN_CONNECT_DESTROY",
719162SPeter.Dunlap@Sun.COM 	"CN_CONNECT_FAIL",
729162SPeter.Dunlap@Sun.COM 	"CN_MAX"
739162SPeter.Dunlap@Sun.COM };
749162SPeter.Dunlap@Sun.COM #endif
759162SPeter.Dunlap@Sun.COM 
767978SPeter.Dunlap@Sun.COM typedef enum {
777978SPeter.Dunlap@Sun.COM 	FD_CONN_FAIL,
787978SPeter.Dunlap@Sun.COM 	FD_CONN_LOGOUT,
797978SPeter.Dunlap@Sun.COM 	FD_SESS_LOGOUT
807978SPeter.Dunlap@Sun.COM } idm_ffp_disable_t;
817978SPeter.Dunlap@Sun.COM 
827978SPeter.Dunlap@Sun.COM typedef enum {
837978SPeter.Dunlap@Sun.COM 	AT_INTERNAL_SUSPEND,
847978SPeter.Dunlap@Sun.COM 	AT_INTERNAL_ABORT,
857978SPeter.Dunlap@Sun.COM 	AT_TASK_MGMT_ABORT
867978SPeter.Dunlap@Sun.COM } idm_abort_type_t;
877978SPeter.Dunlap@Sun.COM 
887978SPeter.Dunlap@Sun.COM typedef enum {
897978SPeter.Dunlap@Sun.COM 	TASK_IDLE,
907978SPeter.Dunlap@Sun.COM 	TASK_ACTIVE,
917978SPeter.Dunlap@Sun.COM 	TASK_SUSPENDING,
927978SPeter.Dunlap@Sun.COM 	TASK_SUSPENDED,
937978SPeter.Dunlap@Sun.COM 	TASK_ABORTING,
947978SPeter.Dunlap@Sun.COM 	TASK_ABORTED,
958062SPeter.Dunlap@Sun.COM 	TASK_COMPLETE,
968062SPeter.Dunlap@Sun.COM 	TASK_MAX_STATE
977978SPeter.Dunlap@Sun.COM } idm_task_state_t;
987978SPeter.Dunlap@Sun.COM 
998062SPeter.Dunlap@Sun.COM #ifdef IDM_TASK_SM_STRINGS
1008062SPeter.Dunlap@Sun.COM static const char *idm_ts_name[TASK_MAX_STATE+1] = {
1018062SPeter.Dunlap@Sun.COM 	"TASK_IDLE",
1028062SPeter.Dunlap@Sun.COM 	"TASK_ACTIVE",
1038062SPeter.Dunlap@Sun.COM 	"TASK_SUSPENDING",
1048062SPeter.Dunlap@Sun.COM 	"TASK_SUSPENDED",
1058062SPeter.Dunlap@Sun.COM 	"TASK_ABORTING",
1068062SPeter.Dunlap@Sun.COM 	"TASK_ABORTED",
1078062SPeter.Dunlap@Sun.COM 	"TASK_COMPLETE",
1088062SPeter.Dunlap@Sun.COM 	"TASK_MAX_STATE"
1098062SPeter.Dunlap@Sun.COM };
1108062SPeter.Dunlap@Sun.COM #endif
1118062SPeter.Dunlap@Sun.COM 
1127978SPeter.Dunlap@Sun.COM typedef enum {
1137978SPeter.Dunlap@Sun.COM 	KV_HANDLED = 0,
1147978SPeter.Dunlap@Sun.COM 	KV_HANDLED_NO_TRANSIT,
1157978SPeter.Dunlap@Sun.COM 	KV_UNHANDLED,
1167978SPeter.Dunlap@Sun.COM 	KV_TARGET_ONLY,
1177978SPeter.Dunlap@Sun.COM 	KV_NO_RESOURCES,
1187978SPeter.Dunlap@Sun.COM 	KV_INTERNAL_ERROR,
1197978SPeter.Dunlap@Sun.COM 	KV_VALUE_ERROR,
1207978SPeter.Dunlap@Sun.COM 	KV_MISSING_FIELDS,
1217978SPeter.Dunlap@Sun.COM 	KV_AUTH_FAILED
1227978SPeter.Dunlap@Sun.COM } kv_status_t;
1237978SPeter.Dunlap@Sun.COM 
1247978SPeter.Dunlap@Sun.COM /*
1257978SPeter.Dunlap@Sun.COM  * Request structures
1267978SPeter.Dunlap@Sun.COM  */
1277978SPeter.Dunlap@Sun.COM 
1287978SPeter.Dunlap@Sun.COM /* Defined in idm_impl.h */
1297978SPeter.Dunlap@Sun.COM struct idm_conn_s;
1307978SPeter.Dunlap@Sun.COM struct idm_svc_s;
1317978SPeter.Dunlap@Sun.COM struct idm_buf_s;
1327978SPeter.Dunlap@Sun.COM struct idm_pdu_s;
1337978SPeter.Dunlap@Sun.COM struct idm_task_s;
1347978SPeter.Dunlap@Sun.COM 
1357978SPeter.Dunlap@Sun.COM typedef idm_status_t (idm_client_notify_cb_t)(
1367978SPeter.Dunlap@Sun.COM     struct idm_conn_s *ic, idm_client_notify_t cn, uintptr_t data);
1377978SPeter.Dunlap@Sun.COM 
1387978SPeter.Dunlap@Sun.COM typedef void (idm_rx_pdu_cb_t)(struct idm_conn_s *ic, struct idm_pdu_s *pdu);
1397978SPeter.Dunlap@Sun.COM 
1407978SPeter.Dunlap@Sun.COM typedef void (idm_rx_pdu_error_cb_t)(struct idm_conn_s *ic,
1417978SPeter.Dunlap@Sun.COM     struct idm_pdu_s *pdu, idm_status_t status);
1427978SPeter.Dunlap@Sun.COM 
1437978SPeter.Dunlap@Sun.COM typedef void (idm_buf_cb_t)(struct idm_buf_s *idb, idm_status_t status);
1447978SPeter.Dunlap@Sun.COM 
1457978SPeter.Dunlap@Sun.COM typedef void (idm_pdu_cb_t)(struct idm_pdu_s *pdu, idm_status_t status);
1467978SPeter.Dunlap@Sun.COM 
1477978SPeter.Dunlap@Sun.COM typedef void (idm_task_cb_t)(struct idm_task_s *task, idm_status_t status);
1487978SPeter.Dunlap@Sun.COM 
1497978SPeter.Dunlap@Sun.COM typedef void (idm_build_hdr_cb_t)(
1507978SPeter.Dunlap@Sun.COM     struct idm_task_s *task, struct idm_pdu_s *pdu, uint8_t opcode);
1517978SPeter.Dunlap@Sun.COM 
152*11081SPriya.Krishnan@Sun.COM typedef void (idm_update_statsn_cb_t)(
153*11081SPriya.Krishnan@Sun.COM     struct idm_task_s *task, struct idm_pdu_s *pdu);
154*11081SPriya.Krishnan@Sun.COM 
1559586SPeter.Dunlap@Sun.COM typedef void (idm_keepalive_cb_t)(struct idm_conn_s *ic);
1569586SPeter.Dunlap@Sun.COM 
1577978SPeter.Dunlap@Sun.COM typedef union idm_sockaddr {
1587978SPeter.Dunlap@Sun.COM 	struct sockaddr		sin;
1597978SPeter.Dunlap@Sun.COM 	struct sockaddr_in	sin4;
1607978SPeter.Dunlap@Sun.COM 	struct sockaddr_in6	sin6;
1617978SPeter.Dunlap@Sun.COM } idm_sockaddr_t;
1627978SPeter.Dunlap@Sun.COM 
1637978SPeter.Dunlap@Sun.COM #define	SIZEOF_SOCKADDR(so)		\
1647978SPeter.Dunlap@Sun.COM 	((so)->sa_family == AF_INET ?	\
1657978SPeter.Dunlap@Sun.COM 	sizeof (struct sockaddr_in) : sizeof (struct sockaddr_in6))
1667978SPeter.Dunlap@Sun.COM 
1677978SPeter.Dunlap@Sun.COM typedef struct {
1687978SPeter.Dunlap@Sun.COM 	idm_rx_pdu_cb_t		*icb_rx_scsi_cmd;
1697978SPeter.Dunlap@Sun.COM 	idm_rx_pdu_cb_t		*icb_rx_scsi_rsp;
1707978SPeter.Dunlap@Sun.COM 	idm_rx_pdu_cb_t		*icb_rx_misc;
1717978SPeter.Dunlap@Sun.COM 	idm_rx_pdu_error_cb_t	*icb_rx_error;
1727978SPeter.Dunlap@Sun.COM 	idm_task_cb_t		*icb_task_aborted;
1737978SPeter.Dunlap@Sun.COM 	idm_client_notify_cb_t	*icb_client_notify;
1747978SPeter.Dunlap@Sun.COM 	idm_build_hdr_cb_t	*icb_build_hdr;
175*11081SPriya.Krishnan@Sun.COM 	idm_update_statsn_cb_t	*icb_update_statsn; /* advance statsn */
1769586SPeter.Dunlap@Sun.COM 	idm_keepalive_cb_t	*icb_keepalive;
1777978SPeter.Dunlap@Sun.COM } idm_conn_ops_t;
1787978SPeter.Dunlap@Sun.COM 
1797978SPeter.Dunlap@Sun.COM typedef struct {
1807978SPeter.Dunlap@Sun.COM 	int			cr_domain;
1817978SPeter.Dunlap@Sun.COM 	int			cr_type;
1827978SPeter.Dunlap@Sun.COM 	int			cr_protocol;
1837978SPeter.Dunlap@Sun.COM 	boolean_t		cr_bound;
1847978SPeter.Dunlap@Sun.COM 	idm_sockaddr_t		cr_bound_addr;
1857978SPeter.Dunlap@Sun.COM 	idm_sockaddr_t		cr_ini_dst_addr;
1867978SPeter.Dunlap@Sun.COM 	ldi_ident_t		cr_li;
1877978SPeter.Dunlap@Sun.COM 	idm_conn_ops_t		icr_conn_ops;
18810822SJack.Meng@Sun.COM 	boolean_t		cr_boot_conn;
1897978SPeter.Dunlap@Sun.COM } idm_conn_req_t;
1907978SPeter.Dunlap@Sun.COM 
1917978SPeter.Dunlap@Sun.COM typedef struct {
1927978SPeter.Dunlap@Sun.COM 	uint16_t		sr_port;
1937978SPeter.Dunlap@Sun.COM 	ldi_ident_t		sr_li;
1947978SPeter.Dunlap@Sun.COM 	idm_conn_ops_t		sr_conn_ops;
1957978SPeter.Dunlap@Sun.COM } idm_svc_req_t;
1967978SPeter.Dunlap@Sun.COM 
1977978SPeter.Dunlap@Sun.COM 
1987978SPeter.Dunlap@Sun.COM /* This is not how other networking code handles this */
1997978SPeter.Dunlap@Sun.COM typedef struct {
2007978SPeter.Dunlap@Sun.COM 	union {
2017978SPeter.Dunlap@Sun.COM 		struct in_addr	in4;
2027978SPeter.Dunlap@Sun.COM 		struct in6_addr	in6;
2037978SPeter.Dunlap@Sun.COM 	} i_addr;
2047978SPeter.Dunlap@Sun.COM 	/* i_insize determines which is valid in the union above */
2057978SPeter.Dunlap@Sun.COM 	int			i_insize;
2067978SPeter.Dunlap@Sun.COM } idm_ipaddr_t;
2077978SPeter.Dunlap@Sun.COM 
2087978SPeter.Dunlap@Sun.COM typedef struct {
2097978SPeter.Dunlap@Sun.COM 	idm_ipaddr_t		a_addr;
2107978SPeter.Dunlap@Sun.COM 	uint32_t		a_port,
2117978SPeter.Dunlap@Sun.COM 				a_oid;
2127978SPeter.Dunlap@Sun.COM } idm_addr_t;
2137978SPeter.Dunlap@Sun.COM 
2147978SPeter.Dunlap@Sun.COM typedef struct {
2157978SPeter.Dunlap@Sun.COM 	uint32_t		al_vers,			/* In */
2167978SPeter.Dunlap@Sun.COM 				al_oid;				/* In */
2177978SPeter.Dunlap@Sun.COM 	uint32_t		al_in_cnt;			/* In */
2187978SPeter.Dunlap@Sun.COM 	uint32_t		al_out_cnt;			/* Out */
2197978SPeter.Dunlap@Sun.COM 	uint32_t		al_tpgt;			/* Out */
2207978SPeter.Dunlap@Sun.COM 	idm_addr_t		al_addrs[1];			/* Out */
2217978SPeter.Dunlap@Sun.COM } idm_addr_list_t;
2227978SPeter.Dunlap@Sun.COM 
2237978SPeter.Dunlap@Sun.COM /*
2247978SPeter.Dunlap@Sun.COM  * State machine auditing
2257978SPeter.Dunlap@Sun.COM  */
2267978SPeter.Dunlap@Sun.COM 
2277978SPeter.Dunlap@Sun.COM #define	SM_AUDIT_BUF_MAX_REC	32
2287978SPeter.Dunlap@Sun.COM 
2297978SPeter.Dunlap@Sun.COM typedef enum {
2307978SPeter.Dunlap@Sun.COM 	SAR_UNDEFINED = 0,
2317978SPeter.Dunlap@Sun.COM 	SAR_STATE_EVENT,
2327978SPeter.Dunlap@Sun.COM 	SAR_STATE_CHANGE
2337978SPeter.Dunlap@Sun.COM } sm_audit_record_type_t;
2347978SPeter.Dunlap@Sun.COM 
2357978SPeter.Dunlap@Sun.COM typedef enum {
2367978SPeter.Dunlap@Sun.COM 	SAS_UNDEFINED = 0,
2377978SPeter.Dunlap@Sun.COM 	SAS_IDM_CONN,
2387978SPeter.Dunlap@Sun.COM 	SAS_IDM_TASK,
2397978SPeter.Dunlap@Sun.COM 	SAS_ISCSIT_TGT,
2407978SPeter.Dunlap@Sun.COM 	SAS_ISCSIT_SESS,
2419162SPeter.Dunlap@Sun.COM 	SAS_ISCSIT_LOGIN,
2429162SPeter.Dunlap@Sun.COM 	SAS_ISCSI_CMD,
2439162SPeter.Dunlap@Sun.COM 	SAS_ISCSI_SESS,
2449162SPeter.Dunlap@Sun.COM 	SAS_ISCSI_CONN,
2459162SPeter.Dunlap@Sun.COM 	SAS_ISCSI_LOGIN
2467978SPeter.Dunlap@Sun.COM } sm_audit_sm_type_t;
2477978SPeter.Dunlap@Sun.COM 
2487978SPeter.Dunlap@Sun.COM typedef struct {
2497978SPeter.Dunlap@Sun.COM 	timespec_t		sar_timestamp;
2507978SPeter.Dunlap@Sun.COM 	sm_audit_sm_type_t	sar_sm_type;
2517978SPeter.Dunlap@Sun.COM 	sm_audit_record_type_t	sar_type;
2527978SPeter.Dunlap@Sun.COM 	int			sar_state;
2537978SPeter.Dunlap@Sun.COM 	int			sar_new_state;	/* Only for SAR_STATE_CHANGE */
2547978SPeter.Dunlap@Sun.COM 	int			sar_event;	/* Only for SAR_STATE_EVENT */
2557978SPeter.Dunlap@Sun.COM 	uintptr_t		sar_event_info;	/* Only for SAR_STATE_EVENT */
2567978SPeter.Dunlap@Sun.COM } sm_audit_record_t;
2577978SPeter.Dunlap@Sun.COM 
2587978SPeter.Dunlap@Sun.COM typedef struct {
2597978SPeter.Dunlap@Sun.COM 	int			sab_index;
2607978SPeter.Dunlap@Sun.COM 	int			sab_max_index;
2617978SPeter.Dunlap@Sun.COM 	sm_audit_record_t	sab_records[SM_AUDIT_BUF_MAX_REC];
2627978SPeter.Dunlap@Sun.COM } sm_audit_buf_t;
2637978SPeter.Dunlap@Sun.COM 
2647978SPeter.Dunlap@Sun.COM extern boolean_t idm_sm_logging;
2657978SPeter.Dunlap@Sun.COM extern boolean_t idm_conn_logging;
2667978SPeter.Dunlap@Sun.COM extern boolean_t idm_svc_logging;
2677978SPeter.Dunlap@Sun.COM 
2687978SPeter.Dunlap@Sun.COM #define	IDM_SM_LOG if (idm_sm_logging) cmn_err
2697978SPeter.Dunlap@Sun.COM #define	IDM_CONN_LOG if (idm_conn_logging) cmn_err
2707978SPeter.Dunlap@Sun.COM #define	IDM_SVC_LOG if (idm_svc_logging) cmn_err
2717978SPeter.Dunlap@Sun.COM 
2727978SPeter.Dunlap@Sun.COM void idm_sm_audit_init(sm_audit_buf_t *audit_buf);
2737978SPeter.Dunlap@Sun.COM 
2747978SPeter.Dunlap@Sun.COM void idm_sm_audit_event(sm_audit_buf_t *audit_buf,
2757978SPeter.Dunlap@Sun.COM     sm_audit_sm_type_t sm_type,
2767978SPeter.Dunlap@Sun.COM     int state, int event, uintptr_t event_info);
2777978SPeter.Dunlap@Sun.COM 
2787978SPeter.Dunlap@Sun.COM void idm_sm_audit_state_change(sm_audit_buf_t *audit_buf,
2797978SPeter.Dunlap@Sun.COM     sm_audit_sm_type_t sm_type, int state, int new_state);
2807978SPeter.Dunlap@Sun.COM 
2817978SPeter.Dunlap@Sun.COM 
2827978SPeter.Dunlap@Sun.COM #include <sys/iscsi_protocol.h>
2837978SPeter.Dunlap@Sun.COM #include <sys/idm/idm_conn_sm.h>
2847978SPeter.Dunlap@Sun.COM #include <sys/idm/idm_transport.h>
2857978SPeter.Dunlap@Sun.COM #include <sys/idm/idm_impl.h>
2867978SPeter.Dunlap@Sun.COM #include <sys/idm/idm_text.h>
2877978SPeter.Dunlap@Sun.COM #include <sys/idm/idm_so.h>
2887978SPeter.Dunlap@Sun.COM 
2897978SPeter.Dunlap@Sun.COM /*
2907978SPeter.Dunlap@Sun.COM  * iSCSI Initiator Services
2917978SPeter.Dunlap@Sun.COM  */
2927978SPeter.Dunlap@Sun.COM 
2937978SPeter.Dunlap@Sun.COM idm_status_t
2947978SPeter.Dunlap@Sun.COM idm_ini_conn_create(idm_conn_req_t *cr, idm_conn_t **new_con);
2957978SPeter.Dunlap@Sun.COM 
2967978SPeter.Dunlap@Sun.COM idm_status_t
2977978SPeter.Dunlap@Sun.COM idm_ini_conn_connect(idm_conn_t *ic);
2987978SPeter.Dunlap@Sun.COM 
2997978SPeter.Dunlap@Sun.COM void
3007978SPeter.Dunlap@Sun.COM idm_ini_conn_disconnect(idm_conn_t *ic);
3017978SPeter.Dunlap@Sun.COM 
3027978SPeter.Dunlap@Sun.COM void
3039162SPeter.Dunlap@Sun.COM idm_ini_conn_disconnect_sync(idm_conn_t *ic);
3049162SPeter.Dunlap@Sun.COM 
3059162SPeter.Dunlap@Sun.COM void
3067978SPeter.Dunlap@Sun.COM idm_ini_conn_destroy(idm_conn_t *ic);
3077978SPeter.Dunlap@Sun.COM 
3087978SPeter.Dunlap@Sun.COM /*
3097978SPeter.Dunlap@Sun.COM  * iSCSI Target Services
3107978SPeter.Dunlap@Sun.COM  */
3117978SPeter.Dunlap@Sun.COM 
3127978SPeter.Dunlap@Sun.COM idm_status_t
3137978SPeter.Dunlap@Sun.COM idm_tgt_svc_create(idm_svc_req_t *sr, idm_svc_t **new_svc);
3147978SPeter.Dunlap@Sun.COM 
3157978SPeter.Dunlap@Sun.COM idm_status_t
3167978SPeter.Dunlap@Sun.COM idm_tgt_svc_online(idm_svc_t *is);
3177978SPeter.Dunlap@Sun.COM 
3187978SPeter.Dunlap@Sun.COM void
3197978SPeter.Dunlap@Sun.COM idm_tgt_svc_offline(idm_svc_t *is);
3207978SPeter.Dunlap@Sun.COM 
3217978SPeter.Dunlap@Sun.COM void
3227978SPeter.Dunlap@Sun.COM idm_tgt_svc_destroy(idm_svc_t *is);
3237978SPeter.Dunlap@Sun.COM 
3247978SPeter.Dunlap@Sun.COM void
3257978SPeter.Dunlap@Sun.COM idm_tgt_svc_destroy_if_unref(idm_svc_t *is);
3267978SPeter.Dunlap@Sun.COM 
3277978SPeter.Dunlap@Sun.COM idm_svc_t *
3287978SPeter.Dunlap@Sun.COM idm_tgt_svc_lookup(uint16_t port);
3297978SPeter.Dunlap@Sun.COM 
3307978SPeter.Dunlap@Sun.COM void
3317978SPeter.Dunlap@Sun.COM idm_tgt_svc_hold(idm_svc_t *is);
3327978SPeter.Dunlap@Sun.COM 
3337978SPeter.Dunlap@Sun.COM void
3347978SPeter.Dunlap@Sun.COM idm_tgt_svc_rele_and_destroy(idm_svc_t *is);
3357978SPeter.Dunlap@Sun.COM 
3367978SPeter.Dunlap@Sun.COM idm_status_t
3377978SPeter.Dunlap@Sun.COM idm_tgt_conn_accept(idm_conn_t *ic);
3387978SPeter.Dunlap@Sun.COM 
3397978SPeter.Dunlap@Sun.COM void
3407978SPeter.Dunlap@Sun.COM idm_tgt_conn_reject(idm_conn_t *ic);
3417978SPeter.Dunlap@Sun.COM 
3427978SPeter.Dunlap@Sun.COM void
3437978SPeter.Dunlap@Sun.COM idm_conn_hold(idm_conn_t *ic);
3447978SPeter.Dunlap@Sun.COM 
3457978SPeter.Dunlap@Sun.COM void
3467978SPeter.Dunlap@Sun.COM idm_conn_rele(idm_conn_t *ic);
3477978SPeter.Dunlap@Sun.COM 
3489721SPriya.Krishnan@Sun.COM void
3499721SPriya.Krishnan@Sun.COM idm_conn_set_target_name(idm_conn_t *ic, char *target_name);
3509721SPriya.Krishnan@Sun.COM 
3519721SPriya.Krishnan@Sun.COM void
3529721SPriya.Krishnan@Sun.COM idm_conn_set_initiator_name(idm_conn_t *ic, char *initiator_name);
3539721SPriya.Krishnan@Sun.COM 
3549721SPriya.Krishnan@Sun.COM void
3559721SPriya.Krishnan@Sun.COM idm_conn_set_isid(idm_conn_t *ic, uint8_t isid[ISCSI_ISID_LEN]);
3569721SPriya.Krishnan@Sun.COM 
3577978SPeter.Dunlap@Sun.COM /*
3587978SPeter.Dunlap@Sun.COM  * Target data transfer services
3597978SPeter.Dunlap@Sun.COM  */
3607978SPeter.Dunlap@Sun.COM idm_status_t
3617978SPeter.Dunlap@Sun.COM idm_buf_tx_to_ini(idm_task_t *idt, idm_buf_t *idb,
3627978SPeter.Dunlap@Sun.COM     uint32_t offset, uint32_t xfer_length,
3637978SPeter.Dunlap@Sun.COM     idm_buf_cb_t idb_buf_cb, void *cb_arg);
3647978SPeter.Dunlap@Sun.COM 
3657978SPeter.Dunlap@Sun.COM idm_status_t
3667978SPeter.Dunlap@Sun.COM idm_buf_rx_from_ini(idm_task_t *idt, idm_buf_t *idb,
3677978SPeter.Dunlap@Sun.COM     uint32_t offset, uint32_t xfer_length,
3687978SPeter.Dunlap@Sun.COM     idm_buf_cb_t idb_buf_cb, void *cb_arg);
3697978SPeter.Dunlap@Sun.COM 
3707978SPeter.Dunlap@Sun.COM void
3717978SPeter.Dunlap@Sun.COM idm_buf_tx_to_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status);
3727978SPeter.Dunlap@Sun.COM 
3737978SPeter.Dunlap@Sun.COM void
3747978SPeter.Dunlap@Sun.COM idm_buf_rx_from_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status);
3757978SPeter.Dunlap@Sun.COM 
3769721SPriya.Krishnan@Sun.COM #define	XFER_BUF_TX_TO_INI	0
3779721SPriya.Krishnan@Sun.COM #define	XFER_BUF_RX_FROM_INI	1
3787978SPeter.Dunlap@Sun.COM /*
3797978SPeter.Dunlap@Sun.COM  * Shared Initiator/Target Services
3807978SPeter.Dunlap@Sun.COM  */
3817978SPeter.Dunlap@Sun.COM kv_status_t
3827978SPeter.Dunlap@Sun.COM idm_negotiate_key_values(idm_conn_t *ic, nvlist_t *request_nvl,
3837978SPeter.Dunlap@Sun.COM     nvlist_t *response_nvl, nvlist_t *negotiated_nvl);
3847978SPeter.Dunlap@Sun.COM 
3859162SPeter.Dunlap@Sun.COM void
3867978SPeter.Dunlap@Sun.COM idm_notice_key_values(idm_conn_t *ic, nvlist_t *negotiated_nvl);
3877978SPeter.Dunlap@Sun.COM 
38810261SCharles.Ting@Sun.COM kv_status_t
38910261SCharles.Ting@Sun.COM idm_declare_key_values(idm_conn_t *ic, nvlist_t *config_nvl,
39010261SCharles.Ting@Sun.COM     nvlist_t *outgoing_nvl);
39110261SCharles.Ting@Sun.COM 
3927978SPeter.Dunlap@Sun.COM /*
3937978SPeter.Dunlap@Sun.COM  * Buffer services
3947978SPeter.Dunlap@Sun.COM  */
3957978SPeter.Dunlap@Sun.COM 
3967978SPeter.Dunlap@Sun.COM idm_buf_t *
3977978SPeter.Dunlap@Sun.COM idm_buf_alloc(idm_conn_t *ic, void *bufptr, uint64_t buflen);
3987978SPeter.Dunlap@Sun.COM 
3997978SPeter.Dunlap@Sun.COM void
4007978SPeter.Dunlap@Sun.COM idm_buf_free(idm_buf_t *idb);
4017978SPeter.Dunlap@Sun.COM 
4027978SPeter.Dunlap@Sun.COM void
4037978SPeter.Dunlap@Sun.COM idm_buf_bind_in(idm_task_t *idt, idm_buf_t *buf);
4047978SPeter.Dunlap@Sun.COM 
4057978SPeter.Dunlap@Sun.COM void
4067978SPeter.Dunlap@Sun.COM idm_buf_bind_out(idm_task_t *idt, idm_buf_t *buf);
4077978SPeter.Dunlap@Sun.COM 
4087978SPeter.Dunlap@Sun.COM void
4097978SPeter.Dunlap@Sun.COM idm_buf_unbind_in(idm_task_t *idt, idm_buf_t *buf);
4107978SPeter.Dunlap@Sun.COM 
4117978SPeter.Dunlap@Sun.COM void
4127978SPeter.Dunlap@Sun.COM idm_buf_unbind_out(idm_task_t *idt, idm_buf_t *buf);
4137978SPeter.Dunlap@Sun.COM 
4147978SPeter.Dunlap@Sun.COM idm_buf_t *
4157978SPeter.Dunlap@Sun.COM idm_buf_find(void *lbuf, size_t data_offset);
4167978SPeter.Dunlap@Sun.COM 
4179162SPeter.Dunlap@Sun.COM void
4189162SPeter.Dunlap@Sun.COM idm_bufpat_set(idm_buf_t *idb);
4199162SPeter.Dunlap@Sun.COM 
4209162SPeter.Dunlap@Sun.COM boolean_t
4219162SPeter.Dunlap@Sun.COM idm_bufpat_check(idm_buf_t *idb, int check_len, idm_bufpat_check_type_t type);
4229162SPeter.Dunlap@Sun.COM 
4239162SPeter.Dunlap@Sun.COM extern boolean_t idm_pattern_checking;
4249162SPeter.Dunlap@Sun.COM 
4259162SPeter.Dunlap@Sun.COM #define	IDM_BUFPAT_SET(CHK_BUF) 				\
4269162SPeter.Dunlap@Sun.COM 	if (idm_pattern_checking && (CHK_BUF)->idb_bufalloc) {	\
4279162SPeter.Dunlap@Sun.COM 		idm_bufpat_set(CHK_BUF);			\
4289162SPeter.Dunlap@Sun.COM 	}
4299162SPeter.Dunlap@Sun.COM 
4309162SPeter.Dunlap@Sun.COM #define	IDM_BUFPAT_CHECK(CHK_BUF, CHK_LEN, CHK_TYPE) 		\
4319162SPeter.Dunlap@Sun.COM 	if (idm_pattern_checking) {				\
4329162SPeter.Dunlap@Sun.COM 		(void) idm_bufpat_check(CHK_BUF, CHK_LEN, CHK_TYPE);	\
4339162SPeter.Dunlap@Sun.COM 	}
4349162SPeter.Dunlap@Sun.COM 
4357978SPeter.Dunlap@Sun.COM /*
4367978SPeter.Dunlap@Sun.COM  * Task services
4377978SPeter.Dunlap@Sun.COM  */
4387978SPeter.Dunlap@Sun.COM idm_task_t *
4397978SPeter.Dunlap@Sun.COM idm_task_alloc(idm_conn_t *ic);
4407978SPeter.Dunlap@Sun.COM 
4417978SPeter.Dunlap@Sun.COM void
4427978SPeter.Dunlap@Sun.COM idm_task_start(idm_task_t *idt, uintptr_t handle);
4437978SPeter.Dunlap@Sun.COM 
4447978SPeter.Dunlap@Sun.COM void
4457978SPeter.Dunlap@Sun.COM idm_task_abort(idm_conn_t *ic, idm_task_t *idt, idm_abort_type_t abort_type);
4467978SPeter.Dunlap@Sun.COM 
4477978SPeter.Dunlap@Sun.COM void
4487978SPeter.Dunlap@Sun.COM idm_task_cleanup(idm_task_t *idt);
4497978SPeter.Dunlap@Sun.COM 
4507978SPeter.Dunlap@Sun.COM void
4517978SPeter.Dunlap@Sun.COM idm_task_done(idm_task_t *idt);
4527978SPeter.Dunlap@Sun.COM 
4537978SPeter.Dunlap@Sun.COM void
4547978SPeter.Dunlap@Sun.COM idm_task_free(idm_task_t *idt);
4557978SPeter.Dunlap@Sun.COM 
4567978SPeter.Dunlap@Sun.COM idm_task_t *
4577978SPeter.Dunlap@Sun.COM idm_task_find(idm_conn_t *ic, uint32_t itt, uint32_t ttt);
4587978SPeter.Dunlap@Sun.COM 
4599162SPeter.Dunlap@Sun.COM idm_task_t *
4609162SPeter.Dunlap@Sun.COM idm_task_find_and_complete(idm_conn_t *ic, uint32_t itt, uint32_t ttt);
4619162SPeter.Dunlap@Sun.COM 
4627978SPeter.Dunlap@Sun.COM void *
4637978SPeter.Dunlap@Sun.COM idm_task_find_by_handle(idm_conn_t *ic, uintptr_t handle);
4647978SPeter.Dunlap@Sun.COM 
4657978SPeter.Dunlap@Sun.COM void
4667978SPeter.Dunlap@Sun.COM idm_task_hold(idm_task_t *idt);
4677978SPeter.Dunlap@Sun.COM 
4687978SPeter.Dunlap@Sun.COM void
4697978SPeter.Dunlap@Sun.COM idm_task_rele(idm_task_t *idt);
4707978SPeter.Dunlap@Sun.COM 
4717978SPeter.Dunlap@Sun.COM /*
4727978SPeter.Dunlap@Sun.COM  * PDU Services
4737978SPeter.Dunlap@Sun.COM  */
4747978SPeter.Dunlap@Sun.COM 
4757978SPeter.Dunlap@Sun.COM idm_pdu_t *
4767978SPeter.Dunlap@Sun.COM idm_pdu_alloc(uint_t hdrlen, uint_t datalen);
4777978SPeter.Dunlap@Sun.COM 
4789162SPeter.Dunlap@Sun.COM idm_pdu_t *
4799162SPeter.Dunlap@Sun.COM idm_pdu_alloc_nosleep(uint_t hdrlen, uint_t datalen);
4809162SPeter.Dunlap@Sun.COM 
4817978SPeter.Dunlap@Sun.COM void
4827978SPeter.Dunlap@Sun.COM idm_pdu_free(idm_pdu_t *pdu);
4837978SPeter.Dunlap@Sun.COM 
4847978SPeter.Dunlap@Sun.COM void
4857978SPeter.Dunlap@Sun.COM idm_pdu_init(idm_pdu_t *pdu, idm_conn_t *ic, void *private, idm_pdu_cb_t *cb);
4867978SPeter.Dunlap@Sun.COM 
4877978SPeter.Dunlap@Sun.COM void
4887978SPeter.Dunlap@Sun.COM idm_pdu_init_hdr(idm_pdu_t *pdu, uint8_t *hdr, uint_t hdrlen);
4897978SPeter.Dunlap@Sun.COM 
4907978SPeter.Dunlap@Sun.COM void
4917978SPeter.Dunlap@Sun.COM idm_pdu_init_data(idm_pdu_t *pdu, uint8_t *data, uint_t datalen);
4927978SPeter.Dunlap@Sun.COM 
4937978SPeter.Dunlap@Sun.COM void
4947978SPeter.Dunlap@Sun.COM idm_pdu_complete(idm_pdu_t *pdu, idm_status_t status);
4957978SPeter.Dunlap@Sun.COM 
4967978SPeter.Dunlap@Sun.COM void
4977978SPeter.Dunlap@Sun.COM idm_pdu_tx(idm_pdu_t *pdu);
4987978SPeter.Dunlap@Sun.COM 
4997978SPeter.Dunlap@Sun.COM /*
5007978SPeter.Dunlap@Sun.COM  * Object reference tracking
5017978SPeter.Dunlap@Sun.COM  */
5027978SPeter.Dunlap@Sun.COM 
5037978SPeter.Dunlap@Sun.COM void
5047978SPeter.Dunlap@Sun.COM idm_refcnt_init(idm_refcnt_t *refcnt, void *referenced_obj);
5057978SPeter.Dunlap@Sun.COM 
5067978SPeter.Dunlap@Sun.COM void
5077978SPeter.Dunlap@Sun.COM idm_refcnt_destroy(idm_refcnt_t *refcnt);
5087978SPeter.Dunlap@Sun.COM 
5097978SPeter.Dunlap@Sun.COM void
5107978SPeter.Dunlap@Sun.COM idm_refcnt_reset(idm_refcnt_t *refcnt);
5117978SPeter.Dunlap@Sun.COM 
5127978SPeter.Dunlap@Sun.COM void
5137978SPeter.Dunlap@Sun.COM idm_refcnt_hold(idm_refcnt_t *refcnt);
5147978SPeter.Dunlap@Sun.COM 
5157978SPeter.Dunlap@Sun.COM void
5167978SPeter.Dunlap@Sun.COM idm_refcnt_rele(idm_refcnt_t *refcnt);
5177978SPeter.Dunlap@Sun.COM 
5187978SPeter.Dunlap@Sun.COM void
5197978SPeter.Dunlap@Sun.COM idm_refcnt_rele_and_destroy(idm_refcnt_t *refcnt, idm_refcnt_cb_t *cb_func);
5207978SPeter.Dunlap@Sun.COM 
5217978SPeter.Dunlap@Sun.COM void
5227978SPeter.Dunlap@Sun.COM idm_refcnt_wait_ref(idm_refcnt_t *refcnt);
5237978SPeter.Dunlap@Sun.COM 
5247978SPeter.Dunlap@Sun.COM void
5257978SPeter.Dunlap@Sun.COM idm_refcnt_async_wait_ref(idm_refcnt_t *refcnt, idm_refcnt_cb_t *cb_func);
5267978SPeter.Dunlap@Sun.COM 
5277978SPeter.Dunlap@Sun.COM 
5287978SPeter.Dunlap@Sun.COM #ifdef	__cplusplus
5297978SPeter.Dunlap@Sun.COM }
5307978SPeter.Dunlap@Sun.COM #endif
5317978SPeter.Dunlap@Sun.COM 
5327978SPeter.Dunlap@Sun.COM #endif /* _IDM_H */
533