Example #1
0
static int
ipmi_sensor_get(struct ipmi_intf *intf, int argc, char **argv)
{
	struct sdr_record_list *sdr;
	int i, v;
	int rc = 0;

	if (argc < 1 || strncmp(argv[0], "help", 4) == 0) {
		lprintf(LOG_NOTICE, "sensor get <id> ... [id]");
		lprintf(LOG_NOTICE, "   id        : name of desired sensor");
		return -1;
	}
	printf("Locating sensor record...\n");

	/* lookup by sensor name */
	for (i = 0; i < argc; i++) {
		int r = 0;

		sdr = ipmi_sdr_find_sdr_byid(intf, argv[i]);
		if (sdr == NULL) {
			lprintf(LOG_ERR, "Sensor data record \"%s\" not found!",
				argv[i]);
			rc = -1;
			continue;
		}

		/* need to set verbose level to 1 */
		v = verbose;
		verbose = 1;
		switch (sdr->type) {
		case SDR_RECORD_TYPE_FULL_SENSOR:
		case SDR_RECORD_TYPE_COMPACT_SENSOR:
			r = ipmi_sensor_print_fc(intf, sdr->record.common,
						   sdr->type);
			break;
		case SDR_RECORD_TYPE_EVENTONLY_SENSOR:
			r = ipmi_sdr_print_sensor_eventonly(intf,
							    sdr->record.
							    eventonly);
			break;
		case SDR_RECORD_TYPE_FRU_DEVICE_LOCATOR:
			r = ipmi_sdr_print_sensor_fru_locator(intf,
							      sdr->record.
							      fruloc);
			break;
		case SDR_RECORD_TYPE_MC_DEVICE_LOCATOR:
			r = ipmi_sdr_print_sensor_mc_locator(intf,
							     sdr->record.mcloc);
			break;
		}
		verbose = v;

		/* save errors */
		rc = (r == 0) ? rc : r;
	}

	return rc;
}
Example #2
0
static int
ipmi_sensor_list(struct ipmi_intf *intf)
{
	struct sdr_get_rs *header;
	struct ipmi_sdr_iterator *itr;
	int rc = 0;

	lprintf(LOG_DEBUG, "Querying SDR for sensor list");

	itr = ipmi_sdr_start(intf, 0);
	if (itr == NULL) {
		lprintf(LOG_ERR, "Unable to open SDR for reading");
		return -1;
	}

	while ((header = ipmi_sdr_get_next_header(intf, itr)) != NULL) {
		uint8_t *rec;

		rec = ipmi_sdr_get_record(intf, header, itr);
		if (rec == NULL) {
			lprintf(LOG_DEBUG, "rec == NULL");
			continue;
		}

		switch (header->type) {
		case SDR_RECORD_TYPE_FULL_SENSOR:
		case SDR_RECORD_TYPE_COMPACT_SENSOR:
			ipmi_sensor_print_fc(intf,
						   (struct
						    sdr_record_common_sensor *)
						   rec,
						   header->type);
			break;
		}
		free(rec);
		rec = NULL;

		/* fix for CR6604909: */
		/* mask failure of individual reads in sensor list command */
		/* rc = (r == 0) ? rc : r; */
	}

	ipmi_sdr_end(intf, itr);

	return rc;
}