iscsitgt_impl.h revision f3861e1a2ceec23a5b699c24d814b7775a9e0b52
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _ISCSITGT_IMPL_H
#define _ISCSITGT_IMPL_H
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Block comment which describes the contents of this file.
*/
#ifdef __cplusplus
extern "C" {
#endif
#include <libxml/xmlreader.h>
#ifndef MIN
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#endif
#ifndef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#endif
/*
* Solaris typedefs boolean_t to be an enum with B_TRUE and B_FALSE.
* MacOS X typedefs boolean_t to be an int with #defines for TRUE & FALSE
* I like the use of enum's for return codes so that compilers can catch
* sloppy coding practices so I've defined a Boolean_t which is unique here.
*/
typedef enum {
False = 0,
True = 1
} Boolean_t;
#ifndef DTYPE_OSD
#define DTYPE_OSD 0x11
#endif
#define ISCSI_TARGET_MGMT_DOOR "/var/run/iscsi_tgt_door"
/*
* XML element defines.
*/
#define XML_ELEMENT_ERROR "error"
#define XML_ELEMENT_CODE "code"
#define XML_ELEMENT_MESSAGE "message"
#define XML_ELEMENT_TRANSVERS "transport-version"
#define XML_ELEMENT_PROPS "props"
#define XML_ELEMENT_DATAOUT "data-out-size"
#define XML_ELEMENT_BASEDIR "base-directory"
#define XML_ELEMENT_CHAPSECRET "chap-secret"
#define XML_ELEMENT_CHAPNAME "chap-name"
#define XML_ELEMENT_RAD_ACCESS "radius-access"
#define XML_ELEMENT_RAD_SERV "radius-server"
#define XML_ELEMENT_RAD_SECRET "radius-secret"
#define XML_ELEMENT_ISNS_ACCESS "isns-access"
#define XML_ELEMENT_FAST "fast-write-ack"
#define XML_ELEMENT_NAME "name"
#define XML_ELEMENT_ACL "acl"
#define XML_ELEMENT_ACLLIST "acl-list"
#define XML_ELEMENT_TPGT "tpgt"
#define XML_ELEMENT_TPGTLIST "tpgt-list"
#define XML_ELEMENT_SIZE "size"
#define XML_ELEMENT_LUN "lun"
#define XML_ELEMENT_LUNLIST "lun-list"
#define XML_ELEMENT_TYPE "type"
#define XML_ELEMENT_ALIAS "alias"
#define XML_ELEMENT_BACK "backing-store"
#define XML_ELEMENT_DELETE_BACK "delete-backing-store"
#define XML_ELEMENT_TARG "target"
#define XML_ELEMENT_INIT "initiator"
#define XML_ELEMENT_ZFS "zfs"
#define XML_ELEMENT_ADMIN "admin"
#define XML_ELEMENT_INAME "iscsi-name"
#define XML_ELEMENT_MAXRECV "maxrecv"
#define XML_ELEMENT_IPADDR "ip-address"
#define XML_ELEMENT_ALL "all"
#define XML_ELEMENT_VERBOSE "verbose"
#define XML_ELEMENT_LIST "list"
#define XML_ELEMENT_RESULT "result"
#define XML_ELEMENT_TIMECON "time-connected"
#define XML_ELEMENT_READCMDS "read-commands"
#define XML_ELEMENT_WRITECMDS "write-commands"
#define XML_ELEMENT_READBLKS "read-blks"
#define XML_ELEMENT_WRITEBLKS "write-blks"
#define XML_ELEMENT_STATS "statistics"
#define XML_ELEMENT_CONN "connection"
#define XML_ELEMENT_LUNINFO "lun-information"
#define XML_ELEMENT_VID "vid"
#define XML_ELEMENT_PID "pid"
#define XML_ELEMENT_GUID "guid"
#define XML_ELEMENT_DTYPE "dtype"
#define XML_ELEMENT_IOSTAT "iostat"
#define XML_ELEMENT_MACADDR "mac-addr"
#define XML_ELEMENT_MGMTPORT "mgmt-port"
#define XML_ELEMENT_ISCSIPORT "iscsi-port"
#define XML_ELEMENT_TARGLOG "target-log"
#define XML_ELEMENT_DBGLVL "dbg-lvl"
#define XML_ELEMENT_LOGLVL "qlog-lvl"
#define XML_ELEMENT_DBGDAEMON "daemonize"
#define XML_ELEMENT_ENFORCE "enforce-strict-guid"
#define XML_ELEMENT_VERS "version"
#define XML_ELEMENT_MMAP_LUN "mmap-lun"
#define XML_ELEMENT_RPM "rpm"
#define XML_ELEMENT_HEADS "heads"
#define XML_ELEMENT_CYLINDERS "cylinders"
#define XML_ELEMENT_SPT "spt"
#define XML_ELEMENT_BPS "bps"
#define XML_ELEMENT_INTERLEAVE "interleave"
#define XML_ELEMENT_PARAMS "params"
#define XML_ELEMENT_MAXCMDS "max-outstanding-cmds"
#define XML_ELEMENT_THIN_PROVO "thin-provisioning"
#define XML_ELEMENT_DISABLE_TPGS "disable-tpgs"
#define XML_ELEMENT_STATUS "status"
#define XML_ELEMENT_PROGRESS "progress"
#define XML_ELEMENT_TIMESTAMPS "time-stamps"
#define XML_ELEMENT_INCORE "in-core"
#define XML_ELEMENT_VALIDATE "validate"
#define XML_VALUE_TRUE "true"
typedef enum {
NodeFree,
NodeAlloc,
NodeName,
NodeValue
} tgt_node_state;
typedef enum { MatchName, MatchBoth } match_type_t;
typedef struct tgt_node {
struct tgt_node *x_parent,
*x_child,
*x_sibling,
*x_attr;
char *x_name,
*x_value;
tgt_node_state x_state;
} tgt_node_t;
typedef enum val_type { Tag_String, Tag_Start, Tag_End } val_type_t;
typedef enum xml_val_type { String, Int, Uint64 } xml_val_type_t;
tgt_node_t *tgt_door_call(char *str, int smf_flags);
Boolean_t tgt_dump2file(tgt_node_t *t, char *path);
void tgt_dump2buf(tgt_node_t *t, char **buf);
tgt_node_t *tgt_node_alloc(char *name, xml_val_type_t type, void *value);
void tgt_node_free(tgt_node_t *x);
void tgt_node_replace(tgt_node_t *parent, tgt_node_t *child, match_type_t m);
Boolean_t tgt_node_remove(tgt_node_t *parent, tgt_node_t *child,
match_type_t m);
tgt_node_t *tgt_node_next(tgt_node_t *n, char *name, tgt_node_t *cur);
tgt_node_t *tgt_node_next_child(tgt_node_t *n, char *name, tgt_node_t *cur);
tgt_node_t *tgt_node_dup(tgt_node_t *n);
tgt_node_t *tgt_node_find(tgt_node_t *n, char *name);
void tgt_node_add(tgt_node_t *p, tgt_node_t *c);
void tgt_node_add_attr(tgt_node_t *p, tgt_node_t *a);
Boolean_t tgt_node_process(xmlTextReaderPtr r, tgt_node_t **node);
void tgt_buf_add(char **b, char *element, const char *cdata);
void tgt_buf_add_tag(char **b, const char *str, val_type_t type);
void tgt_buf_add_tag_and_attr(char **b, char *str, char *attr);
Boolean_t tgt_xml_encode(uint8_t *ip, size_t ip_size, char **buf,
size_t *buf_size);
Boolean_t tgt_xml_decode(char *buf, uint8_t **ip, size_t *ip_size);
Boolean_t tgt_find_value_str(tgt_node_t *n, char *name, char **value);
Boolean_t tgt_find_value_int(tgt_node_t *n, char *name, int *value);
Boolean_t tgt_find_value_intchk(tgt_node_t *n, char *name, int *value);
Boolean_t tgt_find_value_boolean(tgt_node_t *n, char *name, Boolean_t *value);
Boolean_t tgt_find_attr_str(tgt_node_t *n, char *attr, char **value);
Boolean_t tgt_update_value_str(tgt_node_t *node, char *name, char *str);
#ifdef __cplusplus
}
#endif
#endif /* _ISCSITGT_IMPL_H */