a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * CDDL HEADER START
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * The contents of this file are subject to the terms of the
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Common Development and Distribution License (the "License").
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * You may not use this file except in compliance with the License.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * or http://www.opensolaris.org/os/licensing.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * See the License for the specific language governing permissions
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * and limitations under the License.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * When distributing Covered Code, include this CDDL HEADER in each
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * If applicable, add the following below this CDDL HEADER, with the
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * fields enclosed by brackets "[]" replaced with your own identifying
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * information: Portions Copyright [yyyy] [name of copyright owner]
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * CDDL HEADER END
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
42bf653b44c42fc6b637ae50e590489d69399241Peter Gill * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#ifndef _ISCSIT_COMMON_H_
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define _ISCSIT_COMMON_H_
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#ifdef _KERNEL
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#include <sys/nvpair.h>
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#else
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#include <libnvpair.h>
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#endif
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#ifdef __cplusplus
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapextern "C" {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#endif
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ISCSIT_API_VERS0 0
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap#define ISCSIT_MODNAME "iscsit"
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap#define ISCSIT_NODE "/devices/pseudo/iscsit@0:iscsit"
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlaptypedef enum {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap ITCFG_SUCCESS = 0,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap ITCFG_INVALID,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap ITCFG_TGT_CREATE_ERR,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap ITCFG_MISC_ERR
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap} it_cfg_status_t;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * This structure is passed back to the driver during ISCSIT_IOC_ENABLE_SVC
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * in order to provide the fully qualified hostname for use as the EID
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * by iSNS.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ISCSIT_MAX_HOSTNAME_LEN 256
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlaptypedef struct iscsit_hostinfo_s {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap uint32_t length;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap char fqhn[ISCSIT_MAX_HOSTNAME_LEN];
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap} iscsit_hostinfo_t;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ISCSIT_IOC_SET_CONFIG 1
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ISCSIT_IOC_GET_STATE 2
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ISCSIT_IOC_ENABLE_SVC 101
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ISCSIT_IOC_DISABLE_SVC 102
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/* XXX Rationalize these with other error values (used in it_smf.c */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ITADM_SUCCESS 0
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ITADM_FATAL_ERROR 0x1
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ITADM_NO_MEM 0x2
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ITADM_INVALID 0x4
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ITADM_NODATA 0x8
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define ITADM_PERM 0x10
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_AUTH "auth"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_ALIAS "alias"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_CHAP_USER "chapuser"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_CHAP_SECRET "chapsecret"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_TARGET_CHAP_USER "targetchapuser"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_TARGET_CHAP_SECRET "targetchapsecret"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_RADIUS_SERVER "radiusserver"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_RADIUS_SECRET "radiussecret"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_ISNS_ENABLED "isns"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_ISNS_SERVER "isnsserver"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PROP_OLD_TARGET_NAME "oldtargetname"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PA_AUTH_RADIUS "radius"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PA_AUTH_CHAP "chap"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#define PA_AUTH_NONE "none"
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlaptypedef struct {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int set_cfg_vers;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int set_cfg_pnvlist_len;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap caddr_t set_cfg_pnvlist;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap} iscsit_ioc_set_config_t;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlaptypedef struct {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int getst_vers;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int getst_pnvlist_len;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap char *getst_pnvlist;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap} iscsit_ioc_getstate_t;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#ifdef _SYSCALL32
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlaptypedef struct {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int set_cfg_vers;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int set_cfg_pnvlist_len;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap caddr32_t set_cfg_pnvlist;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap} iscsit_ioc_set_config32_t;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlaptypedef struct {
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int getst_vers;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap int getst_pnvlist_len;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap caddr32_t getst_pnvlist;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap} iscsit_ioc_getstate32_t;
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#endif /* _SYSCALL32 */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/* Shared user/kernel structures */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/* Maximum size of a Target Portal Group name */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap#define MAX_TPG_NAMELEN 256 /* XXX */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/* Maximum size of an iSCSI Target Node name */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap#define MAX_ISCSI_NODENAMELEN 256 /* XXX */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/*
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * A target portal group tag is a binding between a target and a target
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal group along with a numerical value associated with that binding.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * The numerical identifier is used as the 'target portal group tag' defined
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * in RFC3720.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpgt_tpg_name The name of the target portal group associated with
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * this target portal group tag.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpgt_generation Generation number which is incremented each time the
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * structure changes.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpgt_next Next target portal group tag in th list of target portal
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * group tags. If tpgt_next is NUL, then this is the last
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * target portal group in the list.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpgt_tag A numerical identifier that uniquely identifies a
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * target portal group within the associated target node.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlaptypedef struct it_tpgt_s {
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap char tpgt_tpg_name[MAX_TPG_NAMELEN];
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint64_t tpgt_generation;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap struct it_tpgt_s *tpgt_next;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint16_t tpgt_tag;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap} it_tpgt_t;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/*
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * An iSCSI target node is represented by an it_tgt_structure. Each
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * target node includes a list of associated target portal group tags
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * and a list of properties.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tgt_name The iSCSI target node name in either IQN or EUI
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * format (see RFC3720).
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tgt_generation Generation number which is incremented each time
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * the structure changes.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tgt_next Next target in the list of targets. If tgt_next
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * is NULL, then this is the last target in the list.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tgt_tpgt_list A linked list representing the current target
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal group tags associated with this target.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tgt_tpgt_count The number of currently defined target portal
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * group tags.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tgt_properties An nvlist representation of the properties
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * associated with this target. This list can be
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * manipulated using libnvpair(3lib), and should be
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * validated and stored using it_tgt_setprop().
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Target nvlist Properties:
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * nvlist Key Type Valid Values
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * --------------------------------------------------------------------
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * targetchapuser string any string or "none" to remove
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * targetchapsecret string string of at least 12 characters
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * but not more than 255 characters.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * secret will be base64 encoded when
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * stored.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * alias string any string or "none" to remove
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * auth string "radius", "chap", or "none"
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlaptypedef struct it_tgt_s {
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap char tgt_name[MAX_ISCSI_NODENAMELEN];
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint64_t tgt_generation;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap struct it_tgt_s *tgt_next;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap it_tpgt_t *tgt_tpgt_list;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t tgt_tpgt_count;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap nvlist_t *tgt_properties;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap} it_tgt_t;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/*
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * A target portal is represented by an IP address and a listening
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * TCP port.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal_addr sockaddr_storage structure representing the
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * IPv4 or IPv6 address and TCP port associated
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * with the portal.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal_next Next portal in the list of portals. If
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal_next is NULL, this is the last portal
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * in the list.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlaptypedef struct it_portal_s {
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap struct sockaddr_storage portal_addr;
42bf653b44c42fc6b637ae50e590489d69399241Peter Gill struct it_portal_s *portal_next;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap} it_portal_t;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/*
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * A portal is an IP address and TCP port and a portal group is a set
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * of portals. Each defined portal belongs to exactly one portal group.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Applications can associate a target portal group with a particular
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * target using a target portal group name. Initiators can only connect
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * to targets through the portals associated with the target's target
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal group tags.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpg_name Identifier for the target portal group.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpg_generation Generation number which is incremented each
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * time this structure changes.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpg_next Next target portal group in the list of target
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * portal groups. If tpg_next is NULL, this is the
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * last target portal group in the list.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpg_portal_count Number of it_portal_t structures in the list.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * tpg_portal_list Linked list of it_portal_t structures.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlaptypedef struct it_tpg_s {
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap char tpg_name[MAX_TPG_NAMELEN];
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint64_t tpg_generation;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap struct it_tpg_s *tpg_next;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t tpg_portal_count;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap it_portal_t *tpg_portal_list;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap} it_tpg_t;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/*
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * A context representing a remote iSCSI initiator node. The purpose
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * of this structure is to maintain information specific to a remote
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * initiator such as the CHAP username and CHAP secret.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * ini_name the iSCSI node name of the remote initiator.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * ini_generation Generation number which is incremented each
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * time this structure changes.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * ini_next Next initiator in the list of initiators.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * If ini_next is NULL, this is the last initiator
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * in the list.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * ini_properties Name/Value list containing the properties
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * associated with the initiator context. This list
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * can be manipulated using libnvpair(3lib), and should
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * be validated and stored using it_ini_setprop().
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Initiator nvlist Properties:
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * nvlist Key Type Valid Values
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * --------------------------------------------------------------------
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * chapuser string any string
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * chapsecret string string of at least 12 characters
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * but not more than 255 characters.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * secret will be base64 encoded when
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * stored.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlaptypedef struct it_ini_s {
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap char ini_name[MAX_ISCSI_NODENAMELEN];
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint64_t ini_generation;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap struct it_ini_s *ini_next;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap nvlist_t *ini_properties;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap} it_ini_t;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap/*
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * This structure represents a complete configuration for the iscsit
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * port provider. In addition to the global configuration, it_config_t
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * includes lists of child objects including targets, target portal
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * groups and initiator contexts. Each object includes a "generation"
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * value which is used by the iscsit kernel driver to identify changes
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * from one configuration update to the next.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * stmf_token A uint64_t that contains the value returned from a
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * successful call to stmfGetProviderDataProt(3STMF).
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * This token is used to verify that the configuration
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * data persistently stored in COMSTAR has not been
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * modified since this version was loaded.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_version Version number for this configuration structure
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_tgt_list Linked list of target contexts representing the
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * currently defined targets. Applications can add
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * targets to or remove targets from this list using
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * the it_tgt_create and it_tgt_delete functions.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_tgt_count The number of currently defined targets.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_tpg_list Linked list of target portal group contexts.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Applications can add or remove target portal groups
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * to/from this list using the it_tpg_create and
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * it_tpg_delete functions.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_tpg_count The number of currently defined target portal groups
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_ini_list Linked list of initiator contexts. Applications
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * can add initiator contexts or remove initiator
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * contexts from this list using the it_ini_create
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * and it_ini_delete functions.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_ini_count The number of currently defined initiator contexts.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_global_properties
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Name/Value list representing the current global
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * property settings. This list can be manipulated
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * using libnvpair(3lib), and should be validated
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * and stored using it_config_setprop().
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_isns_svr_list
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Linked list of currently defined iSNS servers.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Applications can add or remove iSNS servers by
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * using the it_config_setprop() function and changing
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * the array of iSNS servers stored in the "isnsserver"
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * property.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * config_isns_svr_count
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * The number of currently defined iSNS servers.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * Global nvlist Properties:
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap *
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * nvlist Key Type Valid Values
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * --------------------------------------------------------------------
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * alias string any string
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * auth string "radius", "chap", or "none"
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * isns boolean B_TRUE, B_FALSE
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * isnsserver string array Array of portal specifications of
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * the form IPaddress:port. Port
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * is optional; if not specified, the
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * default iSNS port number of 3205 will
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * be used. IPv6 addresses should
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * be enclosed in square brackets '[' ']'.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * If "none" is specified, all defined
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * iSNS servers will be removed from the
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * configuration.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * radiusserver string IPaddress:port specification as
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * described for 'isnsserver'.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * radiussecret string string of at least 12 characters
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * but not more than 255 characters.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * secret will be base64 encoded when
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap * stored.
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap */
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlaptypedef struct it_config_s {
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint64_t stmf_token;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t config_version;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap it_tgt_t *config_tgt_list;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t config_tgt_count;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap it_tpg_t *config_tpg_list;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t config_tpg_count;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap it_ini_t *config_ini_list;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t config_ini_count;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap it_portal_t *config_isns_svr_list;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap uint32_t config_isns_svr_count;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap nvlist_t *config_global_properties;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap} it_config_t;
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
bf604c6405d5cbc4e94e3d0ecc9e6e074ed4ea67Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/* Functions to convert iSCSI target structures to/from nvlists. */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_config_to_nv(it_config_t *cfg, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * nvlist version of config is 3 list-of-list, + 1 proplist. arrays
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * are interesting, but lists-of-lists are more useful when doing
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * individual lookups when we later add support for it. Also, no
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * need to store name in individual struct representation.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_config(nvlist_t *nvl, it_config_t **cfg);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_tgtlist(nvlist_t *nvl, uint32_t *count, it_tgt_t **tgtlist);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tgtlist_to_nv(it_tgt_t *tgtlist, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tgt_to_nv(it_tgt_t *tgt, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_tgt(nvlist_t *nvl, char *name, it_tgt_t **tgt);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpgt_to_nv(it_tpgt_t *tpgt, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_tpgt(nvlist_t *nvl, char *name, it_tpgt_t **tpgt);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpgtlist_to_nv(it_tpgt_t *tpgtlist, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_tpgtlist(nvlist_t *nvl, uint32_t *count, it_tpgt_t **tpgtlist);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpg_to_nv(it_tpg_t *tpg, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_tpg(nvlist_t *nvl, char *name, it_tpg_t **tpg);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpglist_to_nv(it_tpg_t *tpglist, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_tpglist(nvlist_t *nvl, uint32_t *count, it_tpg_t **tpglist);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_ini_to_nv(it_ini_t *ini, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_ini(nvlist_t *nvl, char *name, it_ini_t **ini);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_inilist_to_nv(it_ini_t *inilist, nvlist_t **nvl);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_nv_to_inilist(nvlist_t *nvl, uint32_t *count, it_ini_t **inilist);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tgt_t *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tgt_lookup(it_config_t *cfg, char *tgt_name);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpg_t *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpg_lookup(it_config_t *cfg, char *tpg_name);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_portal_t *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_sns_svr_lookup(it_config_t *cfg, struct sockaddr_storage *sa);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_portal_t *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_portal_lookup(it_tpg_t *cfg_tpg, struct sockaddr_storage *sa);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_sa_compare(struct sockaddr_storage *sa1, struct sockaddr_storage *sa2);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Convert a sockaddr to the string representation, suitable for
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * storing in an nvlist or printing out in a list.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapsockaddr_to_str(struct sockaddr_storage *sa, char **addr);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Convert a char string to a sockaddr structure
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * default_port should be the port to be used, if not specified
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * as part of the supplied string 'arg'.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapstruct sockaddr_storage *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_common_convert_sa(char *arg, struct sockaddr_storage *buf,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap uint32_t default_port);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Convert an string array of IP-addr:port to a portal list
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_array_to_portallist(char **arr, uint32_t count, uint32_t default_port,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap it_portal_t **portallist, uint32_t *list_count);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: it_config_free_cmn()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Free any resources associated with the it_config_t structure.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Parameters:
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * cfg A C representation of the current iSCSI configuration
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapvoid
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_config_free_cmn(it_config_t *cfg);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: it_tgt_free_cmn()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Frees an it_tgt_t structure. If tgt_next is not NULL, frees
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * all structures in the list.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapvoid
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tgt_free_cmn(it_tgt_t *tgt);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: it_tpgt_free_cmn()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Deallocates resources of an it_tpgt_t structure. If tpgt->next
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * is not NULL, frees all members of the list.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapvoid
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpgt_free_cmn(it_tpgt_t *tpgt);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: it_tpg_free_cmn()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Deallocates resources associated with an it_tpg_t structure.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * If tpg->next is not NULL, frees all members of the list.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapvoid
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_tpg_free_cmn(it_tpg_t *tpg);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: it_ini_free_cmn()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Deallocates resources of an it_ini_t structure. If ini->next is
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * not NULL, frees all members of the list.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapvoid
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapit_ini_free_cmn(it_ini_t *ini);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: iscsi_binary_to_base64_str()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Encodes a byte array into a base64 string.
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapiscsi_binary_to_base64_str(uint8_t *in_buf, int in_buf_len,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap char *base64_str_buf, int base64_buf_len);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap/*
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Function: iscsi_base64_str_to_binary()
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap *
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap * Decodes a base64 string into a byte array
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap */
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapint
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlapiscsi_base64_str_to_binary(char *hstr, int hstr_len,
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap uint8_t *binary, int binary_buf_len, int *out_len);
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#ifdef __cplusplus
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap}
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#endif
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap
a6d42e7d71324c5193c3b94d57d96ba2925d52e1Peter Dunlap#endif /* _ISCSIT_COMMON_H_ */