On 3/2/2012 10:31 AM, Doug Ledford wrote: > On 3/2/2012 5:30 AM, Alex Netes wrote: >> What the default opensm.conf would be used for? Just as a reference to the >> default values? > > No, he's referring to having a default config file that is parsed, then > an override config file that is parsed where you only put options you > want to update in the override config file. That way you could have, > for instance, a default opensm.conf in the normal location and totally > unedited so that it gets updated with each update of the opensm rpm, > then you could create an opensm.conf.1 that is empty except for just a > guid setting, a subnet_prefix setting, maybe a cache dir setting, etc. > In that way, if say the default routing engine gets a new option in the > future, your override config file won't already be populated with the > old stuff. It's a means of inheritance that is functionally identical > to specifying all this stuff on the command line, but doesn't require a > huge command line or a complex init script.
And for what it's worth, it could be as simply done as the attached (untested, but compiled) patch. -- Doug Ledford <[email protected]> GPG KeyID: 0E572FDD http://people.redhat.com/dledford Infiniband specific RPMs available at http://people.redhat.com/dledford/Infiniband
diff -up opensm-3.3.13/opensm/main.c.config opensm-3.3.13/opensm/main.c
--- opensm-3.3.13/opensm/main.c.config 2012-03-02 10:35:26.783996345 -0500
+++ opensm-3.3.13/opensm/main.c 2012-03-02 10:46:33.471939369 -0500
@@ -131,6 +131,13 @@ static void show_usage(void)
" The name of the OpenSM config file. When not
specified\n"
" " OSM_DEFAULT_CONFIG_FILE
" will be used (if exists).\n\n");
+ printf("--extra-config, -E <file-name>\n"
+ " The name of an OpenSM config file used to over ride\n"
+ " the entries in the primary config file. This is\n"
+ " useful when you have more than one opensm instance\n"
+ " to manage and you want them all to have a central,\n"
+ " shared set of options and you want a second,
smaller\n"
+ " config file to hold their fabric specific
options.\n\n");
printf("--create-config, -c <file-name>\n"
" OpenSM will dump its configuration to the specified
file and exit.\n"
" This is a way to generate OpenSM configuration file
template.\n\n");
@@ -569,10 +576,10 @@ int main(int argc, char *argv[])
boolean_t run_once_flag = FALSE;
int32_t vendor_debug = 0;
int next_option;
- char *conf_template = NULL, *config_file = NULL;
+ char *conf_template, *config_file, *extra_config_file;
uint32_t val;
const char *const short_option =
-
"F:c:i:w:O:f:ed:D:g:l:L:s:t:a:u:m:X:R:zM:U:S:P:Y:ANBIQvVhoryxp:n:q:k:C:G:H:";
+
"F:E:c:i:w:O:f:ed:D:g:l:L:s:t:a:u:m:X:R:zM:U:S:P:Y:ANBIQvVhoryxp:n:q:k:C:G:H:";
/*
In the array below, the 2nd parameter specifies the number
@@ -584,6 +591,7 @@ int main(int argc, char *argv[])
const struct option long_option[] = {
{"version", 0, NULL, 12},
{"config", 1, NULL, 'F'},
+ {"extra-config", 1, NULL, 'E'},
{"create-config", 1, NULL, 'c'},
{"debug", 1, NULL, 'd'},
{"guid", 1, NULL, 'g'},
@@ -647,6 +655,7 @@ int main(int argc, char *argv[])
{"torus_config", 1, NULL, 10},
{NULL, 0, NULL, 0} /* Required at the end of the array */
};
+ conf_template = config_file = extra_config_file = NULL;
/* force stdout to be line-buffered */
setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
@@ -672,6 +681,11 @@ int main(int argc, char *argv[])
config_file = optarg;
printf("Config file is `%s`:\n", config_file);
break;
+ case 'E':
+ extra_config_file = optarg;
+ printf("Extra Config file is `%s`:\n",
+ extra_config_file);
+ break;
default:
break;
}
@@ -687,6 +701,11 @@ int main(int argc, char *argv[])
if (osm_subn_parse_conf_file(config_file, &opt) < 0)
printf("\nFail to parse config file \'%s\'\n", config_file);
+ if (extra_config_file)
+ if (osm_subn_parse_conf_file(extra_config_file, &opt) < 0)
+ printf("\nFailed to parse extra config file `%s`\n",
+ extra_config_file);
+
printf("Command Line Arguments:\n");
do {
next_option = getopt_long_only(argc, argv, short_option,
signature.asc
Description: OpenPGP digital signature
