Blame usr/flashnode.c

Packit Service 646995
/*
Packit Service 646995
 * iSCSI flashnode helpers
Packit Service 646995
 *
Packit Service 646995
 * Copyright (C) 2013 QLogic Corporation.
Packit Service 646995
 * Maintained by open-iscsi@googlegroups.com
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
#include <errno.h>
Packit Service 646995
#include <stdlib.h>
Packit Service 646995
#include <stdio.h>
Packit Service 646995
#include <unistd.h>
Packit Service 646995
#include <string.h>
Packit Service 646995
#include <sys/stat.h>
Packit Service 646995
#include <arpa/inet.h>
Packit Service 646995
Packit Service 646995
#include "log.h"
Packit Service 646995
#include "idbm.h"
Packit Service 646995
#include "iscsi_util.h"
Packit Service 646995
#include "transport.h"
Packit Service 646995
#include "iscsi_sysfs.h"
Packit Service 646995
#include "list.h"
Packit Service 646995
#include "sysdeps.h"
Packit Service 646995
#include "idbm_fields.h"
Packit Service 646995
#include "iscsi_err.h"
Packit Service 646995
#include "iscsi_ipc.h"
Packit Service 646995
#include "iscsi_netlink.h"
Packit Service 646995
#include "flashnode.h"
Packit Service 646995
#include "iscsi_settings.h"
Packit Service 646995
Packit Service 646995
char key[NAME_MAXVAL];
Packit Service 646995
Packit Service 646995
char *to_key(const char *fmt)
Packit Service 646995
{
Packit Service 646995
	int i = 0;
Packit Service 646995
	memset(key, 0, sizeof(key));
Packit Service 646995
	sprintf(key, fmt, i);
Packit Service 646995
	return key;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
int flashnode_info_print_flat(__attribute__((unused))void *data,
Packit Service 646995
			      struct flashnode_rec *fnode,
Packit Service 646995
			      __attribute__((unused))uint32_t host_no,
Packit Service 646995
			      uint32_t flashnode_idx)
Packit Service 646995
{
Packit Service 646995
	printf("%s: [%d] ", fnode->transport_name, flashnode_idx);
Packit Service 646995
	if (!strlen((char *)fnode->conn[0].ipaddress))
Packit Service 646995
		printf("%s:", UNKNOWN_VALUE);
Packit Service 646995
	else if (strchr((char *)fnode->conn[0].ipaddress, '.'))
Packit Service 646995
		printf("%s:", fnode->conn[0].ipaddress);
Packit Service 646995
	else
Packit Service 646995
		printf("[%s]:", fnode->conn[0].ipaddress);
Packit Service 646995
Packit Service 646995
	if (!fnode->conn[0].port)
Packit Service 646995
		printf("%s,", UNKNOWN_VALUE);
Packit Service 646995
	else
Packit Service 646995
		printf("%u,", fnode->conn[0].port);
Packit Service 646995
Packit Service 646995
	printf("%u ", fnode->sess.tpgt);
Packit Service 646995
Packit Service 646995
	if (!strlen(fnode->sess.targetname))
Packit Service 646995
		printf("%s\n", UNKNOWN_VALUE);
Packit Service 646995
	else
Packit Service 646995
		printf("%s\n", fnode->sess.targetname);
Packit Service 646995
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_isid(struct flashnode_rec *fnode, struct iovec *iov)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
	uint8_t isid[6];
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + 6;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(ISCSI_FLASHNODE_ISID, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = ISCSI_FLASHNODE_ISID;
Packit Service 646995
	fnode_param->len = 6;
Packit Service 646995
Packit Service 646995
	sscanf(fnode->sess.isid, "%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",
Packit Service 646995
	       &isid[0], &isid[1], &isid[2], &isid[3], &isid[4], &isid[5]);
Packit Service 646995
Packit Service 646995
	memcpy(fnode_param->value, isid, fnode_param->len);
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_ipv4_addr(struct flashnode_rec *fnode,
Packit Service 646995
				    struct iovec *iov, int param_type)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
	int rc;
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + 4;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(param_type, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = param_type;
Packit Service 646995
	fnode_param->len = 4;
Packit Service 646995
Packit Service 646995
	switch (param_type) {
Packit Service 646995
	case ISCSI_FLASHNODE_IPADDR:
Packit Service 646995
		rc = inet_pton(AF_INET, (char *)fnode->conn[0].ipaddress,
Packit Service 646995
			       fnode_param->value);
Packit Service 646995
		break;
Packit Service 646995
	case ISCSI_FLASHNODE_REDIRECT_IPADDR:
Packit Service 646995
		rc = inet_pton(AF_INET, (char *)fnode->conn[0].redirect_ipaddr,
Packit Service 646995
			       fnode_param->value);
Packit Service 646995
		break;
Packit Service 646995
	default:
Packit Service 646995
		goto free;
Packit Service 646995
	}
Packit Service 646995
Packit Service 646995
	if (rc <= 0)
Packit Service 646995
		goto free;
Packit Service 646995
Packit Service 646995
	return 0;
Packit Service 646995
Packit Service 646995
free:
Packit Service 646995
	free(iov->iov_base);
Packit Service 646995
	iov->iov_base = NULL;
Packit Service 646995
	iov->iov_len = 0;
Packit Service 646995
	return 1;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_ipv6_addr(struct flashnode_rec *fnode,
Packit Service 646995
				    struct iovec *iov, int param_type)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
	int rc;
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + 16;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(param_type, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = param_type;
Packit Service 646995
	fnode_param->len = 16;
Packit Service 646995
Packit Service 646995
	switch (param_type) {
Packit Service 646995
	case ISCSI_FLASHNODE_IPADDR:
Packit Service 646995
		rc = inet_pton(AF_INET6, (char *)fnode->conn[0].ipaddress,
Packit Service 646995
			       fnode_param->value);
Packit Service 646995
		break;
Packit Service 646995
	case ISCSI_FLASHNODE_REDIRECT_IPADDR:
Packit Service 646995
		rc = inet_pton(AF_INET6, (char *)fnode->conn[0].redirect_ipaddr,
Packit Service 646995
			       fnode_param->value);
Packit Service 646995
		break;
Packit Service 646995
	case ISCSI_FLASHNODE_LINK_LOCAL_IPV6:
Packit Service 646995
		rc = inet_pton(AF_INET6, (char *)fnode->conn[0].link_local_ipv6,
Packit Service 646995
			       fnode_param->value);
Packit Service 646995
		break;
Packit Service 646995
	default:
Packit Service 646995
		goto free;
Packit Service 646995
	}
Packit Service 646995
Packit Service 646995
	if (rc <= 0)
Packit Service 646995
		goto free;
Packit Service 646995
Packit Service 646995
	return 0;
Packit Service 646995
Packit Service 646995
free:
Packit Service 646995
	free(iov->iov_base);
Packit Service 646995
	iov->iov_base = NULL;
Packit Service 646995
	iov->iov_len = 0;
Packit Service 646995
	return 1;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_ipaddr(struct flashnode_rec *fnode, struct iovec *iov,
Packit Service 646995
				 int param_type)
Packit Service 646995
{
Packit Service 646995
	int rc = 0;
Packit Service 646995
Packit Service 646995
	if (!strncmp(fnode->sess.portal_type, "ipv4", 4))
Packit Service 646995
		rc = flashnode_fill_ipv4_addr(fnode, iov, param_type);
Packit Service 646995
	else
Packit Service 646995
		rc = flashnode_fill_ipv6_addr(fnode, iov, param_type);
Packit Service 646995
Packit Service 646995
	return rc;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_uint8(__attribute__((unused))struct flashnode_rec *fnode,
Packit Service 646995
				struct iovec *iov,
Packit Service 646995
				int param_type, uint8_t val)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + 1;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(param_type, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = param_type;
Packit Service 646995
	fnode_param->len = 1;
Packit Service 646995
	fnode_param->value[0] = val;
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_uint16(__attribute__((unused))struct flashnode_rec *fnode,
Packit Service 646995
				 struct iovec *iov,
Packit Service 646995
				 int param_type, uint16_t val)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + 2;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(param_type, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = param_type;
Packit Service 646995
	fnode_param->len = 2;
Packit Service 646995
	memcpy(fnode_param->value, &val, fnode_param->len);
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_uint32(__attribute__((unused))struct flashnode_rec *fnode,
Packit Service 646995
				 struct iovec *iov,
Packit Service 646995
				 int param_type, uint32_t val)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + 4;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(param_type, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = param_type;
Packit Service 646995
	fnode_param->len = 4;
Packit Service 646995
	memcpy(fnode_param->value, &val, fnode_param->len);
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
static int flashnode_fill_str(__attribute__((unused))struct flashnode_rec *fnode,
Packit Service 646995
			      struct iovec *iov,
Packit Service 646995
			      int param_type, char *buf, int buflen)
Packit Service 646995
{
Packit Service 646995
	struct iscsi_flashnode_param_info *fnode_param;
Packit Service 646995
	struct nlattr *attr;
Packit Service 646995
	int len;
Packit Service 646995
Packit Service 646995
	len = sizeof(struct iscsi_flashnode_param_info) + buflen;
Packit Service 646995
	iov->iov_base = iscsi_nla_alloc(param_type, len);
Packit Service 646995
	if (!iov->iov_base)
Packit Service 646995
		return 1;
Packit Service 646995
Packit Service 646995
	attr = iov->iov_base;
Packit Service 646995
	iov->iov_len = NLA_ALIGN(attr->nla_len);
Packit Service 646995
Packit Service 646995
	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
Packit Service 646995
	fnode_param->param = param_type;
Packit Service 646995
	fnode_param->len = buflen;
Packit Service 646995
	memcpy(fnode_param->value, buf, fnode_param->len);
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
int flashnode_build_config(struct list_head *params,
Packit Service 646995
			   struct flashnode_rec *fnode, struct iovec *iovs)
Packit Service 646995
{
Packit Service 646995
	struct user_param *param;
Packit Service 646995
	struct iovec *iov = NULL;
Packit Service 646995
	int count = 0;
Packit Service 646995
	int port = 3260;
Packit Service 646995
Packit Service 646995
	/* start at 2, because 0 is for nlmsghdr and 1 for event */
