/**
 * @brief Generate redfish event map cache when redfishd initialize.
 *
 */
static int32 gen_node_msg_id_map(p_rf_node_msg_id_map evt_types)
{
	int32 i = 0, j = 0;
	int32 nodenum = 0;
	int32 index = 0;
	int32 evt_source_num = 0;
	struct node_info *evt_source_nodeinfo = NULL, *rf_node = NULL;
	int32 action_num = 0;
	struct node_info *action_node_info;

	/*Get redfish event nid*/
	rf_node = libdb_list_node_by_type(DB_RMM, MC_REDFISH_EVENT, MC_REDFISH_EVENT, &nodenum, NULL, LOCK_ID_NULL);
	if (nodenum == 0)
		return 0;

	evt_source_nodeinfo = libdb_list_subnode(DB_RMM, rf_node[0].node_id, &evt_source_num, NULL, LOCK_ID_NULL);
	if (evt_source_num == 0)
		return 0;

	/*traverse all of event sources*/
	for (i = 0; i < evt_source_num; i++) {
		action_node_info = libdb_list_subnode(DB_RMM, evt_source_nodeinfo[i].node_id, &action_num, NULL, LOCK_ID_NULL);
		for (j = 0; j < action_num; j++) {
			/*Load event type information.*/
			evt_types[index].node_id = action_node_info[j].node_id;
			libdb_attr_get_string(DB_RMM, action_node_info[j].node_id, MSG_ID_KEY, evt_types[index].msg_id_str, MSG_ID_STR_LEN, LOCK_ID_NULL);
			index += 1;
		}
	}

	/*The index is total of event types count.*/
	return index;
}
Esempio n. 2
0
result_t libwrap_get_listener_links(int reg, memdb_integer nid, rf_link_t *links)
{
	int mask = 0;
	int subnode_num, i, j, index = 0;
	memdb_integer listener_nid = 0;
	char listener[256] = {0};
	struct node_info *subnode = NULL;

	subnode = libdb_list_subnode(DB_RMM, nid, &subnode_num, NULL, LOCK_ID_NULL);

	for (i = 0; i < subnode_num; i++) {
		listener_nid = libwrap_get_subnode_id_by_type(subnode[i].node_id, MC_REDFISH_LISTENER);
		if (listener_nid == 0)
			continue;

		libdb_attr_get_int(DB_RMM, listener_nid, RF_EVENT_LISTENER_INDEXES_STR, &mask, LOCK_ID_NULL);
		if ((mask & reg) != 0) {
			libdb_attr_get_string(DB_RMM, listener_nid, RF_EVENT_LISTENER_DEST_STR, listener, 256, LOCK_ID_NULL);
			for (j = 0; j < index; j++) {
				if (strcmp(listener, links->listeners[j]) == 0)
					break;
			}
			if (j == index) {
				snprintf_s_s(links->listeners[index], sizeof(links->listeners[index]), "%s", listener);
				index++;
			}
		}
	}

	return RESULT_OK;
}
Esempio n. 3
0
static result_t get_listeners(int32 mask, listener_t** header)
{
	struct node_info *subnode = NULL;
	int32 subnode_num = 0;
	struct node_info *listener_subnode = NULL;
	struct node_info *listener_sub_node = NULL;
	int32 listener_subnode_num = 0;
	int32 i,j = 0;
	memdb_integer error_code = 0;
	int32 subscribe_mask = 0;
	int8 tmp_url[MAX_URL] = {0};
	listener_dest_t listener = {};
	int32 listener_count = 0;
	struct node_info *evt_type_nodes = NULL;
	result_t rc = RESULT_OK;

	/* get event root node */
	subnode = libdb_list_node_by_type(DB_RMM, MC_REDFISH_EVENT, MC_REDFISH_EVENT, &subnode_num, NULL, LOCK_ID_NULL);
	if (subnode_num != 1) {
		rc = RESULT_NO_NODE;
		goto end;
	}

	/* get supported event type nodes */
	subnode = libdb_list_subnode(DB_RMM, subnode[0].node_id, &subnode_num, NULL, LOCK_ID_NULL);
	if (subnode_num == 0) {
		rc = RESULT_NO_NODE;
		goto end;
	}

	evt_type_nodes = (struct node_info *)malloc(CMDBUFSIZ);
	if (evt_type_nodes == NULL) {
		rc = RESULT_MALLOC_ERR;
		goto end;
	}
	memcpy_s(evt_type_nodes, sizeof(struct node_info) * subnode_num, subnode, sizeof(struct node_info) * subnode_num);

	listener_sub_node = (struct node_info *)malloc(CMDBUFSIZ);
	if (listener_sub_node == NULL) {
		rc = RESULT_MALLOC_ERR;
		goto end;
	}

	for (i = 0; i < subnode_num; i++) {
		/* get listeners of each event type */
		listener_subnode = libdb_list_subnode_by_type(DB_RMM, evt_type_nodes[i].node_id, MC_REDFISH_LISTENER, &listener_subnode_num, NULL, LOCK_ID_NULL);
		if (listener_subnode == NULL)
			goto end;

		bzero(listener_sub_node, CMDBUFSIZ);
		memcpy_s(listener_sub_node, sizeof(struct node_info) * listener_subnode_num, listener_subnode, sizeof(struct node_info) * listener_subnode_num);

		for (j = 0; j < listener_subnode_num; j++) {
			error_code = 0;
			/* get listener's mask */
			error_code = libdb_attr_get_int(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_INDEXES_STR, &subscribe_mask, LOCK_ID_NULL);
			if (error_code != 0)
				continue;

			if ((subscribe_mask & mask) != 0) {
				error_code = 0;
				error_code = libdb_attr_get_string(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_DEST_STR, tmp_url, sizeof(tmp_url), LOCK_ID_NULL);
				if (error_code == 0) {
					if (libdb_attr_get_string(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_CONTEXT_STR, listener.context, sizeof(listener.context), LOCK_ID_NULL) != 0)
						continue;
					if (libdb_attr_get_string(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_PROTOCOL_STR, listener.protocol, sizeof(listener.protocol), LOCK_ID_NULL) != 0)
						continue;
					if (libdb_attr_get_string(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_NAME_STR, listener.name, sizeof(listener.name), LOCK_ID_NULL) != 0)
						continue;
					if (libdb_attr_get_string(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_DESC_STR, listener.description, sizeof(listener.description), LOCK_ID_NULL) != 0)
						continue;

					/* add matched listener into list */
					add_listener(header, tmp_url, &listener, evt_type_nodes[i].type);
				}
			}
		}
	}

end:
	libdb_free_node(listener_sub_node);
	libdb_free_node(evt_type_nodes);

	return rc;
}
Esempio n. 4
0
static result_t del_listener(int8 *url)
{
	struct node_info *subnode = NULL;
	struct node_info *listener_subnode = NULL;
	struct node_info *listener_sub_node = NULL;
	int32 subnode_num = 0;
	int32 listener_subnode_num = 0;
	int32 i,j = 0;
	memdb_integer error_code = 0;
	int8 tmp_url[MAX_URL] = {0};
	int32 listener_count = 0;
	struct node_info *evt_type_nodes = NULL;
	result_t rc = RESULT_OK;

	/* get event root node */
	subnode = libdb_list_node_by_type(DB_RMM, MC_REDFISH_EVENT, MC_REDFISH_EVENT, &subnode_num, NULL, LOCK_ID_NULL);
	if (subnode_num != 1) {
		rc = RESULT_NO_NODE;
		goto end;
	}

	/* get supported event type nodes */
	subnode = libdb_list_subnode(DB_RMM, subnode[0].node_id, &subnode_num, NULL, LOCK_ID_NULL);
	if (subnode_num == 0) {
		rc = RESULT_NO_NODE;
		goto end;
	}

	evt_type_nodes = (struct node_info *)malloc(CMDBUFSIZ);
	if (evt_type_nodes == NULL) {
		rc = RESULT_MALLOC_ERR;
		goto end;
	}
	memcpy_s(evt_type_nodes, sizeof(struct node_info) * subnode_num, subnode, sizeof(struct node_info) * subnode_num);

	for (i = 0; i < subnode_num; i++) {
		/* get listeners of each event type */
		listener_subnode = libdb_list_subnode_by_type(DB_RMM, evt_type_nodes[i].node_id, MC_REDFISH_LISTENER, &listener_subnode_num, NULL, LOCK_ID_NULL);
		if (listener_subnode == NULL)
			goto end;
	
		listener_sub_node = (struct node_info *)malloc(CMDBUFSIZ);
		if (listener_sub_node == NULL) {
			rc = RESULT_MALLOC_ERR;
			goto end;
		}
		memcpy_s(listener_sub_node, sizeof(struct node_info) * listener_subnode_num, listener_subnode, sizeof(struct node_info) * listener_subnode_num);

		for (j = 0; j < listener_subnode_num; j++) {
			if (libdb_attr_get_string(DB_RMM, listener_sub_node[j].node_id, RF_EVENT_LISTENER_DEST_STR, tmp_url, sizeof(tmp_url), LOCK_ID_NULL) != 0)
				goto end;
			if (strcmp(tmp_url, url) == 0)
				libdb_destroy_node(DB_RMM, listener_sub_node[j].node_id, LOCK_ID_NULL);
		}
	}

end:

	if (listener_sub_node)
		libdb_free_node(listener_sub_node);
	if (evt_type_nodes)
		libdb_free_node(evt_type_nodes);

	return rc;
}
Esempio n. 5
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;
};