char * get_local_node_name(void) { char *name = NULL; struct utsname res; if (use_cman) { #if SUPPORT_CMAN cman_node_t us; cman_handle_t cman; cman = cman_init(NULL); if (cman != NULL && cman_is_active(cman)) { us.cn_name[0] = 0; cman_get_node(cman, CMAN_NODEID_US, &us); name = strdup(us.cn_name); crm_info("Using CMAN node name: %s", name); } else { crm_err("Couldn't determin node name from CMAN"); } cman_finish(cman); #endif } else if (uname(&res) < 0) { crm_perror(LOG_ERR, "Could not determin the current host"); exit(100); } else { name = strdup(res.nodename); } return name; }
int member_list_nodes(clv_clnode_head_t *cn_head) { int node_count, i; cman_handle_t cman_handle; cman_node_t *cman_nodes, local_node; if ((cman_handle = cman_init(0)) == 0) { return -1; } if ((node_count = cman_get_node_count(cman_handle)) < 0) { return -1; } cman_nodes = calloc((size_t) node_count, sizeof(cman_node_t)); cman_get_nodes(cman_handle, node_count, &node_count, cman_nodes); local_node.cn_name[0] = '\0'; /* init cn_name for cman_get_node */ if (cman_get_node(cman_handle, CMAN_NODEID_US, &local_node) != 0) { return -1; } for (i = 0; i < node_count; i++) { clv_clnode_t *n; n = malloc(sizeof(clv_clnode_t)); STAILQ_INSERT_TAIL(cn_head, n, next); n->id = (uint32_t) cman_nodes[i].cn_nodeid; n->host = strdup(cman_nodes[i].cn_name); n->status = 0; if (cman_nodes[i].cn_member != 0) { n->status |= CLUSTER_NODE_ONLINE; } if (cman_nodes[i].cn_nodeid == local_node.cn_nodeid) { n->status |= CLUSTER_NODE_LOCAL; } } free(cman_nodes); cman_finish(cman_handle); return 0; }