Packit Service 646995
	iov = iovs + 2;
Packit Service 646995
Packit Service 646995
	list_for_each_entry(param, params, list) {
Packit Service 646995
		if (!strcmp(param->name, FLASHNODE_SESS_AUTO_SND_TGT_DISABLE)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_AUTO_SND_TGT_DISABLE,
Packit Service 646995
			    fnode->sess.auto_snd_tgt_disable))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				   FLASHNODE_SESS_DISCOVERY_SESS)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DISCOVERY_SESS,
Packit Service 646995
			    fnode->sess.discovery_session))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_ENTRY_EN)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_ENTRY_EN,
Packit Service 646995
			    fnode->sess.entry_enable))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_IMM_DATA_EN)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_IMM_DATA_EN,
Packit Service 646995
			    fnode->sess.immediate_data))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				   FLASHNODE_SESS_INITIAL_R2T_EN)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_INITIAL_R2T_EN,
Packit Service 646995
			    fnode->sess.initial_r2t))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				  FLASHNODE_SESS_DATASEQ_INORDER)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DATASEQ_INORDER,
Packit Service 646995
			    fnode->sess.data_seq_in_order))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_PDU_INORDER)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_PDU_INORDER,
Packit Service 646995
			    fnode->sess.data_pdu_in_order))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_CHAP_AUTH_EN)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_CHAP_AUTH_EN,
