void rf_memdb_event_node_init(void) { libjsonrpcapi_init(JSONRPCINIT_MEMDB, 0); libdb_is_ready(DB_RMM, LOCK_ID_NULL, -1); memdb_integer nid = get_rf_node_id(); if (nid == 0) { create_memdb_rf_event_nodes(); } node_msg_id_map_size = gen_node_msg_id_map(g_rf_node_msg_id_map); }
int rmm_modules_init(unsigned int modules, unsigned int jipmi_port_attr, unsigned int jsonrpcapi_bitmap) { #define INIT_MAX_RETRY 10 int port = 0; int ret = -1; if (modules | MODULEINIT_LOG) { ret = rmm_log_init(); if (ret == -1) return -1; } if (modules | MODULEINIT_COREDUMP) enable_core_dump(); if (modules | MODULEINIT_REDFISHD) { port = rmm_cfg_get_port(REDFISHD_PORT); ret = rf_connect(INADDR_LOOPBACK, port); if (ret == -1) return -1; port = rmm_cfg_get_port(SNMPAGENTD_PORT); ret = snmp_subagentd_connect(INADDR_LOOPBACK, port); if (ret == -1) return -1; } if (modules | MODULEINIT_GAMI_REG) { ret = is_gami_reg_ready(INIT_MAX_RETRY); if (ret == -1) return -1; } if (modules | MODULEINIT_ASSETD) { ret = is_assetd_ready(INIT_MAX_RETRY); if (ret == -1) return -1; } if (jsonrpcapi_bitmap) { port = rmm_cfg_get_port(jipmi_port_attr); libjsonrpcapi_init(JSONRPCINIT_MEMDB | JSONRPCINIT_JIPMI, port); if (jsonrpcapi_bitmap | JSONRPCINIT_MEMDB) ret = libdb_is_ready(DB_RMM, LOCK_ID_NULL, -1); if (ret == -1) return -1; } 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; }