freeipmi-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Freeipmi-users] Bridging sensor threshold requests


From: Craig
Subject: Re: [Freeipmi-users] Bridging sensor threshold requests
Date: Tue, 18 Aug 2015 22:34:17 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Chu, Al <address@hidden> writes:

> 
> Hi Craig,
> 
> Could you try the attached patch?  Basically, I want to capture the error
and fall through to the normal "get thresholds via the SDR" code path.
> 
> Al

Ok, I modified your patch a little to capture the Invalid-Unsupported error
path as well (see patch text after results).  Now the output contains the
thresholds as read from the SDR.  Not sure why one sensor fails one way, and
the second one a different way...

address@hidden:/opt/freeipmi-1.4.9/ipmi-sensors> ./ipmi-sensors -v -h p-sm -u 
xxx
-p xxx -b -r 39,40
Record ID: 39
ID String: ARM CPU Temp
Sensor Type: Temperature (1h)
Sensor Number: 112
IPMB Slave Address: 41h
Sensor Owner ID: 82h
Sensor Owner LUN: 0h
Channel Number: 0h
Entity ID: Chassis Specific (160)
Entity Instance: 96
Entity Instance Type: Physical Entity
Event/Reading Type Code: 1h
api/ipmi-api-util.c: 354: _api_ipmi_cmd_post: error 'Parameter out of range.
One or more parameters in the data field of the Request are out of range.
This is different from  'Invalid data field' (CCh) code in that it indicates
that the erroneous field(s) has a contiguous range of possible values.' (201)
api/ipmi-sensor-cmds-api.c: 282: ipmi_cmd_get_sensor_thresholds: error
'command invalid or unsupported' (23)
Lower Critical Threshold: 0.000000 C
Upper Critical Threshold: 65.000000 C
Lower Non-Critical Threshold: 5.000000 C
Upper Non-Critical Threshold: 55.000000 C
Lower Non-Recoverable Threshold: -10.000000 C
Upper Non-Recoverable Threshold: 75.000000 C
Sensor Min. Reading: -55.000000 C
Sensor Max. Reading: 125.000000 C
Normal Min.: 25.000000 C
Normal Max.: 55.000000 C
Nominal Reading: 40.000000 C
Sensor Reading: 24.000000 C
Sensor Event: 'OK'

Record ID: 40
ID String: ADM1062-TEMP 0
Sensor Type: Temperature (1h)
Sensor Number: 6
IPMB Slave Address: 41h
Sensor Owner ID: 82h
Sensor Owner LUN: 0h
Channel Number: 0h
Entity ID: Chassis Specific (160)
Entity Instance: 96
Entity Instance Type: Physical Entity
Event/Reading Type Code: 1h
api/ipmi-api-util.c: 354: _api_ipmi_cmd_post: error 'Unspecified error.' (255)
api/ipmi-sensor-cmds-api.c: 282: ipmi_cmd_get_sensor_thresholds: error 'bad
completion code' (24)
Lower Critical Threshold: 0.000000 C
Upper Critical Threshold: 65.000000 C
Lower Non-Critical Threshold: 5.000000 C
Upper Non-Critical Threshold: 55.000000 C
Lower Non-Recoverable Threshold: -10.000000 C
Upper Non-Recoverable Threshold: 75.000000 C
Sensor Min. Reading: -128.000000 C
Sensor Max. Reading: 127.000000 C
Normal Min.: 25.000000 C
Normal Max.: 55.000000 C
Nominal Reading: 40.000000 C
Sensor Reading: 33.000000 C
Sensor Event: 'OK'


------------------------------- BEGIN PATCH--------------------------------
--- ipmi-sensors-output-common.c.orig   2015-08-18 12:44:43.421131866 -0700
+++ ipmi-sensors-output-common.c        2015-08-18 15:27:07.246676301 -0700
@@ -591,6 +591,26 @@
           goto cleanup;
         }
 
