include/iscsi_if.h | 75 ++++
usr/config.h | 52 +++
usr/idbm.c | 91 ++++
usr/idbm_fields.h | 53 +++
usr/iface.c | 1234 +++++++++++++++++++++++++++++++++++++++++++++++-----
5 files changed, 1405 insertions(+), 100 deletions(-)
diff --git a/include/iscsi_if.h b/include/iscsi_if.h
index b34a91a..af33b84 100644
--- a/include/iscsi_if.h
+++ b/include/iscsi_if.h
@@ -401,6 +401,81 @@ enum iscsi_net_param {
ISCSI_NET_PARAM_IFACE_NAME,
ISCSI_NET_PARAM_MTU,
ISCSI_NET_PARAM_PORT,
+ ISCSI_NET_PARAM_IPADDR_STATE,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL_STATE,
+ ISCSI_NET_PARAM_IPV6_ROUTER_STATE,
+ ISCSI_NET_PARAM_DELAYED_ACK_EN,
+ ISCSI_NET_PARAM_ISNS_EN,
+ ISCSI_NET_PARAM_ISNS_ADDR,
+ ISCSI_NET_PARAM_ISNS_PORT,
+ ISCSI_NET_PARAM_NAGLE_EN,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE_EN,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE,
+ ISCSI_NET_PARAM_TCP_TIMER_SCALE,
+ ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
+ ISCSI_NET_PARAM_CACHE_ID,
+ ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_ISNS_INFO_EN,
+ ISCSI_NET_PARAM_IPV4_TOS_EN,
+ ISCSI_NET_PARAM_IPV4_TOS,
+ ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
+ ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
+ ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
+ ISCSI_NET_PARAM_IPV4_FRAGMENT_EN,
+ ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
+ ISCSI_NET_PARAM_IPV4_TTL,
+ ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
+ ISCSI_NET_PARAM_IPV6_MLD_EN,
+ ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
+ ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
+ ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
+ ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
+ ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
+ ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
+ ISCSI_NET_PARAM_IPV6_DUP_ADDR_DET_CNT,
+ ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
+ ISCSI_NET_PARAM_REDIRECT_EN,
+ ISCSI_NET_PARAM_DEF_TMF_TMO,
+ ISCSI_NET_PARAM_DEF_HDRDGST_EN,
+ ISCSI_NET_PARAM_DEF_DATADGST_EN,
+ ISCSI_NET_PARAM_DEF_IMM_DATA_EN,
+ ISCSI_NET_PARAM_DEF_INITIAL_R2T_EN,
+ ISCSI_NET_PARAM_DEF_DATASEQ_INORDER_EN,
+ ISCSI_NET_PARAM_DEF_PDU_INORDER_EN,
+ ISCSI_NET_PARAM_DEF_ERL,
+ ISCSI_NET_PARAM_DEF_MAX_RECV_DLENGTH,
+ ISCSI_NET_PARAM_DEF_FIRST_BURST,
+ ISCSI_NET_PARAM_DEF_MAX_R2T,
+ ISCSI_NET_PARAM_DEF_MAX_BURST,
+ ISCSI_NET_PARAM_DEF_CHAP_AUTH_EN,
+ ISCSI_NET_PARAM_DEF_BIDI_CHAP_EN,
+ ISCSI_NET_PARAM_DEF_STRICT_LOGIN_COMP_EN,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_AUTH_EN,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_LOGOUT_EN,
+ ISCSI_NET_PARAM_DEF_ISCSI_NAME,
+ ISCSI_NET_PARAM_MAX,
+};
+
+enum iscsi_ipaddress_state {
+ ISCSI_IPDDRESS_STATE_UNCONFIGURED,
+ ISCSI_IPDDRESS_STATE_ACQUIRING,
+ ISCSI_IPDDRESS_STATE_TENTATIVE,
+ ISCSI_IPDDRESS_STATE_VALID,
+ ISCSI_IPDDRESS_STATE_DISABLING,
+ ISCSI_IPDDRESS_STATE_INVALID,
+ ISCSI_IPDDRESS_STATE_DEPRECATED,
+};
+
+enum iscsi_router_state {
+ ISCSI_ROUTER_STATE_UNKNOWN,
+ ISCSI_ROUTER_STATE_ADVERTISED,
+ ISCSI_ROUTER_STATE_MANUAL,
+ ISCSI_ROUTER_STATE_STALE,
};
enum iscsi_conn_state {
diff --git a/usr/config.h b/usr/config.h
index 998caff..80d97c8 100644
--- a/usr/config.h
+++ b/usr/config.h
@@ -229,6 +229,58 @@ typedef struct iface_rec {
* 1 = enable */
uint16_t mtu;
uint16_t port;
+ char delayed_ack[ISCSI_MAX_STR_LEN];
+ char isns[ISCSI_MAX_STR_LEN];
+ char isns_ipaddress[ISCSI_MAX_STR_LEN];
+ uint16_t isns_port;
+ char nagle[ISCSI_MAX_STR_LEN];
+ char tcp_win_scale_state[ISCSI_MAX_STR_LEN];
+ uint8_t tcp_win_scale;
+ uint8_t tcp_timer_scale;
+ char tcp_timestamp[ISCSI_MAX_STR_LEN];
+ char dhcp_dns[ISCSI_MAX_STR_LEN];
+ char dhcp_slp_da[ISCSI_MAX_STR_LEN];
+ char dhcp_isns_info[ISCSI_MAX_STR_LEN];
+ char tos_state[ISCSI_MAX_STR_LEN];
+ uint8_t tos;
+ char gratuitous_arp[ISCSI_MAX_STR_LEN];
+ char dhcp_alt_client_id_state[ISCSI_MAX_STR_LEN];
+ char dhcp_alt_client_id[ISCSI_MAX_STR_LEN];
+ char dhcp_req_vendor_id_state[ISCSI_MAX_STR_LEN];
+ char dhcp_vendor_id_state[ISCSI_MAX_STR_LEN];
+ char dhcp_vendor_id[ISCSI_MAX_STR_LEN];
+ char dhcp_learn_iqn[ISCSI_MAX_STR_LEN];
+ char fragmentation[ISCSI_MAX_STR_LEN];
+ char incoming_forwarding[ISCSI_MAX_STR_LEN];
+ uint8_t ttl;
+ char gratuitous_neighbor_adv[ISCSI_MAX_STR_LEN];
+ char redirect[ISCSI_MAX_STR_LEN];
+ char mld[ISCSI_MAX_STR_LEN];
+ uint32_t flow_label;
+ uint32_t traffic_class;
+ uint32_t hop_limit;
+ uint32_t nd_reachable_tmo;
+ uint32_t nd_rexmit_time;
+ uint32_t nd_stale_tmo;
+ uint8_t duplicate_addr_detect_cnt;
+ uint32_t router_adv_link_mtu;
+ uint16_t def_task_mgmt_timeout;
+ char def_header_digest[ISCSI_MAX_STR_LEN];
+ char def_data_digest[ISCSI_MAX_STR_LEN];
+ char def_immediate_data[ISCSI_MAX_STR_LEN];
+ char def_initial_r2t[ISCSI_MAX_STR_LEN];
+ char def_data_seq_inorder[ISCSI_MAX_STR_LEN];
+ char def_data_pdu_inorder[ISCSI_MAX_STR_LEN];
+ uint8_t def_erl;
+ uint16_t def_max_receive_data_len;
+ uint16_t def_first_burst_len;
+ uint16_t def_max_out_r2t;
+ uint16_t def_max_burst_len;
+ char def_chap_auth[ISCSI_MAX_STR_LEN];
+ char def_bidi_chap[ISCSI_MAX_STR_LEN];
+ char def_strict_login_compliance[ISCSI_MAX_STR_LEN];
+ char def_discovery_auth[ISCSI_MAX_STR_LEN];
+ char def_discovery_logout[ISCSI_MAX_STR_LEN];
char port_state[ISCSI_MAX_STR_LEN];
char port_speed[ISCSI_MAX_STR_LEN];
/*
diff --git a/usr/idbm.c b/usr/idbm.c
index bc06058..d8907ef 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -454,6 +454,97 @@ void idbm_recinfo_iface(iface_rec_t *r, recinfo_t *ri)
__recinfo_int(IFACE_NUM, ri, r, iface_num, IDBM_SHOW, num, 1);
__recinfo_uint16(IFACE_MTU, ri, r, mtu, IDBM_SHOW, num, 1);
__recinfo_uint16(IFACE_PORT, ri, r, port, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DELAYED_ACK, ri, r, delayed_ack, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_ISNS, ri, r, isns, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_ISNS_IPADDR, ri, r, isns_ipaddress,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_ISNS_PORT, ri, r, isns_port, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_NAGLE, ri, r, nagle, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_TCP_WIN_SCALE_STATE, ri, r, tcp_win_scale_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TCP_WIN_SCALE, ri, r, tcp_win_scale,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TCP_TIMER_SCALE, ri, r, tcp_timer_scale,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_TCP_TIMESTAMP, ri, r, tcp_timestamp,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_DNS, ri, r, dhcp_dns, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_SLP_DA, ri, r, dhcp_slp_da,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_ISNS_INFO, ri, r, dhcp_isns_info,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_TOS_STATE, ri, r, tos_state, IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TOS, ri, r, tos, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_GRAT_ARP, ri, r, gratuitous_arp, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_ALT_CID, ri, r, dhcp_alt_client_id_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_ALT_CID_STR, ri, r, dhcp_alt_client_id,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_REQ_VID, ri, r, dhcp_req_vendor_id_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_VID, ri, r, dhcp_vendor_id_state,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_VID_STR, ri, r, dhcp_vendor_id,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DHCP_LEARN_IQN, ri, r, dhcp_learn_iqn,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_FRAGMENTATION, ri, r, fragmentation,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_IN_FORWARD, ri, r, incoming_forwarding,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TTL, ri, r, ttl, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_GRAT_NEI_ADV, ri, r, gratuitous_neighbor_adv,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_REDIRECT, ri, r, redirect, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_MLD, ri, r, mld, IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_FLOW_LABEL, ri, r, flow_label, IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_TRAFFIC_CLASS, ri, r, traffic_class,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_HOP_LIMIT, ri, r, hop_limit, IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_ND_REACHABLE_TMO, ri, r, nd_reachable_tmo,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_ND_REXMIT_TIME, ri, r, nd_rexmit_time,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_ND_STALE_TMO, ri, r, nd_stale_tmo,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_DUP_ADDR_DET_CNT, ri, r,
+ duplicate_addr_detect_cnt, IDBM_SHOW, num, 1);
+ __recinfo_uint32(IFACE_RTR_ADV_LINK_MTU, ri, r, router_adv_link_mtu,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_TMF_TMO, ri, r, def_task_mgmt_timeout,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_HDRDGST, ri, r, def_header_digest,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DATADGST, ri, r, def_data_digest,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_IMM_DATA, ri, r, def_immediate_data,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_INITIAL_R2T, ri, r, def_initial_r2t,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DSEQ_INORDER, ri, r, def_data_seq_inorder,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DPDU_INORDER, ri, r, def_data_pdu_inorder,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint8(IFACE_DEF_ERL, ri, r, def_erl,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_MAX_RECV_DLEN, ri, r,
+ def_max_receive_data_len, IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_FIRST_BURST, ri, r, def_first_burst_len,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_MAX_R2T, ri, r, def_max_out_r2t,
+ IDBM_SHOW, num, 1);
+ __recinfo_uint16(IFACE_DEF_MAX_BURST, ri, r, def_max_burst_len,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_CHAP_AUTH, ri, r, def_chap_auth,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_BIDI_CHAP, ri, r, def_bidi_chap,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_STRICT_LOGIN_COMP, ri, r,
+ def_strict_login_compliance, IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DISCOVERY_AUTH, ri, r, def_discovery_auth,
+ IDBM_SHOW, num, 1);
+ __recinfo_str(IFACE_DEF_DISCOVERY_LOGOUT, ri, r, def_discovery_logout,
+ IDBM_SHOW, num, 1);
}
static void idbm_recinfo_host_chap(struct iscsi_chap_rec *r, recinfo_t *ri)
diff --git a/usr/idbm_fields.h b/usr/idbm_fields.h
index 179dda8..cb61a76 100644
--- a/usr/idbm_fields.h
+++ b/usr/idbm_fields.h
@@ -89,6 +89,59 @@
#define IFACE_NUM "iface.iface_num"
#define IFACE_MTU "iface.mtu"
#define IFACE_PORT "iface.port"
+#define IFACE_DELAYED_ACK "iface.delayed_ack"
+#define IFACE_ISNS "iface.isns"
+#define IFACE_ISNS_IPADDR "iface.isns_ipaddress"
+#define IFACE_ISNS_PORT "iface.isns_port"
+#define IFACE_NAGLE "iface.nagle"
+#define IFACE_TCP_WIN_SCALE_STATE "iface.tcp_win_scale_state"
+#define IFACE_TCP_WIN_SCALE "iface.tcp_win_scale"
+#define IFACE_TCP_TIMER_SCALE "iface.tcp_timer_scale"
+#define IFACE_TCP_TIMESTAMP "iface.tcp_timestamp"
+#define IFACE_DHCP_DNS "iface.dhcp_dns"
+#define IFACE_DHCP_SLP_DA "iface.dhcp_slp_da"
+#define IFACE_DHCP_ISNS_INFO "iface.dhcp_isns_info"
+#define IFACE_TOS_STATE "iface.tos_state"
+#define IFACE_TOS "iface.tos"
+#define IFACE_GRAT_ARP "iface.gratuitous_arp"
+#define IFACE_DHCP_ALT_CID "iface.dhcp_alt_client_id_state"
+#define IFACE_DHCP_ALT_CID_STR "iface.dhcp_alt_client_id"
+#define IFACE_DHCP_REQ_VID "iface.dhcp_req_vendor_id_state"
+#define IFACE_DHCP_VID "iface.dhcp_vendor_id_state"
+#define IFACE_DHCP_VID_STR "iface.dhcp_vendor_id"
+#define IFACE_DHCP_LEARN_IQN "iface.dhcp_learn_iqn"
+#define IFACE_FRAGMENTATION "iface.fragmentation"
+#define IFACE_IN_FORWARD "iface.incoming_forwarding"
+#define IFACE_TTL "iface.ttl"
+#define IFACE_GRAT_NEI_ADV "iface.gratuitous_neighbor_adv"
+#define IFACE_REDIRECT "iface.redirect"
+#define IFACE_IGNORE_ICMP_ECHO_REQ "iface.ignore_icmp_echo_request"
+#define IFACE_MLD "iface.mld"
+#define IFACE_FLOW_LABEL "iface.flow_label"
+#define IFACE_TRAFFIC_CLASS "iface.traffic_class"
+#define IFACE_HOP_LIMIT "iface.hop_limit"
+#define IFACE_ND_REACHABLE_TMO "iface.nd_reachable_tmo"
+#define IFACE_ND_REXMIT_TIME "iface.nd_rexmit_time"
+#define IFACE_ND_STALE_TMO "iface.nd_stale_tmo"
+#define IFACE_DUP_ADDR_DET_CNT "iface.duplicate_addr_detect_cnt"
+#define IFACE_RTR_ADV_LINK_MTU "iface.router_adv_link_mtu"
+#define IFACE_DEF_TMF_TMO "iface.def_task_mgmt_timeout"
+#define IFACE_DEF_HDRDGST "iface.def_header_digest"
+#define IFACE_DEF_DATADGST "iface.def_data_digest"
+#define IFACE_DEF_IMM_DATA "iface.def_immediate_data"
+#define IFACE_DEF_INITIAL_R2T "iface.def_initial_r2t"
+#define IFACE_DEF_DSEQ_INORDER "iface.def_data_seq_inorder"
+#define IFACE_DEF_DPDU_INORDER "iface.def_data_pdu_inorder"
+#define IFACE_DEF_ERL "iface.def_erl"
+#define IFACE_DEF_MAX_RECV_DLEN "iface.def_max_receive_data_len"
+#define IFACE_DEF_FIRST_BURST "iface.def_first_burst_len"
+#define IFACE_DEF_MAX_R2T "iface.def_max_out_r2t"
+#define IFACE_DEF_MAX_BURST "iface.def_max_burst_len"
+#define IFACE_DEF_CHAP_AUTH "iface.def_chap_auth"
+#define IFACE_DEF_BIDI_CHAP "iface.def_bidi_chap"
+#define IFACE_DEF_STRICT_LOGIN_COMP "iface.def_strict_login_compliance"
+#define IFACE_DEF_DISCOVERY_AUTH "iface.def_discovery_auth"
+#define IFACE_DEF_DISCOVERY_LOGOUT "iface.def_discovery_logout"
/* discovery fields */
#define DISC_STARTUP "discovery.startup"
diff --git a/usr/iface.c b/usr/iface.c
index 622c436..629f42a 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -601,6 +601,114 @@ void iface_copy(struct iface_rec *dst, struct iface_rec *src)
dst->mtu = src->mtu;
if (src->port)
dst->port = src->port;
+ if (strlen(src->delayed_ack))
+ strcpy(dst->delayed_ack, src->delayed_ack);
+ if (strlen(src->isns))
+ strcpy(dst->isns, src->isns);
+ if (strlen(src->isns_ipaddress))
+ strcpy(dst->isns_ipaddress, src->isns_ipaddress);
+ if (src->isns_port)
+ dst->isns_port = src->isns_port;
+ if (strlen(src->nagle))
+ strcpy(dst->nagle, src->nagle);
+ if (strlen(src->tcp_win_scale_state))
+ strcpy(dst->tcp_win_scale_state, src->tcp_win_scale_state);
+ if (src->tcp_win_scale)
+ dst->tcp_win_scale = src->tcp_win_scale;
+ if (src->tcp_timer_scale)
+ dst->tcp_timer_scale = src->tcp_timer_scale;
+ if (strlen(src->tcp_timestamp))
+ strcpy(dst->tcp_timestamp, src->tcp_timestamp);
+ if (strlen(src->dhcp_dns))
+ strcpy(dst->dhcp_dns, src->dhcp_dns);
+ if (strlen(src->dhcp_slp_da))
+ strcpy(dst->dhcp_slp_da, src->dhcp_slp_da);
+ if (strlen(src->dhcp_isns_info))
+ strcpy(dst->dhcp_isns_info, src->dhcp_isns_info);
+ if (strlen(src->tos_state))
+ strcpy(dst->tos_state, src->tos_state);
+ if (src->tos)
+ dst->tos = src->tos;
+ if (strlen(src->gratuitous_arp))
+ strcpy(dst->gratuitous_arp, src->gratuitous_arp);
+ if (strlen(src->dhcp_alt_client_id_state))
+ strcpy(dst->dhcp_alt_client_id_state,
+ src->dhcp_alt_client_id_state);
+ if (strlen(src->dhcp_alt_client_id))
+ strcpy(dst->dhcp_alt_client_id, src->dhcp_alt_client_id);
+ if (strlen(src->dhcp_req_vendor_id_state))
+ strcpy(dst->dhcp_req_vendor_id_state,
+ src->dhcp_req_vendor_id_state);
+ if (strlen(src->dhcp_vendor_id_state))
+ strcpy(dst->dhcp_vendor_id_state, src->dhcp_vendor_id_state);
+ if (strlen(src->dhcp_vendor_id))
+ strcpy(dst->dhcp_vendor_id, src->dhcp_vendor_id);
+ if (strlen(src->dhcp_learn_iqn))
+ strcpy(dst->dhcp_learn_iqn, src->dhcp_learn_iqn);
+ if (strlen(src->fragmentation))
+ strcpy(dst->fragmentation, src->fragmentation);
+ if (strlen(src->incoming_forwarding))
+ strcpy(dst->incoming_forwarding, src->incoming_forwarding);
+ if (src->ttl)
+ dst->ttl = src->ttl;
+ if (strlen(src->gratuitous_neighbor_adv))
+ strcpy(dst->gratuitous_neighbor_adv,
+ src->gratuitous_neighbor_adv);
+ if (strlen(src->redirect))
+ strcpy(dst->redirect, src->redirect);
+ if (strlen(src->mld))
+ strcpy(dst->mld, src->mld);
+ if (src->flow_label)
+ dst->flow_label = src->flow_label;
+ if (src->traffic_class)
+ dst->traffic_class = src->traffic_class;
+ if (src->hop_limit)
+ dst->hop_limit = src->hop_limit;
+ if (src->nd_reachable_tmo)
+ dst->nd_reachable_tmo = src->nd_reachable_tmo;
+ if (src->nd_rexmit_time)
+ dst->nd_rexmit_time = src->nd_rexmit_time;
+ if (src->nd_stale_tmo)
+ dst->nd_stale_tmo = src->nd_stale_tmo;
+ if (src->duplicate_addr_detect_cnt)
+ dst->duplicate_addr_detect_cnt = src->duplicate_addr_detect_cnt;
+ if (src->router_adv_link_mtu)
+ dst->router_adv_link_mtu = src->router_adv_link_mtu;
+ if (src->def_task_mgmt_timeout)
+ dst->def_task_mgmt_timeout = src->def_task_mgmt_timeout;
+ if (strlen(src->def_header_digest))
+ strcpy(dst->def_header_digest, src->def_header_digest);
+ if (strlen(src->def_data_digest))
+ strcpy(dst->def_data_digest, src->def_data_digest);
+ if (strlen(src->def_immediate_data))
+ strcpy(dst->def_immediate_data, src->def_immediate_data);
+ if (strlen(src->def_initial_r2t))
+ strcpy(dst->def_initial_r2t, src->def_initial_r2t);
+ if (strlen(src->def_data_seq_inorder))
+ strcpy(dst->def_data_seq_inorder, src->def_data_seq_inorder);
+ if (strlen(src->def_data_pdu_inorder))
+ strcpy(dst->def_data_pdu_inorder, src->def_data_pdu_inorder);
+ if (src->def_erl)
+ dst->def_erl = src->def_erl;
+ if (src->def_max_receive_data_len)
+ dst->def_max_receive_data_len = src->def_max_receive_data_len;
+ if (src->def_first_burst_len)
+ dst->def_first_burst_len = src->def_first_burst_len;
+ if (src->def_max_out_r2t)
+ dst->def_max_out_r2t = src->def_max_out_r2t;
+ if (src->def_max_burst_len)
+ dst->def_max_burst_len = src->def_max_burst_len;
+ if (strlen(src->def_chap_auth))
+ strcpy(dst->def_chap_auth, src->def_chap_auth);
+ if (strlen(src->def_bidi_chap))
+ strcpy(dst->def_bidi_chap, src->def_bidi_chap);
+ if (strlen(src->def_strict_login_compliance))
+ strcpy(dst->def_strict_login_compliance,
+ src->def_strict_login_compliance);
+ if (strlen(src->def_discovery_auth))
+ strcpy(dst->def_discovery_auth, src->def_discovery_auth);
+ if (strlen(src->def_discovery_logout))
+ strcpy(dst->def_discovery_logout, src->def_discovery_logout);
if (strlen(src->hwaddress))
strcpy(dst->hwaddress, src->hwaddress);
if (strlen(src->transport_name))
@@ -1026,6 +1134,11 @@ struct iface_param_count {
int count;
};
+#define IFACE_NET_PARAM_EN_CNT(param_val, cnt) \
+ if (!strcmp(param_val, "disable") || \
+ !strcmp(param_val, "enable")) \
+ (*cnt)++;
+
/**
* __iface_get_param_count - Gets netconfig parameter count for given iface
* @data: iface_param_count structure
@@ -1094,6 +1207,131 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
if (iface->port)
count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->delayed_ack,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->isns,
+ &count);
+
+ if (strstr(iface->isns_ipaddress, "."))
+ count++;
+
+ if (iface->isns_port)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->nagle,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_win_scale_state,
+ &count);
+
+ if (iface->tcp_win_scale)
+ count++;
+
+ if (iface->tcp_timer_scale)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_timestamp,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_dns,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_slp_da,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_isns_info,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->tos_state,
+ &count);
+
+ if (iface->tos)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->gratuitous_arp,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_alt_client_id_state,
+ &count);
+
+ if (iface->dhcp_alt_client_id[0])
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_req_vendor_id_state,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_vendor_id_state,
+ &count);
+
+ if (iface->dhcp_vendor_id[0])
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->dhcp_learn_iqn,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->fragmentation,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->incoming_forwarding,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->redirect, &count);
+
+ if (iface->ttl)
+ count++;
+
+ if (iface->def_task_mgmt_timeout)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_header_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_immediate_data,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_initial_r2t,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_seq_inorder,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_pdu_inorder,
+ &count);
+
+ if (iface->def_erl)
+ count++;
+
+ if (iface->def_max_receive_data_len)
+ count++;
+
+ if (iface->def_first_burst_len)
+ count++;
+
+ if (iface->def_max_out_r2t)
+ count++;
+
+ if (iface->def_max_burst_len)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_chap_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_bidi_chap,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_strict_login_compliance,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_logout,
+ &count);
}
} else
/* IPv4 is disabled, iface state */
@@ -1185,6 +1423,114 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
if (iface->port)
count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->delayed_ack,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->isns,
+ &count);
+
+ if (strstr(iface->isns_ipaddress, ":"))
+ count++;
+
+ if (iface->isns_port)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->nagle,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_win_scale_state,
+ &count);
+
+ if (iface->tcp_win_scale)
+ count++;
+
+ if (iface->tcp_timer_scale)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->tcp_timestamp,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->gratuitous_neighbor_adv,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->redirect,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->mld,
+ &count);
+
+ if (iface->flow_label)
+ count++;
+
+ if (iface->traffic_class)
+ count++;
+
+ if (iface->hop_limit)
+ count++;
+
+ if (iface->nd_reachable_tmo)
+ count++;
+
+ if (iface->nd_rexmit_time)
+ count++;
+
+ if (iface->nd_stale_tmo)
+ count++;
+
+ if (iface->duplicate_addr_detect_cnt)
+ count++;
+
+ if (iface->router_adv_link_mtu)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_header_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_digest,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_immediate_data,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_initial_r2t,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_seq_inorder,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_data_pdu_inorder,
+ &count);
+
+ if (iface->def_erl)
+ count++;
+
+ if (iface->def_max_receive_data_len)
+ count++;
+
+ if (iface->def_first_burst_len)
+ count++;
+
+ if (iface->def_max_out_r2t)
+ count++;
+
+ if (iface->def_max_burst_len)
+ count++;
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_chap_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_bidi_chap,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_strict_login_compliance,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_auth,
+ &count);
+
+ IFACE_NET_PARAM_EN_CNT(iface->def_discovery_logout,
+ &count);
}
} else
/* IPv6 is disabled, iface state */
@@ -1575,6 +1921,43 @@ free:
} \
}
+/* write string parameter value */
+static int iface_fill_str_param_val(struct iovec *iov, uint32_t iface_num,
+ uint8_t iface_type, uint16_t param,
+ uint32_t param_len, char *param_val)
+{
+ int len;
+ struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
+
+ if (!param_val[0])
+ return 1;
+
+ len = sizeof(struct iscsi_iface_param_info) + param_len;
+ iov->iov_base = iscsi_nla_alloc(param, len);
+ if (!(iov->iov_base))
+ return 1;
+
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
+ net_param->iface_num = iface_num;
+ net_param->len = param_len;
+ net_param->param = param;
+ net_param->iface_type = iface_type;
+ net_param->param_type = ISCSI_NET_PARAM;
+ memcpy(net_param->value, param_val, param_len);
+ return 0;
+}
+
+#define IFACE_SET_NET_PARAM_STRVAL(iov, inum, itype, param, plen, \
+ ival, gcnt, lcnt) \
+ if (!iface_fill_str_param_val(iov, inum, itype, param, plen, \
+ ival)) { \
+ (*gcnt)++; \
+ (*lcnt)++; \
+ }
+
struct iface_net_config {
struct iface_rec *primary;
struct iovec *iovs;
@@ -1689,136 +2072,787 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
iface->port,
&net_config->count,
&count);
- }
- } else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
- if (!strcmp(iface->state, "disable")) {
+
IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_IFACE_ENABLE,
- iface->state,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DELAYED_ACK_EN,
+ iface->delayed_ack,
&net_config->count,
&count);
- return 0;
- }
- /* For IPv6 Address */
- if (strstr(iface->ipv6_autocfg, "nd") ||
- strstr(iface->ipv6_autocfg, "dhcpv6")) {
- if (!iface_fill_net_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- } else if (strstr(iface->ipaddress, ":")) {
- if (!iface_fill_net_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- /* User provided IPv6 Address */
- IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
- iface->iface_num,
- ISCSI_NET_PARAM_IPV6_ADDR,
- iface->ipaddress,
- &net_config->count,
- &count);
- }
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_ISNS_EN,
+ iface->isns,
+ &net_config->count,
+ &count);
- /* For LinkLocal Address */
- if (strstr(iface->linklocal_autocfg, "auto")) {
- if (!iface_fill_linklocal_autocfg(
- &iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- } else if (strstr(iface->ipv6_linklocal, ":")) {
- if (!iface_fill_linklocal_autocfg(
- &iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- /* User provided Link Local Address */
- IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ IFACE_SET_NET_PARAM_IPV4_ADDR(&iov[net_config->count],
iface->iface_num,
- ISCSI_NET_PARAM_IPV6_LINKLOCAL,
- iface->ipv6_linklocal,
+ ISCSI_NET_PARAM_ISNS_ADDR,
+ iface->isns_ipaddress,
&net_config->count,
&count);
- }
- /* For Router Address */
- if (strstr(iface->router_autocfg, "auto")) {
- if (!iface_fill_router_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- } else if (strstr(iface->ipv6_router, ":")) {
- if (!iface_fill_router_autocfg(&iov[net_config->count],
- iface)) {
- net_config->count++;
- count++;
- }
- /* User provided Router Address */
- IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
- iface->iface_num,
- ISCSI_NET_PARAM_IPV6_ROUTER,
- iface->ipv6_router,
- &net_config->count,
- &count);
- }
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_ISNS_PORT,
+ 2,
+ iface->isns_port,
+ &net_config->count,
+ &count);
- /*
- * If IPv6 configuration in iface file is valid,
- * fill state and other parameters
- */
- if (count) {
IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_IFACE_ENABLE,
- iface->state,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_NAGLE_EN,
+ iface->nagle,
&net_config->count,
&count);
IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_VLAN_ENABLED,
- iface->vlan_state,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE_EN,
+ iface->tcp_win_scale_state,
&net_config->count,
&count);
- if (strcmp(iface->vlan_state, "disable") &&
- iface->vlan_id) {
- if (!iface_fill_vlan_id(&iov[net_config->count],
- iface,
- ISCSI_IFACE_TYPE_IPV6)) {
- net_config->count++;
- count++;
- }
- }
-
IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_MTU,
- 2,
- iface->mtu,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE,
+ 1,
+ iface->tcp_win_scale,
&net_config->count,
&count);
IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
iface->iface_num,
- ISCSI_IFACE_TYPE_IPV6,
- ISCSI_NET_PARAM_PORT,
- 2,
- iface->port,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_TIMER_SCALE,
+ 1,
+ iface->tcp_timer_scale,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
+ iface->tcp_timestamp,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
+ iface->dhcp_dns,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
+ iface->dhcp_slp_da,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_ISNS_INFO_EN,
+ iface->dhcp_isns_info,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_TOS_EN,
+ iface->tos_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_TOS,
+ 1,
+ iface->tos,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
+ iface->gratuitous_arp,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
+ iface->dhcp_alt_client_id_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_STRVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
+ strlen(iface->dhcp_alt_client_id),
+ iface->dhcp_alt_client_id,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
+ iface->dhcp_req_vendor_id_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
+ iface->dhcp_vendor_id_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_STRVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
+ strlen(iface->dhcp_vendor_id),
+ iface->dhcp_vendor_id,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
+ iface->dhcp_learn_iqn,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_FRAGMENT_EN,
+ iface->fragmentation,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
+ iface->incoming_forwarding,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_REDIRECT_EN,
+ iface->redirect,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_IPV4_TTL,
+ 1,
+ iface->ttl,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_TMF_TMO,
+ 2,
+ iface->def_task_mgmt_timeout,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_HDRDGST_EN,
+ iface->def_header_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DATADGST_EN,
+ iface->def_data_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_IMM_DATA_EN,
+ iface->def_immediate_data,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_INITIAL_R2T_EN,
+ iface->def_initial_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DATASEQ_INORDER_EN,
+ iface->def_data_seq_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_PDU_INORDER_EN,
+ iface->def_data_pdu_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_ERL,
+ 1,
+ iface->def_erl,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_MAX_RECV_DLENGTH,
+ 2,
+ iface->def_max_receive_data_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_FIRST_BURST,
+ 2,
+ iface->def_first_burst_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_MAX_R2T,
+ 2,
+ iface->def_max_out_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_MAX_BURST,
+ 2,
+ iface->def_max_burst_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_CHAP_AUTH_EN,
+ iface->def_chap_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_BIDI_CHAP_EN,
+ iface->def_bidi_chap,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_STRICT_LOGIN_COMP_EN,
+ iface->def_strict_login_compliance,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_AUTH_EN,
+ iface->def_discovery_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV4,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_LOGOUT_EN,
+ iface->def_discovery_logout,
+ &net_config->count,
+ &count);
+ }
+ } else if (iptype == ISCSI_IFACE_TYPE_IPV6) {
+ if (!strcmp(iface->state, "disable")) {
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
+ return 0;
+ }
+
+ /* For IPv6 Address */
+ if (strstr(iface->ipv6_autocfg, "nd") ||
+ strstr(iface->ipv6_autocfg, "dhcpv6")) {
+ if (!iface_fill_net_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ } else if (strstr(iface->ipaddress, ":")) {
+ if (!iface_fill_net_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ /* User provided IPv6 Address */
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_ADDR,
+ iface->ipaddress,
+ &net_config->count,
+ &count);
+ }
+
+ /* For LinkLocal Address */
+ if (strstr(iface->linklocal_autocfg, "auto")) {
+ if (!iface_fill_linklocal_autocfg(
+ &iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ } else if (strstr(iface->ipv6_linklocal, ":")) {
+ if (!iface_fill_linklocal_autocfg(
+ &iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ /* User provided Link Local Address */
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_LINKLOCAL,
+ iface->ipv6_linklocal,
+ &net_config->count,
+ &count);
+ }
+
+ /* For Router Address */
+ if (strstr(iface->router_autocfg, "auto")) {
+ if (!iface_fill_router_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ } else if (strstr(iface->ipv6_router, ":")) {
+ if (!iface_fill_router_autocfg(&iov[net_config->count],
+ iface)) {
+ net_config->count++;
+ count++;
+ }
+ /* User provided Router Address */
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_IPV6_ROUTER,
+ iface->ipv6_router,
+ &net_config->count,
+ &count);
+ }
+
+ /*
+ * If IPv6 configuration in iface file is valid,
+ * fill state and other parameters
+ */
+ if (count) {
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IFACE_ENABLE,
+ iface->state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_VLAN_ENABLED,
+ iface->vlan_state,
+ &net_config->count,
+ &count);
+
+ if (strcmp(iface->vlan_state, "disable") &&
+ iface->vlan_id) {
+ if (!iface_fill_vlan_id(&iov[net_config->count],
+ iface,
+ ISCSI_IFACE_TYPE_IPV6)) {
+ net_config->count++;
+ count++;
+ }
+ }
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_MTU,
+ 2,
+ iface->mtu,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_PORT,
+ 2,
+ iface->port,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DELAYED_ACK_EN,
+ iface->delayed_ack,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_ISNS_EN,
+ iface->isns,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_IPV6_ADDR(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_NET_PARAM_ISNS_ADDR,
+ iface->isns_ipaddress,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_ISNS_PORT,
+ 2,
+ iface->isns_port,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_NAGLE_EN,
+ iface->nagle,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE_EN,
+ iface->tcp_win_scale_state,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_WIN_SCALE,
+ 1,
+ iface->tcp_win_scale,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_TIMER_SCALE,
+ 1,
+ iface->tcp_timer_scale,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
+ iface->tcp_timestamp,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
+ iface->gratuitous_neighbor_adv,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_REDIRECT_EN,
+ iface->redirect,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_MLD_EN,
+ iface->mld,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
+ 4,
+ iface->flow_label,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
+ 1,
+ iface->traffic_class,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
+ 1,
+ iface->hop_limit,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
+ 4,
+ iface->nd_reachable_tmo,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
+ 4,
+ iface->nd_rexmit_time,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
+ 4,
+ iface->nd_stale_tmo,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_DUP_ADDR_DET_CNT,
+ 1,
+ iface->duplicate_addr_detect_cnt,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
+ 4,
+ iface->router_adv_link_mtu,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_HDRDGST_EN,
+ iface->def_header_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DATADGST_EN,
+ iface->def_data_digest,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_IMM_DATA_EN,
+ iface->def_immediate_data,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_INITIAL_R2T_EN,
+ iface->def_initial_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DATASEQ_INORDER_EN,
+ iface->def_data_seq_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_PDU_INORDER_EN,
+ iface->def_data_pdu_inorder,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_ERL,
+ 1,
+ iface->def_erl,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_MAX_RECV_DLENGTH,
+ 2,
+ iface->def_max_receive_data_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_FIRST_BURST,
+ 2,
+ iface->def_first_burst_len,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_MAX_R2T,
+ 2,
+ iface->def_max_out_r2t,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_INTVAL(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_MAX_BURST,
+ 2,
+ iface->def_max_burst_len,
&net_config->count,
&count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_CHAP_AUTH_EN,
+ iface->def_chap_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_BIDI_CHAP_EN,
+ iface->def_bidi_chap,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_STRICT_LOGIN_COMP_EN,
+ iface->def_strict_login_compliance,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_AUTH_EN,
+ iface->def_discovery_auth,
+ &net_config->count,
+ &count);
+
+ IFACE_SET_NET_PARAM_EN(&iov[net_config->count],
+ iface->iface_num,
+ ISCSI_IFACE_TYPE_IPV6,
+ ISCSI_NET_PARAM_DEF_DISCOVERY_LOGOUT_EN,
+ iface->def_discovery_logout,
+ &net_config->count,
+ &count);
}
}
return 0;
--
1.8.2.GIT