static void got_thresholds(ipmi_sensor_t *sensor, int err, ipmi_thresholds_t *th, void *cb_data) { sdata_t *sdata = cb_data; enum ipmi_thresh_e thresh; int rv; if (err) { printf("Error 0x%x getting events for sensor %s\n", err, sdata->name); goto out_err; } printf("Sensor %s threshold settings:\n", sdata->name); for (thresh=IPMI_LOWER_NON_CRITICAL; thresh<=IPMI_UPPER_NON_RECOVERABLE; thresh++) { int val; double dval; rv = ipmi_sensor_threshold_readable(sensor, thresh, &val); if (rv || !val) /* Threshold not available. */ continue; rv = ipmi_threshold_get(th, thresh, &dval); if (rv) { printf(" threshold %s could not be fetched due to error 0x%x\n", ipmi_get_threshold_string(thresh), rv); } else { printf(" threshold %s is %lf\n", ipmi_get_threshold_string(thresh), dval); } } rv = ipmi_get_default_sensor_thresholds(sensor, sdata->th); if (rv) { printf("Error 0x%x getting def thresholds for sensor %s\n", rv, sdata->name); goto out_err; } rv = ipmi_sensor_set_thresholds(sensor, sdata->th, thresholds_set, sdata); if (rv) { printf("Error 0x%x setting thresholds for sensor %s\n", rv, sdata->name); goto out_err; } return; out_err: release_sdata(sdata); }
static void sensor_get_thresholds_done(ipmi_sensor_t *sensor, int err, ipmi_thresholds_t *th, void *cb_data) { ipmi_cmd_info_t *cmd_info = cb_data; ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info); char sensor_name[IPMI_SENSOR_NAME_LEN]; enum ipmi_thresh_e thresh; int rv; ipmi_cmdlang_lock(cmd_info); if (err) { cmdlang->errstr = "Error reading sensor thresholds"; cmdlang->err = err; ipmi_sensor_get_name(sensor, cmdlang->objstr, cmdlang->objstr_len); cmdlang->location = "cmd_sensor.c(sensor_get_thresholds_done)"; goto out; } ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name)); ipmi_cmdlang_out(cmd_info, "Sensor", NULL); ipmi_cmdlang_down(cmd_info); ipmi_cmdlang_out(cmd_info, "Name", sensor_name); for (thresh = IPMI_LOWER_NON_CRITICAL; thresh <= IPMI_UPPER_NON_RECOVERABLE; thresh++) { int ival; double dval; rv = ipmi_sensor_threshold_reading_supported(sensor, thresh, &ival); if ((rv) || !ival) continue; ipmi_cmdlang_out(cmd_info, "Threshold", NULL); ipmi_cmdlang_down(cmd_info); ipmi_cmdlang_out(cmd_info, "Name", ipmi_get_threshold_string(thresh)); rv = ipmi_threshold_get(th, thresh, &dval); if (rv) continue; ipmi_cmdlang_out_double(cmd_info, "Value", dval); ipmi_cmdlang_up(cmd_info); } ipmi_cmdlang_up(cmd_info); out: ipmi_cmdlang_unlock(cmd_info); ipmi_cmdlang_cmd_info_put(cmd_info); }
static void thres_get(ipmi_sensor_t *sensor, ipmi_thresholds_t *th, unsigned int event, SaHpiSensorReadingT *thres) { int val; ipmi_sensor_threshold_readable(sensor, event, &val); if (!val) { thres->IsSupported = SAHPI_FALSE; return; } if (0 == ipmi_threshold_get(th, event, &thres->Value.SensorFloat64)) { thres->IsSupported = SAHPI_TRUE; thres->Type = SAHPI_SENSOR_READING_TYPE_FLOAT64; }else { thres->IsSupported = SAHPI_FALSE; } }