[PATCH 0/6] open-iscsi: Updates for open-iscsi

30 views
Skip to first unread message

vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:27 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com
From: Vikas Chaudhary <vikas.c...@qlogic.com>

Mike,

Please review and apply following patches to open-iscsi.git tree
at your earliest convenience.
These patches include code optimization in iface code as well as
add support to set additional network parameter to iSCSI interface.

Kernel Patches for same is posted here:-
http://marc.info/?l=linux-scsi&m=136809521102233&w=2

Harish Zunjarrao (6):
iscsi-tools: Remove numbers used for network parameter settings
iscsi-tools: Use macro to set IPv4/IPv6 IP addresses
iscsi-tools: Use single function to enable/disable network parameters
iscsi-tools: Use single function to set integer network parameters
iscsi-tools: Ignore network parameter if not enabled/disabled
iscsi-tools: Additional parameters for network settings

Thanks,
Vikas.

vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:32 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com, Harish Zunjarrao
From: Harish Zunjarrao <harish.z...@qlogic.com>

If iface does not contain network parameter or incorrect value is set,
do not send that network parameter value to driver.

Signed-off-by: Harish Zunjarrao <harish.z...@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.c...@qlogic.com>
---
usr/iface.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/usr/iface.c b/usr/iface.c
index b77b564..622c436 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -1346,11 +1346,18 @@ static int iface_fill_enable_disable_param(struct iovec *iov,
net_param->param = param;
net_param->iface_type = iface_type;
net_param->param_type = ISCSI_NET_PARAM;
- if (strcmp(param_val, "disable"))
- net_param->value[0] = ISCSI_NET_PARAM_ENABLE;
- else /* Assume disabled */
+ if (!strcmp(param_val, "disable"))
net_param->value[0] = ISCSI_NET_PARAM_DISABLE;
+ else if (!strcmp(param_val, "enable"))
+ net_param->value[0] = ISCSI_NET_PARAM_ENABLE;
+ else
+ goto free;
return 0;
+free:
+ free(iov->iov_base);
+ iov->iov_base = NULL;
+ iov->iov_len = 0;
+ return 1;
}

#define IFACE_SET_NET_PARAM_EN(iov, inum, itype, param, ival, gcnt, \
--
1.8.2.GIT


vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:31 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com, Harish Zunjarrao
From: Harish Zunjarrao <harish.z...@qlogic.com>

Signed-off-by: Harish Zunjarrao <harish.z...@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.c...@qlogic.com>
---
usr/iface.c | 154 ++++++++++++++++++++++++++++++++----------------------------
1 file changed, 83 insertions(+), 71 deletions(-)

diff --git a/usr/iface.c b/usr/iface.c
index 75ed28e..b77b564 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -1223,60 +1223,68 @@ int iface_get_param_count(struct iface_rec *iface, int iface_all)
return iface_params.count;
}

-/* IPv4/IPv6 Port: 3260 or User defined */
-static int iface_fill_port(struct iovec *iov, struct iface_rec *iface,
- uint32_t iface_type)
+/* write integer parameter value */
+static int iface_fill_int_param_val(struct iovec *iov, uint32_t iface_num,
+ uint8_t iface_type, uint16_t param,
+ uint32_t param_len, uint32_t param_val)
{
int len;
struct iscsi_iface_param_info *net_param;
- uint16_t port = 3260;
struct nlattr *attr;
+ uint8_t val8 = 0;
+ uint16_t val16 = 0;
+ uint32_t val32 = 0;
+ char *val = NULL;

- len = sizeof(struct iscsi_iface_param_info) + sizeof(port);
- iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_PORT, len);
- if (!iov->iov_base)
- return 1;
- attr = iov->iov_base;
- iov->iov_len = NLA_ALIGN(attr->nla_len);
-
- net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
- net_param->param = ISCSI_NET_PARAM_PORT;
- net_param->iface_type = iface_type;
- net_param->iface_num = iface->iface_num;
- net_param->param_type = ISCSI_NET_PARAM;
- net_param->len = 2;
- if (iface->port)
- port = iface->port;
- memcpy(net_param->value, &port, net_param->len);
- return 0;
-}
-
-static int iface_fill_mtu(struct iovec *iov, struct iface_rec *iface,
- uint32_t iface_type)
-{
- int len;
- struct iscsi_iface_param_info *net_param;
- uint16_t mtu = 0;
- struct nlattr *attr;
-
- len = sizeof(struct iscsi_iface_param_info) + 2;
- iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_MTU, len);
+ len = sizeof(struct iscsi_iface_param_info) + param_len;
+ iov->iov_base = iscsi_nla_alloc(param, len);
if (!(iov->iov_base))
return 1;
+
attr = iov->iov_base;
iov->iov_len = NLA_ALIGN(attr->nla_len);
-
net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
- net_param->param = ISCSI_NET_PARAM_MTU;
+ net_param->iface_num = iface_num;
+ net_param->len = param_len;
+ net_param->param = param;
net_param->iface_type = iface_type;
- net_param->iface_num = iface->iface_num;
net_param->param_type = ISCSI_NET_PARAM;
- net_param->len = 2;
- mtu = iface->mtu;
- memcpy(net_param->value, &mtu, net_param->len);
+ switch (param_len) {
+ case 1:
+ val8 = (uint8_t)param_val;
+ val = (char *)&val8;
+ break;
+
+ case 2:
+ val16 = (uint16_t)param_val;
+ val = (char *)&val16;
+ break;
+
+ case 4:
+ val32 = (uint32_t)param_val;
+ val = (char *)&val32;
+ break;
+
+ default:
+ goto free;
+ }
+ memcpy(net_param->value, val, param_len);
return 0;
+free:
+ free(iov->iov_base);
+ iov->iov_base = NULL;
+ iov->iov_len = 0;
+ return 1;
}

