1*7978SPeter.Dunlap@Sun.COM /* 2*7978SPeter.Dunlap@Sun.COM * CDDL HEADER START 3*7978SPeter.Dunlap@Sun.COM * 4*7978SPeter.Dunlap@Sun.COM * The contents of this file are subject to the terms of the 5*7978SPeter.Dunlap@Sun.COM * Common Development and Distribution License (the "License"). 6*7978SPeter.Dunlap@Sun.COM * You may not use this file except in compliance with the License. 7*7978SPeter.Dunlap@Sun.COM * 8*7978SPeter.Dunlap@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*7978SPeter.Dunlap@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*7978SPeter.Dunlap@Sun.COM * See the License for the specific language governing permissions 11*7978SPeter.Dunlap@Sun.COM * and limitations under the License. 12*7978SPeter.Dunlap@Sun.COM * 13*7978SPeter.Dunlap@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*7978SPeter.Dunlap@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*7978SPeter.Dunlap@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*7978SPeter.Dunlap@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*7978SPeter.Dunlap@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*7978SPeter.Dunlap@Sun.COM * 19*7978SPeter.Dunlap@Sun.COM * CDDL HEADER END 20*7978SPeter.Dunlap@Sun.COM */ 21*7978SPeter.Dunlap@Sun.COM /* 22*7978SPeter.Dunlap@Sun.COM * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23*7978SPeter.Dunlap@Sun.COM * Use is subject to license terms. 24*7978SPeter.Dunlap@Sun.COM */ 25*7978SPeter.Dunlap@Sun.COM 26*7978SPeter.Dunlap@Sun.COM #ifndef _ISCSI_IF_H 27*7978SPeter.Dunlap@Sun.COM #define _ISCSI_IF_H 28*7978SPeter.Dunlap@Sun.COM 29*7978SPeter.Dunlap@Sun.COM #ifdef __cplusplus 30*7978SPeter.Dunlap@Sun.COM extern "C" { 31*7978SPeter.Dunlap@Sun.COM #endif 32*7978SPeter.Dunlap@Sun.COM 33*7978SPeter.Dunlap@Sun.COM #ifdef _KERNEL 34*7978SPeter.Dunlap@Sun.COM #include <sys/types.h> 35*7978SPeter.Dunlap@Sun.COM #include <sys/strsubr.h> /* for prototype of kstrgetmsg */ 36*7978SPeter.Dunlap@Sun.COM #include <sys/socket.h> 37*7978SPeter.Dunlap@Sun.COM #include <sys/socketvar.h> /* for struct sonode */ 38*7978SPeter.Dunlap@Sun.COM #endif 39*7978SPeter.Dunlap@Sun.COM #include <netinet/in.h> 40*7978SPeter.Dunlap@Sun.COM #include <sys/scsi/impl/uscsi.h> 41*7978SPeter.Dunlap@Sun.COM #include <sys/iscsi_protocol.h> 42*7978SPeter.Dunlap@Sun.COM 43*7978SPeter.Dunlap@Sun.COM /* 44*7978SPeter.Dunlap@Sun.COM * Each of the top level structures have a version field as 45*7978SPeter.Dunlap@Sun.COM * the first member. That version value will be set by the 46*7978SPeter.Dunlap@Sun.COM * caller. The consumer of the structure will check to see 47*7978SPeter.Dunlap@Sun.COM * if the version is correct. 48*7978SPeter.Dunlap@Sun.COM */ 49*7978SPeter.Dunlap@Sun.COM #define ISCSI_INTERFACE_VERSION 3 50*7978SPeter.Dunlap@Sun.COM 51*7978SPeter.Dunlap@Sun.COM /* 52*7978SPeter.Dunlap@Sun.COM * The maximum length of an iSCSI name is 223. 224 is used 53*7978SPeter.Dunlap@Sun.COM * to provide space for a null character. 54*7978SPeter.Dunlap@Sun.COM */ 55*7978SPeter.Dunlap@Sun.COM #define ISCSI_MAX_NAME_LEN 224 56*7978SPeter.Dunlap@Sun.COM 57*7978SPeter.Dunlap@Sun.COM /* 58*7978SPeter.Dunlap@Sun.COM * Login parameter values are used instead of ascii text 59*7978SPeter.Dunlap@Sun.COM * between the IMA plug-in and kernel. 60*7978SPeter.Dunlap@Sun.COM */ 61*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_DATA_SEQUENCE_IN_ORDER 0x0000 /* bool */ 62*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_IMMEDIATE_DATA 0x0001 /* bool */ 63*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_INITIAL_R2T 0x0002 /* bool */ 64*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_DATA_PDU_IN_ORDER 0x0003 /* bool */ 65*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_HEADER_DIGEST 0x0004 /* int */ 66*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_DATA_DIGEST 0x0005 /* int */ 67*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_DEFAULT_TIME_2_RETAIN 0x0006 /* int */ 68*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_DEFAULT_TIME_2_WAIT 0x0007 /* int */ 69*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_MAX_RECV_DATA_SEGMENT_LENGTH 0x0008 /* int */ 70*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_FIRST_BURST_LENGTH 0x0009 /* int */ 71*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_MAX_BURST_LENGTH 0x000A /* int */ 72*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_MAX_CONNECTIONS 0x000B /* int */ 73*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_OUTSTANDING_R2T 0x000C /* int */ 74*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_ERROR_RECOVERY_LEVEL 0x000D /* int */ 75*7978SPeter.Dunlap@Sun.COM /* 76*7978SPeter.Dunlap@Sun.COM * number of login parameters - needs to be updated when new parameter added 77*7978SPeter.Dunlap@Sun.COM */ 78*7978SPeter.Dunlap@Sun.COM #define ISCSI_NUM_LOGIN_PARAM 0x000E 79*7978SPeter.Dunlap@Sun.COM 80*7978SPeter.Dunlap@Sun.COM /* 81*7978SPeter.Dunlap@Sun.COM * Used internally by the persistent store code. Currently a bitmap is kept of 82*7978SPeter.Dunlap@Sun.COM * which params are currently set. This allows for quick a look up instead of 83*7978SPeter.Dunlap@Sun.COM * cycling through the possible entries. Using an unsigned int as the bitmap we 84*7978SPeter.Dunlap@Sun.COM * can have parameter numbers up through 31. Since the current only has 22 85*7978SPeter.Dunlap@Sun.COM * we're okay. 86*7978SPeter.Dunlap@Sun.COM */ 87*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_DB_ENTRY 0x0020 88*7978SPeter.Dunlap@Sun.COM /* 89*7978SPeter.Dunlap@Sun.COM * Special case. When this parameter value is set in iscsi_param_set_t 90*7978SPeter.Dunlap@Sun.COM * the member s_value (type iscsi_param_set_t) is not used. 91*7978SPeter.Dunlap@Sun.COM * The name field contains the InitiatorName for the system which 92*7978SPeter.Dunlap@Sun.COM * should be used for all future sessions. 93*7978SPeter.Dunlap@Sun.COM */ 94*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_INITIATOR_NAME 0x0021 95*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN_PARAM_INITIATOR_ALIAS 0x0022 96*7978SPeter.Dunlap@Sun.COM 97*7978SPeter.Dunlap@Sun.COM #define ISCSI_DEVCTL "devctl" 98*7978SPeter.Dunlap@Sun.COM #define ISCSI_DRIVER_DEVCTL "/devices/iscsi:" ISCSI_DEVCTL 99*7978SPeter.Dunlap@Sun.COM 100*7978SPeter.Dunlap@Sun.COM /* 101*7978SPeter.Dunlap@Sun.COM * ioctls supported by the driver. 102*7978SPeter.Dunlap@Sun.COM */ 103*7978SPeter.Dunlap@Sun.COM #define ISCSI_IOCTL (('i' << 24) | ('S' << 16) | ('C' << 8)) 104*7978SPeter.Dunlap@Sun.COM #define ISCSI_CREATE_OID (ISCSI_IOCTL | 2) 105*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGIN (ISCSI_IOCTL | 3) 106*7978SPeter.Dunlap@Sun.COM #define ISCSI_LOGOUT (ISCSI_IOCTL | 4) 107*7978SPeter.Dunlap@Sun.COM #define ISCSI_PARAM_GET (ISCSI_IOCTL | 5) 108*7978SPeter.Dunlap@Sun.COM #define ISCSI_PARAM_SET (ISCSI_IOCTL | 6) 109*7978SPeter.Dunlap@Sun.COM #define ISCSI_TARGET_PARAM_CLEAR (ISCSI_IOCTL | 8) 110*7978SPeter.Dunlap@Sun.COM #define ISCSI_TARGET_OID_LIST_GET (ISCSI_IOCTL | 9) 111*7978SPeter.Dunlap@Sun.COM #define ISCSI_TARGET_PROPS_GET (ISCSI_IOCTL | 10) 112*7978SPeter.Dunlap@Sun.COM #define ISCSI_TARGET_PROPS_SET (ISCSI_IOCTL | 11) 113*7978SPeter.Dunlap@Sun.COM #define ISCSI_TARGET_ADDRESS_GET (ISCSI_IOCTL | 12) 114*7978SPeter.Dunlap@Sun.COM #define ISCSI_CHAP_SET (ISCSI_IOCTL | 13) 115*7978SPeter.Dunlap@Sun.COM #define ISCSI_CHAP_GET (ISCSI_IOCTL | 14) 116*7978SPeter.Dunlap@Sun.COM #define ISCSI_CHAP_CLEAR (ISCSI_IOCTL | 15) 117*7978SPeter.Dunlap@Sun.COM #define ISCSI_STATIC_GET (ISCSI_IOCTL | 16) 118*7978SPeter.Dunlap@Sun.COM #define ISCSI_STATIC_SET (ISCSI_IOCTL | 17) 119*7978SPeter.Dunlap@Sun.COM #define ISCSI_STATIC_CLEAR (ISCSI_IOCTL | 18) 120*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_SET (ISCSI_IOCTL | 19) 121*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_GET (ISCSI_IOCTL | 20) 122*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_CLEAR (ISCSI_IOCTL | 21) 123*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_PROPS (ISCSI_IOCTL | 22) 124*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_ADDR_SET (ISCSI_IOCTL | 23) 125*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_ADDR_LIST_GET (ISCSI_IOCTL | 24) 126*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_ADDR_CLEAR (ISCSI_IOCTL | 25) 127*7978SPeter.Dunlap@Sun.COM #define ISCSI_RADIUS_SET (ISCSI_IOCTL | 26) 128*7978SPeter.Dunlap@Sun.COM #define ISCSI_RADIUS_GET (ISCSI_IOCTL | 27) 129*7978SPeter.Dunlap@Sun.COM #define ISCSI_DB_RELOAD (ISCSI_IOCTL | 28) 130*7978SPeter.Dunlap@Sun.COM #define ISCSI_LUN_OID_LIST_GET (ISCSI_IOCTL | 29) 131*7978SPeter.Dunlap@Sun.COM #define ISCSI_LUN_PROPS_GET (ISCSI_IOCTL | 30) 132*7978SPeter.Dunlap@Sun.COM #define ISCSI_CONN_OID_LIST_GET (ISCSI_IOCTL | 31) 133*7978SPeter.Dunlap@Sun.COM #define ISCSI_CONN_PROPS_GET (ISCSI_IOCTL | 32) 134*7978SPeter.Dunlap@Sun.COM #define ISCSI_USCSI (ISCSI_IOCTL | 33) 135*7978SPeter.Dunlap@Sun.COM #define ISCSI_DOOR_HANDLE_SET (ISCSI_IOCTL | 34) 136*7978SPeter.Dunlap@Sun.COM #define ISCSI_DISCOVERY_EVENTS (ISCSI_IOCTL | 35) 137*7978SPeter.Dunlap@Sun.COM #define ISCSI_AUTH_SET (ISCSI_IOCTL | 36) 138*7978SPeter.Dunlap@Sun.COM #define ISCSI_AUTH_GET (ISCSI_IOCTL | 37) 139*7978SPeter.Dunlap@Sun.COM #define ISCSI_AUTH_CLEAR (ISCSI_IOCTL | 38) 140*7978SPeter.Dunlap@Sun.COM #define ISCSI_SENDTGTS_GET (ISCSI_IOCTL | 39) 141*7978SPeter.Dunlap@Sun.COM #define ISCSI_ISNS_SERVER_ADDR_SET (ISCSI_IOCTL | 40) 142*7978SPeter.Dunlap@Sun.COM #define ISCSI_ISNS_SERVER_ADDR_LIST_GET (ISCSI_IOCTL | 41) 143*7978SPeter.Dunlap@Sun.COM #define ISCSI_ISNS_SERVER_ADDR_CLEAR (ISCSI_IOCTL | 42) 144*7978SPeter.Dunlap@Sun.COM #define ISCSI_ISNS_SERVER_GET (ISCSI_IOCTL | 43) 145*7978SPeter.Dunlap@Sun.COM #define ISCSI_GET_CONFIG_SESSIONS (ISCSI_IOCTL | 44) 146*7978SPeter.Dunlap@Sun.COM #define ISCSI_SET_CONFIG_SESSIONS (ISCSI_IOCTL | 45) 147*7978SPeter.Dunlap@Sun.COM #define ISCSI_INIT_NODE_NAME_SET (ISCSI_IOCTL | 46) 148*7978SPeter.Dunlap@Sun.COM #define ISCSI_DB_DUMP (ISCSI_IOCTL | 100) /* DBG */ 149*7978SPeter.Dunlap@Sun.COM 150*7978SPeter.Dunlap@Sun.COM /* 151*7978SPeter.Dunlap@Sun.COM * Misc. defines 152*7978SPeter.Dunlap@Sun.COM */ 153*7978SPeter.Dunlap@Sun.COM #define ISCSI_CHAP_NAME_LEN 512 154*7978SPeter.Dunlap@Sun.COM #define ISCSI_CHAP_SECRET_LEN 16 155*7978SPeter.Dunlap@Sun.COM #define ISCSI_TGT_OID_LIST 0x0001 156*7978SPeter.Dunlap@Sun.COM #define ISCSI_STATIC_TGT_OID_LIST 0x0002 157*7978SPeter.Dunlap@Sun.COM #define ISCSI_TGT_PARAM_OID_LIST 0x0004 158*7978SPeter.Dunlap@Sun.COM #define ISCSI_SESS_PARAM 0x0001 159*7978SPeter.Dunlap@Sun.COM #define ISCSI_CONN_PARAM 0x0002 160*7978SPeter.Dunlap@Sun.COM 161*7978SPeter.Dunlap@Sun.COM /* digest level defines */ 162*7978SPeter.Dunlap@Sun.COM #define ISCSI_DIGEST_NONE 0 163*7978SPeter.Dunlap@Sun.COM #define ISCSI_DIGEST_CRC32C 1 164*7978SPeter.Dunlap@Sun.COM #define ISCSI_DIGEST_CRC32C_NONE 2 /* offer both, prefer CRC32C */ 165*7978SPeter.Dunlap@Sun.COM #define ISCSI_DIGEST_NONE_CRC32C 3 /* offer both, prefer None */ 166*7978SPeter.Dunlap@Sun.COM 167*7978SPeter.Dunlap@Sun.COM /* 168*7978SPeter.Dunlap@Sun.COM * A last error associated with each target session is returned in the 169*7978SPeter.Dunlap@Sun.COM * iscsi_target_t structure. 170*7978SPeter.Dunlap@Sun.COM */ 171*7978SPeter.Dunlap@Sun.COM typedef enum iscsi_error { 172*7978SPeter.Dunlap@Sun.COM NoError, AuthenticationError, LoginParamError, ConnectionReset 173*7978SPeter.Dunlap@Sun.COM } iscsi_error_t; 174*7978SPeter.Dunlap@Sun.COM 175*7978SPeter.Dunlap@Sun.COM /* 176*7978SPeter.Dunlap@Sun.COM * The values associated with each enum is based on the IMA specification. 177*7978SPeter.Dunlap@Sun.COM */ 178*7978SPeter.Dunlap@Sun.COM typedef enum iSCSIDiscoveryMethod { 179*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodUnknown = 0, 180*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodStatic = 1, 181*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodSLP = 2, 182*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodISNS = 4, 183*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodSendTargets = 8 184*7978SPeter.Dunlap@Sun.COM } iSCSIDiscoveryMethod_t; 185*7978SPeter.Dunlap@Sun.COM #define ISCSI_ALL_DISCOVERY_METHODS (iSCSIDiscoveryMethodStatic | \ 186*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodSLP | \ 187*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodISNS | \ 188*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethodSendTargets) 189*7978SPeter.Dunlap@Sun.COM 190*7978SPeter.Dunlap@Sun.COM /* 191*7978SPeter.Dunlap@Sun.COM * Before anything can be done to a target it must have an OID. 192*7978SPeter.Dunlap@Sun.COM */ 193*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_oid { 194*7978SPeter.Dunlap@Sun.COM uint32_t o_vers; /* In */ 195*7978SPeter.Dunlap@Sun.COM uchar_t o_name[ISCSI_MAX_NAME_LEN]; /* In */ 196*7978SPeter.Dunlap@Sun.COM /* 197*7978SPeter.Dunlap@Sun.COM * tpgt is only 16 bits per spec. use 32 in ioctl to reduce 198*7978SPeter.Dunlap@Sun.COM * packing issue. Also -1 tpgt denotes default value. iSCSI 199*7978SPeter.Dunlap@Sun.COM * stack will detemermine tpgt during login. 200*7978SPeter.Dunlap@Sun.COM */ 201*7978SPeter.Dunlap@Sun.COM int o_tpgt; /* In */ 202*7978SPeter.Dunlap@Sun.COM uint32_t o_oid; /* Out */ 203*7978SPeter.Dunlap@Sun.COM } iscsi_oid_t; 204*7978SPeter.Dunlap@Sun.COM #define ISCSI_OID_NOTSET 0 205*7978SPeter.Dunlap@Sun.COM #define ISCSI_INITIATOR_OID 1 /* Other OIDs follow > 1 */ 206*7978SPeter.Dunlap@Sun.COM #define ISCSI_DEFAULT_TPGT -1 207*7978SPeter.Dunlap@Sun.COM 208*7978SPeter.Dunlap@Sun.COM /* 209*7978SPeter.Dunlap@Sun.COM * iSCSI Login Parameters - Reference iscsi draft for 210*7978SPeter.Dunlap@Sun.COM * definitions of the below login params. 211*7978SPeter.Dunlap@Sun.COM */ 212*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_login_params { 213*7978SPeter.Dunlap@Sun.COM boolean_t immediate_data; 214*7978SPeter.Dunlap@Sun.COM boolean_t initial_r2t; 215*7978SPeter.Dunlap@Sun.COM int first_burst_length; /* range: 512 - 2**24-1 */ 216*7978SPeter.Dunlap@Sun.COM int max_burst_length; /* range: 512 - 2**24-1 */ 217*7978SPeter.Dunlap@Sun.COM boolean_t data_pdu_in_order; 218*7978SPeter.Dunlap@Sun.COM boolean_t data_sequence_in_order; 219*7978SPeter.Dunlap@Sun.COM int default_time_to_wait; 220*7978SPeter.Dunlap@Sun.COM int default_time_to_retain; 221*7978SPeter.Dunlap@Sun.COM int header_digest; 222*7978SPeter.Dunlap@Sun.COM int data_digest; 223*7978SPeter.Dunlap@Sun.COM int max_recv_data_seg_len; /* range: 512 - 2**24-1 */ 224*7978SPeter.Dunlap@Sun.COM int max_xmit_data_seg_len; /* range: 512 - 2**24-1 */ 225*7978SPeter.Dunlap@Sun.COM int max_connections; 226*7978SPeter.Dunlap@Sun.COM int max_outstanding_r2t; 227*7978SPeter.Dunlap@Sun.COM int error_recovery_level; 228*7978SPeter.Dunlap@Sun.COM boolean_t ifmarker; 229*7978SPeter.Dunlap@Sun.COM boolean_t ofmarker; 230*7978SPeter.Dunlap@Sun.COM } iscsi_login_params_t; 231*7978SPeter.Dunlap@Sun.COM 232*7978SPeter.Dunlap@Sun.COM /* 233*7978SPeter.Dunlap@Sun.COM * Once parameters have been set via ISCSI_SET_PARAM the login is initiated 234*7978SPeter.Dunlap@Sun.COM * by sending an ISCSI_LOGIN ioctl with the following structure filled in. 235*7978SPeter.Dunlap@Sun.COM */ 236*7978SPeter.Dunlap@Sun.COM typedef struct entry { 237*7978SPeter.Dunlap@Sun.COM int e_vers; 238*7978SPeter.Dunlap@Sun.COM uint32_t e_oid; 239*7978SPeter.Dunlap@Sun.COM union { 240*7978SPeter.Dunlap@Sun.COM struct in_addr u_in4; 241*7978SPeter.Dunlap@Sun.COM struct in6_addr u_in6; 242*7978SPeter.Dunlap@Sun.COM } e_u; 243*7978SPeter.Dunlap@Sun.COM /* 244*7978SPeter.Dunlap@Sun.COM * e_insize indicates which of the previous structs is valid. 245*7978SPeter.Dunlap@Sun.COM */ 246*7978SPeter.Dunlap@Sun.COM int e_insize; 247*7978SPeter.Dunlap@Sun.COM int e_port; 248*7978SPeter.Dunlap@Sun.COM int e_tpgt; 249*7978SPeter.Dunlap@Sun.COM } entry_t; 250*7978SPeter.Dunlap@Sun.COM 251*7978SPeter.Dunlap@Sun.COM /* 252*7978SPeter.Dunlap@Sun.COM * Used when setting or gettnig the Initiator Name or Alias. 253*7978SPeter.Dunlap@Sun.COM */ 254*7978SPeter.Dunlap@Sun.COM typedef struct node_name { 255*7978SPeter.Dunlap@Sun.COM unsigned char n_name[ISCSI_MAX_NAME_LEN]; 256*7978SPeter.Dunlap@Sun.COM int n_len; 257*7978SPeter.Dunlap@Sun.COM } node_name_t; 258*7978SPeter.Dunlap@Sun.COM 259*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSIMinMaxValue { 260*7978SPeter.Dunlap@Sun.COM uint32_t i_current, 261*7978SPeter.Dunlap@Sun.COM i_default, 262*7978SPeter.Dunlap@Sun.COM i_min, 263*7978SPeter.Dunlap@Sun.COM i_max, 264*7978SPeter.Dunlap@Sun.COM i_incr; 265*7978SPeter.Dunlap@Sun.COM } iscsi_int_info_t; 266*7978SPeter.Dunlap@Sun.COM 267*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSIBoolValue { 268*7978SPeter.Dunlap@Sun.COM boolean_t b_current, 269*7978SPeter.Dunlap@Sun.COM b_default; 270*7978SPeter.Dunlap@Sun.COM } iscsi_bool_info_t; 271*7978SPeter.Dunlap@Sun.COM 272*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSIParamValueGet { 273*7978SPeter.Dunlap@Sun.COM boolean_t v_valid, 274*7978SPeter.Dunlap@Sun.COM v_settable; 275*7978SPeter.Dunlap@Sun.COM iscsi_int_info_t v_integer; 276*7978SPeter.Dunlap@Sun.COM iscsi_bool_info_t v_bool; 277*7978SPeter.Dunlap@Sun.COM uchar_t v_name[ISCSI_MAX_NAME_LEN]; 278*7978SPeter.Dunlap@Sun.COM } iscsi_get_value_t; 279*7978SPeter.Dunlap@Sun.COM 280*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSILoginParamGet { 281*7978SPeter.Dunlap@Sun.COM uint32_t g_vers; /* In */ 282*7978SPeter.Dunlap@Sun.COM uint32_t g_oid; /* In */ 283*7978SPeter.Dunlap@Sun.COM uint32_t g_param; /* Out */ 284*7978SPeter.Dunlap@Sun.COM iscsi_get_value_t g_value; /* Out */ 285*7978SPeter.Dunlap@Sun.COM uint32_t g_conn_cid; /* In */ 286*7978SPeter.Dunlap@Sun.COM 287*7978SPeter.Dunlap@Sun.COM /* 288*7978SPeter.Dunlap@Sun.COM * To indicate whether session or connection related param is 289*7978SPeter.Dunlap@Sun.COM * being requested. 290*7978SPeter.Dunlap@Sun.COM */ 291*7978SPeter.Dunlap@Sun.COM uint32_t g_param_type; /* In */ 292*7978SPeter.Dunlap@Sun.COM } iscsi_param_get_t; 293*7978SPeter.Dunlap@Sun.COM 294*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_set_value { 295*7978SPeter.Dunlap@Sun.COM uint32_t v_integer; 296*7978SPeter.Dunlap@Sun.COM boolean_t v_bool; 297*7978SPeter.Dunlap@Sun.COM uchar_t v_name[ISCSI_MAX_NAME_LEN]; 298*7978SPeter.Dunlap@Sun.COM } iscsi_set_value_t; 299*7978SPeter.Dunlap@Sun.COM 300*7978SPeter.Dunlap@Sun.COM /* 301*7978SPeter.Dunlap@Sun.COM * All of the members of this structure are set by the user agent and 302*7978SPeter.Dunlap@Sun.COM * consumed by the driver. 303*7978SPeter.Dunlap@Sun.COM */ 304*7978SPeter.Dunlap@Sun.COM typedef struct iSCSILoginParamSet { 305*7978SPeter.Dunlap@Sun.COM uint32_t s_vers, 306*7978SPeter.Dunlap@Sun.COM s_oid; 307*7978SPeter.Dunlap@Sun.COM uint32_t s_param; 308*7978SPeter.Dunlap@Sun.COM iscsi_set_value_t s_value; 309*7978SPeter.Dunlap@Sun.COM } iscsi_param_set_t; 310*7978SPeter.Dunlap@Sun.COM 311*7978SPeter.Dunlap@Sun.COM /* 312*7978SPeter.Dunlap@Sun.COM * Data in this structure is set by the user agent and consumed by 313*7978SPeter.Dunlap@Sun.COM * the driver. 314*7978SPeter.Dunlap@Sun.COM */ 315*7978SPeter.Dunlap@Sun.COM typedef struct chap_props { 316*7978SPeter.Dunlap@Sun.COM uint32_t c_vers, 317*7978SPeter.Dunlap@Sun.COM c_retries, 318*7978SPeter.Dunlap@Sun.COM c_oid; 319*7978SPeter.Dunlap@Sun.COM unsigned char c_user[128]; 320*7978SPeter.Dunlap@Sun.COM uint32_t c_user_len; 321*7978SPeter.Dunlap@Sun.COM unsigned char c_secret[16]; 322*7978SPeter.Dunlap@Sun.COM uint32_t c_secret_len; 323*7978SPeter.Dunlap@Sun.COM } iscsi_chap_props_t; 324*7978SPeter.Dunlap@Sun.COM 325*7978SPeter.Dunlap@Sun.COM typedef enum authMethod { 326*7978SPeter.Dunlap@Sun.COM authMethodNone = 0x00, 327*7978SPeter.Dunlap@Sun.COM authMethodCHAP = 0x01, 328*7978SPeter.Dunlap@Sun.COM authMethodSRP = 0x02, 329*7978SPeter.Dunlap@Sun.COM authMethodKRB5 = 0x04, 330*7978SPeter.Dunlap@Sun.COM authMethodSPKM1 = 0x08, 331*7978SPeter.Dunlap@Sun.COM authMethodSPKM2 = 0x10 332*7978SPeter.Dunlap@Sun.COM } authMethod_t; 333*7978SPeter.Dunlap@Sun.COM 334*7978SPeter.Dunlap@Sun.COM /* 335*7978SPeter.Dunlap@Sun.COM * Data in this structure is set by the user agent and consumed by 336*7978SPeter.Dunlap@Sun.COM * the driver. 337*7978SPeter.Dunlap@Sun.COM */ 338*7978SPeter.Dunlap@Sun.COM typedef struct auth_props { 339*7978SPeter.Dunlap@Sun.COM uint32_t a_vers; 340*7978SPeter.Dunlap@Sun.COM uint32_t a_oid; 341*7978SPeter.Dunlap@Sun.COM boolean_t a_bi_auth; 342*7978SPeter.Dunlap@Sun.COM authMethod_t a_auth_method; 343*7978SPeter.Dunlap@Sun.COM } iscsi_auth_props_t; 344*7978SPeter.Dunlap@Sun.COM 345*7978SPeter.Dunlap@Sun.COM /* 346*7978SPeter.Dunlap@Sun.COM * Data in this structure is set by the user agent and consumed by 347*7978SPeter.Dunlap@Sun.COM * the driver. 348*7978SPeter.Dunlap@Sun.COM */ 349*7978SPeter.Dunlap@Sun.COM #define MAX_RAD_SHARED_SECRET_LEN 128 350*7978SPeter.Dunlap@Sun.COM typedef struct radius_props { 351*7978SPeter.Dunlap@Sun.COM uint32_t r_vers; 352*7978SPeter.Dunlap@Sun.COM uint32_t r_oid; 353*7978SPeter.Dunlap@Sun.COM union { 354*7978SPeter.Dunlap@Sun.COM struct in_addr u_in4; 355*7978SPeter.Dunlap@Sun.COM struct in6_addr u_in6; 356*7978SPeter.Dunlap@Sun.COM } r_addr; 357*7978SPeter.Dunlap@Sun.COM /* 358*7978SPeter.Dunlap@Sun.COM * r_insize indicates which of the previous structs is valid. 359*7978SPeter.Dunlap@Sun.COM */ 360*7978SPeter.Dunlap@Sun.COM int r_insize; 361*7978SPeter.Dunlap@Sun.COM 362*7978SPeter.Dunlap@Sun.COM uint32_t r_port; 363*7978SPeter.Dunlap@Sun.COM uint8_t r_shared_secret[MAX_RAD_SHARED_SECRET_LEN]; 364*7978SPeter.Dunlap@Sun.COM boolean_t r_radius_access; 365*7978SPeter.Dunlap@Sun.COM boolean_t r_radius_config_valid; 366*7978SPeter.Dunlap@Sun.COM uint32_t r_shared_secret_len; 367*7978SPeter.Dunlap@Sun.COM } iscsi_radius_props_t; 368*7978SPeter.Dunlap@Sun.COM 369*7978SPeter.Dunlap@Sun.COM typedef struct _IPAddress { 370*7978SPeter.Dunlap@Sun.COM union { 371*7978SPeter.Dunlap@Sun.COM struct in_addr in4; 372*7978SPeter.Dunlap@Sun.COM struct in6_addr in6; 373*7978SPeter.Dunlap@Sun.COM } i_addr; 374*7978SPeter.Dunlap@Sun.COM /* i_insize determines which is valid in the union above */ 375*7978SPeter.Dunlap@Sun.COM int i_insize; 376*7978SPeter.Dunlap@Sun.COM } iscsi_ipaddr_t; 377*7978SPeter.Dunlap@Sun.COM 378*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSITargetAddressKey { 379*7978SPeter.Dunlap@Sun.COM iscsi_ipaddr_t a_addr; 380*7978SPeter.Dunlap@Sun.COM uint32_t a_port, 381*7978SPeter.Dunlap@Sun.COM a_oid; 382*7978SPeter.Dunlap@Sun.COM } iscsi_addr_t; 383*7978SPeter.Dunlap@Sun.COM 384*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSITargetAddressKeyProperties { 385*7978SPeter.Dunlap@Sun.COM uint32_t al_vers, /* In */ 386*7978SPeter.Dunlap@Sun.COM al_oid; /* In */ 387*7978SPeter.Dunlap@Sun.COM uint32_t al_in_cnt; /* In */ 388*7978SPeter.Dunlap@Sun.COM uint32_t al_out_cnt; /* Out */ 389*7978SPeter.Dunlap@Sun.COM uint32_t al_tpgt; /* Out */ 390*7978SPeter.Dunlap@Sun.COM iscsi_addr_t al_addrs[1]; /* Out */ 391*7978SPeter.Dunlap@Sun.COM } iscsi_addr_list_t; 392*7978SPeter.Dunlap@Sun.COM 393*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSITargetProperties { 394*7978SPeter.Dunlap@Sun.COM uint32_t p_vers, /* In */ 395*7978SPeter.Dunlap@Sun.COM p_oid; /* In */ 396*7978SPeter.Dunlap@Sun.COM uchar_t p_name[ISCSI_MAX_NAME_LEN]; /* Out */ 397*7978SPeter.Dunlap@Sun.COM uint_t p_name_len; /* Out */ 398*7978SPeter.Dunlap@Sun.COM uchar_t p_alias[ISCSI_MAX_NAME_LEN]; /* Out */ 399*7978SPeter.Dunlap@Sun.COM uint_t p_alias_len; /* Out */ 400*7978SPeter.Dunlap@Sun.COM iSCSIDiscoveryMethod_t p_discovery; /* Out */ 401*7978SPeter.Dunlap@Sun.COM boolean_t p_connected; /* Out */ 402*7978SPeter.Dunlap@Sun.COM uint32_t p_num_of_connections; /* Out */ 403*7978SPeter.Dunlap@Sun.COM /* ---- If connected == B_TRUE then lastErr has no meaning. ---- */ 404*7978SPeter.Dunlap@Sun.COM iscsi_error_t p_last_err; /* Out */ 405*7978SPeter.Dunlap@Sun.COM /* 406*7978SPeter.Dunlap@Sun.COM * Target portal group tag = -1 value means default. 407*7978SPeter.Dunlap@Sun.COM */ 408*7978SPeter.Dunlap@Sun.COM int p_tpgt_conf; /* Out */ 409*7978SPeter.Dunlap@Sun.COM int p_tpgt_nego; /* Out */ 410*7978SPeter.Dunlap@Sun.COM uchar_t p_isid[ISCSI_ISID_LEN]; /* Out */ 411*7978SPeter.Dunlap@Sun.COM uchar_t p_reserved[128]; 412*7978SPeter.Dunlap@Sun.COM } iscsi_property_t; 413*7978SPeter.Dunlap@Sun.COM 414*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSITargetDeviceList { 415*7978SPeter.Dunlap@Sun.COM uint32_t tl_vers, /* In */ 416*7978SPeter.Dunlap@Sun.COM tl_in_cnt, /* In */ 417*7978SPeter.Dunlap@Sun.COM tl_tgt_list_type, /* In */ 418*7978SPeter.Dunlap@Sun.COM tl_out_cnt, /* Out */ 419*7978SPeter.Dunlap@Sun.COM tl_oid_list[1]; /* Out */ 420*7978SPeter.Dunlap@Sun.COM } iscsi_target_list_t; 421*7978SPeter.Dunlap@Sun.COM 422*7978SPeter.Dunlap@Sun.COM typedef struct _iSCSIStaticTargetProperties { 423*7978SPeter.Dunlap@Sun.COM uint32_t p_vers, /* In */ 424*7978SPeter.Dunlap@Sun.COM p_oid; /* In */ 425*7978SPeter.Dunlap@Sun.COM uchar_t p_name[ISCSI_MAX_NAME_LEN]; /* Out */ 426*7978SPeter.Dunlap@Sun.COM uint_t p_name_len; /* Out */ 427*7978SPeter.Dunlap@Sun.COM iscsi_addr_list_t p_addr_list; /* Out */ 428*7978SPeter.Dunlap@Sun.COM } iscsi_static_property_t; 429*7978SPeter.Dunlap@Sun.COM 430*7978SPeter.Dunlap@Sun.COM typedef enum iscsi_lun_status { 431*7978SPeter.Dunlap@Sun.COM LunValid, LunDoesNotExist 432*7978SPeter.Dunlap@Sun.COM } iscsi_lun_status_t; 433*7978SPeter.Dunlap@Sun.COM 434*7978SPeter.Dunlap@Sun.COM /* 435*7978SPeter.Dunlap@Sun.COM * SCSI inquiry vendor and product identifier buffer length - these values are 436*7978SPeter.Dunlap@Sun.COM * defined by the identifier length plus 1 byte for the 437*7978SPeter.Dunlap@Sun.COM * null termination. 438*7978SPeter.Dunlap@Sun.COM */ 439*7978SPeter.Dunlap@Sun.COM #define ISCSI_INQ_VID_BUF_LEN 9 /* 8 byte ID */ 440*7978SPeter.Dunlap@Sun.COM #define ISCSI_INQ_PID_BUF_LEN 17 /* 16 byte ID */ 441*7978SPeter.Dunlap@Sun.COM 442*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_lun_props { 443*7978SPeter.Dunlap@Sun.COM uint32_t lp_vers, /* In */ 444*7978SPeter.Dunlap@Sun.COM lp_tgt_oid, /* In */ 445*7978SPeter.Dunlap@Sun.COM lp_oid, /* In */ 446*7978SPeter.Dunlap@Sun.COM lp_num, /* Out */ 447*7978SPeter.Dunlap@Sun.COM lp_status; /* Out */ 448*7978SPeter.Dunlap@Sun.COM char lp_pathname[MAXPATHLEN], /* Out */ 449*7978SPeter.Dunlap@Sun.COM lp_vid[ISCSI_INQ_VID_BUF_LEN], /* Out */ 450*7978SPeter.Dunlap@Sun.COM lp_pid[ISCSI_INQ_PID_BUF_LEN]; /* Out */ 451*7978SPeter.Dunlap@Sun.COM time_t lp_time_online; /* Out */ 452*7978SPeter.Dunlap@Sun.COM } iscsi_lun_props_t; 453*7978SPeter.Dunlap@Sun.COM 454*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_if_lun { 455*7978SPeter.Dunlap@Sun.COM uint32_t l_tgt_oid, 456*7978SPeter.Dunlap@Sun.COM l_oid, 457*7978SPeter.Dunlap@Sun.COM l_num; 458*7978SPeter.Dunlap@Sun.COM } iscsi_if_lun_t; 459*7978SPeter.Dunlap@Sun.COM 460*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_lun_list { 461*7978SPeter.Dunlap@Sun.COM uint32_t ll_vers; /* In */ 462*7978SPeter.Dunlap@Sun.COM boolean_t ll_all_tgts; /* In */ 463*7978SPeter.Dunlap@Sun.COM uint32_t ll_tgt_oid, /* In */ 464*7978SPeter.Dunlap@Sun.COM ll_in_cnt, /* In */ 465*7978SPeter.Dunlap@Sun.COM ll_out_cnt; /* Out */ 466*7978SPeter.Dunlap@Sun.COM iscsi_if_lun_t ll_luns[1]; /* Out */ 467*7978SPeter.Dunlap@Sun.COM } iscsi_lun_list_t; 468*7978SPeter.Dunlap@Sun.COM 469*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_conn_props { 470*7978SPeter.Dunlap@Sun.COM uint32_t cp_vers, /* In */ 471*7978SPeter.Dunlap@Sun.COM cp_oid, /* In */ 472*7978SPeter.Dunlap@Sun.COM cp_cid, /* In */ 473*7978SPeter.Dunlap@Sun.COM cp_sess_oid; /* In */ 474*7978SPeter.Dunlap@Sun.COM union { 475*7978SPeter.Dunlap@Sun.COM struct sockaddr_in soa4; 476*7978SPeter.Dunlap@Sun.COM struct sockaddr_in6 soa6; 477*7978SPeter.Dunlap@Sun.COM } cp_local; /* Out */ 478*7978SPeter.Dunlap@Sun.COM union { 479*7978SPeter.Dunlap@Sun.COM struct sockaddr_in soa4; 480*7978SPeter.Dunlap@Sun.COM struct sockaddr_in6 soa6; 481*7978SPeter.Dunlap@Sun.COM } cp_peer; /* Out */ 482*7978SPeter.Dunlap@Sun.COM 483*7978SPeter.Dunlap@Sun.COM 484*7978SPeter.Dunlap@Sun.COM iscsi_login_params_t cp_params; 485*7978SPeter.Dunlap@Sun.COM boolean_t cp_params_valid; 486*7978SPeter.Dunlap@Sun.COM 487*7978SPeter.Dunlap@Sun.COM } iscsi_conn_props_t; 488*7978SPeter.Dunlap@Sun.COM 489*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_if_conn { 490*7978SPeter.Dunlap@Sun.COM uint32_t c_sess_oid, 491*7978SPeter.Dunlap@Sun.COM c_oid, 492*7978SPeter.Dunlap@Sun.COM c_cid; 493*7978SPeter.Dunlap@Sun.COM } iscsi_if_conn_t; 494*7978SPeter.Dunlap@Sun.COM 495*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_conn_list { 496*7978SPeter.Dunlap@Sun.COM uint32_t cl_vers; /* In */ 497*7978SPeter.Dunlap@Sun.COM boolean_t cl_all_sess; /* In */ 498*7978SPeter.Dunlap@Sun.COM uint32_t cl_sess_oid, /* In */ 499*7978SPeter.Dunlap@Sun.COM cl_in_cnt, /* In */ 500*7978SPeter.Dunlap@Sun.COM cl_out_cnt; /* Out */ 501*7978SPeter.Dunlap@Sun.COM iscsi_if_conn_t cl_list[1]; /* Out */ 502*7978SPeter.Dunlap@Sun.COM } iscsi_conn_list_t; 503*7978SPeter.Dunlap@Sun.COM 504*7978SPeter.Dunlap@Sun.COM typedef enum iSNSDiscoveryMethod { 505*7978SPeter.Dunlap@Sun.COM iSNSDiscoveryMethodStatic = 0, 506*7978SPeter.Dunlap@Sun.COM iSNSDiscoveryMethodDHCP = 1, 507*7978SPeter.Dunlap@Sun.COM iSNSDiscoveryMethodSLP = 2 508*7978SPeter.Dunlap@Sun.COM } isns_method_t; 509*7978SPeter.Dunlap@Sun.COM 510*7978SPeter.Dunlap@Sun.COM typedef struct iSCSIDiscoveryProperties { 511*7978SPeter.Dunlap@Sun.COM uint32_t vers; 512*7978SPeter.Dunlap@Sun.COM boolean_t iSNSDiscoverySettable; 513*7978SPeter.Dunlap@Sun.COM boolean_t iSNSDiscoveryEnabled; 514*7978SPeter.Dunlap@Sun.COM isns_method_t iSNSDiscoveryMethod; 515*7978SPeter.Dunlap@Sun.COM unsigned char iSNSDomainName[256]; 516*7978SPeter.Dunlap@Sun.COM boolean_t SLPDiscoverySettable; 517*7978SPeter.Dunlap@Sun.COM boolean_t SLPDiscoveryEnabled; 518*7978SPeter.Dunlap@Sun.COM boolean_t StaticDiscoverySettable; 519*7978SPeter.Dunlap@Sun.COM boolean_t StaticDiscoveryEnabled; 520*7978SPeter.Dunlap@Sun.COM boolean_t SendTargetsDiscoverySettable; 521*7978SPeter.Dunlap@Sun.COM boolean_t SendTargetsDiscoveryEnabled; 522*7978SPeter.Dunlap@Sun.COM } iSCSIDiscoveryProperties_t; 523*7978SPeter.Dunlap@Sun.COM 524*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_uscsi { 525*7978SPeter.Dunlap@Sun.COM uint32_t iu_vers; 526*7978SPeter.Dunlap@Sun.COM uint32_t iu_oid; 527*7978SPeter.Dunlap@Sun.COM int iu_tpgt; 528*7978SPeter.Dunlap@Sun.COM uint32_t iu_len; 529*7978SPeter.Dunlap@Sun.COM uint32_t iu_lun; 530*7978SPeter.Dunlap@Sun.COM struct uscsi_cmd iu_ucmd; 531*7978SPeter.Dunlap@Sun.COM } iscsi_uscsi_t; 532*7978SPeter.Dunlap@Sun.COM 533*7978SPeter.Dunlap@Sun.COM #if defined(_SYSCALL32) 534*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_uscsi32 { 535*7978SPeter.Dunlap@Sun.COM uint32_t iu_vers; 536*7978SPeter.Dunlap@Sun.COM uint32_t iu_oid; 537*7978SPeter.Dunlap@Sun.COM int iu_tpgt; 538*7978SPeter.Dunlap@Sun.COM uint32_t iu_len; 539*7978SPeter.Dunlap@Sun.COM uint32_t iu_lun; 540*7978SPeter.Dunlap@Sun.COM struct uscsi_cmd32 iu_ucmd; 541*7978SPeter.Dunlap@Sun.COM } iscsi_uscsi32_t; 542*7978SPeter.Dunlap@Sun.COM #endif /* _SYSCALL32 */ 543*7978SPeter.Dunlap@Sun.COM 544*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_sendtgts_entry { 545*7978SPeter.Dunlap@Sun.COM /* ---- Node name, NULL terminated UTF-8 string ---- */ 546*7978SPeter.Dunlap@Sun.COM uchar_t ste_name[ISCSI_MAX_NAME_LEN]; 547*7978SPeter.Dunlap@Sun.COM 548*7978SPeter.Dunlap@Sun.COM iscsi_addr_t ste_ipaddr; 549*7978SPeter.Dunlap@Sun.COM int ste_tpgt; 550*7978SPeter.Dunlap@Sun.COM } iscsi_sendtgts_entry_t; 551*7978SPeter.Dunlap@Sun.COM 552*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_sendtgts_list { 553*7978SPeter.Dunlap@Sun.COM entry_t stl_entry; /* In */ 554*7978SPeter.Dunlap@Sun.COM uint32_t stl_in_cnt, /* In */ 555*7978SPeter.Dunlap@Sun.COM stl_out_cnt; /* Out */ 556*7978SPeter.Dunlap@Sun.COM iscsi_sendtgts_entry_t stl_list[1]; /* Out */ 557*7978SPeter.Dunlap@Sun.COM } iscsi_sendtgts_list_t; 558*7978SPeter.Dunlap@Sun.COM 559*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_statictgt_entry { 560*7978SPeter.Dunlap@Sun.COM entry_t te_entry; /* In */ 561*7978SPeter.Dunlap@Sun.COM uchar_t te_name[ISCSI_MAX_NAME_LEN]; /* In */ 562*7978SPeter.Dunlap@Sun.COM } iscsi_target_entry_t; 563*7978SPeter.Dunlap@Sun.COM 564*7978SPeter.Dunlap@Sun.COM /* iSNS Draft - section 4.1.1. */ 565*7978SPeter.Dunlap@Sun.COM typedef struct isns_portal_group { 566*7978SPeter.Dunlap@Sun.COM uint8_t pg_iscsi_name[ISCSI_MAX_NAME_LEN]; 567*7978SPeter.Dunlap@Sun.COM union { 568*7978SPeter.Dunlap@Sun.COM in_addr_t u_ip4; 569*7978SPeter.Dunlap@Sun.COM in6_addr_t u_ip6; 570*7978SPeter.Dunlap@Sun.COM } pg_ip_addr; 571*7978SPeter.Dunlap@Sun.COM int insize; 572*7978SPeter.Dunlap@Sun.COM 573*7978SPeter.Dunlap@Sun.COM in_port_t pg_port; 574*7978SPeter.Dunlap@Sun.COM uint16_t pg_tag; 575*7978SPeter.Dunlap@Sun.COM 576*7978SPeter.Dunlap@Sun.COM iscsi_ipaddr_t isns_server_ip; 577*7978SPeter.Dunlap@Sun.COM uint32_t isns_server_port; 578*7978SPeter.Dunlap@Sun.COM } isns_portal_group_t; 579*7978SPeter.Dunlap@Sun.COM 580*7978SPeter.Dunlap@Sun.COM typedef struct isns_portal_group_list { 581*7978SPeter.Dunlap@Sun.COM uint32_t pg_in_cnt, 582*7978SPeter.Dunlap@Sun.COM pg_out_cnt; 583*7978SPeter.Dunlap@Sun.COM isns_portal_group_t pg_list[1]; 584*7978SPeter.Dunlap@Sun.COM } isns_portal_group_list_t; 585*7978SPeter.Dunlap@Sun.COM 586*7978SPeter.Dunlap@Sun.COM typedef struct isns_server_portal_group_list { 587*7978SPeter.Dunlap@Sun.COM iscsi_addr_t addr; 588*7978SPeter.Dunlap@Sun.COM isns_portal_group_list_t addr_port_list; 589*7978SPeter.Dunlap@Sun.COM } isns_server_portal_group_list_t; 590*7978SPeter.Dunlap@Sun.COM 591*7978SPeter.Dunlap@Sun.COM #define ISCSI_MIN_CONFIG_SESSIONS 1 592*7978SPeter.Dunlap@Sun.COM /* lowered max config sessions due to ct_power_cnt >= 0 assert */ 593*7978SPeter.Dunlap@Sun.COM #define ISCSI_MAX_CONFIG_SESSIONS 4 594*7978SPeter.Dunlap@Sun.COM 595*7978SPeter.Dunlap@Sun.COM typedef struct iscsi_config_sess { 596*7978SPeter.Dunlap@Sun.COM uint32_t ics_ver; 597*7978SPeter.Dunlap@Sun.COM uint32_t ics_oid; 598*7978SPeter.Dunlap@Sun.COM boolean_t ics_bound; 599*7978SPeter.Dunlap@Sun.COM uint_t ics_in; 600*7978SPeter.Dunlap@Sun.COM uint_t ics_out; 601*7978SPeter.Dunlap@Sun.COM iscsi_ipaddr_t ics_bindings[1]; 602*7978SPeter.Dunlap@Sun.COM } iscsi_config_sess_t; 603*7978SPeter.Dunlap@Sun.COM 604*7978SPeter.Dunlap@Sun.COM #define ISCSI_SESSION_CONFIG_SIZE(SIZE) \ 605*7978SPeter.Dunlap@Sun.COM (sizeof (iscsi_config_sess_t) + \ 606*7978SPeter.Dunlap@Sun.COM ((SIZE - 1) * sizeof (iscsi_ipaddr_t))) 607*7978SPeter.Dunlap@Sun.COM 608*7978SPeter.Dunlap@Sun.COM /* 609*7978SPeter.Dunlap@Sun.COM * Event class and subclass information 610*7978SPeter.Dunlap@Sun.COM */ 611*7978SPeter.Dunlap@Sun.COM #define EC_ISCSI "EC_iSCSI" 612*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_STATIC_START "ESC_static_start" 613*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_STATIC_END "ESC_static_end" 614*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_SEND_TARGETS_START "ESC_send_targets_start" 615*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_SEND_TARGETS_END "ESC_send_targets_end" 616*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_SLP_START "ESC_slp_start" 617*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_SLP_END "ESC_slp_end" 618*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_ISNS_START "ESC_isns_start" 619*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_ISNS_END "ESC_isns_end" 620*7978SPeter.Dunlap@Sun.COM #define ESC_ISCSI_PROP_CHANGE "ESC_prop_change" 621*7978SPeter.Dunlap@Sun.COM 622*7978SPeter.Dunlap@Sun.COM #ifdef _KERNEL 623*7978SPeter.Dunlap@Sun.COM /* ---- iscsi_utils.c ---- */ 624*7978SPeter.Dunlap@Sun.COM extern int iscsid_open(char *, int, int); 625*7978SPeter.Dunlap@Sun.COM extern int iscsid_close(int); 626*7978SPeter.Dunlap@Sun.COM extern int iscsid_remove(char *filename); 627*7978SPeter.Dunlap@Sun.COM extern int iscsid_rename(char *oldname, char *newname); 628*7978SPeter.Dunlap@Sun.COM extern ssize_t iscsid_write(int, void *, ssize_t); 629*7978SPeter.Dunlap@Sun.COM extern ssize_t iscsid_read(int, void *, ssize_t); 630*7978SPeter.Dunlap@Sun.COM extern ssize_t iscsid_sendto(struct sonode *, void *, size_t, 631*7978SPeter.Dunlap@Sun.COM struct sockaddr *, socklen_t); 632*7978SPeter.Dunlap@Sun.COM extern ssize_t iscsid_recvfrom(struct sonode *, void *buffer, 633*7978SPeter.Dunlap@Sun.COM size_t len); 634*7978SPeter.Dunlap@Sun.COM extern int iscsid_errno; 635*7978SPeter.Dunlap@Sun.COM #endif 636*7978SPeter.Dunlap@Sun.COM 637*7978SPeter.Dunlap@Sun.COM /* 638*7978SPeter.Dunlap@Sun.COM * Function prototypes for those routines found in the common code 639*7978SPeter.Dunlap@Sun.COM */ 640*7978SPeter.Dunlap@Sun.COM /* ---- utils.c ---- */ 641*7978SPeter.Dunlap@Sun.COM extern boolean_t utils_iqn_create(char *, int); 642*7978SPeter.Dunlap@Sun.COM extern char *prt_bitmap(int, char *, char *, int); 643*7978SPeter.Dunlap@Sun.COM extern char *utils_map_param(int); 644*7978SPeter.Dunlap@Sun.COM extern boolean_t parse_addr_port_tpgt(char *in, char **addr, 645*7978SPeter.Dunlap@Sun.COM int *type, char **port, char **tpgt); 646*7978SPeter.Dunlap@Sun.COM 647*7978SPeter.Dunlap@Sun.COM #ifdef __cplusplus 648*7978SPeter.Dunlap@Sun.COM } 649*7978SPeter.Dunlap@Sun.COM #endif 650*7978SPeter.Dunlap@Sun.COM 651*7978SPeter.Dunlap@Sun.COM #endif /* _ISCSI_IF_H */ 652