Skip to content

Commit 192b6a2

Browse files
committed
vertiv-mib: fix ID strings and implement high-precision OIDs for PSI5
1 parent 6c08c8b commit 192b6a2

1 file changed

Lines changed: 83 additions & 104 deletions

File tree

drivers/vertiv-mib.c

Lines changed: 83 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -27,129 +27,108 @@
2727

2828
#include "vertiv-mib.h"
2929

30-
#define VERTIV_MIB_VERSION "0.01"
30+
#define VERTIV_MIB_VERSION "0.04"
3131

3232
/* Base OIDs from IS-UNITY-DP Card */
3333
#define VERTIV_BASEOID ".1.3.6.1.4.1.476.1.42"
34-
#define VERTIV_ID_OID VERTIV_BASEOID ".2.4.2.1.4.1"
34+
#define VERTIV_ID_OID VERTIV_BASEOID ".2.4.2.1.4.1"
3535
#define VERTIV_VAL_OID VERTIV_BASEOID ".3.9.30.1.20.1.2.1"
3636
#define VERTIV_ALM_OID VERTIV_BASEOID ".3.9.20.1.10.1.2.100"
3737
#define VERTIV_PWRSTATUS_OID VERTIV_BASEOID ".3.5.3"
3838
#define VERTIV_BEEPER_OID VERTIV_VAL_OID ".6188"
3939

40-
static info_lkp_t ietf_beeper_status_info[] = {
41-
info_lkp_default(1, "disabled"),
42-
info_lkp_default(2, "enabled"),
43-
info_lkp_default(3, "muted"),
44-
info_lkp_sentinel
45-
};
46-
4740
static info_lkp_t vertiv_beeper_status_info[] = {
48-
info_lkp_default(1, "enabled"),
49-
info_lkp_default(2, "disabled"),
50-
info_lkp_sentinel
41+
info_lkp_default(1, "enabled"),
42+
info_lkp_default(2, "disabled"),
43+
info_lkp_sentinel
5144
};
5245

53-
/* FIXME: the below may introduce status redundancy, that needs to be
54-
* addressed by the driver, as for usbhid-ups! */
55-
/*
56-
* DESCRIPTION
57-
* The present source of output power. The enumeration
58-
* none(2) indicates that there is no source of output
59-
* power (and therefore no output power), for example,
60-
* the system has opened the output breaker.
61-
*
62-
* NOTE: In a single-module system, this point
63-
* is intended to have the same behavior as
64-
* the RFC1628 point upsOutputSource."
65-
*/
6646
static info_lkp_t vertiv_power_source_info[] = {
67-
info_lkp_default(1, ""), /* other */
68-
info_lkp_default(2, "OFF"), /* none */
69-
info_lkp_default(3, "OL"), /* normal */
70-
info_lkp_default(4, "BYPASS"), /* bypass */
71-
info_lkp_default(5, "OB"), /* battery */
72-
info_lkp_default(6, "BOOST"), /* booster */
73-
info_lkp_default(7, "TRIM"), /* reducer */
74-
info_lkp_sentinel
47+
info_lkp_default(1, "other"),
48+
info_lkp_default(2, "OFF"),
49+
info_lkp_default(3, "OL"),
50+
info_lkp_default(4, "BYPASS"),
51+
info_lkp_default(5, "OB"),
52+
info_lkp_default(6, "BOOST"),
53+
info_lkp_default(7, "TRIM"),
54+
info_lkp_sentinel
7555
};
7656

