summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/iscsi_if.h204
-rw-r--r--usr/initiator.c12
-rw-r--r--usr/initiator.h1
-rw-r--r--usr/initiator_common.c38
4 files changed, 99 insertions, 156 deletions
diff --git a/include/iscsi_if.h b/include/iscsi_if.h
index 20f2bc2..01d38e7 100644
--- a/include/iscsi_if.h
+++ b/include/iscsi_if.h
@@ -495,47 +495,64 @@ enum iscsi_param {
ISCSI_PARAM_TGT_RESET_TMO,
ISCSI_PARAM_TARGET_ALIAS,
+
+ ISCSI_PARAM_CHAP_IN_IDX,
+ ISCSI_PARAM_CHAP_OUT_IDX,
+
+ ISCSI_PARAM_BOOT_ROOT,
+ ISCSI_PARAM_BOOT_NIC,
+ ISCSI_PARAM_BOOT_TARGET,
+
+ ISCSI_PARAM_AUTO_SND_TGT_DISABLE,
+ ISCSI_PARAM_DISCOVERY_SESS,
+ ISCSI_PARAM_PORTAL_TYPE,
+ ISCSI_PARAM_CHAP_AUTH_EN,
+ ISCSI_PARAM_DISCOVERY_LOGOUT_EN,
+ ISCSI_PARAM_BIDI_CHAP_EN,
+ ISCSI_PARAM_DISCOVERY_AUTH_OPTIONAL,
+
+ ISCSI_PARAM_DEF_TIME2WAIT,
+ ISCSI_PARAM_DEF_TIME2RETAIN,
+ ISCSI_PARAM_MAX_SEGMENT_SIZE,
+ ISCSI_PARAM_STATSN,
+ ISCSI_PARAM_KEEPALIVE_TMO,
+ ISCSI_PARAM_LOCAL_PORT,
+ ISCSI_PARAM_TSID,
+ ISCSI_PARAM_DEF_TASKMGMT_TMO,
+
+ ISCSI_PARAM_TCP_TIMESTAMP_STAT,
+ ISCSI_PARAM_TCP_WSF_DISABLE,
+ ISCSI_PARAM_TCP_NAGLE_DISABLE,
+ ISCSI_PARAM_TCP_TIMER_SCALE,
+ ISCSI_PARAM_TCP_TIMESTAMP_EN,
+ ISCSI_PARAM_TCP_XMIT_WSF,
+ ISCSI_PARAM_TCP_RECV_WSF,
+ ISCSI_PARAM_IP_FRAGMENT_DISABLE,
+ ISCSI_PARAM_IPV4_TOS,
+ ISCSI_PARAM_IPV6_TC,
+ ISCSI_PARAM_IPV6_FLOW_LABEL,
+ ISCSI_PARAM_IS_FW_ASSIGNED_IPV6,
+
+ ISCSI_PARAM_DISCOVERY_PARENT_IDX,
+ ISCSI_PARAM_DISCOVERY_PARENT_TYPE,
/* must always be last */
ISCSI_PARAM_MAX,
};
-#define ISCSI_MAX_RECV_DLENGTH (1ULL << ISCSI_PARAM_MAX_RECV_DLENGTH)
-#define ISCSI_MAX_XMIT_DLENGTH (1ULL << ISCSI_PARAM_MAX_XMIT_DLENGTH)
-#define ISCSI_HDRDGST_EN (1ULL << ISCSI_PARAM_HDRDGST_EN)
-#define ISCSI_DATADGST_EN (1ULL << ISCSI_PARAM_DATADGST_EN)
-#define ISCSI_INITIAL_R2T_EN (1ULL << ISCSI_PARAM_INITIAL_R2T_EN)
-#define ISCSI_MAX_R2T (1ULL << ISCSI_PARAM_MAX_R2T)
-#define ISCSI_IMM_DATA_EN (1ULL << ISCSI_PARAM_IMM_DATA_EN)
-#define ISCSI_FIRST_BURST (1ULL << ISCSI_PARAM_FIRST_BURST)
-#define ISCSI_MAX_BURST (1ULL << ISCSI_PARAM_MAX_BURST)
-#define ISCSI_PDU_INORDER_EN (1ULL << ISCSI_PARAM_PDU_INORDER_EN)
-#define ISCSI_DATASEQ_INORDER_EN (1ULL << ISCSI_PARAM_DATASEQ_INORDER_EN)
-#define ISCSI_ERL (1ULL << ISCSI_PARAM_ERL)
-#define ISCSI_IFMARKER_EN (1ULL << ISCSI_PARAM_IFMARKER_EN)
-#define ISCSI_OFMARKER_EN (1ULL << ISCSI_PARAM_OFMARKER_EN)
-#define ISCSI_EXP_STATSN (1ULL << ISCSI_PARAM_EXP_STATSN)
-#define ISCSI_TARGET_NAME (1ULL << ISCSI_PARAM_TARGET_NAME)
-#define ISCSI_TPGT (1ULL << ISCSI_PARAM_TPGT)
-#define ISCSI_PERSISTENT_ADDRESS (1ULL << ISCSI_PARAM_PERSISTENT_ADDRESS)
-#define ISCSI_PERSISTENT_PORT (1ULL << ISCSI_PARAM_PERSISTENT_PORT)
-#define ISCSI_SESS_RECOVERY_TMO (1ULL << ISCSI_PARAM_SESS_RECOVERY_TMO)
-#define ISCSI_CONN_PORT (1ULL << ISCSI_PARAM_CONN_PORT)
-#define ISCSI_CONN_ADDRESS (1ULL << ISCSI_PARAM_CONN_ADDRESS)
-#define ISCSI_USERNAME (1ULL << ISCSI_PARAM_USERNAME)
-#define ISCSI_USERNAME_IN (1ULL << ISCSI_PARAM_USERNAME_IN)
-#define ISCSI_PASSWORD (1ULL << ISCSI_PARAM_PASSWORD)
-#define ISCSI_PASSWORD_IN (1ULL << ISCSI_PARAM_PASSWORD_IN)
-#define ISCSI_FAST_ABORT (1ULL << ISCSI_PARAM_FAST_ABORT)
-#define ISCSI_ABORT_TMO (1ULL << ISCSI_PARAM_ABORT_TMO)
-#define ISCSI_LU_RESET_TMO (1ULL << ISCSI_PARAM_LU_RESET_TMO)
-#define ISCSI_HOST_RESET_TMO (1ULL << ISCSI_PARAM_HOST_RESET_TMO)
-#define ISCSI_PING_TMO (1ULL << ISCSI_PARAM_PING_TMO)
-#define ISCSI_RECV_TMO (1ULL << ISCSI_PARAM_RECV_TMO)
-#define ISCSI_IFACE_NAME (1ULL << ISCSI_PARAM_IFACE_NAME)
-#define ISCSI_ISID (1ULL << ISCSI_PARAM_ISID)
-#define ISCSI_INITIATOR_NAME (1ULL << ISCSI_PARAM_INITIATOR_NAME)
-#define ISCSI_TGT_RESET_TMO (1ULL << ISCSI_PARAM_TGT_RESET_TMO)
-#define ISCSI_TARGET_ALIAS (1ULL << ISCSI_PARAM_TARGET_ALIAS)
+/* iSCSI HBA params */
+enum iscsi_host_param {
+ ISCSI_HOST_PARAM_HWADDRESS,
+ ISCSI_HOST_PARAM_INITIATOR_NAME,
+ ISCSI_HOST_PARAM_NETDEV_NAME,
+ ISCSI_HOST_PARAM_IPADDRESS,
+ ISCSI_HOST_PARAM_PORT_STATE,
+ ISCSI_HOST_PARAM_PORT_SPEED,
+ ISCSI_HOST_PARAM_MAX,
+};
+
+/* portal type */
+#define PORTAL_TYPE_IPV4 "ipv4"
+#define PORTAL_TYPE_IPV6 "ipv6"
/* iSCSI Flash Target params */
enum iscsi_flashnode_param {
@@ -603,106 +620,32 @@ enum iscsi_flashnode_param {
ISCSI_FLASHNODE_MAX,
};
-#define ISCSI_FNODE_IS_FW_ASSIGNED_IPV6 \
- (1ULL << ISCSI_FLASHNODE_IS_FW_ASSIGNED_IPV6)
-#define ISCSI_FNODE_PORTAL_TYPE (1ULL << ISCSI_FLASHNODE_PORTAL_TYPE)
-#define ISCSI_FNODE_AUTO_SND_TGT_DISABLE \
- (1ULL << ISCSI_FLASHNODE_OPT_AUTO_SND_TGT_DISABLE)
-#define ISCSI_FNODE_DISCOVERY_SESS \
- (1ULL << ISCSI_FLASHNODE_OPT_DISCOVERY_SESS)
-#define ISCSI_FNODE_ENTRY_EN (1ULL << ISCSI_FLASHNODE_ENTRY_EN)
-#define ISCSI_FNODE_HDR_DGST_EN (1ULL << ISCSI_FLASHNODE_HDR_DGST_EN)
-#define ISCSI_FNODE_DATA_DGST_EN (1ULL << ISCSI_FLASHNODE_DATA_DGST_EN)
-#define ISCSI_FNODE_IMM_DATA_EN (1ULL << ISCSI_FLASHNODE_IMM_DATA_EN)
-#define ISCSI_FNODE_INITIAL_R2T_EN (1ULL << ISCSI_FLASHNODE_INITIAL_R2T_EN)
-#define ISCSI_FNODE_DATASEQ_INORDER \
- (1ULL << ISCSI_FLASHNODE_DATASEQ_INORDER)
-#define ISCSI_FNODE_PDU_INORDER (1ULL << ISCSI_FLASHNODE_PDU_INORDER)
-#define ISCSI_FNODE_CHAP_AUTH_EN (1ULL << ISCSI_FLASHNODE_CHAP_AUTH_EN)
-#define ISCSI_FNODE_SNACK_REQ_EN (1ULL << ISCSI_FLASHNODE_SNACK_REQ_EN)
-#define ISCSI_FNODE_DISCOVERY_LOGOUT_EN \
- (1ULL << ISCSI_FLASHNODE_DISCOVERY_LOGOUT_EN)
-#define ISCSI_FNODE_BIDI_CHAP_EN (1ULL << ISCSI_FLASHNODE_BIDI_CHAP_EN)
-#define ISCSI_FNODE_DISCOVERY_AUTH_OPTIONAL \
- (1ULL << ISCSI_FLASHNODE_DISCOVERY_AUTH_OPTIONAL)
-#define ISCSI_FNODE_ERL (1ULL << ISCSI_FLASHNODE_ERL)
-#define ISCSI_FNODE_TCP_TIMESTAMP_STAT \
- (1ULL << ISCSI_FLASHNODE_TCP_TIMESTAMP_STAT)
-#define ISCSI_FNODE_TCP_NAGLE_DISABLE \
- (1ULL << ISCSI_FLASHNODE_TCP_NAGLE_DISABLE)
-#define ISCSI_FNODE_TCP_WSF_DISABLE \
- (1ULL << ISCSI_FLASHNODE_TCP_WSF_DISABLE)
-#define ISCSI_FNODE_TCP_TIMER_SCALE \
- (1ULL << ISCSI_FLASHNODE_TCP_TIMER_SCALE)
-#define ISCSI_FNODE_TCP_TIMESTAMP_ENABLE \
- (1ULL << ISCSI_FLASHNODE_TCP_TIMESTAMP_ENABLE)
-#define ISCSI_FNODE_IP_FRAG_DISABLE \
- (1ULL << ISCSI_FLASHNODE_IP_FRAG_DISABLE)
-#define ISCSI_FNODE_MAX_RECV_DLENGTH \
- (1ULL << ISCSI_FLASHNODE_MAX_RECV_DLENGTH)
-#define ISCSI_FNODE_MAX_XMIT_DLENGTH \
- (1ULL << ISCSI_FLASHNODE_MAX_XMIT_DLENGTH)
-#define ISCSI_FNODE_FIRST_BURST (1ULL << ISCSI_FLASHNODE_FIRST_BURST)
-#define ISCSI_FNODE_DEF_TIME2WAIT (1ULL << ISCSI_FLASHNODE_DEF_TIME2WAIT)
-#define ISCSI_FNODE_DEF_TIME2RETAIN \
- (1ULL << ISCSI_FLASHNODE_DEF_TIME2RETAIN)
-#define ISCSI_FNODE_MAX_R2T (1ULL << ISCSI_FLASHNODE_MAX_R2T)
-#define ISCSI_FNODE_KEEPALIVE_TMO (1ULL << ISCSI_FLASHNODE_KEEPALIVE_TMO)
-#define ISCSI_FNODE_ISID (1ULL << ISCSI_FLASHNODE_ISID)
-#define ISCSI_FNODE_TSID (1ULL << ISCSI_FLASHNODE_TSID)
-#define ISCSI_FNODE_PORT (1ULL << ISCSI_FLASHNODE_PORT)
-#define ISCSI_FNODE_MAX_BURST (1ULL << ISCSI_FLASHNODE_MAX_BURST)
-#define ISCSI_FNODE_DEF_TMF_TMO (1ULL << ISCSI_FLASHNODE_DEF_TMF_TMO)
-#define ISCSI_FNODE_IPADDR (1ULL << ISCSI_FLASHNODE_IPADDR)
-#define ISCSI_FNODE_ALIAS (1ULL << ISCSI_FLASHNODE_ALIAS)
-#define ISCSI_FNODE_REDIRECT_IPADDR \
- (1ULL << ISCSI_FLASHNODE_REDIRECT_IPADDR)
-#define ISCSI_FNODE_MAX_SEGMENT_SIZE \
- (1ULL << ISCSI_FLASHNODE_MAX_SEGMENT_SIZE)
-#define ISCSI_FNODE_LOCAL_PORT (1ULL << ISCSI_FLASHNODE_LOCAL_PORT)
-#define ISCSI_FNODE_IPV4_TOS (1ULL << ISCSI_FLASHNODE_IPV4_TOS)
-#define ISCSI_FNODE_IPV6_TC (1ULL << ISCSI_FLASHNODE_IPV6_TC)
-#define ISCSI_FNODE_IPV6_FLOW_LABEL \
- (1ULL << ISCSI_FLASHNODE_IPV6_FLOW_LABEL)
-#define ISCSI_FNODE_NAME (1ULL << ISCSI_FLASHNODE_NAME)
-#define ISCSI_FNODE_TPGT (1ULL << ISCSI_FLASHNODE_TPGT)
-#define ISCSI_FNODE_LINK_LOCAL_IPV6 \
- (1ULL << ISCSI_FLASHNODE_LINK_LOCAL_IPV6)
-#define ISCSI_FNODE_DISCOVERY_PARENT_IDX \
- (1ULL << ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX)
-#define ISCSI_FNODE_DISCOVERY_PARENT_TYPE \
- (1ULL << ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE)
-#define ISCSI_FNODE_TCP_XMIT_WSF (1ULL << ISCSI_FLASHNODE_TCP_XMIT_WSF)
-#define ISCSI_FNODE_TCP_RECV_WSF (1ULL << ISCSI_FLASHNODE_TCP_RECV_WSF)
-#define ISCSI_FNODE_CHAP_IN_IDX (1ULL << ISCSI_FLASHNODE_CHAP_IN_IDX)
-#define ISCSI_FNODE_CHAP_OUT_IDX (1ULL << ISCSI_FLASHNODE_CHAP_OUT_IDX)
-#define ISCSI_FNODE_USERNAME (1ULL << ISCSI_FLASHNODE_USERNAME)
-#define ISCSI_FNODE_USERNAME_IN (1ULL << ISCSI_FLASHNODE_USERNAME_IN)
-#define ISCSI_FNODE_PASSWORD (1ULL << ISCSI_FLASHNODE_PASSWORD)
-#define ISCSI_FNODE_PASSWORD_IN (1ULL << ISCSI_FLASHNODE_PASSWORD_IN)
-#define ISCSI_FNODE_STATSN (1ULL << ISCSI_FLASHNODE_STATSN)
-#define ISCSI_FNODE_EXP_STATSN (1ULL << ISCSI_FLASHNODE_EXP_STATSN)
-#define ISCSI_FNODE_IS_BOOT_TGT (1ULL << ISCSI_FLASHNODE_IS_BOOT_TGT)
-
struct iscsi_flashnode_param_info {
uint32_t len; /* Actual length of the param */
uint16_t param; /* iscsi param value */
uint8_t value[0]; /* length sized value follows */
} __attribute__((__packed__));
-/* iSCSI HBA params */
-enum iscsi_host_param {
- ISCSI_HOST_PARAM_HWADDRESS,
- ISCSI_HOST_PARAM_INITIATOR_NAME,
- ISCSI_HOST_PARAM_NETDEV_NAME,
- ISCSI_HOST_PARAM_IPADDRESS,
- ISCSI_HOST_PARAM_MAX,
+enum iscsi_discovery_parent_type {
+ ISCSI_DISC_PARENT_UNKNOWN = 0x1,
+ ISCSI_DISC_PARENT_SENDTGT = 0x2,
+ ISCSI_DISC_PARENT_ISNS = 0x3,
};
-#define ISCSI_HOST_HWADDRESS (1ULL << ISCSI_HOST_PARAM_HWADDRESS)
-#define ISCSI_HOST_INITIATOR_NAME (1ULL << ISCSI_HOST_PARAM_INITIATOR_NAME)
-#define ISCSI_HOST_NETDEV_NAME (1ULL << ISCSI_HOST_PARAM_NETDEV_NAME)
-#define ISCSI_HOST_IPADDRESS (1ULL << ISCSI_HOST_PARAM_IPADDRESS)
+/* iSCSI port Speed */
+enum iscsi_port_speed {
+ ISCSI_PORT_SPEED_UNKNOWN = 0x1,
+ ISCSI_PORT_SPEED_10MBPS = 0x2,
+ ISCSI_PORT_SPEED_100MBPS = 0x4,
+ ISCSI_PORT_SPEED_1GBPS = 0x8,
+ ISCSI_PORT_SPEED_10GBPS = 0x10,
+};
+
+/* iSCSI port state */
+enum iscsi_port_state {
+ ISCSI_PORT_STATE_DOWN = 0x1,
+ ISCSI_PORT_STATE_UP = 0x2,
+};
/* iSCSI PING status/error code */
enum iscsi_ping_status_code {
@@ -739,7 +682,7 @@ enum iscsi_ping_status_code {
#define CAP_DIGEST_OFFLOAD 0x1000 /* offload hdr and data digests */
#define CAP_PADDING_OFFLOAD 0x2000 /* offload padding insertion, removal,
and verification */
-#define CAP_LOGIN_OFFLOAD 0x4000 /* offload normal session login */
+#define CAP_LOGIN_OFFLOAD 0x4000 /* offload session login */
/*
* These flags describes reason of stop_conn() call
@@ -807,7 +750,6 @@ enum chap_type_e {
#define ISCSI_CHAP_AUTH_NAME_MAX_LEN 256
#define ISCSI_CHAP_AUTH_SECRET_MAX_LEN 256
-
struct iscsi_chap_rec {
uint16_t chap_tbl_idx;
enum chap_type_e chap_type;
diff --git a/usr/initiator.c b/usr/initiator.c
index a3b24b7..79d1779 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -384,17 +384,7 @@ __session_create(node_rec_t *rec, struct iscsi_transport *t)
/* setup authentication variables for the session*/
iscsi_setup_authentication(session, &rec->session.auth);
- session->param_mask = ~0ULL;
- if (!(t->caps & CAP_MULTI_R2T))
- session->param_mask &= ~ISCSI_MAX_R2T;
- if (!(t->caps & CAP_HDRDGST))
- session->param_mask &= ~ISCSI_HDRDGST_EN;
- if (!(t->caps & CAP_DATADGST))
- session->param_mask &= ~ISCSI_DATADGST_EN;
- if (!(t->caps & CAP_MARKERS)) {
- session->param_mask &= ~ISCSI_IFMARKER_EN;
- session->param_mask &= ~ISCSI_OFMARKER_EN;
- }
+ iscsi_session_init_params(session);
hostno = iscsi_sysfs_get_host_no_from_hwinfo(&rec->iface, &rc);
if (!rc) {
diff --git a/usr/initiator.h b/usr/initiator.h
index d6dc02e..680640c 100644
--- a/usr/initiator.h
+++ b/usr/initiator.h
@@ -357,5 +357,6 @@ extern int iscsi_setup_portal(struct iscsi_conn *conn, char *address, int port);
extern int iscsi_set_net_config(struct iscsi_transport *t,
iscsi_session_t *session,
struct iface_rec *iface);
+extern void iscsi_session_init_params(struct iscsi_session *session);
#endif /* INITIATOR_H */
diff --git a/usr/initiator_common.c b/usr/initiator_common.c
index eb72795..0fb7edc 100644
--- a/usr/initiator_common.c
+++ b/usr/initiator_common.c
@@ -324,12 +324,32 @@ int iscsi_host_set_params(struct iscsi_session *session)
return 0;
}
+static inline void iscsi_session_clear_param(struct iscsi_session *session,
+ int param)
+{
+ session->param_mask &= ~(1ULL << param);
+}
+
+void iscsi_session_init_params(struct iscsi_session *session)
+{
+ session->param_mask = ~0ULL;
+ if (!(session->t->caps & CAP_MULTI_R2T))
+ iscsi_session_clear_param(session, ISCSI_PARAM_MAX_R2T);
+ if (!(session->t->caps & CAP_HDRDGST))
+ iscsi_session_clear_param(session, ISCSI_PARAM_HDRDGST_EN);
+ if (!(session->t->caps & CAP_DATADGST))
+ iscsi_session_clear_param(session, ISCSI_PARAM_DATADGST_EN);
+ if (!(session->t->caps & CAP_MARKERS)) {
+ iscsi_session_clear_param(session, ISCSI_PARAM_IFMARKER_EN);
+ iscsi_session_clear_param(session, ISCSI_PARAM_OFMARKER_EN);
+ }
+}
+
#define MAX_SESSION_PARAMS 32
int iscsi_session_set_params(struct iscsi_conn *conn)
{
struct iscsi_session *session = conn->session;
- struct iscsi_transport *t = session->t;
int i, rc;
uint32_t one = 1, zero = 0;
struct connparam {
@@ -499,22 +519,12 @@ int iscsi_session_set_params(struct iscsi_conn *conn)
},
};
- session->param_mask = ~0ULL;
- if (!(t->caps & CAP_MULTI_R2T))
- session->param_mask &= ~ISCSI_MAX_R2T;
- if (!(t->caps & CAP_HDRDGST))
- session->param_mask &= ~ISCSI_HDRDGST_EN;
- if (!(t->caps & CAP_DATADGST))
- session->param_mask &= ~ISCSI_DATADGST_EN;
- if (!(t->caps & CAP_MARKERS)) {
- session->param_mask &= ~ISCSI_IFMARKER_EN;
- session->param_mask &= ~ISCSI_OFMARKER_EN;
- }
+ iscsi_session_init_params(session);
/* some llds will send nops internally */
if (!iscsi_sysfs_session_supports_nop(session->id)) {
- session->param_mask &= ~ISCSI_PING_TMO;
- session->param_mask &= ~ISCSI_RECV_TMO;
+ iscsi_session_clear_param(session, ISCSI_PARAM_PING_TMO);
+ iscsi_session_clear_param(session, ISCSI_PARAM_RECV_TMO);
}
/* Entered full-feature phase! */