Packit Service 646995
			    fnode->sess.chap_auth_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				  FLASHNODE_SESS_DISCOVERY_LOGOUT_EN)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DISCOVERY_LOGOUT_EN,
Packit Service 646995
			    fnode->sess.discovery_logout_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_BIDI_CHAP_EN )) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_BIDI_CHAP_EN,
Packit Service 646995
			    fnode->sess.bidi_chap_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				  FLASHNODE_SESS_DISCOVERY_AUTH_OPTIONAL)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DISCOVERY_AUTH_OPTIONAL,
Packit Service 646995
			    fnode->sess.discovery_auth_optional))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_ERL)) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_ERL,
Packit Service 646995
			    fnode->sess.erl))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				  FLASHNODE_SESS_DEF_TIME2WAIT)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DEF_TIME2WAIT,
Packit Service 646995
			    fnode->sess.def_time2wait))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				  FLASHNODE_SESS_DEF_TIME2RETAIN)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DEF_TIME2RETAIN,
Packit Service 646995
			    fnode->sess.def_time2retain))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_MAX_R2T)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_MAX_R2T,
Packit Service 646995
			    fnode->sess.max_outstanding_r2t))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_TSID)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TSID,
Packit Service 646995
			    fnode->sess.tsid))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_MAX_BURST)) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_MAX_BURST,
