[ofa-general] [PATCH 1/4] opensm: pass file name as parameter to config parser funcs

Sasha Khapyorsky sashak at voltaire.com
Tue Apr 8 18:10:22 PDT 2008


Functions osm_subn_parse_conf_file() and osm_subn_write_conf_file() will
get config file name as parameter. Also it is stored as part of config
options and used by osm_subn_rescan_conf_files().

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
 opensm/include/opensm/osm_subnet.h |   10 +++++-
 opensm/opensm/main.c               |   13 +++++++-
 opensm/opensm/osm_subnet.c         |   53 ++++++++---------------------------
 3 files changed, 31 insertions(+), 45 deletions(-)

diff --git a/opensm/include/opensm/osm_subnet.h b/opensm/include/opensm/osm_subnet.h
index b1dd659..98afbd4 100644
--- a/opensm/include/opensm/osm_subnet.h
+++ b/opensm/include/opensm/osm_subnet.h
@@ -205,6 +205,7 @@ typedef struct _osm_qos_options_t {
 * SYNOPSIS
 */
 typedef struct _osm_subn_opt {
+	char *config_file;
 	ib_net64_t guid;
 	ib_net64_t m_key;
 	ib_net64_t sm_key;
@@ -289,6 +290,9 @@ typedef struct _osm_subn_opt {
 /*
 * FIELDS
 *
+*	config_file
+*		The name of the config file.
+*
 *	guid
 *		The port guid that the SM is binding to.
 *
@@ -1057,7 +1061,8 @@ void osm_subn_set_default_opt(IN osm_subn_opt_t * const p_opt);
 *
 * SYNOPSIS
 */
-ib_api_status_t osm_subn_parse_conf_file(IN osm_subn_opt_t * const p_opt);
+ib_api_status_t osm_subn_parse_conf_file(char *conf_file,
+					 IN osm_subn_opt_t * const p_opt);
 /*
 * PARAMETERS
 *
@@ -1109,7 +1114,8 @@ ib_api_status_t osm_subn_rescan_conf_files(IN osm_subn_t * const p_subn);
 *
 * SYNOPSIS
 */
-ib_api_status_t osm_subn_write_conf_file(IN osm_subn_opt_t * const p_opt);
+ib_api_status_t osm_subn_write_conf_file(char *file_name,
+					 IN osm_subn_opt_t * const p_opt);
 /*
 * PARAMETERS
 *
diff --git a/opensm/opensm/main.c b/opensm/opensm/main.c
index fb41d50..91ee143 100644
--- a/opensm/opensm/main.c
+++ b/opensm/opensm/main.c
@@ -589,6 +589,8 @@ int main(int argc, char *argv[])
 {
 	osm_opensm_t osm;
 	osm_subn_opt_t opt;
+	char conf_file[256];
+	char *cache_dir;
 	ib_net64_t sm_key = 0;
 	ib_api_status_t status;
 	uint32_t temp, dbg_lvl;
@@ -674,7 +676,14 @@ int main(int argc, char *argv[])
 	printf("%s\n", OSM_VERSION);
 
 	osm_subn_set_default_opt(&opt);
-	if (osm_subn_parse_conf_file(&opt) != IB_SUCCESS)
+
+	/* try to open the options file from the cache dir */
+	cache_dir = getenv("OSM_CACHE_DIR");
+	if (!cache_dir || !(*cache_dir))
+		cache_dir = OSM_DEFAULT_CACHE_DIR;
+	snprintf(conf_file, sizeof(conf_file), "%s/opensm.opts", cache_dir);
+
+	if (osm_subn_parse_conf_file(conf_file, &opt) != IB_SUCCESS)
 		printf("\nosm_subn_parse_conf_file failed!\n");
 
 	printf("Command Line Arguments:\n");
@@ -1013,7 +1022,7 @@ int main(int argc, char *argv[])
 		opt.guid = get_port_guid(&osm, opt.guid);
 
 	if (cache_options == TRUE
-	    && osm_subn_write_conf_file(&opt) != IB_SUCCESS)
+	    && osm_subn_write_conf_file(conf_file, &opt) != IB_SUCCESS)
 		printf("\nosm_subn_write_conf_file failed!\n");
 
 	status = osm_opensm_bind(&osm, opt.guid);
diff --git a/opensm/opensm/osm_subnet.c b/opensm/opensm/osm_subnet.c
index 47d735f..f3f4c52 100644
--- a/opensm/opensm/osm_subnet.c
+++ b/opensm/opensm/osm_subnet.c
@@ -71,14 +71,6 @@
 #include <opensm/osm_event_plugin.h>
 #include <opensm/osm_qos_policy.h>
 
-#if defined(PATH_MAX)
-#define OSM_PATH_MAX	(PATH_MAX + 1)
-#elif defined (_POSIX_PATH_MAX)
-#define OSM_PATH_MAX	(_POSIX_PATH_MAX + 1)
-#else
-#define OSM_PATH_MAX	256
-#endif
-
 /**********************************************************************
  **********************************************************************/
 void osm_subn_construct(IN osm_subn_t * const p_subn)
@@ -787,26 +779,20 @@ osm_parse_prefix_routes_file(IN osm_subn_t * const p_subn)
  **********************************************************************/
 ib_api_status_t osm_subn_rescan_conf_files(IN osm_subn_t * const p_subn)
 {
-	char *p_cache_dir = getenv("OSM_CACHE_DIR");
-	char file_name[OSM_PATH_MAX];
 	FILE *opts_file;
 	char line[1024];
 	char *p_key, *p_val, *p_last;
 
-	/* try to open the options file from the cache dir */
-	if (!p_cache_dir || !(*p_cache_dir))
-		p_cache_dir = OSM_DEFAULT_CACHE_DIR;
+	if (!p_subn->opt.config_file)
+		return 0;
 
-	strcpy(file_name, p_cache_dir);
-	strcat(file_name, "/opensm.opts");
-
-	opts_file = fopen(file_name, "r");
+	opts_file = fopen(p_subn->opt.config_file, "r");
 	if (!opts_file) {
 		if (errno == ENOENT)
 			return IB_SUCCESS;
 		OSM_LOG(&p_subn->p_osm->log, OSM_LOG_ERROR,
 			"cannot open file \'%s\': %s\n",
-			file_name, strerror(errno));
+			p_subn->opt.config_file, strerror(errno));
 		return IB_ERROR;
 	}
 
@@ -1142,21 +1128,13 @@ static void subn_verify_conf_file(IN osm_subn_opt_t * const p_opts)
 
 /**********************************************************************
  **********************************************************************/
-ib_api_status_t osm_subn_parse_conf_file(IN osm_subn_opt_t * const p_opts)
+ib_api_status_t osm_subn_parse_conf_file(char *file_name,
+					 IN osm_subn_opt_t * const p_opts)
 {
-	char *p_cache_dir = getenv("OSM_CACHE_DIR");
-	char file_name[OSM_PATH_MAX];
-	FILE *opts_file;
 	char line[1024];
+	FILE *opts_file;
 	char *p_key, *p_val, *p_last;
 
-	/* try to open the options file from the cache dir */
-	if (!p_cache_dir || !(*p_cache_dir))
-		p_cache_dir = OSM_DEFAULT_CACHE_DIR;
-
-	strcpy(file_name, p_cache_dir);
-	strcat(file_name, "/opensm.opts");
-
 	opts_file = fopen(file_name, "r");
 	if (!opts_file) {
 		if (errno == ENOENT)
@@ -1166,10 +1144,11 @@ ib_api_status_t osm_subn_parse_conf_file(IN osm_subn_opt_t * const p_opts)
 		return IB_ERROR;
 	}
 
-	sprintf(line, " Reading Cached Option File: %s\n", file_name);
-	printf(line);
+	printf(" Reading Cached Option File: %s\n", file_name);
 	cl_log_event("OpenSM", CL_LOG_INFO, line, NULL, 0);
 
+	p_opts->config_file = file_name;
+
 	while (fgets(line, 1023, opts_file) != NULL) {
 		/* get the first token */
 		p_key = strtok_r(line, " \t\n", &p_last);
@@ -1405,19 +1384,11 @@ ib_api_status_t osm_subn_parse_conf_file(IN osm_subn_opt_t * const p_opts)
 
 /**********************************************************************
  **********************************************************************/
-ib_api_status_t osm_subn_write_conf_file(IN osm_subn_opt_t * const p_opts)
+ib_api_status_t osm_subn_write_conf_file(char *file_name,
+					 IN osm_subn_opt_t * const p_opts)
 {
-	char *p_cache_dir = getenv("OSM_CACHE_DIR");
-	char file_name[OSM_PATH_MAX];
 	FILE *opts_file;
 
-	/* try to open the options file from the cache dir */
-	if (!p_cache_dir || !(*p_cache_dir))
-		p_cache_dir = OSM_DEFAULT_CACHE_DIR;
-
-	strcpy(file_name, p_cache_dir);
-	strcat(file_name, "/opensm.opts");
-
 	opts_file = fopen(file_name, "w");
 	if (!opts_file) {
 		printf("cannot open file \'%s\' for writing: %s\n",
-- 
1.5.4.1.122.gaa8d




More information about the general mailing list