+#define IFACE_SET_NET_PARAM_INTVAL(iov, inum, itype, param, plen, ival, \
+ gcnt, lcnt) \
+ if (ival && !iface_fill_int_param_val(iov, inum, itype, param, \
+ plen, ival)) { \
+ (*gcnt)++; \
+ (*lcnt)++; \
+ }
+
/* IPv4/IPv6 VLAN_ID: decimal value <= 4095 */
static int iface_fill_vlan_id(struct iovec *iov, struct iface_rec *iface,
uint32_t iface_type)
@@ -1656,22 +1664,24 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
count++;
}
}
- if (iface->mtu) {
- if (!iface_fill_mtu(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV4)) {
- net_config->count++;
- count++;
- }
- }
- if (iface->port) {
- if (!iface_fill_port(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV4)) {
- net_config->count++;
- count++;
- }
- }
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_MTU,
+ 2,
+ iface->mtu,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_PORT,
+ 2,
+ iface->port,
+ &net_config->count,
+ &count);
}
} else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
if (!strcmp(iface->state, "disable")) {
@@ -1784,22 +1794,24 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
count++;
}
}
- if (iface->mtu) {
- if (!iface_fill_mtu(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
- }
- if (iface->port) {
- if (!iface_fill_port(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
- }
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_MTU,
+ 2,
+ iface->mtu,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_PORT,
+ 2,
+ iface->port,
+ &net_config->count,
+ &count);
}
}
return 0;
--
1.8.2.GIT


vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:28 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com, Harish Zunjarrao
From: Harish Zunjarrao <harish.z...@qlogic.com>

Signed-off-by: Harish Zunjarrao <harish.z...@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.c...@qlogic.com>
---
include/iscsi_if.h | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/include/iscsi_if.h b/include/iscsi_if.h
index 20f2bc2..08cfaa9 100644
--- a/include/iscsi_if.h
+++ b/include/iscsi_if.h
@@ -386,25 +386,25 @@ struct iscsi_path {
/* iSCSI network params */
enum iscsi_net_param {
ISCSI_NET_PARAM_IPV4_ADDR = 1,
- ISCSI_NET_PARAM_IPV4_SUBNET = 2,
- ISCSI_NET_PARAM_IPV4_GW = 3,
- ISCSI_NET_PARAM_IPV4_BOOTPROTO = 4,
- ISCSI_NET_PARAM_MAC = 5,
- ISCSI_NET_PARAM_IPV6_LINKLOCAL = 6,
- ISCSI_NET_PARAM_IPV6_ADDR = 7,
- ISCSI_NET_PARAM_IPV6_ROUTER = 8,
- ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG = 9,
- ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG = 10,
- ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG = 11,
- ISCSI_NET_PARAM_IFACE_ENABLE = 12,
- ISCSI_NET_PARAM_VLAN_ID = 13,
- ISCSI_NET_PARAM_VLAN_PRIORITY = 14,
- ISCSI_NET_PARAM_VLAN_ENABLED = 15,
- ISCSI_NET_PARAM_VLAN_TAG = 16,
- ISCSI_NET_PARAM_IFACE_TYPE = 17,
- ISCSI_NET_PARAM_IFACE_NAME = 18,
- ISCSI_NET_PARAM_MTU = 19,
- ISCSI_NET_PARAM_PORT = 20,
+ ISCSI_NET_PARAM_IPV4_SUBNET,
+ ISCSI_NET_PARAM_IPV4_GW,
+ ISCSI_NET_PARAM_IPV4_BOOTPROTO,
+ ISCSI_NET_PARAM_MAC,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL,
+ ISCSI_NET_PARAM_IPV6_ADDR,
+ ISCSI_NET_PARAM_IPV6_ROUTER,
+ ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG,
+ ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ ISCSI_NET_PARAM_VLAN_ID,
+ ISCSI_NET_PARAM_VLAN_PRIORITY,
+ ISCSI_NET_PARAM_VLAN_ENABLED,
+ ISCSI_NET_PARAM_VLAN_TAG,
+ ISCSI_NET_PARAM_IFACE_TYPE,
+ ISCSI_NET_PARAM_IFACE_NAME,
+ ISCSI_NET_PARAM_MTU,
+ ISCSI_NET_PARAM_PORT,
};

enum iscsi_conn_state {
--
1.8.2.GIT


vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:30 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com, Harish Zunjarrao
From: Harish Zunjarrao <harish.z...@qlogic.com>

Signed-off-by: Harish Zunjarrao <harish.z...@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.c...@qlogic.com>
---
include/iscsi_if.h | 10 ++--
usr/iface.c | 143 ++++++++++++++++++++++++++---------------------------
2 files changed, 72 insertions(+), 81 deletions(-)

diff --git a/include/iscsi_if.h b/include/iscsi_if.h
index 08cfaa9..b34a91a 100644
--- a/include/iscsi_if.h
+++ b/include/iscsi_if.h
@@ -352,9 +352,9 @@ struct iscsi_path {
uint16_t pmtu;
} __attribute__ ((aligned (sizeof(uint64_t))));

-/* iscsi iface enabled/disabled setting */
-#define ISCSI_IFACE_DISABLE 0x01
-#define ISCSI_IFACE_ENABLE 0x02
+/* iscsi generic enable/disable setting for various features */
+#define ISCSI_NET_PARAM_DISABLE 0x01
+#define ISCSI_NET_PARAM_ENABLE 0x02

/* ipv4 bootproto */
#define ISCSI_BOOTPROTO_STATIC 0x01
@@ -379,10 +379,6 @@ struct iscsi_path {
#define ISCSI_MAX_VLAN_ID 4095
#define ISCSI_MAX_VLAN_PRIORITY 7

-/* iscsi vlan enable/disabled setting */
-#define ISCSI_VLAN_DISABLE 0x01
-#define ISCSI_VLAN_ENABLE 0x02
-
/* iSCSI network params */
enum iscsi_net_param {
ISCSI_NET_PARAM_IPV4_ADDR = 1,
diff --git a/usr/iface.c b/usr/iface.c
index d3bada4..75ed28e 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -1311,62 +1311,48 @@ static int iface_fill_vlan_id(struct iovec *iov, struct iface_rec *iface,
return 0;
}

-/* IPv4/IPv6 VLAN state: disable/enable */
-static int iface_fill_vlan_state(struct iovec *iov, struct iface_rec *iface,
- uint32_t iface_type)
+/* disable/enable parameters */
+static int iface_fill_enable_disable_param(struct iovec *iov,
+ uint32_t iface_num,
+ uint8_t iface_type,
+ uint16_t param,
+ char *param_val)
{
int len;
struct iscsi_iface_param_info *net_param;
struct nlattr *attr;

- len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_VLAN_ENABLED, len);
- if (!(iov->iov_base))
+ if (!param_val[0])
return 1;

- attr = iov->iov_base;
- iov->iov_len = NLA_ALIGN(attr->nla_len);
- net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
- net_param->param = ISCSI_NET_PARAM_VLAN_ENABLED;
- net_param->iface_type = iface_type;
- net_param->iface_num = iface->iface_num;
- net_param->param_type = ISCSI_NET_PARAM;
- net_param->len = 1;
- if (strcmp(iface->vlan_state, "disable") && iface->vlan_id)
- net_param->value[0] = ISCSI_VLAN_ENABLE;
- else /* Assume disabled */
- net_param->value[0] = ISCSI_VLAN_DISABLE;
- return 0;
-}
-
-/* IPv4/IPv6 Network state: disable/enable */
-static int iface_fill_net_state(struct iovec *iov, struct iface_rec *iface,
- uint32_t iface_type)
-{
- int len;
- struct iscsi_iface_param_info *net_param;
- struct nlattr *attr;
-
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_IFACE_ENABLE, len);
+ iov->iov_base = iscsi_nla_alloc(param, len);
if (!(iov->iov_base))
return 1;

attr = iov->iov_base;
iov->iov_len = NLA_ALIGN(attr->nla_len);
net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
- net_param->param = ISCSI_NET_PARAM_IFACE_ENABLE;
+ net_param->iface_num = iface_num;
+ net_param->len = 1;
+ net_param->param = param;
net_param->iface_type = iface_type;
- net_param->iface_num = iface->iface_num;
net_param->param_type = ISCSI_NET_PARAM;
- net_param->len = 1;
- if (!strcmp(iface->state, "disable"))
- net_param->value[0] = ISCSI_IFACE_DISABLE;
- else /* Assume enabled */
- net_param->value[0] = ISCSI_IFACE_ENABLE;
+ if (strcmp(param_val, "disable"))
+ net_param->value[0] = ISCSI_NET_PARAM_ENABLE;
+ else /* Assume disabled */
+ net_param->value[0] = ISCSI_NET_PARAM_DISABLE;
return 0;
}

+#define IFACE_SET_NET_PARAM_EN(iov, inum, itype, param, ival, gcnt, \
+ lcnt) \
+ if (!iface_fill_enable_disable_param(iov, inum, itype, param, \
+ ival)) { \
+ (*gcnt)++; \
+ (*lcnt)++; \
+ }
+
/* IPv4 Bootproto: DHCP/static */
static int iface_fill_net_bootproto(struct iovec *iov, struct iface_rec *iface)
{
@@ -1596,13 +1582,13 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
iptype = iface_get_iptype(iface);
if (iptype == ISCSI_IFACE_TYPE_IPV4) {
if (!strcmp(iface->state, "disable")) {
- if (!iface_fill_net_state(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV4)) {
- net_config->count++;
- count++;
- }
-
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
return 0;
}

@@ -1646,18 +1632,22 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
* fill state and other parameters (if any)
*/
if (count) {
- if (!iface_fill_net_state(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV4)) {
- net_config->count++;
- count++;
- }
- if (!iface_fill_vlan_state(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV4)) {
- net_config->count++;
- count++;
- }
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_VLAN_ENABLED,
+ iface->vlan_state,
+ &net_config->count,
+ &count);
+
if (strcmp(iface->vlan_state, "disable") &&
iface->vlan_id) {
if (!iface_fill_vlan_id(&iov[net_config->count],
@@ -1685,12 +1675,13 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
}
} else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
if (!strcmp(iface->state, "disable")) {
- if (!iface_fill_net_state(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
return 0;
}

@@ -1768,18 +1759,22 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
* fill state and other parameters
*/
if (count) {
- if (!iface_fill_net_state(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
- if (!iface_fill_vlan_state(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_VLAN_ENABLED,
+ iface->vlan_state,
+ &net_config->count,
+ &count);
+
if (strcmp(iface->vlan_state, "disable") &&
iface->vlan_id) {
if (!iface_fill_vlan_id(&iov[net_config->count],
--
1.8.2.GIT


vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:29 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com, Harish Zunjarrao
From: Harish Zunjarrao <harish.z...@qlogic.com>

Signed-off-by: Harish Zunjarrao <harish.z...@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.c...@qlogic.com>
---
usr/iface.c | 152 +++++++++++++++++++++++++++---------------------------------
1 file changed, 67 insertions(+), 85 deletions(-)

diff --git a/usr/iface.c b/usr/iface.c
index c86892e..d3bada4 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -1484,8 +1484,8 @@ static int iface_fill_router_autocfg(struct iovec *iov, struct iface_rec *iface)
}

/* IPv4 IPAddress/Subnet Mask/Gateway: 4 bytes */
-static int iface_fill_net_ipv4_addr(struct iovec *iov, struct iface_rec *iface,
- uint32_t param)
+static int iface_fill_net_ipv4_addr(struct iovec *iov, uint32_t iface_num,
+ uint16_t param, char *param_val)
{
int rc = 1;
int len;
@@ -1502,29 +1502,12 @@ static int iface_fill_net_ipv4_addr(struct iovec *iov, struct iface_rec *iface,
net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = param;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV4;
- net_param->iface_num = iface->iface_num;
+ net_param->iface_num = iface_num;
net_param->len = 4;
net_param->param_type = ISCSI_NET_PARAM;
-
- switch (param) {
- case ISCSI_NET_PARAM_IPV4_ADDR:
- rc = inet_pton(AF_INET, iface->ipaddress, net_param->value);
- if (rc <= 0)
- goto free;
- break;
- case ISCSI_NET_PARAM_IPV4_SUBNET:
- rc = inet_pton(AF_INET, iface->subnet_mask, net_param->value);
- if (rc <= 0)
- goto free;
- break;
- case ISCSI_NET_PARAM_IPV4_GW:
- rc = inet_pton(AF_INET, iface->gateway, net_param->value);
- if (rc <= 0)
- goto free;
- break;
- default:
+ rc = inet_pton(AF_INET, param_val, net_param->value);
+ if (rc <= 0)
goto free;
- }

/* validate */
if (!net_param->value[0] && !net_param->value[1] &&
@@ -1539,9 +1522,18 @@ free:
return 1;
}

+#define IFACE_SET_NET_PARAM_IPV4_ADDR(iov, inum, param, ival, gcnt, \
+ lcnt) \
+ if (strstr(ival, ".")) { \
+ if (!iface_fill_net_ipv4_addr(iov, inum, param, ival)) {\
+ (*gcnt)++; \
+ (*lcnt)++; \
+ } \
+ }
+
/* IPv6 IPAddress/LinkLocal/Router: 16 bytes */
-static int iface_fill_net_ipv6_addr(struct iovec *iov, struct iface_rec *iface,
- uint32_t param)
+static int iface_fill_net_ipv6_addr(struct iovec *iov, uint32_t iface_num,
+ uint16_t param, char *param_val)
{
int rc;
int len;
@@ -1558,30 +1550,12 @@ static int iface_fill_net_ipv6_addr(struct iovec *iov, struct iface_rec *iface,
net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = param;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV6;
- net_param->iface_num = iface->iface_num;
+ net_param->iface_num = iface_num;
net_param->param_type = ISCSI_NET_PARAM;
net_param->len = 16;
-
- switch (param) {
- case ISCSI_NET_PARAM_IPV6_ADDR:
- rc = inet_pton(AF_INET6, iface->ipaddress, net_param->value);
- if (rc <= 0)
- goto free;
- break;
- case ISCSI_NET_PARAM_IPV6_LINKLOCAL:
- rc = inet_pton(AF_INET6, iface->ipv6_linklocal,
- net_param->value);
- if (rc <= 0)
- goto free;
- break;
- case ISCSI_NET_PARAM_IPV6_ROUTER:
- rc = inet_pton(AF_INET6, iface->ipv6_router, net_param->value);
- if (rc <= 0)
- goto free;
- break;
- default:
+ rc = inet_pton(AF_INET6, param_val, net_param->value);
+ if (rc <= 0)
goto free;
- }

return 0;
free:
@@ -1591,6 +1565,15 @@ free:
return 1;
}

+#define IFACE_SET_NET_PARAM_IPV6_ADDR(iov, inum, param, ival, gcnt, \
+ lcnt) \
+ if (strstr(ival, ":")) { \
+ if (!iface_fill_net_ipv6_addr(iov, inum, param, ival)) {\
+ (*gcnt)++; \
+ (*lcnt)++; \
+ } \
+ }
+
struct iface_net_config {
struct iface_rec *primary;
struct iovec *iovs;
@@ -1635,28 +1618,27 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
net_config->count++;
count++;
}
- if (!iface_fill_net_ipv4_addr(&iov[net_config->count],
- iface,
- ISCSI_NET_PARAM_IPV4_ADDR)) {
- net_config->count++;
- count++;
- }
- if (strstr(iface->subnet_mask, ".")) {
- if (!iface_fill_net_ipv4_addr(
- &iov[net_config->count], iface,
- ISCSI_NET_PARAM_IPV4_SUBNET)) {
- net_config->count++;
- count++;
- }
- }
- if (strstr(iface->gateway, ".")) {
- if (!iface_fill_net_ipv4_addr(
- &iov[net_config->count], iface,
- ISCSI_NET_PARAM_IPV4_GW)) {
- net_config->count++;
- count++;
- }
- }
+
+ IFACE_SET_NET_PARAM_IPV4_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV4_ADDR,
+ iface->ipaddress,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_IPV4_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV4_SUBNET,
+ iface->subnet_mask,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_IPV4_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV4_GW,
+ iface->gateway,
+ &net_config->count,
+ &count);
}

/*
@@ -1727,12 +1709,12 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
count++;
}
/* User provided IPv6 Address */
- if (!iface_fill_net_ipv6_addr(&iov[net_config->count],
- iface,
- ISCSI_NET_PARAM_IPV6_ADDR)) {
- net_config->count++;
- count++;
- }
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_ADDR,
+ iface->ipaddress,
+ &net_config->count,
+ &count);
}

/* For LinkLocal Address */
@@ -1751,12 +1733,12 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
count++;
}
/* User provided Link Local Address */
- if (!iface_fill_net_ipv6_addr(&iov[net_config->count],
- iface,
- ISCSI_NET_PARAM_IPV6_LINKLOCAL)) {
- net_config->count++;
- count++;
- }
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL,
+ iface->ipv6_linklocal,
+ &net_config->count,
+ &count);
}

/* For Router Address */
@@ -1773,12 +1755,12 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
count++;
}
/* User provided Router Address */
- if (!iface_fill_net_ipv6_addr(&iov[net_config->count],
- iface,
- ISCSI_NET_PARAM_IPV6_ROUTER)) {
- net_config->count++;
- count++;
- }
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_ROUTER,
+ iface->ipv6_router,
+ &net_config->count,
+ &count);
}

/*
--
1.8.2.GIT


vikas.c...@qlogic.com

unread,
May 9, 2013, 6:07:33 AM5/9/13
to mich...@cs.wisc.edu, open-...@googlegroups.com, vikas.c...@qlogic.com, lalit.ch...@qlogic.com, ravi....@qlogic.com, Harish Zunjarrao
From: Harish Zunjarrao <harish.z...@qlogic.com>

Signed-off-by: Harish Zunjarrao <harish.z...@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.c...@qlogic.com>
---
include/iscsi_if.h | 75 ++++
usr/config.h | 52 +++
usr/idbm.c | 91 ++++
usr/idbm_fields.h | 53 +++
usr/iface.c | 1234 +++++++++++++++++++++++++++++++++++++++++++++++-----
5 files changed, 1405 insertions(+), 100 deletions(-)

diff --git a/include/iscsi_if.h b/include/iscsi_if.h
index b34a91a..af33b84 100644
--- a/include/iscsi_if.h
+++ b/include/iscsi_if.h
@@ -401,6 +401,81 @@ enum iscsi_net_param {
ISCSI_NET_PARAM_IFACE_NAME,
ISCSI_NET_PARAM_MTU,
ISCSI_NET_PARAM_PORT,
+ ISCSI_NET_PARAM_IPADDR_STATE,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL_STATE,
+ ISCSI_NET_PARAM_IPV6_ROUTER_STATE,
+ ISCSI_NET_PARAM_DELAYED_ACK_EN,
+ ISCSI_NET_PARAM_ISNS_EN,
+ ISCSI_NET_PARAM_ISNS_ADDR,
+ ISCSI_NET_PARAM_ISNS_PORT,
+ ISCSI_NET_PARAM_NAGLE_EN,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE_EN,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE,
+ ISCSI_NET_PARAM_TCP_TIMER_SCALE,
+ ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
+ ISCSI_NET_PARAM_CACHE_ID,
+ ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_ISNS_INFO_EN,
+ ISCSI_NET_PARAM_IPV4_TOS_EN,
+ ISCSI_NET_PARAM_IPV4_TOS,
+ ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
+ ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
+ ISCSI_NET_PARAM_IPV4_FRAGMENT_EN,
+ ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
+ ISCSI_NET_PARAM_IPV4_TTL,
+ ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
+ ISCSI_NET_PARAM_IPV6_MLD_EN,
+ ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
+ ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
+ ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
+ ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
+ ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
+ ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
+ ISCSI_NET_PARAM_IPV6_DUP_ADDR_DET_CNT,
+ ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
+ ISCSI_NET_PARAM_REDIRECT_EN,
+ ISCSI_NET_PARAM_DEF_TMF_TMO,
+ ISCSI_NET_PARAM_DEF_HDRDGST_EN,
+ ISCSI_NET_PARAM_DEF_DATADGST_EN,
+ ISCSI_NET_PARAM_DEF_IMM_DATA_EN,
+ ISCSI_NET_PARAM_DEF_INITIAL_R2T_EN,
+ ISCSI_NET_PARAM_DEF_DATASEQ_INORDER_EN,
+ ISCSI_NET_PARAM_DEF_PDU_INORDER_EN,
+ ISCSI_NET_PARAM_DEF_ERL,
+ ISCSI_NET_PARAM_DEF_MAX_RECV_DLENGTH,
+ ISCSI_NET_PARAM_DEF_FIRST_BURST,
+ ISCSI_NET_PARAM_DEF_MAX_R2T,
+ ISCSI_NET_PARAM_DEF_MAX_BURST,
+ ISCSI_NET_PARAM_DEF_CHAP_AUTH_EN,
+ ISCSI_NET_PARAM_DEF_BIDI_CHAP_EN,
+ ISCSI_NET_PARAM_DEF_STRICT_LOGIN_COMP_EN,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_AUTH_EN,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_LOGOUT_EN,
+ ISCSI_NET_PARAM_DEF_ISCSI_NAME,
+ ISCSI_NET_PARAM_MAX,
+};
+
+enum iscsi_ipaddress_state {
+ ISCSI_IPDDRESS_STATE_UNCONFIGURED,
+ ISCSI_IPDDRESS_STATE_ACQUIRING,
+ ISCSI_IPDDRESS_STATE_TENTATIVE,
+ ISCSI_IPDDRESS_STATE_VALID,
+ ISCSI_IPDDRESS_STATE_DISABLING,
+ ISCSI_IPDDRESS_STATE_INVALID,
+ ISCSI_IPDDRESS_STATE_DEPRECATED,
+};
+
+enum iscsi_router_state {
+ ISCSI_ROUTER_STATE_UNKNOWN,
+ ISCSI_ROUTER_STATE_ADVERTISED,
+ ISCSI_ROUTER_STATE_MANUAL,
+ ISCSI_ROUTER_STATE_STALE,
};

enum iscsi_conn_state {
diff --git a/usr/config.h b/usr/config.h
index 998caff..80d97c8 100644
--- a/usr/config.h
+++ b/usr/config.h
@@ -229,6 +229,58 @@ typedef struct iface_rec {
* 1 = enable */
uint16_t mtu;
uint16_t port;
+ char delayed_ack[ISCSI_MAX_STR_LEN];
+ char isns[ISCSI_MAX_STR_LEN];
+ char isns_ipaddress[ISCSI_MAX_STR_LEN];
+ uint16_t isns_port;
+ char nagle[ISCSI_MAX_STR_LEN];
+ char tcp_win_scale_state[ISCSI_MAX_STR_LEN];
+ uint8_t tcp_win_scale;
+ uint8_t tcp_timer_scale;
+ char tcp_timestamp[ISCSI_MAX_STR_LEN];
+ char dhcp_dns[ISCSI_MAX_STR_LEN];
+ char dhcp_slp_da[ISCSI_MAX_STR_LEN];
+ char dhcp_isns_info[ISCSI_MAX_STR_LEN];
+ char tos_state[ISCSI_MAX_STR_LEN];
+ uint8_t tos;
+ char gratuitous_arp[ISCSI_MAX_STR_LEN];
+ char dhcp_alt_client_id_state[ISCSI_MAX_STR_LEN];
+ char dhcp_alt_client_id[ISCSI_MAX_STR_LEN];
+ char dhcp_req_vendor_id_state[ISCSI_MAX_STR_LEN];
+ char dhcp_vendor_id_state[ISCSI_MAX_STR_LEN];
+ char dhcp_vendor_id[ISCSI_MAX_STR_LEN];
+ char dhcp_learn_iqn[ISCSI_MAX_STR_LEN];
+ char fragmentation[ISCSI_MAX_STR_LEN];
+ char incoming_forwarding[ISCSI_MAX_STR_LEN];
+ uint8_t ttl;
+ char gratuitous_neighbor_adv[ISCSI_MAX_STR_LEN];
+ char redirect[ISCSI_MAX_STR_LEN];
+ char mld[ISCSI_MAX_STR_LEN];
+ uint32_t flow_label;
+ uint32_t traffic_class;
+ uint32_t hop_limit;
+ uint32_t nd_reachable_tmo;
+ uint32_t nd_rexmit_time;
+ uint32_t nd_stale_tmo;
+ uint8_t duplicate_addr_detect_cnt;
+ uint32_t router_adv_link_mtu;
+ uint16_t def_task_mgmt_timeout;
+ char def_header_digest[ISCSI_MAX_STR_LEN];
+ char def_data_digest[ISCSI_MAX_STR_LEN];
+ char def_immediate_data[ISCSI_MAX_STR_LEN];
+ char def_initial_r2t[ISCSI_MAX_STR_LEN];
+ char def_data_seq_inorder[ISCSI_MAX_STR_LEN];
+ char def_data_pdu_inorder[ISCSI_MAX_STR_LEN];
+ uint8_t def_erl;
+ uint16_t def_max_receive_data_len;
+ uint16_t def_first_burst_len;
+ uint16_t def_max_out_r2t;
+ uint16_t def_max_burst_len;
+ char def_chap_auth[ISCSI_MAX_STR_LEN];
+ char def_bidi_chap[ISCSI_MAX_STR_LEN];
+ char def_strict_login_compliance[ISCSI_MAX_STR_LEN];
+ char def_discovery_auth[ISCSI_MAX_STR_LEN];
+ char def_discovery_logout[ISCSI_MAX_STR_LEN];
char port_state[ISCSI_MAX_STR_LEN];
char port_speed[ISCSI_MAX_STR_LEN];
/*
diff --git a/usr/idbm.c b/usr/idbm.c
index bc06058..d8907ef 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -454,6 +454,97 @@ void idbm_recinfo_iface(iface_rec_t *r, recinfo_t *ri)
__recinfo_int(IFACE_NUM, ri, r, iface_num, IDBM_SHOW, num, 1);
__recinfo_uint16(IFACE_MTU, ri, r, mtu, IDBM_SHOW, num, 1);
__recinfo_uint16(IFACE_PORT, ri, r, port, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DELAYED_ACK, ri, r, delayed_ack, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_ISNS, ri, r, isns, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_ISNS_IPADDR, ri, r, isns_ipaddress,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_ISNS_PORT, ri, r, isns_port, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_NAGLE, ri, r, nagle, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_TCP_WIN_SCALE_STATE, ri, r, tcp_win_scale_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TCP_WIN_SCALE, ri, r, tcp_win_scale,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TCP_TIMER_SCALE, ri, r, tcp_timer_scale,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_TCP_TIMESTAMP, ri, r, tcp_timestamp,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_DNS, ri, r, dhcp_dns, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_SLP_DA, ri, r, dhcp_slp_da,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_ISNS_INFO, ri, r, dhcp_isns_info,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_TOS_STATE, ri, r, tos_state, IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TOS, ri, r, tos, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_GRAT_ARP, ri, r, gratuitous_arp, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_ALT_CID, ri, r, dhcp_alt_client_id_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_ALT_CID_STR, ri, r, dhcp_alt_client_id,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_REQ_VID, ri, r, dhcp_req_vendor_id_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_VID, ri, r, dhcp_vendor_id_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_VID_STR, ri, r, dhcp_vendor_id,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, dhcp_learn_iqn,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_FRAGMENTATION, ri, r, fragmentation,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_IN_FORWARD, ri, r, incoming_forwarding,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TTL, ri, r, ttl, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_GRAT_NEI_ADV, ri, r, gratuitous_neighbor_adv,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_REDIRECT, ri, r, redirect, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_MLD, ri, r, mld, IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_FLOW_LABEL, ri, r, flow_label, IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, traffic_class,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_HOP_LIMIT, ri, r, hop_limit, IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_ND_REACHABLE_TMO, ri, r, nd_reachable_tmo,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_ND_REXMIT_TIME, ri, r, nd_rexmit_time,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_ND_STALE_TMO, ri, r, nd_stale_tmo,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_DUP_ADDR_DET_CNT, ri, r,
+ duplicate_addr_detect_cnt, IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r, router_adv_link_mtu,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_TMF_TMO, ri, r, def_task_mgmt_timeout,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_HDRDGST, ri, r, def_header_digest,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DATADGST, ri, r, def_data_digest,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_IMM_DATA, ri, r, def_immediate_data,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_INITIAL_R2T, ri, r, def_initial_r2t,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DSEQ_INORDER, ri, r, def_data_seq_inorder,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DPDU_INORDER, ri, r, def_data_pdu_inorder,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_DEF_ERL, ri, r, def_erl,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_MAX_RECV_DLEN, ri, r,
+ def_max_receive_data_len, IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_FIRST_BURST, ri, r, def_first_burst_len,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_MAX_R2T, ri, r, def_max_out_r2t,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_MAX_BURST, ri, r, def_max_burst_len,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_CHAP_AUTH, ri, r, def_chap_auth,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_BIDI_CHAP, ri, r, def_bidi_chap,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_STRICT_LOGIN_COMP, ri, r,
+ def_strict_login_compliance, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DISCOVERY_AUTH, ri, r, def_discovery_auth,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DISCOVERY_LOGOUT, ri, r, def_discovery_logout,
+ IDBM_SHOW, num, 1);
}

static void idbm_recinfo_host_chap(struct iscsi_chap_rec *r, recinfo_t *ri)
diff --git a/usr/idbm_fields.h b/usr/idbm_fields.h
index 179dda8..cb61a76 100644
--- a/usr/idbm_fields.h
+++ b/usr/idbm_fields.h
@@ -89,6 +89,59 @@
#define IFACE_NUM "iface.iface_num"
#define IFACE_MTU "iface.mtu"
#define IFACE_PORT "iface.port"
+#define IFACE_DELAYED_ACK "iface.delayed_ack"
+#define IFACE_ISNS "iface.isns"
+#define IFACE_ISNS_IPADDR "iface.isns_ipaddress"
+#define IFACE_ISNS_PORT "iface.isns_port"
+#define IFACE_NAGLE "iface.nagle"
+#define IFACE_TCP_WIN_SCALE_STATE "iface.tcp_win_scale_state"
+#define IFACE_TCP_WIN_SCALE "iface.tcp_win_scale"
+#define IFACE_TCP_TIMER_SCALE "iface.tcp_timer_scale"
+#define IFACE_TCP_TIMESTAMP "iface.tcp_timestamp"
+#define IFACE_DHCP_DNS "iface.dhcp_dns"
+#define IFACE_DHCP_SLP_DA "iface.dhcp_slp_da"
+#define IFACE_DHCP_ISNS_INFO "iface.dhcp_isns_info"
+#define IFACE_TOS_STATE "iface.tos_state"
+#define IFACE_TOS "iface.tos"
+#define IFACE_GRAT_ARP "iface.gratuitous_arp"
+#define IFACE_DHCP_ALT_CID "iface.dhcp_alt_client_id_state"
+#define IFACE_DHCP_ALT_CID_STR "iface.dhcp_alt_client_id"
+#define IFACE_DHCP_REQ_VID "iface.dhcp_req_vendor_id_state"
+#define IFACE_DHCP_VID "iface.dhcp_vendor_id_state"
+#define IFACE_DHCP_VID_STR "iface.dhcp_vendor_id"
+#define IFACE_DHCP_LEARN_IQN "iface.dhcp_learn_iqn"
+#define IFACE_FRAGMENTATION "iface.fragmentation"
+#define IFACE_IN_FORWARD "iface.incoming_forwarding"
+#define IFACE_TTL "iface.ttl"
+#define IFACE_GRAT_NEI_ADV "iface.gratuitous_neighbor_adv"
+#define IFACE_REDIRECT "iface.redirect"
+#define IFACE_IGNORE_ICMP_ECHO_REQ "iface.ignore_icmp_echo_request"
+#define IFACE_MLD "iface.mld"
+#define IFACE_FLOW_LABEL "iface.flow_label"
+#define IFACE_TRAFFIC_CLASS "iface.traffic_class"
+#define IFACE_HOP_LIMIT "iface.hop_limit"
+#define IFACE_ND_REACHABLE_TMO "iface.nd_reachable_tmo"
+#define IFACE_ND_REXMIT_TIME "iface.nd_rexmit_time"
+#define IFACE_ND_STALE_TMO "iface.nd_stale_tmo"
+#define IFACE_DUP_ADDR_DET_CNT "iface.duplicate_addr_detect_cnt"
+#define IFACE_RTR_ADV_LINK_MTU "iface.router_adv_link_mtu"
+#define IFACE_DEF_TMF_TMO "iface.def_task_mgmt_timeout"
+#define IFACE_DEF_HDRDGST "iface.def_header_digest"
+#define IFACE_DEF_DATADGST "iface.def_data_digest"
+#define IFACE_DEF_IMM_DATA "iface.def_immediate_data"
+#define IFACE_DEF_INITIAL_R2T "iface.def_initial_r2t"
+#define IFACE_DEF_DSEQ_INORDER "iface.def_data_seq_inorder"
+#define IFACE_DEF_DPDU_INORDER "iface.def_data_pdu_inorder"
+#define IFACE_DEF_ERL "iface.def_erl"
+#define IFACE_DEF_MAX_RECV_DLEN "iface.def_max_receive_data_len"
+#define IFACE_DEF_FIRST_BURST "iface.def_first_burst_len"
+#define IFACE_DEF_MAX_R2T "iface.def_max_out_r2t"
+#define IFACE_DEF_MAX_BURST "iface.def_max_burst_len"
+#define IFACE_DEF_CHAP_AUTH "iface.def_chap_auth"
+#define IFACE_DEF_BIDI_CHAP "iface.def_bidi_chap"
+#define IFACE_DEF_STRICT_LOGIN_COMP "iface.def_strict_login_compliance"
+#define IFACE_DEF_DISCOVERY_AUTH "iface.def_discovery_auth"
+#define IFACE_DEF_DISCOVERY_LOGOUT "iface.def_discovery_logout"

/* discovery fields */
#define DISC_STARTUP "discovery.startup"
diff --git a/usr/iface.c b/usr/iface.c
index 622c436..629f42a 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -601,6 +601,114 @@ void iface_copy(struct iface_rec *dst, struct iface_rec *src)
dst->mtu = src->mtu;
if (src->port)
dst->port = src->port;
+ if (strlen(src->delayed_ack))
+ strcpy(dst->delayed_ack, src->delayed_ack);
+ if (strlen(src->isns))
+ strcpy(dst->isns, src->isns);
+ if (strlen(src->isns_ipaddress))
+ strcpy(dst->isns_ipaddress, src->isns_ipaddress);
+ if (src->isns_port)
+ dst->isns_port = src->isns_port;
+ if (strlen(src->nagle))
+ strcpy(dst->nagle, src->nagle);
+ if (strlen(src->tcp_win_scale_state))
+ strcpy(dst->tcp_win_scale_state, src->tcp_win_scale_state);
+ if (src->tcp_win_scale)
+ dst->tcp_win_scale = src->tcp_win_scale;
+ if (src->tcp_timer_scale)
+ dst->tcp_timer_scale = src->tcp_timer_scale;
+ if (strlen(src->tcp_timestamp))
+ strcpy(dst->tcp_timestamp, src->tcp_timestamp);
+ if (strlen(src->dhcp_dns))
+ strcpy(dst->dhcp_dns, src->dhcp_dns);
+ if (strlen(src->dhcp_slp_da))
+ strcpy(dst->dhcp_slp_da, src->dhcp_slp_da);
+ if (strlen(src->dhcp_isns_info))
+ strcpy(dst->dhcp_isns_info, src->dhcp_isns_info);
+ if (strlen(src->tos_state))
+ strcpy(dst->tos_state, src->tos_state);
+ if (src->tos)
+ dst->tos = src->tos;
+ if (strlen(src->gratuitous_arp))
+ strcpy(dst->gratuitous_arp, src->gratuitous_arp);
+ if (strlen(src->dhcp_alt_client_id_state))
+ strcpy(dst->dhcp_alt_client_id_state,
+ src->dhcp_alt_client_id_state);
+ if (strlen(src->dhcp_alt_client_id))
+ strcpy(dst->dhcp_alt_client_id, src->dhcp_alt_client_id);
+ if (strlen(src->dhcp_req_vendor_id_state))
+ strcpy(dst->dhcp_req_vendor_id_state,
+ src->dhcp_req_vendor_id_state);
+ if (strlen(src->dhcp_vendor_id_state))
+ strcpy(dst->dhcp_vendor_id_state, src->dhcp_vendor_id_state);
+ if (strlen(src->dhcp_vendor_id))
+ strcpy(dst->dhcp_vendor_id, src->dhcp_vendor_id);
+ if (strlen(src->dhcp_learn_iqn))
+ strcpy(dst->dhcp_learn_iqn, src->dhcp_learn_iqn);
+ if (strlen(src->fragmentation))
+ strcpy(dst->fragmentation, src->fragmentation);
+ if (strlen(src->incoming_forwarding))
+ strcpy(dst->incoming_forwarding, src->incoming_forwarding);
+ if (src->ttl)
+ dst->ttl = src->ttl;
+ if (strlen(src->gratuitous_neighbor_adv))
+ strcpy(dst->gratuitous_neighbor_adv,
+ src->gratuitous_neighbor_adv);
+ if (strlen(src->redirect))
+ strcpy(dst->redirect, src->redirect);
+ if (strlen(src->mld))
+ strcpy(dst->mld, src->mld);
+ if (src->flow_label)
+ dst->flow_label = src->flow_label;
+ if (src->traffic_class)
+ dst->traffic_class = src->traffic_class;
+ if (src->hop_limit)
+ dst->hop_limit = src->hop_limit;
+ if (src->nd_reachable_tmo)
+ dst->nd_reachable_tmo = src->nd_reachable_tmo;
+ if (src->nd_rexmit_time)
+ dst->nd_rexmit_time = src->nd_rexmit_time;
+ if (src->nd_stale_tmo)
+ dst->nd_stale_tmo = src->nd_stale_tmo;
+ if (src->duplicate_addr_detect_cnt)
+ dst->duplicate_addr_detect_cnt = src->duplicate_addr_detect_cnt;
+ if (src->router_adv_link_mtu)
+ dst->router_adv_link_mtu = src->router_adv_link_mtu;
+ if (src->def_task_mgmt_timeout)
+ dst->def_task_mgmt_timeout = src->def_task_mgmt_timeout;
+ if (strlen(src->def_header_digest))
+ strcpy(dst->def_header_digest, src->def_header_digest);
+ if (strlen(src->def_data_digest))
+ strcpy(dst->def_data_digest, src->def_data_digest);
+ if (strlen(src->def_immediate_data))
+ strcpy(dst->def_immediate_data, src->def_immediate_data);
+ if (strlen(src->def_initial_r2t))
+ strcpy(dst->def_initial_r2t, src->def_initial_r2t);
+ if (strlen(src->def_data_seq_inorder))
+ strcpy(dst->def_data_seq_inorder, src->def_data_seq_inorder);
+ if (strlen(src->def_data_pdu_inorder))
+ strcpy(dst->def_data_pdu_inorder, src->def_data_pdu_inorder);
+ if (src->def_erl)
+ dst->def_erl = src->def_erl;
+ if (src->def_max_receive_data_len)
+ dst->def_max_receive_data_len = src->def_max_receive_data_len;
+ if (src->def_first_burst_len)
+ dst->def_first_burst_len = src->def_first_burst_len;
+ if (src->def_max_out_r2t)
+ dst->def_max_out_r2t = src->def_max_out_r2t;
+ if (src->def_max_burst_len)
+ dst->def_max_burst_len = src->def_max_burst_len;
+ if (strlen(src->def_chap_auth))
+ strcpy(dst->def_chap_auth, src->def_chap_auth);
+ if (strlen(src->def_bidi_chap))
+ strcpy(dst->def_bidi_chap, src->def_bidi_chap);
+ if (strlen(src->def_strict_login_compliance))
+ strcpy(dst->def_strict_login_compliance,
+ src->def_strict_login_compliance);
+ if (strlen(src->def_discovery_auth))
+ strcpy(dst->def_discovery_auth, src->def_discovery_auth);
+ if (strlen(src->def_discovery_logout))
+ strcpy(dst->def_discovery_logout, src->def_discovery_logout);
if (strlen(src->hwaddress))
strcpy(dst->hwaddress, src->hwaddress);
if (strlen(src->transport_name))
@@ -1026,6 +1134,11 @@ struct iface_param_count {
int count;
};

+#define IFACE_NET_PARAM_EN_CNT(param_val, cnt) \
+ if (!strcmp(param_val, "disable") || \
+ !strcmp(param_val, "enable")) \
+ (*cnt)++;
+
/**
* __iface_get_param_count - Gets netconfig parameter count for given iface
* @data: iface_param_count structure
@@ -1094,6 +1207,131 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)

if (iface->port)
count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->delayed_ack,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->isns,
+ &count);
+
+ if (strstr(iface->isns_ipaddress, "."))
+ count++;
+
+ if (iface->isns_port)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->nagle,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_win_scale_state,
+ &count);
+
+ if (iface->tcp_win_scale)
+ count++;
+
+ if (iface->tcp_timer_scale)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_timestamp,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_dns,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_slp_da,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_isns_info,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->tos_state,
+ &count);
+
+ if (iface->tos)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->gratuitous_arp,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_alt_client_id_state,
+ &count);
+
+ if (iface->dhcp_alt_client_id[0])
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_req_vendor_id_state,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_vendor_id_state,
+ &count);
+
+ if (iface->dhcp_vendor_id[0])
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_learn_iqn,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->fragmentation,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->incoming_forwarding,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->redirect, &count);
+
+ if (iface->ttl)
+ count++;
+
+ if (iface->def_task_mgmt_timeout)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_header_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_immediate_data,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_initial_r2t,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_seq_inorder,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_pdu_inorder,
+ &count);
+
+ if (iface->def_erl)
+ count++;
+
+ if (iface->def_max_receive_data_len)
+ count++;
+
+ if (iface->def_first_burst_len)
+ count++;
+
+ if (iface->def_max_out_r2t)
+ count++;
+
+ if (iface->def_max_burst_len)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_chap_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_bidi_chap,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_strict_login_compliance,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_logout,
+ &count);
}
} else
/* IPv4 is disabled, iface state */
@@ -1185,6 +1423,114 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)

if (iface->port)
count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->delayed_ack,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->isns,
+ &count);
+
+ if (strstr(iface->isns_ipaddress, ":"))
+ count++;
+
+ if (iface->isns_port)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->nagle,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_win_scale_state,
+ &count);
+
+ if (iface->tcp_win_scale)
+ count++;
+
+ if (iface->tcp_timer_scale)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_timestamp,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->gratuitous_neighbor_adv,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->redirect,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->mld,
+ &count);
+
+ if (iface->flow_label)
+ count++;
+
+ if (iface->traffic_class)
+ count++;
+
+ if (iface->hop_limit)
+ count++;
+
+ if (iface->nd_reachable_tmo)
+ count++;
+
+ if (iface->nd_rexmit_time)
+ count++;
+
+ if (iface->nd_stale_tmo)
+ count++;
+
+ if (iface->duplicate_addr_detect_cnt)
+ count++;
+
+ if (iface->router_adv_link_mtu)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_header_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_immediate_data,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_initial_r2t,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_seq_inorder,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_pdu_inorder,
+ &count);
+
+ if (iface->def_erl)
+ count++;
+
+ if (iface->def_max_receive_data_len)
+ count++;
+
+ if (iface->def_first_burst_len)
+ count++;
+
+ if (iface->def_max_out_r2t)
+ count++;
+
+ if (iface->def_max_burst_len)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_chap_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_bidi_chap,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_strict_login_compliance,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_logout,
+ &count);
}
} else
/* IPv6 is disabled, iface state */
@@ -1575,6 +1921,43 @@ free:
} \
}

+/* write string parameter value */
+static int iface_fill_str_param_val(struct iovec *iov, uint32_t iface_num,
+ uint8_t iface_type, uint16_t param,
+ uint32_t param_len, char *param_val)
+{
+ int len;
+ struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
+
+ if (!param_val[0])
+ return 1;
+
+ len = sizeof(struct iscsi_iface_param_info) + param_len;
+ iov->iov_base = iscsi_nla_alloc(param, len);
+ if (!(iov->iov_base))
+ return 1;
+
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
+ net_param->iface_num = iface_num;
+ net_param->len = param_len;
+ net_param->param = param;
+ net_param->iface_type = iface_type;
+ net_param->param_type = ISCSI_NET_PARAM;
+ memcpy(net_param->value, param_val, param_len);
+ return 0;
+}
+
+#define IFACE_SET_NET_PARAM_STRVAL(iov, inum, itype, param, plen, \
+ ival, gcnt, lcnt) \
+ if (!iface_fill_str_param_val(iov, inum, itype, param, plen, \
+ ival)) { \
+ (*gcnt)++; \
+ (*lcnt)++; \
+ }
+
struct iface_net_config {
struct iface_rec *primary;
struct iovec *iovs;
@@ -1689,136 +2072,787 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
iface->port,
&net_config->count,
&count);
- }
- } else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
- if (!strcmp(iface->state, "disable")) {
+
IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_IFACE_ENABLE,
- iface->state,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DELAYED_ACK_EN,
+ iface->delayed_ack,
&net_config->count,
&count);
- return 0;
- }