Packit Service 646995
			    fnode->sess.max_burst_len))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
				  FLASHNODE_SESS_DEF_TASKMGMT_TMO)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DEF_TASKMGMT_TMO,
Packit Service 646995
			    fnode->sess.def_taskmgmt_tmo))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_NAME)) {
Packit Service 646995
			if (!flashnode_fill_str(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_NAME,
Packit Service 646995
			    fnode->sess.targetname,
Packit Service 646995
			    sizeof(fnode->sess.targetname)))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_FIRST_BURST)) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_FIRST_BURST,
Packit Service 646995
			    fnode->sess.first_burst_len))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_ISID)) {
Packit Service 646995
			if (!flashnode_fill_isid(fnode, &iov[count]))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_ALIAS)) {
Packit Service 646995
			if (!flashnode_fill_str(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_ALIAS,
Packit Service 646995
			    fnode->sess.targetalias,
Packit Service 646995
			    sizeof(fnode->sess.targetalias)))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_TPGT)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TPGT,
Packit Service 646995
			    fnode->sess.tpgt))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  FLASHNODE_SESS_DISCOVERY_PARENT_IDX)) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX,
Packit Service 646995
			    fnode->sess.discovery_parent_idx))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  FLASHNODE_SESS_DISCOVERY_PARENT_TYPE)) {
Packit Service 646995
			if (!flashnode_fill_str(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE,
Packit Service 646995
			    fnode->sess.discovery_parent_type,
Packit Service 646995
			    sizeof(fnode->sess.discovery_parent_type)))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, FLASHNODE_SESS_PORTAL_TYPE)) {
Packit Service 646995
			if (!flashnode_fill_str(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_PORTAL_TYPE,
Packit Service 646995
			    fnode->sess.portal_type,
Packit Service 646995
			    sizeof(fnode->sess.portal_type)))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_SESS_CHAP_OUT_IDX))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_CHAP_OUT_IDX,
Packit Service 646995
			    fnode->sess.chap_out_idx))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name, to_key(FLASHNODE_CONN_PORT))) {
Packit Service 646995
			if (fnode->conn[0].port)
Packit Service 646995
				port = fnode->conn[0].port;
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_PORT, port))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_IPADDR))) {
Packit Service 646995
			if (!flashnode_fill_ipaddr(fnode, &iov[count],
Packit Service 646995
						   ISCSI_FLASHNODE_IPADDR))
Packit Service 646995
					count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_MAX_RECV_DLENGTH))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_MAX_RECV_DLENGTH,
Packit Service 646995
			    fnode->conn[0].max_recv_dlength))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_IS_FW_ASSIGNED_IPV6))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_IS_FW_ASSIGNED_IPV6,
Packit Service 646995
			    fnode->conn[0].is_fw_assigned_ipv6))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_HDR_DGST_EN))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_HDR_DGST_EN,
