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

Reply via email to