Commit e1936804 authored by Jim Harris's avatar Jim Harris Committed by Daniel Verkamp
Browse files

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: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Iccbb75996b29b0b7a87c602042f13aaf7935d7e1

Reviewed-on: https://review.gerrithub.io/385493


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 6ffb3015
Loading
Loading
Loading
Loading
+96 −95
Original line number Diff line number Diff line
@@ -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,45 +578,13 @@ 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;

	g_spdk_iscsi.MaxSessions = DEFAULT_MAX_SESSIONS;
	g_spdk_iscsi.MaxConnectionsPerSession = DEFAULT_MAX_CONNECTIONS_PER_SESSION;
	g_spdk_iscsi.DefaultTime2Wait = DEFAULT_DEFAULTTIME2WAIT;
	g_spdk_iscsi.DefaultTime2Retain = DEFAULT_DEFAULTTIME2RETAIN;
	g_spdk_iscsi.ImmediateData = DEFAULT_IMMEDIATEDATA;
	g_spdk_iscsi.AllowDuplicateIsid = 0;
	g_spdk_iscsi.ErrorRecoveryLevel = DEFAULT_ERRORRECOVERYLEVEL;
	g_spdk_iscsi.timeout = DEFAULT_TIMEOUT;
	g_spdk_iscsi.flush_timeout = DEFAULT_FLUSH_TIMEOUT;
	g_spdk_iscsi.nopininterval = DEFAULT_NOPININTERVAL;
	g_spdk_iscsi.no_discovery_auth = 0;
	g_spdk_iscsi.req_discovery_auth = 0;
	g_spdk_iscsi.req_discovery_auth_mutual = 0;
	g_spdk_iscsi.discovery_auth_group = 0;
	g_spdk_iscsi.authfile = strdup(SPDK_ISCSI_DEFAULT_AUTHFILE);
	if (!g_spdk_iscsi.authfile) {
		perror("authfile");
		return -ENOMEM;
	}
	g_spdk_iscsi.nodebase = strdup(SPDK_ISCSI_DEFAULT_NODEBASE);
	if (!g_spdk_iscsi.nodebase) {
		perror("nodebase");
		return -ENOMEM;
	}

	/* Process parameters */
	SPDK_DEBUGLOG(SPDK_TRACE_ISCSI, "spdk_iscsi_app_read_parameters\n");
	sp = spdk_conf_find_section(NULL, "iSCSI");
	if (sp == NULL) {
		SPDK_ERRLOG("iSCSI config section not found.\n");
		return -1;
	}
	const char *ag_tag;
	int ag_tag_i;
	int i;

	val = spdk_conf_section_get_val(sp, "Comment");
	if (val != NULL) {
@@ -636,7 +601,6 @@ spdk_iscsi_app_read_parameters(void)
		}
	}

	/* ISCSI Global */
	val = spdk_conf_section_get_val(sp, "NodeBase");
	if (val != NULL) {
		free(g_spdk_iscsi.nodebase);
@@ -653,57 +617,18 @@ spdk_iscsi_app_read_parameters(void)
		g_spdk_iscsi.MaxSessions = MaxSessions;
	}

	g_spdk_iscsi.session = spdk_dma_zmalloc(sizeof(void *) * g_spdk_iscsi.MaxSessions, 0, NULL);
	if (!g_spdk_iscsi.session) {
		perror("Unable to allocate session pointer array\n");
		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
	 *  handling for low resource conditions from our various buffer
	 *  pools, we can bump this up to support more connections.
	 */
	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);
		return -1;
	}

	if (g_spdk_iscsi.MaxConnectionsPerSession == 0 ||
	    g_spdk_iscsi.MaxConnectionsPerSession > 0xffff) {
		SPDK_ERRLOG("%d MaxConnectionsPerSession not supported,"
			    "must be between 1 and 65535.\n", g_spdk_iscsi.MaxConnectionsPerSession);
		return -1;
	}

	if (g_spdk_iscsi.DefaultTime2Wait > 3600) {
		SPDK_ERRLOG("DefaultTime2Wait(%d) > 3600\n", g_spdk_iscsi.DefaultTime2Wait);
		return -1;
	}
	if (g_spdk_iscsi.DefaultTime2Retain > 3600) {
		SPDK_ERRLOG("DefaultTime2Retain(%d) > 3600\n", g_spdk_iscsi.DefaultTime2Retain);
		return -1;
	}

	val = spdk_conf_section_get_val(sp, "ImmediateData");
	if (val != NULL) {
		if (strcasecmp(val, "Yes") == 0) {
@@ -733,7 +658,6 @@ spdk_iscsi_app_read_parameters(void)
		}
		g_spdk_iscsi.AllowDuplicateIsid = AllowDuplicateIsid;
	}

	ErrorRecoveryLevel = spdk_conf_section_get_intval(sp, "ErrorRecoveryLevel");
	if (ErrorRecoveryLevel >= 0) {
		if (ErrorRecoveryLevel > 2) {
@@ -742,29 +666,18 @@ spdk_iscsi_app_read_parameters(void)
		}
		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;
@@ -789,10 +702,6 @@ spdk_iscsi_app_read_parameters(void)
			}
		}
	}
	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;
@@ -820,6 +729,98 @@ spdk_iscsi_app_read_parameters(void)
	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;
	g_spdk_iscsi.DefaultTime2Wait = DEFAULT_DEFAULTTIME2WAIT;
	g_spdk_iscsi.DefaultTime2Retain = DEFAULT_DEFAULTTIME2RETAIN;
	g_spdk_iscsi.ImmediateData = DEFAULT_IMMEDIATEDATA;
	g_spdk_iscsi.AllowDuplicateIsid = 0;
	g_spdk_iscsi.ErrorRecoveryLevel = DEFAULT_ERRORRECOVERYLEVEL;
	g_spdk_iscsi.timeout = DEFAULT_TIMEOUT;
	g_spdk_iscsi.flush_timeout = DEFAULT_FLUSH_TIMEOUT;
	g_spdk_iscsi.nopininterval = DEFAULT_NOPININTERVAL;
	g_spdk_iscsi.no_discovery_auth = 0;
	g_spdk_iscsi.req_discovery_auth = 0;
	g_spdk_iscsi.req_discovery_auth_mutual = 0;
	g_spdk_iscsi.discovery_auth_group = 0;
	g_spdk_iscsi.authfile = strdup(SPDK_ISCSI_DEFAULT_AUTHFILE);
	if (!g_spdk_iscsi.authfile) {
		perror("authfile");
		return -ENOMEM;
	}
	g_spdk_iscsi.nodebase = strdup(SPDK_ISCSI_DEFAULT_NODEBASE);
	if (!g_spdk_iscsi.nodebase) {
		perror("nodebase");
		return -ENOMEM;
	}

	/* Process parameters */
	SPDK_DEBUGLOG(SPDK_TRACE_ISCSI, "spdk_iscsi_app_read_parameters\n");
	sp = spdk_conf_find_section(NULL, "iSCSI");
	if (sp == NULL) {
		SPDK_ERRLOG("iSCSI config section not found.\n");
		return -1;
	}

	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) {
		perror("Unable to allocate session pointer array\n");
		return -1;
	}

	/*
	 * For now, just support same number of total connections, rather
	 *  than MaxSessions * MaxConnectionsPerSession.  After we add better
	 *  handling for low resource conditions from our various buffer
	 *  pools, we can bump this up to support more connections.
	 */
	g_spdk_iscsi.MaxConnections = g_spdk_iscsi.MaxSessions;

	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);
		return -1;
	}

	if (g_spdk_iscsi.MaxConnectionsPerSession == 0 ||
	    g_spdk_iscsi.MaxConnectionsPerSession > 0xffff) {
		SPDK_ERRLOG("%d MaxConnectionsPerSession not supported,"
			    "must be between 1 and 65535.\n", g_spdk_iscsi.MaxConnectionsPerSession);
		return -1;
	}

	if (g_spdk_iscsi.DefaultTime2Wait > 3600) {
		SPDK_ERRLOG("DefaultTime2Wait(%d) > 3600\n", g_spdk_iscsi.DefaultTime2Wait);
		return -1;
	}
	if (g_spdk_iscsi.DefaultTime2Retain > 3600) {
		SPDK_ERRLOG("DefaultTime2Retain(%d) > 3600\n", g_spdk_iscsi.DefaultTime2Retain);
		return -1;
	}

	g_spdk_iscsi.flush_timeout *= (spdk_get_ticks_hz() >> 20);

	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;
	}
	if (g_spdk_iscsi.req_discovery_auth_mutual && !g_spdk_iscsi.req_discovery_auth) {
		SPDK_ERRLOG("Mutual but not CHAP\n");
		return -1;
	}

	spdk_iscsi_log_globals();

	/* portal groups */