summaryrefslogtreecommitdiff
path: root/util/ipmicmd.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/ipmicmd.h')
-rw-r--r--util/ipmicmd.h543
1 files changed, 543 insertions, 0 deletions
diff --git a/util/ipmicmd.h b/util/ipmicmd.h
new file mode 100644
index 0000000..b65e949
--- /dev/null
+++ b/util/ipmicmd.h
@@ -0,0 +1,543 @@
+/*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_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 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 */
+
+#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
+
+#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 '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(void);
+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 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, uchar *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 */