[iscsi-initiator-utils/f19: 6/15] additional parameters for network configuration

Chris Leech cleech at fedoraproject.org
Mon Apr 14 18:20:55 UTC 2014


commit a288e4f537c0570d0599bc9ecab44e2a161ffa00
Author: Chris Leech <cleech at redhat.com>
Date:   Mon Feb 17 14:35:35 2014 -0800

    additional parameters for network configuration
    
    Resolves: #948134
    
    Signed-off-by: Chris Leech <cleech at redhat.com>

 ...-Setup-iface-conf-file-with-all-iface-att.patch |   46 +
 ...Remove-numbers-used-for-network-parameter.patch |   65 +
 ...Additional-parameters-for-network-param-s.patch |  122 ++
 ...s-Use-macro-to-set-IPv4-IPv6-IP-addresses.patch |  243 ++++
 ...-Use-single-function-to-enable-disable-ne.patch |  220 +++
 ...-Use-single-function-to-set-integer-netwo.patch |  215 +++
 ...-Ignore-network-parameter-if-not-enabled-.patch |   44 +
 ...-Additional-parameters-for-network-settin.patch | 1445 ++++++++++++++++++++
 ...-iface-params-should-be-updated-for-node_.patch |  119 ++
 ...i-tools-Let-default-type-of-iface-be-ipv4.patch |   33 +
 ...ols-Show-iface-params-based-on-iface-type.patch |  310 +++++
 iscsi-initiator-utils.spec                         |   23 +
 12 files changed, 2885 insertions(+), 0 deletions(-)
