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 565
|
/*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
#define BYTE unsigned char
// #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 */
|