From a288e4f537c0570d0599bc9ecab44e2a161ffa00 Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Feb 18 2014 06:48:06 +0000 Subject: additional parameters for network configuration Resolves: #948134 Signed-off-by: Chris Leech --- 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 +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 +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Adheer Chandravanshi +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Adheer Chandravanshi +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Vikas Chaudhary +Signed-off-by: Adheer Chandravanshi +--- + 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 +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 +Signed-off-by: Adheer Chandravanshi +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Adheer Chandravanshi +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Adheer Chandravanshi +Signed-off-by: Vikas Chaudhary +--- + 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 +Date: Fri, 18 Oct 2013 09:29:24 -0400 +Subject: [PATCH] iscsi tools: Additional parameters for network settings + +Signed-off-by: Harish Zunjarrao +Signed-off-by: Adheer Chandravanshi +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Vikas Chaudhary +--- + 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 +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 +Signed-off-by: Vikas Chaudhary +--- + 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 - 6.2.0.873-18 - Mass rebuild 2014-01-24