/* * 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; }
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)); }
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); }