~ubuntu-branches/ubuntu/saucy/nut/saucy

« back to all changes in this revision

Viewing changes to drivers/powernet.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2005-07-20 19:48:50 UTC
  • mto: (16.1.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20050720194850-oo61wjr33rrx2mre
Tags: upstream-2.0.2
ImportĀ upstreamĀ versionĀ 2.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * vim: ts=4 sw=4
3
 
 */
4
 
 
5
 
/*
6
 
 * powernet.h -- part of SNMP interface driver for APC SNMP devices.
7
 
 * Dmitry Frolov <frolov@riss-telecom.ru>
8
 
 */
9
 
 
10
 
#include <unistd.h>
11
 
#include <ucd-snmp/ucd-snmp-includes.h>
12
 
#include <shared-tables.h> 
13
 
 
14
 
#define PN_UPSDRV_VERSION       "1.0"
15
 
 
16
 
/* SNMP OIDs set */
17
 
#define OID_POWERNET_MIB        ".1.3.6.1.4.1.318"
18
 
/* info elements */
19
 
#define OID_MODEL_NAME          ".1.3.6.1.4.1.318.1.1.1.1.1.1.0"
20
 
#define OID_UPSIDEN                     ".1.3.6.1.4.1.318.1.1.1.1.1.2.0"
21
 
#define OID_FIRMREV                     ".1.3.6.1.4.1.318.1.1.1.1.2.1.0"
22
 
#define OID_MFRDATE                     ".1.3.6.1.4.1.318.1.1.1.1.2.2.0"
23
 
#define OID_SERIAL                      ".1.3.6.1.4.1.318.1.1.1.1.2.3.0"
24
 
#define OID_BATT_STATUS         ".1.3.6.1.4.1.318.1.1.1.2.1.1.0"
25
 
#define BATT_UNKNOWN            1       /* unknown -> INFO_STATUS/? */
26
 
#define BATT_NORMAL                     2       /* batteryNormal -> INFO_STATUS/? */
27
 
#define BATT_LOW                        3       /* batteryLow -> INFO_STATUS/LB */
28
 
#define OID_BATTDATE            ".1.3.6.1.4.1.318.1.1.1.2.1.3.0"
29
 
#define OID_BATT_CHARGE         ".1.3.6.1.4.1.318.1.1.1.2.2.1.0"
30
 
#define OID_UPSTEMP                     ".1.3.6.1.4.1.318.1.1.1.2.2.2.0"
31
 
#define OID_BATT_RUNTIME        ".1.3.6.1.4.1.318.1.1.1.2.2.3.0"
32
 
#define OID_INVOLT                      ".1.3.6.1.4.1.318.1.1.1.3.2.1.0"
33
 
#define OID_INFREQ                      ".1.3.6.1.4.1.318.1.1.1.3.2.4.0"
34
 
#define OID_POWER_STATUS        ".1.3.6.1.4.1.318.1.1.1.4.1.1.0"
35
 
#define PWR_OTHER                       1       /* other -> INFO_STATUS/? */
36
 
#define PWR_NORMAL                      2       /* normal -> INFO_STATUS/OL */
37
 
#define PWR_BATTERY                     3       /* battery -> INFO_STATUS/OB */
38
 
#define PWR_BOOSTER                     4       /* booster -> INFO_STATUS/BOOST */
39
 
#define PWR_SLEEPING            5       /* timedSleeping -> INFO_STATUS/OFF */
40
 
#define PWR_SOFT_BYPASS         6       /* bypass -> INFO_STATUS/? */
41
 
#define PWR_NONE                        7       /* none -> INFO_STATUS/OFF */
42
 
#define PWR_REBOOTING           8       /* rebooting -> INFO_STATUS/? */
43
 
#define PWR_HARD_BYPASS         9       /* bypass -> INFO_STATUS/? */
44
 
#define PWR_FAIL_BYPASS         10      /* bypass -> INFO_STATUS/? */
45
 
#define PWR_SLEEPING2           11      /* sleepingUntilPowerReturn -> INFO_STATUS/OFF */
46
 
#define PWR_REDUCER                     12      /* reducer -> INFO_STATUS/TRIM */
47
 
#define OID_OUTVOLT                     ".1.3.6.1.4.1.318.1.1.1.4.2.1.0"
48
 
#define OID_LOADPCT                     ".1.3.6.1.4.1.318.1.1.1.4.2.3.0"
49
 
#define OID_HIGHXFER            ".1.3.6.1.4.1.318.1.1.1.5.2.2.0"
50
 
#define OID_LOWXFER                     ".1.3.6.1.4.1.318.1.1.1.5.2.3.0"
51
 
#define OID_SLFTSTRES           ".1.3.6.1.4.1.318.1.1.1.7.2.3.0"
52
 
/* XXX can't find appropriate OID for INFO_BATTVOLT. */
53
 
/*#define OID_BATT_VOLTAGE      ".1.3.6.1.4.1.318.???"*/
54
 
/* commands */
55
 
#define OID_OFF                         ".1.3.6.1.4.1.318.1.1.1.6.2.1.0"
56
 
#define OFF_DO                          2
57
 
#define OFF_GRACEFUL            3
58
 
#define OID_REBOOT                      ".1.3.6.1.4.1.318.1.1.1.6.2.2.0"
59
 
#define REBOOT_DO                       2
60
 
#define REBOOT_GRACEFUL         3
61
 
#if 0   /* not used. */
62
 
#define OID_SLEEP                       ".1.3.6.1.4.1.318.1.1.1.6.2.3.0"
63
 
#define SLEEP_ON                        "2"
64
 
#define SLEEP_GRACEFUL          "3"
65
 
#endif
66
 
#define OID_SIMPWF                      ".1.3.6.1.4.1.318.1.1.1.6.2.4.0"
67
 
#define SIMPWF_DO                       2
68
 
#define OID_FPTEST                      ".1.3.6.1.4.1.318.1.1.1.6.2.5.0"
69
 
#define FPTEST_DO                       2
70
 
#define OID_ON                          ".1.3.6.1.4.1.318.1.1.1.6.2.6.0"
71
 
#define ON_DO                           2
72
 
#define OID_BYPASS                      ".1.3.6.1.4.1.318.1.1.1.6.2.7.0"
73
 
#define BYPASS_ON                       2
74
 
#define BYPASS_OFF                      3
75
 
#define OID_SELFTEST            ".1.3.6.1.4.1.318.1.1.1.7.2.2.0"
76
 
#define SELFTEST_DO                     2
77
 
#define OID_CAL                         ".1.3.6.1.4.1.318.1.1.1.7.2.5.0"
78
 
#define CAL_DO                          2
79
 
#define CAL_CANCEL                      3
80
 
#define OID_CAL_RESULTS         ".1.3.6.1.4.1.318.1.1.1.7.2.6.0"
81
 
#define CAL_OK                          1
82
 
#define CAL_INVALID                     2
83
 
#define CAL_INPROGRESS          3
84
 
/*#define OID_OUTPUT_TAB        "XXX"*/
85
 
#define OID_OUTCURRENT          ".1.3.6.1.4.1.318.1.1.1.4.2.4.0"
86
 
#define OID_REQOUTVOLT          ".1.3.6.1.4.1.318.1.1.1.5.2.1.0"
87
 
#define OID_RETCAPACITY         ".1.3.6.1.4.1.318.1.1.1.5.2.6.0"
88
 
#define OID_CONSERVE            ".1.3.6.1.4.1.318.1.1.1.6.1.1.0"
89
 
#define CONSERVE_DO                     2
90
 
#define OID_NEEDREPLBATT        ".1.3.6.1.4.1.318.1.1.1.2.2.4.0"
91
 
#define RB_NONEED                       1
92
 
#define RB_NEED                         2
93
 
#define OID_SENS                        ".1.3.6.1.4.1.318.1.1.1.5.2.7.0"
94
 
#define OID_GRACEDELAY          ".1.3.6.1.4.1.318.1.1.1.5.2.10.0"
95
 
#define OID_RETDELAY            ".1.3.6.1.4.1.318.1.1.1.5.2.9.0"
96
 
#define OID_LOBATTIME           ".1.3.6.1.4.1.318.1.1.1.5.2.8.0"
97
 
 
98
 
#define PN_VAR_COMMUNITY        "community"
99
 
#define PN_VAR_SDTYPE           "sdtype"
100
 
 
101
 
#define PN_INFOSIZE             128
102
 
#define PN_BUFSIZE              32
103
 
#define PN_LARGEBUF             256
104
 
 
105
 
#define PN_STALE_RETRY  10              /* retry to retrieve stale element */
106
 
                                                                /* after this number of iterations. */
107
 
 
108
 
/* modes to pn_ups_walk. */
109
 
#define PN_WALKMODE_INIT        0
110
 
#define PN_WALKMODE_UPDATE      1
111
 
 
112
 
/* use explicit booleans */
113
 
#ifndef FALSE
114
 
typedef enum ebool { FALSE, TRUE } bool;
115
 
#else
116
 
typedef int bool;
117
 
#endif
118
 
 
119
 
typedef struct {
120
 
        int info_type;                          /* INFO_ or CMD_ element */
121
 
        int info_flags;                         /* flags to set in addinfo */
122
 
        int info_len;                           /* length of strings if STR, */
123
 
                                                                /* cmd value if CMD. */
124
 
        char *OID;                                      /* SNMP OID or NULL */
125
 
        char *dfl;                                      /* default value */
126
 
        unsigned long flags;            /* my flags */
127
 
} pn_info_t;
128
 
 
129
 
#define PN_FLAG_OK                      (1 << 0)        /* show element to upsd. */
130
 
#define PN_FLAG_STATIC          (1 << 1)        /* retrieve info only once. */
131
 
#define PN_FLAG_ABSENT          (1 << 2)        /* data is absent in the device, */
132
 
                                                                                /* use default value. */
133
 
#define PN_FLAG_STALE           (1 << 3)        /* data stale, don't try too often. */
134
 
 
135
 
/* status string components */
136
 
#define PN_STATUS_PWR           (0 << 8)        /* indicates power status element */
137
 
#define PN_STATUS_BATT          (1 << 8)        /* indicates battery status element */
138
 
#define PN_STATUS_CAL           (2 << 8)        /* indicates calibration status element */
139
 
#define PN_STATUS_RB            (3 << 8)        /* indicates replace battery status element */
140
 
#define PN_STATUS_NUM_ELEM      4
141
 
#define PN_STATUS_INDEX(t)      (((t) >> 8) & 7)
142
 
 
143
 
/* hints for pn_ups_set, applicable only to rw vars */
144
 
#define PN_TYPE_INT                     (0 << 16)       /* cast to int when setting value */
145
 
#define PN_TYPE_STRING          (1 << 16)       /* cast to string */
146
 
#define PN_TYPE_TIME            (2 << 16)       /* cast to int */
147
 
#define PN_TYPE(t)                      ((t)->flags & 7 << 16)
148
 
 
149
 
#define PN_CMD_MASK                     0x2000
150
 
 
151
 
void pn_snmp_init(const char *type, const char *host, const char *community);
152
 
void pn_snmp_cleanup(void);
153
 
struct snmp_pdu *pn_snmp_get(const char *OID);
154
 
bool pn_snmp_get_str(const char *OID, char *buf, size_t buf_len);
155
 
bool pn_snmp_get_int(const char *OID, long *pval);
156
 
bool pn_snmp_set(const char *OID, char type, const char *value);
157
 
bool pn_snmp_set_str(const char *OID, const char *value);
158
 
bool pn_snmp_set_int(const char *OID, long value);
159
 
bool pn_snmp_set_time(const char *OID, long value);
160
 
void pn_snmp_perror(struct snmp_session *, int, struct snmp_pdu *,
161
 
        const char *fmt, ...);
162
 
void pn_startup(void);
163
 
void pn_cleanup(void);
164
 
void pn_init_instcmds(void);
165
 
void pn_setuphandlers(void);
166
 
void pn_setinfo(int type, const char *value, int flags, int auxdata);
167
 
void pn_status_init(void);
168
 
void pn_status_set(pn_info_t *, long value);
169
 
void pn_status_commit(void);
170
 
pn_info_t *pn_find_info(int type);
171
 
struct netvars_t *pn_find_netvar(int type);
172
 
struct instcmds_t *pn_find_instcmd(int cmd);
173
 
void pn_ups_walk(int mode);
174
 
bool pn_ups_get(pn_info_t *pn_info_p);
175
 
void pn_ups_set(int type, int data_len, char *data);
176
 
void pn_ups_instcmd(int auxcmd, int data_len, char *data);
177
 
void pn_shutdown_ups(void);
178
 
 
179
 
pn_info_t pn_info[] = {
180
 
 
181
 
        /* info elements. */
182
 
        { INFO_MFR, FLAG_STRING, PN_INFOSIZE, NULL, "APC",
183
 
                PN_FLAG_STATIC | PN_FLAG_ABSENT | PN_FLAG_OK },
184
 
        { INFO_MODEL, FLAG_STRING, PN_INFOSIZE, OID_MODEL_NAME,
185
 
                "Generic Powernet SNMP device", PN_FLAG_STATIC | PN_FLAG_OK },
186
 
        { INFO_SERIAL, FLAG_STRING, PN_INFOSIZE, OID_SERIAL, "",
187
 
                PN_FLAG_STATIC | PN_FLAG_OK },
188
 
        { INFO_MFRDATE, FLAG_STRING, PN_INFOSIZE, OID_BATTDATE, "",
189
 
                PN_FLAG_OK | PN_FLAG_STATIC },
190
 
        { INFO_UTILITY, 0, 0, OID_INVOLT, "", PN_FLAG_OK },
191
 
        { INFO_BATTPCT, 0, 0, OID_BATT_CHARGE, "", PN_FLAG_OK },
192
 
        { INFO_STATUS, FLAG_STRING, PN_INFOSIZE, OID_POWER_STATUS, "OFF",
193
 
                PN_FLAG_OK | PN_STATUS_PWR },
194
 
        { INFO_STATUS, FLAG_STRING, PN_INFOSIZE, OID_BATT_STATUS, "",
195
 
                PN_FLAG_OK | PN_STATUS_BATT },
196
 
        { INFO_STATUS, FLAG_STRING, PN_INFOSIZE, OID_CAL_RESULTS, "",
197
 
                PN_FLAG_OK | PN_STATUS_CAL },
198
 
        { INFO_STATUS, FLAG_STRING, PN_INFOSIZE, OID_NEEDREPLBATT, "",
199
 
                PN_FLAG_OK | PN_STATUS_RB },
200
 
        { INFO_UPSTEMP, 0, 0, OID_UPSTEMP, "", PN_FLAG_OK },
201
 
        { INFO_ACFREQ, 0, 0, OID_INFREQ, "", PN_FLAG_OK },
202
 
        { INFO_LOADPCT, 0, 0, OID_LOADPCT, "", PN_FLAG_OK },
203
 
        { INFO_FIRMREV, 0, 0, OID_FIRMREV, "",
204
 
                PN_FLAG_STATIC | PN_FLAG_OK },
205
 
        { INFO_RUNTIME, 0, 0, OID_BATT_RUNTIME, "", PN_TYPE_TIME |  PN_FLAG_OK },
206
 
        /* can't find appropriate OID for INFO_BATTVOLT. */
207
 
        /*{ INFO_BATTVOLT, 0, 1, OID_BATT_VOLTAGE, "", PN_FLAG_OK },*/
208
 
        { INFO_OUTVOLT, 0, 0, OID_OUTVOLT, "", PN_FLAG_OK },
209
 
        { INFO_UPSIDENT, FLAG_STRING | FLAG_RW, 8, OID_UPSIDEN, "",
210
 
                PN_FLAG_OK | PN_FLAG_STATIC | PN_TYPE_STRING },
211
 
        { INFO_BATTDATE, FLAG_STRING | FLAG_RW, 8, OID_MFRDATE, "",
212
 
                PN_FLAG_OK | PN_FLAG_STATIC | PN_TYPE_STRING },
213
 
        { INFO_SLFTSTRES, FLAG_STRING, PN_INFOSIZE, OID_SLFTSTRES, "",
214
 
                PN_FLAG_OK },
215
 
        { INFO_LOWXFER, FLAG_STRING | FLAG_RW, 3, OID_LOWXFER, "",
216
 
                PN_TYPE_INT | PN_FLAG_OK },
217
 
        { INFO_HIGHXFER, FLAG_STRING | FLAG_RW, 3, OID_HIGHXFER, "",
218
 
                PN_TYPE_INT | PN_FLAG_OK },
219
 
        { INFO_CURRENT, 0, 0, OID_OUTCURRENT, "", PN_FLAG_OK },
220
 
        { INFO_REQVOLT, FLAG_STRING | FLAG_RW, 3, OID_REQOUTVOLT, "",
221
 
                PN_TYPE_INT | PN_FLAG_OK },
222
 
        { INFO_WAKETHRSH, FLAG_STRING | FLAG_RW, 3, OID_RETCAPACITY, "",
223
 
                PN_TYPE_INT | PN_FLAG_OK },
224
 
        { INFO_LINESENS, FLAG_STRING | FLAG_RW, 1, OID_SENS, "",
225
 
                PN_TYPE_INT | PN_FLAG_OK },
226
 
        { INFO_GRACEDELAY, FLAG_STRING | FLAG_RW, 3, OID_GRACEDELAY, "",
227
 
                PN_TYPE_TIME | PN_FLAG_OK },
228
 
        { INFO_WAKEDELAY, FLAG_STRING | FLAG_RW, 3, OID_RETDELAY, "",
229
 
                PN_TYPE_TIME | PN_FLAG_OK },
230
 
        { INFO_LOBATTIME, FLAG_STRING | FLAG_RW, 3, OID_LOBATTIME, "",
231
 
                PN_TYPE_TIME | PN_FLAG_OK },
232
 
 
233
 
        /* instant commands. */
234
 
        { CMD_OFF, 0, OFF_DO, OID_OFF, "", PN_FLAG_OK },
235
 
        { CMD_ON, 0, ON_DO, OID_ON, "", PN_FLAG_OK },
236
 
        { CMD_SHUTDOWN, 0, OFF_GRACEFUL, OID_OFF, "", PN_FLAG_OK },
237
 
        { CMD_SDRET, 0, REBOOT_GRACEFUL, OID_REBOOT, "", PN_FLAG_OK },
238
 
        { CMD_SOFTDOWN, 0, CONSERVE_DO, OID_CONSERVE, "", PN_FLAG_OK },
239
 
        { CMD_SIMPWF, 0, SIMPWF_DO, OID_SIMPWF, "", PN_FLAG_OK },
240
 
        { CMD_FPTEST, 0, FPTEST_DO, OID_FPTEST, "", PN_FLAG_OK },
241
 
        { CMD_BYPASS, 0, BYPASS_ON, OID_BYPASS, "", PN_FLAG_OK },
242
 
        { CMD_BTEST1, 0, SELFTEST_DO, OID_SELFTEST, "", PN_FLAG_OK },
243
 
        { CMD_CAL0, 0, CAL_CANCEL, OID_CAL, "", PN_FLAG_OK },
244
 
        { CMD_CAL1, 0, CAL_DO, OID_CAL, "", PN_FLAG_OK },
245
 
 
246
 
        /* end of structure. */
247
 
        { 0, 0, 0, NULL, NULL, 0 }
248
 
};
249
 
 
250
 
#define NUM_INFO_ITEMS  (sizeof(pn_info)/sizeof(pn_info[0]))