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);
	}
}
Example #4
0
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;
};
Example #5
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;
}