All, After reading and replying to Al's comments about how percent should be handled, I coded up the unit string conversion function as follows. Note: I did not make any changes to deal with the cases where the textual representation of based and/or modifier is "unspecified" in the two base/modifier or base*modifier units display.
Anyone know a good reason why the display is "Base * Modifier" (with spaces) and "Base/Modifier" (without spaces)? If not, I'm going to make them both consistent by adding the extra spaces to the divide case. Any/All comments and questions would be much appreciated. /* ipmi_sdr_get_unit_string - return units for base/modifier * * @pct: units are a percentage * @type: unit type * @base: base * @modifier: modifier * * returns pointer to static string */ char * ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type, uint8_t base, uint8_t modifier) { static char unitstr[16]; /* * By default, if units are supposed to be percent, we will pre-pend * the percent string to the textual representation of the units. */ char *pctstr = pct ? "% " : ""; memset(unitstr, 0, sizeof (unitstr)); switch (type) { case 2: snprintf(unitstr, sizeof (unitstr), "%s%s * %s", pctstr, unit_desc[base], unit_desc[modifier]); break; case 1: snprintf(unitstr, sizeof (unitstr), "%s%s/%s", pctstr, unit_desc[base], unit_desc[modifier]); break; case 0: default: /* * Display the text "percent" only when the Base unit is * "unspecified" and the caller specified to print percent. */ if (base == 0 && pct) { snprintf(unitstr, sizeof(unitstr), "percent"); } else { snprintf(unitstr, sizeof (unitstr), "%s%s", pctstr, unit_desc[base]); } break; } return unitstr; } -- Jim Mankovich | jm...@hp.com -- On 2/8/2012 12:04 PM, Jim Mank wrote: > Al, > > It does appear from the spec that percent can be applied to any validly > specified Unit given that is an independent bit that can be specified in > addition to the Base/Modifier units. I could not find any other text > about the percent interpretation. > > If this is the spec intent, then when the percent bit is a one and the > Base Unit is "unspecified", a textural string of "percent" or "%" could > be used as the display string for the units. This would directly > address what was reported as the bug, but would not address what you > pointed out. This is the only case I took into account with I have > done because the interpretation of the pct bit was not clearly > articulated in the spec. > > When the percent bit is a one and the Base Unit has a value != 0, then > pre-pending the string "percent" or "%" to the Base Unit makes sense to > me. I specifically avoided talking about applying percent to the > Modifier Unit since it only seems to make sense to apply percent to the > entire entity when both Base and Modifier are specified. > > I do have some concern that decoding the percent bit as being applied > to any valid Base Unit specification could cause problems if platform > IPMI implementations were done that did not interpret the percent bit in > exactly the way we are talking about it. > > -- Jim Mankovich | jm...@hp.com -- > > > On 2/8/2012 11:01 AM, Albert Chu wrote: >> Hi Jim, >> >> On Wed, 2012-02-08 at 08:37 -0800, Jim Mank wrote: >>> All, >>> >>> I would like to start contributing to the ipmitool project and as a >>> initial task I thought I would resolve the open bug associated with >>> ipmitool's inability to display percentage units correctly >>> (https://sourceforge.net/tracker/?func=detail&aid=3014014&group_id=95200&atid=610550). >>> I'm currently working for Hewlett Packard in their Proliant server >>> organization and I and others are starting to look at how we can better >>> serve our customers by helping make ipmitool more robust. I only have >>> access to HP Proliant servers, so I'll be doing my testing on various HP >>> Proliant servers. I'm not very familiar with IPMI so I'll be learning >>> as I work though problems, any and all help with IPMI would much >>> appreciated. >>> >>> In investigating this problem, I found in the IPMI v2.0 spec that the >>> percentage units are identified by bit 0 == 1 in byte 21 of the Full and >>> Compact Sensor Records. In looking at the ipmitool code, the >>> sdr_record_full_sensor and sdr_record_compact_sensor both properly >>> declare the percentage bit (pct), but no code looks at this. So, >>> display of percentage units correctly in the ipmitool requires correct >>> interpretation of this bit in the sensor records. As I understand the >>> spec, if the pct bit is set to one, then the units are a percentage and >>> the Base Unit would be unspecified. >> While this is the 99.9% case, I believe it is legal for the base unit to >> be specified. Looking through the units list "% hit" and "% miss" seem >> like reasonable base units to go with "%". There might be other >> possibilities when you add the rate unit and modifier units (i.e. "% X / >> Y" or "% X per Y"). >> >> My code here is probably not perfect, but perhaps this can give you >> hints on some of the corner cases that can be expected: >> >> http://svn.savannah.gnu.org/viewvc/trunk/libfreeipmi/util/ipmi-sensor-units-util.c?revision=8165&root=freeipmi&view=markup >> >> Al >> >>> The code for displaying units in the sensor records is replicated in >>> multiple places in the code, each doing pretty much the exact same >>> decoding. There does exist one function for decoding the units, >>> ipmi_sdr_get_unit_string, so I've changed the code so this routine will >>> be used for all units decoding and I updated this function to display a >>> new unit named "percent". >>> >>> In doing these modifications, I'm wondering if it would be ok for me to >>> to do some local variable cleanup in ipmi_sdr_print_sensor_full. I >>> noticed that the local variable do_unit is set to one, but never >>> changed, so could this code be removed? >>> >>> When I have these changes available, should I just send a patch to this >>> email alias? >>> > ------------------------------------------------------------------------------ > Keep Your Developer Skills Current with LearnDevNow! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-d2d > _______________________________________________ > Ipmitool-devel mailing list > Ipmitool-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ipmitool-devel > ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel