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*42bf653bSPeter Gill * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 23a6d42e7dSPeter Dunlap */ 24a6d42e7dSPeter Dunlap 25a6d42e7dSPeter Dunlap #ifndef _ISCSIT_COMMON_H_ 26a6d42e7dSPeter Dunlap #define _ISCSIT_COMMON_H_ 27a6d42e7dSPeter Dunlap 28a6d42e7dSPeter Dunlap #ifdef _KERNEL 29a6d42e7dSPeter Dunlap #include <sys/nvpair.h> 30a6d42e7dSPeter Dunlap #else 31a6d42e7dSPeter Dunlap #include <libnvpair.h> 32a6d42e7dSPeter Dunlap #endif 33a6d42e7dSPeter Dunlap 34a6d42e7dSPeter Dunlap #ifdef __cplusplus 35a6d42e7dSPeter Dunlap extern "C" { 36a6d42e7dSPeter Dunlap #endif 37a6d42e7dSPeter Dunlap 38a6d42e7dSPeter Dunlap #define ISCSIT_API_VERS0 0 39a6d42e7dSPeter Dunlap 40bf604c64SPeter Dunlap #define ISCSIT_MODNAME "iscsit" 41bf604c64SPeter Dunlap #define ISCSIT_NODE "/devices/pseudo/iscsit@0:iscsit" 42bf604c64SPeter Dunlap 43a6d42e7dSPeter Dunlap typedef enum { 44a6d42e7dSPeter Dunlap ITCFG_SUCCESS = 0, 45a6d42e7dSPeter Dunlap ITCFG_INVALID, 46a6d42e7dSPeter Dunlap ITCFG_TGT_CREATE_ERR, 47a6d42e7dSPeter Dunlap ITCFG_MISC_ERR 48a6d42e7dSPeter Dunlap } it_cfg_status_t; 49a6d42e7dSPeter Dunlap 50a6d42e7dSPeter Dunlap /* 51a6d42e7dSPeter Dunlap * This structure is passed back to the driver during ISCSIT_IOC_ENABLE_SVC 52a6d42e7dSPeter Dunlap * in order to provide the fully qualified hostname for use as the EID 53a6d42e7dSPeter Dunlap * by iSNS. 54a6d42e7dSPeter Dunlap */ 55a6d42e7dSPeter Dunlap 56a6d42e7dSPeter Dunlap #define ISCSIT_MAX_HOSTNAME_LEN 256 57a6d42e7dSPeter Dunlap 58a6d42e7dSPeter Dunlap typedef struct iscsit_hostinfo_s { 59a6d42e7dSPeter Dunlap uint32_t length; 60a6d42e7dSPeter Dunlap char fqhn[ISCSIT_MAX_HOSTNAME_LEN]; 61a6d42e7dSPeter Dunlap } iscsit_hostinfo_t; 62a6d42e7dSPeter Dunlap 63a6d42e7dSPeter Dunlap #define ISCSIT_IOC_SET_CONFIG 1 64a6d42e7dSPeter Dunlap #define ISCSIT_IOC_GET_STATE 2 65a6d42e7dSPeter Dunlap #define ISCSIT_IOC_ENABLE_SVC 101 66a6d42e7dSPeter Dunlap #define ISCSIT_IOC_DISABLE_SVC 102 67a6d42e7dSPeter Dunlap 68a6d42e7dSPeter Dunlap /* XXX Rationalize these with other error values (used in it_smf.c */ 69a6d42e7dSPeter Dunlap #define ITADM_SUCCESS 0 70a6d42e7dSPeter Dunlap #define ITADM_FATAL_ERROR 0x1 71a6d42e7dSPeter Dunlap #define ITADM_NO_MEM 0x2 72a6d42e7dSPeter Dunlap #define ITADM_INVALID 0x4 73a6d42e7dSPeter Dunlap #define ITADM_NODATA 0x8 74a6d42e7dSPeter Dunlap #define ITADM_PERM 0x10 75a6d42e7dSPeter Dunlap 76a6d42e7dSPeter Dunlap 77a6d42e7dSPeter Dunlap #define PROP_AUTH "auth" 78a6d42e7dSPeter Dunlap #define PROP_ALIAS "alias" 79a6d42e7dSPeter Dunlap #define PROP_CHAP_USER "chapuser" 80a6d42e7dSPeter Dunlap #define PROP_CHAP_SECRET "chapsecret" 81a6d42e7dSPeter Dunlap #define PROP_TARGET_CHAP_USER "targetchapuser" 82a6d42e7dSPeter Dunlap #define PROP_TARGET_CHAP_SECRET "targetchapsecret" 83a6d42e7dSPeter Dunlap #define PROP_RADIUS_SERVER "radiusserver" 84a6d42e7dSPeter Dunlap #define PROP_RADIUS_SECRET "radiussecret" 85a6d42e7dSPeter Dunlap #define PROP_ISNS_ENABLED "isns" 86a6d42e7dSPeter Dunlap #define PROP_ISNS_SERVER "isnsserver" 87a6d42e7dSPeter Dunlap #define PROP_OLD_TARGET_NAME "oldtargetname" 88a6d42e7dSPeter Dunlap 89a6d42e7dSPeter Dunlap #define PA_AUTH_RADIUS "radius" 90a6d42e7dSPeter Dunlap #define PA_AUTH_CHAP "chap" 91a6d42e7dSPeter Dunlap #define PA_AUTH_NONE "none" 92a6d42e7dSPeter Dunlap 93a6d42e7dSPeter Dunlap typedef struct { 94a6d42e7dSPeter Dunlap int set_cfg_vers; 95a6d42e7dSPeter Dunlap int set_cfg_pnvlist_len; 96a6d42e7dSPeter Dunlap caddr_t set_cfg_pnvlist; 97a6d42e7dSPeter Dunlap } iscsit_ioc_set_config_t; 98a6d42e7dSPeter Dunlap 99a6d42e7dSPeter Dunlap typedef struct { 100a6d42e7dSPeter Dunlap int getst_vers; 101a6d42e7dSPeter Dunlap int getst_pnvlist_len; 102a6d42e7dSPeter Dunlap char *getst_pnvlist; 103a6d42e7dSPeter Dunlap } iscsit_ioc_getstate_t; 104a6d42e7dSPeter Dunlap 105a6d42e7dSPeter Dunlap #ifdef _SYSCALL32 106a6d42e7dSPeter Dunlap typedef struct { 107a6d42e7dSPeter Dunlap int set_cfg_vers; 108a6d42e7dSPeter Dunlap int set_cfg_pnvlist_len; 109a6d42e7dSPeter Dunlap caddr32_t set_cfg_pnvlist; 110a6d42e7dSPeter Dunlap } iscsit_ioc_set_config32_t; 111a6d42e7dSPeter Dunlap 112a6d42e7dSPeter Dunlap typedef struct { 113a6d42e7dSPeter Dunlap int getst_vers; 114a6d42e7dSPeter Dunlap int getst_pnvlist_len; 115a6d42e7dSPeter Dunlap caddr32_t getst_pnvlist; 116a6d42e7dSPeter Dunlap } iscsit_ioc_getstate32_t; 117a6d42e7dSPeter Dunlap #endif /* _SYSCALL32 */ 118a6d42e7dSPeter Dunlap 119bf604c64SPeter Dunlap /* Shared user/kernel structures */ 120bf604c64SPeter Dunlap /* Maximum size of a Target Portal Group name */ 121bf604c64SPeter Dunlap #define MAX_TPG_NAMELEN 256 /* XXX */ 122bf604c64SPeter Dunlap 123bf604c64SPeter Dunlap /* Maximum size of an iSCSI Target Node name */ 124bf604c64SPeter Dunlap #define MAX_ISCSI_NODENAMELEN 256 /* XXX */ 125bf604c64SPeter Dunlap 126bf604c64SPeter Dunlap /* 127bf604c64SPeter Dunlap * A target portal group tag is a binding between a target and a target 128bf604c64SPeter Dunlap * portal group along with a numerical value associated with that binding. 129bf604c64SPeter Dunlap * The numerical identifier is used as the 'target portal group tag' defined 130bf604c64SPeter Dunlap * in RFC3720. 131bf604c64SPeter Dunlap * 132bf604c64SPeter Dunlap * tpgt_tpg_name The name of the target portal group associated with 133bf604c64SPeter Dunlap * this target portal group tag. 134bf604c64SPeter Dunlap * tpgt_generation Generation number which is incremented each time the 135bf604c64SPeter Dunlap * structure changes. 136bf604c64SPeter Dunlap * tpgt_next Next target portal group tag in th list of target portal 137bf604c64SPeter Dunlap * group tags. If tpgt_next is NUL, then this is the last 138bf604c64SPeter Dunlap * target portal group in the list. 139bf604c64SPeter Dunlap * tpgt_tag A numerical identifier that uniquely identifies a 140bf604c64SPeter Dunlap * target portal group within the associated target node. 141bf604c64SPeter Dunlap */ 142bf604c64SPeter Dunlap typedef struct it_tpgt_s { 143bf604c64SPeter Dunlap char tpgt_tpg_name[MAX_TPG_NAMELEN]; 144bf604c64SPeter Dunlap uint64_t tpgt_generation; 145bf604c64SPeter Dunlap struct it_tpgt_s *tpgt_next; 146bf604c64SPeter Dunlap uint16_t tpgt_tag; 147bf604c64SPeter Dunlap } it_tpgt_t; 148bf604c64SPeter Dunlap 149bf604c64SPeter Dunlap /* 150bf604c64SPeter Dunlap * An iSCSI target node is represented by an it_tgt_structure. Each 151bf604c64SPeter Dunlap * target node includes a list of associated target portal group tags 152bf604c64SPeter Dunlap * and a list of properties. 153bf604c64SPeter Dunlap * 154bf604c64SPeter Dunlap * tgt_name The iSCSI target node name in either IQN or EUI 155bf604c64SPeter Dunlap * format (see RFC3720). 156bf604c64SPeter Dunlap * tgt_generation Generation number which is incremented each time 157bf604c64SPeter Dunlap * the structure changes. 158bf604c64SPeter Dunlap * tgt_next Next target in the list of targets. If tgt_next 159bf604c64SPeter Dunlap * is NULL, then this is the last target in the list. 160bf604c64SPeter Dunlap * tgt_tpgt_list A linked list representing the current target 161bf604c64SPeter Dunlap * portal group tags associated with this target. 162bf604c64SPeter Dunlap * tgt_tpgt_count The number of currently defined target portal 163bf604c64SPeter Dunlap * group tags. 164bf604c64SPeter Dunlap * tgt_properties An nvlist representation of the properties 165bf604c64SPeter Dunlap * associated with this target. This list can be 166bf604c64SPeter Dunlap * manipulated using libnvpair(3lib), and should be 167bf604c64SPeter Dunlap * validated and stored using it_tgt_setprop(). 168bf604c64SPeter Dunlap * 169bf604c64SPeter Dunlap * Target nvlist Properties: 170bf604c64SPeter Dunlap * 171bf604c64SPeter Dunlap * nvlist Key Type Valid Values 172bf604c64SPeter Dunlap * -------------------------------------------------------------------- 173bf604c64SPeter Dunlap * targetchapuser string any string or "none" to remove 174bf604c64SPeter Dunlap * targetchapsecret string string of at least 12 characters 175bf604c64SPeter Dunlap * but not more than 255 characters. 176bf604c64SPeter Dunlap * secret will be base64 encoded when 177bf604c64SPeter Dunlap * stored. 178bf604c64SPeter Dunlap * alias string any string or "none" to remove 179bf604c64SPeter Dunlap * auth string "radius", "chap", or "none" 180bf604c64SPeter Dunlap * 181bf604c64SPeter Dunlap */ 182bf604c64SPeter Dunlap typedef struct it_tgt_s { 183bf604c64SPeter Dunlap char tgt_name[MAX_ISCSI_NODENAMELEN]; 184bf604c64SPeter Dunlap uint64_t tgt_generation; 185bf604c64SPeter Dunlap struct it_tgt_s *tgt_next; 186bf604c64SPeter Dunlap it_tpgt_t *tgt_tpgt_list; 187bf604c64SPeter Dunlap uint32_t tgt_tpgt_count; 188bf604c64SPeter Dunlap nvlist_t *tgt_properties; 189bf604c64SPeter Dunlap } it_tgt_t; 190bf604c64SPeter Dunlap 191bf604c64SPeter Dunlap /* 192bf604c64SPeter Dunlap * A target portal is represented by an IP address and a listening 193bf604c64SPeter Dunlap * TCP port. 194bf604c64SPeter Dunlap * 195bf604c64SPeter Dunlap * portal_addr sockaddr_storage structure representing the 196bf604c64SPeter Dunlap * IPv4 or IPv6 address and TCP port associated 197bf604c64SPeter Dunlap * with the portal. 198bf604c64SPeter Dunlap * portal_next Next portal in the list of portals. If 199bf604c64SPeter Dunlap * portal_next is NULL, this is the last portal 200bf604c64SPeter Dunlap * in the list. 201bf604c64SPeter Dunlap */ 202bf604c64SPeter Dunlap typedef struct it_portal_s { 203bf604c64SPeter Dunlap struct sockaddr_storage portal_addr; 204*42bf653bSPeter Gill struct it_portal_s *portal_next; 205bf604c64SPeter Dunlap } it_portal_t; 206bf604c64SPeter Dunlap 207bf604c64SPeter Dunlap /* 208bf604c64SPeter Dunlap * A portal is an IP address and TCP port and a portal group is a set 209bf604c64SPeter Dunlap * of portals. Each defined portal belongs to exactly one portal group. 210bf604c64SPeter Dunlap * Applications can associate a target portal group with a particular 211bf604c64SPeter Dunlap * target using a target portal group name. Initiators can only connect 212bf604c64SPeter Dunlap * to targets through the portals associated with the target's target 213bf604c64SPeter Dunlap * portal group tags. 214bf604c64SPeter Dunlap * 215bf604c64SPeter Dunlap * tpg_name Identifier for the target portal group. 216bf604c64SPeter Dunlap * tpg_generation Generation number which is incremented each 217bf604c64SPeter Dunlap * time this structure changes. 218bf604c64SPeter Dunlap * tpg_next Next target portal group in the list of target 219bf604c64SPeter Dunlap * portal groups. If tpg_next is NULL, this is the 220bf604c64SPeter Dunlap * last target portal group in the list. 221bf604c64SPeter Dunlap * tpg_portal_count Number of it_portal_t structures in the list. 222bf604c64SPeter Dunlap * tpg_portal_list Linked list of it_portal_t structures. 223bf604c64SPeter Dunlap */ 224bf604c64SPeter Dunlap typedef struct it_tpg_s { 225bf604c64SPeter Dunlap char tpg_name[MAX_TPG_NAMELEN]; 226bf604c64SPeter Dunlap uint64_t tpg_generation; 227bf604c64SPeter Dunlap struct it_tpg_s *tpg_next; 228bf604c64SPeter Dunlap uint32_t tpg_portal_count; 229bf604c64SPeter Dunlap it_portal_t *tpg_portal_list; 230bf604c64SPeter Dunlap } it_tpg_t; 231bf604c64SPeter Dunlap 232bf604c64SPeter Dunlap /* 233bf604c64SPeter Dunlap * A context representing a remote iSCSI initiator node. The purpose 234bf604c64SPeter Dunlap * of this structure is to maintain information specific to a remote 235bf604c64SPeter Dunlap * initiator such as the CHAP username and CHAP secret. 236bf604c64SPeter Dunlap * 237bf604c64SPeter Dunlap * ini_name the iSCSI node name of the remote initiator. 238bf604c64SPeter Dunlap * ini_generation Generation number which is incremented each 239bf604c64SPeter Dunlap * time this structure changes. 240bf604c64SPeter Dunlap * ini_next Next initiator in the list of initiators. 241bf604c64SPeter Dunlap * If ini_next is NULL, this is the last initiator 242bf604c64SPeter Dunlap * in the list. 243bf604c64SPeter Dunlap * ini_properties Name/Value list containing the properties 244bf604c64SPeter Dunlap * associated with the initiator context. This list 245bf604c64SPeter Dunlap * can be manipulated using libnvpair(3lib), and should 246bf604c64SPeter Dunlap * be validated and stored using it_ini_setprop(). 247bf604c64SPeter Dunlap * 248bf604c64SPeter Dunlap * Initiator nvlist Properties: 249bf604c64SPeter Dunlap * 250bf604c64SPeter Dunlap * nvlist Key Type Valid Values 251bf604c64SPeter Dunlap * -------------------------------------------------------------------- 252bf604c64SPeter Dunlap * chapuser string any string 253bf604c64SPeter Dunlap * chapsecret string string of at least 12 characters 254bf604c64SPeter Dunlap * but not more than 255 characters. 255bf604c64SPeter Dunlap * secret will be base64 encoded when 256bf604c64SPeter Dunlap * stored. 257bf604c64SPeter Dunlap */ 258bf604c64SPeter Dunlap typedef struct it_ini_s { 259bf604c64SPeter Dunlap char ini_name[MAX_ISCSI_NODENAMELEN]; 260bf604c64SPeter Dunlap uint64_t ini_generation; 261bf604c64SPeter Dunlap struct it_ini_s *ini_next; 262bf604c64SPeter Dunlap nvlist_t *ini_properties; 263bf604c64SPeter Dunlap } it_ini_t; 264bf604c64SPeter Dunlap 265bf604c64SPeter Dunlap 266bf604c64SPeter Dunlap /* 267bf604c64SPeter Dunlap * This structure represents a complete configuration for the iscsit 268bf604c64SPeter Dunlap * port provider. In addition to the global configuration, it_config_t 269bf604c64SPeter Dunlap * includes lists of child objects including targets, target portal 270bf604c64SPeter Dunlap * groups and initiator contexts. Each object includes a "generation" 271bf604c64SPeter Dunlap * value which is used by the iscsit kernel driver to identify changes 272bf604c64SPeter Dunlap * from one configuration update to the next. 273bf604c64SPeter Dunlap * 274bf604c64SPeter Dunlap * stmf_token A uint64_t that contains the value returned from a 275bf604c64SPeter Dunlap * successful call to stmfGetProviderDataProt(3STMF). 276bf604c64SPeter Dunlap * This token is used to verify that the configuration 277bf604c64SPeter Dunlap * data persistently stored in COMSTAR has not been 278bf604c64SPeter Dunlap * modified since this version was loaded. 279bf604c64SPeter Dunlap * config_version Version number for this configuration structure 280bf604c64SPeter Dunlap * config_tgt_list Linked list of target contexts representing the 281bf604c64SPeter Dunlap * currently defined targets. Applications can add 282bf604c64SPeter Dunlap * targets to or remove targets from this list using 283bf604c64SPeter Dunlap * the it_tgt_create and it_tgt_delete functions. 284bf604c64SPeter Dunlap * config_tgt_count The number of currently defined targets. 285bf604c64SPeter Dunlap * config_tpg_list Linked list of target portal group contexts. 286bf604c64SPeter Dunlap * Applications can add or remove target portal groups 287bf604c64SPeter Dunlap * to/from this list using the it_tpg_create and 288bf604c64SPeter Dunlap * it_tpg_delete functions. 289bf604c64SPeter Dunlap * config_tpg_count The number of currently defined target portal groups 290bf604c64SPeter Dunlap * config_ini_list Linked list of initiator contexts. Applications 291bf604c64SPeter Dunlap * can add initiator contexts or remove initiator 292bf604c64SPeter Dunlap * contexts from this list using the it_ini_create 293bf604c64SPeter Dunlap * and it_ini_delete functions. 294bf604c64SPeter Dunlap * config_ini_count The number of currently defined initiator contexts. 295bf604c64SPeter Dunlap * config_global_properties 296bf604c64SPeter Dunlap * Name/Value list representing the current global 297bf604c64SPeter Dunlap * property settings. This list can be manipulated 298bf604c64SPeter Dunlap * using libnvpair(3lib), and should be validated 299bf604c64SPeter Dunlap * and stored using it_config_setprop(). 300bf604c64SPeter Dunlap * config_isns_svr_list 301bf604c64SPeter Dunlap * Linked list of currently defined iSNS servers. 302bf604c64SPeter Dunlap * Applications can add or remove iSNS servers by 303bf604c64SPeter Dunlap * using the it_config_setprop() function and changing 304bf604c64SPeter Dunlap * the array of iSNS servers stored in the "isnsserver" 305bf604c64SPeter Dunlap * property. 306bf604c64SPeter Dunlap * config_isns_svr_count 307bf604c64SPeter Dunlap * The number of currently defined iSNS servers. 308bf604c64SPeter Dunlap * 309bf604c64SPeter Dunlap * Global nvlist Properties: 310bf604c64SPeter Dunlap * 311bf604c64SPeter Dunlap * nvlist Key Type Valid Values 312bf604c64SPeter Dunlap * -------------------------------------------------------------------- 313bf604c64SPeter Dunlap * alias string any string 314bf604c64SPeter Dunlap * auth string "radius", "chap", or "none" 315bf604c64SPeter Dunlap * isns boolean B_TRUE, B_FALSE 316bf604c64SPeter Dunlap * isnsserver string array Array of portal specifications of 317bf604c64SPeter Dunlap * the form IPaddress:port. Port 318bf604c64SPeter Dunlap * is optional; if not specified, the 319bf604c64SPeter Dunlap * default iSNS port number of 3205 will 320bf604c64SPeter Dunlap * be used. IPv6 addresses should 321bf604c64SPeter Dunlap * be enclosed in square brackets '[' ']'. 322bf604c64SPeter Dunlap * If "none" is specified, all defined 323bf604c64SPeter Dunlap * iSNS servers will be removed from the 324bf604c64SPeter Dunlap * configuration. 325bf604c64SPeter Dunlap * radiusserver string IPaddress:port specification as 326bf604c64SPeter Dunlap * described for 'isnsserver'. 327bf604c64SPeter Dunlap * radiussecret string string of at least 12 characters 328bf604c64SPeter Dunlap * but not more than 255 characters. 329bf604c64SPeter Dunlap * secret will be base64 encoded when 330bf604c64SPeter Dunlap * stored. 331bf604c64SPeter Dunlap */ 332bf604c64SPeter Dunlap typedef struct it_config_s { 333bf604c64SPeter Dunlap uint64_t stmf_token; 334bf604c64SPeter Dunlap uint32_t config_version; 335bf604c64SPeter Dunlap it_tgt_t *config_tgt_list; 336bf604c64SPeter Dunlap uint32_t config_tgt_count; 337bf604c64SPeter Dunlap it_tpg_t *config_tpg_list; 338bf604c64SPeter Dunlap uint32_t config_tpg_count; 339bf604c64SPeter Dunlap it_ini_t *config_ini_list; 340bf604c64SPeter Dunlap uint32_t config_ini_count; 341bf604c64SPeter Dunlap it_portal_t *config_isns_svr_list; 342bf604c64SPeter Dunlap uint32_t config_isns_svr_count; 343bf604c64SPeter Dunlap nvlist_t *config_global_properties; 344bf604c64SPeter Dunlap } it_config_t; 345bf604c64SPeter Dunlap 346bf604c64SPeter Dunlap 347a6d42e7dSPeter Dunlap /* Functions to convert iSCSI target structures to/from nvlists. */ 348a6d42e7dSPeter Dunlap int 349a6d42e7dSPeter Dunlap it_config_to_nv(it_config_t *cfg, nvlist_t **nvl); 350a6d42e7dSPeter Dunlap 351a6d42e7dSPeter Dunlap /* 352a6d42e7dSPeter Dunlap * nvlist version of config is 3 list-of-list, + 1 proplist. arrays 353a6d42e7dSPeter Dunlap * are interesting, but lists-of-lists are more useful when doing 354a6d42e7dSPeter Dunlap * individual lookups when we later add support for it. Also, no 355a6d42e7dSPeter Dunlap * need to store name in individual struct representation. 356a6d42e7dSPeter Dunlap */ 357a6d42e7dSPeter Dunlap int 358a6d42e7dSPeter Dunlap it_nv_to_config(nvlist_t *nvl, it_config_t **cfg); 359a6d42e7dSPeter Dunlap 360a6d42e7dSPeter Dunlap int 361a6d42e7dSPeter Dunlap it_nv_to_tgtlist(nvlist_t *nvl, uint32_t *count, it_tgt_t **tgtlist); 362a6d42e7dSPeter Dunlap 363a6d42e7dSPeter Dunlap int 364a6d42e7dSPeter Dunlap it_tgtlist_to_nv(it_tgt_t *tgtlist, nvlist_t **nvl); 365a6d42e7dSPeter Dunlap 366a6d42e7dSPeter Dunlap int 367a6d42e7dSPeter Dunlap it_tgt_to_nv(it_tgt_t *tgt, nvlist_t **nvl); 368a6d42e7dSPeter Dunlap 369a6d42e7dSPeter Dunlap int 370a6d42e7dSPeter Dunlap it_nv_to_tgt(nvlist_t *nvl, char *name, it_tgt_t **tgt); 371a6d42e7dSPeter Dunlap 372a6d42e7dSPeter Dunlap int 373a6d42e7dSPeter Dunlap it_tpgt_to_nv(it_tpgt_t *tpgt, nvlist_t **nvl); 374a6d42e7dSPeter Dunlap 375a6d42e7dSPeter Dunlap int 376a6d42e7dSPeter Dunlap it_nv_to_tpgt(nvlist_t *nvl, char *name, it_tpgt_t **tpgt); 377a6d42e7dSPeter Dunlap 378a6d42e7dSPeter Dunlap int 379a6d42e7dSPeter Dunlap it_tpgtlist_to_nv(it_tpgt_t *tpgtlist, nvlist_t **nvl); 380a6d42e7dSPeter Dunlap 381a6d42e7dSPeter Dunlap int 382a6d42e7dSPeter Dunlap it_nv_to_tpgtlist(nvlist_t *nvl, uint32_t *count, it_tpgt_t **tpgtlist); 383a6d42e7dSPeter Dunlap 384a6d42e7dSPeter Dunlap int 385a6d42e7dSPeter Dunlap it_tpg_to_nv(it_tpg_t *tpg, nvlist_t **nvl); 386a6d42e7dSPeter Dunlap 387a6d42e7dSPeter Dunlap int 388a6d42e7dSPeter Dunlap it_nv_to_tpg(nvlist_t *nvl, char *name, it_tpg_t **tpg); 389a6d42e7dSPeter Dunlap 390a6d42e7dSPeter Dunlap int 391a6d42e7dSPeter Dunlap it_tpglist_to_nv(it_tpg_t *tpglist, nvlist_t **nvl); 392a6d42e7dSPeter Dunlap 393a6d42e7dSPeter Dunlap int 394a6d42e7dSPeter Dunlap it_nv_to_tpglist(nvlist_t *nvl, uint32_t *count, it_tpg_t **tpglist); 395a6d42e7dSPeter Dunlap 396a6d42e7dSPeter Dunlap int 397a6d42e7dSPeter Dunlap it_ini_to_nv(it_ini_t *ini, nvlist_t **nvl); 398a6d42e7dSPeter Dunlap 399a6d42e7dSPeter Dunlap int 400a6d42e7dSPeter Dunlap it_nv_to_ini(nvlist_t *nvl, char *name, it_ini_t **ini); 401a6d42e7dSPeter Dunlap 402a6d42e7dSPeter Dunlap int 403a6d42e7dSPeter Dunlap it_inilist_to_nv(it_ini_t *inilist, nvlist_t **nvl); 404a6d42e7dSPeter Dunlap 405a6d42e7dSPeter Dunlap int 406a6d42e7dSPeter Dunlap it_nv_to_inilist(nvlist_t *nvl, uint32_t *count, it_ini_t **inilist); 407a6d42e7dSPeter Dunlap 408a6d42e7dSPeter Dunlap it_tgt_t * 409a6d42e7dSPeter Dunlap it_tgt_lookup(it_config_t *cfg, char *tgt_name); 410a6d42e7dSPeter Dunlap 411a6d42e7dSPeter Dunlap it_tpg_t * 412a6d42e7dSPeter Dunlap it_tpg_lookup(it_config_t *cfg, char *tpg_name); 413a6d42e7dSPeter Dunlap 414a6d42e7dSPeter Dunlap it_portal_t * 415a6d42e7dSPeter Dunlap it_sns_svr_lookup(it_config_t *cfg, struct sockaddr_storage *sa); 416a6d42e7dSPeter Dunlap 417a6d42e7dSPeter Dunlap it_portal_t * 418a6d42e7dSPeter Dunlap it_portal_lookup(it_tpg_t *cfg_tpg, struct sockaddr_storage *sa); 419a6d42e7dSPeter Dunlap 420a6d42e7dSPeter Dunlap int 421a6d42e7dSPeter Dunlap it_sa_compare(struct sockaddr_storage *sa1, struct sockaddr_storage *sa2); 422a6d42e7dSPeter Dunlap 423a6d42e7dSPeter Dunlap /* 424a6d42e7dSPeter Dunlap * Convert a sockaddr to the string representation, suitable for 425a6d42e7dSPeter Dunlap * storing in an nvlist or printing out in a list. 426a6d42e7dSPeter Dunlap */ 427a6d42e7dSPeter Dunlap int 428a6d42e7dSPeter Dunlap sockaddr_to_str(struct sockaddr_storage *sa, char **addr); 429a6d42e7dSPeter Dunlap 430a6d42e7dSPeter Dunlap /* 431a6d42e7dSPeter Dunlap * Convert a char string to a sockaddr structure 432a6d42e7dSPeter Dunlap * 433a6d42e7dSPeter Dunlap * default_port should be the port to be used, if not specified 434a6d42e7dSPeter Dunlap * as part of the supplied string 'arg'. 435a6d42e7dSPeter Dunlap */ 436a6d42e7dSPeter Dunlap struct sockaddr_storage * 437a6d42e7dSPeter Dunlap it_common_convert_sa(char *arg, struct sockaddr_storage *buf, 438a6d42e7dSPeter Dunlap uint32_t default_port); 439a6d42e7dSPeter Dunlap 440a6d42e7dSPeter Dunlap /* 441a6d42e7dSPeter Dunlap * Convert an string array of IP-addr:port to a portal list 442a6d42e7dSPeter Dunlap */ 443a6d42e7dSPeter Dunlap int 444a6d42e7dSPeter Dunlap it_array_to_portallist(char **arr, uint32_t count, uint32_t default_port, 445a6d42e7dSPeter Dunlap it_portal_t **portallist, uint32_t *list_count); 446a6d42e7dSPeter Dunlap 447a6d42e7dSPeter Dunlap /* 448a6d42e7dSPeter Dunlap * Function: it_config_free_cmn() 449a6d42e7dSPeter Dunlap * 450a6d42e7dSPeter Dunlap * Free any resources associated with the it_config_t structure. 451a6d42e7dSPeter Dunlap * 452a6d42e7dSPeter Dunlap * Parameters: 453a6d42e7dSPeter Dunlap * cfg A C representation of the current iSCSI configuration 454a6d42e7dSPeter Dunlap */ 455a6d42e7dSPeter Dunlap void 456a6d42e7dSPeter Dunlap it_config_free_cmn(it_config_t *cfg); 457a6d42e7dSPeter Dunlap 458a6d42e7dSPeter Dunlap /* 459a6d42e7dSPeter Dunlap * Function: it_tgt_free_cmn() 460a6d42e7dSPeter Dunlap * 461a6d42e7dSPeter Dunlap * Frees an it_tgt_t structure. If tgt_next is not NULL, frees 462a6d42e7dSPeter Dunlap * all structures in the list. 463a6d42e7dSPeter Dunlap */ 464a6d42e7dSPeter Dunlap void 465a6d42e7dSPeter Dunlap it_tgt_free_cmn(it_tgt_t *tgt); 466a6d42e7dSPeter Dunlap 467a6d42e7dSPeter Dunlap /* 468a6d42e7dSPeter Dunlap * Function: it_tpgt_free_cmn() 469a6d42e7dSPeter Dunlap * 470a6d42e7dSPeter Dunlap * Deallocates resources of an it_tpgt_t structure. If tpgt->next 471a6d42e7dSPeter Dunlap * is not NULL, frees all members of the list. 472a6d42e7dSPeter Dunlap */ 473a6d42e7dSPeter Dunlap void 474a6d42e7dSPeter Dunlap it_tpgt_free_cmn(it_tpgt_t *tpgt); 475a6d42e7dSPeter Dunlap 476a6d42e7dSPeter Dunlap /* 477a6d42e7dSPeter Dunlap * Function: it_tpg_free_cmn() 478a6d42e7dSPeter Dunlap * 479a6d42e7dSPeter Dunlap * Deallocates resources associated with an it_tpg_t structure. 480a6d42e7dSPeter Dunlap * If tpg->next is not NULL, frees all members of the list. 481a6d42e7dSPeter Dunlap */ 482a6d42e7dSPeter Dunlap void 483a6d42e7dSPeter Dunlap it_tpg_free_cmn(it_tpg_t *tpg); 484a6d42e7dSPeter Dunlap 485a6d42e7dSPeter Dunlap /* 486a6d42e7dSPeter Dunlap * Function: it_ini_free_cmn() 487a6d42e7dSPeter Dunlap * 488a6d42e7dSPeter Dunlap * Deallocates resources of an it_ini_t structure. If ini->next is 489a6d42e7dSPeter Dunlap * not NULL, frees all members of the list. 490a6d42e7dSPeter Dunlap */ 491a6d42e7dSPeter Dunlap void 492a6d42e7dSPeter Dunlap it_ini_free_cmn(it_ini_t *ini); 493a6d42e7dSPeter Dunlap 494a6d42e7dSPeter Dunlap /* 495a6d42e7dSPeter Dunlap * Function: iscsi_binary_to_base64_str() 496a6d42e7dSPeter Dunlap * 497a6d42e7dSPeter Dunlap * Encodes a byte array into a base64 string. 498a6d42e7dSPeter Dunlap */ 499a6d42e7dSPeter Dunlap int 500a6d42e7dSPeter Dunlap iscsi_binary_to_base64_str(uint8_t *in_buf, int in_buf_len, 501a6d42e7dSPeter Dunlap char *base64_str_buf, int base64_buf_len); 502a6d42e7dSPeter Dunlap 503a6d42e7dSPeter Dunlap /* 504a6d42e7dSPeter Dunlap * Function: iscsi_base64_str_to_binary() 505a6d42e7dSPeter Dunlap * 506a6d42e7dSPeter Dunlap * Decodes a base64 string into a byte array 507a6d42e7dSPeter Dunlap */ 508a6d42e7dSPeter Dunlap int 509a6d42e7dSPeter Dunlap iscsi_base64_str_to_binary(char *hstr, int hstr_len, 510a6d42e7dSPeter Dunlap uint8_t *binary, int binary_buf_len, int *out_len); 511a6d42e7dSPeter Dunlap 512a6d42e7dSPeter Dunlap #ifdef __cplusplus 513a6d42e7dSPeter Dunlap } 514a6d42e7dSPeter Dunlap #endif 515a6d42e7dSPeter Dunlap 516a6d42e7dSPeter Dunlap #endif /* _ISCSIT_COMMON_H_ */ 517