|
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 |
}
|