Home | History | Annotate | Download | only in idm
      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 #ifndef _IDM_TEXT_H_
     26 #define	_IDM_TEXT_H_
     27 
     28 #ifdef	__cplusplus
     29 extern "C" {
     30 #endif
     31 
     32 #include <sys/idm/idm_impl.h>
     33 
     34 /*
     35  * Numerical identifiers for iSCSI name-value pair keys (just so that
     36  * we can use case statements to handle a particular key-value pair
     37  * after we find it in idm_kvpair_xlate).
     38  *
     39  * We want to use a bitmask to keep track of negotiated key-value pairs
     40  * so keep this enum under 64 values -- or spend some time reworking the
     41  * login code.
     42  */
     43 typedef enum {
     44 	KI_AUTH_METHOD = 1,
     45 	KI_KRB_AP_REQ,
     46 	KI_KRB_AP_REP,
     47 
     48 	/* SPKM */
     49 	KI_SPKM_REQ,
     50 	KI_SPKM_ERROR,
     51 	KI_SPKM_REP_TI,
     52 	KI_SPKM_REP_IT,
     53 
     54 	/*
     55 	 * SRP
     56 	 */
     57 	KI_SRP_U,
     58 	KI_TARGET_AUTH,
     59 	KI_SRP_GROUP,
     60 	KI_SRP_A,
     61 	KI_SRP_B,
     62 	KI_SRP_M,
     63 	KI_SRM_HM,
     64 
     65 	/*
     66 	 * CHAP
     67 	 */
     68 	KI_CHAP_A,
     69 	KI_CHAP_I,
     70 	KI_CHAP_C,
     71 	KI_CHAP_N,
     72 	KI_CHAP_R,
     73 
     74 
     75 	/*
     76 	 * ISCSI Operational Parameter Keys
     77 	 */
     78 	KI_HEADER_DIGEST,
     79 	KI_DATA_DIGEST,
     80 	KI_MAX_CONNECTIONS,
     81 	KI_SEND_TARGETS,
     82 	KI_TARGET_NAME,
     83 	KI_INITIATOR_NAME,
     84 	KI_TARGET_ALIAS,
     85 	KI_INITIATOR_ALIAS,
     86 	KI_TARGET_ADDRESS,
     87 	KI_TARGET_PORTAL_GROUP_TAG,
     88 	KI_INITIAL_R2T,
     89 	KI_IMMEDIATE_DATA,
     90 	KI_MAX_RECV_DATA_SEGMENT_LENGTH,
     91 	KI_MAX_BURST_LENGTH,
     92 	KI_FIRST_BURST_LENGTH,
     93 	KI_DEFAULT_TIME_2_WAIT,
     94 	KI_DEFAULT_TIME_2_RETAIN,
     95 	KI_MAX_OUTSTANDING_R2T,
     96 	KI_DATA_PDU_IN_ORDER,
     97 	KI_DATA_SEQUENCE_IN_ORDER,
     98 	KI_ERROR_RECOVERY_LEVEL,
     99 	KI_SESSION_TYPE,
    100 	KI_OFMARKER,
    101 	KI_OFMARKERINT,
    102 	KI_IFMARKER,
    103 	KI_IFMARKERINT,
    104 
    105 	/*
    106 	 * iSER-specific keys
    107 	 */
    108 	KI_RDMA_EXTENSIONS,
    109 	KI_TARGET_RECV_DATA_SEGMENT_LENGTH,
    110 	KI_INITIATOR_RECV_DATA_SEGMENT_LENGTH,
    111 	KI_MAX_OUTSTANDING_UNEXPECTED_PDUS,
    112 
    113 	/*
    114 	 * End of list marker, no keys below here.
    115 	 */
    116 	KI_MAX_KEY
    117 } iscsikey_id_t;
    118 
    119 /* Numerical types for iSCSI name-value pair values */
    120 typedef enum {
    121 	KT_TEXT,
    122 	KT_ISCSI_NAME,
    123 	KT_ISCSI_LOCAL_NAME,
    124 	KT_BOOLEAN,
    125 	KT_NUMERICAL, /* Hex or decimal constant */
    126 	KT_LARGE_NUMERICAL, /* Hex, decimal or Base64 constant */
    127 	KT_NUMERIC_RANGE,
    128 	KT_REGULAR_BINARY, /* Hex, decimal, base64 not longer than 64 bits */
    129 	KT_LARGE_BINARY, /* Hex, decimal, base64 longer than 64 bites */
    130 	KT_BINARY,	/* Regular binary or large binary */
    131 	KT_SIMPLE,
    132 	KT_LIST_OF_VALUES
    133 } idmkey_type_t;
    134 
    135 typedef struct {
    136 	iscsikey_id_t		ik_key_id;
    137 	char			*ik_key_name;
    138 	idmkey_type_t		ik_idm_type; /* RFC type */
    139 	boolean_t		ik_declarative;
    140 } idm_kv_xlate_t;
    141 
    142 const idm_kv_xlate_t *
    143 idm_lookup_kv_xlate(const char *key, int keylen);
    144 
    145 int
    146 idm_nvlist_add_keyvalue(nvlist_t *nvl, char *key, int keylen, char *value);
    147 
    148 int
    149 idm_textbuf_to_nvlist(nvlist_t *nvl, char **textbuf, int *textbuflen);
    150 
    151 int
    152 idm_textbuf_to_firstfraglen(void *textbuf, int textbuflen);
    153 
    154 int
    155 idm_nvlist_to_textbuf(nvlist_t *nvl, char **textbuf, int *textbuflen,
    156     int *tblen_required);
    157 
    158 kv_status_t
    159 idm_nvstat_to_kvstat(int nvrc);
    160 
    161 void
    162 idm_kvstat_to_error(kv_status_t kvrc, uint8_t *class, uint8_t *detail);
    163 
    164 int
    165 idm_nvlist_add_id(nvlist_t *nvl, iscsikey_id_t kv_id, char *value);
    166 
    167 nvpair_t *
    168 idm_get_next_listvalue(nvpair_t *value_list, nvpair_t *curr_nvp);
    169 
    170 char *
    171 idm_id_to_name(iscsikey_id_t kv_id);
    172 
    173 char *
    174 idm_nvpair_value_to_textbuf(nvpair_t *nvp);
    175 
    176 idm_status_t
    177 idm_pdu_list_to_nvlist(list_t *pdu_list, nvlist_t **nvlist,
    178     uint8_t *error_detail);
    179 
    180 void *
    181 idm_nvlist_to_itextbuf(nvlist_t *nvl);
    182 
    183 char *
    184 idm_pdu_init_text_data(idm_pdu_t *pdu, void *arg,
    185     int max_xfer_len, char *bufptr, int *transit);
    186 
    187 void
    188 idm_itextbuf_free(void *arg);
    189 
    190 #ifdef	__cplusplus
    191 }
    192 #endif
    193 
    194 #endif /* _IDM_TEXT_H_ */
    195