static int _ipmimonitoring_legacy_simple_output_header (ipmi_sensors_state_data_t *state_data, uint16_t record_id) { char id_string[IPMI_SDR_MAX_ID_STRING_LENGTH + 1]; uint8_t sensor_type; uint8_t event_reading_type_code; const char * sensor_type_string = NULL; assert (state_data); memset (id_string, '\0', IPMI_SDR_MAX_ID_STRING_LENGTH + 1); if (ipmi_sdr_parse_id_string (state_data->sdr_ctx, NULL, 0, id_string, IPMI_SDR_MAX_ID_STRING_LENGTH) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_id_string: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); return (-1); } if (ipmi_sdr_parse_sensor_type (state_data->sdr_ctx, NULL, 0, &sensor_type) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_sensor_type: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); return (-1); } if ((state_data->prog_data->args->interpret_oem_data) && (ipmi_sdr_parse_event_reading_type_code (state_data->sdr_ctx, NULL, 0, &event_reading_type_code) >= 0)) sensor_type_string = get_oem_sensor_type_output_string (sensor_type, event_reading_type_code, state_data->oem_data.manufacturer_id, state_data->oem_data.product_id); else sensor_type_string = get_sensor_type_output_string (sensor_type); pstdout_printf (state_data->pstate, "%u | %s | %s", record_id, id_string, sensor_type_string); return (0); }
config_err_t ipmi_sensors_config_threshold_section (ipmi_sensors_config_state_data_t *state_data, struct config_section **section_ptr) { struct config_section *section = NULL; char section_name[CONFIG_MAX_SECTION_NAME_LEN]; uint8_t threshold_access_support = 0; uint8_t hysteresis_support = 0; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t sensor_type; uint8_t sensor_units_percentage; uint8_t sensor_units_modifier; uint8_t sensor_units_rate; uint8_t sensor_base_unit_type; uint8_t sensor_modifier_unit_type; char description[CONFIG_MAX_DESCRIPTION_LEN]; char sensor_units_buf[IPMI_SENSORS_CONFIG_UNITS_BUFLEN+1]; int sensor_units_ret; const char *sensor_type_str = NULL; assert (state_data); assert (section_ptr); if ((ret = create_section_name (state_data, section_name, CONFIG_MAX_SECTION_NAME_LEN)) != CONFIG_ERR_SUCCESS) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "create_section_name: %s\n", strerror (errno)); rv = ret; goto cleanup; } if (!(section = config_section_create (state_data->pstate, section_name, NULL, NULL, 0, NULL, NULL))) goto cleanup; if (ipmi_sdr_parse_sensor_capabilities (state_data->sdr_ctx, NULL, 0, NULL, &threshold_access_support, &hysteresis_support, NULL, NULL) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_sensor_capabilities: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); goto cleanup; } if (ipmi_sdr_parse_sensor_type (state_data->sdr_ctx, NULL, 0, &sensor_type) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_sensor_type: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); goto cleanup; } if (ipmi_sdr_parse_sensor_units (state_data->sdr_ctx, NULL, 0, &sensor_units_percentage, &sensor_units_modifier, &sensor_units_rate, &sensor_base_unit_type, &sensor_modifier_unit_type) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_sensor_unit: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); goto cleanup; } memset (sensor_units_buf, '\0', IPMI_SENSORS_CONFIG_UNITS_BUFLEN); sensor_units_ret = ipmi_sensor_units_string (sensor_units_percentage, sensor_units_modifier, sensor_units_rate, sensor_base_unit_type, sensor_modifier_unit_type, sensor_units_buf, IPMI_SENSORS_CONFIG_UNITS_BUFLEN, 0); sensor_type_str = ipmi_get_sensor_type_string (sensor_type); memset (description, '\0', CONFIG_MAX_DESCRIPTION_LEN); if (sensor_units_ret > 0) snprintf (description, CONFIG_MAX_DESCRIPTION_LEN, "Give valid input for sensor type = %s; units = %s", sensor_type_str ? sensor_type_str : UNRECOGNIZED_SENSOR_TYPE, sensor_units_buf); else snprintf (description, CONFIG_MAX_DESCRIPTION_LEN, "Give valid input for sensor type = %s", sensor_type_str ? sensor_type_str : UNRECOGNIZED_SENSOR_TYPE); if (setup_sensor_event_enable_fields (state_data, section) < 0) goto cleanup; if (threshold_access_support == IPMI_SDR_READABLE_THRESHOLDS_SUPPORT || threshold_access_support == IPMI_SDR_READABLE_SETTABLE_THRESHOLDS_SUPPORT || state_data->prog_data->args->config_args.verbose_count) { if (_setup_threshold_fields (state_data, section, description, sensor_base_unit_type) < 0) goto cleanup; } if (hysteresis_support == IPMI_SDR_READABLE_HYSTERESIS_SUPPORT || hysteresis_support == IPMI_SDR_READABLE_SETTABLE_HYSTERESIS_SUPPORT || state_data->prog_data->args->config_args.verbose_count) { if (_setup_threshold_hysteresis_fields (state_data, section, description, sensor_base_unit_type, hysteresis_support) < 0) goto cleanup; } *section_ptr = section; return (CONFIG_ERR_SUCCESS); cleanup: if (section) config_section_destroy (section); return (rv); }
static int _simple_output_header (ipmi_sensors_state_data_t *state_data, uint16_t record_id, uint8_t sensor_number, int event_message_output_type, uint16_t sensor_event_bitmask) { char fmt[IPMI_SENSORS_FMT_BUFLEN + 1]; char sensor_name[IPMI_SDR_MAX_SENSOR_NAME_LENGTH + 1]; unsigned int sensor_name_flags = 0; const char *sensor_type_string; uint8_t event_reading_type_code; assert (state_data); assert (IPMI_SENSORS_EVENT_VALID (event_message_output_type)); memset (sensor_name, '\0', IPMI_SDR_MAX_SENSOR_NAME_LENGTH + 1); if (!state_data->prog_data->args->shared_sensors) sensor_name_flags |= IPMI_SDR_SENSOR_NAME_FLAGS_IGNORE_SHARED_SENSORS; if (state_data->prog_data->args->entity_sensor_names) { if (ipmi_sdr_parse_entity_sensor_name (state_data->sdr_ctx, NULL, 0, sensor_number, sensor_name_flags, sensor_name, IPMI_SDR_MAX_SENSOR_NAME_LENGTH) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_entity_sensor_name: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); return (-1); } } else { if (ipmi_sdr_parse_sensor_name (state_data->sdr_ctx, NULL, 0, sensor_number, sensor_name_flags, sensor_name, IPMI_SDR_MAX_SENSOR_NAME_LENGTH) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_sensor_name: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); return (-1); } } memset (fmt, '\0', IPMI_SENSORS_FMT_BUFLEN + 1); if (state_data->prog_data->args->no_sensor_type_output) { if (state_data->prog_data->args->comma_separated_output) snprintf (fmt, IPMI_SENSORS_FMT_BUFLEN, "%%u,%%s"); else snprintf (fmt, IPMI_SENSORS_FMT_BUFLEN, "%%-%du | %%-%ds", state_data->column_width.record_id, state_data->column_width.sensor_name); pstdout_printf (state_data->pstate, fmt, record_id, sensor_name); } else { uint8_t sensor_type; if (ipmi_sdr_parse_sensor_type (state_data->sdr_ctx, NULL, 0, &sensor_type) < 0) { pstdout_fprintf (state_data->pstate, stderr, "ipmi_sdr_parse_sensor_type: %s\n", ipmi_sdr_ctx_errormsg (state_data->sdr_ctx)); return (-1); } if (state_data->prog_data->args->comma_separated_output) snprintf (fmt, IPMI_SENSORS_FMT_BUFLEN, "%%u,%%s,%%s"); else snprintf (fmt, IPMI_SENSORS_FMT_BUFLEN, "%%-%du | %%-%ds | %%-%ds", state_data->column_width.record_id, state_data->column_width.sensor_name, state_data->column_width.sensor_type); if ((state_data->prog_data->args->interpret_oem_data) && (ipmi_sdr_parse_event_reading_type_code (state_data->sdr_ctx, NULL, 0, &event_reading_type_code) >= 0)) sensor_type_string = get_oem_sensor_type_output_string (sensor_type, event_reading_type_code, state_data->oem_data.manufacturer_id, state_data->oem_data.product_id); else sensor_type_string = get_sensor_type_output_string (sensor_type); pstdout_printf (state_data->pstate, fmt, record_id, sensor_name, sensor_type_string); } if (state_data->prog_data->args->output_sensor_state) { char *sensor_state_str = NULL; if (ipmi_sensors_get_sensor_state (state_data, event_message_output_type, sensor_event_bitmask, &sensor_state_str) < 0) return (-1); if (state_data->prog_data->args->comma_separated_output) snprintf (fmt, IPMI_SENSORS_FMT_BUFLEN, ",%%s"); else snprintf (fmt, IPMI_SENSORS_FMT_BUFLEN, " | %%-8s"); pstdout_printf (state_data->pstate, fmt, sensor_state_str); } return (0); }