7757
static snmp_info_t vertiv_mib[] = {
78-
/* standard MIB items */
79-
snmp_info_default("device.description", ST_FLAG_STRING | ST_FLAG_RW, SU_INFOSIZE, ".1.3.6.1.2.1.1.1.0", NULL, SU_FLAG_OK | SU_FLAG_SEMI_STATIC, NULL),
80-
snmp_info_default("device.contact", ST_FLAG_STRING | ST_FLAG_RW, SU_INFOSIZE, ".1.3.6.1.2.1.1.4.0", NULL, SU_FLAG_OK | SU_FLAG_SEMI_STATIC, NULL),
81-
snmp_info_default("device.location", ST_FLAG_STRING | ST_FLAG_RW, SU_INFOSIZE, ".1.3.6.1.2.1.1.6.0", NULL, SU_FLAG_OK | SU_FLAG_SEMI_STATIC, NULL),
82-
83-
/* Device Identification from vendor MIB */
84-
snmp_info_default("device.mfr", 0, 1.0, VERTIV_BASEOID ".2.1.1.0", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
85-
snmp_info_default("device.model", 0, 1.0, VERTIV_ID_OID, NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
86-
snmp_info_default("device.serial", 0, 1.0, VERTIV_BASEOID ".2.4.2.1.7.1", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
87-
88-
/* UPS Measurements - Scaling verified via Audit */
89-
snmp_info_default("ups.load", 0, 1.0, VERTIV_VAL_OID ".5861", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
90-
snmp_info_default("ups.temperature", 0, 1.0, VERTIV_BASEOID ".3.9.30.1.10.1.2.1.4291", NULL, SU_FLAG_NEGINVALID, NULL),
91-
92-
/* Battery Data */
93-
snmp_info_default("battery.charge", 0, 1.0, VERTIV_VAL_OID ".4153", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
94-
/* Multiplier 60.0 converts UPS minutes to NUT seconds */
95-
snmp_info_default("battery.runtime", 0, 60.0, VERTIV_VAL_OID ".4150", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
96-
snmp_info_default("battery.voltage", 0, 1.0, VERTIV_VAL_OID ".4148", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
97-
98-
/* Power Quality - 0.1 multiplier for tenths of Volts/Hz */
99-
snmp_info_default("input.voltage", 0, 0.1, VERTIV_VAL_OID ".4096", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
100-
snmp_info_default("input.frequency", 0, 0.1, VERTIV_VAL_OID ".4105", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
101-
snmp_info_default("output.voltage", 0, 0.1, VERTIV_VAL_OID ".4385", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
102-
snmp_info_default("output.current", 0, 0.1, VERTIV_VAL_OID ".4204", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
103-
snmp_info_default("output.power", 0, 1.0, VERTIV_VAL_OID ".4208", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
104-
105-
/* UPS Status */
106-
/* Output Source: 3=Normal(OL), 4/5=Battery(OB) et al */
107-
snmp_info_default("ups.status", ST_FLAG_STRING, SU_INFOSIZE, VERTIV_VAL_OID ".4872", "", SU_STATUS_PWR | SU_FLAG_OK, vertiv_power_source_info),
108-
109-
/* Beeper status and commands */
110-
snmp_info_default("ups.beeper.status", ST_FLAG_STRING, SU_INFOSIZE, VERTIV_BEEPER_OID, "", SU_FLAG_UNIQUE, vertiv_beeper_status_info),
111-
112-
snmp_info_default("beeper.disable", 0, 1, VERTIV_BEEPER_OID, "2", SU_TYPE_CMD, NULL),
113-
snmp_info_default("beeper.enable", 0, 1, VERTIV_BEEPER_OID, "1", SU_TYPE_CMD, NULL),
114-
115-
/* IETF MIB fallback */
116-
snmp_info_default("ups.beeper.status", ST_FLAG_STRING, SU_INFOSIZE, "1.3.6.1.2.1.33.1.9.8.0", "", SU_FLAG_UNIQUE, ietf_beeper_status_info),
117-
#if 0
118-
snmp_info_default("beeper.disable", 0, 1, "1.3.6.1.2.1.33.1.9.8.0", "1", SU_TYPE_CMD, NULL),
119-
snmp_info_default("beeper.enable", 0, 1, "1.3.6.1.2.1.33.1.9.8.0", "2", SU_TYPE_CMD, NULL),
120-
#endif
121-
snmp_info_default("beeper.mute", 0, 1, "1.3.6.1.2.1.33.1.9.8.0", "3", SU_TYPE_CMD, NULL),
122-
123-
/* Shutdown / Restart Control
124-
* NOTE: Other sources suggest
125-
* "ups.delay.shutdown" => VERTIV_BASEOID ".3.3.5.1.0"
126-
* "ups.delay.start" => VERTIV_BASEOID ".3.3.5.2.0"
127-
*/
128-
snmp_info_default("ups.delay.shutdown", ST_FLAG_RW, 1.0, VERTIV_VAL_OID ".5814", "", SU_TYPE_TIME | SU_FLAG_OK, NULL),
129-
snmp_info_default("ups.delay.start", ST_FLAG_RW, 1.0, VERTIV_VAL_OID ".5816", "", SU_TYPE_TIME | SU_FLAG_OK, NULL),
130-
131-
/* end of structure. */
132-
snmp_info_sentinel
58+
/* Standard MIB items */
59+
snmp_info_default("device.description", ST_FLAG_STRING | ST_FLAG_RW, SU_INFOSIZE, ".1.3.6.1.2.1.1.1.0", NULL, SU_FLAG_OK | SU_FLAG_SEMI_STATIC, NULL),
60+
snmp_info_default("device.contact", ST_FLAG_STRING | ST_FLAG_RW, SU_INFOSIZE, ".1.3.6.1.2.1.1.4.0", NULL, SU_FLAG_OK | SU_FLAG_SEMI_STATIC, NULL),
61+
snmp_info_default("device.location", ST_FLAG_STRING | ST_FLAG_RW, SU_INFOSIZE, ".1.3.6.1.2.1.1.6.0", NULL, SU_FLAG_OK | SU_FLAG_SEMI_STATIC, NULL),
62+
63+
/* Device Identification */
64+
snmp_info_default("device.mfr", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".2.1.1.0", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
65+
snmp_info_default("device.model", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".2.4.2.1.4.1", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
66+
snmp_info_default("device.serial", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".2.4.2.1.7.1", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
67+
snmp_info_default("ups.firmware", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".2.4.2.1.5.1", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
68+
69+
/* Extended Identification */
70+
snmp_info_default("device.type", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".3.9.20.1.20.1.2.1.4553", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
71+
snmp_info_default("ups.mfr", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".3.9.20.1.20.1.2.1.4333", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
72+
snmp_info_default("ups.model", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".3.9.20.1.20.1.2.1.4240", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
73+
74+
/* UPS Measurements & Topology (High-precision) */
75+
snmp_info_default("ups.load", 0, 1.0, VERTIV_VAL_OID ".5861", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
76+
snmp_info_default("ups.temperature", 0, 1.0, VERTIV_BASEOID ".3.9.30.1.10.1.2.1.4291", NULL, SU_FLAG_NEGINVALID, NULL),
77+
snmp_info_default("ups.type", ST_FLAG_STRING, 1.0, VERTIV_BASEOID ".3.9.20.1.20.1.2.1.6199", NULL, SU_FLAG_OK | SU_FLAG_STATIC, NULL),
78+
79+
/* Battery Data */
80+
snmp_info_default("battery.charge", 0, 1.0, VERTIV_VAL_OID ".4153", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
81+
snmp_info_default("battery.runtime", 0, 60.0, VERTIV_VAL_OID ".4150", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
82+
snmp_info_default("battery.voltage", 0, 1.0, VERTIV_VAL_OID ".4148", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
83+
snmp_info_default("battery.voltage.nominal", 0, 1.0, VERTIV_VAL_OID ".6189", "", SU_FLAG_OK | SU_FLAG_STATIC, NULL),
84+
85+
/* Power Quality - Scaled (0.1) for high precision decimal values */
86+
snmp_info_default("input.voltage", 0, 0.1, VERTIV_VAL_OID ".4096", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
87+
snmp_info_default("input.current", 0, 0.1, VERTIV_VAL_OID ".4113", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
88+
snmp_info_default("input.frequency", 0, 0.1, VERTIV_VAL_OID ".4105", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
89+
snmp_info_default("input.voltage.nominal", 0, 1.0, VERTIV_VAL_OID ".4102", "", SU_FLAG_OK | SU_FLAG_STATIC, NULL),
90+
snmp_info_default("input.current.nominal", 0, 1.0, VERTIV_VAL_OID ".4104", "", SU_FLAG_OK | SU_FLAG_STATIC, NULL),
91+
snmp_info_default("input.frequency.nominal", 0, 1.0, VERTIV_VAL_OID ".4103", "", SU_FLAG_OK | SU_FLAG_STATIC, NULL),
92+
snmp_info_default("output.voltage", 0, 0.1, VERTIV_VAL_OID ".4385", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
93+
snmp_info_default("output.current", 0, 0.1, VERTIV_VAL_OID ".4204", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
94+
snmp_info_default("output.frequency", 0, 0.1, VERTIV_VAL_OID ".4207", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
95+
snmp_info_default("output.power", 0, 1.0, VERTIV_VAL_OID ".4208", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
96+
snmp_info_default("output.power.apparent", 0, 1.0, VERTIV_VAL_OID ".4209", "", SU_FLAG_OK | SU_FLAG_NEGINVALID, NULL),
97+
snmp_info_default("output.voltage.nominal", 0, 1.0, VERTIV_VAL_OID ".4260", "", SU_FLAG_OK | SU_FLAG_STATIC, NULL),
98+
snmp_info_default("output.power.nominal", 0, 1.0, VERTIV_VAL_OID ".4264", "", SU_FLAG_OK | SU_FLAG_STATIC, NULL),
99+
100+
/* UPS Status & Beeper */
101+
snmp_info_default("ups.status", ST_FLAG_STRING, SU_INFOSIZE, VERTIV_VAL_OID ".4872", "", SU_STATUS_PWR | SU_FLAG_OK, vertiv_power_source_info),
102+
snmp_info_default("ups.beeper.status", ST_FLAG_STRING, SU_INFOSIZE, VERTIV_BEEPER_OID, "", SU_FLAG_OK, vertiv_beeper_status_info),
103+
104+
/* Instant Commands */
105+
snmp_info_default("beeper.disable", 0, 1, VERTIV_BEEPER_OID, "2", SU_TYPE_CMD, NULL),
106+
snmp_info_default("beeper.enable", 0, 1, VERTIV_BEEPER_OID, "1", SU_TYPE_CMD, NULL),
107+
108+
/* Shutdown & Restart */
109+
snmp_info_default("ups.delay.shutdown", ST_FLAG_RW, 1.0, VERTIV_VAL_OID ".5814", "", SU_TYPE_TIME | SU_FLAG_OK, NULL),
110+
snmp_info_default("ups.delay.start", ST_FLAG_RW, 1.0, VERTIV_VAL_OID ".5816", "", SU_TYPE_TIME | SU_FLAG_OK, NULL),
111+
112+
snmp_info_sentinel
133113
};
134114

135115
static alarms_info_t vertiv_alarms[] = {
136-
/* Event Branch Monitoring */
137-
{ VERTIV_ALM_OID ".4168", "OB", "Battery Discharging" },
138-
{ VERTIV_ALM_OID ".4162", "LB", "Battery Low" },
139-
{ VERTIV_ALM_OID ".5806", "OVER", "Output Overload" },
140-
{ VERTIV_ALM_OID ".6182", "RB", "Replace Battery" },
141-
{ VERTIV_ALM_OID ".4233", "FAULT", "Inverter Failure" },
142-
{ VERTIV_ALM_OID ".4310", "OT", "Over Temperature" },
143-
{ VERTIV_ALM_OID ".4215", "OFF", "UPS Output Off" },
144-
{ NULL, NULL, NULL }
116+
{ VERTIV_ALM_OID ".4168", "OB", "Battery Discharging" },
117+
{ VERTIV_ALM_OID ".4162", "LB", "Battery Low" },
118+
{ VERTIV_ALM_OID ".5806", "OVER", "Output Overload" },
119+
{ VERTIV_ALM_OID ".6182", "RB", "Replace Battery" },
120+
{ VERTIV_ALM_OID ".4233", "FAULT", "Inverter Failure" },
121+
{ VERTIV_ALM_OID ".4310", "OT", "Over Temperature" },
122+
{ VERTIV_ALM_OID ".4215", "OFF", "UPS Output Off" },
123+
{ NULL, NULL, NULL }
145124
};
146125

147126
mib2nut_info_t vertiv = {
148-
"vertiv",
149-
VERTIV_MIB_VERSION,
150-
VERTIV_PWRSTATUS_OID,/* Optional Power Status OID */
151-
VERTIV_ID_OID, /* Model Name OID */
152-
vertiv_mib,
153-
VERTIV_BASEOID, /* SysOID fingerprint */
154-
vertiv_alarms
127+
"vertiv",
128+
VERTIV_MIB_VERSION,
129+
VERTIV_PWRSTATUS_OID,
130+
VERTIV_ID_OID,
131+
vertiv_mib,
132+
VERTIV_BASEOID,
133+
vertiv_alarms
155134
};

0 commit comments

Comments
 (0)