示例#1
0
static void	read_ipmi_control(zbx_ipmi_host_t *h, zbx_ipmi_control_t *c)
{
	int			ret;
	struct timeval		tv;

	zabbix_log(LOG_LEVEL_DEBUG, "In read_ipmi_control() %s@[%s]:%d",
			c->c_name, h->ip, h->port);

	if (0 == ipmi_control_is_readable(c->control))
	{
		h->err = zbx_dsprintf(h->err, "Control is not readable.");
		h->ret = NOTSUPPORTED;
		return;
	}

	h->ret = SUCCEED;
	h->done = 0;

	if (0 != (ret = ipmi_control_get_val(c->control, got_control_reading, h)))
	{
		h->err = zbx_dsprintf(h->err, "Cannot read control %s."
				" ipmi_control_get_val() return error: 0x%x",
				c->c_name, ret);
		h->ret = NOTSUPPORTED;
		return;
	}

	tv.tv_sec = 10;
	tv.tv_usec = 0;
	while (0 == h->done)
		os_hnd->perform_one_op(os_hnd, &tv);
}
示例#2
0
static void	read_ipmi_control(zbx_ipmi_host_t *h, zbx_ipmi_control_t *c)
{
	const char		*__function_name = "read_ipmi_control";
	int			ret;
	struct timeval		tv;

	zabbix_log(LOG_LEVEL_DEBUG, "In %s() control:'%s@[%s]:%d'", __function_name, c->c_name, h->ip, h->port);

	if (0 == ipmi_control_is_readable(c->control))
	{
		h->err = zbx_dsprintf(h->err, "control is not readable");
		h->ret = NOTSUPPORTED;
		goto out;
	}

	h->ret = SUCCEED;
	h->done = 0;

	if (0 != (ret = ipmi_control_get_val(c->control, got_control_reading, h)))
	{
		h->err = zbx_dsprintf(h->err, "Cannot read control %s. ipmi_control_get_val() return error: 0x%x",
				c->c_name, ret);
		h->ret = NOTSUPPORTED;
		goto out;
	}

	tv.tv_sec = 10;
	tv.tv_usec = 0;

	while (0 == h->done)
		os_hnd->perform_one_op(os_hnd, &tv);
out:
	zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __function_name, zbx_result_string(h->ret));
}
示例#3
0
static void _get_control_state(ipmi_control_t *control,
                                void           *cb_data)
{
	if (ipmi_control_light_set_with_setting(control))
		ipmi_control_get_light(control, __get_control_leds_state, cb_data);
	else
        	ipmi_control_get_val(control, __get_control_state, cb_data);
}
示例#4
0
static void get_power_state (ipmi_control_t *ipmi_control,
			     void *cb_data)
{
	struct ohoi_power_info *power_state = cb_data;
	int rv;

	rv = ipmi_control_get_val(ipmi_control, get_power_control_val, cb_data);

	if(rv) {
		dbg("[power]control_get_val failed");
		power_state->err = SA_ERR_HPI_INTERNAL_ERROR;
		power_state->done = 1;
	}
}
示例#5
0
static
void get_reset_state(ipmi_control_t *control,
		     void *cb_data)
{
	struct ohoi_reset_info *reset_info = cb_data;

	int rv;

	rv = ipmi_control_get_val(control, get_reset_control_val, cb_data);
	if (rv) {
		dbg("[reset] control_get_val failed. IPMI error = %i", rv);
		reset_info->err = SA_ERR_HPI_INTERNAL_ERROR;
		reset_info->done = 1;
	}
}
示例#6
0
static
void get_reset_state(ipmi_control_t *control,
		     void *cb_data)
{
	struct ohoi_reset_info *reset_info = cb_data;

	int rv;

	rv = ipmi_control_get_val(control, get_reset_control_val, cb_data);
	if (rv) {
		//dbg("[reset] control_get_val failed. IPMI error = %i", rv);
		dbg("This IPMI system has a pulse reset, state is always DEASSERT");
		/* OpenIPMI will return an error for this call
		   since pulse resets do not support get_state
		   we will return UNSUPPORTED_API
		 */
		*reset_info->state = SAHPI_RESET_DEASSERT;
		reset_info->err = SA_OK;
		reset_info->done = 1;
	}
}
示例#7
0
static void _get_control_state(ipmi_control_t *control,
                                void           *cb_data)
{
        ipmi_control_get_val(control, __get_control_state, cb_data);
}