Blame usr/flashnode.h

Packit eace71
/*
Packit eace71
 * iSCSI flashnode helpers
Packit eace71
 *
Packit eace71
 * Copyright (C) 2013 QLogic Corporation.
Packit eace71
 * Maintained by open-iscsi@googlegroups.com
Packit eace71
 *
Packit eace71
 * This program is free software; you can redistribute it and/or modify
Packit eace71
 * it under the terms of the GNU General Public License as published
Packit eace71
 * by the Free Software Foundation; either version 2 of the License, or
Packit eace71
 * (at your option) any later version.
Packit eace71
 *
Packit eace71
 * This program is distributed in the hope that it will be useful, but
Packit eace71
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit eace71
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit eace71
 * General Public License for more details.
Packit eace71
 *
Packit eace71
 * See the file COPYING included with this distribution for more details.
Packit eace71
 */
Packit eace71
#ifndef FLASHNODE_H
Packit eace71
#define FLASHNODE_H
Packit eace71
#include <sys/types.h>
Packit eace71
#include <netdb.h>
Packit eace71
#include <net/if.h>
Packit eace71
Packit eace71
#include "types.h"
Packit eace71
#include "config.h"
Packit eace71
#include "auth.h"
Packit eace71
Packit eace71
#define MAX_FLASHNODE_IDX UINT_MAX
Packit eace71
Packit eace71
typedef enum portal_type {
Packit eace71
	IPV4,
Packit eace71
	IPV6,
Packit eace71
} portal_type_e;
Packit eace71
Packit eace71
typedef struct flashnode_sess_rec {
Packit eace71
	char			targetname[TARGET_NAME_MAXLEN];
Packit eace71
	char			targetalias[TARGET_NAME_MAXLEN];
Packit eace71
	char			username[AUTH_STR_MAX_LEN];
Packit eace71
	char			username_in[AUTH_STR_MAX_LEN];
Packit eace71
	char			password[AUTH_STR_MAX_LEN];
Packit eace71
	char			password_in[AUTH_STR_MAX_LEN];
Packit eace71
	/* indicates if discovery was done through iSNS discovery service
Packit eace71
	 * or through sendTarget */
Packit eace71
	char			discovery_parent_type[ISCSI_MAX_STR_LEN];
Packit eace71
	char			isid[16];
Packit eace71
	char			portal_type[5]; /* ipv4 or ipv6 */
Packit eace71
	unsigned		first_burst_len;
Packit eace71
	unsigned		max_burst_len;
Packit eace71
	uint16_t		def_time2wait;
Packit eace71
	uint16_t		def_time2retain;
Packit eace71
	uint16_t		max_outstanding_r2t;
Packit eace71
	uint16_t		tsid;
Packit eace71
	uint16_t		def_taskmgmt_tmo;
Packit eace71
	uint16_t		tpgt;
Packit eace71
	uint16_t		chap_out_idx;
Packit eace71
	uint16_t		chap_in_idx;
Packit eace71
	/* index of iSCSI discovery session if the entry is
Packit eace71
	 * discovered by iSCSI discovery session
Packit eace71
	 */
Packit eace71
	uint16_t		discovery_parent_idx;
Packit eace71
	/* Firmware auto sendtarget discovery disable */
Packit eace71
	uint8_t			auto_snd_tgt_disable;
Packit eace71
	uint8_t			discovery_session;
Packit eace71
	/* indicates if this flashnode entry is enabled or disabled */
Packit eace71
	uint8_t			entry_enable;
Packit eace71
	uint8_t			immediate_data;
Packit eace71
	uint8_t			initial_r2t;
Packit eace71
	uint8_t			data_seq_in_order;
Packit eace71
	uint8_t			data_pdu_in_order;
Packit eace71
	uint8_t			chap_auth_en;
Packit eace71
	/* enables firmware to auto logout the discovery session on discovery
Packit eace71
	 * completion
Packit eace71
	 */
Packit eace71
	uint8_t			discovery_logout_en;
Packit eace71
	uint8_t			bidi_chap_en;
Packit eace71
	/* makes authentication for discovery session optional */
Packit eace71
	uint8_t			discovery_auth_optional;
Packit eace71
	uint8_t			erl;
Packit eace71
	uint8_t			is_boot_target;
Packit eace71
} flashnode_sess_rec_t;
Packit eace71
Packit eace71
typedef struct flashnode_conn_rec {
Packit eace71
	char			ipaddress[NI_MAXHOST];
Packit eace71
	char			redirect_ipaddr[NI_MAXHOST];
Packit eace71
	char			link_local_ipv6[NI_MAXHOST];
Packit eace71
	unsigned		max_recv_dlength;
Packit eace71
	unsigned		max_xmit_dlength;
Packit eace71
	unsigned		max_segment_size;
Packit eace71
	unsigned		tcp_xmit_wsf;
Packit eace71
	unsigned		tcp_recv_wsf;
Packit eace71
	uint32_t		stat_sn;
Packit eace71
	uint32_t		exp_stat_sn;
Packit eace71
	uint16_t		keepalive_tmo;
Packit eace71
	uint16_t		port;
Packit eace71
	uint16_t		local_port;
Packit eace71
	uint16_t		ipv6_flow_lbl;
Packit eace71
	/* Link local IPv6 address is assigned by firmware or driver */
Packit eace71
	uint8_t			is_fw_assigned_ipv6;
Packit eace71
	uint8_t			header_digest_en;
Packit eace71
	uint8_t			data_digest_en;
Packit eace71
	uint8_t			snack_req_en;
Packit eace71
	/* tcp timestamp negotiation status */
Packit eace71
	uint8_t			tcp_timestamp_stat;
Packit eace71
	uint8_t			tcp_nagle_disable;
Packit eace71
	/* tcp window scale factor */
Packit eace71
	uint8_t			tcp_wsf_disable;
Packit eace71
	uint8_t			tcp_timer_scale;
Packit eace71
	uint8_t			tcp_timestamp_en;
Packit eace71
	uint8_t			fragment_disable;
Packit eace71
	uint8_t			ipv4_tos;
Packit eace71
	uint8_t			ipv6_traffic_class;
Packit eace71
} flashnode_conn_rec_t;
Packit eace71
Packit eace71
struct flashnode_rec {
Packit eace71
	struct list_head	list;
Packit eace71
	char			transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
Packit eace71
	flashnode_sess_rec_t	sess;
Packit eace71
	flashnode_conn_rec_t	conn[ISCSI_CONN_MAX];
Packit eace71
};
Packit eace71
Packit eace71
extern int flashnode_info_print_flat(void *data, struct flashnode_rec *tgt,
Packit eace71
				     uint32_t host_no, uint32_t flashnode_idx);
Packit eace71
extern int iscsi_logout_flashnode_sid(struct iscsi_transport *t,
Packit eace71
				      uint32_t host_no, uint32_t sid);
Packit eace71
extern int flashnode_build_config(struct list_head *params,
Packit eace71
				  struct flashnode_rec *flashnode,
Packit eace71
				  struct iovec *iovs);
Packit eace71
#endif