Blame usr/config.h

Packit Service 646995
/*
Packit Service 646995
 * iSCSI Configuration
Packit Service 646995
 *
Packit Service 646995
 * Copyright (C) 2002 Cisco Systems, Inc.
Packit Service 646995
 * maintained by linux-iscsi-devel@lists.sourceforge.net
Packit Service 646995
 *
Packit Service 646995
 * This program is free software; you can redistribute it and/or modify
Packit Service 646995
 * it under the terms of the GNU General Public License as published
Packit Service 646995
 * by the Free Software Foundation; either version 2 of the License, or
Packit Service 646995
 * (at your option) any later version.
Packit Service 646995
 *
Packit Service 646995
 * This program is distributed in the hope that it will be useful, but
Packit Service 646995
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 646995
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit Service 646995
 * General Public License for more details.
Packit Service 646995
 *
Packit Service 646995
 * See the file COPYING included with this distribution for more details.
Packit Service 646995
 */
Packit Service 646995
Packit Service 646995
#ifndef CONFIG_H
Packit Service 646995
#define CONFIG_H
Packit Service 646995
Packit Service 646995
#include <netdb.h>
Packit Service 646995
#include <net/if.h>
Packit Service 646995
Packit Service 646995
#include "types.h"
Packit Service 646995
#include "auth.h"	/* for the username and password sizes */
Packit Service 646995
#include "list.h"
Packit Service 646995
#include "iscsi_proto.h"
Packit Service 646995
#include "iscsi_net_util.h"
Packit Service 646995
Packit Service 646995
/* ISIDs now have a typed naming authority in them.  We use an OUI */
Packit Service 646995
#define DRIVER_ISID_0  0x00
Packit Service 646995
#define DRIVER_ISID_1  0x02
Packit Service 646995
#define DRIVER_ISID_2  0x3D
Packit Service 646995
Packit Service 646995
/* number of possible connections per session */
Packit Service 646995
#define ISCSI_CONN_MAX		1
Packit Service 646995
/* max len of interface */
Packit Service 646995
#define ISCSI_MAX_IFACE_LEN	65
Packit Service 646995
Packit Service 646995
/* the following structures store the options set in the config file.
Packit Service 646995
 * a structure is defined for each logically-related group of options.
Packit Service 646995
 * if you are adding a new option, first check if it should belong
Packit Service 646995
 * to one of the existing groups.  If it does, add it.  If not, define
Packit Service 646995
 * a new structure.
Packit Service 646995
 */