- /* For IPv6 Address */
- if (strstr(iface->ipv6_autocfg, "nd") ||
- strstr(iface->ipv6_autocfg, "dhcpv6")) {
- if (!iface_fill_net_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- } else if (strstr(iface->ipaddress, ":")) {
- if (!iface_fill_net_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- /* User provided IPv6 Address */
- IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
- iface->iface_num,
- ISCSI_NET_PARAM_IPV6_ADDR,
- iface->ipaddress,
- &net_config->count,
- &count);
- }
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_ISNS_EN,
+ iface->isns,
+ &net_config->count,
+ &count);

- /* For LinkLocal Address */
- if (strstr(iface->linklocal_autocfg, "auto")) {
- if (!iface_fill_linklocal_autocfg(
- &iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- } else if (strstr(iface->ipv6_linklocal, ":")) {
- if (!iface_fill_linklocal_autocfg(
- &iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- /* User provided Link Local Address */
- IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ IFACE_SET_NET_PARAM_IPV4_ADDR(&iov[net_config->count],
iface->iface_num,
- ISCSI_NET_PARAM_IPV6_LINKLOCAL,
- iface->ipv6_linklocal,
+ ISCSI_NET_PARAM_ISNS_ADDR,
+ iface->isns_ipaddress,
&net_config->count,
&count);
- }

- /* For Router Address */
- if (strstr(iface->router_autocfg, "auto")) {
- if (!iface_fill_router_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- } else if (strstr(iface->ipv6_router, ":")) {
- if (!iface_fill_router_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- /* User provided Router Address */
- IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
- iface->iface_num,
- ISCSI_NET_PARAM_IPV6_ROUTER,
- iface->ipv6_router,
- &net_config->count,
- &count);
- }
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_ISNS_PORT,
+ 2,
+ iface->isns_port,
+ &net_config->count,
+ &count);

- /*
- * If IPv6 configuration in iface file is valid,
- * fill state and other parameters
- */
- if (count) {
IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_IFACE_ENABLE,
- iface->state,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_NAGLE_EN,
+ iface->nagle,
&net_config->count,
&count);

IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_VLAN_ENABLED,
- iface->vlan_state,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE_EN,
+ iface->tcp_win_scale_state,
&net_config->count,
&count);

- if (strcmp(iface->vlan_state, "disable") &&
- iface->vlan_id) {
- if (!iface_fill_vlan_id(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
- }
-
IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_MTU,
- 2,
- iface->mtu,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE,
+ 1,
+ iface->tcp_win_scale,
&net_config->count,
&count);

IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_PORT,
- 2,
- iface->port,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_TIMER_SCALE,
+ 1,
+ iface->tcp_timer_scale,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
+ iface->tcp_timestamp,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
+ iface->dhcp_dns,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
+ iface->dhcp_slp_da,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_ISNS_INFO_EN,
+ iface->dhcp_isns_info,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_TOS_EN,
+ iface->tos_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_TOS,
+ 1,
+ iface->tos,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
+ iface->gratuitous_arp,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
+ iface->dhcp_alt_client_id_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_STRVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
+ strlen(iface->dhcp_alt_client_id),
+ iface->dhcp_alt_client_id,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
+ iface->dhcp_req_vendor_id_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
+ iface->dhcp_vendor_id_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_STRVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
+ strlen(iface->dhcp_vendor_id),
+ iface->dhcp_vendor_id,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
+ iface->dhcp_learn_iqn,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_FRAGMENT_EN,
+ iface->fragmentation,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
+ iface->incoming_forwarding,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_REDIRECT_EN,
+ iface->redirect,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_TTL,
+ 1,
+ iface->ttl,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_TMF_TMO,
+ 2,
+ iface->def_task_mgmt_timeout,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_HDRDGST_EN,
+ iface->def_header_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DATADGST_EN,
+ iface->def_data_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_IMM_DATA_EN,
+ iface->def_immediate_data,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_INITIAL_R2T_EN,
+ iface->def_initial_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DATASEQ_INORDER_EN,
+ iface->def_data_seq_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_PDU_INORDER_EN,
+ iface->def_data_pdu_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_ERL,
+ 1,
+ iface->def_erl,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_MAX_RECV_DLENGTH,
+ 2,
+ iface->def_max_receive_data_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_FIRST_BURST,
+ 2,
+ iface->def_first_burst_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_MAX_R2T,
+ 2,
+ iface->def_max_out_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_MAX_BURST,
+ 2,
+ iface->def_max_burst_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_CHAP_AUTH_EN,
+ iface->def_chap_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_BIDI_CHAP_EN,
+ iface->def_bidi_chap,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_STRICT_LOGIN_COMP_EN,
+ iface->def_strict_login_compliance,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_AUTH_EN,
+ iface->def_discovery_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_LOGOUT_EN,
+ iface->def_discovery_logout,
+ &net_config->count,
+ &count);
+ }
+ } else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
+ if (!strcmp(iface->state, "disable")) {
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
+ return 0;
+ }
+
+ /* For IPv6 Address */
+ if (strstr(iface->ipv6_autocfg, "nd") ||
+ strstr(iface->ipv6_autocfg, "dhcpv6")) {
+ if (!iface_fill_net_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ } else if (strstr(iface->ipaddress, ":")) {
+ if (!iface_fill_net_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ /* User provided IPv6 Address */
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_ADDR,
+ iface->ipaddress,
+ &net_config->count,
+ &count);
+ }
+
+ /* For LinkLocal Address */
+ if (strstr(iface->linklocal_autocfg, "auto")) {
+ if (!iface_fill_linklocal_autocfg(
+ &iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ } else if (strstr(iface->ipv6_linklocal, ":")) {
+ if (!iface_fill_linklocal_autocfg(
+ &iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ /* User provided Link Local Address */
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL,
+ iface->ipv6_linklocal,
+ &net_config->count,
+ &count);
+ }
+
+ /* For Router Address */
+ if (strstr(iface->router_autocfg, "auto")) {
+ if (!iface_fill_router_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ } else if (strstr(iface->ipv6_router, ":")) {
+ if (!iface_fill_router_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ /* User provided Router Address */
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_ROUTER,
+ iface->ipv6_router,
+ &net_config->count,
+ &count);
+ }
+
+ /*
+ * If IPv6 configuration in iface file is valid,
+ * fill state and other parameters
+ */
+ if (count) {
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_VLAN_ENABLED,
+ iface->vlan_state,
+ &net_config->count,
+ &count);
+
+ if (strcmp(iface->vlan_state, "disable") &&
+ iface->vlan_id) {
+ if (!iface_fill_vlan_id(&iov[net_config->count],
+ iface,
+ ISCSI_IFACE_TYPE_IPV6)) {
+ net_config->count++;
+ count++;
+ }
+ }
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_MTU,
+ 2,
+ iface->mtu,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_PORT,
+ 2,
+ iface->port,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DELAYED_ACK_EN,
+ iface->delayed_ack,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_ISNS_EN,
+ iface->isns,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_ISNS_ADDR,
+ iface->isns_ipaddress,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_ISNS_PORT,
+ 2,
+ iface->isns_port,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_NAGLE_EN,
+ iface->nagle,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE_EN,
+ iface->tcp_win_scale_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE,
+ 1,
+ iface->tcp_win_scale,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_TIMER_SCALE,
+ 1,
+ iface->tcp_timer_scale,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
+ iface->tcp_timestamp,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
+ iface->gratuitous_neighbor_adv,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_REDIRECT_EN,
+ iface->redirect,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_MLD_EN,
+ iface->mld,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
+ 4,
+ iface->flow_label,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
+ 1,
+ iface->traffic_class,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
+ 1,
+ iface->hop_limit,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
+ 4,
+ iface->nd_reachable_tmo,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
+ 4,
+ iface->nd_rexmit_time,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
+ 4,
+ iface->nd_stale_tmo,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_DUP_ADDR_DET_CNT,
+ 1,
+ iface->duplicate_addr_detect_cnt,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
+ 4,
+ iface->router_adv_link_mtu,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_HDRDGST_EN,
+ iface->def_header_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DATADGST_EN,
+ iface->def_data_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_IMM_DATA_EN,
+ iface->def_immediate_data,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_INITIAL_R2T_EN,
+ iface->def_initial_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DATASEQ_INORDER_EN,
+ iface->def_data_seq_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_PDU_INORDER_EN,
+ iface->def_data_pdu_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_ERL,
+ 1,
+ iface->def_erl,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_MAX_RECV_DLENGTH,
+ 2,
+ iface->def_max_receive_data_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_FIRST_BURST,
+ 2,
+ iface->def_first_burst_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_MAX_R2T,
+ 2,
+ iface->def_max_out_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_MAX_BURST,
+ 2,
+ iface->def_max_burst_len,
&net_config->count,
&count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_CHAP_AUTH_EN,
+ iface->def_chap_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_BIDI_CHAP_EN,
+ iface->def_bidi_chap,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_STRICT_LOGIN_COMP_EN,
+ iface->def_strict_login_compliance,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_AUTH_EN,
+ iface->def_discovery_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_LOGOUT_EN,
+ iface->def_discovery_logout,
+ &net_config->count,
+ &count);
}
}
return 0;
--
1.8.2.GIT


Reply all
Reply to author
Forward
0 new messages