iscsi: add spdk_iscsi_read_parameters_from_config_file()

Move all of the code related to reading global iSCSI
parameters to a new function.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Iccbb75996b29b0b7a87c602042f13aaf7935d7e1

Reviewed-on: https://review.gerrithub.io/385493
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Jim Harris 2017-10-25 19:38:34 -07:00 committed by Daniel Verkamp
parent 6ffb301539
commit e19368049f

View File

@ -567,12 +567,9 @@ spdk_iscsi_log_globals(void)
}
static int
spdk_iscsi_app_read_parameters(void)
spdk_iscsi_read_parameters_from_config_file(struct spdk_conf_section *sp)
{
struct spdk_conf_section *sp;
const char *ag_tag;
const char *val;
int ag_tag_i;
int MaxSessions;
int MaxConnectionsPerSession;
int DefaultTime2Wait;
@ -581,12 +578,165 @@ spdk_iscsi_app_read_parameters(void)
int ErrorRecoveryLevel;
int timeout;
int nopininterval;
int rc;
int i;
int AllowDuplicateIsid;
int min_conn_per_core = 0;
int conn_idle_interval = 0;
int flush_timeout = 0;
const char *ag_tag;
int ag_tag_i;
int i;
val = spdk_conf_section_get_val(sp, "Comment");
if (val != NULL) {
SPDK_DEBUGLOG(SPDK_TRACE_ISCSI, "Comment %s\n", val);
}
val = spdk_conf_section_get_val(sp, "AuthFile");
if (val != NULL) {
free(g_spdk_iscsi.authfile);
g_spdk_iscsi.authfile = strdup(val);
if (!g_spdk_iscsi.authfile) {
perror("authfile");
return -ENOMEM;
}
}
val = spdk_conf_section_get_val(sp, "NodeBase");
if (val != NULL) {
free(g_spdk_iscsi.nodebase);
g_spdk_iscsi.nodebase = strdup(val);
if (!g_spdk_iscsi.nodebase) {
perror("nodebase");
free(g_spdk_iscsi.nodebase);
return -ENOMEM;
}
}
MaxSessions = spdk_conf_section_get_intval(sp, "MaxSessions");
if (MaxSessions >= 0) {
g_spdk_iscsi.MaxSessions = MaxSessions;
}
MaxConnectionsPerSession = spdk_conf_section_get_intval(sp, "MaxConnectionsPerSession");
if (MaxConnectionsPerSession >= 0) {
g_spdk_iscsi.MaxConnectionsPerSession = MaxConnectionsPerSession;
}
DefaultTime2Wait = spdk_conf_section_get_intval(sp, "DefaultTime2Wait");
if (DefaultTime2Wait >= 0) {
g_spdk_iscsi.DefaultTime2Wait = DefaultTime2Wait;
}
DefaultTime2Retain = spdk_conf_section_get_intval(sp, "DefaultTime2Retain");
if (DefaultTime2Retain >= 0) {
g_spdk_iscsi.DefaultTime2Retain = DEFAULT_DEFAULTTIME2RETAIN;
}
val = spdk_conf_section_get_val(sp, "ImmediateData");
if (val != NULL) {
if (strcasecmp(val, "Yes") == 0) {
ImmediateData = 1;
} else if (strcasecmp(val, "No") == 0) {
ImmediateData = 0;
} else {
SPDK_ERRLOG("unknown value %s\n", val);
return -1;
}
g_spdk_iscsi.ImmediateData = ImmediateData;
}
/* This option is only for test.
* If AllowDuplicateIsid is enabled, it allows different connections carrying
* TSIH=0 login the target within the same session.
*/
val = spdk_conf_section_get_val(sp, "AllowDuplicateIsid");
if (val != NULL) {
if (strcasecmp(val, "Yes") == 0) {
AllowDuplicateIsid = 1;
} else if (strcasecmp(val, "No") == 0) {
AllowDuplicateIsid = 0;
} else {
SPDK_ERRLOG("unknown value %s\n", val);
return -1;
}
g_spdk_iscsi.AllowDuplicateIsid = AllowDuplicateIsid;
}
ErrorRecoveryLevel = spdk_conf_section_get_intval(sp, "ErrorRecoveryLevel");
if (ErrorRecoveryLevel >= 0) {
if (ErrorRecoveryLevel > 2) {
SPDK_ERRLOG("ErrorRecoveryLevel %d not supported,\n", ErrorRecoveryLevel);
return -1;
}
g_spdk_iscsi.ErrorRecoveryLevel = ErrorRecoveryLevel;
}
timeout = spdk_conf_section_get_intval(sp, "Timeout");
if (timeout >= 0) {
g_spdk_iscsi.timeout = timeout;
}
flush_timeout = spdk_conf_section_get_intval(sp, "FlushTimeout");
if (flush_timeout >= 0) {
g_spdk_iscsi.flush_timeout = flush_timeout;
}
nopininterval = spdk_conf_section_get_intval(sp, "NopInInterval");
if (nopininterval >= 0) {
g_spdk_iscsi.nopininterval = nopininterval;
}
val = spdk_conf_section_get_val(sp, "DiscoveryAuthMethod");
if (val != NULL) {
g_spdk_iscsi.no_discovery_auth = 0;
for (i = 0; ; i++) {
val = spdk_conf_section_get_nmval(sp, "DiscoveryAuthMethod", 0, i);
if (val == NULL)
break;
if (strcasecmp(val, "CHAP") == 0) {
g_spdk_iscsi.req_discovery_auth = 1;
} else if (strcasecmp(val, "Mutual") == 0) {
g_spdk_iscsi.req_discovery_auth_mutual = 1;
} else if (strcasecmp(val, "Auto") == 0) {
g_spdk_iscsi.req_discovery_auth = 0;
g_spdk_iscsi.req_discovery_auth_mutual = 0;
} else if (strcasecmp(val, "None") == 0) {
g_spdk_iscsi.no_discovery_auth = 1;
g_spdk_iscsi.req_discovery_auth = 0;
g_spdk_iscsi.req_discovery_auth_mutual = 0;
} else {
SPDK_ERRLOG("unknown auth\n");
return -1;
}
}
}
val = spdk_conf_section_get_val(sp, "DiscoveryAuthGroup");
if (val != NULL) {
ag_tag = val;
if (strcasecmp(ag_tag, "None") == 0) {
ag_tag_i = 0;
} else {
if (strncasecmp(ag_tag, "AuthGroup",
strlen("AuthGroup")) != 0
|| sscanf(ag_tag, "%*[^0-9]%d", &ag_tag_i) != 1) {
SPDK_ERRLOG("auth group error\n");
return -1;
}
if (ag_tag_i == 0) {
SPDK_ERRLOG("invalid auth group %d\n", ag_tag_i);
return -1;
}
}
g_spdk_iscsi.discovery_auth_group = ag_tag_i;
}
min_conn_per_core = spdk_conf_section_get_intval(sp, "MinConnectionsPerCore");
if (min_conn_per_core >= 0)
spdk_iscsi_conn_set_min_per_core(min_conn_per_core);
conn_idle_interval = spdk_conf_section_get_intval(sp, "MinConnectionIdleInterval");
if (conn_idle_interval > 0)
spdk_iscsi_set_min_conn_idle_interval(conn_idle_interval);
return 0;
}
static int
spdk_iscsi_app_read_parameters(void)
{
struct spdk_conf_section *sp;
int rc;
g_spdk_iscsi.MaxSessions = DEFAULT_MAX_SESSIONS;
g_spdk_iscsi.MaxConnectionsPerSession = DEFAULT_MAX_CONNECTIONS_PER_SESSION;
@ -621,37 +771,7 @@ spdk_iscsi_app_read_parameters(void)
return -1;
}
val = spdk_conf_section_get_val(sp, "Comment");
if (val != NULL) {
SPDK_DEBUGLOG(SPDK_TRACE_ISCSI, "Comment %s\n", val);
}
val = spdk_conf_section_get_val(sp, "AuthFile");
if (val != NULL) {
free(g_spdk_iscsi.authfile);
g_spdk_iscsi.authfile = strdup(val);
if (!g_spdk_iscsi.authfile) {
perror("authfile");
return -ENOMEM;
}
}
/* ISCSI Global */
val = spdk_conf_section_get_val(sp, "NodeBase");
if (val != NULL) {
free(g_spdk_iscsi.nodebase);
g_spdk_iscsi.nodebase = strdup(val);
if (!g_spdk_iscsi.nodebase) {
perror("nodebase");
free(g_spdk_iscsi.nodebase);
return -ENOMEM;
}
}
MaxSessions = spdk_conf_section_get_intval(sp, "MaxSessions");
if (MaxSessions >= 0) {
g_spdk_iscsi.MaxSessions = MaxSessions;
}
spdk_iscsi_read_parameters_from_config_file(sp);
g_spdk_iscsi.session = spdk_dma_zmalloc(sizeof(void *) * g_spdk_iscsi.MaxSessions, 0, NULL);
if (!g_spdk_iscsi.session) {
@ -659,11 +779,6 @@ spdk_iscsi_app_read_parameters(void)
return -1;
}
MaxConnectionsPerSession = spdk_conf_section_get_intval(sp, "MaxConnectionsPerSession");
if (MaxConnectionsPerSession >= 0) {
g_spdk_iscsi.MaxConnectionsPerSession = MaxConnectionsPerSession;
}
/*
* For now, just support same number of total connections, rather
* than MaxSessions * MaxConnectionsPerSession. After we add better
@ -672,16 +787,6 @@ spdk_iscsi_app_read_parameters(void)
*/
g_spdk_iscsi.MaxConnections = g_spdk_iscsi.MaxSessions;
DefaultTime2Wait = spdk_conf_section_get_intval(sp, "DefaultTime2Wait");
if (DefaultTime2Wait >= 0) {
g_spdk_iscsi.DefaultTime2Wait = DefaultTime2Wait;
}
DefaultTime2Retain = spdk_conf_section_get_intval(sp, "DefaultTime2Retain");
if (DefaultTime2Retain >= 0) {
g_spdk_iscsi.DefaultTime2Retain = DEFAULT_DEFAULTTIME2RETAIN;
}
if (g_spdk_iscsi.MaxSessions == 0 || g_spdk_iscsi.MaxSessions > 0xffff) {
SPDK_ERRLOG("%d MaxSessions not supported, must be between 1 and 65535.\n",
g_spdk_iscsi.MaxSessions);
@ -704,121 +809,17 @@ spdk_iscsi_app_read_parameters(void)
return -1;
}
val = spdk_conf_section_get_val(sp, "ImmediateData");
if (val != NULL) {
if (strcasecmp(val, "Yes") == 0) {
ImmediateData = 1;
} else if (strcasecmp(val, "No") == 0) {
ImmediateData = 0;
} else {
SPDK_ERRLOG("unknown value %s\n", val);
return -1;
}
g_spdk_iscsi.ImmediateData = ImmediateData;
}
/* This option is only for test.
* If AllowDuplicateIsid is enabled, it allows different connections carrying
* TSIH=0 login the target within the same session.
*/
val = spdk_conf_section_get_val(sp, "AllowDuplicateIsid");
if (val != NULL) {
if (strcasecmp(val, "Yes") == 0) {
AllowDuplicateIsid = 1;
} else if (strcasecmp(val, "No") == 0) {
AllowDuplicateIsid = 0;
} else {
SPDK_ERRLOG("unknown value %s\n", val);
return -1;
}
g_spdk_iscsi.AllowDuplicateIsid = AllowDuplicateIsid;
}
ErrorRecoveryLevel = spdk_conf_section_get_intval(sp, "ErrorRecoveryLevel");
if (ErrorRecoveryLevel >= 0) {
if (ErrorRecoveryLevel > 2) {
SPDK_ERRLOG("ErrorRecoveryLevel %d not supported,\n", ErrorRecoveryLevel);
return -1;
}
g_spdk_iscsi.ErrorRecoveryLevel = ErrorRecoveryLevel;
}
timeout = spdk_conf_section_get_intval(sp, "Timeout");
if (timeout >= 0) {
g_spdk_iscsi.timeout = timeout;
}
flush_timeout = spdk_conf_section_get_intval(sp, "FlushTimeout");
if (flush_timeout >= 0) {
g_spdk_iscsi.flush_timeout = flush_timeout;
}
g_spdk_iscsi.flush_timeout *= (spdk_get_ticks_hz() >> 20);
nopininterval = spdk_conf_section_get_intval(sp, "NopInInterval");
if (nopininterval >= 0) {
g_spdk_iscsi.nopininterval = nopininterval;
}
if (g_spdk_iscsi.nopininterval > MAX_NOPININTERVAL) {
SPDK_ERRLOG("%d NopInInterval too big, using %d instead.\n",
g_spdk_iscsi.nopininterval, DEFAULT_NOPININTERVAL);
g_spdk_iscsi.nopininterval = DEFAULT_NOPININTERVAL;
}
val = spdk_conf_section_get_val(sp, "DiscoveryAuthMethod");
if (val != NULL) {
g_spdk_iscsi.no_discovery_auth = 0;
for (i = 0; ; i++) {
val = spdk_conf_section_get_nmval(sp, "DiscoveryAuthMethod", 0, i);
if (val == NULL)
break;
if (strcasecmp(val, "CHAP") == 0) {
g_spdk_iscsi.req_discovery_auth = 1;
} else if (strcasecmp(val, "Mutual") == 0) {
g_spdk_iscsi.req_discovery_auth_mutual = 1;
} else if (strcasecmp(val, "Auto") == 0) {
g_spdk_iscsi.req_discovery_auth = 0;
g_spdk_iscsi.req_discovery_auth_mutual = 0;
} else if (strcasecmp(val, "None") == 0) {
g_spdk_iscsi.no_discovery_auth = 1;
g_spdk_iscsi.req_discovery_auth = 0;
g_spdk_iscsi.req_discovery_auth_mutual = 0;
} else {
SPDK_ERRLOG("unknown auth\n");
return -1;
}
}
}
if (g_spdk_iscsi.req_discovery_auth_mutual && !g_spdk_iscsi.req_discovery_auth) {
SPDK_ERRLOG("Mutual but not CHAP\n");
return -1;
}
val = spdk_conf_section_get_val(sp, "DiscoveryAuthGroup");
if (val != NULL) {
ag_tag = val;
if (strcasecmp(ag_tag, "None") == 0) {
ag_tag_i = 0;
} else {
if (strncasecmp(ag_tag, "AuthGroup",
strlen("AuthGroup")) != 0
|| sscanf(ag_tag, "%*[^0-9]%d", &ag_tag_i) != 1) {
SPDK_ERRLOG("auth group error\n");
return -1;
}
if (ag_tag_i == 0) {
SPDK_ERRLOG("invalid auth group %d\n", ag_tag_i);
return -1;
}
}
g_spdk_iscsi.discovery_auth_group = ag_tag_i;
}
min_conn_per_core = spdk_conf_section_get_intval(sp, "MinConnectionsPerCore");
if (min_conn_per_core >= 0)
spdk_iscsi_conn_set_min_per_core(min_conn_per_core);
conn_idle_interval = spdk_conf_section_get_intval(sp, "MinConnectionIdleInterval");
if (conn_idle_interval > 0)
spdk_iscsi_set_min_conn_idle_interval(conn_idle_interval);
spdk_iscsi_log_globals();