doug-gilbert/sg3_utils

sg_ses: order of low_crit and low_warn thresholds is mixed for `--get` command

Opened this issue · 0 comments

Hi! Thanks for writing this SES utility.

Currently we found an issue with --get command for voltage thresholds. It seems the order for low_crit and low_warn is mixed up.

First thing, the raw output for page 5 (Threshold In):

# sg_ses --page=5 /dev/sg24 --raw
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 87 84 14 14
50 4d 14 14 50 4d 14 14  50 4d 14 14 50 4d 14 14
00 00 00 00 19 14 14 19  19 14 14 19 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00

Here we are interested in VoltageSense01 bytes, that are 19 14 14 19 (aka 25 20 20 25 in decimal).
In SES-3 standard the order of threshold status element is high_crit -> high_warn -> low_warn -> low_crit
image

Hence, I assume that VoltageSense01.low_warn = 14h and VoltageSense01.low_crit = 19h (based on raw data)

However, on a system I got these results:

# sg_ses --descriptor=VoltageSense01 --get=low_warn /dev/sg24
25
# sg_ses --descriptor=VoltageSense01 --get=low_crit /dev/sg24
20

I took a quick look at the code and guess the problem might be hidden here:

/* These are for the Threshold in/out diagnostic page */
static const struct acronym2tuple th_a2t_arr[] = {
    {"high_crit", -1, 0, 7, 8, NULL},
    {"high_warn", -1, 1, 7, 8, NULL},
    {"low_crit", -1, 2, 7, 8, NULL},
    {"low_warn", -1, 3, 7, 8, NULL},
    {NULL, 0, 0, 0, 0, NULL},
};

start_byte (third parameter) for low_crit is higher than low_warn