root/oshmem/tools/oshmem_info/oshmem_info.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /*
   2  * Copyright (c) 2013-2015 Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * Copyright (c) 2014      Intel, Inc. All rights reserved.
   5  *
   6  * Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
   7  * $COPYRIGHT$
   8  *
   9  * Additional copyrights may follow
  10  *
  11  * $HEADER$
  12  */
  13 
  14 #include "oshmem_config.h"
  15 
  16 #include <stdio.h>
  17 #include <string.h>
  18 #include <ctype.h>
  19 #ifdef HAVE_UNISTD_H
  20 #include <unistd.h>
  21 #endif
  22 #ifdef HAVE_NETDB_H
  23 #include <netdb.h>
  24 #endif
  25 #ifdef HAVE_SYS_PARAM_H
  26 #include <sys/param.h>
  27 #endif
  28 #include <errno.h>
  29 #include <signal.h>
  30 
  31 #include "opal/version.h"
  32 #include "opal/mca/installdirs/installdirs.h"
  33 #include "opal/class/opal_object.h"
  34 #include "opal/class/opal_pointer_array.h"
  35 #include "opal/runtime/opal.h"
  36 #if OPAL_ENABLE_FT_CR == 1
  37 #include "opal/runtime/opal_cr.h"
  38 #endif
  39 #include "opal/mca/base/base.h"
  40 #include "opal/runtime/opal_info_support.h"
  41 #include "opal/util/argv.h"
  42 #include "opal/util/show_help.h"
  43 
  44 #if OMPI_RTE_ORTE
  45 #include "orte/runtime/orte_info_support.h"
  46 #endif
  47 
  48 #include "ompi/runtime/ompi_info_support.h"
  49 
  50 #include "oshmem/include/oshmem/constants.h"
  51 #include "oshmem/tools/oshmem_info/oshmem_info.h"
  52 #include "oshmem/runtime/oshmem_info_support.h"
  53 
  54 /*
  55  * Public variables
  56  */
  57 
  58 
  59 int main(int argc, char *argv[])
  60 {
  61     int ret = 0;
  62     bool acted = false;
  63     bool want_all = false;
  64     int i;
  65     opal_cmd_line_t *info_cmd_line;
  66     opal_pointer_array_t mca_types;
  67     opal_pointer_array_t component_map;
  68     opal_info_component_map_t *map;
  69 
  70     /* protect against problems if someone passes us thru a pipe
  71      * and then abnormally terminates the pipe early */
  72     signal(SIGPIPE, SIG_IGN);
  73 
  74     /* Initialize the argv parsing handle */
  75     if (OPAL_SUCCESS != opal_init_util(&argc, &argv)) {
  76         opal_show_help("help-oshmem-info.txt", "lib-call-fail", true,
  77                        "opal_init_util", __FILE__, __LINE__, NULL);
  78         exit(ret);
  79     }
  80 
  81     info_cmd_line = OBJ_NEW(opal_cmd_line_t);
  82     if (NULL == info_cmd_line) {
  83         ret = errno;
  84         opal_show_help("help-oshmem-info.txt", "lib-call-fail", true,
  85                        "opal_cmd_line_create", __FILE__, __LINE__, NULL);
  86         exit(ret);
  87     }
  88 
  89     /* initialize the command line, parse it, and return the directives
  90      * telling us what the user wants output
  91      */
  92     if (OPAL_SUCCESS != (ret = opal_info_init(argc, argv, info_cmd_line))) {
  93         exit(ret);
  94     }
  95 
  96     if (opal_cmd_line_is_taken(info_cmd_line, "version")) {
  97         fprintf(stdout, "Open MPI/SHMEM v%s\n\n%s\n",
  98                 OPAL_VERSION, PACKAGE_BUGREPORT);
  99         exit(0);
 100     }
 101 
 102     /* setup the mca_types array */
 103     OBJ_CONSTRUCT(&mca_types, opal_pointer_array_t);
 104     opal_pointer_array_init(&mca_types, 256, INT_MAX, 128);
 105 
 106     /* add in the opal frameworks */
 107     opal_info_register_types(&mca_types);
 108 
 109 #if OMPI_RTE_ORTE
 110     /* add in the orte frameworks */
 111     orte_info_register_types(&mca_types);
 112 #endif
 113 
 114     /* add in the ompi frameworks */
 115     opal_info_register_types(&mca_types);
 116 
 117     /* add in the oshmem frameworks */
 118     oshmem_info_register_types(&mca_types);
 119 
 120     /* init the component map */
 121     OBJ_CONSTRUCT(&component_map, opal_pointer_array_t);
 122     opal_pointer_array_init(&component_map, 256, INT_MAX, 128);
 123 
 124     /* Register OMPI/OSHMEM's params */
 125     if (OSHMEM_SUCCESS != (ret = oshmem_info_register_framework_params(&component_map))) {
 126         if (OSHMEM_ERR_BAD_PARAM == ret) {
 127             /* output what we got */
 128             opal_info_do_params(true, opal_cmd_line_is_taken(info_cmd_line, "internal"),
 129                                 &mca_types, &component_map, NULL);
 130         }
 131         exit(1);
 132     }
 133 
 134     /* Execute the desired action(s) */
 135     want_all = opal_cmd_line_is_taken(info_cmd_line, "all");
 136     if (want_all || opal_cmd_line_is_taken(info_cmd_line, "path")) {
 137         opal_info_do_path(want_all, info_cmd_line);
 138         acted = true;
 139     }
 140     if (want_all || opal_cmd_line_is_taken(info_cmd_line, "arch")) {
 141         opal_info_do_arch();
 142         acted = true;
 143     }
 144     if (want_all || opal_cmd_line_is_taken(info_cmd_line, "hostname")) {
 145         opal_info_do_hostname();
 146         acted = true;
 147     }
 148     if (want_all || opal_cmd_line_is_taken(info_cmd_line, "config")) {
 149         oshmem_info_do_config(true);
 150         acted = true;
 151     }
 152     if (want_all || opal_cmd_line_is_taken(info_cmd_line, "param") ||
 153         opal_cmd_line_is_taken(info_cmd_line, "params")) {
 154         opal_info_do_params(want_all, opal_cmd_line_is_taken(info_cmd_line, "internal"),
 155                             &mca_types, &component_map, info_cmd_line);
 156         acted = true;
 157     }
 158 
 159     /* If no command line args are specified, show default set */
 160 
 161     if (!acted) {
 162         opal_info_out("Package", "package", OPAL_PACKAGE_STRING);
 163         oshmem_info_show_oshmem_version(opal_info_ver_full);
 164         opal_info_show_path(opal_info_path_prefix, opal_install_dirs.prefix);
 165         opal_info_do_arch();
 166         opal_info_do_hostname();
 167         oshmem_info_do_config(false);
 168         opal_info_show_component_version(&mca_types, &component_map, opal_info_type_all,
 169                                          opal_info_component_all, opal_info_ver_full,
 170                                          opal_info_ver_all);
 171     }
 172 
 173     /* All done */
 174 
 175     oshmem_info_close_components();
 176     OBJ_RELEASE(info_cmd_line);
 177     OBJ_DESTRUCT(&mca_types);
 178     for (i=0; i < component_map.size; i++) {
 179         if (NULL != (map = (opal_info_component_map_t*)opal_pointer_array_get_item(&component_map, i))) {
 180             OBJ_RELEASE(map);
 181         }
 182     }
 183     OBJ_DESTRUCT(&component_map);
 184 
 185     opal_info_finalize();
 186 
 187     /* Put our own call to opal_finalize_util() here because we called
 188        it up above (and it refcounts) */
 189     opal_finalize_util();
 190 
 191     return 0;
 192 }

/* [<][>][^][v][top][bottom][index][help] */