summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Amelkin <alexander@amelkin.msk.ru>2020-10-20 17:15:59 +0300
committerAlexander Amelkin <mocbuhtig@amelkin.msk.ru>2023-01-12 13:47:25 +0300
commit4b791f8bf67ef9134699039b2758ed4023409621 (patch)
tree6e91674d8a057f3931ac339cf44d5d11a05e12ab
parent93287486722c3a2a81d886d32b7d297d18523a0a (diff)
downloadipmitool-4b791f8bf67ef9134699039b2758ed4023409621.tar.gz
lan: channel: Fix set alert on/off
From IPMI Spec, Chapter 22.22 Set Channel Access Command Table 22, Set Channel Access Command Byte#2, Bit#5 is "PEF Alerting Enable/Disable" And the bit value: 0b = enable PEF Alerting 1b = disable PEF Alerting on this channel In current code, alert "on" set Bit#5 to 1 and alert "off" set Bit#5 to 0, it's straightforward but just opposite of IPMI spec bit definition. Resolves ipmitool/ipmitool#247 Reported-by: Ryan Fang <Ryan.Fang@quantatw.com> Signed-off-by: Alexander Amelkin <alexander@amelkin.msk.ru>
-rw-r--r--include/ipmitool/ipmi_channel.h10
-rw-r--r--lib/ipmi_lanp.c6
2 files changed, 11 insertions, 5 deletions
diff --git a/include/ipmitool/ipmi_channel.h b/include/ipmitool/ipmi_channel.h
index d9be57e..41f1b88 100644
--- a/include/ipmitool/ipmi_channel.h
+++ b/include/ipmitool/ipmi_channel.h
@@ -89,10 +89,16 @@ struct channel_info_t {
uint8_t aux_info[2];
};
-/* (22.23) Get Channel Access */
+
+/* (22.22 / 22.23) Set/Get Channel Access */
+typedef enum {
+ ALERTING_ENABLED = 0,
+ ALERTING_DISABLED = (1 << 5) /* See Table 22 */
+} alerting_t;
+
struct channel_access_t {
uint8_t access_mode;
- uint8_t alerting;
+ alerting_t alerting;
uint8_t channel;
uint8_t per_message_auth;
uint8_t privilege_limit;
diff --git a/lib/ipmi_lanp.c b/lib/ipmi_lanp.c
index 16c0d9a..fe0046f 100644
--- a/lib/ipmi_lanp.c
+++ b/lib/ipmi_lanp.c
@@ -1026,10 +1026,10 @@ ipmi_set_alert_enable(struct ipmi_intf *intf, uint8_t channel, uint8_t enable)
channel);
return (-1);
}
- if (enable != 0) {
- channel_access.alerting = 1;
+ if (enable) {
+ channel_access.alerting = ALERTING_ENABLED;
} else {
- channel_access.alerting = 0;
+ channel_access.alerting = ALERTING_DISABLED;
}
/* non-volatile */
ccode = _ipmi_set_channel_access(intf, channel_access, 1, 0);