1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
|
/*M*
// PVCS:
// $Workfile: ipmicmd.h $
// $Revision: 1.0 $
// $Modtime: 22 Jul 2002 08:51:14 $
// $Author: arcress $
//
// 10/24/02 arcress - made cmd param ushort to be more unique
//
*M*/
/*----------------------------------------------------------------------*
The BSD License
Copyright (c) 2002, Intel Corporation
Copyright (c) 2009 Kontron America, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
a.. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
b.. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
c.. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*----------------------------------------------------------------------*/
#define uchar unsigned char
#define uint32 unsigned int
#define uint64 unsigned long
// #ifdef __USE_MISC
/* Can use compatibility names for C types. (from sys/types.h) */
// typedef unsigned long int ulong;
// typedef unsigned short int ushort;
// typedef unsigned int uint;
// #else
#ifndef ushort
#define ushort unsigned short
#define ulong unsigned long
#define uint unsigned int
#endif
#ifdef WIN32
#define snprintf _snprintf
#define SockType SOCKET
#define SockInvalid INVALID_SOCKET
#else
#define SockType int
#define SockInvalid -1
#endif
// Other IPMI values
#define PUBLIC_BUS 0
#define PRIVATE_BUS 0x03
#define BMC_SA 0x20
#define BMC_LUN 0
#define SMS_LUN 2
#define HSC_SA 0xC0
#define ME_SA 0x2C
#define ME_BUS 0x06
#define ADDR_SMI 1
#define ADDR_IPMB 2
#define ACCESS_OK 0
#define IPMI_REQBUF_SIZE 255
#define IPMI_RSPBUF_SIZE 250 // was 80, then 1024, see MAX_BUFFER_SIZE
#define IPMI_LANBUF_SIZE 200 // see RS_LEN_MAX for IPMI LAN
// IPMI NetFn types, see Table 5-1
#define NETFN_CHAS 0x00 // chassis
#define NETFN_BRIDGE 0x02 // bridge
#define NETFN_SEVT 0x04 // sensor/event
#define NETFN_APP 0x06 // application
#define NETFN_FW 0x08 // firmware
#define NETFN_STOR 0x0a // storage
#define NETFN_TRANS 0x0c // transport
#define NETFN_SOL 0x34 // serial-over-lan (in IPMI 2.0, use TRANS)
#define NETFN_PICMG 0x2c // for ATCA PICMG systems
#ifndef IMBAPI_H__
// special IMB defines, duplicates if imb_api.h
#define MAX_BUFFER_SIZE 255
#define MAX_SDR_SIZE 128
#define GET_DEVICE_ID (0x01 | (NETFN_APP << 8))
#define WRITE_READ_I2C (0x52 | (NETFN_APP << 8)) /*=MASTER_WRITE_READ*/
#endif
#define PSW_MAX 20 /* IPMI Passwords max = 16 or 20 bytes*/
/* IPMI Commands, see Table 38-8, combined CMD and NETFN in unsigned short */
#define CMDMASK 0xff /* mask to leave only the command part */
#define WATCHDOG_RESET (0x22 | (NETFN_APP << 8))
#define WATCHDOG_SET (0x24 | (NETFN_APP << 8))
#define WATCHDOG_GET (0x25 | (NETFN_APP << 8))
#define GET_SYSTEM_GUID (0x37 | (NETFN_APP << 8))
#define SET_CHANNEL_ACC (0x40 | (NETFN_APP << 8))
#define GET_CHANNEL_ACC (0x41 | (NETFN_APP << 8))
#define GET_CHANNEL_INFO (0x42 | (NETFN_APP << 8))
#define SET_USER_ACCESS (0x43 | (NETFN_APP << 8))
#define GET_USER_ACCESS (0x44 | (NETFN_APP << 8))
#define SET_USER_NAME (0x45 | (NETFN_APP << 8))
#define GET_USER_NAME (0x46 | (NETFN_APP << 8))
#define SET_USER_PASSWORD (0x47 | (NETFN_APP << 8))
#define MASTER_WRITE_READ (0x52 | (NETFN_APP << 8))
// #define SET_PEF_ENABLE 0xA1 /* NETFN_APP (old) */
#define CHASSIS_STATUS 0x01 /* NETFN_CHAS (=00) */
#define CHASSIS_CTL 0x02 /* NETFN_CHAS (=00) */
#define CHASSIS_IDENTIFY 0x04 /* NETFN_CHAS (=00) */
#define SET_BOOT_OPTIONS 0x08 /* NETFN_CHAS (=00) */
#define GET_BOOT_OPTIONS 0x09 /* NETFN_CHAS (=00) */
#define GET_POWERON_HOURS 0x0F /* NETFN_CHAS (=00) */
#define GET_PEF_CONFIG (0x13 | (NETFN_SEVT << 8))
#define SET_PEF_CONFIG (0x12 | (NETFN_SEVT << 8))
#define GET_DEVSDR_INFO (0x20 | (NETFN_SEVT << 8))
#define GET_DEVICE_SDR (0x21 | (NETFN_SEVT << 8))
#define RESERVE_DEVSDR_REP (0x22 | (NETFN_SEVT << 8))
#define SET_SEVT_ENABLE (0x28 | (NETFN_SEVT << 8))
#define GET_SEVT_ENABLE (0x29 | (NETFN_SEVT << 8))
#define REARM_SENSOR (0x2A | (NETFN_SEVT << 8))
#define GET_FRU_INV_AREA (0x10 | (NETFN_STOR << 8))
#define READ_FRU_DATA (0x11 | (NETFN_STOR << 8))
#define WRITE_FRU_DATA (0x12 | (NETFN_STOR << 8))
#define GET_SENSOR_READING_FACTORS (0x23 | (NETFN_SEVT << 8))
#define SET_SENSOR_HYSTERESIS (0x24 | (NETFN_SEVT << 8))
#define GET_SENSOR_HYSTERESIS (0x25 | (NETFN_SEVT << 8))
#define SET_SENSOR_THRESHOLD (0x26 | (NETFN_SEVT << 8))
#define GET_SENSOR_THRESHOLD (0x27 | (NETFN_SEVT << 8))
#define GET_SENSOR_EVT_ENABLE (0x29 | (NETFN_SEVT << 8))
#define REARM_SENSOR_EVENTS (0x2A | (NETFN_SEVT << 8))
#define GET_SENSOR_EVT_STATUS (0x2B | (NETFN_SEVT << 8))
#define GET_SENSOR_READING (0x2D | (NETFN_SEVT << 8))
#define GET_SENSOR_TYPE (0x2F | (NETFN_SEVT << 8))
#define SET_LAN_CONFIG (0x01 | (NETFN_TRANS << 8))
#define GET_LAN_CONFIG (0x02 | (NETFN_TRANS << 8))
#define GET_LAN_STATS (0x04 | (NETFN_TRANS << 8))
#define SET_SER_CONFIG (0x10 | (NETFN_TRANS << 8))
#define GET_SER_CONFIG (0x11 | (NETFN_TRANS << 8))
#define SET_SER_MUX (0x12 | (NETFN_TRANS << 8))
#define GET_SEL_INFO (0x40 | (NETFN_STOR << 8))
#define GET_SEL_ALLOCATION_INFO (0x41 | (NETFN_STOR << 8))
#define RESERVE_SEL (0x42 | (NETFN_STOR << 8))
#define GET_SEL_ENTRY (0x43 | (NETFN_STOR << 8))
#define CLEAR_SEL (0x47 | (NETFN_STOR << 8))
#define GET_SEL_TIME (0x48 | (NETFN_STOR << 8))
#define GET_SDR_REPINFO (0x20 | (NETFN_STOR << 8))
#define RESERVE_SDR_REP (0x22 | (NETFN_STOR << 8))
#define GET_SDR (0x23 | (NETFN_STOR << 8))
#define ACTIVATE_SOL1 (0x01 | (NETFN_SOL << 8))
#define SET_SOL_CONFIG (0x03 | (NETFN_SOL << 8))
#define GET_SOL_CONFIG (0x04 | (NETFN_SOL << 8))
#define ACTIVATE_SOL2 (0x20 | (NETFN_TRANS << 8))
#define SET_SOL_CONFIG2 (0x21 | (NETFN_TRANS << 8))
#define GET_SOL_CONFIG2 (0x22 | (NETFN_TRANS << 8))
#define READ_EVENT_MSGBUF (0x35 | (NETFN_APP << 8))
#define GET_EVENT_RECEIVER (0x01 | (NETFN_SEVT << 8))
#define SMS_OS_REQUEST 0x10 /*(0x10 | (NETFN_APP << 8)) */
#define CMD_GET_SESSION_INFO 0x3D /* NETFN_APP */
#define CMD_SET_SYSTEM_INFO 0x58 /* NETFN_APP */
#define CMD_GET_SYSTEM_INFO 0x59 /* NETFN_APP */
/*
Other commands used for IPMI LAN:
GET_CHAN_AUTH (0x38 | (NETFN_APP << 8))
GET_SESS_CHAL (0x39 | (NETFN_APP << 8))
ACT_SESSION (0x3A | (NETFN_APP << 8))
SET_SESS_PRIV (0x3B | (NETFN_APP << 8))
CLOSE_SESSION (0x3C | (NETFN_APP << 8))
*/
#define IPMB_CLEAR_MSGF 0x30
#define IPMB_GET_MESSAGE 0x33
#define IPMB_SEND_MESSAGE 0x34
#define PICMG_SLAVE_BUS 0x40
/* commands under NETFN_PICMG */
#define PICMG_GET_PROPERTIES 0x00
#define PICMG_GET_LED_PROPERTIES 0x05
#define PICMG_SET_LED_STATE 0x07
#define PICMG_GET_LED_STATE 0x08
#define PICMG_ID 0x00
/* structure used by ipmi_cmd(), not used by ipmi_cmdraw */
#define NCMDS 62
typedef struct {
ushort cmdtyp;
uchar sa;
uchar bus;
uchar netfn;
uchar lun;
uchar len; /*length of request data (FYI, but not used here) */
uchar rslen; /*length of response data expected (not including ccode) */
} ipmi_cmd_t;
struct valstr {
ushort val;
const char * str;
};
struct oemvalstr {
uint oem;
ushort val;
const char * str;
};
/* IPMI driver types returned by get_driver_type() */
#define NDRIVERS 15
#define DRV_UNKNOWN 0
#define DRV_IMB 1
#define DRV_VA 2
#define DRV_MV 3
#define DRV_GNU 4
#define DRV_LD 5 /*LANDesk*/
#define DRV_LAN 6 /*IPMI LAN 1.5*/
#define DRV_KCS 7 /*direct KCS*/
#define DRV_SMB 8 /*direct SMBus/SSIF*/
#define DRV_LAN2 9 /*LANplus, IPMI LAN 2.0*/
#define DRV_MS 10 /*Microsoft ipmidrv.sys*/
#define DRV_BMC 11 /*Solaris 10 bmc */
#define DRV_SMC 12 /*SuperMicro Computer LAN mode*/
#define DRV_LIPMI 13 /*Solaris 8/9 lipmi */
#define DRV_LAN2I 14 /*LANplus with Intel OEM */
#define DRV_EFI 15 /*Intel EFI, ipmi.efi*/
#define DRV_IBM 16 /*LAN with IBM OEM mode*/
#define DRV_HP 17 /*LANplus with HP OEM mode*/
/* Event severity codes, used in ievents.c and oem*.c */
#define SEV_INFO 0
#define SEV_MIN 1
#define SEV_MAJ 2
#define SEV_CRIT 3
/* Errors returned by ipmiutil functions, lan, etc, see decode_rv() */
#define ERR_SDR_MALFORMED -25 /*SDR is malformed */
#define ERR_BAD_LENGTH -24 /*length < MIN */
#define ERR_BAD_FORMAT -23 /*bad format*/
#define ERR_USAGE -22 /*usage/help requested*/
#define ERR_NOT_FOUND -21 /*requested item not found*/
#define ERR_FILE_OPEN -20 /*cannot open file*/
#define LAN_ERR_DROPPED -19 /*Remote BMC dropped the connection*/
#define ERR_NOT_ALLOWED -18 /*access not allowed*/
#define ERR_BAD_PARAM -17 /*invalid parameter*/
#define ERR_NO_DRV -16 /*cannot open IPMI driver*/
#define LAN_ERR_V2 -15 /*BMC only supports IPMI 2.0*/
#define LAN_ERR_V1 -14 /*BMC only supports IPMI 1.x*/
#define LAN_ERR_OTHER -13
#define LAN_ERR_PING -12 /*error with ping*/
#define LAN_ERR_HOSTNAME -11 /*error resolving hostname*/
#define LAN_ERR_TOO_SHORT -10 /*recv data too short */
#define LAN_ERR_NOTSUPPORT -9 /*slave address != 0x20, not supported now */
#define LAN_ERR_INVPARAM -8 /*null pointers, etc. */
#define LAN_ERR_BADLENGTH -7 /*length > MAX */
#define LAN_ERR_TIMEOUT -6 /*timeout signal(SIGALRM) recvd */
#define LAN_ERR_ABORT -5 /*abort signal(SIGINT) recvd */
#define LAN_ERR_CONNECT -4 /*problem connecting to BMC*/
#define LAN_ERR_RECV_FAIL -3 /*receive failed, usually no response*/
#define LAN_ERR_SEND_FAIL -2 /*send failed */
#define ERR_BMC_MSG -504 /*error getting message from BMC*/
/* see ipmidir.h: ERGETTINGIPMIMESSAGE -504 */
/* values used to request AUTHTYPE */
#define IPMI_SESSION_AUTHTYPE_NONE 0x00
#define IPMI_SESSION_AUTHTYPE_MD2 0x01
#define IPMI_SESSION_AUTHTYPE_MD5 0x02
#define IPMI_SESSION_AUTHTYPE_PASSWORD 0x04
#define IPMI_SESSION_AUTHTYPE_OEM 0x05
#define AUTHTYPE_INIT 0xFF /*initial value, not set*/
/* mask values used for AUTHTYPE support */
#define IPMI_MASK_AUTHTYPE_NONE 0x01
#define IPMI_MASK_AUTHTYPE_MD2 0x02
#define IPMI_MASK_AUTHTYPE_MD5 0x04
#define IPMI_MASK_AUTHTYPE_PASSWORD 0x10
#define IPMI_MASK_AUTHTYPE_OEM 0x20
#define IPMI_PRIV_LEVEL_OEM 0x05
#define IPMI_PRIV_LEVEL_ADMIN 0x04
#define IPMI_PRIV_LEVEL_OPERATOR 0x03
#define IPMI_PRIV_LEVEL_USER 0x02
#define IPMI_PRIV_LEVEL_CALLBACK 0x01
#define VENDOR_INTEL 0x000157 /*=343.*/
#define VENDOR_KONTRON 0x003A98 /*=15000*/
#define VENDOR_NSC 0x000322
#define VENDOR_LMC 0x000878
#define VENDOR_TYAN 0x0019FD
#define VENDOR_NEC 0x000077
#define VENDOR_SUPERMICRO 0x002A7C /*=10876.*/
#define VENDOR_PEPPERCON 0x0028C5 /*used in SuperMicro AOC-SIMSO*/
#define VENDOR_FUJITSU 0x002880 /*Fujitsu-Siemens*/
#define VENDOR_MICROSOFT 0x000137 /* 311. */
#define VENDOR_SUN 0x00002A
#define VENDOR_DELL 0x0002A2
#define VENDOR_HP 0x00000B
#define VENDOR_IBM 0x000002
#define VENDOR_SUPERMICROX 0x00B980 /*=47488. used for Winbond/SuperMicro */
#define VENDOR_MAGNUM 5593 /* Magnum Technologies, also SuperMicro */
#define VENDOR_QUANTA 7244
#define VENDOR_XYRATEX 1993
#define VENDOR_NEWISYS 9237
#define VENDOR_CISCO 5771 /*=0x168B*/
#define VENDOR_LENOVO 0x004A66
#define VENDOR_LENOVO2 0x004F4D
#define VENDOR_ASUS 0x000A3F
#define VENDOR_MITAC 6653 /*=0x19FD*/
#define PRODUCT_QUANTA_S99Q 21401
#define PRODUCT_QUANTA_QSSC_S4R 64 /*0x0040*/
#define URNLOOPS 1000 /* default is 300 ms, Urbanna needs 1000 ms */
#define LOG_MSG_LENGTH 1024 /*max len of log message*/
#define SZGNODE 80 /* max len of a nodename */
#define BDELIM '|' /*delimeter for canonical output*/
#define BCOMMA ',' /*delimeter for CSV output*/
#define BCOLON ':' /*delimeter some output with colons*/
#define BCOMMENT '#' /*delimeter '#' used for comments */
#define RT_OEMIU 0xDB /*record type for OEM ipmiutil events*/
#ifndef LOG_WARN
#define LOG_EMERG 0 // system is unusable
#define LOG_ALERT 1 // action must be taken immediately
#define LOG_CRIT 2 // critical conditions
#define LOG_ERR 3 // error conditions
#define LOG_WARN 4 // warning conditions
#define LOG_NOTICE 5 // normal but significant condition
#define LOG_INFO 6 // informational
#define LOG_DEBUG 7 // debug-level messages
#endif
typedef struct {
char node[SZGNODE+1];
char user[SZGNODE+1];
char pswd[PSW_MAX+1];
int auth_type; /* if 0, use any: MD5, MD2, etc.*/
int priv; /* IPMI_PRIV_LEVEL_USER or IPMI_PRIV_LEVEL_ADMIN */
int cipher;
unsigned char addr[128]; /* sizeof(struct sockaddr_storage) = 128 */
int addr_len; /* struct sockaddr_in/_in6 gaddr; _in6=28, _in=16 bytes*/
int port;
} LAN_OPT; /* used for IPMI LAN, specified with option -NUP, etc. */
#ifndef _IPMI_RQ_
#define _IPMI_RQ_ 1
/* structure used in ipmi_sendrecv, maps to ipmitool syntax. */
struct ipmi_rq {
struct {
uchar netfn:6;
uchar lun:2;
uchar cmd;
uchar target_cmd;
ushort data_len;
uchar *data;
} msg;
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* ------------------------ SUBROUTINES ------------------------- */
/*
* ipmi_cmd
* ushort cmd (input): (netfn << 8) + command
* uchar *pdata (input): pointer to ipmi data
* int sdata (input): size of ipmi data
* uchar *presp (output): pointer to response data buffer
* int *sresp (input/output): on input, size of response buffer,
* on output, length of response data
* uchar *cc (output): completion code
* char fdebugcmd(input): flag =1 if debug output desired
* returns 0 if successful, <0 if error
*/
int ipmi_cmd(ushort cmd, uchar *pdata, int sdata, uchar *presp,
int *sresp, uchar *pcc, char fdebugcmd);
/*
* ipmi_cmdraw
* uchar cmd (input): IPMI Command
* uchar netfn (input): IPMI NetFunction
* uchar sa (input): IPMI Slave Address of the MC
* uchar bus (input): BUS of the MC
* uchar lun (input): IPMI LUN
* uchar *pdata (input): pointer to ipmi data
* int sdata (input): size of ipmi data
* uchar *presp (output): pointer to response data buffer
* int *sresp (input/output): on input, size of response buffer,
* on output, length of response data
* uchar *cc (output): completion code
* char fdebugcmd(input): flag =1 if debug output desired
* returns 0 if successful, <0 if error
*/
int ipmi_cmdraw(uchar cmd, uchar netfn, uchar sa, uchar bus, uchar lun,
uchar *pdata, int sdata, uchar *presp,
int *sresp, uchar *pcc, char fdebugcmd);
/*
* ipmi_close_
* Called to close an IPMI session.
* returns 0 if successful, <0 if error
*/
int ipmi_close_(void);
int ipmi_close(void); /*ditto*/
/*-----------------------------------------------------------------*
* These externals are conditionally compiled in ipmicmd.c
ipmi_cmdraw_ia() Intel IMB driver, /dev/imb
ipmi_cmdraw_mv() MontaVista OpenIPMI driver
ipmi_cmdraw_va() VALinux driver
ipmi_cmdraw_ld() LANDesk driver
ipmi_cmdraw_direct() Direct/Driverless KCS or SSIF
ipmi_cmdraw_lan() IPMI LAN
ipmi_cmdraw_lan2() IPMI LANplus (RMCP+ in IPMI 2.0)
*-----------------------------------------------------------------*/
/*
* parse_lan_options
* Parse the IPMI LAN options from the command-line getopt.
* int c (input): command-line option from getopt, one of:
case 'p': UDP port
case 'F': force driver type
case 'T': auth type
case 'V': priv level
case 'J': cipher suite
case 'N': nodename
case 'U': username
case 'R': remote password
case 'P': remote password
case 'E': get password from IPMI_PASSWORD environment var
case 'Y': prompt for remote password
case 'Z': set local MC address
* char *optarg (input): command-line argument from getopt
* char fdebug (input): show debug messages if =1, default=0
*/
void parse_lan_options(int c, char *optarg, char fdebug);
/*
* set_lan_options
* Use this routine to set the lan options 'gnode','guser','gpswd', etc.
* This would only be required before opening a new session.
* char *node (input): IP address or nodename of remote node's IPMI LAN
* char *user (input): IPMI LAN username
* char *pswd (input): IPMI LAN password
* int auth (input): IPMI LAN authentication type (1 - 5)
* IPMI_SESSION_AUTHTYPE_NONE 0x00
* IPMI_SESSION_AUTHTYPE_MD2 0x01
* IPMI_SESSION_AUTHTYPE_MD5 0x02
* IPMI_SESSION_AUTHTYPE_PASSWORD 0x04
* IPMI_SESSION_AUTHTYPE_OEM 0x05
* int priv (input): IPMI LAN privilege level (1 - 5)
* IPMI_PRIV_LEVEL_CALLBACK 0x01
* IPMI_PRIV_LEVEL_USER 0x02
* IPMI_PRIV_LEVEL_OPERATOR 0x03
* IPMI_PRIV_LEVEL_ADMIN 0x04
* IPMI_PRIV_LEVEL_OEM 0x05
* int cipher (input): IPMI LAN cipher suite (0 thru 17, default is 3)
* See table 22-19 in the IPMIv2 spec.
* void *addr (input): Socket Address to use (SOCKADDR_T *) if not NULL
* This is only used in itsol.c because it has an
* existing socket open. Default is NULL for this.
* int addr_len (input): length of Address buffer (128 if ipv6, 16 if ipv4)
* returns 0 if successful, <0 if error
*/
int set_lan_options(char *node, char *user, char *pswd, int auth, int priv,
int cipher, void *addr, int addr_len);
int get_lan_options(char *node, char *user, char *pswd, int *auth, int *priv,
int *cipher, void *addr, int *addr_len);
void print_lan_opt_usage(int opt);
int ipmi_getdeviceid(uchar *presp, int sresp, char fdebugcmd);
/* int ipmi_open(void); * embedded in ipmi_cmd() */
int ipmi_getpicmg(uchar *presp, int sresp, char fdebug);
char *show_driver_type(int idx);
int set_driver_type(char *tag);
int set_driver_options(int fdir);
int get_driver_type(void);
int nodeislocal(char *nodename);
/* These *_mc routines are used to manage changing the mc.
* The local mc (mymc) may be changed via -Z, and
* the remote mc (mc) may be changed with -m. */
void ipmi_set_mc(uchar bus, uchar sa, uchar lun, uchar type);
void ipmi_get_mc(uchar *bus, uchar *sa, uchar *lun, uchar *type);
void ipmi_restore_mc(void);
void ipmi_set_mymc(uchar bus, uchar sa, uchar lun, uchar type);
void ipmi_get_mymc(uchar *bus, uchar *sa, uchar *lun, uchar *type);
/* ipmi_cmdraw_mc and ipmi_cmd_mc are used in cases where the mc may
* have been changed via ipmi_set_mc. */
int ipmi_cmdraw_mc(uchar cmd, uchar netfn,
uchar *pdata, int sdata, uchar *presp,
int *sresp, uchar *pcc, char fdebugcmd);
int ipmi_cmd_mc(ushort icmd, uchar *pdata, int sdata, uchar *presp,
int *sresp, uchar *pcc, char fdebugcmd);
/* ipmi_sendrecv is a wrapper for ipmi_cmdraw which maps to ipmitool syntax */
int ipmi_sendrecv(struct ipmi_rq * req, uchar *rsp, int *rsp_len);
/* other common subroutines */
char * decode_rv(int rv); /*ipmicmd.c*/
char * decode_cc(ushort icmd, int cc);
void dump_buf(char *tag,uchar *pbuf,int sz, char fshowascii);
int get_lan_channel(uchar chstart, uchar *chan);
void show_fru_picmg(uchar *pdata, int dlen); /* ifru_picmg.c*/
/* show_outcome outputs the meaning of the return code. */
void show_outcome(char *prog, int ret);
/* these log routines are primarily for the isol debug log */
FILE *open_log(char *mname);
void close_log(void);
void flush_log(void);
void print_log( char *pattn, ... );
void dump_log(FILE *fp,char *tag,uchar *pbuf,int sz, char fshowascii);
void logmsg( char *pname, char *pattn, ... );
#ifdef WIN32
/* Implement the Linux strncasecmp for Windows. */
int strncasecmp(const char *s1, const char *s2, int n);
#endif
const char *val2str(ushort val, const struct valstr *vs); /*ipmilanplus.c*/
const char * oemval2str(ushort oem, uchar val, const struct oemvalstr *vs);
void set_debug(void); /*used only by oem_sun.c*/
void set_iana(int iana); /*ipmicmd.c*/
void set_mfgid(uchar *devid, int len);
void get_mfgid(int *pvend, int *pprod);
void get_devid_ver(uchar *bmaj, uchar *bmin, uchar *iver);
char *get_nodename(void);
char is_remote(void);
void show_devid(uchar b1, uchar b2, uchar i1, uchar i2);
int set_max_kcs_loops(int ms); /* ipmicmd.c, calls ipmidir.c if ok */
/* These common subroutines are in subs.c */
int str_icmp(char *s1, char *s2); /*used internally in ipmicmd.c*/
char * strdup_(const char *instr); /*wrapper for strdup, supports WIN32*/
int strlen_(const char *s);
uchar htoi(char *inhex);
void os_usleep(int s, int u);
char *get_iana_str(int mfg); /*subs.c*/
int get_errno(void); /*subs.c*/
const char * buf2str(uchar * buf, int len); /*subs.c*/
int str2uchar(char *str_in, uchar *uchr_out);
uchar atob(char *str_in); /* calls str2uchar*/
void atoip(uchar *array,char *instr);
int get_system_info(uchar parm, char *pbuf, int *szbuf); /*subs.c*/
int set_system_info(uchar parm, char *pbuf, int szbuf); /*subs.c*/
int ipmi_reserved_user(int vend, int userid); /*subs.c*/
/* from mem_if.c */
int get_BiosVersion(char *str);
/* see isensor.h for SDR cache routines */
/* see ievents.h for sensor_type_desc, sel_opts, decode_sel routines */
#ifdef __cplusplus
}
#endif
/* end ipmicmd.h */
|