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);
}
Exemple #2
0
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;
}
Exemple #3
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;
}