+      /* Likely error from failed bridge or something similar.  Fall
through to SDR */
+      if (ipmi_ctx_errnum (state_data->ipmi_ctx) ==
IPMI_ERR_BAD_COMPLETION_CODE
+         && (ipmi_check_completion_code (obj_cmd_rs,
+                                        
IPMI_COMP_CODE_PARAMETER_OUT_OF_RANGE) == 1
+             || ipmi_check_completion_code (obj_cmd_rs,
+                                           
IPMI_COMP_CODE_UNSPECIFIED_ERROR) == 1))
+       {
+          if (state_data->prog_data->args->common_args.debug)
+            pstdout_fprintf (state_data->pstate,
+                             stderr,
+                             "Get Sensor Thresholds failed, using SDR
information\n");
+         
+          if (_get_sdr_sensor_thresholds (state_data, obj_cmd_rs) < 0)
+            goto cleanup;
+         
+          goto continue_get_sensor_thresholds;
+       }
+
+
+
       /* IPMI Workaround 
        *
        * HP DL 585
@@ -599,7 +619,8 @@
        * not supported, use the SDR information.
        */
       if (ipmi_ctx_errnum (state_data->ipmi_ctx) ==
IPMI_ERR_COMMAND_INVALID_OR_UNSUPPORTED
-          && (ipmi_check_completion_code (obj_cmd_rs,
IPMI_COMP_CODE_INVALID_COMMAND) == 1))
+          && (ipmi_check_completion_code (obj_cmd_rs,
IPMI_COMP_CODE_INVALID_COMMAND) == 1
+             || ipmi_check_completion_code (obj_cmd_rs,
IPMI_COMP_CODE_PARAMETER_OUT_OF_RANGE) == 1))
         {
           if (state_data->prog_data->args->common_args.debug)
             pstdout_fprintf (state_data->pstate,

---------------------END PATCH-----------------------------------

Craig



> ________________________________________
> From: freeipmi-users-bounces+chu11=llnl.gov-mXXj517/zsQ <at>
public.gmane.org [freeipmi-users-bounces+chu11=llnl.gov-mXXj517/zsQ <at>
public.gmane.org] on behalf of Craig [agspoon-Re5JQEeQqe8AvxtiuMwx3w <at>
public.gmane.org]
> Sent: Tuesday, August 18, 2015 10:28 AM
> To: freeipmi-users-mXXj517/zsQ <at> public.gmane.org
> Subject: Re: [Freeipmi-users] Bridging sensor threshold requests
> 
> Albert Chu <chu11 <at> ...> writes:
> 
> >
> > Hi Craig,
> >
> > No one ever requested this, so it's never come up.  However ...
> >
> > There's a decent chance that FreeIPMI just isn't handling the get sensor
> > thresholds error correctly.  If the call fails, it should just fall
> > through and use the thresholds listed in the SDR.  Perhaps its an
> > unique/unexpected error code.
> >
> > Could you send the --debug output that shows the error.  You can limit
> > the output by only specifying one sensor w/ -r.
> >
> > Al
> >
> > On Mon, 2015-08-17 at 18:10 +0000, Craig wrote:
> > > Hello,
> > >
> > > I was wondering if anyone has worked out a patch to extend ipmi-sensors to
> > > extract threshold settings from sensors that are not local to the BMC (i.e
> > > across an IPMB bridge).
> > >
> > > The "-b" option provides a means to get the sensor readings, but if
you ask
> > > for the verbose output (-v) or explicitly request threshold output
> > > (--output-sensor-thresholds), the output stops as soon as it encounters an
> > > error trying to read the threshold values for a non-local sensor.
> > >
> > > Looking at the code, it seems like there needs to be a parallel
function to
> > > "ipmi_cmd_get_sensor_reading_ipmb()" that retrieves the threshold
values as
> > > well.  e.g. ipmi_cmd_get_sensor_thresholds_ipmb()
> > >
> > > I had a look at the code, and it seems non-trivial to accomplish this for
> > > someone unfamiliar with the code and API.
> > >
> > > Thanks for any advice you can give me.
> > >
> > > Craig
> > >
> > >
> > > _______________________________________________
> > > Freeipmi-users mailing list
> > > Freeipmi-users <at> ...
> > > https://lists.gnu.org/mailman/listinfo/freeipmi-users
> 
> Ok, here are some results.  Sorry for the long lines..
> 
> First a working case, where the sensor is owned by the BMC (p-sm), and all
> looks good.
> 
> root <at> sdl3:/opt/freeipmi-1.4.9/ipmi-sensors> ./ipmi-sensors -v -h p-sm
-u xxx
> -p xxx -b -r 15
> Record ID: 15
> ID String: Chassis Temp2
> Sensor Type: Temperature (1h)
> Sensor Number: 98
> IPMB Slave Address: 10h
> Sensor Owner ID: 20h
> Sensor Owner LUN: 0h
> Channel Number: 0h
> Entity ID: OEM System Integrator (208)
> Entity Instance: 1
> Entity Instance Type: Physical Entity
> Event/Reading Type Code: 1h
> Lower Critical Threshold: 0.000000 C
> Upper Critical Threshold: 65.000000 C
> Lower Non-Critical Threshold: 5.000000 C
> Upper Non-Critical Threshold: 55.000000 C
> Lower Non-Recoverable Threshold: -10.000000 C
> Upper Non-Recoverable Threshold: 75.000000 C
> Sensor Min. Reading: -55.000000 C
> Sensor Max. Reading: 125.000000 C
> Normal Min.: 25.000000 C
> Normal Max.: 55.000000 C
> Nominal Reading: 40.000000 C
> Sensor Reading: 27.000000 C
> Sensor Event: 'OK'
> 
> Just getting the bridged sensor readings works fine.
> 
> root <at> sdl3:/opt/freeipmi-1.4.9/ipmi-sensors> ./ipmi-sensors  -h p-sm
-u xxx
> -p xxx -b -r 39,40
> ID | Name           | Type        | Reading    | Units | Event
> 39 | ARM CPU Temp   | Temperature | 23.00      | C     | 'OK'
> 40 | ADM1062-TEMP 0 | Temperature | 33.00      | C     | 'OK'
> 
> 
> Then if I ask for a couple of sensors that are owned by a different FRU, the
> tool exits out early.
> 
> root <at> sdl3:/opt/freeipmi-1.4.9/ipmi-sensors> ./ipmi-sensors -v -h p-sm
-u xxx
> -p xxx -b -r 39,40
> Record ID: 39
> ID String: ARM CPU Temp
> Sensor Type: Temperature (1h)
> Sensor Number: 112
> IPMB Slave Address: 41h
> Sensor Owner ID: 82h
> Sensor Owner LUN: 0h
> Channel Number: 0h
> Entity ID: Chassis Specific (160)
> Entity Instance: 96
> Entity Instance Type: Physical Entity
> Event/Reading Type Code: 1h
> api/ipmi-api-util.c: 354: _api_ipmi_cmd_post: error 'Parameter out of range.
> One or more parameters in the data field of the Request are out of range.
> This is different from  'Invalid data field' (CCh) code in that it indicates
> that the erroneous field(s) has a contiguous range of possible values.' (201)
> api/ipmi-sensor-cmds-api.c: 282: ipmi_cmd_get_sensor_thresholds: error
> 'command invalid or unsupported' (23)
> 
> 
> It only tries the first sensor, and then exits when it encounters the error.
>  If I patch ipmi-sensors-detailed-output.c as follows,
> 







reply via email to

[Prev in Thread] Current Thread [Next in Thread]