Packit Service 646995
Packit Service 646995
/* all authentication-related options should be added to this structure.
Packit Service 646995
 * this structure is per-session, and can be configured
Packit Service 646995
 * by TargetName but not Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_auth_config {
Packit Service 646995
	unsigned int authmethod;
Packit Service 646995
	char username[AUTH_STR_MAX_LEN];
Packit Service 646995
	unsigned char password[AUTH_STR_MAX_LEN];
Packit Service 646995
	unsigned int password_length;
Packit Service 646995
	char username_in[AUTH_STR_MAX_LEN];
Packit Service 646995
	unsigned char password_in[AUTH_STR_MAX_LEN];
Packit Service 646995
	unsigned int password_in_length;
Packit Service 646995
	unsigned int chap_algs[AUTH_CHAP_ALG_MAX_COUNT];
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all per-connection timeouts go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_connection_timeout_config {
Packit Service 646995
	int login_timeout;
Packit Service 646995
	int logout_timeout;
Packit Service 646995
	int auth_timeout;
Packit Service 646995
	int active_timeout;
Packit Service 646995
	int noop_out_interval;
Packit Service 646995
	int noop_out_timeout;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all per-session timeouts go in this structure.
Packit Service 646995
 * this structure is per-session, and can be configured
Packit Service 646995
 * by TargetName but not by Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_session_timeout_config {
Packit Service 646995
	int replacement_timeout;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all error handling timeouts go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_error_timeout_config {
Packit Service 646995
	int abort_timeout;
Packit Service 646995
	int host_reset_timeout;
Packit Service 646995
	int lu_reset_timeout;
Packit Service 646995
	int tgt_reset_timeout;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all TCP options go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_tcp_config {
Packit Service 646995
	int window_size;
Packit Service 646995
	int type_of_service;	/* try to set IP TOS bits */
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
struct iscsi_conn_operational_config {
Packit Service 646995
	int MaxRecvDataSegmentLength;
Packit Service 646995
	int MaxXmitDataSegmentLength;
Packit Service 646995
	int HeaderDigest;
Packit Service 646995
	int DataDigest;
Packit Service 646995
	int IFMarker;
Packit Service 646995
	int OFMarker;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all iSCSI operational params go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_session_operational_config {
Packit Service 646995
	int DataPDUInOrder;
Packit Service 646995
	int DataSequenceInOrder;
Packit Service 646995
	int protocol;
Packit Service 646995
	int InitialR2T;
Packit Service 646995
	int ImmediateData;
Packit Service 646995
	int FirstBurstLength;
Packit Service 646995
	int MaxBurstLength;
Packit Service 646995
	int DefaultTime2Wait;
Packit Service 646995
	int DefaultTime2Retain;
Packit Service 646995
	int MaxConnections;
Packit Service 646995
	int MaxOutstandingR2T;
Packit Service 646995
	int ERL;
Packit Service 646995
	int FastAbort;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
#define CONFIG_DIGEST_NEVER  0
Packit Service 646995
#define CONFIG_DIGEST_ALWAYS 1
Packit Service 646995
#define CONFIG_DIGEST_PREFER_ON 2
Packit Service 646995
#define CONFIG_DIGEST_PREFER_OFF 3
Packit Service 646995
Packit Service 646995
struct iscsi_sendtargets_config {
Packit Service 646995
	int reopen_max;
Packit Service 646995
	int use_discoveryd;
Packit Service 646995
	int discoveryd_poll_inval;
Packit Service 646995
	struct iscsi_auth_config auth;
Packit Service 646995
	struct iscsi_connection_timeout_config conn_timeo;
Packit Service 646995
	struct iscsi_conn_operational_config conn_conf;
Packit Service 646995
	struct iscsi_session_operational_config session_conf;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
struct iscsi_isns_config {
Packit Service 646995
	int use_discoveryd;
Packit Service 646995
	int discoveryd_poll_inval;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
struct iscsi_slp_config {
Packit Service 646995
	char *scopes;
Packit Service 646995
	char *interfaces;	/* for multicast, list of interfaces names,
Packit Service 646995
				 * "all", or "none" */
Packit Service 646995
	int poll_interval;
Packit Service 646995
	struct iscsi_auth_config auth;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
typedef enum iscsi_startup {
Packit Service 646995
	ISCSI_STARTUP_MANUAL,
Packit Service 646995
	ISCSI_STARTUP_AUTOMATIC,
Packit Service 646995
	ISCSI_STARTUP_ONBOOT,
Packit Service 646995
} iscsi_startup_e;
Packit Service 646995
Packit Service 646995
typedef enum discovery_type {
Packit Service 646995
	DISCOVERY_TYPE_SENDTARGETS,
Packit Service 646995
	DISCOVERY_TYPE_ISNS,
Packit Service 646995
	DISCOVERY_TYPE_OFFLOAD_SENDTARGETS,
Packit Service 646995
	DISCOVERY_TYPE_SLP,
Packit Service 646995
	DISCOVERY_TYPE_STATIC,
Packit Service 646995
	DISCOVERY_TYPE_FW,
Packit Service 646995
} discovery_type_e;
Packit Service 646995
Packit Service 646995
typedef struct conn_rec {
Packit Service 646995
	iscsi_startup_e				startup;
Packit Service 646995
	char					address[NI_MAXHOST];
Packit Service 646995
	int					port;
Packit Service 646995
	struct iscsi_tcp_config			tcp;
Packit Service 646995
	struct iscsi_connection_timeout_config	timeo;
Packit Service 646995
	struct iscsi_conn_operational_config	iscsi;
Packit Service 646995
} conn_rec_t;
Packit Service 646995
Packit Service 646995
typedef struct session_rec {
Packit Service 646995
	int					initial_cmdsn;
Packit Service 646995
	int					reopen_max;
Packit Service 646995
	int					xmit_thread_priority;
Packit Service 646995
	int					cmds_max;
Packit Service 646995
	int					queue_depth;
Packit Service 646995
	int					initial_login_retry_max;
Packit Service 646995
	int					nr_sessions;
Packit Service 646995
	int					scan;
Packit Service 646995
	struct iscsi_auth_config		auth;
Packit Service 646995
	struct iscsi_session_timeout_config	timeo;
Packit Service 646995
	struct iscsi_error_timeout_config	err_timeo;
Packit Service 646995
	struct iscsi_session_operational_config	iscsi;
Packit Service 646995
	struct session_info			*info;
Packit Service 646995
	unsigned                                sid;
Packit Service 646995
	/*
Packit Service 646995
	 * This is a flag passed to iscsid.  If set, multiple sessions are
Packit Service 646995
	 * allowed to be initiated on this record
Packit Service 646995
	 */
Packit Service 646995
	unsigned char                           multiple;
Packit Service 646995
	char					boot_root[BOOT_NAME_MAXLEN];
Packit Service 646995
	char					boot_nic[BOOT_NAME_MAXLEN];
Packit Service 646995
	char					boot_target[BOOT_NAME_MAXLEN];
Packit Service 646995
} session_rec_t;
Packit Service 646995
Packit Service 646995
#define ISCSI_TRANSPORT_NAME_MAXLEN 16
Packit Service 646995
#define ISCSI_MAX_STR_LEN 80
Packit Service 646995
Packit Service 646995
typedef struct iface_rec {
Packit Service 646995
	struct list_head	list;
Packit Service 646995
	/* iscsi iface record name */
Packit Service 646995
	char			name[ISCSI_MAX_IFACE_LEN];
Packit Service 646995
	uint32_t		iface_num;
Packit Service 646995
	/* network layer iface name (eth0) */
Packit Service 646995
	char			netdev[IFNAMSIZ];
Packit Service 646995
	char			ipaddress[NI_MAXHOST];
Packit Service 646995
	char			subnet_mask[NI_MAXHOST];
Packit Service 646995
	char			gateway[NI_MAXHOST];
Packit Service 646995
	char			bootproto[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			ipv6_linklocal[NI_MAXHOST];
Packit Service 646995
	char			ipv6_router[NI_MAXHOST];
Packit Service 646995
	char			ipv6_autocfg[NI_MAXHOST];
Packit Service 646995
	char			linklocal_autocfg[NI_MAXHOST];
Packit Service 646995
	char			router_autocfg[NI_MAXHOST];
Packit Service 646995
	uint8_t			prefix_len;
Packit Service 646995
	uint16_t		vlan_id;
Packit Service 646995
	uint8_t			vlan_priority;
Packit Service 646995
	char			vlan_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			state[ISCSI_MAX_STR_LEN]; /* 0 = disable,
Packit Service 646995
							   * 1 = enable */
Packit Service 646995
	uint16_t		mtu;
Packit Service 646995
	uint16_t		port;
Packit Service 646995
	char			delayed_ack[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			nagle[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			tcp_wsf_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	uint8_t			tcp_wsf;
Packit Service 646995
	uint8_t			tcp_timer_scale;
Packit Service 646995
	char			tcp_timestamp[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_dns[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_slp_da[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			tos_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	uint8_t			tos;
Packit Service 646995
	char			gratuitous_arp[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_alt_client_id_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_alt_client_id[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_req_vendor_id_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_vendor_id_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_vendor_id[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			dhcp_learn_iqn[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			fragmentation[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			incoming_forwarding[ISCSI_MAX_STR_LEN];
Packit Service 646995
	uint8_t			ttl;
Packit Service 646995
	char			gratuitous_neighbor_adv[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			redirect[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			mld[ISCSI_MAX_STR_LEN];
Packit Service 646995
	uint32_t		flow_label;
Packit Service 646995
	uint32_t		traffic_class;
Packit Service 646995
	uint8_t			hop_limit;
Packit Service 646995
	uint32_t		nd_reachable_tmo;
Packit Service 646995
	uint32_t		nd_rexmit_time;
Packit Service 646995
	uint32_t		nd_stale_tmo;
Packit Service 646995
	uint8_t			dup_addr_detect_cnt;
Packit Service 646995
	uint32_t		router_adv_link_mtu;
Packit Service 646995
	uint16_t		def_task_mgmt_tmo;
Packit Service 646995
	char			header_digest[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			data_digest[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			immediate_data[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			initial_r2t[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			data_seq_inorder[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			data_pdu_inorder[ISCSI_MAX_STR_LEN];
Packit Service 646995
	uint8_t			erl;
Packit Service 646995
	uint32_t		max_recv_dlength;
Packit Service 646995
	uint32_t		first_burst_len;
Packit Service 646995
	uint16_t		max_out_r2t;
Packit Service 646995
	uint32_t		max_burst_len;
Packit Service 646995
	char			chap_auth[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			bidi_chap[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			strict_login_comp[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			discovery_auth[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			discovery_logout[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			port_state[ISCSI_MAX_STR_LEN];
Packit Service 646995
	char			port_speed[ISCSI_MAX_STR_LEN];
Packit Service 646995
	/*
Packit Service 646995
	 * TODO: we may have to make this bigger and interconnect
Packit Service 646995
	 * specific for infiniband
Packit Service 646995
	 */
Packit Service 646995
	char			hwaddress[ISCSI_HWADDRESS_BUF_SIZE];
Packit Service 646995
	char			transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
Packit Service 646995
	/*
Packit Service 646995
	 * This is only used for boot now, but the iser guys
Packit Service 646995
	 * can use this for their virtualization idea.
Packit Service 646995
	 */
Packit Service 646995
	char			alias[TARGET_NAME_MAXLEN + 1];
Packit Service 646995
	char			iname[TARGET_NAME_MAXLEN + 1];
Packit Service 646995
} iface_rec_t;
Packit Service 646995
Packit Service 646995
typedef struct node_rec {
Packit Service 646995
	struct list_head	list;
Packit Service 646995
	char			name[TARGET_NAME_MAXLEN];
Packit Service 646995
	int			tpgt;
Packit Service 646995
	iscsi_startup_e		startup;
Packit Service 646995
	int			leading_login;
Packit Service 646995
	session_rec_t		session;
Packit Service 646995
	conn_rec_t		conn[ISCSI_CONN_MAX];
Packit Service 646995
	iface_rec_t		iface;
Packit Service 646995
	discovery_type_e	disc_type;
Packit Service 646995
	char			disc_address[NI_MAXHOST];
Packit Service 646995
	int			disc_port;
Packit Service 646995
} node_rec_t;
Packit Service 646995
Packit Service 646995
typedef struct discovery_rec {
Packit Service 646995
	iscsi_startup_e		startup;
Packit Service 646995
	discovery_type_e	type;
Packit Service 646995
	char			address[NI_MAXHOST];
Packit Service 646995
	int			port;
Packit Service 646995
	int			iscsid_req_tmo;
Packit Service 646995
	union {
Packit Service 646995
		struct iscsi_sendtargets_config	sendtargets;
Packit Service 646995
		struct iscsi_slp_config		slp;
Packit Service 646995
		struct iscsi_isns_config	isns;
Packit Service 646995
	} u;
Packit Service 646995
} discovery_rec_t;
Packit Service 646995
Packit Service 646995
#endif /* CONFIG_H */