0b9552cd4e
This commit was SVN r22870.
101 строка
3.0 KiB
C
101 строка
3.0 KiB
C
/*
|
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#include "orte_config.h"
|
|
#include "orte/constants.h"
|
|
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
#endif
|
|
#include <stdlib.h>
|
|
|
|
#include "opal/util/opal_environ.h"
|
|
#include "opal/util/if.h"
|
|
#include "opal/class/opal_list.h"
|
|
#include "opal/mca/sysinfo/sysinfo_types.h"
|
|
|
|
#include "orte/mca/errmgr/errmgr.h"
|
|
#include "orte/mca/odls/base/odls_private.h"
|
|
#include "orte/util/proc_info.h"
|
|
#include "orte/util/nidmap.h"
|
|
#include "orte/runtime/orte_globals.h"
|
|
|
|
#include "orte/mca/ess/base/base.h"
|
|
|
|
int orte_ess_base_query_sys_info(char *node, char **keys, opal_list_t *values)
|
|
{
|
|
orte_nid_t *nid;
|
|
opal_sysinfo_value_t *sys, *sys2;
|
|
opal_list_item_t *item;
|
|
int i;
|
|
|
|
/* we currently only support the local node */
|
|
if (NULL != node &&
|
|
(0 != strcmp(node, orte_process_info.nodename) || !opal_ifislocal(node))) {
|
|
return ORTE_SUCCESS;
|
|
}
|
|
|
|
if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_DAEMON) {
|
|
/* cycle through local sysinfo */
|
|
for (i=0; NULL != keys[i]; i++) {
|
|
for (item = opal_list_get_first(&orte_odls_globals.sysinfo);
|
|
item != opal_list_get_end(&orte_odls_globals.sysinfo);
|
|
item = opal_list_get_next(item)) {
|
|
sys = (opal_sysinfo_value_t*)item;
|
|
if (0 != strcmp(keys[i], sys->key)) {
|
|
continue;
|
|
}
|
|
/* matched - pass the value back */
|
|
sys2 = OBJ_NEW(opal_sysinfo_value_t);
|
|
sys2->key = strdup(sys->key);
|
|
sys2->type = sys->type;
|
|
if (OPAL_STRING == sys->type) {
|
|
sys2->data.str = strdup(sys->data.str);
|
|
} else {
|
|
sys2->data.i64 = sys->data.i64;
|
|
}
|
|
}
|
|
}
|
|
return ORTE_SUCCESS;
|
|
}
|
|
|
|
/* get the nid of our local node */
|
|
if (NULL == (nid = orte_util_lookup_nid(ORTE_PROC_MY_NAME))) {
|
|
/* can't get it */
|
|
return ORTE_ERR_NOT_FOUND;
|
|
}
|
|
|
|
/* cycle through this node's attributes looking for the keys */
|
|
for (i=0; NULL != keys[i]; i++) {
|
|
for (item = opal_list_get_first(&nid->sysinfo);
|
|
item != opal_list_get_end(&nid->sysinfo);
|
|
item = opal_list_get_next(item)) {
|
|
sys = (opal_sysinfo_value_t*)item;
|
|
|
|
if (0 != strcmp(keys[i], sys->key)) {
|
|
continue;
|
|
}
|
|
/* matched - pass the value back */
|
|
sys2 = OBJ_NEW(opal_sysinfo_value_t);
|
|
sys2->key = strdup(sys->key);
|
|
sys2->type = sys->type;
|
|
if (OPAL_STRING == sys->type) {
|
|
sys2->data.str = strdup(sys->data.str);
|
|
} else {
|
|
sys2->data.i64 = sys->data.i64;
|
|
}
|
|
opal_list_append(values, &sys2->super);
|
|
/* can only be one entry for each key */
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ORTE_SUCCESS;
|
|
}
|