[ofa-general] [PATCH] Opensm: main exit codes
Timothy A. Meier
meier3 at llnl.gov
Tue Nov 18 17:10:37 PST 2008
Hey Sasha,
I thought it would be useful to define a set of exit codes for opensm. A quick examination of main.c
showed a few different ways to terminate. How about this patch? Obviously this doesn't catch every
possible exit scenario, but its a start that can be built upon.
>From d38854b804caac77ba7985fdf2314e412420cdad Mon Sep 17 00:00:00 2001
From: Tim Meier <meier3 at llnl.gov>
Date: Tue, 18 Nov 2008 16:51:14 -0800
Subject: [PATCH] Opensm: main exit codes
Defined a set of exits codes and modified main() to use them as much as
possible.
Signed-off-by: Tim Meier <meier3 at llnl.gov>
---
opensm/include/opensm/osm_opensm.h | 24 ++++++++++++++++++++++++
opensm/opensm/main.c | 30 ++++++++++++++++--------------
2 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/opensm/include/opensm/osm_opensm.h b/opensm/include/opensm/osm_opensm.h
index c121be4..5e78dba 100644
--- a/opensm/include/opensm/osm_opensm.h
+++ b/opensm/include/opensm/osm_opensm.h
@@ -87,6 +87,30 @@ BEGIN_C_DECLS
* Steve King, Intel
*
*********/
+/****d* OpenSM: OpenSM/osm_exit_type_t
+* NAME
+* osm_exit_type_t
+*
+* DESCRIPTION
+* Enumerates the possible exit codes that
+* are provided by OpenSM.
+*
+* SYNOPSIS
+*/
+typedef enum _osm_exit_type {
+ OSM_EXIT_TYPE_NORMAL = 0,
+ OSM_EXIT_TYPE_GENERIC_ERR,
+ OSM_EXIT_TYPE_USAGE,
+ OSM_EXIT_TYPE_FORK_ERR,
+ OSM_EXIT_TYPE_DIFFERENT_DEBUG_MODE,
+ OSM_EXIT_TYPE_DUPLICATE_OSM_GUID,
+ OSM_EXIT_TYPE_CONFIG_PARSE_ERR,
+ OSM_EXIT_TYPE_CONF_FILE_WRITE_ERR,
+ OSM_EXIT_TYPE_INVALID_ARG_VAL,
+ OSM_EXIT_TYPE_UNKNOWN_CMDLINE_ARG,
+ OSM_EXIT_TYPE_UNKNOWN
+} osm_exit_type_t;
+/***********/
/****d* OpenSM: OpenSM/osm_routing_engine_type_t
* NAME
* osm_routing_engine_type_t
diff --git a/opensm/opensm/main.c b/opensm/opensm/main.c
index 53648d6..d3aa55c 100644
--- a/opensm/opensm/main.c
+++ b/opensm/opensm/main.c
@@ -347,7 +347,7 @@ static void show_usage(void)
printf("--help, -h, -?\n"
" Display this usage info then exit.\n\n");
fflush(stdout);
- exit(2);
+ exit(OSM_EXIT_TYPE_USAGE);
}
/**********************************************************************
@@ -451,17 +451,17 @@ static int daemonize(osm_opensm_t * osm)
if ((pid = fork()) < 0) {
perror("fork");
- exit(-1);
+ exit(OSM_EXIT_TYPE_FORK_ERR);
} else if (pid > 0)
- exit(0);
+ exit(OSM_EXIT_TYPE_NORMAL);
setsid();
if ((pid = fork()) < 0) {
perror("fork");
- exit(-1);
+ exit(OSM_EXIT_TYPE_FORK_ERR);
} else if (pid > 0)
- exit(0);
+ exit(OSM_EXIT_TYPE_NORMAL);
close(0);
close(1);
@@ -516,6 +516,7 @@ int main(int argc, char *argv[])
{
osm_opensm_t osm;
osm_subn_opt_t opt;
+ int exit_code = OSM_EXIT_TYPE_NORMAL;
ib_net64_t sm_key = 0;
ib_api_status_t status;
uint32_t temp, dbg_lvl;
@@ -595,7 +596,7 @@ int main(int argc, char *argv[])
"ERROR: OpenSM and Complib were compiled using different modes\n");
fprintf(stderr, "ERROR: OpenSM debug:%d Complib debug:%d \n",
osm_is_debug(), cl_is_debug());
- exit(1);
+ exit(OSM_EXIT_TYPE_DIFFERENT_DEBUG_MODE);
}
#if defined (_DEBUG_) && defined (OSM_VENDOR_INTF_OPENIB)
enable_stack_dump(1);
@@ -615,7 +616,7 @@ int main(int argc, char *argv[])
long_option, NULL);
switch (next_option) {
case 12: /* --version - already printed above */
- exit(0);
+ exit(OSM_EXIT_TYPE_NORMAL);
break;
case 'F':
if (config_file_done)
@@ -623,7 +624,7 @@ int main(int argc, char *argv[])
printf("Reloading config from `%s`:\n", optarg);
if (osm_subn_parse_conf_file(optarg, &opt)) {
printf("cannot parse config file.\n");
- exit(1);
+ exit(OSM_EXIT_TYPE_CONFIG_PARSE_ERR);
}
printf("Rescaning command line:\n");
config_file_done = 1;
@@ -755,7 +756,7 @@ int main(int argc, char *argv[])
if (temp > 7) {
fprintf(stderr,
"ERROR: LMC must be 7 or less.\n");
- return (-1);
+ exit(OSM_EXIT_TYPE_INVALID_ARG_VAL);
}
opt.lmc = (uint8_t) temp;
printf(" LMC = %d\n", temp);
@@ -821,7 +822,7 @@ int main(int argc, char *argv[])
if (0 > temp || 15 < temp) {
fprintf(stderr,
"ERROR: priority must be between 0 and 15\n");
- return (-1);
+ exit (OSM_EXIT_TYPE_INVALID_ARG_VAL);
}
opt.sm_priority = (uint8_t) temp;
printf(" Priority = %d\n", temp);
@@ -931,7 +932,7 @@ int main(int argc, char *argv[])
case -1:
break; /* done with option */
default: /* something wrong */
- abort();
+ exit(OSM_EXIT_TYPE_UNKNOWN_CMDLINE_ARG);
}
}
while (next_option != -1);
@@ -945,7 +946,7 @@ int main(int argc, char *argv[])
status = osm_subn_write_conf_file(conf_template, &opt);
if (status)
printf("\nosm_subn_write_conf_file failed!\n");
- exit(status);
+ exit(status? OSM_EXIT_TYPE_CONF_FILE_WRITE_ERR: OSM_EXIT_TYPE_NORMAL);
}
if (vendor_debug)
@@ -967,7 +968,7 @@ int main(int argc, char *argv[])
/* We will just exit, and not go to Exit, since we don't
want the destroy to be called. */
complib_exit();
- return (status);
+ exit (status);
}
/*
@@ -982,6 +983,7 @@ int main(int argc, char *argv[])
printf("\nError from osm_opensm_bind (0x%X)\n", status);
printf
("Perhaps another instance of OpenSM is already running\n");
+ exit_code = OSM_EXIT_TYPE_DUPLICATE_OSM_GUID;
goto Exit;
}
@@ -1021,5 +1023,5 @@ Exit:
osm_opensm_destroy(&osm);
complib_exit();
- exit(0);
+ exit(exit_code);
}
--
1.5.4.5
--
Timothy A. Meier
Computer Scientist
ICCD/High Performance Computing
925.422.3341
meier3 at llnl.gov
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-Opensm-main-exit-codes.patch
URL: <http://lists.openfabrics.org/pipermail/general/attachments/20081118/52dee4bd/attachment.ksh>
More information about the general
mailing list