118 строки
3.0 KiB
C
118 строки
3.0 KiB
C
/*
|
|
* Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
|
|
*
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
|
|
#include "opal_config.h"
|
|
|
|
#include "opal/constants.h"
|
|
#include "opal/util/output.h"
|
|
#include "opal/mca/mca.h"
|
|
#include "opal/mca/base/base.h"
|
|
#include "opal/mca/base/mca_base_param.h"
|
|
#include "opal/mca/sysinfo/sysinfo.h"
|
|
#include "opal/mca/sysinfo/base/base.h"
|
|
|
|
|
|
/*
|
|
* The following file was created by configure. It contains extern
|
|
* statements and the definition of an array of pointers to each
|
|
* component's public mca_base_component_t struct.
|
|
*/
|
|
#include "opal/mca/sysinfo/base/static-components.h"
|
|
|
|
/* unsupported functions */
|
|
static int opal_sysinfo_base_query(char **keys, opal_list_t *values);
|
|
|
|
/*
|
|
* Globals
|
|
*/
|
|
int opal_sysinfo_base_output = -1;
|
|
opal_list_t opal_sysinfo_base_components_opened;
|
|
opal_list_t opal_sysinfo_avail_modules;
|
|
bool opal_sysinfo_initialized=false;
|
|
bool opal_sysinfo_selected=false;
|
|
|
|
opal_sysinfo_API_module_t opal_sysinfo = {
|
|
opal_sysinfo_base_query
|
|
};
|
|
|
|
|
|
/*
|
|
* Function for finding and opening either all MCA components, or the one
|
|
* that was specifically requested via a MCA parameter.
|
|
*/
|
|
int opal_sysinfo_base_open(void)
|
|
{
|
|
if (opal_sysinfo_initialized) {
|
|
return OPAL_SUCCESS;
|
|
}
|
|
opal_sysinfo_initialized = true;
|
|
|
|
opal_sysinfo_base_output = opal_output_open(NULL);
|
|
|
|
/* init the list of available modules */
|
|
OBJ_CONSTRUCT(&opal_sysinfo_avail_modules, opal_list_t);
|
|
|
|
/* Open up all available components */
|
|
OBJ_CONSTRUCT( &opal_sysinfo_base_components_opened, opal_list_t );
|
|
|
|
if (OPAL_SUCCESS !=
|
|
mca_base_components_open("sysinfo", opal_sysinfo_base_output,
|
|
mca_sysinfo_base_static_components,
|
|
&opal_sysinfo_base_components_opened,
|
|
true)) {
|
|
return OPAL_ERROR;
|
|
}
|
|
|
|
/* All done */
|
|
|
|
return OPAL_SUCCESS;
|
|
}
|
|
|
|
static int opal_sysinfo_base_query(char **keys, opal_list_t *values)
|
|
{
|
|
opal_list_item_t *item;
|
|
opal_sysinfo_module_t *mod;
|
|
|
|
/* query all the available modules */
|
|
for (item = opal_list_get_first(&opal_sysinfo_avail_modules);
|
|
item != opal_list_get_end(&opal_sysinfo_avail_modules);
|
|
item = opal_list_get_next(item)) {
|
|
mod = (opal_sysinfo_module_t*)item;
|
|
if (NULL != mod->module->query) {
|
|
mod->module->query(keys, values);
|
|
}
|
|
}
|
|
return OPAL_SUCCESS;
|
|
}
|
|
|
|
/**** SETUP SYSINFO MODULE OBJECTS ****/
|
|
static void mod_constructor(opal_sysinfo_module_t *ptr)
|
|
{
|
|
ptr->module = NULL;
|
|
}
|
|
OBJ_CLASS_INSTANCE(opal_sysinfo_module_t,
|
|
opal_list_item_t,
|
|
mod_constructor, NULL);
|
|
|
|
static void val_constructor(opal_sysinfo_value_t *ptr)
|
|
{
|
|
ptr->key = NULL;
|
|
}
|
|
static void val_destructor(opal_sysinfo_value_t *ptr)
|
|
{
|
|
if (NULL != ptr->key) {
|
|
free(ptr->key);
|
|
}
|
|
}
|
|
OBJ_CLASS_INSTANCE(opal_sysinfo_value_t,
|
|
opal_list_item_t,
|
|
val_constructor, val_destructor);
|