---
diff --git a/0042-iscsi-tools-Setup-iface-conf-file-with-all-iface-att.patch b/0042-iscsi-tools-Setup-iface-conf-file-with-all-iface-att.patch
new file mode 100644
index 0000000..7e72808
--- /dev/null
+++ b/0042-iscsi-tools-Setup-iface-conf-file-with-all-iface-att.patch
@@ -0,0 +1,46 @@
+From 0a95bc409c6282b95c48ba39a16e17c3e6e26537 Mon Sep 17 00:00:00 2001
+From: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:17 -0400
+Subject: [PATCH] iscsi tools: Setup iface conf file with all iface attrs
+ exported in sysfs
+
+Currently, iface conf file does not get populated with all the iface
+attrs that are exported in corresponding sysfs entry.
+This patch allows to setup conf file with all iface attrs in sysfs.
+
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/iface.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/usr/iface.c b/usr/iface.c
+index c86892e..8580d1a 100644
+--- a/usr/iface.c
++++ b/usr/iface.c
+@@ -476,11 +476,8 @@ static int iface_setup_binding_from_kern_iface(void *data,
+ 	}
+ 
+ 	memset(&iface, 0, sizeof(struct iface_rec));
+-	strcpy(iface.hwaddress, hinfo->iface.hwaddress);
+-	strcpy(iface.transport_name, hinfo->iface.transport_name);
+-
+ 	if (kern_iface) {
+-		iface.iface_num = kern_iface->iface_num;
++		memcpy(&iface, kern_iface, sizeof(iface));
+ 
+ 		snprintf(iface.name, sizeof(iface.name), "%s.%s.%s.%u",
+ 			 kern_iface->transport_name,
+@@ -492,6 +489,9 @@ static int iface_setup_binding_from_kern_iface(void *data,
+ 			 hinfo->iface.transport_name, hinfo->iface.hwaddress);
+ 	}
+ 
++	strcpy(iface.hwaddress, hinfo->iface.hwaddress);
++	strcpy(iface.transport_name, hinfo->iface.transport_name);
++
+ 	memset(iface_path, 0, sizeof(iface_path));
+ 	snprintf(iface_path, PATH_MAX, "%s/%s", IFACE_CONFIG_DIR,
+ 		 iface.name);
+-- 
+1.8.3.1
+
diff --git a/0043-iscsi_if.h-Remove-numbers-used-for-network-parameter.patch b/0043-iscsi_if.h-Remove-numbers-used-for-network-parameter.patch
new file mode 100644
index 0000000..40cafea
--- /dev/null
+++ b/0043-iscsi_if.h-Remove-numbers-used-for-network-parameter.patch
@@ -0,0 +1,65 @@
+From 026c8d771c1df457cd26e7066b503cadfbbc98df Mon Sep 17 00:00:00 2001
+From: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:18 -0400
+Subject: [PATCH] iscsi_if.h: Remove numbers used for network parameter
+ settings
+
+Signed-off-by: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at 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 0284662..e837dd0 100644
+--- a/include/iscsi_if.h
++++ b/include/iscsi_if.h
+@@ -395,25 +395,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.3.1
+
diff --git a/0044-iscsi_if.h-Additional-parameters-for-network-param-s.patch b/0044-iscsi_if.h-Additional-parameters-for-network-param-s.patch
new file mode 100644
index 0000000..4fea308
--- /dev/null
+++ b/0044-iscsi_if.h-Additional-parameters-for-network-param-s.patch
@@ -0,0 +1,122 @@
+From d1e07af2ed3aa480107213378a54bfc9a6a36c0a Mon Sep 17 00:00:00 2001
+From: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:19 -0400
+Subject: [PATCH] iscsi_if.h: Additional parameters for network param settings
+
+Added support to display and update additional network parameters
+through iscsiadm
+
+Signed-off-by: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ include/iscsi_if.h | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 79 insertions(+)
+
+diff --git a/include/iscsi_if.h b/include/iscsi_if.h
+index e837dd0..e59bcd0 100644
+--- a/include/iscsi_if.h
++++ b/include/iscsi_if.h
+@@ -320,6 +320,7 @@ enum iscsi_param_type {
+ 	ISCSI_NET_PARAM,	/* iscsi_net_param */
+ 	ISCSI_FLASHNODE_PARAM,	/* iscsi_flashnode_param */
+ 	ISCSI_CHAP_PARAM,	/* iscsi_chap_param */
++	ISCSI_IFACE_PARAM,	/* iscsi_iface_param */
+ };
+ 
+ /* structure for minimalist usecase */
+@@ -392,6 +393,10 @@ struct iscsi_path {
+ #define ISCSI_VLAN_DISABLE	0x01
+ #define ISCSI_VLAN_ENABLE	0x02
+ 
++/* iscsi generic enable/disabled setting for various features */
++#define ISCSI_NET_PARAM_DISABLE		0x01
++#define ISCSI_NET_PARAM_ENABLE		0x02
++
+ /* iSCSI network params */
+ enum iscsi_net_param {
+ 	ISCSI_NET_PARAM_IPV4_ADDR		= 1,
+@@ -414,6 +419,80 @@ 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_TCP_NAGLE_DISABLE,
++	ISCSI_NET_PARAM_TCP_WSF_DISABLE,
++	ISCSI_NET_PARAM_TCP_WSF,
++	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_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_DISABLE,
++	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_DETECT_CNT,
++	ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
++	ISCSI_NET_PARAM_REDIRECT_EN,
++};
++
++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,
++};
++
++/* iSCSI specific settings params for iface */
++enum iscsi_iface_param {
++	ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO,
++	ISCSI_IFACE_PARAM_HDRDGST_EN,
++	ISCSI_IFACE_PARAM_DATADGST_EN,
++	ISCSI_IFACE_PARAM_IMM_DATA_EN,
++	ISCSI_IFACE_PARAM_INITIAL_R2T_EN,
++	ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN,
++	ISCSI_IFACE_PARAM_PDU_INORDER_EN,
++	ISCSI_IFACE_PARAM_ERL,
++	ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH,
++	ISCSI_IFACE_PARAM_FIRST_BURST,
++	ISCSI_IFACE_PARAM_MAX_R2T,
++	ISCSI_IFACE_PARAM_MAX_BURST,
++	ISCSI_IFACE_PARAM_CHAP_AUTH_EN,
++	ISCSI_IFACE_PARAM_BIDI_CHAP_EN,
++	ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL,
++	ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN,
++	ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN,
++	ISCSI_IFACE_PARAM_INITIATOR_NAME,
+ };
+ 
+ enum iscsi_conn_state {
+-- 
+1.8.3.1
+
diff --git a/0045-iscsi-tools-Use-macro-to-set-IPv4-IPv6-IP-addresses.patch b/0045-iscsi-tools-Use-macro-to-set-IPv4-IPv6-IP-addresses.patch
new file mode 100644
index 0000000..6ef8896
--- /dev/null
+++ b/0045-iscsi-tools-Use-macro-to-set-IPv4-IPv6-IP-addresses.patch
@@ -0,0 +1,243 @@
+From 466efaad99b0fc0d1181443386b823739a8b483b Mon Sep 17 00:00:00 2001
+From: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:20 -0400
+Subject: [PATCH] iscsi tools: Use macro to set IPv4/IPv6 IP addresses
+
+Signed-off-by: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+---
+ usr/iface.c | 154 +++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 69 insertions(+), 85 deletions(-)
+
+diff --git a/usr/iface.c b/usr/iface.c
+index 8580d1a..19ad5ab 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,19 @@ 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 +1551,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 +1566,16 @@ 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 +1620,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 +1711,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 +1735,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 +1757,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.3.1
+
diff --git a/0046-iscsi-tools-Use-single-function-to-enable-disable-ne.patch b/0046-iscsi-tools-Use-single-function-to-enable-disable-ne.patch
new file mode 100644
index 0000000..22334e1
--- /dev/null
+++ b/0046-iscsi-tools-Use-single-function-to-enable-disable-ne.patch
@@ -0,0 +1,220 @@
+From 2220ee4334637946e93dca5c68889b5e3e807515 Mon Sep 17 00:00:00 2001
+From: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:21 -0400
+Subject: [PATCH] iscsi tools: Use single function to enable/disable network
+ parameters
+
+Signed-off-by: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/iface.c | 148 ++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 74 insertions(+), 74 deletions(-)
+
+diff --git a/usr/iface.c b/usr/iface.c
+index 19ad5ab..292c804 100644
+--- a/usr/iface.c
++++ b/usr/iface.c
+@@ -1311,60 +1311,45 @@ 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_param_state(struct iovec *iov, uint32_t iface_num,
++				  uint8_t iface_type, uint16_t param,
++				  uint8_t param_type, 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) + 1;
+-	iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_VLAN_ENABLED, 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_VLAN_ENABLED;
+-	net_param->iface_type = iface_type;
+-	net_param->iface_num = iface->iface_num;
+-	net_param->param_type = ISCSI_NET_PARAM;
++	net_param->iface_num = iface_num;
+ 	net_param->len = 1;
+-	if (strcmp(iface->vlan_state, "disable") && iface->vlan_id)
+-		net_param->value[0] = ISCSI_VLAN_ENABLE;
++	net_param->param = param;
++	net_param->iface_type = iface_type;
++	net_param->param_type = param_type;
++	if (strcmp(param_val, "disable"))
++		net_param->value[0] = ISCSI_NET_PARAM_ENABLE;
+ 	else /* Assume disabled */
+-		net_param->value[0] = ISCSI_VLAN_DISABLE;
++		net_param->value[0] = ISCSI_NET_PARAM_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);
+-	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_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;
+-	return 0;
++#define IFACE_SET_PARAM_STATE(iov, inum, itype, param, ptype, ival,	\
++			      gcnt, lcnt) {				\
++	if (!iface_fill_param_state(iov, inum, itype, param, ptype,	\
++				    ival)) {				\
++		(*gcnt)++;						\
++		(*lcnt)++;						\
++	}								\
+ }
+ 
+ /* IPv4 Bootproto: DHCP/static */
+@@ -1598,13 +1583,14 @@ 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_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV4,
++					      ISCSI_NET_PARAM_IFACE_ENABLE,
++					      ISCSI_NET_PARAM,
++					      iface->state,
++					      &net_config->count,
++					      &count);
+ 			return 0;
+ 		}
+ 
+@@ -1648,18 +1634,24 @@ 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_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV4,
++					      ISCSI_NET_PARAM_IFACE_ENABLE,
++					      ISCSI_NET_PARAM,
++					      iface->state,
++					      &net_config->count,
++					      &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV4,
++					      ISCSI_NET_PARAM_VLAN_ENABLED,
++					      ISCSI_NET_PARAM,
++					      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],
+@@ -1687,12 +1679,14 @@ 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_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV6,
++					      ISCSI_NET_PARAM_IFACE_ENABLE,
++					      ISCSI_NET_PARAM,
++					      iface->state,
++					      &net_config->count,
++					      &count);
+ 			return 0;
+ 		}
+ 
+@@ -1770,18 +1764,24 @@ 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_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV6,
++					      ISCSI_NET_PARAM_IFACE_ENABLE,
++					      ISCSI_NET_PARAM,
++					      iface->state,
++					      &net_config->count,
++					      &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV6,
++					      ISCSI_NET_PARAM_VLAN_ENABLED,
++					      ISCSI_NET_PARAM,
++					      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.3.1
+
diff --git a/0047-iscsi-tools-Use-single-function-to-set-integer-netwo.patch b/0047-iscsi-tools-Use-single-function-to-set-integer-netwo.patch
new file mode 100644
index 0000000..b8f451c
--- /dev/null
+++ b/0047-iscsi-tools-Use-single-function-to-set-integer-netwo.patch
@@ -0,0 +1,215 @@
+From d8991c9e1de373a1c55ad2f8ca07bb3fbda1aa5c Mon Sep 17 00:00:00 2001
+From: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:22 -0400
+Subject: [PATCH] iscsi tools: Use single function to set integer network
+ parameters
+
+Signed-off-by: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/iface.c | 162 +++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 90 insertions(+), 72 deletions(-)
+
+diff --git a/usr/iface.c b/usr/iface.c
+index 292c804..6454f75 100644
+--- a/usr/iface.c
++++ b/usr/iface.c
+@@ -1223,58 +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,
++				    uint8_t param_type, 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);
++	net_param->param_type = param_type;
++	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_PARAM_INTVAL(iov, inum, itype, param, ptype, plen,	\
++			       ival, gcnt, lcnt) {			\
++	if (ival && !iface_fill_int_param_val(iov, inum, itype, param,	\
++					      ptype, plen, ival)) {	\
++		(*gcnt)++;						\
++		(*lcnt)++;						\
++	}								\
+ }
+ 
+ /* IPv4/IPv6 VLAN_ID: decimal value <= 4095 */
+@@ -1660,22 +1670,26 @@ 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_PARAM_INTVAL(&iov[net_config->count],
++					       iface->iface_num,
++					       ISCSI_IFACE_TYPE_IPV4,
++					       ISCSI_NET_PARAM_MTU,
++					       ISCSI_NET_PARAM,
++					       2,
++					       iface->mtu,
++					       &net_config->count,
++					       &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					       iface->iface_num,
++					       ISCSI_IFACE_TYPE_IPV4,
++					       ISCSI_NET_PARAM_PORT,
++					       ISCSI_NET_PARAM,
++					       2,
++					       iface->port,
++					       &net_config->count,
++					       &count);
+ 		}
+ 	} else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
+ 		if (!strcmp(iface->state, "disable")) {
+@@ -1791,22 +1805,26 @@ 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_PARAM_INTVAL(&iov[net_config->count],
++					       iface->iface_num,
++					       ISCSI_IFACE_TYPE_IPV6,
++					       ISCSI_NET_PARAM_MTU,
++					       ISCSI_NET_PARAM,
++					       2,
++					       iface->mtu,
++					       &net_config->count,
++					       &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					       iface->iface_num,
++					       ISCSI_IFACE_TYPE_IPV6,
++					       ISCSI_NET_PARAM_PORT,
++					       ISCSI_NET_PARAM,
++					       2,
++					       iface->port,
++					       &net_config->count,
++					       &count);
+ 		}
+ 	}
+ 	return 0;
+-- 
+1.8.3.1
+
diff --git a/0048-iscsi-tools-Ignore-network-parameter-if-not-enabled-.patch b/0048-iscsi-tools-Ignore-network-parameter-if-not-enabled-.patch
new file mode 100644
index 0000000..0512f6d
--- /dev/null
+++ b/0048-iscsi-tools-Ignore-network-parameter-if-not-enabled-.patch
@@ -0,0 +1,44 @@
+From da404f2137daa4e5cf06d69e4d7b6a0bff8c13b5 Mon Sep 17 00:00:00 2001
+From: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:23 -0400
+Subject: [PATCH] iscsi tools: Ignore network parameter if not enabled/disabled
+
+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.zunjarrao at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/iface.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/usr/iface.c b/usr/iface.c
+index 6454f75..55b0dd4 100644
+--- a/usr/iface.c
++++ b/usr/iface.c
+@@ -1346,11 +1346,18 @@ static int iface_fill_param_state(struct iovec *iov, uint32_t iface_num,
+ 	net_param->param = param;
+ 	net_param->iface_type = iface_type;
+ 	net_param->param_type = param_type;
+-	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_PARAM_STATE(iov, inum, itype, param, ptype, ival,	\
+-- 
+1.8.3.1
+
diff --git a/0049-iscsi-tools-Additional-parameters-for-network-settin.patch b/0049-iscsi-tools-Additional-parameters-for-network-settin.patch
new file mode 100644
index 0000000..888d34c
--- /dev/null
+++ b/0049-iscsi-tools-Additional-parameters-for-network-settin.patch
@@ -0,0 +1,1445 @@
+From 66d9f120e26d49329667e4b9f5a84076c4f66a6e Mon Sep 17 00:00:00 2001
+From: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:24 -0400
+Subject: [PATCH] iscsi tools: Additional parameters for network settings
+
+Signed-off-by: Harish Zunjarrao <harish.zunjarrao at qlogic.com>
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/config.h      |  50 +++-
+ usr/idbm.c        |  76 +++++
+ usr/idbm_fields.h |  49 ++++
+ usr/iface.c       | 847 ++++++++++++++++++++++++++++++++++++++++++++++++------
+ usr/iscsi_sysfs.c | 200 +++++++++++++
+ 5 files changed, 1132 insertions(+), 90 deletions(-)
+
+diff --git a/usr/config.h b/usr/config.h
+index d457bdd..fd31a54 100644
+--- a/usr/config.h
++++ b/usr/config.h
+@@ -232,11 +232,59 @@ typedef struct iface_rec {
+ 							   * 1 = enable */
+ 	uint16_t		mtu;
+ 	uint16_t		port;
++	char			delayed_ack[ISCSI_MAX_STR_LEN];
++	char			nagle[ISCSI_MAX_STR_LEN];
++	char			tcp_wsf_state[ISCSI_MAX_STR_LEN];
++	uint8_t			tcp_wsf;
++	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			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;
++	uint8_t			hop_limit;
++	uint32_t		nd_reachable_tmo;
++	uint32_t		nd_rexmit_time;
++	uint32_t		nd_stale_tmo;
++	uint8_t			dup_addr_detect_cnt;
++	uint32_t		router_adv_link_mtu;
++	uint16_t		def_task_mgmt_tmo;
++	char			header_digest[ISCSI_MAX_STR_LEN];
++	char			data_digest[ISCSI_MAX_STR_LEN];
++	char			immediate_data[ISCSI_MAX_STR_LEN];
++	char			initial_r2t[ISCSI_MAX_STR_LEN];
++	char			data_seq_inorder[ISCSI_MAX_STR_LEN];
++	char			data_pdu_inorder[ISCSI_MAX_STR_LEN];
++	uint8_t			erl;
++	uint32_t		max_recv_dlength;
++	uint32_t		first_burst_len;
++	uint16_t		max_out_r2t;
++	uint32_t		max_burst_len;
++	char			chap_auth[ISCSI_MAX_STR_LEN];
++	char			bidi_chap[ISCSI_MAX_STR_LEN];
++	char			strict_login_comp[ISCSI_MAX_STR_LEN];
++	char			discovery_auth[ISCSI_MAX_STR_LEN];
++	char			discovery_logout[ISCSI_MAX_STR_LEN];
+ 	char			port_state[ISCSI_MAX_STR_LEN];
+ 	char			port_speed[ISCSI_MAX_STR_LEN];
+ 	/*
+ 	 * TODO: we may have to make this bigger and interconnect
+-	 * specific for infinniband 
++	 * specific for infiniband
+ 	 */
+ 	char			hwaddress[ISCSI_HWADDRESS_BUF_SIZE];
+ 	char			transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
+diff --git a/usr/idbm.c b/usr/idbm.c
+index 6b6f57c..4428ebe 100644
+--- a/usr/idbm.c
++++ b/usr/idbm.c
+@@ -454,6 +454,82 @@ 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_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_DNS, ri, r, dhcp_dns, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, dhcp_learn_iqn, 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_SLP_DA, ri, r, dhcp_slp_da, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_FRAGMENTATION, ri, r, fragmentation, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_GRAT_ARP, ri, r, gratuitous_arp, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_IN_FORWARD, ri, r, incoming_forwarding, 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_uint8(IFACE_TTL, ri, r, ttl, IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_DUP_ADDR_DETECT_CNT, ri, r, dup_addr_detect_cnt,
++			IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_FLOW_LABEL, ri, r, flow_label, IDBM_SHOW,
++			 num, 1);
++	__recinfo_str(IFACE_GRAT_NEIGHBOR_ADV, ri, r, gratuitous_neighbor_adv,
++		      IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_HOP_LIMIT, ri, r, hop_limit, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_MLD, ri, r, mld, 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_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r, router_adv_link_mtu,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, traffic_class, IDBM_SHOW,
++			num, 1);
++	__recinfo_str(IFACE_DELAYED_ACK, ri, r, delayed_ack, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_TCP_NAGLE, ri, r, nagle, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_TCP_WSF_STATE, ri, r, tcp_wsf_state, IDBM_SHOW,
++		      num, 1);
++	__recinfo_uint8(IFACE_TCP_WSF, ri, r, tcp_wsf, 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_REDIRECT, ri, r, redirect, IDBM_SHOW, num, 1);
++	__recinfo_uint16(IFACE_DEF_TMF_TMO, ri, r, def_task_mgmt_tmo, IDBM_SHOW,
++			 num, 1);
++	__recinfo_str(IFACE_HDRDGST, ri, r, header_digest, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DATADGST, ri, r, data_digest, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_IMM_DATA, ri, r, immediate_data, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_INITIAL_R2T, ri, r, initial_r2t, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DSEQ_INORDER, ri, r, data_seq_inorder, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_DPDU_INORDER, ri, r, data_pdu_inorder, IDBM_SHOW,
++		      num, 1);
++	__recinfo_uint8(IFACE_ERL, ri, r, erl, IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_MAX_RECV_DLEN, ri, r, max_recv_dlength,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_FIRST_BURST, ri, r, first_burst_len, IDBM_SHOW,
++			 num, 1);
++	__recinfo_uint16(IFACE_MAX_R2T, ri, r, max_out_r2t, IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_MAX_BURST, ri, r, max_burst_len, IDBM_SHOW,
++			 num, 1);
++	__recinfo_str(IFACE_CHAP_AUTH, ri, r, chap_auth, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_BIDI_CHAP, ri, r, bidi_chap, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_STRICT_LOGIN_COMP, ri, r, strict_login_comp,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DISCOVERY_AUTH, ri, r, discovery_auth, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_DISCOVERY_LOGOUT, ri, r, discovery_logout,
++		      IDBM_SHOW, num, 1);
+ }
+ 
+ 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..5790a03 100644
+--- a/usr/idbm_fields.h
++++ b/usr/idbm_fields.h
+@@ -89,6 +89,55 @@
+ #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_TCP_NAGLE		"iface.tcp_nagle"
++#define IFACE_TCP_WSF_STATE	"iface.tcp_wsf_state"
++#define IFACE_TCP_WSF		"iface.tcp_wsf"
++#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_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_NEIGHBOR_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_DETECT_CNT	"iface.dup_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_HDRDGST		"iface.header_digest"
++#define IFACE_DATADGST		"iface.data_digest"
++#define IFACE_IMM_DATA		"iface.immediate_data"
++#define IFACE_INITIAL_R2T	"iface.initial_r2t"
++#define IFACE_DSEQ_INORDER	"iface.data_seq_inorder"
++#define IFACE_DPDU_INORDER	"iface.data_pdu_inorder"
++#define IFACE_ERL		"iface.erl"
++#define IFACE_MAX_RECV_DLEN	"iface.max_receive_data_len"
++#define IFACE_FIRST_BURST	"iface.first_burst_len"
++#define IFACE_MAX_R2T		"iface.max_outstanding_r2t"
++#define IFACE_MAX_BURST		"iface.max_burst_len"
++#define IFACE_CHAP_AUTH		"iface.chap_auth"
++#define IFACE_BIDI_CHAP		"iface.bidi_chap"
++#define IFACE_STRICT_LOGIN_COMP	"iface.strict_login_compliance"
++#define IFACE_DISCOVERY_AUTH	"iface.discovery_auth"
++#define IFACE_DISCOVERY_LOGOUT	"iface.discovery_logout"
+ 
+ /* discovery fields */
+ #define DISC_STARTUP		"discovery.startup"
+diff --git a/usr/iface.c b/usr/iface.c
+index 55b0dd4..87ac875 100644
+--- a/usr/iface.c
++++ b/usr/iface.c
+@@ -601,6 +601,105 @@ 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->nagle))
++		strcpy(dst->nagle, src->nagle);
++	if (strlen(src->tcp_wsf_state))
++		strcpy(dst->tcp_wsf_state, src->tcp_wsf_state);
++	if (src->tcp_wsf)
++		dst->tcp_wsf = src->tcp_wsf;
++	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->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->dup_addr_detect_cnt)
++		dst->dup_addr_detect_cnt = src->dup_addr_detect_cnt;
++	if (src->router_adv_link_mtu)
++		dst->router_adv_link_mtu = src->router_adv_link_mtu;
++	if (src->def_task_mgmt_tmo)
++		dst->def_task_mgmt_tmo = src->def_task_mgmt_tmo;
++	if (strlen(src->header_digest))
++		strcpy(dst->header_digest, src->header_digest);
++	if (strlen(src->data_digest))
++		strcpy(dst->data_digest, src->data_digest);
++	if (strlen(src->immediate_data))
++		strcpy(dst->immediate_data, src->immediate_data);
++	if (strlen(src->initial_r2t))
++		strcpy(dst->initial_r2t, src->initial_r2t);
++	if (strlen(src->data_seq_inorder))
++		strcpy(dst->data_seq_inorder, src->data_seq_inorder);
++	if (strlen(src->data_pdu_inorder))
++		strcpy(dst->data_pdu_inorder, src->data_pdu_inorder);
++	if (src->erl)
++		dst->erl = src->erl;
++	if (src->max_recv_dlength)
++		dst->max_recv_dlength = src->max_recv_dlength;
++	if (src->first_burst_len)
++		dst->first_burst_len = src->first_burst_len;
++	if (src->max_out_r2t)
++		dst->max_out_r2t = src->max_out_r2t;
++	if (src->max_burst_len)
++		dst->max_burst_len = src->max_burst_len;
++	if (strlen(src->chap_auth))
++		strcpy(dst->chap_auth, src->chap_auth);
++	if (strlen(src->bidi_chap))
++		strcpy(dst->bidi_chap, src->bidi_chap);
++	if (strlen(src->strict_login_comp))
++		strcpy(dst->strict_login_comp, src->strict_login_comp);
++	if (strlen(src->discovery_auth))
++		strcpy(dst->discovery_auth, src->discovery_auth);
++	if (strlen(src->discovery_logout))
++		strcpy(dst->discovery_logout, src->discovery_logout);
+ 	if (strlen(src->hwaddress))
+ 		strcpy(dst->hwaddress, src->hwaddress);
+ 	if (strlen(src->transport_name))
+@@ -1026,6 +1125,79 @@ 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_common_param_count - Gets common parameters count for given iface
++ * @iface: iface to setup
++ * @count: number of parameters to set
++ */
++static void iface_get_common_param_count(struct iface_rec *iface, int *count)
++{
++	if (strcmp(iface->vlan_state, "disable")) {
++		/* vlan_state enabled */
++		(*count)++;
++
++		if (iface->vlan_id)
++			/* For vlan value */
++			(*count)++;
++	} else {
++		/* vlan_state disabled */
++		(*count)++;
++	}
++
++	if (iface->mtu)
++		(*count)++;
++
++	if (iface->port)
++		(*count)++;
++
++	IFACE_NET_PARAM_EN_CNT(iface->delayed_ack, count);
++	IFACE_NET_PARAM_EN_CNT(iface->nagle, count);
++	IFACE_NET_PARAM_EN_CNT(iface->tcp_wsf_state, count);
++	IFACE_NET_PARAM_EN_CNT(iface->tcp_timestamp, count);
++	IFACE_NET_PARAM_EN_CNT(iface->redirect, count);
++	IFACE_NET_PARAM_EN_CNT(iface->header_digest, count);
++	IFACE_NET_PARAM_EN_CNT(iface->data_digest, count);
++	IFACE_NET_PARAM_EN_CNT(iface->immediate_data, count);
++	IFACE_NET_PARAM_EN_CNT(iface->initial_r2t, count);
++	IFACE_NET_PARAM_EN_CNT(iface->data_seq_inorder, count);
++	IFACE_NET_PARAM_EN_CNT(iface->data_pdu_inorder, count);
++	IFACE_NET_PARAM_EN_CNT(iface->chap_auth, count);
++	IFACE_NET_PARAM_EN_CNT(iface->bidi_chap, count);
++	IFACE_NET_PARAM_EN_CNT(iface->strict_login_comp, count);
++	IFACE_NET_PARAM_EN_CNT(iface->discovery_auth, count);
++	IFACE_NET_PARAM_EN_CNT(iface->discovery_logout, count);
++
++	if (iface->tcp_wsf)
++		(*count)++;
++
++	if (iface->tcp_timer_scale)
++		(*count)++;
++
++	if (iface->def_task_mgmt_tmo)
++		(*count)++;
++
++	if (iface->erl)
++		(*count)++;
++
++	if (iface->max_recv_dlength)
++		(*count)++;
++
++	if (iface->first_burst_len)
++		(*count)++;
++
++	if (iface->max_burst_len)
++		(*count)++;
++
++	if (iface->max_out_r2t)
++		(*count)++;
++}
++
+ /**
+  * __iface_get_param_count - Gets netconfig parameter count for given iface
+  * @data: iface_param_count structure
+@@ -1044,10 +1216,10 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
+ 	if (iptype == ISCSI_IFACE_TYPE_IPV4) {
+ 
+ 		if (strcmp(iface->state, "disable")) {
+-			if (strstr(iface->bootproto, "dhcp"))
++			if (strstr(iface->bootproto, "dhcp")) {
+ 				/* DHCP enabled */
+ 				count++;
+-			else {
++			} else {
+ 				/* DHCP disabled */
+ 				count++;
+ 
+@@ -1062,12 +1234,13 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
+ 					if (strstr(iface->gateway, "."))
+ 						/* User configured Gateway */
+ 						count++;
+-				} else
++				} else {
+ 					/*
+ 					 * IPv4 Address not valid, decrement
+ 					 * count of DHCP
+ 					 */
+ 					count--;
++				}
+ 			}
+ 
+ 			/*
+@@ -1078,37 +1251,68 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
+ 				/* iface state */
+ 				count++;
+ 
+-				if (strcmp(iface->vlan_state, "disable")) {
+-					/* vlan_state enabled */
++				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->tos_state,
++						       &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++;
+ 
+-					if (iface->vlan_id)
+-						/* For vlan value */
+-						count++;
+-				} else
+-					/* vlan_state disabled */
++				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++;
+ 
+-				if (iface->mtu)
++				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);
++
++				if (iface->tos)
+ 					count++;
+ 
+-				if (iface->port)
++				if (iface->ttl)
+ 					count++;
++
++				iface_get_common_param_count(iface, &count);
+ 			}
+-		} else
++		} else {
+ 			/* IPv4 is disabled, iface state */
+ 			count++;
+-
++		}
+ 	} else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
+ 
+ 		if (strcmp(iface->state, "disable")) {
+ 
+ 			/* IPv6 Address */
+ 			if (strstr(iface->ipv6_autocfg, "nd") ||
+-			    strstr(iface->ipv6_autocfg, "dhcpv6"))
++			    strstr(iface->ipv6_autocfg, "dhcpv6")) {
+ 				/* Autocfg enabled */
+ 				count++;
+-			else {
++			} else {
+ 				/* Autocfg disabled */
+ 				count++;
+ 
+@@ -1169,26 +1373,42 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
+ 				/* iface state */
+ 				count++;
+ 
+-				if (strcmp(iface->vlan_state, "disable")) {
+-					/* vlan_state enabled */
++				IFACE_NET_PARAM_EN_CNT(
++						 iface->gratuitous_neighbor_adv,
++						 &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->vlan_id)
+-						/* For vlan value */
+-						count++;
+-				} else
+-					/* vlan_state disabled */
++				if (iface->nd_reachable_tmo)
+ 					count++;
+ 
+-				if (iface->mtu)
++				if (iface->nd_rexmit_time)
+ 					count++;
+ 
+-				if (iface->port)
++				if (iface->nd_stale_tmo)
+ 					count++;
++
++				if (iface->dup_addr_detect_cnt)
++					count++;
++
++				if (iface->router_adv_link_mtu)
++					count++;
++
++				iface_get_common_param_count(iface, &count);
+ 			}
+-		} else
++		} else {
+ 			/* IPv6 is disabled, iface state */
+ 			count++;
++		}
+ 	}
+ 
+ 	iface_params->count += count;
+@@ -1578,6 +1798,44 @@ 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;
+@@ -1597,8 +1855,12 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
+ 	/* start at 2, because 0 is for nlmsghdr and 1 for event */
+ 	iov = net_config->iovs + 2;
+ 
++	if (!iface->port)
++		iface->port = 3260;
++
+ 	iptype = iface_get_iptype(iface);
+-	if (iptype == ISCSI_IFACE_TYPE_IPV4) {
++	switch (iptype) {
++	case ISCSI_IFACE_TYPE_IPV4:
+ 		if (!strcmp(iface->state, "disable")) {
+ 			IFACE_SET_PARAM_STATE(&iov[net_config->count],
+ 					      iface->iface_num,
+@@ -1652,53 +1914,136 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
+ 		 */
+ 		if (count) {
+ 			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					  iface->iface_num,
++					  ISCSI_IFACE_TYPE_IPV4,
++					  ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
++					  ISCSI_NET_PARAM,
++					  iface->dhcp_dns,
++					  &net_config->count,
++					  &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					    iface->iface_num,
++					    ISCSI_IFACE_TYPE_IPV4,
++					    ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
++					    ISCSI_NET_PARAM,
++					    iface->dhcp_slp_da,
++					    &net_config->count,
++					    &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV4,
++					      ISCSI_NET_PARAM_IPV4_TOS_EN,
++					      ISCSI_NET_PARAM,
++					      iface->tos_state,
++					      &net_config->count,
++					      &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
+ 					      iface->iface_num,
+ 					      ISCSI_IFACE_TYPE_IPV4,
+-					      ISCSI_NET_PARAM_IFACE_ENABLE,
++					      ISCSI_NET_PARAM_IPV4_TOS,
+ 					      ISCSI_NET_PARAM,
+-					      iface->state,
++					      1,
++					      iface->tos,
+ 					      &net_config->count,
+ 					      &count);
+ 
+ 			IFACE_SET_PARAM_STATE(&iov[net_config->count],
+ 					      iface->iface_num,
+ 					      ISCSI_IFACE_TYPE_IPV4,
+-					      ISCSI_NET_PARAM_VLAN_ENABLED,
++					      ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
+ 					      ISCSI_NET_PARAM,
+-					      iface->vlan_state,
++					      iface->gratuitous_arp,
+ 					      &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_IPV4)) {
+-					net_config->count++;
+-					count++;
+-				}
+-			}
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				     iface->iface_num,
++				     ISCSI_IFACE_TYPE_IPV4,
++				     ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
++				     ISCSI_NET_PARAM,
++				     iface->dhcp_alt_client_id_state,
++				     &net_config->count,
++				     &count);
+ 
+-			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
+-					       iface->iface_num,
+-					       ISCSI_IFACE_TYPE_IPV4,
+-					       ISCSI_NET_PARAM_MTU,
+-					       ISCSI_NET_PARAM,
+-					       2,
+-					       iface->mtu,
+-					       &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_PARAM_STATE(&iov[net_config->count],
++				     iface->iface_num,
++				     ISCSI_IFACE_TYPE_IPV4,
++				     ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
++				     ISCSI_NET_PARAM,
++				     iface->dhcp_req_vendor_id_state,
++				     &net_config->count,
++				     &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				     iface->iface_num,
++				     ISCSI_IFACE_TYPE_IPV4,
++				     ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
++				     ISCSI_NET_PARAM,
++				     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_PARAM_STATE(&iov[net_config->count],
++					 iface->iface_num,
++					 ISCSI_IFACE_TYPE_IPV4,
++					 ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
++					 ISCSI_NET_PARAM,
++					 iface->dhcp_learn_iqn,
++					 &net_config->count,
++					 &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					  iface->iface_num,
++					  ISCSI_IFACE_TYPE_IPV4,
++					  ISCSI_NET_PARAM_IPV4_FRAGMENT_DISABLE,
++					  ISCSI_NET_PARAM,
++					  iface->fragmentation,
++					  &net_config->count,
++					  &count);
++
++			IFACE_SET_PARAM_STATE(&iov[net_config->count],
++					     iface->iface_num,
++					     ISCSI_IFACE_TYPE_IPV4,
++					     ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
++					     ISCSI_NET_PARAM,
++					     iface->incoming_forwarding,
++					     &net_config->count,
++					     &count);
+ 
+ 			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
+ 					       iface->iface_num,
+ 					       ISCSI_IFACE_TYPE_IPV4,
+-					       ISCSI_NET_PARAM_PORT,
++					       ISCSI_NET_PARAM_IPV4_TTL,
+ 					       ISCSI_NET_PARAM,
+-					       2,
+-					       iface->port,
++					       1,
++					       iface->ttl,
+ 					       &net_config->count,
+ 					       &count);
+ 		}
+-	} else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
++		break;
++
++	case ISCSI_IFACE_TYPE_IPV6:
+ 		if (!strcmp(iface->state, "disable")) {
+ 			IFACE_SET_PARAM_STATE(&iov[net_config->count],
+ 					      iface->iface_num,
+@@ -1786,53 +2131,377 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
+ 		 */
+ 		if (count) {
+ 			IFACE_SET_PARAM_STATE(&iov[net_config->count],
+-					      iface->iface_num,
+-					      ISCSI_IFACE_TYPE_IPV6,
+-					      ISCSI_NET_PARAM_IFACE_ENABLE,
+-					      ISCSI_NET_PARAM,
+-					      iface->state,
+-					      &net_config->count,
+-					      &count);
++				      iface->iface_num,
++				      ISCSI_IFACE_TYPE_IPV6,
++				      ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
++				      ISCSI_NET_PARAM,
++				      iface->gratuitous_neighbor_adv,
++				      &net_config->count,
++				      &count);
+ 
+ 			IFACE_SET_PARAM_STATE(&iov[net_config->count],
+ 					      iface->iface_num,
+ 					      ISCSI_IFACE_TYPE_IPV6,
+-					      ISCSI_NET_PARAM_VLAN_ENABLED,
++					      ISCSI_NET_PARAM_IPV6_MLD_EN,
+ 					      ISCSI_NET_PARAM,
+-					      iface->vlan_state,
++					      iface->mld,
+ 					      &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_PARAM_INTVAL(&iov[net_config->count],
++					       iface->iface_num,
++					       ISCSI_IFACE_TYPE_IPV6,
++					       ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
++					       ISCSI_NET_PARAM,
++					       4,
++					       iface->flow_label,
++					       &net_config->count,
++					       &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					     iface->iface_num,
++					     ISCSI_IFACE_TYPE_IPV6,
++					     ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
++					     ISCSI_NET_PARAM,
++					     1,
++					     iface->traffic_class,
++					     &net_config->count,
++					     &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					       iface->iface_num,
++					       ISCSI_IFACE_TYPE_IPV6,
++					       ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
++					       ISCSI_NET_PARAM,
++					       1,
++					       iface->hop_limit,
++					       &net_config->count,
++					       &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					  iface->iface_num,
++					  ISCSI_IFACE_TYPE_IPV6,
++					  ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
++					  ISCSI_NET_PARAM,
++					  4,
++					  iface->nd_reachable_tmo,
++					  &net_config->count,
++					  &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					    iface->iface_num,
++					    ISCSI_IFACE_TYPE_IPV6,
++					    ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
++					    ISCSI_NET_PARAM,
++					    4,
++					    iface->nd_rexmit_time,
++					    &net_config->count,
++					    &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					      iface->iface_num,
++					      ISCSI_IFACE_TYPE_IPV6,
++					      ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
++					      ISCSI_NET_PARAM,
++					      4,
++					      iface->nd_stale_tmo,
++					      &net_config->count,
++					      &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       ISCSI_IFACE_TYPE_IPV6,
++				       ISCSI_NET_PARAM_IPV6_DUP_ADDR_DETECT_CNT,
++				       ISCSI_NET_PARAM,
++				       1,
++				       iface->dup_addr_detect_cnt,
++				       &net_config->count,
++				       &count);
++
++			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++					  iface->iface_num,
++					  ISCSI_IFACE_TYPE_IPV6,
++					  ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
++					  ISCSI_NET_PARAM,
++					  4,
++					  iface->router_adv_link_mtu,
++					  &net_config->count,
++					  &count);
++		}
++		break;
++	}
++
++	/* Fill parameters common to IPv4 and IPv6 ifaces */
++	if (count) {
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_IFACE_ENABLE,
++				      ISCSI_NET_PARAM,
++				      iface->state,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_VLAN_ENABLED,
++				      ISCSI_NET_PARAM,
++				      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,
++						iptype)) {
++				net_config->count++;
++				count++;
+ 			}
+-
+-			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
+-					       iface->iface_num,
+-					       ISCSI_IFACE_TYPE_IPV6,
+-					       ISCSI_NET_PARAM_MTU,
+-					       ISCSI_NET_PARAM,
+-					       2,
+-					       iface->mtu,
+-					       &net_config->count,
+-					       &count);
+-
+-			IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
+-					       iface->iface_num,
+-					       ISCSI_IFACE_TYPE_IPV6,
+-					       ISCSI_NET_PARAM_PORT,
+-					       ISCSI_NET_PARAM,
+-					       2,
+-					       iface->port,
+-					       &net_config->count,
+-					       &count);
+ 		}
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_NET_PARAM_MTU,
++				       ISCSI_NET_PARAM,
++				       2,
++				       iface->mtu,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_NET_PARAM_PORT,
++				       ISCSI_NET_PARAM,
++				       2,
++				       iface->port,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_DELAYED_ACK_EN,
++				      ISCSI_NET_PARAM,
++				      iface->delayed_ack,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_TCP_NAGLE_DISABLE,
++				      ISCSI_NET_PARAM,
++				      iface->nagle,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_TCP_WSF_DISABLE,
++				      ISCSI_NET_PARAM,
++				      iface->tcp_wsf_state,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_NET_PARAM_TCP_WSF,
++				       ISCSI_NET_PARAM,
++				       1,
++				       iface->tcp_wsf,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_NET_PARAM_TCP_TIMER_SCALE,
++				       ISCSI_NET_PARAM,
++				       1,
++				       iface->tcp_timer_scale,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
++				      ISCSI_NET_PARAM,
++				      iface->tcp_timestamp,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_NET_PARAM_REDIRECT_EN,
++				      ISCSI_NET_PARAM,
++				      iface->redirect,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				     iface->iface_num,
++				     iptype,
++				     ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO,
++				     ISCSI_IFACE_PARAM,
++				     2,
++				     iface->def_task_mgmt_tmo,
++				     &net_config->count,
++				     &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_HDRDGST_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->header_digest,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_DATADGST_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->data_digest,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_IMM_DATA_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->immediate_data,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_INITIAL_R2T_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->initial_r2t,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->data_seq_inorder,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_PDU_INORDER_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->data_pdu_inorder,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_IFACE_PARAM_ERL,
++				       ISCSI_IFACE_PARAM,
++				       1,
++				       iface->erl,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH,
++				       ISCSI_IFACE_PARAM,
++				       4,
++				       iface->max_recv_dlength,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_IFACE_PARAM_FIRST_BURST,
++				       ISCSI_IFACE_PARAM,
++				       4,
++				       iface->first_burst_len,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_IFACE_PARAM_MAX_R2T,
++				       ISCSI_IFACE_PARAM,
++				       2,
++				       iface->max_out_r2t,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_INTVAL(&iov[net_config->count],
++				       iface->iface_num,
++				       iptype,
++				       ISCSI_IFACE_PARAM_MAX_BURST,
++				       ISCSI_IFACE_PARAM,
++				       4,
++				       iface->max_burst_len,
++				       &net_config->count,
++				       &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_CHAP_AUTH_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->chap_auth,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_BIDI_CHAP_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->bidi_chap,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->strict_login_comp,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL,
++				      ISCSI_IFACE_PARAM,
++				      iface->discovery_auth,
++				      &net_config->count,
++				      &count);
++
++		IFACE_SET_PARAM_STATE(&iov[net_config->count],
++				      iface->iface_num,
++				      iptype,
++				      ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN,
++				      ISCSI_IFACE_PARAM,
++				      iface->discovery_logout,
++				      &net_config->count,
++				      &count);
+ 	}
+ 	return 0;
+ }
+diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c
+index 04c3673..c916ed8 100644
+--- a/usr/iscsi_sysfs.c
++++ b/usr/iscsi_sysfs.c
+@@ -856,6 +856,71 @@ static int iscsi_sysfs_read_iface(struct iface_rec *iface, int host_no,
+ 
+ 		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "subnet",
+ 			      iface->subnet_mask, sizeof(iface->subnet_mask));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_alt_client_id_en",
++			      iface->dhcp_alt_client_id_state,
++			      sizeof(iface->dhcp_alt_client_id_state));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_alt_client_id",
++			      iface->dhcp_alt_client_id,
++			      sizeof(iface->dhcp_alt_client_id));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_dns_address_en",
++			      iface->dhcp_dns, sizeof(iface->dhcp_dns));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_learn_iqn_en",
++			      iface->dhcp_learn_iqn,
++			      sizeof(iface->dhcp_learn_iqn));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_req_vendor_id_en",
++			      iface->dhcp_req_vendor_id_state,
++			      sizeof(iface->dhcp_req_vendor_id_state));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_use_vendor_id_en",
++			      iface->dhcp_vendor_id_state,
++			      sizeof(iface->dhcp_vendor_id_state));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_vendor_id",
++			      iface->dhcp_vendor_id,
++			      sizeof(iface->dhcp_vendor_id));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "dhcp_slp_da_info_en",
++			      iface->dhcp_slp_da, sizeof(iface->dhcp_slp_da));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "fragment_disable",
++			      iface->fragmentation,
++			      sizeof(iface->fragmentation));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "grat_arp_en",
++			      iface->gratuitous_arp,
++			      sizeof(iface->gratuitous_arp));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "incoming_forwarding_en",
++			      iface->incoming_forwarding,
++			      sizeof(iface->incoming_forwarding));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "tos_en",
++			      iface->tos_state, sizeof(iface->tos_state));
++
++		if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				    "tos", &iface->tos))
++			iface->tos = 0;
++
++		if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				    "ttl", &iface->ttl))
++			iface->ttl = 0;
+ 	} else {
+ 		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
+ 			      "ipaddr_autocfg",
+@@ -872,6 +937,53 @@ static int iscsi_sysfs_read_iface(struct iface_rec *iface, int host_no,
+ 		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "router_addr",
+ 			      iface->ipv6_router,
+ 			      sizeof(iface->ipv6_router));
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "router_state",
++			      iface->router_autocfg,
++			      sizeof(iface->router_autocfg));
++
++		if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				    "dup_addr_detect_cnt",
++				    &iface->dup_addr_detect_cnt))
++			iface->dup_addr_detect_cnt = 0;
++
++		if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				   "flow_label", &iface->flow_label))
++			iface->flow_label = 0;
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			      "grat_neighbor_adv_en",
++			      iface->gratuitous_neighbor_adv,
++			      sizeof(iface->gratuitous_neighbor_adv));
++
++		if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				    "hop_limit", &iface->hop_limit))
++			iface->hop_limit = 0;
++
++		sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "mld_en",
++			      iface->mld, sizeof(iface->mld));
++
++		if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				   "nd_reachable_tmo",
++				   &iface->nd_reachable_tmo))
++			iface->nd_reachable_tmo = 0;
++
++		if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				   "nd_rexmit_time", &iface->nd_rexmit_time))
++			iface->nd_rexmit_time = 0;
++
++		if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				   "nd_stale_tmo", &iface->nd_stale_tmo))
++			iface->nd_stale_tmo = 0;
++
++		if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				   "router_adv_link_mtu",
++				   &iface->router_adv_link_mtu))
++			iface->router_adv_link_mtu = 0;
++
++		if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++				   "traffic_class", &iface->traffic_class))
++			iface->traffic_class = 0;
+ 	}
+ 
+ 	if (sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS, "port",
+@@ -888,6 +1000,94 @@ static int iscsi_sysfs_read_iface(struct iface_rec *iface, int host_no,
+ 			    &iface->vlan_priority))
+ 		iface->vlan_priority = UINT8_MAX;
+ 
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "vlan_enabled",
++		      iface->vlan_state, sizeof(iface->vlan_state));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "enabled",
++		      iface->state, sizeof(iface->state));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "delayed_ack_en",
++		      iface->delayed_ack, sizeof(iface->delayed_ack));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "tcp_nagle_disable",
++		      iface->nagle, sizeof(iface->nagle));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "tcp_wsf_disable",
++		      iface->tcp_wsf_state, sizeof(iface->tcp_wsf_state));
++
++	if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS, "tcp_wsf",
++			    &iface->tcp_wsf))
++		iface->tcp_wsf = 0;
++
++	if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			    "tcp_timer_scale", &iface->tcp_timer_scale))
++		iface->tcp_timer_scale = 0;
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "tcp_timestamp_en",
++		      iface->tcp_timestamp, sizeof(iface->tcp_timestamp));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "redirect_en",
++		      iface->redirect, sizeof(iface->redirect));
++
++	if (sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			     "def_taskmgmt_tmo", &iface->def_task_mgmt_tmo))
++		iface->def_task_mgmt_tmo = 0;
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "header_digest",
++		      iface->header_digest, sizeof(iface->header_digest));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "data_digest",
++		      iface->data_digest, sizeof(iface->data_digest));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "immediate_data",
++		      iface->immediate_data, sizeof(iface->immediate_data));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "initial_r2t",
++		      iface->initial_r2t, sizeof(iface->initial_r2t));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "data_seq_in_order",
++		      iface->data_seq_inorder, sizeof(iface->data_seq_inorder));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "data_pdu_in_order",
++		      iface->data_pdu_inorder, sizeof(iface->data_pdu_inorder));
++
++	if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS, "erl",
++			    &iface->erl))
++		iface->erl = 0;
++
++	if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			   "max_recv_dlength", &iface->max_recv_dlength))
++		iface->max_recv_dlength = 0;
++
++	if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			   "first_burst_len", &iface->first_burst_len))
++		iface->first_burst_len = 0;
++
++	if (sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			     "max_outstanding_r2t", &iface->max_out_r2t))
++		iface->max_out_r2t = 0;
++
++	if (sysfs_get_uint(iface_kern_id, ISCSI_IFACE_SUBSYS,
++			   "max_burst_len", &iface->max_burst_len))
++		iface->max_burst_len = 0;
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "chap_auth",
++		      iface->chap_auth, sizeof(iface->chap_auth));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "bidi_chap",
++		      iface->bidi_chap, sizeof(iface->bidi_chap));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "strict_login_comp_en",
++		      iface->strict_login_comp,
++		      sizeof(iface->strict_login_comp));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
++		      "discovery_auth_optional",
++		      iface->discovery_auth, sizeof(iface->discovery_auth));
++
++	sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "discovery_logout",
++		      iface->discovery_logout, sizeof(iface->discovery_logout));
++
+ 	if (sscanf(iface_kern_id, "ipv%d-iface-%u-%u", &iface_type,
+ 		   &tmp_host_no, &iface_num) == 3)
+ 		iface->iface_num = iface_num;
+-- 
+1.8.3.1
+
diff --git a/0050-iscsi-tools-iface-params-should-be-updated-for-node_.patch b/0050-iscsi-tools-iface-params-should-be-updated-for-node_.patch
new file mode 100644
index 0000000..28e212f
--- /dev/null
+++ b/0050-iscsi-tools-iface-params-should-be-updated-for-node_.patch
@@ -0,0 +1,119 @@
+From 9260457c1df5f519a63744114cbdf7e50cd75ed7 Mon Sep 17 00:00:00 2001
+From: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:25 -0400
+Subject: [PATCH] iscsi tools: iface params should be updated for node_rec as
+ well.
+
+While updating iface params, the changes should get applied to the
+node records as well.
+
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/idbm.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 90 insertions(+)
+
+diff --git a/usr/idbm.c b/usr/idbm.c
+index 4428ebe..c6460ad 100644
+--- a/usr/idbm.c
++++ b/usr/idbm.c
+@@ -292,6 +292,96 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri)
+ 	__recinfo_uint16(IFACE_MTU, ri, r, iface.mtu, IDBM_SHOW, num, 1);
+ 	__recinfo_uint16(IFACE_PORT, ri, r, iface.port, IDBM_SHOW, num, 1);
+ 
++	__recinfo_str(IFACE_DHCP_ALT_CID, ri, r, iface.dhcp_alt_client_id_state,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_ALT_CID_STR, ri, r, iface.dhcp_alt_client_id,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_DNS, ri, r, iface.dhcp_dns, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, iface.dhcp_learn_iqn,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_REQ_VID, ri, r, iface.dhcp_req_vendor_id_state,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_VID, ri, r, iface.dhcp_vendor_id_state,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_VID_STR, ri, r, iface.dhcp_vendor_id,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DHCP_SLP_DA, ri, r, iface.dhcp_slp_da, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_FRAGMENTATION, ri, r, iface.fragmentation,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_GRAT_ARP, ri, r, iface.gratuitous_arp, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_IN_FORWARD, ri, r, iface.incoming_forwarding,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_TOS_STATE, ri, r, iface.tos_state, IDBM_SHOW, num,
++		      1);
++	__recinfo_uint8(IFACE_TOS, ri, r, iface.tos, IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_TTL, ri, r, iface.ttl, IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_DUP_ADDR_DETECT_CNT, ri, r,
++			iface.dup_addr_detect_cnt, IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_FLOW_LABEL, ri, r, iface.flow_label, IDBM_SHOW,
++			 num, 1);
++	__recinfo_str(IFACE_GRAT_NEIGHBOR_ADV, ri, r,
++		      iface.gratuitous_neighbor_adv, IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_HOP_LIMIT, ri, r, iface.hop_limit, IDBM_SHOW,
++			num, 1);
++	__recinfo_str(IFACE_MLD, ri, r, iface.mld, IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_ND_REACHABLE_TMO, ri, r, iface.nd_reachable_tmo,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_ND_REXMIT_TIME, ri, r, iface.nd_rexmit_time,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_ND_STALE_TMO, ri, r, iface.nd_stale_tmo,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r,
++			 iface.router_adv_link_mtu, IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, iface.traffic_class,
++			IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DELAYED_ACK, ri, r, iface.delayed_ack, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_TCP_NAGLE, ri, r, iface.nagle, IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_TCP_WSF_STATE, ri, r, iface.tcp_wsf_state,
++		      IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_TCP_WSF, ri, r, iface.tcp_wsf, IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_TCP_TIMER_SCALE, ri, r, iface.tcp_timer_scale,
++			IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_TCP_TIMESTAMP, ri, r, iface.tcp_timestamp,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_REDIRECT, ri, r, iface.redirect, IDBM_SHOW, num, 1);
++	__recinfo_uint16(IFACE_DEF_TMF_TMO, ri, r, iface.def_task_mgmt_tmo,
++			 IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_HDRDGST, ri, r, iface.header_digest, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_DATADGST, ri, r, iface.data_digest, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_IMM_DATA, ri, r, iface.immediate_data, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_INITIAL_R2T, ri, r, iface.initial_r2t, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_DSEQ_INORDER, ri, r, iface.data_seq_inorder,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DPDU_INORDER, ri, r, iface.data_pdu_inorder,
++		      IDBM_SHOW, num, 1);
++	__recinfo_uint8(IFACE_ERL, ri, r, iface.erl, IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_MAX_RECV_DLEN, ri, r, iface.max_recv_dlength,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint32(IFACE_FIRST_BURST, ri, r, iface.first_burst_len,
++			 IDBM_SHOW, num, 1);
++	__recinfo_uint16(IFACE_MAX_R2T, ri, r, iface.max_out_r2t, IDBM_SHOW,
++			 num, 1);
++	__recinfo_uint32(IFACE_MAX_BURST, ri, r, iface.max_burst_len, IDBM_SHOW,
++			 num, 1);
++	__recinfo_str(IFACE_CHAP_AUTH, ri, r, iface.chap_auth, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_BIDI_CHAP, ri, r, iface.bidi_chap, IDBM_SHOW,
++		      num, 1);
++	__recinfo_str(IFACE_STRICT_LOGIN_COMP, ri, r, iface.strict_login_comp,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DISCOVERY_AUTH, ri, r, iface.discovery_auth,
++		      IDBM_SHOW, num, 1);
++	__recinfo_str(IFACE_DISCOVERY_LOGOUT, ri, r, iface.discovery_logout,
++		      IDBM_SHOW, num, 1);
++
++
+ 	__recinfo_str(NODE_DISC_ADDR, ri, r, disc_address, IDBM_SHOW,
+ 		      num, 0);
+ 	__recinfo_int(NODE_DISC_PORT, ri, r, disc_port, IDBM_SHOW,
+-- 
+1.8.3.1
+
diff --git a/0051-iscsi-tools-Let-default-type-of-iface-be-ipv4.patch b/0051-iscsi-tools-Let-default-type-of-iface-be-ipv4.patch
new file mode 100644
index 0000000..7149ea8
--- /dev/null
+++ b/0051-iscsi-tools-Let-default-type-of-iface-be-ipv4.patch
@@ -0,0 +1,33 @@
+From 75ee9d0af6e200b34e84b1e7b37971213b2fd629 Mon Sep 17 00:00:00 2001
+From: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:26 -0400
+Subject: [PATCH] iscsi tools: Let default type of iface be ipv4
+
+While using iface name to determine its type if the name does not
+contain iface type then assume it be to of type ipv4 by default.
+
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/iface.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/usr/iface.c b/usr/iface.c
+index 87ac875..870dba0 100644
+--- a/usr/iface.c
++++ b/usr/iface.c
+@@ -450,8 +450,10 @@ int iface_get_iptype(struct iface_rec *iface)
+ 		/* try to figure out by name */
+ 		if (strstr(iface->name, "ipv4"))
+ 			return ISCSI_IFACE_TYPE_IPV4;
+-		else
++		else if (strstr(iface->name, "ipv6"))
+ 			return ISCSI_IFACE_TYPE_IPV6;
++		else	/* assume ipv4 by default */
++			return ISCSI_IFACE_TYPE_IPV4;
+ 	} else {
+ 		if (strcmp(iface->bootproto, "dhcp") &&
+ 		    !strstr(iface->ipaddress, "."))
+-- 
+1.8.3.1
+
diff --git a/0052-iscsi-tools-Show-iface-params-based-on-iface-type.patch b/0052-iscsi-tools-Show-iface-params-based-on-iface-type.patch
new file mode 100644
index 0000000..2a1da56
--- /dev/null
+++ b/0052-iscsi-tools-Show-iface-params-based-on-iface-type.patch
@@ -0,0 +1,310 @@
+From 4a5e9e29d7516e34e35a15c7342afbc3a1c8c176 Mon Sep 17 00:00:00 2001
+From: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Date: Fri, 18 Oct 2013 09:29:27 -0400
+Subject: [PATCH] iscsi tools: Show iface params based on iface type
+
+Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi at qlogic.com>
+Signed-off-by: Vikas Chaudhary <vikas.chaudhary at qlogic.com>
+---
+ usr/idbm.c | 250 ++++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 138 insertions(+), 112 deletions(-)
+
+diff --git a/usr/idbm.c b/usr/idbm.c
+index c6460ad..1ade099 100644
+--- a/usr/idbm.c
++++ b/usr/idbm.c
+@@ -237,6 +237,9 @@ void
+ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri)
+ {
+ 	int num = 0, i;
++	int iface_type;
++
++	iface_type = iface_get_iptype(&r->iface);
+ 
+ 	__recinfo_str(NODE_NAME, ri, r, name, IDBM_SHOW, num, 0);
+ 	__recinfo_int(NODE_TPGT, ri, r, tpgt, IDBM_SHOW, num, 0);
+@@ -266,21 +269,6 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri)
+ 	__recinfo_str(IFACE_TRANSPORTNAME, ri, r, iface.transport_name,
+ 		      IDBM_SHOW, num, 1);
+ 	__recinfo_str(IFACE_INAME, ri, r, iface.iname, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_BOOT_PROTO, ri, r, iface.bootproto, IDBM_SHOW,
+-		      num, 1);
+-	__recinfo_str(IFACE_SUBNET_MASK, ri, r, iface.subnet_mask,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_GATEWAY, ri, r, iface.gateway, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_IPV6_AUTOCFG, ri, r, iface.ipv6_autocfg,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_LINKLOCAL_AUTOCFG, ri, r, iface.linklocal_autocfg,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_ROUTER_AUTOCFG, ri, r, iface.router_autocfg,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_LINKLOCAL, ri, r, iface.ipv6_linklocal,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_ROUTER, ri, r, iface.ipv6_router, IDBM_SHOW, num,
+-		      1);
+ 	__recinfo_str(IFACE_STATE, ri, r, iface.state, IDBM_SHOW, num, 1);
+ 	__recinfo_uint16(IFACE_VLAN_ID, ri, r, iface.vlan_id, IDBM_SHOW, num,
+ 			 1);
+@@ -292,50 +280,73 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri)
+ 	__recinfo_uint16(IFACE_MTU, ri, r, iface.mtu, IDBM_SHOW, num, 1);
+ 	__recinfo_uint16(IFACE_PORT, ri, r, iface.port, IDBM_SHOW, num, 1);
+ 
+-	__recinfo_str(IFACE_DHCP_ALT_CID, ri, r, iface.dhcp_alt_client_id_state,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_ALT_CID_STR, ri, r, iface.dhcp_alt_client_id,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_DNS, ri, r, iface.dhcp_dns, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, iface.dhcp_learn_iqn,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_REQ_VID, ri, r, iface.dhcp_req_vendor_id_state,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_VID, ri, r, iface.dhcp_vendor_id_state,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_VID_STR, ri, r, iface.dhcp_vendor_id,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_SLP_DA, ri, r, iface.dhcp_slp_da, IDBM_SHOW,
+-		      num, 1);
+-	__recinfo_str(IFACE_FRAGMENTATION, ri, r, iface.fragmentation,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_GRAT_ARP, ri, r, iface.gratuitous_arp, IDBM_SHOW,
+-		      num, 1);
+-	__recinfo_str(IFACE_IN_FORWARD, ri, r, iface.incoming_forwarding,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_TOS_STATE, ri, r, iface.tos_state, IDBM_SHOW, num,
+-		      1);
+-	__recinfo_uint8(IFACE_TOS, ri, r, iface.tos, IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_TTL, ri, r, iface.ttl, IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_DUP_ADDR_DETECT_CNT, ri, r,
+-			iface.dup_addr_detect_cnt, IDBM_SHOW, num, 1);
+-	__recinfo_uint32(IFACE_FLOW_LABEL, ri, r, iface.flow_label, IDBM_SHOW,
+-			 num, 1);
+-	__recinfo_str(IFACE_GRAT_NEIGHBOR_ADV, ri, r,
+-		      iface.gratuitous_neighbor_adv, IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_HOP_LIMIT, ri, r, iface.hop_limit, IDBM_SHOW,
+-			num, 1);
+-	__recinfo_str(IFACE_MLD, ri, r, iface.mld, IDBM_SHOW, num, 1);
+-	__recinfo_uint32(IFACE_ND_REACHABLE_TMO, ri, r, iface.nd_reachable_tmo,
+-			 IDBM_SHOW, num, 1);
+-	__recinfo_uint32(IFACE_ND_REXMIT_TIME, ri, r, iface.nd_rexmit_time,
+-			 IDBM_SHOW, num, 1);
+-	__recinfo_uint32(IFACE_ND_STALE_TMO, ri, r, iface.nd_stale_tmo,
+-			 IDBM_SHOW, num, 1);
+-	__recinfo_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r,
+-			 iface.router_adv_link_mtu, IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, iface.traffic_class,
+-			IDBM_SHOW, num, 1);
++	if (iface_type == ISCSI_IFACE_TYPE_IPV4) {
++		__recinfo_str(IFACE_BOOT_PROTO, ri, r, iface.bootproto,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_SUBNET_MASK, ri, r, iface.subnet_mask,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_GATEWAY, ri, r, iface.gateway, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_DHCP_ALT_CID, ri, r,
++			      iface.dhcp_alt_client_id_state, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_DHCP_ALT_CID_STR, ri, r,
++			      iface.dhcp_alt_client_id, IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_DHCP_DNS, ri, r, iface.dhcp_dns, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r,
++			      iface.dhcp_learn_iqn, IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_DHCP_REQ_VID, ri, r,
++			      iface.dhcp_req_vendor_id_state, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_DHCP_VID, ri, r, iface.dhcp_vendor_id_state,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_DHCP_VID_STR, ri, r, iface.dhcp_vendor_id,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_DHCP_SLP_DA, ri, r, iface.dhcp_slp_da,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_FRAGMENTATION, ri, r, iface.fragmentation,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_GRAT_ARP, ri, r, iface.gratuitous_arp,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_IN_FORWARD, ri, r,
++			      iface.incoming_forwarding, IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_TOS_STATE, ri, r, iface.tos_state,
++			      IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_TOS, ri, r, iface.tos, IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_TTL, ri, r, iface.ttl, IDBM_SHOW, num, 1);
++	} else if (iface_type == ISCSI_IFACE_TYPE_IPV6) {
++		__recinfo_str(IFACE_IPV6_AUTOCFG, ri, r, iface.ipv6_autocfg,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_LINKLOCAL_AUTOCFG, ri, r,
++			      iface.linklocal_autocfg, IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_ROUTER_AUTOCFG, ri, r, iface.router_autocfg,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_LINKLOCAL, ri, r, iface.ipv6_linklocal,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_ROUTER, ri, r, iface.ipv6_router,
++			      IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_DUP_ADDR_DETECT_CNT, ri, r,
++				iface.dup_addr_detect_cnt, IDBM_SHOW, num, 1);
++		__recinfo_uint32(IFACE_FLOW_LABEL, ri, r, iface.flow_label,
++				 IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_GRAT_NEIGHBOR_ADV, ri, r,
++			      iface.gratuitous_neighbor_adv, IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_HOP_LIMIT, ri, r, iface.hop_limit,
++				IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_MLD, ri, r, iface.mld, IDBM_SHOW, num, 1);
++		__recinfo_uint32(IFACE_ND_REACHABLE_TMO, ri, r,
++				 iface.nd_reachable_tmo, IDBM_SHOW, num, 1);
++		__recinfo_uint32(IFACE_ND_REXMIT_TIME, ri, r,
++				 iface.nd_rexmit_time, IDBM_SHOW, num, 1);
++		__recinfo_uint32(IFACE_ND_STALE_TMO, ri, r, iface.nd_stale_tmo,
++				 IDBM_SHOW, num, 1);
++		__recinfo_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r,
++				 iface.router_adv_link_mtu, IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, iface.traffic_class,
++				IDBM_SHOW, num, 1);
++	}
++
+ 	__recinfo_str(IFACE_DELAYED_ACK, ri, r, iface.delayed_ack, IDBM_SHOW,
+ 		      num, 1);
+ 	__recinfo_str(IFACE_TCP_NAGLE, ri, r, iface.nagle, IDBM_SHOW, num, 1);
+@@ -515,6 +526,9 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri)
+ void idbm_recinfo_iface(iface_rec_t *r, recinfo_t *ri)
+ {
+ 	int num = 0;
++	int iface_type;
++
++	iface_type = iface_get_iptype(r);
+ 
+ 	__recinfo_str(IFACE_ISCSINAME, ri, r, name, IDBM_SHOW, num, 0);
+ 	__recinfo_str(IFACE_NETNAME, ri, r, netdev, IDBM_SHOW, num, 1);
+@@ -523,19 +537,6 @@ void idbm_recinfo_iface(iface_rec_t *r, recinfo_t *ri)
+ 	__recinfo_str(IFACE_TRANSPORTNAME, ri, r, transport_name,
+ 		      IDBM_SHOW, num, 1);
+ 	__recinfo_str(IFACE_INAME, ri, r, iname, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_BOOT_PROTO, ri, r, bootproto, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_SUBNET_MASK, ri, r, subnet_mask,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_GATEWAY, ri, r, gateway, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_IPV6_AUTOCFG, ri, r, ipv6_autocfg,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_LINKLOCAL_AUTOCFG, ri, r, linklocal_autocfg,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_ROUTER_AUTOCFG, ri, r, router_autocfg,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_LINKLOCAL, ri, r, ipv6_linklocal,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_ROUTER, ri, r, ipv6_router, IDBM_SHOW, num, 1);
+ 	__recinfo_str(IFACE_STATE, ri, r, state, IDBM_SHOW, num, 1);
+ 	__recinfo_uint16(IFACE_VLAN_ID, ri, r, vlan_id, IDBM_SHOW, num, 1);
+ 	__recinfo_uint8(IFACE_VLAN_PRIORITY, ri, r, vlan_priority,
+@@ -544,46 +545,71 @@ 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_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_DNS, ri, r, dhcp_dns, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, dhcp_learn_iqn, 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_SLP_DA, ri, r, dhcp_slp_da, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_FRAGMENTATION, ri, r, fragmentation, IDBM_SHOW,
+-		      num, 1);
+-	__recinfo_str(IFACE_GRAT_ARP, ri, r, gratuitous_arp, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_IN_FORWARD, ri, r, incoming_forwarding, 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_uint8(IFACE_TTL, ri, r, ttl, IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_DUP_ADDR_DETECT_CNT, ri, r, dup_addr_detect_cnt,
+-			IDBM_SHOW, num, 1);
+-	__recinfo_uint32(IFACE_FLOW_LABEL, ri, r, flow_label, IDBM_SHOW,
+-			 num, 1);
+-	__recinfo_str(IFACE_GRAT_NEIGHBOR_ADV, ri, r, gratuitous_neighbor_adv,
+-		      IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_HOP_LIMIT, ri, r, hop_limit, IDBM_SHOW, num, 1);
+-	__recinfo_str(IFACE_MLD, ri, r, mld, 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_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r, router_adv_link_mtu,
+-			 IDBM_SHOW, num, 1);
+-	__recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, traffic_class, IDBM_SHOW,
+-			num, 1);
++
++	if (iface_type == ISCSI_IFACE_TYPE_IPV4) {
++		__recinfo_str(IFACE_BOOT_PROTO, ri, r, bootproto, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_SUBNET_MASK, ri, r, subnet_mask, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_GATEWAY, ri, r, gateway, 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_DNS, ri, r, dhcp_dns, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, dhcp_learn_iqn,
++			      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_SLP_DA, ri, r, dhcp_slp_da, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_FRAGMENTATION, ri, r, fragmentation,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_GRAT_ARP, ri, r, gratuitous_arp, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_IN_FORWARD, ri, r, incoming_forwarding,
++			      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_uint8(IFACE_TTL, ri, r, ttl, IDBM_SHOW, num, 1);
++	} else if (iface_type == ISCSI_IFACE_TYPE_IPV6) {
++		__recinfo_str(IFACE_IPV6_AUTOCFG, ri, r, ipv6_autocfg,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_LINKLOCAL_AUTOCFG, ri, r, linklocal_autocfg,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_ROUTER_AUTOCFG, ri, r, router_autocfg,
++			      IDBM_SHOW, num, 1);
++		__recinfo_str(IFACE_LINKLOCAL, ri, r, ipv6_linklocal, IDBM_SHOW,
++			      num, 1);
++		__recinfo_str(IFACE_ROUTER, ri, r, ipv6_router, IDBM_SHOW,
++			      num, 1);
++		__recinfo_uint8(IFACE_DUP_ADDR_DETECT_CNT, ri, r,
++				dup_addr_detect_cnt, IDBM_SHOW, num, 1);
++		__recinfo_uint32(IFACE_FLOW_LABEL, ri, r, flow_label, IDBM_SHOW,
++				 num, 1);
++		__recinfo_str(IFACE_GRAT_NEIGHBOR_ADV, ri, r,
++			      gratuitous_neighbor_adv, IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_HOP_LIMIT, ri, r, hop_limit, IDBM_SHOW,
++				num, 1);
++		__recinfo_str(IFACE_MLD, ri, r, mld, 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_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r,
++				 router_adv_link_mtu, IDBM_SHOW, num, 1);
++		__recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, traffic_class,
++				IDBM_SHOW, num, 1);
++	}
++
+ 	__recinfo_str(IFACE_DELAYED_ACK, ri, r, delayed_ack, IDBM_SHOW, num, 1);
+ 	__recinfo_str(IFACE_TCP_NAGLE, ri, r, nagle, IDBM_SHOW, num, 1);
+ 	__recinfo_str(IFACE_TCP_WSF_STATE, ri, r, tcp_wsf_state, IDBM_SHOW,
+-- 
+1.8.3.1
+
diff --git a/iscsi-initiator-utils.spec b/iscsi-initiator-utils.spec
index 4fa2d59..e5a8fdf 100644
--- a/iscsi-initiator-utils.spec
+++ b/iscsi-initiator-utils.spec
@@ -55,6 +55,17 @@ Patch38: 0038-README-changes-to-use-long-option-index-instead-of-f.patch
 Patch39: 0039-iscsiadm-Add-support-to-set-CHAP-entry-using-host-ch.patch
 Patch40: 0040-iscsi-tools-Correctly-get-username_in-and-password_i.patch
 Patch41: 0041-README-changes-for-adding-support-to-set-CHAP-entry.patch
+Patch42: 0042-iscsi-tools-Setup-iface-conf-file-with-all-iface-att.patch
+Patch43: 0043-iscsi_if.h-Remove-numbers-used-for-network-parameter.patch
+Patch44: 0044-iscsi_if.h-Additional-parameters-for-network-param-s.patch
+Patch45: 0045-iscsi-tools-Use-macro-to-set-IPv4-IPv6-IP-addresses.patch
+Patch46: 0046-iscsi-tools-Use-single-function-to-enable-disable-ne.patch
+Patch47: 0047-iscsi-tools-Use-single-function-to-set-integer-netwo.patch
+Patch48: 0048-iscsi-tools-Ignore-network-parameter-if-not-enabled-.patch
+Patch49: 0049-iscsi-tools-Additional-parameters-for-network-settin.patch
+Patch50: 0050-iscsi-tools-iface-params-should-be-updated-for-node_.patch
+Patch51: 0051-iscsi-tools-Let-default-type-of-iface-be-ipv4.patch
+Patch52: 0052-iscsi-tools-Show-iface-params-based-on-iface-type.patch
 
 # not (yet) upstream merged
 Patch143: 0143-idmb_rec_write-check-for-tpgt-first.patch
@@ -149,6 +160,17 @@ developing applications that use %{name}.
 %patch39 -p1
 %patch40 -p1
 %patch41 -p1
+%patch42 -p1
+%patch43 -p1
+%patch44 -p1
+%patch45 -p1
+%patch46 -p1
+%patch47 -p1
+%patch48 -p1
+%patch49 -p1
+%patch50 -p1
+%patch51 -p1
+%patch52 -p1
 # pending upstream merge
 %patch143 -p1
 %patch145 -p1
@@ -325,6 +347,7 @@ fi
 - refresh boot session info patches to final version from upstream,
   fixes context issues with later patches
 - 1006156, 1006161 Add/Update entries in chap table through Open-iSCSI
+- 948134 extend support to set additional parameters for network configuration
 
 * Fri Jan 24 2014 Daniel Mach <dmach at redhat.com> - 6.2.0.873-18
 - Mass rebuild 2014-01-24


More information about the scm-commits mailing list