Home | History | Annotate | Download | only in iscsiadm
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #ifndef	_ISCSIADM_H
     27 #define	_ISCSIADM_H
     28 
     29 #ifdef	__cplusplus
     30 extern "C" {
     31 #endif
     32 
     33 #include <sys/iscsi_protocol.h>
     34 #include <sys/scsi/adapters/iscsi_if.h>
     35 #include <ima.h>
     36 
     37 #include <cmdparse.h>
     38 
     39 #define	ADD	SUBCOMMAND(0)
     40 #define	LIST	SUBCOMMAND(1)
     41 #define	MODIFY	SUBCOMMAND(2)
     42 #define	REMOVE	SUBCOMMAND(3)
     43 
     44 #define	TARGET			OBJECT(0)
     45 #define	NODE			OBJECT(1)
     46 #define	INITIATOR		OBJECT(2)
     47 #define	STATIC_CONFIG		OBJECT(3)
     48 #define	DISCOVERY_ADDRESS	OBJECT(4)
     49 #define	DISCOVERY		OBJECT(5)
     50 #define	TARGET_PARAM		OBJECT(6)
     51 #define	ISNS_SERVER_ADDRESS	OBJECT(7)
     52 
     53 #define	DATA_SEQ_IN_ORDER	0x01
     54 #define	DEFAULT_TIME_2_RETAIN	0x02
     55 #define	DEFAULT_TIME_2_WAIT	0x03
     56 #define	FIRST_BURST_LENGTH	0x04
     57 #define	IMMEDIATE_DATA		0x05
     58 #define	INITIAL_R2T		0x06
     59 #define	MAX_BURST_LENGTH	0x07
     60 #define	DATA_PDU_IN_ORDER	0x08
     61 #define	MAX_OUTSTANDING_R2T	0x09
     62 #define	MAX_RECV_DATA_SEG_LEN	0x0a
     63 #define	HEADER_DIGEST		0x0b
     64 #define	DATA_DIGEST		0x0c
     65 #define	MAX_CONNECTIONS		0x0d
     66 #define	ERROR_RECOVERY_LEVEL	0x0e
     67 #define	RECV_LOGIN_RSP_TIMEOUT  0x0f
     68 #define	CONN_LOGIN_MAX		0x10
     69 #define	POLLING_LOGIN_DELAY	0x11
     70 
     71 #define	AUTH_NAME		0x01
     72 #define	AUTH_PASSWORD		0x02
     73 
     74 #define	ISCSIADM_ARG_ENABLE	"enable"
     75 #define	ISCSIADM_ARG_DISABLE	"disable"
     76 /*
     77  * This object type is not defined by IMA.
     78  */
     79 #define	SUN_IMA_OBJECT_TYPE_CONN  13	/* Currently not defined in IMA */
     80 #define	SUN_IMA_NODE_ALIAS_LEN	256
     81 
     82 #define	MAKE_IMA_ERROR(x)	((IMA_STATUS)(IMA_STATUS_ERROR | (x)))
     83 #define	SUN_IMA_SYSTEM_ERROR(status) (((IMA_STATUS)(status) & \
     84 	(IMA_STATUS)SUN_IMA_ERROR_SYSTEM_ERROR) == 0x8FFF0000 \
     85 	? IMA_TRUE : IMA_FALSE)
     86 #define	SUN_GET_SYSTEM_ERROR(x)	(((IMA_STATUS)(x) & 0x0000FFFF))
     87 #define	SUN_IMA_ERROR_SYSTEM_ERROR MAKE_IMA_ERROR(0x0fff0000)
     88 
     89 typedef struct _parameterTbl {
     90 	char *name;
     91 	int val;
     92 } parameterTbl_t;
     93 
     94 /*
     95  * The following interfaces are not defined in IMA 1.1. Some of them
     96  * are requirement candidates for the next IMA release.
     97  */
     98 
     99 #define	SUN_IMA_MAX_DIGEST_ALGORITHMS	2	/* NONE and CRC 32 */
    100 #define	SUN_IMA_IP_ADDRESS_PORT_LEN	256
    101 #define	SUN_IMA_MAX_RADIUS_SECRET_LEN	128
    102 
    103 /* Currently not defined in  IMA_TARGET_DISCOVERY_METHOD enum */
    104 #define	IMA_TARGET_DISCOVERY_METHOD_UNKNOWN  0
    105 
    106 typedef enum
    107 {
    108     SUN_IMA_DIGEST_NONE = 0,
    109     SUN_IMA_DIGEST_CRC32 = 1
    110 } SUN_IMA_DIGEST_ALGORITHM;
    111 
    112 typedef struct _SUN_IMA_DIGEST_ALGORITHM_VALUE
    113 {
    114     IMA_UINT defaultAlgorithmCount;
    115     SUN_IMA_DIGEST_ALGORITHM defaultAlgorithms[SUN_IMA_MAX_DIGEST_ALGORITHMS];
    116 
    117     IMA_BOOL currentValid;
    118     IMA_UINT currentAlgorithmCount;
    119     SUN_IMA_DIGEST_ALGORITHM currentAlgorithms[SUN_IMA_MAX_DIGEST_ALGORITHMS];
    120 
    121     IMA_BOOL negotiatedValid;
    122     IMA_UINT negotiatedAlgorithmCount;
    123     SUN_IMA_DIGEST_ALGORITHM
    124 	negotiatedAlgorithms[SUN_IMA_MAX_DIGEST_ALGORITHMS];
    125 } SUN_IMA_DIGEST_ALGORITHM_VALUE;
    126 
    127 typedef struct _SUN_IMA_DISC_ADDR_PROP_LIST
    128 {
    129     IMA_UINT discAddrCount;
    130     IMA_DISCOVERY_ADDRESS_PROPERTIES props[1];
    131 } SUN_IMA_DISC_ADDR_PROP_LIST;
    132 
    133 typedef struct _SUN_IMA_RADIUS_CONFIG
    134 {
    135 	char hostnameIpAddress[SUN_IMA_IP_ADDRESS_PORT_LEN];
    136 	IMA_BOOL isIpv6;
    137 	IMA_UINT16 port;
    138 	IMA_BOOL sharedSecretValid;
    139 	IMA_UINT sharedSecretLength;
    140 	IMA_BYTE sharedSecret[SUN_IMA_MAX_RADIUS_SECRET_LEN];
    141 } SUN_IMA_RADIUS_CONFIG;
    142 
    143 
    144 typedef struct _SUN_IMA_DISC_ADDRESS_KEY
    145 {
    146 	IMA_NODE_NAME name;
    147 	IMA_ADDRESS_KEY	address;
    148 	IMA_UINT16 tpgt;
    149 } SUN_IMA_DISC_ADDRESS_KEY;
    150 
    151 typedef struct _SUN_IMA_DISC_ADDRESS_KEY_PROPERTIES
    152 {
    153 	IMA_UINT keyCount;
    154 	SUN_IMA_DISC_ADDRESS_KEY keys[1];
    155 } SUN_IMA_DISC_ADDRESS_KEY_PROPERTIES;
    156 
    157 typedef struct _SUN_IMA_TARGET_ADDRESS
    158 {
    159     IMA_TARGET_ADDRESS imaStruct;
    160 	IMA_BOOL	defaultTpgt;	/* If true, tpgt becomes irrelvant */
    161 	IMA_UINT16	tpgt;
    162 } SUN_IMA_TARGET_ADDRESS;
    163 
    164 typedef struct _SUN_IMA_STATIC_DISCOVERY_TARGET
    165 {
    166 	IMA_NODE_NAME	targetName;
    167 	SUN_IMA_TARGET_ADDRESS  targetAddress;
    168 } SUN_IMA_STATIC_DISCOVERY_TARGET;
    169 
    170 typedef struct _SUN_IMA_STATIC_DISCOVERY_TARGET_PROPERTIES
    171 {
    172 	IMA_OID	associatedNodeOid;
    173 	IMA_OID	associatedLhbaOid;
    174 	SUN_IMA_STATIC_DISCOVERY_TARGET   staticTarget;
    175 } SUN_IMA_STATIC_DISCOVERY_TARGET_PROPERTIES;
    176 
    177 typedef struct _SUN_IMA_CONN_PROPERTIES {
    178 	IMA_UINT32	connectionID;
    179 	IMA_ADDRESS_KEY	local;
    180 	IMA_ADDRESS_KEY	peer;
    181 
    182 	IMA_BOOL   valuesValid;
    183 	IMA_UINT32 defaultTime2Retain;
    184 	IMA_UINT32 defaultTime2Wait;
    185 	IMA_UINT32 errorRecoveryLevel;
    186 	IMA_UINT32 firstBurstLength;
    187 	IMA_UINT32 maxBurstLength;
    188 	IMA_UINT32 maxConnections;
    189 	IMA_UINT32 maxOutstandingR2T;
    190 	IMA_UINT32 maxRecvDataSegmentLength;
    191 
    192 	IMA_BOOL dataPduInOrder;
    193 	IMA_BOOL dataSequenceInOrder;
    194 	IMA_BOOL immediateData;
    195 	IMA_BOOL initialR2T;
    196 
    197 	IMA_UINT headerDigest;
    198 	IMA_UINT dataDigest;
    199 
    200 } SUN_IMA_CONN_PROPERTIES;
    201 
    202 
    203 #define	SUN_IMA_LU_VENDOR_ID_LEN	ISCSI_INQ_VID_BUF_LEN
    204 #define	SUN_IMA_LU_PRODUCT_ID_LEN	ISCSI_INQ_PID_BUF_LEN
    205 typedef struct _SUN_IMA_LU_PROPERTIES
    206 {
    207     IMA_LU_PROPERTIES imaProps;
    208     IMA_CHAR	vendorId[SUN_IMA_LU_VENDOR_ID_LEN];
    209     IMA_CHAR	productId[SUN_IMA_LU_PRODUCT_ID_LEN];
    210 } SUN_IMA_LU_PROPERTIES;
    211 
    212 typedef struct _SUN_IMA_TARGET_PROPERTIES
    213 {
    214     IMA_TARGET_PROPERTIES imaProps;
    215     IMA_BOOL defaultTpgtConf;	/* If true, tpgtConf is irrelevant */
    216     IMA_UINT16 tpgtConf;
    217     IMA_BOOL defaultTpgtNego;	/* If true, tpgtNego is not connected */
    218     IMA_UINT16 tpgtNego;
    219     IMA_BYTE isid[ISCSI_ISID_LEN];
    220 } SUN_IMA_TARGET_PROPERTIES;
    221 
    222 typedef struct _SUN_IMA_CONFIG_SESSIONS {
    223 	/* True if sessions are bound to an interface */
    224 	IMA_BOOL	bound;	/* OUT */
    225 	/*
    226 	 * Memory allocated from caller.  In addition
    227 	 * on a Set this is the number of configured
    228 	 * sessions.
    229 	 */
    230 	IMA_UINT	in;	/* IN */
    231 	/* Number of Configured sessions on Get */
    232 	IMA_UINT	out;	/* OUT */
    233 	IMA_ADDRESS_KEY	bindings[1];	/* IN/OUT */
    234 } SUN_IMA_CONFIG_SESSIONS;
    235 
    236 typedef struct _SUN_IMA_STATIC_TARGET_PROPERTIES
    237 {
    238 	IMA_OID	associatedNodeOid;
    239 	IMA_OID	associatedLhbaOid;
    240 	SUN_IMA_STATIC_DISCOVERY_TARGET   staticTarget;
    241 } SUN_IMA_STATIC_TARGET_PROPERTIES;
    242 
    243 #ifdef	__cplusplus
    244 }
    245 #endif
    246 
    247 #endif	/* _ISCSIADM_H */
    248