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