Hi,
Here is the 1st of the 10 patches.
These patches contains updates and dell specific sel additions.
Thanks,
G
srinivas_g_go...@dell.com
DELL
diff -Naurp ipmitool_base/lib/ipmi_sensor.c 01-ipmitool_opensrc_update/lib/ipmi_sensor.c
--- ipmitool_base/lib/ipmi_sensor.c 2012-03-06 16:26:57.000000000 +0530
+++ 01-ipmitool_opensrc_update/lib/ipmi_sensor.c 2012-03-06 16:26:58.000000000 +0530
@@ -675,6 +675,7 @@ __ipmi_sensor_set_threshold(struct ipmi_
return 0;
}
+#define INVALID_THRESHOLD "Invalid Threshold data values. Cannot Set Threshold Data."
static int
ipmi_sensor_set_threshold(struct ipmi_intf *intf, int argc, char **argv)
@@ -684,6 +685,9 @@ ipmi_sensor_set_threshold(struct ipmi_in
double setting1 = 0.0, setting2 = 0.0, setting3 = 0.0;
int allUpper = 0, allLower = 0;
int ret = 0;
+ struct ipmi_rs *rsp;
+ int i =0;
+ double val[10] = {0};
struct sdr_record_list *sdr;
@@ -776,9 +780,16 @@ ipmi_sensor_set_threshold(struct ipmi_in
lprintf(LOG_ERR, "Invalid sensor type %02x", sdr->type);
return -1;
}
-
+
if (allUpper) {
- settingMask = UPPER_NON_CRIT_SPECIFIED;
+
+ if( (setting1 < setting2 ) && (setting2 < setting3) ) {
+ settingMask = UPPER_NON_CRIT_SPECIFIED;
+ } else {
+ lprintf(LOG_ERR, "Invalid sensor data settings.");
+ return -1;
+ }
+
printf("Setting sensor \"%s\" %s threshold to %.3f\n",
sdr->record.full->id_string,
val2str(settingMask, threshold_vals), setting1);
@@ -814,7 +825,13 @@ ipmi_sensor_set_threshold(struct ipmi_in
sdr->record.full->keys.owner_id,
sdr->record.full->keys.lun);
} else if (allLower) {
- settingMask = LOWER_NON_RECOV_SPECIFIED;
+ if( (setting1 < setting2 ) && (setting2 < setting3) ) {
+ settingMask = LOWER_NON_RECOV_SPECIFIED;
+ } else {
+ lprintf(LOG_ERR, "Invalid sensor data settings.");
+ return -1;
+ }
+
printf("Setting sensor \"%s\" %s threshold to %.3f\n",
sdr->record.full->id_string,
val2str(settingMask, threshold_vals), setting1);
@@ -850,6 +867,83 @@ ipmi_sensor_set_threshold(struct ipmi_in
sdr->record.full->keys.owner_id,
sdr->record.full->keys.lun);
} else {
+
+ // Check for the Existing sensor record data.
+ /*
+ * Get current reading
+ */
+ rsp = ipmi_sdr_get_sensor_reading_ipmb(intf,
+ sdr->record.full->keys.sensor_num,
+ sdr->record.full->keys.owner_id,
+ sdr->record.full->keys.lun,sdr->record.full->keys.channel);
+ rsp = ipmi_sdr_get_sensor_thresholds(intf, sdr->record.full->keys.sensor_num,
+ sdr->record.full->keys.owner_id, sdr->record.full->keys.lun, sdr->record.full->keys.channel);
+ if ((rsp == NULL) || (rsp->ccode > 0)) {
+ lprintf(LOG_ERR, "Sensor data record not found!");
+ return -1;
+ }
+ for(i=1;i<=6;i++) {
+ val[i] = sdr_convert_sensor_reading(sdr->record.full, rsp->data[i]);
+ if(val[i] < 0)
+ val[i] = 0;
+ }
+ if( (settingMask & UPPER_NON_RECOV_SPECIFIED) ) {
+
+ if( (rsp->data[0] & UPPER_NON_RECOV_SPECIFIED) &&
+ (( (rsp->data[0] & UPPER_CRIT_SPECIFIED) && ( setting1 <= val[5])) ||
+ ( (rsp->data[0] & UPPER_NON_CRIT_SPECIFIED) && ( setting1 <= val[4]))) )
+ {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+ } else if( (settingMask & UPPER_CRIT_SPECIFIED) ) {
+ if( (rsp->data[0] & UPPER_CRIT_SPECIFIED) &&
+ (((rsp->data[0] & UPPER_NON_RECOV_SPECIFIED)&& ( setting1 >= val[6])) ||
+ ((rsp->data[0] & UPPER_NON_CRIT_SPECIFIED)&&( setting1 <= val[4]))) )
+ {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+ } else if( (settingMask & UPPER_NON_CRIT_SPECIFIED) ) {
+ if( (rsp->data[0] & UPPER_NON_CRIT_SPECIFIED) &&
+ (((rsp->data[0] & UPPER_NON_RECOV_SPECIFIED)&&( setting1 >= val[6])) ||
+ ((rsp->data[0] & UPPER_CRIT_SPECIFIED)&&( setting1 >= val[5])) ||
+ ((rsp->data[0] & LOWER_NON_CRIT_SPECIFIED)&&( setting1 <= val[1]))) )
+ {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+ } else if( (settingMask & LOWER_NON_CRIT_SPECIFIED) ) {
+ if( (rsp->data[0] & LOWER_NON_CRIT_SPECIFIED) &&
+ (((rsp->data[0] & LOWER_CRIT_SPECIFIED)&&( setting1 <= val[2])) ||
+ ((rsp->data[0] & LOWER_NON_RECOV_SPECIFIED)&&( setting1 <= val[3]))||
+ ((rsp->data[0] & UPPER_NON_CRIT_SPECIFIED)&&( setting1 >= val[4]))) )
+ {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+ } else if( (settingMask & LOWER_CRIT_SPECIFIED) ) {
+ if( (rsp->data[0] & LOWER_CRIT_SPECIFIED) &&
+ (((rsp->data[0] & LOWER_NON_CRIT_SPECIFIED)&&( setting1 >= val[1])) ||
+ ((rsp->data[0] & LOWER_NON_RECOV_SPECIFIED)&&( setting1 <= val[3]))) )
+ {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+ } else if( (settingMask & LOWER_NON_RECOV_SPECIFIED) ) {
+ if( (rsp->data[0] & LOWER_NON_RECOV_SPECIFIED) &&
+ (((rsp->data[0] & LOWER_NON_CRIT_SPECIFIED)&&( setting1 >= val[1])) ||
+ ((rsp->data[0] & LOWER_CRIT_SPECIFIED)&&( setting1 >= val[2]))) )
+ {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+ } else {
+ lprintf(LOG_ERR, INVALID_THRESHOLD);
+ return -1;
+ }
+
+
printf("Setting sensor \"%s\" %s threshold to %.3f\n",
sdr->record.full->id_string,
val2str(settingMask, threshold_vals), setting1);
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel