Beispiel #1
0
/*
 * add_alarm_rdrs
 */
static int add_alarm_rdrs(
    struct oh_handler_state *handler,
    SaHpiRptEntryT *rpt,
    ipmi_control_t     *control)
{
    SaHpiResourceIdT   	rid;
    SaHpiEntityPathT        ent;
    SaHpiCtrlDefaultModeT default_mode;
    SaHpiBoolT wo;
    static ipmi_control_id_t   alarm_control_id;  /*save this */
    static int alarms_done = 0;


    if (alarms_done) return 0;  /* only do alarms the first time */
    rid = rpt->ResourceId;
    ent = rpt->ResourceEntity;

    alarm_control_id = ipmi_control_convert_to_id(control);
    wo = (ipmi_control_is_readable(control) == 0);
    default_mode.ReadOnly = (ipmi_control_is_settable(control) != 0);
    default_mode.Mode = SAHPI_CTRL_MODE_AUTO;
    rpt->ResourceCapabilities |=  SAHPI_CAPABILITY_RDR;
    rpt->ResourceCapabilities |=  SAHPI_CAPABILITY_CONTROL;

    add_alarm_rdr("Power Alarm LED", 0, rid, ent,
                  &default_mode, wo, &alarm_control_id, handler);
    add_alarm_rdr("Critical Alarm LED", 1, rid, ent,
                  &default_mode, wo, &alarm_control_id, handler);
    add_alarm_rdr("Major Alarm LED", 2, rid, ent,
                  &default_mode, wo, &alarm_control_id, handler);
    add_alarm_rdr("Minor Alarm LED",   3, rid, ent,
                  &default_mode, wo, &alarm_control_id, handler);
    alarms_done = 1;
    return 0;
}
Beispiel #2
0
static void	set_ipmi_control(zbx_ipmi_host_t *h, zbx_ipmi_control_t *c, int value)
{
	const char		*__function_name = "set_ipmi_control";
	int			ret;
	struct timeval		tv;

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

	if (c->num_values == 0)
	{
		THIS_SHOULD_NEVER_HAPPEN;
		h->err = zbx_dsprintf(h->err, "no value present for control");
		h->ret = NOTSUPPORTED;
		h->done = 1;
		goto out;
	}

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

	c->val[0] = value;
	h->ret = SUCCEED;
	h->done = 0;

	if (0 != (ret = ipmi_control_set_val(c->control, c->val, got_control_setting, h)))
	{
		h->err = zbx_dsprintf(h->err, "Cannot set control %s. ipmi_control_set_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));
}
Beispiel #3
0
static void	set_ipmi_control(zbx_ipmi_host_t *h, zbx_ipmi_control_t *c, int value)
{
	int			ret;
	struct timeval		tv;

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

	if (c->num_values == 0)
	{
		/* this should never happen */
		h->err = zbx_dsprintf(h->err, "No value present for control");
		h->ret = NOTSUPPORTED;
		h->done = 1;
		return;
	}

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

	c->val[0] = value;
	h->ret = SUCCEED;
	h->done = 0;

	if (0 != (ret = ipmi_control_set_val(c->control, c->val, got_control_setting, h)))
	{
		h->err = zbx_dsprintf(h->err, "Cannot set control %s."
				" ipmi_control_set_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);
}