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