static memdb_integer create_memdb_rf_event_nodes(void) { memdb_integer node_id = libdb_create_node(DB_RMM, MC_TYPE_RMC, MC_REDFISH, SNAPSHOT_NEED, LOCK_ID_NULL); int32 i = 0; node_id = libdb_create_node(DB_RMM, node_id, MC_REDFISH_EVENT, SNAPSHOT_NEED, LOCK_ID_NULL); for (i = 0; i < sizeof(evt_source_infos) / sizeof(struct evt_source_info); i++) create_rf_event_source_node(node_id, evt_source_infos[i]); return node_id; }
/** * @brief Create event type node for each event(such as change, alert and so on). * */ static void create_rf_event_action_node(memdb_integer parent, uint32 type, int8 *msg_id_str) { memdb_integer evt_type_node = libdb_create_node(DB_RMM, parent, type, SNAPSHOT_NEED, LOCK_ID_NULL); int32 rc = 0; rc = libdb_attr_set_string(DB_RMM, evt_type_node, MSG_ID_KEY, 0, msg_id_str, SNAPSHOT_NEED, LOCK_ID_NULL); if (rc == -1) { rmm_log(ERROR, "memdb set %s fail\n", msg_id_str); } }
/** * @brief Create event source node for redfish. * */ static void create_rf_event_source_node(memdb_integer parent, struct evt_source_info info) { memdb_integer nid = libdb_create_node(DB_RMM, parent, info.node_id, SNAPSHOT_NEED, LOCK_ID_NULL); int8 msg_id_str[MSG_ID_STR_LEN] = {0}; int32 i = 0; for (i = 0; i < MAX_EVT_ACTION_NUM; i++) { if (!info.is_evt_exist[i]) continue; memset(msg_id_str, 0, MSG_ID_STR_LEN); get_evt_action_msg_id_str(msg_id_str, info.prefix_msg, rf_evt_msg[i].type_name); create_rf_event_action_node(nid, rf_evt_msg[i].node_id, msg_id_str); } }
int main(int argc, char **argv) { int i; int subnode_num; struct node_info *subnode = NULL; #if 1 char *str_node_id = NULL; char *str_cm_level = NULL; char *str_tmc_level = NULL; unsigned int node_id = 0; char *policy = NULL; int cm_level = 0; int tmc_level = 0; int cur_arg = 1; int create_flag = 0; int delete_flag = 0; if (argc < 2) { cooling_usage(); return -1; } while (cur_arg < argc) { if (strcmp(argv[cur_arg], "-p") == 0) { cur_arg++; if (cur_arg < argc) { policy = argv[cur_arg++]; } } else if (strcmp(argv[cur_arg], "-n") == 0) { cur_arg++; if (cur_arg < argc) { str_node_id = argv[cur_arg++]; node_id = atoi(str_node_id); //log_ifo("node_id is %s, %d\n", str_node_id, node_id); } } else if (strcmp(argv[cur_arg], "--cm") == 0) { cur_arg++; if (cur_arg < argc) { str_cm_level = argv[cur_arg++]; cm_level = strtoul(str_cm_level, 0, 16); //log_ifo("cm thermal level is %s, %d\n", str_cm_level, cm_level); } } else if (strcmp(argv[cur_arg], "--tmc") == 0) { cur_arg++; if (cur_arg < argc) { str_tmc_level = argv[cur_arg++]; tmc_level = strtoul(str_tmc_level, 0, 16); //log_ifo("tmc thermal level is %s, %d\n", str_tmc_level, tmc_level); } } else if (strcmp(argv[cur_arg], "--create") == 0) { cur_arg++; create_flag = 1; } else if (strcmp(argv[cur_arg], "--delete") == 0) { cur_arg++; delete_flag = 1; } else { cooling_usage(); return -1; } } #endif memdb_integer cm; memdb_integer tmc; #if 1 if (str_node_id == NULL) { cm = libdb_create_node(DB_RMM, MC_TYPE_RMC, MC_TYPE_CM, SNAPSHOT_NEED, LOCK_ID_NULL); if (str_cm_level != NULL) libdb_attr_set_int(DB_RMM, cm, POLICY_AGGREGATED_THERMAL_STR, 0x0, cm_level, 0, LOCK_ID_NULL); tmc = libdb_create_node(DB_RMM, cm, MC_TYPE_DRAWER, SNAPSHOT_NEED, LOCK_ID_NULL); if (str_tmc_level != NULL) libdb_attr_set_int(DB_RMM, tmc, POLICY_AGGREGATED_THERMAL_STR, 0x0, tmc_level, 0, LOCK_ID_NULL); } else { if (delete_flag){ libdb_destroy_node(DB_RMM, node_id, LOCK_ID_NULL); return 0; } if (str_cm_level != NULL) { libdb_attr_set_int(DB_RMM, node_id, POLICY_AGGREGATED_THERMAL_STR, 0x0, cm_level, 0, LOCK_ID_NULL); } if (str_tmc_level != NULL) { libdb_attr_set_int(DB_RMM, node_id, POLICY_AGGREGATED_THERMAL_STR, 0x0, tmc_level, 0, LOCK_ID_NULL); } } #endif if (policy != NULL) libdb_attr_set_string(DB_RMM, MC_TYPE_RMC, COOLING_POLICY, 0x0, policy, 0, LOCK_ID_NULL); subnode = libdb_list_subnode(DB_RMM, MC_TYPE_RMC, &subnode_num, NULL, LOCK_ID_NULL); int tmc_node_num = 0; //struct node_info *tmc_node = NULL; int j = 0; for (i = 0; i < subnode_num; i++) { //log_ifo("subnode node_id is %lu\n", subnode[i].node_id); if (create_flag && (str_node_id != NULL)) { if (subnode[i].node_id == node_id) { tmc = libdb_create_node(DB_RMM, node_id, MC_TYPE_DRAWER, SNAPSHOT_NEED, LOCK_ID_NULL); if (str_tmc_level != NULL) { libdb_attr_set_int(DB_RMM, tmc, CCTRL_TMC_THERMAL_STR, 0x0, tmc_level, 0, LOCK_ID_NULL); } } } //tmc_node = libdb_list_subnode_by_type(subnode[i].node_id, MC_TYPE_TMC, &tmc_node_num); for (j = 0; j < tmc_node_num; j++) { //log_ifo(" --->tmc node node_id is %lu\n", tmc_node[j].node_id); } } return 0; };
int main(int argc, char **argv) { int fd; int port; pthread_t tid_ipmi_cb; pthread_t tid_asset_module_set_attr; gami_reg_t reg_info = {{0}}; char value[WRAP_DB_MAX_VALUE_LEN] = {0}; int64 error_code; memdb_integer root_service_nid = 0; memdb_integer rmc_nid = 0; struct node_info *pnode = NULL; int32 node_num = 0; reg_sigterm_handler(sigterm_handler); if (rmm_modules_init(MODULEINIT_LOG | MODULEINIT_COREDUMP | MODULEINIT_REDFISHD, ASSETMGR_JSONRPC_PORT, JSONRPCINIT_MEMDB | JSONRPCINIT_JIPMI) == -1) { exit(-1); } rmm_log(INFO, "Assetd daemon is Running ...\n"); create_listen_socket(&fd); libdb_is_ready(DB_RMM, LOCK_ID_NULL, -1); error_code = libdb_attr_get_string(DB_RMM, MC_NODE_ROOT, RACK_FW_VER_STR, value, WRAP_DB_MAX_VALUE_LEN, LOCK_ID_NULL); if (error_code == 0) { /*TODO: compare the fw version to decide if need to do db-migration. */ } init_rack_attr(); pnode = libdb_list_node_by_type(DB_RMM, MC_TYPE_V1, MC_TYPE_V1, &node_num, NULL, LOCK_ID_NULL); if ((pnode == NULL) || (node_num == 0)) { root_service_nid = libdb_create_node(DB_RMM, MC_NODE_ROOT, MC_TYPE_V1, SNAPSHOT_NEED, LOCK_ID_NULL); if (root_service_nid == 0) { rmm_log(ERROR, "Failed to create root service node!\n"); return -1; } init_root_service_attr(&root_service_nid, PERSISTENT_ALL); rmc_nid = libdb_create_node(DB_RMM, root_service_nid, MC_TYPE_RMC, SNAPSHOT_NEED, LOCK_ID_NULL); if (rmc_nid == 0) { rmm_log(ERROR, "Failed to create root service node!\n"); return -1; } init_rmc_attr(&rmc_nid, PERSISTENT_ALL); } else { root_service_nid = pnode[0].node_id; init_root_service_attr(&root_service_nid, PERSISTENT_N); pnode = libdb_list_subnode_by_type(DB_RMM, root_service_nid, MC_TYPE_RMC, &node_num, NULL, LOCK_ID_NULL); if (pnode != NULL) rmc_nid = pnode[0].node_id; init_rmc_attr(&rmc_nid, PERSISTENT_N); } if (pthread_create(&tid_ipmi_cb, NULL, ipmi_cb_thread, NULL) != 0) { rmm_log(ERROR, "Failed to create ipmi callback thread!\n"); return -1; } if (pthread_create(&tid_asset_module_set_attr, NULL, asset_module_set_gami_attr_thread, NULL) != 0) { rmm_log(ERROR, "Failed to create asset module notify thread!\n"); return -1; } main_loop(fd); return 0; }