Packit Service 646995
			    fnode->conn[0].header_digest_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_DATA_DGST_EN))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_DATA_DGST_EN,
Packit Service 646995
			    fnode->conn[0].data_digest_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_SNACK_REQ_EN))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_SNACK_REQ_EN,
Packit Service 646995
			    fnode->conn[0].snack_req_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_TIMESTAMP_STAT))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_TIMESTAMP_STAT,
Packit Service 646995
			    fnode->conn[0].tcp_timestamp_stat))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_NAGLE_DISABLE))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_NAGLE_DISABLE,
Packit Service 646995
			    fnode->conn[0].tcp_nagle_disable))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_WSF_DISABLE))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_WSF_DISABLE,
Packit Service 646995
			    fnode->conn[0].tcp_wsf_disable))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_TIMER_SCALE))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_TIMER_SCALE,
Packit Service 646995
			    fnode->conn[0].tcp_timer_scale))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_TIMESTAMP_EN))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_TIMESTAMP_EN,
Packit Service 646995
			    fnode->conn[0].tcp_timestamp_en))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_IP_FRAG_DISABLE))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_IP_FRAG_DISABLE,
Packit Service 646995
			    fnode->conn[0].fragment_disable))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_MAX_XMIT_DLENGTH))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_MAX_XMIT_DLENGTH,
Packit Service 646995
			    fnode->conn[0].max_xmit_dlength))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_KEEPALIVE_TMO))) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_KEEPALIVE_TMO,
Packit Service 646995
			    fnode->conn[0].keepalive_tmo))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_REDIRECT_IPADDR))) {
Packit Service 646995
			if (!flashnode_fill_ipaddr(fnode, &iov[count],
Packit Service 646995
					ISCSI_FLASHNODE_REDIRECT_IPADDR))
Packit Service 646995
					count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_MAX_SEGMENT_SIZE))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_MAX_SEGMENT_SIZE,
Packit Service 646995
			    fnode->conn[0].max_segment_size))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_LOCAL_PORT))) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_LOCAL_PORT,
Packit Service 646995
			    fnode->conn[0].local_port))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_IPV4_TOS))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_IPV4_TOS,
Packit Service 646995
			    fnode->conn[0].ipv4_tos))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_IPV6_TC))) {
Packit Service 646995
			if (!flashnode_fill_uint8(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_IPV6_TC,
Packit Service 646995
			    fnode->conn[0].ipv6_traffic_class))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_IPV6_FLOW_LABEL))) {
Packit Service 646995
			if (!flashnode_fill_uint16(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_IPV6_FLOW_LABEL,
Packit Service 646995
			    fnode->conn[0].ipv6_flow_lbl))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_LINK_LOCAL_IPV6))) {
Packit Service 646995
			if (!flashnode_fill_ipv6_addr(fnode, &iov[count],
Packit Service 646995
					ISCSI_FLASHNODE_LINK_LOCAL_IPV6))
Packit Service 646995
					count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_XMIT_WSF))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_XMIT_WSF,
Packit Service 646995
			    fnode->conn[0].tcp_xmit_wsf))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_TCP_RECV_WSF))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_TCP_RECV_WSF,
Packit Service 646995
			    fnode->conn[0].tcp_recv_wsf))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_STATSN))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_STATSN,
Packit Service 646995
			    fnode->conn[0].stat_sn))
Packit Service 646995
				count++;
Packit Service 646995
		} else if (!strcmp(param->name,
Packit Service 646995
			  to_key(FLASHNODE_CONN_EXP_STATSN))) {
Packit Service 646995
			if (!flashnode_fill_uint32(fnode, &iov[count],
Packit Service 646995
			    ISCSI_FLASHNODE_EXP_STATSN,
Packit Service 646995
			    fnode->conn[0].exp_stat_sn))
Packit Service 646995
				count++;
Packit Service 646995
		}
Packit Service 646995
	}
Packit Service 646995
Packit Service 646995
	return count;
Packit Service 646995
}