mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-07-01 18:23:36 +00:00
Compare commits
1 Commits
IPMITOOL_1
...
ipmitool
Author | SHA1 | Date | |
---|---|---|---|
81b2750667 |
@ -1,326 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#############################################################################
|
|
||||||
#
|
|
||||||
# exchange-bmc-os-info: Set OS and BMC (Baseboard Management Controller)
|
|
||||||
# parameters during system startup.
|
|
||||||
#
|
|
||||||
# version: 0.72
|
|
||||||
#
|
|
||||||
# Authors: Charles Rose <charles_rose@dell.com>
|
|
||||||
# Jordan Hargrave <jordan_hargrave@dell.com>
|
|
||||||
#
|
|
||||||
# Description: Script to set OS information in the BMC; fetch BMC IP/URL
|
|
||||||
# and set in the OS for use by other scripts/user.
|
|
||||||
#
|
|
||||||
# BMC IP and URL are made available in /var/run/bmc-info
|
|
||||||
#
|
|
||||||
# Example to launch BMC web-interface:
|
|
||||||
# # . /var/run/bmc-info
|
|
||||||
# # xdg-open $BMC_URL
|
|
||||||
#
|
|
||||||
# See here for details:
|
|
||||||
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
|
||||||
#
|
|
||||||
# OEM Specific: OEM specific ipmi commands go in:
|
|
||||||
# 'oem_set_os_version' and 'oem_get_bmc_url'
|
|
||||||
#############################################################################
|
|
||||||
#
|
|
||||||
# chkconfig: 345 99 00
|
|
||||||
# description: Set OS name, hostname in BMC; make BMC IP/URL available in OS
|
|
||||||
# processname: exchange-bmc-os-info
|
|
||||||
# config: /etc/sysconfig/exchange-bmc-os-info
|
|
||||||
#
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: exchange-bmc-os-info
|
|
||||||
# Required-Start: ipmi
|
|
||||||
# Default-Start: 3 4 5
|
|
||||||
# Default-Stop: 0 1 2 6
|
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# GLOBALS
|
|
||||||
#############################################################################
|
|
||||||
CONFIGFILE=/etc/sysconfig/exchange-bmc-os-info
|
|
||||||
IPMI_TOOL=/usr/bin/ipmitool
|
|
||||||
BMC_INFO=/var/run/bmc-info
|
|
||||||
|
|
||||||
# BMC Manufacturer ID used in 'oem_set_os_version' and 'oem_get_bmc_url'
|
|
||||||
DELL="674"
|
|
||||||
#OTHER_OEM="123"
|
|
||||||
|
|
||||||
# Defaults for ${CONFIGFILE}
|
|
||||||
SET_OS_INFO="yes"
|
|
||||||
RESET_OS_INFO="no"
|
|
||||||
SET_BMC_INFO="yes"
|
|
||||||
|
|
||||||
# getsysinfo and setsysinfo commands
|
|
||||||
IPMI_SET_SYSINFO="${IPMI_TOOL} mc setsysinfo"
|
|
||||||
IPMI_GET_SYSINFO="${IPMI_TOOL} mc getsysinfo"
|
|
||||||
#############################################################################
|
|
||||||
SCRIPT_NAME=$(basename $0)
|
|
||||||
|
|
||||||
# source config
|
|
||||||
[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
|
|
||||||
|
|
||||||
RETVAL=0
|
|
||||||
|
|
||||||
if [ -f /bin/gettext.sh ]; then
|
|
||||||
GETTEXT=1
|
|
||||||
. /bin/gettext.sh
|
|
||||||
OUTPUT="eval_gettext"
|
|
||||||
else
|
|
||||||
GETTEXT=0
|
|
||||||
OUTPUT="echo"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# Get Vendor ID of BMC for use in 'oem_set_os_version' and 'oem_get_bmc_url'
|
|
||||||
#
|
|
||||||
get_bmc_vendor_id()
|
|
||||||
{
|
|
||||||
BMC_VENDOR=$(${IPMI_TOOL} mc info 2>/dev/null | \
|
|
||||||
sed -n "s#^Manufacturer ID.*: ##p")
|
|
||||||
[ -z "${BMC_VENDOR}" ] && RETVAL=4
|
|
||||||
}
|
|
||||||
|
|
||||||
check_ipmitool()
|
|
||||||
{
|
|
||||||
if [ -x ${IPMI_TOOL} ]; then
|
|
||||||
# v1.8.12 plus patches are required for set/getsysinfo support
|
|
||||||
# http://sourceforge.net/mailarchive/message.php?msg_id=29647222
|
|
||||||
[ ! ${IPMI_GET_SYSINFO} >/dev/null 2>&1 ] && \
|
|
||||||
RETVAL=3
|
|
||||||
else
|
|
||||||
RETVAL=2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
bmc_exists()
|
|
||||||
{
|
|
||||||
check_ipmitool
|
|
||||||
[ $RETVAL -eq 0 ] && get_bmc_vendor_id
|
|
||||||
return $RETVAL
|
|
||||||
}
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
get_os_info()
|
|
||||||
{
|
|
||||||
OS_HOSTNAME=$(hostname)
|
|
||||||
KERNEL_VERSION=$(uname -r -m)
|
|
||||||
|
|
||||||
if [ -e /etc/lsb-release ] ; then
|
|
||||||
. /etc/lsb-release
|
|
||||||
NAME=${DISTRIB_ID}
|
|
||||||
VERSION="${DISTRIB_RELEASE} ${DISTRIB_CODENAME}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# we prefer systemd's /etc/os-release over other sources
|
|
||||||
[ -e /etc/os-release ] && . /etc/os-release
|
|
||||||
|
|
||||||
OS_NAME=${NAME}
|
|
||||||
OS_VERSION="${VERSION} kernel ${KERNEL_VERSION}"
|
|
||||||
}
|
|
||||||
|
|
||||||
oem_set_os_version()
|
|
||||||
{
|
|
||||||
# OS Version setting is not standard yet
|
|
||||||
# we need per vendor oem commands
|
|
||||||
case "${BMC_VENDOR}" in
|
|
||||||
$DELL) ${IPMI_SET_SYSINFO} delloem_os_version \
|
|
||||||
"${OS_VERSION}" > /dev/null 2>&1
|
|
||||||
return $?
|
|
||||||
;;
|
|
||||||
# Add OEM specific commands.
|
|
||||||
# Example:
|
|
||||||
# $OTHER_OEM) ${IPMI_SET_SYSINFO} otheroem_os_version \
|
|
||||||
# "${OS_VERSION}" > /dev/null 2>&1
|
|
||||||
# return $?
|
|
||||||
# ;;
|
|
||||||
*) return 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
set_os_info()
|
|
||||||
{
|
|
||||||
# Set and reset OS info in the BMC
|
|
||||||
if [ "$1" = "reset" ]; then
|
|
||||||
OS_NAME=""
|
|
||||||
OS_HOSTNAME=""
|
|
||||||
OS_VERSION=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
${IPMI_SET_SYSINFO} os_name "${OS_NAME}" >/dev/null 2>&1 \
|
|
||||||
|| RETVAL=6
|
|
||||||
${IPMI_SET_SYSINFO} primary_os_name "${OS_NAME}" >/dev/null 2>&1 \
|
|
||||||
|| RETVAL=6
|
|
||||||
${IPMI_SET_SYSINFO} system_name "${OS_HOSTNAME}" >/dev/null 2>&1 \
|
|
||||||
|| RETVAL=6
|
|
||||||
oem_set_os_version || RETVAL=6
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
valid_url()
|
|
||||||
{
|
|
||||||
url="(https?|http)://[a-z0-9-]+(\.[a-z0-9-]+)+([/?].*)?"
|
|
||||||
printf -- "%s" "${TMP_URL}"| grep -Eq "^${url}"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
oem_get_bmc_url()
|
|
||||||
{
|
|
||||||
# BMC URL is not standard yet
|
|
||||||
# we need per vendor oem commands
|
|
||||||
case "$BMC_VENDOR" in
|
|
||||||
$DELL) TMP_URL=$(${IPMI_GET_SYSINFO} delloem_url 2> /dev/null)
|
|
||||||
;;
|
|
||||||
# Add OEM specific commands
|
|
||||||
# Example:
|
|
||||||
# $OTHER_OEM)
|
|
||||||
# TMP_URL=$(${IPMI_GET_SYSINFO} otheroem_url 2> /dev/null)
|
|
||||||
# ;;
|
|
||||||
*) TMP_URL="" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
valid_url && BMC_URL=${TMP_URL} || BMC_URL=""
|
|
||||||
}
|
|
||||||
|
|
||||||
valid_ip()
|
|
||||||
{
|
|
||||||
#Thanks to mkyong.com
|
|
||||||
octet="([01]?[[:digit:]][[:digit:]]?|2[0-4][[:digit:]]|25[0-5])"
|
|
||||||
|
|
||||||
printf -- "%s" "${TMP_IPv4}"| grep -Eq "^${octet}\\.${octet}\\.${octet}\\.${octet}$"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
get_bmc_ip()
|
|
||||||
{
|
|
||||||
#Thanks to http://ingvar.blog.redpill-linpro.com
|
|
||||||
for CHANNEL in `seq 1 14`
|
|
||||||
do
|
|
||||||
[ $(${IPMI_TOOL} lan print ${CHANNEL} 2>/dev/null \
|
|
||||||
| grep -q "^Set") ] || break
|
|
||||||
done
|
|
||||||
|
|
||||||
# Get BMC_IPv4 and BMC_URL from BMC
|
|
||||||
TMP_IPv4=$(${IPMI_TOOL} lan print ${CHANNEL} 2>/dev/null \
|
|
||||||
| sed -n "s#^IP Address .*: ##p")
|
|
||||||
|
|
||||||
valid_ip && BMC_IPv4=${TMP_IPv4} || BMC_IPv4=""
|
|
||||||
}
|
|
||||||
|
|
||||||
get_bmc_info()
|
|
||||||
{
|
|
||||||
get_bmc_ip
|
|
||||||
if [ -z "${BMC_IPv4}" ] || [ "${BMC_IPv4}" = "0.0.0.0" ]; then
|
|
||||||
BMC_IPv4=""
|
|
||||||
RETVAL=5
|
|
||||||
else
|
|
||||||
# URL makes sense only if there is an IP
|
|
||||||
oem_get_bmc_url
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
set_bmc_info()
|
|
||||||
{
|
|
||||||
if [ ! $(touch "${BMC_INFO}" && chmod 600 "${BMC_INFO}") ]; then
|
|
||||||
printf "BMC_IPv4=%s\n" "${BMC_IPv4}" > "${BMC_INFO}"
|
|
||||||
[ -n "${BMC_URL}" ] && \
|
|
||||||
printf "BMC_URL=%s\n" "${BMC_URL}" >> "${BMC_INFO}"
|
|
||||||
else
|
|
||||||
RETVAL=5
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
unset_bmc_info()
|
|
||||||
{
|
|
||||||
[ -f ${BMC_INFO} ] && rm -f ${BMC_INFO} > /dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
start()
|
|
||||||
{
|
|
||||||
if bmc_exists; then
|
|
||||||
[ "${SET_OS_INFO}" = "yes" ] && \
|
|
||||||
get_os_info && set_os_info
|
|
||||||
|
|
||||||
if [ "${SET_BMC_INFO}" = "yes" ]; then
|
|
||||||
get_bmc_info
|
|
||||||
if [ ${RETVAL} -eq 0 ]; then
|
|
||||||
set_bmc_info
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
stop()
|
|
||||||
{
|
|
||||||
if bmc_exists; then
|
|
||||||
# reset OS info while system reboots
|
|
||||||
# aids with debugging OS boot-up issues
|
|
||||||
if [ "${RESET_OS_INFO}" = "yes" ]; then
|
|
||||||
set_os_info reset
|
|
||||||
fi
|
|
||||||
unset_bmc_info
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
restart()
|
|
||||||
{
|
|
||||||
stop
|
|
||||||
[ $RETVAL -eq 0 ] && start
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
status()
|
|
||||||
{
|
|
||||||
[ -r ${BMC_INFO} ] && \
|
|
||||||
grep -q "BMC_IPv4" "${BMC_INFO}" >/dev/null 1>&2 && \
|
|
||||||
BMC_STATUS="ok" || BMC_STATUS="inactive"
|
|
||||||
${OUTPUT} "${SCRIPT_NAME}: ${BMC_STATUS}" 1>&2
|
|
||||||
[ ${GETTEXT} -eq 1 ] && echo
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
${OUTPUT} "Usage: ${SCRIPT_NAME} {start|stop|restart|status}" 1>&2
|
|
||||||
[ ${GETTEXT} -eq 1 ] && echo
|
|
||||||
RETVAL=1
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# MAIN
|
|
||||||
#############################################################################
|
|
||||||
case "$1" in
|
|
||||||
start) start ;;
|
|
||||||
stop) stop ;;
|
|
||||||
restart) restart ;;
|
|
||||||
status) status ;;
|
|
||||||
*) usage ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$RETVAL" in
|
|
||||||
0|1) ;;
|
|
||||||
2) ${OUTPUT} "${SCRIPT_NAME}: ipmitool(1) not found." 1>&2 ;;
|
|
||||||
3) ${OUTPUT} "${SCRIPT_NAME}: this version of ipmitool does not support getsysinfo." 1>&2 ;;
|
|
||||||
4) ${OUTPUT} "${SCRIPT_NAME}: failed to communicate with BMC." 1>&2 ;;
|
|
||||||
5) ${OUTPUT} "${SCRIPT_NAME}: failed to set OS information in BMC." 1>&2 ;;
|
|
||||||
6) ${OUTPUT} "${SCRIPT_NAME}: failed to get BMC information." 1>&2 ;;
|
|
||||||
*) ${OUTPUT} "${SCRIPT_NAME}: unexpected error." 1>&2 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ ${RETVAL} -gt 1 ]; then
|
|
||||||
${OUTPUT} " Return code: ${RETVAL}" 1>&2
|
|
||||||
[ ${GETTEXT} -eq 1 ] && echo
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
exit ${RETVAL}
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# end of file
|
|
||||||
#############################################################################
|
|
@ -1,13 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=Exchange Information between BMC and OS
|
|
||||||
After=ipmi.service network.target
|
|
||||||
Requires=ipmi.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=yes
|
|
||||||
ExecStart=/usr/libexec/exchange-bmc-os-info start
|
|
||||||
ExecStop=/usr/libexec/exchange-bmc-os-info stop
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
@ -1,26 +0,0 @@
|
|||||||
# exchange-bmc-os-info
|
|
||||||
#
|
|
||||||
# Config file to control Exchange of information between
|
|
||||||
# the OS and Service Processor/Baseboard Management Controller (BMC)
|
|
||||||
#
|
|
||||||
# See here for details
|
|
||||||
# https://fedoraproject.org/wiki/Features/AgentFreeManagement
|
|
||||||
|
|
||||||
### Set OS Info in BMC/Service Processor ###
|
|
||||||
# Name: SET_OS_INFO
|
|
||||||
# Description: Set OS Name, Version and Hostname in the Service Processor (BMC)
|
|
||||||
# Default: yes
|
|
||||||
SET_OS_INFO="yes"
|
|
||||||
|
|
||||||
### Reset OS Info in BMC/Service Processor ###
|
|
||||||
# Name: RESET_OS_INFO
|
|
||||||
# Description: Reset OS Name, Version and Hostname in the Service Processor (BMC).
|
|
||||||
# Useful when the OS Name/Hostname should be empty on reboot
|
|
||||||
# Default: no
|
|
||||||
RESET_OS_INFO="no"
|
|
||||||
|
|
||||||
### Set BMC/Service Processor Info in OS ###
|
|
||||||
# Name; SET_BMC_INFO
|
|
||||||
# Description: Set IP Address and URL of Service Processor/BMC in /run/bmc-info
|
|
||||||
# Default: yes
|
|
||||||
SET_BMC_INFO="yes"
|
|
@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2012 Pigeon Point Systems. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* Redistribution of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* Redistribution 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.
|
|
||||||
*
|
|
||||||
* Neither the name of Pigeon Point Systems nor the names of
|
|
||||||
* contributors may be used to endorse or promote products derived
|
|
||||||
* from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* This software is provided "AS IS," without a warranty of any kind.
|
|
||||||
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
|
||||||
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
|
||||||
* PIGEON POINT SYSTEMS ("PPS") AND ITS LICENSORS SHALL NOT BE LIABLE
|
|
||||||
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
|
||||||
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
|
||||||
* PPS OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
|
||||||
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
|
||||||
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
|
||||||
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
|
||||||
* EVEN IF PPS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <ipmitool/ipmi_intf.h>
|
|
||||||
|
|
||||||
/* Global HPM.2 defines */
|
|
||||||
#define HPM2_REVISION 0x01
|
|
||||||
#define HPM3_REVISION 0x01
|
|
||||||
#define HPM2_LAN_PARAMS_REV 0x01
|
|
||||||
#define HPM2_SOL_PARAMS_REV 0x01
|
|
||||||
#define HPM3_LAN_PARAMS_REV 0x01
|
|
||||||
/* IPMI defines parameter revision as
|
|
||||||
* MSN = present revision,
|
|
||||||
* LSN = oldest revision parameter is
|
|
||||||
* backward compatible with. */
|
|
||||||
#define LAN_PARAM_REV(x, y) ((x) << 4 | (y) & 0xF)
|
|
||||||
|
|
||||||
/* HPM.2 capabilities */
|
|
||||||
#define HPM2_CAPS_SOL_EXTENSION 0x01
|
|
||||||
#define HPM2_CAPS_PACKET_TRACE 0x02
|
|
||||||
#define HPM2_CAPS_EXT_MANAGEMENT 0x04
|
|
||||||
#define HPM2_CAPS_VERSION_SENSOR 0x08
|
|
||||||
#define HPM2_CAPS_DYNAMIC_SESSIONS 0x10
|
|
||||||
|
|
||||||
#if HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(push, 1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* HPM.2 LAN attach capabilities */
|
|
||||||
struct hpm2_lan_attach_capabilities {
|
|
||||||
uint8_t hpm2_revision_id;
|
|
||||||
uint16_t lan_channel_mask;
|
|
||||||
uint8_t hpm2_caps;
|
|
||||||
uint8_t hpm2_lan_params_start;
|
|
||||||
uint8_t hpm2_lan_params_rev;
|
|
||||||
uint8_t hpm2_sol_params_start;
|
|
||||||
uint8_t hpm2_sol_params_rev;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
|
|
||||||
/* HPM.2 LAN channel capabilities */
|
|
||||||
struct hpm2_lan_channel_capabilities {
|
|
||||||
uint8_t capabilities;
|
|
||||||
uint8_t attach_type;
|
|
||||||
uint8_t bandwidth_class;
|
|
||||||
uint16_t max_inbound_pld_size;
|
|
||||||
uint16_t max_outbound_pld_size;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
|
|
||||||
#if HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* HPM.2 command assignments */
|
|
||||||
#define HPM2_GET_LAN_ATTACH_CAPABILITIES 0x3E
|
|
||||||
|
|
||||||
extern int hpm2_get_capabilities(struct ipmi_intf * intf,
|
|
||||||
struct hpm2_lan_attach_capabilities * caps);
|
|
||||||
extern int hpm2_get_lan_channel_capabilities(struct ipmi_intf * intf,
|
|
||||||
uint8_t hpm2_lan_params_start,
|
|
||||||
struct hpm2_lan_channel_capabilities * caps);
|
|
||||||
extern int hpm2_detect_max_payload_size(struct ipmi_intf * intf);
|
|
@ -1,243 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2003 Sun Microsystems, 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:
|
|
||||||
*
|
|
||||||
* Redistribution of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* Redistribution 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.
|
|
||||||
*
|
|
||||||
* Neither the name of Sun Microsystems, Inc. or the names of
|
|
||||||
* contributors may be used to endorse or promote products derived
|
|
||||||
* from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* This software is provided "AS IS," without a warranty of any kind.
|
|
||||||
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
|
||||||
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
|
||||||
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
|
||||||
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
|
||||||
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
|
||||||
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
|
||||||
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
|
||||||
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
|
||||||
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
|
||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IPMI_KFWUM_H
|
|
||||||
# define IPMI_KFWUM_H
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <ipmitool/ipmi.h>
|
|
||||||
|
|
||||||
/* KFWUM Version */
|
|
||||||
# define VER_MAJOR 1
|
|
||||||
# define VER_MINOR 3
|
|
||||||
/* Minimum size (IPMB/IOL/old protocol) */
|
|
||||||
# define KFWUM_SMALL_BUFFER 32
|
|
||||||
/* Maximum size on KCS interface */
|
|
||||||
# define KFWUM_BIG_BUFFER 32
|
|
||||||
# define MAX_BUFFER_SIZE 1024*16
|
|
||||||
|
|
||||||
/* 3 address + 1 size + 1 checksum + 1 command */
|
|
||||||
# define KFWUM_OLD_CMD_OVERHEAD 6
|
|
||||||
/* 1 sequence + 1 size + 1 checksum + 1 command */
|
|
||||||
# define KFWUM_NEW_CMD_OVERHEAD 4
|
|
||||||
# define KFWUM_PAGE_SIZE 256
|
|
||||||
|
|
||||||
# define FWUM_SAVE_FIRMWARE_NO_RESPONSE_LIMIT 6
|
|
||||||
# define FWUM_MAX_UPLOAD_RETRY 6
|
|
||||||
|
|
||||||
# define TRACE_LOG_CHUNK_COUNT 7
|
|
||||||
# define TRACE_LOG_CHUNK_SIZE 7
|
|
||||||
# define TRACE_LOG_ATT_COUNT 3
|
|
||||||
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_LOCATION 0x5a0
|
|
||||||
# define IN_FIRMWARE_INFO_SIZE 20
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_FILE_SIZE 0
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_CHECKSUM 4
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_BOARD_ID 6
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_DEVICE_ID 8
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_TABLE_VERSION 9
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_IMPLEMENT_REV 10
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_VER_MAJOROR 11
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_VER_MINORSUB 12
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_SDR_REV 13
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_IANA0 14
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_IANA1 15
|
|
||||||
# define IN_FIRMWARE_INFO_OFFSET_IANA2 16
|
|
||||||
|
|
||||||
# define KWUM_GET_BYTE_AT_OFFSET(pBuffer,os) pBuffer[os]
|
|
||||||
|
|
||||||
int ipmi_fwum_main(struct ipmi_intf *, int, char **);
|
|
||||||
|
|
||||||
typedef enum eKFWUM_BoardList
|
|
||||||
{
|
|
||||||
KFWUM_BOARD_KONTRON_UNKNOWN = 0,
|
|
||||||
KFWUM_BOARD_KONTRON_5002 = 5002,
|
|
||||||
} tKFWUM_BoardList;
|
|
||||||
|
|
||||||
typedef struct sKFWUM_BoardInfo
|
|
||||||
{
|
|
||||||
tKFWUM_BoardList boardId;
|
|
||||||
IPMI_OEM iana;
|
|
||||||
} tKFWUM_BoardInfo;
|
|
||||||
|
|
||||||
typedef enum eKFWUM_DownloadType
|
|
||||||
{
|
|
||||||
KFWUM_DOWNLOAD_TYPE_ADDRESS = 0,
|
|
||||||
KFWUM_DOWNLOAD_TYPE_SEQUENCE,
|
|
||||||
} tKFWUM_DownloadType;
|
|
||||||
|
|
||||||
typedef enum eKFWUM_DownloadBuffferType
|
|
||||||
{
|
|
||||||
KFWUM_SMALL_BUFFER_TYPE = 0,
|
|
||||||
KFUMW_BIG_BUFFER_TYPE
|
|
||||||
} tKFWUM_DownloadBuffferType;
|
|
||||||
|
|
||||||
typedef struct sKFWUM_InFirmwareInfo
|
|
||||||
{
|
|
||||||
unsigned long fileSize;
|
|
||||||
unsigned short checksum;
|
|
||||||
unsigned short sumToRemoveFromChecksum;
|
|
||||||
/* Since the checksum is added in the bin
|
|
||||||
* after the checksum is calculated, we
|
|
||||||
* need to remove the each byte value. This
|
|
||||||
* byte will contain the addition of both bytes
|
|
||||||
*/
|
|
||||||
tKFWUM_BoardList boardId;
|
|
||||||
unsigned char deviceId;
|
|
||||||
unsigned char tableVers;
|
|
||||||
unsigned char implRev;
|
|
||||||
unsigned char versMajor;
|
|
||||||
unsigned char versMinor;
|
|
||||||
unsigned char versSubMinor;
|
|
||||||
unsigned char sdrRev;
|
|
||||||
IPMI_OEM iana;
|
|
||||||
} tKFWUM_InFirmwareInfo;
|
|
||||||
|
|
||||||
typedef struct sKFWUM_SaveFirmwareInfo
|
|
||||||
{
|
|
||||||
tKFWUM_DownloadType downloadType;
|
|
||||||
unsigned char bufferSize;
|
|
||||||
unsigned char overheadSize;
|
|
||||||
} tKFWUM_SaveFirmwareInfo;
|
|
||||||
|
|
||||||
/* COMMANDS */
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumGetInfoResp {
|
|
||||||
unsigned char protocolRevision;
|
|
||||||
unsigned char controllerDeviceId;
|
|
||||||
struct {
|
|
||||||
unsigned char mode:1;
|
|
||||||
unsigned char seqAdd:1;
|
|
||||||
unsigned char res : 6;
|
|
||||||
} byte;
|
|
||||||
unsigned char firmRev1;
|
|
||||||
unsigned char firmRev2;
|
|
||||||
unsigned char numBank;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumGetStatusResp {
|
|
||||||
unsigned char bankState;
|
|
||||||
unsigned char firmLengthLSB;
|
|
||||||
unsigned char firmLengthMid;
|
|
||||||
unsigned char firmLengthMSB;
|
|
||||||
unsigned char firmRev1;
|
|
||||||
unsigned char firmRev2;
|
|
||||||
unsigned char firmRev3;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumManualRollbackReq {
|
|
||||||
unsigned char type;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumStartFirmwareDownloadReq {
|
|
||||||
unsigned char lengthLSB;
|
|
||||||
unsigned char lengthMid;
|
|
||||||
unsigned char lengthMSB;
|
|
||||||
unsigned char paddingLSB;
|
|
||||||
unsigned char paddingMSB;
|
|
||||||
unsigned char useSequence;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumStartFirmwareDownloadResp {
|
|
||||||
unsigned char bank;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumSaveFirmwareAddressReq
|
|
||||||
{
|
|
||||||
unsigned char addressLSB;
|
|
||||||
unsigned char addressMid;
|
|
||||||
unsigned char addressMSB;
|
|
||||||
unsigned char numBytes;
|
|
||||||
unsigned char txBuf[KFWUM_SMALL_BUFFER-KFWUM_OLD_CMD_OVERHEAD];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumSaveFirmwareSequenceReq
|
|
||||||
{
|
|
||||||
unsigned char sequenceNumber;
|
|
||||||
unsigned char txBuf[KFWUM_BIG_BUFFER];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
# endif
|
|
||||||
struct KfwumFinishFirmwareDownloadReq {
|
|
||||||
unsigned char versionMaj;
|
|
||||||
unsigned char versionMinSub;
|
|
||||||
unsigned char versionSdr;
|
|
||||||
unsigned char reserved;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
# ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif /* IPMI_KFWUM_H */
|
|
@ -1,809 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2003 Sun Microsystems, 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:
|
|
||||||
*
|
|
||||||
* Redistribution of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* Redistribution 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.
|
|
||||||
*
|
|
||||||
* Neither the name of Sun Microsystems, Inc. or the names of
|
|
||||||
* contributors may be used to endorse or promote products derived
|
|
||||||
* from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* This software is provided "AS IS," without a warranty of any kind.
|
|
||||||
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
|
||||||
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
|
||||||
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
|
||||||
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
|
||||||
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
|
||||||
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
|
||||||
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
|
||||||
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
|
||||||
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
|
||||||
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IPMI_HPMFWUPG_H
|
|
||||||
#define IPMI_HPMFWUPG_H
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <ipmitool/ipmi.h>
|
|
||||||
|
|
||||||
int ipmi_hpmfwupg_main(struct ipmi_intf *, int, char **);
|
|
||||||
|
|
||||||
/* Agent version */
|
|
||||||
#define HPMFWUPG_VERSION_MAJOR 1
|
|
||||||
#define HPMFWUPG_VERSION_MINOR 0
|
|
||||||
#define HPMFWUPG_VERSION_SUBMINOR 9
|
|
||||||
|
|
||||||
/* HPM.1 FIRMWARE UPGRADE COMMANDS (part of PICMG) */
|
|
||||||
#define HPMFWUPG_GET_TARGET_UPG_CAPABILITIES 0x2E
|
|
||||||
#define HPMFWUPG_GET_COMPONENT_PROPERTIES 0x2F
|
|
||||||
#define HPMFWUPG_ABORT_UPGRADE 0x30
|
|
||||||
#define HPMFWUPG_INITIATE_UPGRADE_ACTION 0x31
|
|
||||||
#define HPMFWUPG_UPLOAD_FIRMWARE_BLOCK 0x32
|
|
||||||
#define HPMFWUPG_FINISH_FIRMWARE_UPLOAD 0x33
|
|
||||||
#define HPMFWUPG_GET_UPGRADE_STATUS 0x34
|
|
||||||
#define HPMFWUPG_ACTIVATE_FIRMWARE 0x35
|
|
||||||
#define HPMFWUPG_QUERY_SELFTEST_RESULT 0x36
|
|
||||||
#define HPMFWUPG_QUERY_ROLLBACK_STATUS 0x37
|
|
||||||
#define HPMFWUPG_MANUAL_FIRMWARE_ROLLBACK 0x38
|
|
||||||
|
|
||||||
/* HPM.1 SPECIFIC COMPLETION CODES */
|
|
||||||
#define HPMFWUPG_ROLLBACK_COMPLETED 0x00
|
|
||||||
#define HPMFWUPG_COMMAND_IN_PROGRESS 0x80
|
|
||||||
#define HPMFWUPG_NOT_SUPPORTED 0x81
|
|
||||||
#define HPMFWUPG_SIZE_MISMATCH 0x81
|
|
||||||
#define HPMFWUPG_ROLLBACK_FAILURE 0x81
|
|
||||||
#define HPMFWUPG_INV_COMP_MASK 0x81
|
|
||||||
#define HPMFWUPG__ABORT_FAILURE 0x81
|
|
||||||
#define HPMFWUPG_INV_COMP_ID 0x82
|
|
||||||
#define HPMFWUPG_INT_CHECKSUM_ERROR 0x82
|
|
||||||
#define HPMFWUPG_INV_UPLOAD_MODE 0x82
|
|
||||||
#define HPMFWUPG_ROLLBACK_OVERRIDE 0x82
|
|
||||||
#define HPMFWUPG_INV_COMP_PROP 0x83
|
|
||||||
#define HPMFWUPG_FW_MISMATCH 0x83
|
|
||||||
#define HPMFWUPG_ROLLBACK_DENIED 0x83
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This error code is used as a temporary PATCH to
|
|
||||||
* the latest Open ipmi driver. This PATCH
|
|
||||||
* will be removed once a new Open IPMI driver is released.
|
|
||||||
* (Buggy version = 39)
|
|
||||||
*/
|
|
||||||
#define ENABLE_OPENIPMI_V39_PATCH
|
|
||||||
|
|
||||||
#ifdef ENABLE_OPENIPMI_V39_PATCH
|
|
||||||
# define RETRY_COUNT_MAX 3
|
|
||||||
static int errorCount;
|
|
||||||
# define HPMFWUPG_IS_RETRYABLE(error) \
|
|
||||||
((((error==0x83)||(error==0x82)||(error==0x80)) && (errorCount++<RETRY_COUNT_MAX))?TRUE:FALSE)
|
|
||||||
#else
|
|
||||||
# define HPMFWUPG_IS_RETRYABLE(error) FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* HPM FIRMWARE UPGRADE GENERAL DEFINITIONS */
|
|
||||||
#define HPMFWUPG_PICMG_IDENTIFIER 0
|
|
||||||
#define HPMFWUPG_VERSION_SIZE 6
|
|
||||||
#define HPMFWUPG_DESC_STRING_LENGTH 12
|
|
||||||
#define HPMFWUPG_DEFAULT_INACCESS_TIMEOUT 60 /* sec */
|
|
||||||
#define HPMFWUPG_DEFAULT_UPGRADE_TIMEOUT 60 /* sec */
|
|
||||||
#define HPMFWUPG_MD5_SIGNATURE_LENGTH 16
|
|
||||||
|
|
||||||
/* Component IDs */
|
|
||||||
typedef enum eHpmfwupgComponentId {
|
|
||||||
HPMFWUPG_COMPONENT_ID_0 = 0,
|
|
||||||
HPMFWUPG_COMPONENT_ID_1,
|
|
||||||
HPMFWUPG_COMPONENT_ID_2,
|
|
||||||
HPMFWUPG_COMPONENT_ID_3,
|
|
||||||
HPMFWUPG_COMPONENT_ID_4,
|
|
||||||
HPMFWUPG_COMPONENT_ID_5,
|
|
||||||
HPMFWUPG_COMPONENT_ID_6,
|
|
||||||
HPMFWUPG_COMPONENT_ID_7,
|
|
||||||
HPMFWUPG_COMPONENT_ID_MAX
|
|
||||||
} tHpmfwupgComponentId;
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgComponentBitMask {
|
|
||||||
union {
|
|
||||||
unsigned char byte;
|
|
||||||
struct {
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
unsigned char component7 : 1;
|
|
||||||
unsigned char component6 : 1;
|
|
||||||
unsigned char component5 : 1;
|
|
||||||
unsigned char component4 : 1;
|
|
||||||
unsigned char component3 : 1;
|
|
||||||
unsigned char component2 : 1;
|
|
||||||
unsigned char component1 : 1;
|
|
||||||
unsigned char component0 : 1;
|
|
||||||
#else
|
|
||||||
unsigned char component0 : 1;
|
|
||||||
unsigned char component1 : 1;
|
|
||||||
unsigned char component2 : 1;
|
|
||||||
unsigned char component3 : 1;
|
|
||||||
unsigned char component4 : 1;
|
|
||||||
unsigned char component5 : 1;
|
|
||||||
unsigned char component6 : 1;
|
|
||||||
unsigned char component7 : 1;
|
|
||||||
#endif
|
|
||||||
} ATTRIBUTE_PACKING bitField;
|
|
||||||
} ATTRIBUTE_PACKING ComponentBits;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static const int HPMFWUPG_SUCCESS = 0;
|
|
||||||
static const int HPMFWUPG_ERROR = -1;
|
|
||||||
/* Upload firmware specific error codes */
|
|
||||||
static const int HPMFWUPG_UPLOAD_BLOCK_LENGTH = 1;
|
|
||||||
static const int HPMFWUPG_UPLOAD_RETRY = 2;
|
|
||||||
|
|
||||||
|
|
||||||
/* TARGET UPGRADE CAPABILITIES DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetTargetUpgCapabilitiesReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetTargetUpgCapabilitiesResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char hpmVersion;
|
|
||||||
union {
|
|
||||||
unsigned char byte;
|
|
||||||
struct {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
unsigned char fwUpgUndesirable : 1;
|
|
||||||
unsigned char autRollbackOverride : 1;
|
|
||||||
unsigned char ipmcDegradedDurinUpg: 1;
|
|
||||||
unsigned char deferActivation : 1;
|
|
||||||
unsigned char servAffectDuringUpg : 1;
|
|
||||||
unsigned char manualRollback : 1;
|
|
||||||
unsigned char autRollback : 1;
|
|
||||||
unsigned char ipmcSelftestCap : 1;
|
|
||||||
#else
|
|
||||||
unsigned char ipmcSelftestCap : 1;
|
|
||||||
unsigned char autRollback : 1;
|
|
||||||
unsigned char manualRollback : 1;
|
|
||||||
unsigned char servAffectDuringUpg : 1;
|
|
||||||
unsigned char deferActivation : 1;
|
|
||||||
unsigned char ipmcDegradedDurinUpg: 1;
|
|
||||||
unsigned char autRollbackOverride : 1;
|
|
||||||
unsigned char fwUpgUndesirable : 1;
|
|
||||||
#endif
|
|
||||||
} ATTRIBUTE_PACKING bitField;
|
|
||||||
} ATTRIBUTE_PACKING GlobalCapabilities;
|
|
||||||
unsigned char upgradeTimeout;
|
|
||||||
unsigned char selftestTimeout;
|
|
||||||
unsigned char rollbackTimeout;
|
|
||||||
unsigned char inaccessTimeout;
|
|
||||||
struct HpmfwupgComponentBitMask componentsPresent;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetTargetUpgCapabilitiesCtx {
|
|
||||||
struct HpmfwupgGetTargetUpgCapabilitiesReq req;
|
|
||||||
struct HpmfwupgGetTargetUpgCapabilitiesResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* COMPONENT PROPERTIES DEFINITIONS */
|
|
||||||
typedef enum eHpmfwupgCompPropertiesSelect {
|
|
||||||
HPMFWUPG_COMP_GEN_PROPERTIES = 0,
|
|
||||||
HPMFWUPG_COMP_CURRENT_VERSION,
|
|
||||||
HPMFWUPG_COMP_DESCRIPTION_STRING,
|
|
||||||
HPMFWUPG_COMP_ROLLBACK_FIRMWARE_VERSION,
|
|
||||||
HPMFWUPG_COMP_DEFERRED_FIRMWARE_VERSION,
|
|
||||||
HPMFWUPG_COMP_RESERVED,
|
|
||||||
HPMFWUPG_COMP_OEM_PROPERTIES = 192
|
|
||||||
} tHpmfwupgCompPropertiesSelect;
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetComponentPropertiesReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char componentId;
|
|
||||||
unsigned char selector;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetGeneralPropResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
union {
|
|
||||||
unsigned char byte;
|
|
||||||
struct {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
unsigned char reserved : 2;
|
|
||||||
unsigned char payloadColdReset : 1;
|
|
||||||
unsigned char deferredActivation : 1;
|
|
||||||
unsigned char comparisonSupport : 1;
|
|
||||||
unsigned char preparationSupport : 1;
|
|
||||||
unsigned char rollbackBackup : 2;
|
|
||||||
#else
|
|
||||||
unsigned char rollbackBackup : 2;
|
|
||||||
unsigned char preparationSupport : 1;
|
|
||||||
unsigned char comparisonSupport : 1;
|
|
||||||
unsigned char deferredActivation : 1;
|
|
||||||
unsigned char payloadColdReset : 1;
|
|
||||||
unsigned char reserved : 2;
|
|
||||||
#endif
|
|
||||||
} ATTRIBUTE_PACKING bitfield;
|
|
||||||
} ATTRIBUTE_PACKING GeneralCompProperties;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetCurrentVersionResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char currentVersion[HPMFWUPG_VERSION_SIZE];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetDescStringResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
char descString[HPMFWUPG_DESC_STRING_LENGTH];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetRollbackFwVersionResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char rollbackFwVersion[HPMFWUPG_VERSION_SIZE];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetDeferredFwVersionResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char deferredFwVersion[HPMFWUPG_VERSION_SIZE];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* GetComponentProperties - OEM properties (192) */
|
|
||||||
#define HPMFWUPG_OEM_LENGTH 4
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetOemProperties {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char oemRspData[HPMFWUPG_OEM_LENGTH];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetComponentPropertiesResp {
|
|
||||||
union {
|
|
||||||
struct HpmfwupgGetGeneralPropResp generalPropResp;
|
|
||||||
struct HpmfwupgGetCurrentVersionResp currentVersionResp;
|
|
||||||
struct HpmfwupgGetDescStringResp descStringResp;
|
|
||||||
struct HpmfwupgGetRollbackFwVersionResp rollbackFwVersionResp;
|
|
||||||
struct HpmfwupgGetDeferredFwVersionResp deferredFwVersionResp;
|
|
||||||
struct HpmfwupgGetOemProperties oemProperties;
|
|
||||||
} ATTRIBUTE_PACKING Response;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetComponentPropertiesCtx {
|
|
||||||
struct HpmfwupgGetComponentPropertiesReq req;
|
|
||||||
struct HpmfwupgGetComponentPropertiesResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ABORT UPGRADE DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgAbortUpgradeReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgAbortUpgradeResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgAbortUpgradeCtx {
|
|
||||||
struct HpmfwupgAbortUpgradeReq req;
|
|
||||||
struct HpmfwupgAbortUpgradeResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* UPGRADE ACTIONS DEFINITIONS */
|
|
||||||
typedef enum eHpmfwupgUpgradeAction {
|
|
||||||
HPMFWUPG_UPGRADE_ACTION_BACKUP = 0,
|
|
||||||
HPMFWUPG_UPGRADE_ACTION_PREPARE,
|
|
||||||
HPMFWUPG_UPGRADE_ACTION_UPGRADE,
|
|
||||||
HPMFWUPG_UPGRADE_ACTION_COMPARE,
|
|
||||||
HPMFWUPG_UPGRADE_ACTION_INVALID = 0xff
|
|
||||||
} tHpmfwupgUpgradeAction;
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgInitiateUpgradeActionReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
struct HpmfwupgComponentBitMask componentsMask;
|
|
||||||
unsigned char upgradeAction;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgInitiateUpgradeActionResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgInitiateUpgradeActionCtx {
|
|
||||||
struct HpmfwupgInitiateUpgradeActionReq req;
|
|
||||||
struct HpmfwupgInitiateUpgradeActionResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* UPLOAD FIRMWARE BLOCK DEFINITIONS */
|
|
||||||
#define HPMFWUPG_SEND_DATA_COUNT_KCS 30
|
|
||||||
#define HPMFWUPG_SEND_DATA_COUNT_LAN 25
|
|
||||||
#define HPMFWUPG_SEND_DATA_COUNT_IPMB 26
|
|
||||||
#define HPMFWUPG_SEND_DATA_COUNT_IPMBL 26
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgUploadFirmwareBlockReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char blockNumber;
|
|
||||||
unsigned char data[0];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgUploadFirmwareBlockResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgUploadFirmwareBlockCtx {
|
|
||||||
struct HpmfwupgUploadFirmwareBlockReq * req;
|
|
||||||
struct HpmfwupgUploadFirmwareBlockResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* FINISH FIRMWARE UPLOAD DEFINITIONS */
|
|
||||||
#define HPMFWUPG_IMAGE_SIZE_BYTE_COUNT 4
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgFinishFirmwareUploadReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char componentId;
|
|
||||||
unsigned char imageLength[HPMFWUPG_IMAGE_SIZE_BYTE_COUNT];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgFinishFirmwareUploadResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgFinishFirmwareUploadCtx {
|
|
||||||
struct HpmfwupgFinishFirmwareUploadReq req;
|
|
||||||
struct HpmfwupgFinishFirmwareUploadResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ACTIVATE FW DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgActivateFirmwareReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char rollback_override;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgActivateFirmwareResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgActivateFirmwareCtx {
|
|
||||||
struct HpmfwupgActivateFirmwareReq req;
|
|
||||||
struct HpmfwupgActivateFirmwareResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* GET UPGRADE STATUS DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetUpgradeStatusReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetUpgradeStatusResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char cmdInProcess;
|
|
||||||
unsigned char lastCmdCompCode;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgGetUpgradeStatusCtx {
|
|
||||||
struct HpmfwupgGetUpgradeStatusReq req;
|
|
||||||
struct HpmfwupgGetUpgradeStatusResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* MANUAL FW ROLLBACK DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgManualFirmwareRollbackReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgManualFirmwareRollbackResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgManualFirmwareRollbackCtx {
|
|
||||||
struct HpmfwupgManualFirmwareRollbackReq req;
|
|
||||||
struct HpmfwupgManualFirmwareRollbackResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* QUERY ROLLBACK STATUS DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgQueryRollbackStatusReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgQueryRollbackStatusResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
struct HpmfwupgComponentBitMask rollbackComp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgQueryRollbackStatusCtx {
|
|
||||||
struct HpmfwupgQueryRollbackStatusReq req;
|
|
||||||
struct HpmfwupgQueryRollbackStatusResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* QUERY SELF TEST RESULT DEFINITIONS */
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgQuerySelftestResultReq {
|
|
||||||
unsigned char picmgId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgQuerySelftestResultResp {
|
|
||||||
unsigned char picmgId;
|
|
||||||
unsigned char result1;
|
|
||||||
unsigned char result2;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgQuerySelftestResultCtx {
|
|
||||||
struct HpmfwupgQuerySelftestResultReq req;
|
|
||||||
struct HpmfwupgQuerySelftestResultResp resp;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* HPM.1 IMAGE DEFINITIONS */
|
|
||||||
#define HPMFWUPG_HEADER_SIGNATURE_LENGTH 8
|
|
||||||
#define HPMFWUPG_MANUFATURER_ID_LENGTH 3
|
|
||||||
#define HPMFWUPG_PRODUCT_ID_LENGTH 2
|
|
||||||
#define HPMFWUPG_TIME_LENGTH 4
|
|
||||||
#define HPMFWUPG_TIMEOUT_LENGTH 1
|
|
||||||
#define HPMFWUPG_COMP_REVISION_LENGTH 2
|
|
||||||
#define HPMFWUPG_FIRM_REVISION_LENGTH 6
|
|
||||||
#define HPMFWUPG_IMAGE_HEADER_VERSION 0
|
|
||||||
#define HPMFWUPG_IMAGE_SIGNATURE "PICMGFWU"
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
#pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgImageHeader {
|
|
||||||
char signature[HPMFWUPG_HEADER_SIGNATURE_LENGTH];
|
|
||||||
unsigned char formatVersion;
|
|
||||||
unsigned char deviceId;
|
|
||||||
unsigned char manId[HPMFWUPG_MANUFATURER_ID_LENGTH];
|
|
||||||
unsigned char prodId[HPMFWUPG_PRODUCT_ID_LENGTH];
|
|
||||||
unsigned char time[HPMFWUPG_TIME_LENGTH];
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
#if WORDS_BIGENDIAN
|
|
||||||
unsigned char imageSelfTest : 1;
|
|
||||||
unsigned char autRollback : 1;
|
|
||||||
unsigned char manRollback : 1;
|
|
||||||
unsigned char servAffected : 1;
|
|
||||||
unsigned char reserved : 4;
|
|
||||||
#else
|
|
||||||
unsigned char reserved : 4;
|
|
||||||
unsigned char servAffected : 1;
|
|
||||||
unsigned char manRollback : 1;
|
|
||||||
unsigned char autRollback : 1;
|
|
||||||
unsigned char imageSelfTest : 1;
|
|
||||||
#endif
|
|
||||||
} ATTRIBUTE_PACKING bitField;
|
|
||||||
unsigned char byte;
|
|
||||||
}ATTRIBUTE_PACKING imageCapabilities;
|
|
||||||
struct HpmfwupgComponentBitMask components;
|
|
||||||
unsigned char selfTestTimeout;
|
|
||||||
unsigned char rollbackTimeout;
|
|
||||||
unsigned char inaccessTimeout;
|
|
||||||
unsigned char compRevision[HPMFWUPG_COMP_REVISION_LENGTH];
|
|
||||||
unsigned char firmRevision[HPMFWUPG_FIRM_REVISION_LENGTH];
|
|
||||||
unsigned short oemDataLength;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HPMFWUPG_DESCRIPTION_LENGTH 21
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgActionRecord {
|
|
||||||
unsigned char actionType;
|
|
||||||
struct HpmfwupgComponentBitMask components;
|
|
||||||
unsigned char checksum;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HPMFWUPG_FIRMWARE_SIZE_LENGTH 4
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgFirmwareImage {
|
|
||||||
unsigned char version[HPMFWUPG_FIRM_REVISION_LENGTH];
|
|
||||||
char desc[HPMFWUPG_DESCRIPTION_LENGTH];
|
|
||||||
unsigned char length[HPMFWUPG_FIRMWARE_SIZE_LENGTH];
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(1)
|
|
||||||
#endif
|
|
||||||
struct HpmfwupgUpgradeCtx {
|
|
||||||
struct HpmfwupgComponentBitMask compUpdateMask;
|
|
||||||
unsigned int imageSize;
|
|
||||||
unsigned char* pImageData;
|
|
||||||
unsigned char componentId;
|
|
||||||
struct HpmfwupgGetTargetUpgCapabilitiesResp targetCap;
|
|
||||||
struct HpmfwupgGetGeneralPropResp genCompProp[HPMFWUPG_COMPONENT_ID_MAX];
|
|
||||||
struct ipm_devid_rsp devId;
|
|
||||||
} ATTRIBUTE_PACKING;
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
|
||||||
# pragma pack(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum eHpmfwupgActionType {
|
|
||||||
HPMFWUPG_ACTION_BACKUP_COMPONENTS = 0,
|
|
||||||
HPMFWUPG_ACTION_PREPARE_COMPONENTS,
|
|
||||||
HPMFWUPG_ACTION_UPLOAD_FIRMWARE,
|
|
||||||
HPMFWUPG_ACTION_RESERVED = 0xFF
|
|
||||||
} tHpmfwupgActionType;
|
|
||||||
|
|
||||||
/* FUNCTIONS PROTOTYPES */
|
|
||||||
#define HPMFWUPG_MAJORMINOR_VERSION_SIZE 2
|
|
||||||
|
|
||||||
/* Options added for user to check the version and to view both the FILE and
|
|
||||||
* TARGET Version
|
|
||||||
*/
|
|
||||||
#define VIEW_MODE 0x01
|
|
||||||
#define DEBUG_MODE 0x02
|
|
||||||
#define FORCE_MODE 0x04
|
|
||||||
#define COMPARE_MODE 0x08
|
|
||||||
|
|
||||||
typedef struct _VERSIONINFO {
|
|
||||||
unsigned char componentId;
|
|
||||||
unsigned char targetMajor;
|
|
||||||
unsigned char targetMinor;
|
|
||||||
unsigned char targetAux[4];
|
|
||||||
unsigned char rollbackMajor;
|
|
||||||
unsigned char rollbackMinor;
|
|
||||||
unsigned char rollbackAux[4];
|
|
||||||
unsigned char deferredMajor;
|
|
||||||
unsigned char deferredMinor;
|
|
||||||
unsigned char deferredAux[4];
|
|
||||||
unsigned char imageMajor;
|
|
||||||
unsigned char imageMinor;
|
|
||||||
unsigned char imageAux[4];
|
|
||||||
unsigned char coldResetRequired;
|
|
||||||
unsigned char rollbackSupported;
|
|
||||||
unsigned char deferredActivationSupported;
|
|
||||||
char descString[HPMFWUPG_DESC_STRING_LENGTH + 1];
|
|
||||||
}VERSIONINFO, *PVERSIONINFO;
|
|
||||||
|
|
||||||
VERSIONINFO gVersionInfo[HPMFWUPG_COMPONENT_ID_MAX];
|
|
||||||
|
|
||||||
#define TARGET_VER (0x01)
|
|
||||||
#define ROLLBACK_VER (0x02)
|
|
||||||
#define IMAGE_VER (0x04)
|
|
||||||
|
|
||||||
#endif /* IPMI_KFWUM_H */
|
|
@ -2,4 +2,3 @@ Duncan Laurie <duncan@iceblink.org>
|
|||||||
Fredrik Öhrn <ohrn@chl.chalmers.se>
|
Fredrik Öhrn <ohrn@chl.chalmers.se>
|
||||||
Jon Cassorla <jon.cassorla@newisys.com>
|
Jon Cassorla <jon.cassorla@newisys.com>
|
||||||
Jeremy Ellington <jeremy@jeremye.net>
|
Jeremy Ellington <jeremy@jeremye.net>
|
||||||
Petter Reinholdtsen <pere@hungry.com>
|
|
@ -1,67 +1,3 @@
|
|||||||
version 1.8.15 2014-11-24
|
|
||||||
* ID: 340 - ipmitool sol session improperly closes on packet retry
|
|
||||||
* ID: 277 - support for hostnames longer than 64 chars
|
|
||||||
* ID: 313 - ipmitool doesn't support hostname long than 64 symbols
|
|
||||||
* ID: 277 - Minor issue with ipmi_intf_session_set_hostname()
|
|
||||||
* ID: 247 - 'sensor thresh' help output is wrong
|
|
||||||
* ID: 324 - conflicting declaration write_fru_area()
|
|
||||||
* ID: 337 - Add support for 13G Dell PowerEdge
|
|
||||||
* ID: 325 - DDR4 DIMM Decoding Logic
|
|
||||||
* ID: 328 - HPM.2 fixes
|
|
||||||
* ID: 329 - hpm.1 upgrade fixes
|
|
||||||
* ID: 103 - picmg discover messages should be DEBUG, not INFO
|
|
||||||
* ID: 331 - Passwords provided in file (-f option) truncated on space
|
|
||||||
* ID: 318 - ipmi_tsol.c: fix buffer overflow
|
|
||||||
* ID: 306 - "fru print" command prints the FRU #0 twice
|
|
||||||
* ID: 305 - HPM.1 deferred activation support fixup
|
|
||||||
* ID: 317 - ipmi_fwum.c: fix typo
|
|
||||||
* ID: 315 - buildsystem: configure.in is deprecated
|
|
||||||
* ID: 316 - Directory debian is outdated
|
|
||||||
* ID: 103 - 'lib/ipmi_ekanalyzer.c' needs a re-work
|
|
||||||
* ID: 46 - SEL OEM record corner case
|
|
||||||
|
|
||||||
version 1.8.14 2014-05-05
|
|
||||||
* ID: 299 - openipmi plugin writes zero to wrong byte
|
|
||||||
* ID: 301 - Add OS/Hypervisor installation status events
|
|
||||||
* ID: 298 - fix LANplus retry
|
|
||||||
* ID: 295 - inform user if SOL session disconnected
|
|
||||||
* ID: 297 - don't print-out SEL entry if ID not present
|
|
||||||
* ID: 296 - Fix PSD size decoding
|
|
||||||
* ID: 293 - Use of uninitialized variable in ipmi_main()
|
|
||||||
* ID: 278 - Error in sol looptest
|
|
||||||
* ID: 290 - ipmi_sol.c needs a clean-up
|
|
||||||
* ID: 85 - Supermicro memory ECC error display
|
|
||||||
* ID: 290 - ipmi_sol.c needs a clean-up
|
|
||||||
* ID: 286 - Open session retries hit assert in ipmi_lanplus_send_payload
|
|
||||||
* ID: 285 - Fix SEGV in ipmi_lanplus_open_session
|
|
||||||
* ID: 284 - Fix SEGV in ipmi_main
|
|
||||||
* ID: 283 - ipmi_intf_socket_connect fails with IPv4 hosts
|
|
||||||
* ID: 46 - ipmi_fwum needs some re-work
|
|
||||||
* ID: 50 - ipmi_hpmfwupg needs a clean up
|
|
||||||
* ID: 279 - ipmitool sdr list broken
|
|
||||||
* ID: 44 - dummy interface support - fake-ipmistack project
|
|
||||||
* ID: 48 - Remove hard-coded FRU inventory access length restriction
|
|
||||||
* ID: 276 - HPM.1 upgrade combined patch
|
|
||||||
* ID: 90 - Add options to chassis bootparam set bootflag
|
|
||||||
* ID: 292 -Properly handle plugin non-zero target adddress with -t
|
|
||||||
* Numerous Fixes based on running Coverity
|
|
||||||
* Use TIOCFLUSH if TCFLSH is missing to get the serial plugin building on
|
|
||||||
Hurd.
|
|
||||||
* Disable imb and open plugins by default on Hurd. The platform lack
|
|
||||||
the required kernel support.
|
|
||||||
* Change serial plugin to only try to disable the IUCLC serial line flag on
|
|
||||||
platforms supporting it. Fixes build problem on Hurd and FreeBSD.
|
|
||||||
* PA: 83 - Revised IPv6 patch
|
|
||||||
* FR: 24 - Exchange OS Name Hostname BMC URL during startup
|
|
||||||
* ID: 304 - Incorect byteswap in SOL maximum payload
|
|
||||||
* ID: 303 - Fix build error in HPM.2 code
|
|
||||||
* ID: 300 - new sunoem functionality
|
|
||||||
* ID: 144 - Fix 'dcmi power set_limit action <value>'
|
|
||||||
* ID: 302 - HPM.2 long message support
|
|
||||||
* ID: 309 - Add new SEL entries for ipmi 2.0 rev 1.1
|
|
||||||
* ID: 280 - man page cleanup
|
|
||||||
* ID: 311 - man page update for new sunoem commands
|
|
||||||
|
|
||||||
version 1.8.13 2013-09-09
|
version 1.8.13 2013-09-09
|
||||||
* ID: 3611905 - Direct Serial Basic/Terminal Mode Interface drivers
|
* ID: 3611905 - Direct Serial Basic/Terminal Mode Interface drivers
|
||||||
* ID: 3577766 - configure's knobs and switches don't work
|
* ID: 3577766 - configure's knobs and switches don't work
|
@ -31,7 +31,9 @@
|
|||||||
DOCDIR = $(datadir)/doc/$(PACKAGE)
|
DOCDIR = $(datadir)/doc/$(PACKAGE)
|
||||||
DOCLIST = $(top_srcdir)/README $(top_srcdir)/COPYING $(top_srcdir)/AUTHORS $(top_srcdir)/ChangeLog
|
DOCLIST = $(top_srcdir)/README $(top_srcdir)/COPYING $(top_srcdir)/AUTHORS $(top_srcdir)/ChangeLog
|
||||||
|
|
||||||
EXTRA_DIST = $(DOCLIST)
|
EXTRA_DIST = $(DOCLIST) \
|
||||||
|
debian/changelog debian/control debian/copyright \
|
||||||
|
debian/dirs debian/docs debian/rules
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = dist-bzip2
|
AUTOMAKE_OPTIONS = dist-bzip2
|
||||||
|
|
@ -410,5 +410,3 @@ http://www.intel.com/design/servers/ipmi/spec.htm
|
|||||||
OpenIPMI project: Linux IPMI kernel driver and userland library
|
OpenIPMI project: Linux IPMI kernel driver and userland library
|
||||||
http://openipmi.sourceforge.net
|
http://openipmi.sourceforge.net
|
||||||
|
|
||||||
IPMItool commit archive
|
|
||||||
https://lists.sourceforge.net/lists/listinfo/ipmitool-cvs
|
|
@ -3,7 +3,7 @@ dnl autoconf for ipmitool
|
|||||||
dnl
|
dnl
|
||||||
AC_INIT([src/ipmitool.c])
|
AC_INIT([src/ipmitool.c])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
AM_INIT_AUTOMAKE([ipmitool], [1.8.15-cvs])
|
AM_INIT_AUTOMAKE([ipmitool], [1.8.13-cvs])
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
AC_CONFIG_SRCDIR([src/ipmitool.c])
|
AC_CONFIG_SRCDIR([src/ipmitool.c])
|
||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
@ -29,7 +29,7 @@ AC_C_BIGENDIAN
|
|||||||
AC_FUNC_MALLOC
|
AC_FUNC_MALLOC
|
||||||
AC_FUNC_SELECT_ARGTYPES
|
AC_FUNC_SELECT_ARGTYPES
|
||||||
AC_FUNC_STRTOD
|
AC_FUNC_STRTOD
|
||||||
AC_CHECK_FUNCS([alarm gethostbyname getaddrinfo getifaddrs socket select])
|
AC_CHECK_FUNCS([alarm gethostbyname socket select])
|
||||||
AC_CHECK_FUNCS([memmove memset strchr strdup strerror])
|
AC_CHECK_FUNCS([memmove memset strchr strdup strerror])
|
||||||
AC_CHECK_FUNCS([getpassphrase])
|
AC_CHECK_FUNCS([getpassphrase])
|
||||||
|
|
||||||
@ -39,8 +39,6 @@ AM_PROG_LIBTOOL
|
|||||||
LIBTOOL="$LIBTOOL --silent"
|
LIBTOOL="$LIBTOOL --silent"
|
||||||
|
|
||||||
AC_SEARCH_LIBS([gethostbyname], [nsl])
|
AC_SEARCH_LIBS([gethostbyname], [nsl])
|
||||||
AC_SEARCH_LIBS([getaddrinfo], [nsl])
|
|
||||||
AC_SEARCH_LIBS([getifaddrs], [nsl])
|
|
||||||
AC_SEARCH_LIBS([socket], [socket], [],
|
AC_SEARCH_LIBS([socket], [socket], [],
|
||||||
[AC_CHECK_LIB([nsl], [socket],
|
[AC_CHECK_LIB([nsl], [socket],
|
||||||
[LIBS="$LIBS -lsocket -lnsl"], [], [-lsocket])])
|
[LIBS="$LIBS -lsocket -lnsl"], [], [-lsocket])])
|
||||||
@ -62,7 +60,6 @@ xenable_intf_imb=yes
|
|||||||
xenable_intf_open=yes
|
xenable_intf_open=yes
|
||||||
xenable_intf_lipmi=yes
|
xenable_intf_lipmi=yes
|
||||||
#xenable_intf_serial=yes
|
#xenable_intf_serial=yes
|
||||||
xenable_intf_dummy=no
|
|
||||||
xenable_all_options=yes
|
xenable_all_options=yes
|
||||||
xenable_ipmishell=yes
|
xenable_ipmishell=yes
|
||||||
|
|
||||||
@ -109,11 +106,6 @@ solaris*)
|
|||||||
xenable_intf_bmc=no
|
xenable_intf_bmc=no
|
||||||
xenable_intf_open=no
|
xenable_intf_open=no
|
||||||
;;
|
;;
|
||||||
gnu*)
|
|
||||||
# disable the linux and solaris-specific interfaces on Hurd
|
|
||||||
xenable_intf_imb=no
|
|
||||||
xenable_intf_open=no
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AC_SUBST(ARCH, $host_cpu)
|
AC_SUBST(ARCH, $host_cpu)
|
||||||
@ -511,18 +503,6 @@ if test "x$xenable_intf_bmc" = "xyes"; then
|
|||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB bmc/libintf_bmc.la"
|
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB bmc/libintf_bmc.la"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl enable Dummy interface for testing
|
|
||||||
AC_ARG_ENABLE([intf-dummy],
|
|
||||||
[AC_HELP_STRING([--enable-intf-dummy],
|
|
||||||
[enable Dummy(test) interface [default=no]])],
|
|
||||||
[xenable_intf_dummy=$enableval], [xenable_intf_dummy=no])
|
|
||||||
if test "x$xenable_intf_dummy" = "xyes"; then
|
|
||||||
AC_DEFINE(IPMI_INTF_DUMMY, [1], [Define to 1 to enable Dummy interface.])
|
|
||||||
AC_SUBST(INTF_DUMMY, [dummy])
|
|
||||||
AC_SUBST(INTF_DUMMY_LIB, [libintf_dummy.la])
|
|
||||||
IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB dummy/libintf_dummy.la"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(IPMITOOL_INTF_LIB)
|
AC_SUBST(IPMITOOL_INTF_LIB)
|
||||||
|
|
||||||
if test "x$xenable_ipmishell" = "xyes"; then
|
if test "x$xenable_ipmishell" = "xyes"; then
|
||||||
@ -622,8 +602,7 @@ AC_CONFIG_FILES([Makefile
|
|||||||
src/plugins/imb/Makefile
|
src/plugins/imb/Makefile
|
||||||
src/plugins/bmc/Makefile
|
src/plugins/bmc/Makefile
|
||||||
src/plugins/lipmi/Makefile
|
src/plugins/lipmi/Makefile
|
||||||
src/plugins/serial/Makefile
|
src/plugins/serial/Makefile])
|
||||||
src/plugins/dummy/Makefile])
|
|
||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
@ -639,7 +618,6 @@ AC_MSG_RESULT([ imb : $xenable_intf_imb])
|
|||||||
AC_MSG_RESULT([ bmc : $xenable_intf_bmc])
|
AC_MSG_RESULT([ bmc : $xenable_intf_bmc])
|
||||||
AC_MSG_RESULT([ lipmi : $xenable_intf_lipmi])
|
AC_MSG_RESULT([ lipmi : $xenable_intf_lipmi])
|
||||||
AC_MSG_RESULT([ serial : $xenable_intf_serial])
|
AC_MSG_RESULT([ serial : $xenable_intf_serial])
|
||||||
AC_MSG_RESULT([ dummy : $xenable_intf_dummy])
|
|
||||||
AC_MSG_RESULT([])
|
AC_MSG_RESULT([])
|
||||||
AC_MSG_RESULT([Extra tools])
|
AC_MSG_RESULT([Extra tools])
|
||||||
AC_MSG_RESULT([ ipmievd : yes])
|
AC_MSG_RESULT([ ipmievd : yes])
|
@ -34,8 +34,6 @@ dist_pkgdata_DATA = oem_ibm_sel_map
|
|||||||
|
|
||||||
EXTRA_DIST = README \
|
EXTRA_DIST = README \
|
||||||
bmclanconf ipmi.init.basic ipmi.init.redhat \
|
bmclanconf ipmi.init.basic ipmi.init.redhat \
|
||||||
exchange-bmc-os-info.init.redhat exchange-bmc-os-info.service.redhat \
|
|
||||||
exchange-bmc-os-info.sysconf \
|
|
||||||
ipmievd.init.redhat ipmievd.init.suse ipmievd.init.debian \
|
ipmievd.init.redhat ipmievd.init.suse ipmievd.init.debian \
|
||||||
collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh \
|
collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh \
|
||||||
bmc-snmp-proxy bmc-snmp-proxy.service bmc-snmp-proxy.sysconf
|
bmc-snmp-proxy bmc-snmp-proxy.service bmc-snmp-proxy.sysconf
|
@ -174,7 +174,7 @@ bmc_alert_dest()
|
|||||||
# Pick the first active LAN channel
|
# Pick the first active LAN channel
|
||||||
for CHANNEL in `seq 1 14`
|
for CHANNEL in `seq 1 14`
|
||||||
do
|
do
|
||||||
[ $(${IPMITOOL} -I open channel info ${CHANNEL} 2>/dev/null \
|
[ $(${IPMI_TOOL} -I open channel info ${CHANNEL} 2>/dev/null \
|
||||||
| grep -q "802\.3") ] || break
|
| grep -q "802\.3") ] || break
|
||||||
done
|
done
|
||||||
|
|
5
ipmitool/debian/README.Debian
Normal file
5
ipmitool/debian/README.Debian
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
For more information about setting up your Debian system with IPMI
|
||||||
|
please see the excellent howto by Tim Small:
|
||||||
|
|
||||||
|
http://buttersideup.com/docs/howto/IPMI_on_Debian.html
|
||||||
|
|
324
ipmitool/debian/changelog
Normal file
324
ipmitool/debian/changelog
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
version (1.8.11) unstable; urgency=low
|
||||||
|
* Fix new GCC compilation issues in regards to Packing
|
||||||
|
* Fix Tracker bug #1642710 - ipmi_kcs_drv being loaded/unloaded
|
||||||
|
for 2.4 kernel instead of ipmi_si_drv driver module
|
||||||
|
* New -y option added to allow specification of kg keys with
|
||||||
|
non-printable characters
|
||||||
|
* New -K option added to allow kgkey settings via environmental
|
||||||
|
variable IPMI_KGKEY
|
||||||
|
* Generic device support added for EEPROM with SDR Type 10h (gendev)
|
||||||
|
* Fix to lan-bridging for a double-bridging crash and to fix
|
||||||
|
an issue with bridging multiple concurrent requests and
|
||||||
|
erroneous handling of raw Send Message
|
||||||
|
* Lanplus fix for commands like 'sensor list' without the -t option
|
||||||
|
causing wrong double bridged requests of a sensor is located
|
||||||
|
on another satellite controller
|
||||||
|
* Fix lan and lanplus request list entry removal bugs
|
||||||
|
* Fix non-working issue when trying to send a bridge message with
|
||||||
|
Cipher 3
|
||||||
|
* Change bridge message handling to reuse command ipmi_lan_poll_recv
|
||||||
|
* Added PICMG 2.0 and 2.3 support
|
||||||
|
* Fix PICMG (ATCA) extension verification and reversal of BCD encoded
|
||||||
|
values for "major" and "minor" fields
|
||||||
|
* Add IANA support for Pigeon Point
|
||||||
|
* Add OEM SW/FW Record identification
|
||||||
|
* Fix to include I2C and LUN addresses so sensors are correctly managed
|
||||||
|
* Patch ID 1990560 to get readings from non-linear analog sensors
|
||||||
|
* Add support for SOL payload status command
|
||||||
|
* SOL set parameter range checking added
|
||||||
|
* Fixed SOL activate options usage
|
||||||
|
* Fixed crashes when parsing 'sol payload' and 'tsol' cmds (#216967)
|
||||||
|
* Added retries to SOL keepalive
|
||||||
|
* Fixed wrong mask values for Front Panel disable/enable status
|
||||||
|
* Add support to access fru internal use area
|
||||||
|
* Add support for new PICMG 3.0 R3.0 (March 24, 2008) to allow
|
||||||
|
blocks of data within the FRU storage area to be write
|
||||||
|
protected.
|
||||||
|
* Fix node reporting in GUID; Tracker bug #2339675
|
||||||
|
* Fix watchdog use/action print strings
|
||||||
|
* Fix endian bug in SDR add from file; Tracker bug #2075258
|
||||||
|
* Fix crash when dumping SDRs in a file and there's an error
|
||||||
|
getting an SDR; improve algorithm for optimal packet size
|
||||||
|
* Fix occasional SDR dump segfault; #1793076
|
||||||
|
* Allow ipmitool sel delete to accept hex list entry numbers
|
||||||
|
* Fix SEL total space reporting.
|
||||||
|
* Fix for garbage sensor threshold values reported when none
|
||||||
|
returned. Tracker Bug #863748
|
||||||
|
* ipmievd change to Monitor %used in SEL buffer and log warnings when
|
||||||
|
the buffer is 80% and 100% full
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Wed, 25 Feb 2009 09:44:31 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.10) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version.
|
||||||
|
* Patch to allow Debian package builds from cvs.
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Fri, 8 Aug 2008 09:44:31 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.7-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix typo in init.d/ipmievd. (Closes: #361309)
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Sat, 8 Apr 2006 06:44:31 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.7-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version.
|
||||||
|
- Dropped nuclear clause from the copyright. Updated debian/copyright
|
||||||
|
to reflect this.
|
||||||
|
- ipmievd now store pid in /var/run/ipmievd.pid. Adjust init.d
|
||||||
|
script to use it.
|
||||||
|
* Rename /etc/default/ipmievd variable IPMIEVD_OPTS is renamed to
|
||||||
|
IPMIEVD_OPTIONS to stay compatible with upstream and other
|
||||||
|
distributions. Add backwards compatibility code with a warning to
|
||||||
|
the users of the old variable.
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Sun, 26 Mar 2006 21:11:08 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.6-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Add ia64 as an supported arch. (Closes: #355930)
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Fri, 10 Mar 2006 23:34:50 +0100
|
||||||
|
|
||||||
|
ipmitool (1.8.6-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version.
|
||||||
|
- Avoid crashing when setting lan IP address. (Closes: #351205)
|
||||||
|
* Avoid changing history by reverding upstream change
|
||||||
|
to email addresses in debian/changelog.
|
||||||
|
* Correct typo in control file: Suggest -> Suggests. Thanks
|
||||||
|
to Philipp Matthias Hahn for the report.
|
||||||
|
* Add init.d/ipmievd script. Based on script from Elmar Hoffmann,
|
||||||
|
slightly modified to use lsb-base functions. Added dependency on
|
||||||
|
lsb-base. (Closes: #345994)
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Sun, 26 Feb 2006 10:31:14 +0100
|
||||||
|
|
||||||
|
ipmitool (1.8.2-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Add build-dependency on 'libreadline5-dev | libreadline-dev' to make
|
||||||
|
sure all archs get readline support. (Closes: #326341)
|
||||||
|
* Add build-dependency on libssl-dev to enable SSL support on
|
||||||
|
all archs.
|
||||||
|
* Updated Standards-Version to 3.6.2.1. (No updates required)
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Sat, 3 Sep 2005 19:18:51 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.2-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
- Fix FRU reading for large (>255 bytes) areas.
|
||||||
|
- Overhaul to ipmievd to support SEL polling in addition to OpenIPMI.
|
||||||
|
- Fix LAN parameter segfault when no Ciphers supported by
|
||||||
|
BMC. (Closes: #306806)
|
||||||
|
- Fix IPMIv2 support on Intel v2 BMCs (use -o intelplus).
|
||||||
|
- Separate option parsing code from main ipmitool source file.
|
||||||
|
- Add raw I2C support with IPMI Master Read-Write command.
|
||||||
|
- Add support for new 'sdr elist' extended output format.
|
||||||
|
- Add support for listing sensors by type with 'sdr type' command.
|
||||||
|
- Add support for new 'sel elist' extended output format that
|
||||||
|
cross-references events with sensors.
|
||||||
|
- Add support for sending dynamically generated platform events
|
||||||
|
based on existing sensor information.
|
||||||
|
- New '-S' argument to read local SDR cache created with 'sdr dump'.
|
||||||
|
- Updated manpage for ipmitool and ipmievd. (Closes: #306894)
|
||||||
|
* Correct the upstream URL in debian/changelog to the current one.
|
||||||
|
* Suggest package openipmi. (Closes: #305629)
|
||||||
|
* Add debian/watch file to detect new source versions.
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Sun, 5 Jun 2005 10:29:18 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.1-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Install ipmievd into /usr/sbin/.
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Thu, 7 Apr 2005 01:18:44 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.0-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Initial upload into Debian, based on the upstream build
|
||||||
|
rules. (Closes: #299924)
|
||||||
|
* Convert debian/changelog to UTF-8.
|
||||||
|
* Change section from 'contrib' to 'utils'.
|
||||||
|
* Build-depend on debhelper (>> 4.0.0) to match the rules file.
|
||||||
|
* Set Standards-version to 3.6.1.
|
||||||
|
* Make sure binary dependency is properly generated.
|
||||||
|
* Add long description, copied from the project README.
|
||||||
|
* Drop useless provides 'ipmitool', as the package is called 'ipmitool'.
|
||||||
|
* Don't install the COPYING file, as the license text already is
|
||||||
|
included in debian/copyright.
|
||||||
|
* Remove unused parts of the rules file.
|
||||||
|
* Correct clean target in rules file, to use 'distclean' and remove
|
||||||
|
configure-stamp not bogus config-stamp.
|
||||||
|
|
||||||
|
-- Petter Reinholdtsen <pere@debian.org> Sun, 3 Apr 2005 20:52:02 +0200
|
||||||
|
|
||||||
|
ipmitool (1.8.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix IPMIv2.0 issues
|
||||||
|
* Fix chassis boot parameter support
|
||||||
|
* Add support for linear sensors
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Wed, Mar 16 2005 17:08:12 -0700
|
||||||
|
|
||||||
|
ipmitool (1.7.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Update bmc plugin to work with new Solaris bmc driver (new ioctl
|
||||||
|
for interface detection and new STREAMS message-based interface).
|
||||||
|
|
||||||
|
-- Seth Goldberg <sethmeisterg@hotmail.com> Mon, Mar 7 2005 18:03:00 -0800
|
||||||
|
|
||||||
|
ipmitool (1.7.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* Propogate errors correctly so exit status will be useful
|
||||||
|
* More consistent display of errors including completion code text
|
||||||
|
* Errors and debug is send to stderr now
|
||||||
|
* New "sel get" command that will print details about SEL entry
|
||||||
|
and corresponding SDR records as well as FRUs via entity association
|
||||||
|
* Improved event generator, now supports reading events from text file
|
||||||
|
* New "-o oemtype" option for specifying OEM boards
|
||||||
|
exsting types are "supermicro" and "intelwv2"
|
||||||
|
* New PEF subsystem
|
||||||
|
* New "bmc" plugin for Solaris 10 x86
|
||||||
|
* Many bugfixes and contributed patches
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Fri, Jan 7 2005 19:58:22 -0700
|
||||||
|
|
||||||
|
ipmitool (1.6.2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Support for Supermicro BMC OEM authentication method
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Mon, 16 Nov 2004 08:20:01 -0700
|
||||||
|
|
||||||
|
ipmitool (1.6.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix minor problem with LAN parameter setting
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Wed, 29 Sep 2004 11:19:17 -0700
|
||||||
|
|
||||||
|
ipmitool (1.6.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* Add a README
|
||||||
|
* Add support for IPMIv2 and Serial-over-LAN from Newisys
|
||||||
|
* Add Solaris x86 lipmi interface
|
||||||
|
* Add support for building Solaris packages
|
||||||
|
* Add support for building RPMs as non-root user
|
||||||
|
* Fix segfault when doing "sel list" (from Matthew Braithwaite)
|
||||||
|
* Fix "chassis identify" on some BMCs (from ebrower@sourceforge)
|
||||||
|
* Add "bmc info" and related output (from ebrower@sourceforge)
|
||||||
|
* new "shell" and "exec" commands
|
||||||
|
* lots of other contributed patches
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Thu, 9 Sep 2004 21:39:37 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.9) unstable; urgency=low
|
||||||
|
|
||||||
|
* Add ability to get a particular sensor by name
|
||||||
|
* Add ability to set a particular sensor threshold
|
||||||
|
* Add support for displaying V2 channel authentication levels
|
||||||
|
* Add README for rrdtool scripts in contrib directory
|
||||||
|
* Improve lan interface retry handling
|
||||||
|
* Support prompting for password or reading from environment
|
||||||
|
* Move chaninfo command into channel subcommand
|
||||||
|
* Fix reservation ID handling when two sessions open to BMC
|
||||||
|
* Fix reading of large FRU data
|
||||||
|
* Add configure option for changing binary to ipmiadm for Solaris
|
||||||
|
* Fix compile problem on Solaris 8
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Sat, 27 Mar 2004 00:11:37 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.8) unstable; urgency=low
|
||||||
|
|
||||||
|
* Enable static compilation of interfaces
|
||||||
|
* Fix types to be 64-bit safe
|
||||||
|
* Fix compilation problems on Solaris
|
||||||
|
* Fix multiple big-endian problems for Solaris/SPARC
|
||||||
|
* Fix channel access to save settings to NVRAM
|
||||||
|
* Set channel privilege limit to ADMIN during "access on"
|
||||||
|
* Enable gratuitous ARP in bmcautoconf.sh
|
||||||
|
* Add support for Linux kernel panic messages in SEL output
|
||||||
|
* Add support for type 3 SDR records
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Tue, 27 Jan 2004 16:23:25 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.7) unstable; urgency=low
|
||||||
|
|
||||||
|
* add IPMIv1.5 eratta fixes
|
||||||
|
* additions to FRU printing and FRU multirecords
|
||||||
|
* better handling of SDR printing
|
||||||
|
* contrib scripts for creating rrdtool graphs
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Mon, 5 Jan 2004 17:29:50 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.6) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix SEL event decoding for generic events
|
||||||
|
* Handle empty SEL gracefully when doing "sel list"
|
||||||
|
* Fix sdr handling of sensors that do not return a reading
|
||||||
|
* Fix for CSV display of sensor readings/units from Fredrik Öhrn
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Thu, 4 Dec 2003 14:47:19 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.5) unstable; urgency=low
|
||||||
|
|
||||||
|
* Add -U option for setting LAN username
|
||||||
|
* Fix -v usage for plugin interfaces
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Tue, 25 Nov 2003 15:10:48 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Put interface plugin API into library
|
||||||
|
* Fix ipmievd
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Fri, 14 Nov 2003 15:16:34 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Add -g option to work with grizzly bmc
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Mon, 3 Nov 2003 18:04:07 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.2) unstable; urgency=low
|
||||||
|
|
||||||
|
* add support for setting gratuitous arp interval
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Fri, 24 Oct 2003 11:00:00 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* better SEL support
|
||||||
|
* fix display bug in SDR list
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Wed, 8 Oct 2003 17:28:51 -0700
|
||||||
|
|
||||||
|
ipmitool (1.5.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* more robust UDP packet handling
|
||||||
|
* add Intel IMB driver support
|
||||||
|
* use autoconf/automake/libtool
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Fri, 5 Sep 2003 11:57:32 -0700
|
||||||
|
|
||||||
|
ipmitool (1.2-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New command line option parsing
|
||||||
|
* More chassis commands supported
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Wed, 2 Apr 2003 17:44:17 -0700
|
||||||
|
|
||||||
|
ipmitool (1.1-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Minor fixes.
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Tue, 1 Apr 2003 14:31:10 -0700
|
||||||
|
|
||||||
|
ipmitool (1.0-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Initial Release.
|
||||||
|
|
||||||
|
-- Duncan Laurie <duncan@iceblink.org> Sun, 30 Mar 2003 21:30:46 -0700
|
||||||
|
|
28
ipmitool/debian/control
Normal file
28
ipmitool/debian/control
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Source: ipmitool
|
||||||
|
Section: utils
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Petter Reinholdtsen <pere@debian.org>
|
||||||
|
Uploaders: Duncan Laurie <duncan@iceblink.org>
|
||||||
|
Build-Depends: debhelper (>> 4.0.0), libreadline5-dev | libreadline-dev, libssl-dev, autoconf, automake1.9 | automake, autotools-dev, libtool
|
||||||
|
Standards-Version: 3.6.2.1
|
||||||
|
|
||||||
|
Package: ipmitool
|
||||||
|
Architecture: i386 amd64 ia64
|
||||||
|
Depends: ${shlibs:Depends}, lsb-base
|
||||||
|
Suggests: openipmi
|
||||||
|
Description: utility for IPMI control with kernel driver or LAN interface
|
||||||
|
A utility for managing and configuring devices that support the
|
||||||
|
Intelligent Platform Management Interface. IPMI is an open standard
|
||||||
|
for monitoring, logging, recovery, inventory, and control of hardware
|
||||||
|
that is implemented independent of the main CPU, BIOS, and OS. The
|
||||||
|
service processor (or Baseboard Management Controller, BMC) is the
|
||||||
|
brain behind platform management and its primary purpose is to handle
|
||||||
|
the autonomous sensor monitoring and event logging features.
|
||||||
|
.
|
||||||
|
The ipmitool program provides a simple command-line interface to this
|
||||||
|
BMC. It features the ability to read the sensor data repository
|
||||||
|
(SDR) and print sensor values, display the contents of the System
|
||||||
|
Event Log (SEL), print Field Replaceable Unit (FRU) inventory
|
||||||
|
information, read and set LAN configuration parameters, and perform
|
||||||
|
remote chassis power control.
|
||||||
|
|
36
ipmitool/debian/copyright
Normal file
36
ipmitool/debian/copyright
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
This package was debianized by Duncan Laurie before
|
||||||
|
2003-11-18 17:55:21 +0100.
|
||||||
|
|
||||||
|
It was downloaded from <URL:http://ipmitool.sourceforge.net/>
|
||||||
|
|
||||||
|
Upstream Author: Duncan Laurie <duncan@iceblink.org>
|
||||||
|
|
||||||
|
Copyright (c) 2003 Sun Microsystems, 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:
|
||||||
|
|
||||||
|
Redistribution of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
Redistribution 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.
|
||||||
|
|
||||||
|
Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
4
ipmitool/debian/dirs
Normal file
4
ipmitool/debian/dirs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
usr/bin
|
||||||
|
usr/sbin
|
||||||
|
usr/share/ipmitool
|
||||||
|
usr/share/doc/ipmitool
|
2
ipmitool/debian/docs
Normal file
2
ipmitool/debian/docs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
README
|
||||||
|
AUTHORS
|
99
ipmitool/debian/ipmitool.ipmievd.init
Normal file
99
ipmitool/debian/ipmitool.ipmievd.init
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: ipmievd
|
||||||
|
# Required-Start: $local_fs $remote_fs $syslog
|
||||||
|
# Required-Stop: $local_fs $remote_fs $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: S 0 1 6
|
||||||
|
# Short-Description: IPMI event daemon
|
||||||
|
# Description: ipmievd is a daemon which will listen for events
|
||||||
|
# from the BMC that are being sent to the SEL and
|
||||||
|
# also log those messages to syslog.
|
||||||
|
### END INIT INFO
|
||||||
|
#
|
||||||
|
# Author: Elmar Hoffmann <elho@elho.net>
|
||||||
|
# Licence: This script is public domain using the same
|
||||||
|
# licence as ipmitool itself.
|
||||||
|
# Modified by: Petter Reinholdtsen
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||||||
|
DESC="IPMI event daemon"
|
||||||
|
NAME=ipmievd
|
||||||
|
DAEMON=/usr/sbin/$NAME
|
||||||
|
PIDFILE=/var/run/$NAME.pid
|
||||||
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
|
||||||
|
# Gracefully exit if the package has been removed.
|
||||||
|
test -x $DAEMON || exit 0
|
||||||
|
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
. /etc/default/rcS
|
||||||
|
|
||||||
|
# Options used by ipmievd.
|
||||||
|
#
|
||||||
|
# "open" uses the asynchronous event notification from the OpenIPMI
|
||||||
|
# kernel driver, "sel" uses active polling of the contents of the SEL
|
||||||
|
# for new events.
|
||||||
|
#
|
||||||
|
# Need to force 'daemon' mode, to make sure messages are sent to
|
||||||
|
# syslog and the program forks into the background.
|
||||||
|
#
|
||||||
|
# Se ipmievd(8) for more info.
|
||||||
|
IPMIEVD_OPTIONS="open daemon"
|
||||||
|
|
||||||
|
# Read config file if it is present.
|
||||||
|
[ -f /etc/default/$NAME ] && . /etc/default/$NAME
|
||||||
|
|
||||||
|
# Backwards compatibility with version 1.8.6-2 and 1.8.6-1. The
|
||||||
|
# variable was renamed to be compatible with upstream, SuSe and RedHat.
|
||||||
|
if [ -n "$IPMIEVD_OPTS" ]; then
|
||||||
|
echo "warning: /etc/default/$NAME variable IPMIEVD_OPTS should be renamed to IPMIEVD_OPTIONS"
|
||||||
|
IPMIEVD_OPTIONS="$IPMIEVD_OPTS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that starts the daemon/service.
|
||||||
|
#
|
||||||
|
d_start() {
|
||||||
|
start-stop-daemon --start --quiet --exec $DAEMON -- $IPMIEVD_OPTIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that stops the daemon/service.
|
||||||
|
#
|
||||||
|
d_stop() {
|
||||||
|
start-stop-daemon --stop --quiet --name $NAME --exec $DAEMON
|
||||||
|
}
|
||||||
|
|
||||||
|
CODE=0
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
[ "$VERBOSE" != no ] && log_begin_msg "Starting $DESC" "$NAME"
|
||||||
|
d_start || CODE=$?
|
||||||
|
[ "$VERBOSE" != no ] && log_end_msg $CODE
|
||||||
|
exit $CODE
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
log_begin_msg "Stopping $DESC" "$NAME"
|
||||||
|
d_stop || CODE=$?
|
||||||
|
log_end_msg $CODE
|
||||||
|
exit $CODE
|
||||||
|
;;
|
||||||
|
restart|force-reload)
|
||||||
|
log_begin_msg "Restarting $DESC" "$NAME"
|
||||||
|
d_stop || true
|
||||||
|
sleep 1
|
||||||
|
d_start || CODE=$?
|
||||||
|
log_end_msg $CODE
|
||||||
|
exit $CODE
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
118
ipmitool/debian/rules
Executable file
118
ipmitool/debian/rules
Executable file
@ -0,0 +1,118 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
#export DH_VERBOSE=1
|
||||||
|
export DH_COMPAT=4
|
||||||
|
export DH_OPTIONS
|
||||||
|
|
||||||
|
CFLAGS = -Wall -g
|
||||||
|
|
||||||
|
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
|
||||||
|
CFLAGS += -O0
|
||||||
|
else
|
||||||
|
CFLAGS += -O2
|
||||||
|
endif
|
||||||
|
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
|
||||||
|
INSTALL_PROGRAM += -s
|
||||||
|
endif
|
||||||
|
|
||||||
|
configure: configure-stamp
|
||||||
|
configure-stamp:
|
||||||
|
dh_testdir
|
||||||
|
|
||||||
|
./bootstrap
|
||||||
|
|
||||||
|
./configure --prefix=/usr \
|
||||||
|
--with-kerneldir \
|
||||||
|
--mandir=/usr/share/man
|
||||||
|
touch configure-stamp
|
||||||
|
|
||||||
|
#Architecture
|
||||||
|
build: build-arch build-indep
|
||||||
|
|
||||||
|
build-arch: build-arch-stamp
|
||||||
|
build-arch-stamp: configure-stamp
|
||||||
|
|
||||||
|
# Add here commands to compile the arch part of the package.
|
||||||
|
$(MAKE)
|
||||||
|
|
||||||
|
build-indep: build-indep-stamp
|
||||||
|
build-indep-stamp: configure-stamp
|
||||||
|
|
||||||
|
# Add here commands to compile the indep part of the package.
|
||||||
|
#$(MAKE) doc
|
||||||
|
|
||||||
|
clean:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
rm -f build-arch-stamp build-indep-stamp configure-stamp
|
||||||
|
|
||||||
|
# Add here commands to clean up after the build process.
|
||||||
|
-$(MAKE) distclean
|
||||||
|
|
||||||
|
dh_clean
|
||||||
|
|
||||||
|
install: install-arch #install-indep
|
||||||
|
install-indep:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
dh_clean -k -i
|
||||||
|
dh_installdirs -i
|
||||||
|
|
||||||
|
# Add here commands to install the indep part of the package into
|
||||||
|
# debian/<package>-doc.
|
||||||
|
#INSTALLDOC#
|
||||||
|
# $(MAKE) install-doc DESTDIR=$(CURDIR)/debian/tmp/ipmitool-doc
|
||||||
|
# dh_movefiles -i
|
||||||
|
|
||||||
|
install-arch:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
dh_clean -k -a
|
||||||
|
dh_installdirs -a
|
||||||
|
|
||||||
|
# Add here commands to install the arch part of the package into
|
||||||
|
# debian/tmp.
|
||||||
|
$(MAKE) install DESTDIR=$(CURDIR)/debian/ipmitool
|
||||||
|
|
||||||
|
# No need to have two copies of the license text in the package.
|
||||||
|
$(RM) $(CURDIR)/debian/ipmitool/usr/share/doc/ipmitool/COPYING
|
||||||
|
|
||||||
|
# Move upstream changelog to correct filename.
|
||||||
|
mv $(CURDIR)/debian/ipmitool/usr/share/doc/ipmitool/ChangeLog \
|
||||||
|
$(CURDIR)/debian/ipmitool/usr/share/doc/ipmitool/changelog
|
||||||
|
|
||||||
|
# Compress to avoid lintian warning. Not sure why dh_compress
|
||||||
|
# isn't fixing this.
|
||||||
|
gzip -9 $(CURDIR)/debian/ipmitool/usr/share/doc/ipmitool/changelog
|
||||||
|
|
||||||
|
# dh_movefiles -a
|
||||||
|
# Must not depend on anything. This is to be called by
|
||||||
|
# binary-arch/binary-multi
|
||||||
|
# in another 'make' thread.
|
||||||
|
binary-common:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
dh_installdocs
|
||||||
|
dh_installchangelogs
|
||||||
|
dh_installinit --name ipmievd
|
||||||
|
dh_link
|
||||||
|
dh_strip
|
||||||
|
dh_compress
|
||||||
|
dh_fixperms
|
||||||
|
dh_makeshlibs
|
||||||
|
dh_shlibdeps
|
||||||
|
dh_installdeb
|
||||||
|
dh_gencontrol
|
||||||
|
dh_md5sums
|
||||||
|
dh_builddeb
|
||||||
|
# Build architecture independant packages using the common target.
|
||||||
|
binary-indep: build-indep install-indep
|
||||||
|
$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
|
||||||
|
|
||||||
|
# Build architecture dependant packages using the common target.
|
||||||
|
binary-arch: build-arch install-arch
|
||||||
|
$(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
|
||||||
|
|
||||||
|
binary: binary-arch #binary-indep
|
||||||
|
.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure
|
||||||
|
|
6
ipmitool/debian/watch
Normal file
6
ipmitool/debian/watch
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Rename this file to "watch" and then you can run the "uscan" command
|
||||||
|
# to check for upstream updates and more.
|
||||||
|
# Site Directory Pattern Version Script
|
||||||
|
version=2
|
||||||
|
http://heanet.dl.sourceforge.net/sourceforge/ipmitool/ipmitool-(.*).tar.bz2
|
||||||
|
# debian uupdate
|
@ -154,6 +154,9 @@ Set the local IPMB address. The local address defaults to 0x20
|
|||||||
or is auto discovered on PICMG platforms when -m is not specified.
|
or is auto discovered on PICMG platforms when -m is not specified.
|
||||||
There should be no need to change the local address for normal operation.
|
There should be no need to change the local address for normal operation.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-M\fR <\fIaddress\fP>
|
||||||
|
Set transit local address for bridge request. (dual bridge)
|
||||||
|
.TP
|
||||||
\fB\-N\fR <\fIsec\fP>
|
\fB\-N\fR <\fIsec\fP>
|
||||||
Specify nr. of seconds between retransmissions of lan/lanplus messages.
|
Specify nr. of seconds between retransmissions of lan/lanplus messages.
|
||||||
Defaults are 2 seconds for lan and 1 second for lanplus interfaces.
|
Defaults are 2 seconds for lan and 1 second for lanplus interfaces.
|
||||||
@ -2306,16 +2309,14 @@ Get boot parameter. Currently supported values for <\fBparam #\fR> are:
|
|||||||
.br
|
.br
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fIset\fP <\fBdevice\fR> [<\fIoptions\fP=\fBhelp,...\fR>]
|
\fIset\fP <\fBoption\fR> [\fBvalue ...\fR]
|
||||||
.br
|
.br
|
||||||
|
|
||||||
Set boot device parameter used for next boot. Various options may be used
|
Set boot parameter.
|
||||||
to change when the the next boot device is cleared.
|
|
||||||
Run \fI"options=help"\fP for a list of available bootparam set device options.
|
|
||||||
|
|
||||||
.RS
|
.RS
|
||||||
.TP
|
.TP
|
||||||
Currently supported bootparam \fBdevice\fR settings are:
|
Currently supported values for \fB<option>\fR are:
|
||||||
.TP
|
.TP
|
||||||
\fIforce_pxe\fP
|
\fIforce_pxe\fP
|
||||||
.br
|
.br
|
||||||
@ -2347,37 +2348,6 @@ Force boot from CD/DVD
|
|||||||
|
|
||||||
Force boot into BIOS setup
|
Force boot into BIOS setup
|
||||||
|
|
||||||
.RE
|
|
||||||
.RS
|
|
||||||
.TP
|
|
||||||
Currently supported bootparam \fBoptions\fR settings are associated with BMC Boot Valid Bit Clearing and are as follows: Any option can be prefixed with "no-" to invert the sense of the operation.
|
|
||||||
.TP
|
|
||||||
\fIPEF\fP
|
|
||||||
.br
|
|
||||||
|
|
||||||
Clear valid bit on reset/power cycle caused by PEF
|
|
||||||
.TP
|
|
||||||
\fItimeout\fP
|
|
||||||
.br
|
|
||||||
|
|
||||||
Automatically clear boot flag valid bit if Chassis Control command is
|
|
||||||
not received within 60 seconds.
|
|
||||||
.TP
|
|
||||||
\fIwatchdog\fP
|
|
||||||
.br
|
|
||||||
|
|
||||||
Clear valid bit on reset/power cycle caused by watchdog timeout
|
|
||||||
.TP
|
|
||||||
\fIreset\fP
|
|
||||||
.br
|
|
||||||
|
|
||||||
Clear valid bit on push button reset / soft-reset
|
|
||||||
.TP
|
|
||||||
\fIpower\fP
|
|
||||||
.br
|
|
||||||
|
|
||||||
Clear valid bit on power up via power push button or wake event
|
|
||||||
|
|
||||||
.RE
|
.RE
|
||||||
.RE
|
.RE
|
||||||
.RE
|
.RE
|
||||||
@ -2976,15 +2946,6 @@ I2C Master Write\-Read IPMI command.
|
|||||||
\fIsunoem\fP
|
\fIsunoem\fP
|
||||||
.RS
|
.RS
|
||||||
.TP
|
.TP
|
||||||
\fIcli\fP [<\fBcommand string\fR> ...]
|
|
||||||
.br
|
|
||||||
|
|
||||||
Execute the service processor command line interface commands.
|
|
||||||
Without any command string, an interactive session is started
|
|
||||||
in the service processor command line environ ment. If a
|
|
||||||
command string is specified, the command string is executed
|
|
||||||
on the service processor and the connection is closed.
|
|
||||||
.TP
|
|
||||||
\fIled\fP
|
\fIled\fP
|
||||||
.RS
|
.RS
|
||||||
|
|
||||||
@ -3030,28 +2991,10 @@ LED Type is optional:
|
|||||||
|
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
\fInacname\fP <\fBipmi name\fR>
|
\fIfan\fP \fIspeed\fP <0-100>
|
||||||
.br
|
|
||||||
|
|
||||||
Return the full NAC name of a target identified by ipmi name.
|
Set system fan speed (PWM duty cycle).
|
||||||
.TP
|
.RS
|
||||||
\fIping\fP <\fBcount\fR> [<\fBq\fR>]
|
|
||||||
.br
|
|
||||||
|
|
||||||
Send and receive count packets. Each packet is 64 bytes.
|
|
||||||
|
|
||||||
q - Quiet. Displays output only at the start and end of the process.
|
|
||||||
.TP
|
|
||||||
\fIgetval\fP <\fBproperty name\fR>
|
|
||||||
.br
|
|
||||||
|
|
||||||
Returns value of specified ILOM property.
|
|
||||||
.TP
|
|
||||||
\fIsetval\fP <\fBproperty name\fR> <\fBproperty value\fR> [<\fBtimeout\fR>]
|
|
||||||
.br
|
|
||||||
|
|
||||||
Sets value of ILOM property. If timeout is not specified, the
|
|
||||||
default value is 5 seconds. NOTE: setval must be executed locally on host!
|
|
||||||
.TP
|
.TP
|
||||||
\fIsshkey\fP
|
\fIsshkey\fP
|
||||||
.RS
|
.RS
|
||||||
@ -3067,65 +3010,9 @@ with the 'user list' command.
|
|||||||
|
|
||||||
This command will delete the SSH key for a specified userid.
|
This command will delete the SSH key for a specified userid.
|
||||||
.RE
|
.RE
|
||||||
.TP
|
|
||||||
\fIversion\fP
|
|
||||||
.br
|
|
||||||
|
|
||||||
Display the version of ILOM firmware.
|
|
||||||
.TP
|
|
||||||
\fIgetfile\fP <\fBfile identifier\fR> <\fBdestination file name\fR>
|
|
||||||
.br
|
|
||||||
|
|
||||||
This command will return various files from service processor and store them
|
|
||||||
in specified destination file. Note that some files may not be present or
|
|
||||||
be supported by your SP.
|
|
||||||
.br
|
|
||||||
|
|
||||||
.RS
|
|
||||||
File identifiers:
|
|
||||||
.RS
|
|
||||||
.br
|
|
||||||
\fISSH_PUBKEYS\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_PASSED\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_FAILED\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_END_TIME\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_INVENTORY\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_TEST_LOG\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_START_TIME\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_UEFI_LOG\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_TEST_LOG\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_LAST_LOG\fP
|
|
||||||
.br
|
|
||||||
\fIDIAG_LAST_CMD\fP
|
|
||||||
.RE
|
.RE
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.TP
|
|
||||||
\fIgetbehavior\fP <\fBfeature identifier\fR>
|
|
||||||
.br
|
|
||||||
|
|
||||||
This command will test if various ILOM features are enabled.
|
|
||||||
.br
|
|
||||||
|
|
||||||
.RS
|
|
||||||
Feature identifiers:
|
|
||||||
.RS
|
|
||||||
.br
|
|
||||||
\fISUPPORTS_SIGNED_PACKAGES\fP
|
|
||||||
.br
|
|
||||||
\fIREQUIRES_SIGNED_PACKAGES\fP
|
|
||||||
.RE
|
|
||||||
.RE
|
|
||||||
.RE
|
|
||||||
.TP
|
.TP
|
||||||
\fItsol\fP
|
\fItsol\fP
|
||||||
.RS
|
.RS
|
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
noinst_HEADERS = log.h bswap.h hpm2.h helper.h ipmi.h ipmi_cc.h ipmi_intf.h \
|
noinst_HEADERS = log.h bswap.h helper.h ipmi.h ipmi_cc.h ipmi_intf.h \
|
||||||
ipmi_chassis.h ipmi_entity.h ipmi_fru.h ipmi_hpmfwupg.h ipmi_lanp.h \
|
ipmi_chassis.h ipmi_entity.h ipmi_fru.h ipmi_hpmfwupg.h ipmi_lanp.h \
|
||||||
ipmi_sdr.h ipmi_sel.h ipmi_sol.h ipmi_mc.h ipmi_raw.h \
|
ipmi_sdr.h ipmi_sel.h ipmi_sol.h ipmi_mc.h ipmi_raw.h \
|
||||||
ipmi_channel.h ipmi_sensor.h ipmi_event.h ipmi_session.h \
|
ipmi_channel.h ipmi_sensor.h ipmi_event.h ipmi_session.h \
|
@ -99,7 +99,6 @@ void printbuf(const uint8_t * buf, int len, const char * desc);
|
|||||||
uint8_t ipmi_csum(uint8_t * d, int s);
|
uint8_t ipmi_csum(uint8_t * d, int s);
|
||||||
FILE * ipmi_open_file(const char * file, int rw);
|
FILE * ipmi_open_file(const char * file, int rw);
|
||||||
void ipmi_start_daemon(struct ipmi_intf *intf);
|
void ipmi_start_daemon(struct ipmi_intf *intf);
|
||||||
uint16_t ipmi_get_oem_id(struct ipmi_intf *intf);
|
|
||||||
|
|
||||||
#define ipmi_open_file_read(file) ipmi_open_file(file, 0)
|
#define ipmi_open_file_read(file) ipmi_open_file(file, 0)
|
||||||
#define ipmi_open_file_write(file) ipmi_open_file(file, 1)
|
#define ipmi_open_file_write(file) ipmi_open_file(file, 1)
|
@ -281,8 +281,7 @@ typedef enum IPMI_OEM {
|
|||||||
IPMI_OEM_KONTRON = 15000,
|
IPMI_OEM_KONTRON = 15000,
|
||||||
IPMI_OEM_PPS = 16394,
|
IPMI_OEM_PPS = 16394,
|
||||||
IPMI_OEM_AMI = 20974,
|
IPMI_OEM_AMI = 20974,
|
||||||
IPMI_OEM_NOKIA_SIEMENS_NETWORKS = 28458,
|
IPMI_OEM_NOKIA_SIEMENS_NETWORKS = 28458
|
||||||
IPMI_OEM_SUPERMICRO_47488 = 47488
|
|
||||||
} IPMI_OEM;
|
} IPMI_OEM;
|
||||||
|
|
||||||
extern const struct valstr completion_code_vals[];
|
extern const struct valstr completion_code_vals[];
|
@ -72,7 +72,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#define IDRAC_11G 1
|
#define IDRAC_11G 1
|
||||||
#define IDRAC_12G 2
|
#define IDRAC_12G 2
|
||||||
#define IDRAC_13G 3
|
|
||||||
// Return Error code for license
|
// Return Error code for license
|
||||||
#define LICENSE_NOT_SUPPORTED 0x6F
|
#define LICENSE_NOT_SUPPORTED 0x6F
|
||||||
#define VFL_NOT_LICENSED 0x33
|
#define VFL_NOT_LICENSED 0x33
|
||||||
@ -185,9 +184,6 @@ typedef struct _lcd_mode
|
|||||||
#define IMC_IDRAC_12G_MONOLITHIC (uint8_t) (0x10)
|
#define IMC_IDRAC_12G_MONOLITHIC (uint8_t) (0x10)
|
||||||
#define IMC_IDRAC_12G_MODULAR (uint8_t) (0x11)
|
#define IMC_IDRAC_12G_MODULAR (uint8_t) (0x11)
|
||||||
|
|
||||||
#define IMC_IDRAC_13G_MONOLITHIC (uint8_t) (0x20)
|
|
||||||
#define IMC_IDRAC_13G_MODULAR (uint8_t) (0x21)
|
|
||||||
#define IMC_IDRAC_13G_DCS (uint8_t) (0x22)
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
@ -63,8 +63,6 @@ enum {
|
|||||||
struct fru_info {
|
struct fru_info {
|
||||||
uint16_t size;
|
uint16_t size;
|
||||||
uint8_t access:1;
|
uint8_t access:1;
|
||||||
uint8_t max_read_size;
|
|
||||||
uint8_t max_write_size;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
@ -72,7 +70,6 @@ struct fru_info {
|
|||||||
#endif
|
#endif
|
||||||
struct fru_header {
|
struct fru_header {
|
||||||
uint8_t version;
|
uint8_t version;
|
||||||
union {
|
|
||||||
struct {
|
struct {
|
||||||
uint8_t internal;
|
uint8_t internal;
|
||||||
uint8_t chassis;
|
uint8_t chassis;
|
||||||
@ -80,8 +77,6 @@ struct fru_header {
|
|||||||
uint8_t product;
|
uint8_t product;
|
||||||
uint8_t multi;
|
uint8_t multi;
|
||||||
} offset;
|
} offset;
|
||||||
uint8_t offsets[5];
|
|
||||||
};
|
|
||||||
uint8_t pad;
|
uint8_t pad;
|
||||||
uint8_t checksum;
|
uint8_t checksum;
|
||||||
}ATTRIBUTE_PACKING;
|
}ATTRIBUTE_PACKING;
|
||||||
@ -603,20 +598,6 @@ static const char * chassis_type_desc[] __attribute__((unused)) = {
|
|||||||
"AdvancedTCA", "Blade", "Blade Enclosure"
|
"AdvancedTCA", "Blade", "Blade Enclosure"
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct ipmi_fru_bloc {
|
|
||||||
struct ipmi_fru_bloc * next;
|
|
||||||
uint16_t start;
|
|
||||||
uint16_t size;
|
|
||||||
uint8_t blocId[32];
|
|
||||||
} t_ipmi_fru_bloc;
|
|
||||||
|
|
||||||
static const char *section_id[4] = {
|
|
||||||
"Internal Use Section",
|
|
||||||
"Chassis Section",
|
|
||||||
"Board Section",
|
|
||||||
"Product Section"
|
|
||||||
};
|
|
||||||
|
|
||||||
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
|
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
|
||||||
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
|
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
|
||||||
|
|
42
ipmitool/include/ipmitool/ipmi_fwum.h
Normal file
42
ipmitool/include/ipmitool/ipmi_fwum.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, 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:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution 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.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef IPMI_KFWUM_H
|
||||||
|
#define IPMI_KFWUM_H
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
|
||||||
|
int ipmi_fwum_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
|
#endif /* IPMI_KFWUM_H */
|
41
ipmitool/include/ipmitool/ipmi_hpmfwupg.h
Normal file
41
ipmitool/include/ipmitool/ipmi_hpmfwupg.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, 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:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution 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.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef IPMI_HPMFWUPG_H
|
||||||
|
#define IPMI_HPMFWUPG_H
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
|
||||||
|
int ipmi_hpmfwupg_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
|
#endif /* IPMI_KFWUM_H */
|
@ -63,7 +63,7 @@ enum LANPLUS_SESSION_STATE {
|
|||||||
#define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */
|
#define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */
|
||||||
|
|
||||||
struct ipmi_session {
|
struct ipmi_session {
|
||||||
char *hostname; /* Numeric IP adress or DNS name - see RFC 1034/RFC 1035 */
|
uint8_t hostname[64];
|
||||||
uint8_t username[17];
|
uint8_t username[17];
|
||||||
uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1];
|
uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1];
|
||||||
uint8_t challenge[16];
|
uint8_t challenge[16];
|
||||||
@ -89,9 +89,8 @@ struct ipmi_session {
|
|||||||
uint32_t out_seq;
|
uint32_t out_seq;
|
||||||
uint32_t timeout;
|
uint32_t timeout;
|
||||||
|
|
||||||
struct sockaddr_storage addr;
|
struct sockaddr_in addr;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
int ai_family; /* Protocol family for socket. */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This struct holds state data specific to IPMI v2 / RMCP+ sessions
|
* This struct holds state data specific to IPMI v2 / RMCP+ sessions
|
||||||
@ -180,8 +179,7 @@ struct ipmi_intf {
|
|||||||
uint8_t target_channel;
|
uint8_t target_channel;
|
||||||
uint32_t transit_addr;
|
uint32_t transit_addr;
|
||||||
uint8_t transit_channel;
|
uint8_t transit_channel;
|
||||||
uint16_t max_request_data_size;
|
uint8_t channel_buf_size;
|
||||||
uint16_t max_response_data_size;
|
|
||||||
|
|
||||||
uint8_t devnum;
|
uint8_t devnum;
|
||||||
|
|
||||||
@ -194,8 +192,6 @@ struct ipmi_intf {
|
|||||||
struct ipmi_rs *(*send_sol)(struct ipmi_intf * intf, struct ipmi_v2_payload * payload);
|
struct ipmi_rs *(*send_sol)(struct ipmi_intf * intf, struct ipmi_v2_payload * payload);
|
||||||
int (*keepalive)(struct ipmi_intf * intf);
|
int (*keepalive)(struct ipmi_intf * intf);
|
||||||
int (*set_my_addr)(struct ipmi_intf * intf, uint8_t addr);
|
int (*set_my_addr)(struct ipmi_intf * intf, uint8_t addr);
|
||||||
void (*set_max_request_data_size)(struct ipmi_intf * intf, uint16_t size);
|
|
||||||
void (*set_max_response_data_size)(struct ipmi_intf * intf, uint16_t size);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ipmi_intf * ipmi_intf_load(char * name);
|
struct ipmi_intf * ipmi_intf_load(char * name);
|
||||||
@ -213,10 +209,6 @@ void ipmi_intf_session_set_port(struct ipmi_intf * intf, int port);
|
|||||||
void ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype);
|
void ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype);
|
||||||
void ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout);
|
void ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout);
|
||||||
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry);
|
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry);
|
||||||
void ipmi_intf_session_cleanup(struct ipmi_intf *intf);
|
|
||||||
void ipmi_cleanup(struct ipmi_intf * intf);
|
void ipmi_cleanup(struct ipmi_intf * intf);
|
||||||
|
|
||||||
#if defined(IPMI_INTF_LAN) || defined (IPMI_INTF_LANPLUS)
|
|
||||||
int ipmi_intf_socket_connect(struct ipmi_intf * intf);
|
|
||||||
#endif
|
|
||||||
#endif /* IPMI_INTF_H */
|
#endif /* IPMI_INTF_H */
|
@ -102,6 +102,8 @@ enum {
|
|||||||
#define GET_SENSOR_EVENT_STATUS 0x2b
|
#define GET_SENSOR_EVENT_STATUS 0x2b
|
||||||
#define GET_SENSOR_READING 0x2d
|
#define GET_SENSOR_READING 0x2d
|
||||||
#define GET_SENSOR_TYPE 0x2f
|
#define GET_SENSOR_TYPE 0x2f
|
||||||
|
#define GET_SENSOR_READING 0x2d
|
||||||
|
#define GET_SENSOR_TYPE 0x2f
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
@ -107,7 +107,6 @@ struct standard_spec_sel_rec{
|
|||||||
#define SENSOR_TYPE_OEM_NFATAL_ERROR 0xC2
|
#define SENSOR_TYPE_OEM_NFATAL_ERROR 0xC2
|
||||||
#define SENSOR_TYPE_OEM_FATAL_ERROR 0xC3
|
#define SENSOR_TYPE_OEM_FATAL_ERROR 0xC3
|
||||||
#define SENSOR_TYPE_TXT_CMD_ERROR 0x20
|
#define SENSOR_TYPE_TXT_CMD_ERROR 0x20
|
||||||
#define SENSOR_TYPE_SUPERMICRO_OEM 0xD0
|
|
||||||
/* End of Macro for DELL Specific */
|
/* End of Macro for DELL Specific */
|
||||||
#define SEL_OEM_TS_DATA_LEN 6
|
#define SEL_OEM_TS_DATA_LEN 6
|
||||||
#define SEL_OEM_NOTS_DATA_LEN 13
|
#define SEL_OEM_NOTS_DATA_LEN 13
|
||||||
@ -327,8 +326,6 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x07, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Disabled" },
|
{ 0x07, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Disabled" },
|
||||||
{ 0x07, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Terminator presence detected" },
|
{ 0x07, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Terminator presence detected" },
|
||||||
{ 0x07, 0x0a, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Throttled" },
|
{ 0x07, 0x0a, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Throttled" },
|
||||||
{ 0x07, 0x0b, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Uncorrectable machine check exception" },
|
|
||||||
{ 0x07, 0x0c, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Processor", "Correctable machine check error" },
|
|
||||||
|
|
||||||
{ 0x08, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Presence detected" },
|
{ 0x08, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Presence detected" },
|
||||||
{ 0x08, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Failure detected" },
|
{ 0x08, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Failure detected" },
|
||||||
@ -339,10 +336,7 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x08, 0x06, 0x00, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Vendor Mismatch" },
|
{ 0x08, 0x06, 0x00, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Vendor Mismatch" },
|
||||||
{ 0x08, 0x06, 0x01, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Revision Mismatch" },
|
{ 0x08, 0x06, 0x01, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Revision Mismatch" },
|
||||||
{ 0x08, 0x06, 0x02, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Processor Missing" },
|
{ 0x08, 0x06, 0x02, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Processor Missing" },
|
||||||
{ 0x08, 0x06, 0x03, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Power Supply Rating Mismatch" },
|
|
||||||
{ 0x08, 0x06, 0x04, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error: Voltage Rating Mismatch" },
|
|
||||||
{ 0x08, 0x06, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error" },
|
{ 0x08, 0x06, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Config Error" },
|
||||||
{ 0x08, 0x06, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Supply", "Power Supply Inactive" },
|
|
||||||
|
|
||||||
{ 0x09, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Unit", "Power off/down" },
|
{ 0x09, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Unit", "Power off/down" },
|
||||||
{ 0x09, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Unit", "Power cycle" },
|
{ 0x09, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Power Unit", "Power cycle" },
|
||||||
@ -366,7 +360,6 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x0c, 0x07, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Configuration Error" },
|
{ 0x0c, 0x07, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Configuration Error" },
|
||||||
{ 0x0c, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Spare" },
|
{ 0x0c, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Spare" },
|
||||||
{ 0x0c, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Throttled" },
|
{ 0x0c, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Throttled" },
|
||||||
{ 0x0c, 0x0a, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Memory", "Critical Overtemperature" },
|
|
||||||
|
|
||||||
{ 0x0d, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Drive Slot", "Drive Present" },
|
{ 0x0d, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Drive Slot", "Drive Present" },
|
||||||
{ 0x0d, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Drive Slot", "Drive Fault" },
|
{ 0x0d, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Drive Slot", "Drive Fault" },
|
||||||
@ -486,7 +479,6 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x13, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Bus Uncorrectable error" },
|
{ 0x13, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Bus Uncorrectable error" },
|
||||||
{ 0x13, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Fatal NMI" },
|
{ 0x13, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Fatal NMI" },
|
||||||
{ 0x13, 0x0a, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Bus Fatal Error" },
|
{ 0x13, 0x0a, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Bus Fatal Error" },
|
||||||
{ 0x13, 0x0b, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Critical Interrupt", "Bus Degraded" },
|
|
||||||
|
|
||||||
{ 0x14, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Button", "Power Button pressed" },
|
{ 0x14, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Button", "Power Button pressed" },
|
||||||
{ 0x14, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Button", "Sleep Button pressed" },
|
{ 0x14, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Button", "Sleep Button pressed" },
|
||||||
@ -499,7 +491,6 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x17, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Add-in Card", NULL },
|
{ 0x17, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Add-in Card", NULL },
|
||||||
{ 0x18, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Chassis", NULL },
|
{ 0x18, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Chassis", NULL },
|
||||||
{ 0x19, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Chip Set", NULL },
|
{ 0x19, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Chip Set", NULL },
|
||||||
{ 0x19, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Chip Set", "Thermal Trip" },
|
|
||||||
{ 0x1a, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Other FRU", NULL },
|
{ 0x1a, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Other FRU", NULL },
|
||||||
|
|
||||||
{ 0x1b, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Cable/Interconnect", "Connected" },
|
{ 0x1b, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "Cable/Interconnect", "Connected" },
|
||||||
@ -529,10 +520,6 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x1f, 0x04, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "CD-ROM boot completed" },
|
{ 0x1f, 0x04, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "CD-ROM boot completed" },
|
||||||
{ 0x1f, 0x05, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "ROM boot completed" },
|
{ 0x1f, 0x05, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "ROM boot completed" },
|
||||||
{ 0x1f, 0x06, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "boot completed - device not specified" },
|
{ 0x1f, 0x06, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "boot completed - device not specified" },
|
||||||
{ 0x1f, 0x07, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "Installation started" },
|
|
||||||
{ 0x1f, 0x08, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "Installation completed" },
|
|
||||||
{ 0x1f, 0x09, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "Installation aborted" },
|
|
||||||
{ 0x1f, 0x0a, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Boot", "Installation failed" },
|
|
||||||
|
|
||||||
{ 0x20, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Stop/Shutdown", "Error during system startup" },
|
{ 0x20, 0x00, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Stop/Shutdown", "Error during system startup" },
|
||||||
{ 0x20, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Stop/Shutdown", "Run-time critical stop" },
|
{ 0x20, 0x01, 0xff, IPMI_EVENT_CLASS_DISCRETE, "OS Stop/Shutdown", "Run-time critical stop" },
|
||||||
@ -689,56 +676,6 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
|
|||||||
{ 0x00, 0x00, 0x00, 0x00, NULL, NULL },
|
{ 0x00, 0x00, 0x00, 0x00, NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint16_t supermicro_x9dal[] = {
|
|
||||||
0x0635
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_x9db[] = {
|
|
||||||
0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_x9sb[] = {
|
|
||||||
0x0651
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_x9[] = {
|
|
||||||
0x0635, 0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637, 0x0651
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_b8[] = {
|
|
||||||
0x000A, 0x061c, 0x0620, 0x0101, 0x061f, 0x0612, 0x061e
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_h8[] = {
|
|
||||||
0xa111, 0x0408, 0x0811, 0x1411, 0x0911, 0x1211, 0x1011, 0xcd11, 0x1111, 0xbe11, 0xce11, 0xbd11,
|
|
||||||
0xbc11, 0xa911, 0xaa11, 0xbd11, 0xcb11, 0xad11, 0xa811, 0xac11, 0xaf11, 0xa511, 0xa011, 0x1611,
|
|
||||||
0x2511, 0xbf11, 0x1511, 0x2211, 0x2411, 0x1911, 0xab11, 0xd011, 0xae11, 0xca11, 0x0409, 0xa211,
|
|
||||||
0xa311, 0x1311, 0xba11, 0xa711, 0xd111, 0x1711, 0xcf11, 0x2011, 0x1811
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_p8[] = {
|
|
||||||
0x6480, 0x7380, 0x6280, 0x7480, 0x5980
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_x8[] = {
|
|
||||||
0xa880, 0x0403, 0x0100, 0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006,
|
|
||||||
0x040a, 0xf280, 0x060f, 0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614,
|
|
||||||
0x060c, 0x0003, 0x040b, 0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e,
|
|
||||||
0x061a, 0xf580, 0x062e, 0x0009
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint16_t supermicro_X8[] = {
|
|
||||||
0x000A, 0x061c, 0x0620, 0x0101, 0x061f, 0x0612, 0x061e, 0xa111, 0x0408, 0x0811, 0x1411, 0x0911,
|
|
||||||
0x1211, 0x1011, 0xcd11, 0x1111, 0xbe11, 0xce11, 0xbd11, 0xbc11, 0xa911, 0xaa11, 0xbd11, 0xcb11,
|
|
||||||
0xad11, 0xa811, 0xac11, 0xaf11, 0xa511, 0xa011, 0x1611, 0x2511, 0xbf11, 0x1511, 0x2211, 0x2411,
|
|
||||||
0x1911, 0xab11, 0xd011, 0xae11, 0xca11, 0x0409, 0xa211, 0xa311, 0x1311, 0xba11, 0xa711, 0xd111,
|
|
||||||
0x1711, 0xcf11, 0x2011, 0x1811, 0x6480, 0x7380, 0x6280, 0x7480, 0x5980, 0xa880, 0x0403, 0x0100,
|
|
||||||
0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006, 0x040a, 0xf280, 0x060f,
|
|
||||||
0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614, 0x060c, 0x0003, 0x040b,
|
|
||||||
0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e, 0x061a, 0xf580, 0x062e,
|
|
||||||
0x0009
|
|
||||||
};
|
|
||||||
|
|
||||||
int ipmi_sel_main(struct ipmi_intf *, int, char **);
|
int ipmi_sel_main(struct ipmi_intf *, int, char **);
|
||||||
void ipmi_sel_print_std_entry(struct ipmi_intf * intf, struct sel_event_record * evt);
|
void ipmi_sel_print_std_entry(struct ipmi_intf * intf, struct sel_event_record * evt);
|
||||||
void ipmi_sel_print_std_entry_verbose(struct ipmi_intf * intf, struct sel_event_record * evt);
|
void ipmi_sel_print_std_entry_verbose(struct ipmi_intf * intf, struct sel_event_record * evt);
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@ -44,30 +44,14 @@
|
|||||||
#define IPMI_SUNOEM_SET_SSH_KEY 0x01
|
#define IPMI_SUNOEM_SET_SSH_KEY 0x01
|
||||||
#define IPMI_SUNOEM_DEL_SSH_KEY 0x02
|
#define IPMI_SUNOEM_DEL_SSH_KEY 0x02
|
||||||
#define IPMI_SUNOEM_GET_HEALTH_STATUS 0x10
|
#define IPMI_SUNOEM_GET_HEALTH_STATUS 0x10
|
||||||
#define IPMI_SUNOEM_CLI 0x19
|
|
||||||
#define IPMI_SUNOEM_SET_FAN_SPEED 0x20
|
#define IPMI_SUNOEM_SET_FAN_SPEED 0x20
|
||||||
#define IPMI_SUNOEM_LED_GET 0x21
|
#define IPMI_SUNOEM_LED_GET 0x21
|
||||||
#define IPMI_SUNOEM_LED_SET 0x22
|
#define IPMI_SUNOEM_LED_SET 0x22
|
||||||
#define IPMI_SUNOEM_ECHO 0x23
|
|
||||||
#define IPMI_SUNOEM_VERSION 0x24
|
|
||||||
#define IPMI_SUNOEM_NACNAME 0x29
|
|
||||||
#define IPMI_SUNOEM_GETVAL 0x2A
|
|
||||||
#define IPMI_SUNOEM_SETVAL 0x2C
|
|
||||||
#define IPMI_SUNOEM_SENSOR_SET 0x3A
|
|
||||||
#define IPMI_SUNOEM_SET_FAN_MODE 0x41
|
|
||||||
#define IPMI_SUNOEM_CORE_TUNNEL 0x44
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Error codes of sunoem functions
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
SUNOEM_EC_SUCCESS = 0,
|
|
||||||
SUNOEM_EC_INVALID_ARG = 1,
|
|
||||||
SUNOEM_EC_BMC_NOT_RESPONDING = 2,
|
|
||||||
SUNOEM_EC_BMC_CCODE_NONZERO = 3
|
|
||||||
} sunoem_ec_t;
|
|
||||||
|
|
||||||
int ipmi_sunoem_main(struct ipmi_intf *, int, char **);
|
int ipmi_sunoem_main(struct ipmi_intf *, int, char **);
|
||||||
|
|
||||||
|
struct ipmi_rs * sunoem_led_get(struct ipmi_intf * intf, struct sdr_record_generic_locator * dev, int ledtype);
|
||||||
|
struct ipmi_rs * sunoem_led_set(struct ipmi_intf * intf, struct sdr_record_generic_locator * dev, int ledtype, int ledmode);
|
||||||
|
|
||||||
#endif /*IPMI_SUNOEM_H*/
|
#endif /*IPMI_SUNOEM_H*/
|
||||||
|
|
@ -39,7 +39,7 @@ libipmitool_la_SOURCES = helper.c ipmi_sdr.c ipmi_sel.c ipmi_sol.c ipmi_pef.c \
|
|||||||
ipmi_oem.c ipmi_isol.c ipmi_sunoem.c ipmi_fwum.c ipmi_picmg.c \
|
ipmi_oem.c ipmi_isol.c ipmi_sunoem.c ipmi_fwum.c ipmi_picmg.c \
|
||||||
ipmi_main.c ipmi_tsol.c ipmi_firewall.c ipmi_kontronoem.c \
|
ipmi_main.c ipmi_tsol.c ipmi_firewall.c ipmi_kontronoem.c \
|
||||||
ipmi_hpmfwupg.c ipmi_sdradd.c ipmi_ekanalyzer.c ipmi_gendev.c \
|
ipmi_hpmfwupg.c ipmi_sdradd.c ipmi_ekanalyzer.c ipmi_gendev.c \
|
||||||
ipmi_ime.c ipmi_delloem.c ipmi_dcmi.c hpm2.c \
|
ipmi_ime.c ipmi_delloem.c ipmi_dcmi.c \
|
||||||
../src/plugins/lan/md5.c ../src/plugins/lan/md5.h
|
../src/plugins/lan/md5.c ../src/plugins/lan/md5.h
|
||||||
|
|
||||||
libipmitool_la_LDFLAGS = -export-dynamic
|
libipmitool_la_LDFLAGS = -export-dynamic
|
@ -63,7 +63,6 @@ const struct valstr spd_memtype_vals[] = {
|
|||||||
{ 0x09, "DDR2 SDRAM FB-DIMM" },
|
{ 0x09, "DDR2 SDRAM FB-DIMM" },
|
||||||
{ 0x0A, "DDR2 SDRAM FB-DIMM Probe" },
|
{ 0x0A, "DDR2 SDRAM FB-DIMM Probe" },
|
||||||
{ 0x0B, "DDR3 SDRAM" },
|
{ 0x0B, "DDR3 SDRAM" },
|
||||||
{ 0x0C, "DDR4 SDRAM" },
|
|
||||||
{ 0x00, NULL },
|
{ 0x00, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -88,8 +87,6 @@ const struct valstr ddr3_banks_vals[] =
|
|||||||
{ 0x00, NULL },
|
{ 0x00, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define ddr4_ecc_vals ddr3_ecc_vals
|
|
||||||
const struct valstr ddr3_ecc_vals[] =
|
const struct valstr ddr3_ecc_vals[] =
|
||||||
{
|
{
|
||||||
{ 0, "0 bits" },
|
{ 0, "0 bits" },
|
||||||
@ -97,62 +94,6 @@ const struct valstr ddr3_ecc_vals[] =
|
|||||||
{ 0x00, NULL },
|
{ 0x00, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct valstr ddr4_density_vals[] =
|
|
||||||
{
|
|
||||||
{ 0, "256 Mb" },
|
|
||||||
{ 1, "512 Mb" },
|
|
||||||
{ 2, "1 Gb" },
|
|
||||||
{ 3, "2 Gb" },
|
|
||||||
{ 4, "4 Gb" },
|
|
||||||
{ 5, "8 Gb" },
|
|
||||||
{ 6, "16 Gb" },
|
|
||||||
{ 7, "32 Gb" },
|
|
||||||
{ 0x00, NULL },
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct valstr ddr4_banks_vals[] =
|
|
||||||
{
|
|
||||||
{ 0, "2 (4 Banks)" },
|
|
||||||
{ 1, "3 (8 Banks)" },
|
|
||||||
{ 0x00, NULL },
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct valstr ddr4_bank_groups[] =
|
|
||||||
{
|
|
||||||
{ 0, "0 (no Bank Groups)" },
|
|
||||||
{ 1, "1 (2 Bank Groups)" },
|
|
||||||
{ 2, "2 (4 Bank Groups)" },
|
|
||||||
{ 0x00, NULL },
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct valstr ddr4_package_type[] =
|
|
||||||
{
|
|
||||||
{ 0, "Monolithic DRAM Device" },
|
|
||||||
{ 1, "Non-Monolithic Device" },
|
|
||||||
{ 0x00, NULL },
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct valstr ddr4_technology_type[] =
|
|
||||||
{
|
|
||||||
{ 0, "Extended module type, see byte 15" },
|
|
||||||
{ 1, "RDIMM" },
|
|
||||||
{ 2, "UDIMM" },
|
|
||||||
{ 3, "SO-DIMM" },
|
|
||||||
{ 4, "LRDIMM" },
|
|
||||||
{ 5, "Mini-RDIMM" },
|
|
||||||
{ 6, "Mini-UDIMM" },
|
|
||||||
{ 7, "7 - Reserved" },
|
|
||||||
{ 8, "72b-SO-RDIMM" },
|
|
||||||
{ 9, "72b-SO-UDIMM" },
|
|
||||||
{ 10, "10 - Reserved" },
|
|
||||||
{ 11, "11 - Reserved" },
|
|
||||||
{ 12, "16b-SO-DIMM" },
|
|
||||||
{ 13, "32b-SO-DIMM" },
|
|
||||||
{ 14, "14 - Reserved" },
|
|
||||||
{ 15, "No base memory present" },
|
|
||||||
{ 0x00, NULL },
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct valstr spd_config_vals[] = {
|
const struct valstr spd_config_vals[] = {
|
||||||
{ 0x00, "None" },
|
{ 0x00, "None" },
|
||||||
{ 0x01, "Parity" },
|
{ 0x01, "Parity" },
|
||||||
@ -778,8 +719,7 @@ const struct valstr jedec_id5_vals[] = {
|
|||||||
int
|
int
|
||||||
ipmi_spd_print(uint8_t *spd_data, int len)
|
ipmi_spd_print(uint8_t *spd_data, int len)
|
||||||
{
|
{
|
||||||
int k = 0;
|
int size;
|
||||||
int ii = 0;
|
|
||||||
|
|
||||||
if (len < 92)
|
if (len < 92)
|
||||||
return -1; /* we need first 91 bytes to do our thing */
|
return -1; /* we need first 91 bytes to do our thing */
|
||||||
@ -859,104 +799,11 @@ ipmi_spd_print(uint8_t *spd_data, int len)
|
|||||||
printf( "%c", *pchPN++ );
|
printf( "%c", *pchPN++ );
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
} else if (spd_data[2] == 0x0C) /* DDR4 SDRAM */
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int sdram_cap = 0;
|
|
||||||
int pri_bus_width = 0;
|
|
||||||
int sdram_width = 0;
|
|
||||||
int mem_size = 0;
|
|
||||||
int lrank_dimm;
|
|
||||||
|
|
||||||
if (len < 148)
|
|
||||||
return -1; /* we need first 91 bytes to do our thing */
|
|
||||||
|
|
||||||
/* "Logical rank" referes to the individually addressable die
|
|
||||||
* in a 3DS stack and has no meaning for monolithic or
|
|
||||||
* multi-load stacked SDRAMs; however, for the purposes of
|
|
||||||
* calculating the capacity of the module, one should treat
|
|
||||||
* monolithic and multi-load stack SDRAMs as having one logical
|
|
||||||
* rank per package rank.
|
|
||||||
*/
|
|
||||||
lrank_dimm = (spd_data[12]>>3&0x3) + 1; /* Number of Package Ranks per DIMM */
|
|
||||||
if ((spd_data[6] & 0x3) == 0x10) { /* 3DS package Type */
|
|
||||||
lrank_dimm *= ((spd_data[6]>>4)&0x3) + 1; /* Die Count */
|
|
||||||
}
|
|
||||||
sdram_cap = ldexp(256,(spd_data[4]&15));
|
|
||||||
pri_bus_width = ldexp(8,(spd_data[13]&7));
|
|
||||||
sdram_width = ldexp(4,(spd_data[12]&7));
|
|
||||||
mem_size = (sdram_cap/8) * (pri_bus_width/sdram_width) * lrank_dimm;
|
|
||||||
printf(" SDRAM Package Type : %s\n", val2str((spd_data[6]>>7), ddr4_package_type));
|
|
||||||
printf(" Technology : %s\n", val2str((spd_data[3]&15), ddr4_technology_type));
|
|
||||||
printf(" SDRAM Die Count : %d\n", ((spd_data[6]>>4) & 3)+1);
|
|
||||||
printf(" SDRAM Capacity : %d Mb\n", sdram_cap );
|
|
||||||
printf(" Memory Bank Group : %s\n", val2str((spd_data[4]>>6 & 0x3), ddr4_bank_groups));
|
|
||||||
printf(" Memory Banks : %s\n", val2str((spd_data[4]>>4 & 0x3), ddr4_banks_vals));
|
|
||||||
printf(" Primary Bus Width : %d bits\n", pri_bus_width );
|
|
||||||
printf(" SDRAM Device Width : %d bits\n", sdram_width );
|
|
||||||
printf(" Logical Rank per DIMM : %d\n", lrank_dimm );
|
|
||||||
printf(" Memory size : %d MB\n", mem_size );
|
|
||||||
|
|
||||||
printf(" Memory Density : %s\n", val2str(spd_data[4]&15, ddr4_density_vals));
|
|
||||||
printf(" 1.2 V Nominal Op : %s\n", (((spd_data[11]&3) != 3) ? "No":"Yes" ) );
|
|
||||||
printf(" TBD1 V Nominal Op : %s\n", (((spd_data[11]>>2&3) != 3) ? "No":"Yes" ) );
|
|
||||||
printf(" TBD2 V Nominal Op : %s\n", (((spd_data[11]>>4&3) != 3) ? "No":"Yes" ) );
|
|
||||||
printf(" Error Detect/Cor : %s\n", val2str(spd_data[13]>>3, ddr4_ecc_vals));
|
|
||||||
|
|
||||||
printf(" Manufacturer : ");
|
|
||||||
switch (spd_data[320]&127)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
printf("%s\n", val2str(spd_data[321], jedec_id1_vals));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
printf("%s\n", val2str(spd_data[321], jedec_id2_vals));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
printf("%s\n", val2str(spd_data[321], jedec_id3_vals));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
printf("%s\n", val2str(spd_data[321], jedec_id4_vals));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
printf("%s\n", val2str(spd_data[321], jedec_id5_vals));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("%s\n", "JEDEC JEP106 update required");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
u_int year = (spd_data[323]>>4)*10 + spd_data[323]&15;
|
|
||||||
u_int week = (spd_data[324]>>4)*10 + spd_data[324]&15;
|
|
||||||
printf(" Manufacture Date : year %4d week %2d\n",
|
|
||||||
2000 + year, week);
|
|
||||||
|
|
||||||
printf(" Serial Number : %02x%02x%02x%02x\n",
|
|
||||||
spd_data[325], spd_data[326], spd_data[327], spd_data[328]);
|
|
||||||
|
|
||||||
printf(" Part Number : ");
|
|
||||||
for (i=329; i <= 348; i++)
|
|
||||||
{
|
|
||||||
printf( "%c", spd_data[i]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ii = (spd_data[3] & 0x0f) + (spd_data[4] & 0x0f) - 17;
|
size = spd_data[5] * (spd_data[31] << 2);
|
||||||
k = ((spd_data[5] & 0x7) + 1) * spd_data[17];
|
printf(" Memory Size : %d MB\n", size);
|
||||||
|
|
||||||
if(ii > 0 && ii <= 12 && k > 0) {
|
|
||||||
printf(" Memory Size : %d MB\n", ((1 << ii) * k));
|
|
||||||
} else {
|
|
||||||
printf(" Memory Size INVALID: %d, %d, %d, %d\n", spd_data[3],
|
|
||||||
spd_data[4], spd_data[5], spd_data[17]);
|
|
||||||
}
|
|
||||||
printf(" Voltage Intf : %s\n",
|
printf(" Voltage Intf : %s\n",
|
||||||
val2str(spd_data[8], spd_voltage_vals));
|
val2str(spd_data[8], spd_voltage_vals));
|
||||||
printf(" Error Detect/Cor : %s\n",
|
printf(" Error Detect/Cor : %s\n",
|
||||||
@ -1013,7 +860,7 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id)
|
|||||||
struct ipmi_rs * rsp;
|
struct ipmi_rs * rsp;
|
||||||
struct ipmi_rq req;
|
struct ipmi_rq req;
|
||||||
struct fru_info fru;
|
struct fru_info fru;
|
||||||
uint8_t *spd_data, msg_data[4];
|
uint8_t spd_data[256], msg_data[4];
|
||||||
int len, offset;
|
int len, offset;
|
||||||
|
|
||||||
msg_data[0] = id;
|
msg_data[0] = id;
|
||||||
@ -1041,20 +888,11 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id)
|
|||||||
lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)",
|
lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)",
|
||||||
fru.size, fru.access ? "words" : "bytes");
|
fru.size, fru.access ? "words" : "bytes");
|
||||||
|
|
||||||
|
|
||||||
if (fru.size < 1) {
|
if (fru.size < 1) {
|
||||||
lprintf(LOG_ERR, " Invalid FRU size %d", fru.size);
|
lprintf(LOG_ERR, " Invalid FRU size %d", fru.size);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
spd_data = malloc(fru.size);
|
|
||||||
|
|
||||||
if (spd_data == NULL) {
|
|
||||||
printf(" Unable to malloc memory for spd array of size=%d\n",
|
|
||||||
fru.size);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
memset(&req, 0, sizeof(req));
|
||||||
req.msg.netfn = IPMI_NETFN_STORAGE;
|
req.msg.netfn = IPMI_NETFN_STORAGE;
|
||||||
req.msg.cmd = GET_FRU_DATA;
|
req.msg.cmd = GET_FRU_DATA;
|
||||||
@ -1062,27 +900,22 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id)
|
|||||||
req.msg.data_len = 4;
|
req.msg.data_len = 4;
|
||||||
|
|
||||||
offset = 0;
|
offset = 0;
|
||||||
memset(spd_data, 0, fru.size);
|
memset(spd_data, 0, 256);
|
||||||
do {
|
do {
|
||||||
int i;
|
|
||||||
msg_data[0] = id;
|
msg_data[0] = id;
|
||||||
msg_data[1] = offset & 0xFF;
|
msg_data[1] = offset;
|
||||||
msg_data[2] = offset >> 8;
|
msg_data[2] = 0;
|
||||||
msg_data[3] = FRU_DATA_RQST_SIZE;
|
msg_data[3] = FRU_DATA_RQST_SIZE;
|
||||||
|
|
||||||
rsp = intf->sendrecv(intf, &req);
|
rsp = intf->sendrecv(intf, &req);
|
||||||
if (rsp == NULL) {
|
if (rsp == NULL) {
|
||||||
printf(" Device not present (No Response)\n");
|
printf(" Device not present (No Response)\n");
|
||||||
free(spd_data);
|
|
||||||
spd_data = NULL;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (rsp->ccode > 0) {
|
if (rsp->ccode > 0) {
|
||||||
printf(" Device not present (%s)\n",
|
printf(" Device not present (%s)\n",
|
||||||
val2str(rsp->ccode, completion_code_vals));
|
val2str(rsp->ccode, completion_code_vals));
|
||||||
|
|
||||||
free(spd_data);
|
|
||||||
spd_data = NULL;
|
|
||||||
/* Timeouts are acceptable. No DIMM in the socket */
|
/* Timeouts are acceptable. No DIMM in the socket */
|
||||||
if (rsp->ccode == 0xc3)
|
if (rsp->ccode == 0xc3)
|
||||||
return 1;
|
return 1;
|
||||||
@ -1097,8 +930,6 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id)
|
|||||||
|
|
||||||
/* now print spd info */
|
/* now print spd info */
|
||||||
ipmi_spd_print(spd_data, offset);
|
ipmi_spd_print(spd_data, offset);
|
||||||
free(spd_data);
|
|
||||||
spd_data = NULL;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -44,7 +44,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
@ -357,7 +356,6 @@ int str2char(const char *str, int8_t * chr_ptr)
|
|||||||
if (arg_long < INT8_MIN || arg_long > INT8_MAX) {
|
if (arg_long < INT8_MIN || arg_long > INT8_MAX) {
|
||||||
return (-3);
|
return (-3);
|
||||||
}
|
}
|
||||||
*chr_ptr = (uint8_t)arg_long;
|
|
||||||
return 0;
|
return 0;
|
||||||
} /* str2char(...) */
|
} /* str2char(...) */
|
||||||
|
|
||||||
@ -665,10 +663,9 @@ ipmi_start_daemon(struct ipmi_intf *intf)
|
|||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = open("/dev/null", O_RDWR);
|
open("/dev/null", O_RDWR);
|
||||||
assert(0 == fd);
|
dup(0);
|
||||||
dup(fd);
|
dup(0);
|
||||||
dup(fd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* is_fru_id - wrapper for str-2-int FRU ID conversion. Message is printed
|
/* is_fru_id - wrapper for str-2-int FRU ID conversion. Message is printed
|
||||||
@ -759,32 +756,3 @@ is_ipmi_user_id(const char *argv_ptr, uint8_t *ipmi_uid_ptr)
|
|||||||
IPMI_UID_MIN, IPMI_UID_MAX);
|
IPMI_UID_MIN, IPMI_UID_MAX);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t
|
|
||||||
ipmi_get_oem_id(struct ipmi_intf *intf)
|
|
||||||
{
|
|
||||||
/* Execute a Get Board ID command to determine the board */
|
|
||||||
struct ipmi_rs *rsp;
|
|
||||||
struct ipmi_rq req;
|
|
||||||
uint16_t oem_id;
|
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
req.msg.netfn = IPMI_NETFN_TSOL;
|
|
||||||
req.msg.cmd = 0x21;
|
|
||||||
req.msg.data_len = 0;
|
|
||||||
|
|
||||||
rsp = intf->sendrecv(intf, &req);
|
|
||||||
if (rsp == NULL) {
|
|
||||||
lprintf(LOG_ERR, "Get Board ID command failed");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (rsp->ccode > 0) {
|
|
||||||
lprintf(LOG_ERR, "Get Board ID command failed: %#x %s",
|
|
||||||
rsp->ccode, val2str(rsp->ccode, completion_code_vals));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
oem_id = rsp->data[0] | (rsp->data[1] << 8);
|
|
||||||
lprintf(LOG_DEBUG,"Board ID: %x", oem_id);
|
|
||||||
|
|
||||||
return oem_id;
|
|
||||||
}
|
|
@ -754,193 +754,6 @@ ipmi_chassis_get_bootparam(struct ipmi_intf * intf, char * arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
get_bootparam_options(char *optstring,
|
|
||||||
unsigned char *set_flag, unsigned char *clr_flag)
|
|
||||||
{
|
|
||||||
char *token;
|
|
||||||
char *saveptr = NULL;
|
|
||||||
int optionError = 0;
|
|
||||||
*set_flag = 0;
|
|
||||||
*clr_flag = 0;
|
|
||||||
static struct {
|
|
||||||
char *name;
|
|
||||||
unsigned char value;
|
|
||||||
char *desc;
|
|
||||||
} options[] = {
|
|
||||||
{"PEF", 0x10,
|
|
||||||
"Clear valid bit on reset/power cycle cause by PEF"},
|
|
||||||
{"timeout", 0x08,
|
|
||||||
"Automatically clear boot flag valid bit on timeout"},
|
|
||||||
{"watchdog", 0x04,
|
|
||||||
"Clear valid bit on reset/power cycle cause by watchdog"},
|
|
||||||
{"reset", 0x02,
|
|
||||||
"Clear valid bit on push button reset/soft reset"},
|
|
||||||
{"power", 0x01,
|
|
||||||
"Clear valid bit on power up via power push button or wake event"},
|
|
||||||
|
|
||||||
{NULL} /* End marker */
|
|
||||||
}, *op;
|
|
||||||
|
|
||||||
if (strncmp(optstring, "options=", 8) != 0) {
|
|
||||||
lprintf(LOG_ERR, "No options= keyword found \"%s\"", optstring);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
token = strtok_r(optstring + 8, ",", &saveptr);
|
|
||||||
while (token != NULL) {
|
|
||||||
int setbit = 0;
|
|
||||||
if (strcmp(token, "help") == 0) {
|
|
||||||
optionError = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (strncmp(token, "no-", 3) == 0) {
|
|
||||||
setbit = 1;
|
|
||||||
token += 3;
|
|
||||||
}
|
|
||||||
for (op = options; op->name != NULL; ++op) {
|
|
||||||
if (strncmp(token, op->name, strlen(op->name)) == 0) {
|
|
||||||
if (setbit) {
|
|
||||||
*set_flag |= op->value;
|
|
||||||
} else {
|
|
||||||
*clr_flag |= op->value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (op->name == NULL) {
|
|
||||||
/* Option not found */
|
|
||||||
optionError = 1;
|
|
||||||
if (setbit) {
|
|
||||||
token -=3;
|
|
||||||
}
|
|
||||||
lprintf(LOG_ERR, "Invalid option: %s", token);
|
|
||||||
}
|
|
||||||
token = strtok_r(NULL, ",", &saveptr);
|
|
||||||
}
|
|
||||||
if (optionError) {
|
|
||||||
lprintf(LOG_NOTICE, " Legal options are:");
|
|
||||||
lprintf(LOG_NOTICE, " %-8s: print this message", "help");
|
|
||||||
for (op = options; op->name != NULL; ++op) {
|
|
||||||
lprintf(LOG_NOTICE, " %-8s: %s", op->name, op->desc);
|
|
||||||
}
|
|
||||||
lprintf(LOG_NOTICE, " Any Option may be prepended with no-"
|
|
||||||
" to invert sense of operation\n");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ipmi_chassis_get_bootvalid(struct ipmi_intf * intf)
|
|
||||||
{
|
|
||||||
struct ipmi_rs * rsp;
|
|
||||||
struct ipmi_rq req;
|
|
||||||
uint8_t msg_data[3];
|
|
||||||
uint8_t param_id = IPMI_CHASSIS_BOOTPARAM_FLAG_VALID;
|
|
||||||
memset(msg_data, 0, 3);
|
|
||||||
|
|
||||||
msg_data[0] = param_id & 0x7f;
|
|
||||||
msg_data[1] = 0;
|
|
||||||
msg_data[2] = 0;
|
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
req.msg.netfn = IPMI_NETFN_CHASSIS;
|
|
||||||
req.msg.cmd = 0x9;
|
|
||||||
req.msg.data = msg_data;
|
|
||||||
req.msg.data_len = 3;
|
|
||||||
|
|
||||||
rsp = intf->sendrecv(intf, &req);
|
|
||||||
if (rsp == NULL) {
|
|
||||||
lprintf(LOG_ERR,
|
|
||||||
"Error Getting Chassis Boot Parameter %d", param_id);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (rsp->ccode > 0) {
|
|
||||||
lprintf(LOG_ERR, "Get Chassis Boot Parameter %d failed: %s",
|
|
||||||
param_id, val2str(rsp->ccode, completion_code_vals));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (verbose > 2)
|
|
||||||
printbuf(rsp->data, rsp->data_len, "Boot Option");
|
|
||||||
|
|
||||||
return(rsp->data[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ipmi_chassis_set_bootvalid(struct ipmi_intf *intf, uint8_t set_flag, uint8_t clr_flag)
|
|
||||||
{
|
|
||||||
int bootvalid;
|
|
||||||
uint8_t flags[5];
|
|
||||||
int rc = 0;
|
|
||||||
int use_progress = 1;
|
|
||||||
uint8_t param_id = IPMI_CHASSIS_BOOTPARAM_FLAG_VALID;
|
|
||||||
|
|
||||||
if (use_progress) {
|
|
||||||
/* set set-in-progress flag */
|
|
||||||
memset(flags, 0, 5);
|
|
||||||
flags[0] = 0x01;
|
|
||||||
rc = ipmi_chassis_set_bootparam(intf,
|
|
||||||
IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS, flags, 1);
|
|
||||||
if (rc < 0)
|
|
||||||
use_progress = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(flags, 0, 5);
|
|
||||||
flags[0] = 0x01;
|
|
||||||
flags[1] = 0x01;
|
|
||||||
rc = ipmi_chassis_set_bootparam(intf, IPMI_CHASSIS_BOOTPARAM_INFO_ACK,
|
|
||||||
flags, 2);
|
|
||||||
|
|
||||||
if (rc < 0) {
|
|
||||||
if (use_progress) {
|
|
||||||
/* set-in-progress = set-complete */
|
|
||||||
memset(flags, 0, 5);
|
|
||||||
ipmi_chassis_set_bootparam(intf,
|
|
||||||
IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS,
|
|
||||||
flags, 1);
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bootvalid = ipmi_chassis_get_bootvalid(intf);
|
|
||||||
|
|
||||||
if (bootvalid < 0) {
|
|
||||||
if (use_progress) {
|
|
||||||
/* set-in-progress = set-complete */
|
|
||||||
memset(flags, 0, 5);
|
|
||||||
ipmi_chassis_set_bootparam(intf,
|
|
||||||
IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS,
|
|
||||||
flags, 1);
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
flags[0] = (bootvalid & ~clr_flag) | set_flag;
|
|
||||||
|
|
||||||
rc = ipmi_chassis_set_bootparam(intf, param_id, flags, 1);
|
|
||||||
|
|
||||||
if (rc == 0) {
|
|
||||||
if (use_progress) {
|
|
||||||
/* set-in-progress = commit-write */
|
|
||||||
memset(flags, 0, 5);
|
|
||||||
flags[0] = 0x02;
|
|
||||||
ipmi_chassis_set_bootparam(intf,
|
|
||||||
IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS,
|
|
||||||
flags, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (use_progress) {
|
|
||||||
/* set-in-progress = set-complete */
|
|
||||||
memset(flags, 0, 5);
|
|
||||||
ipmi_chassis_set_bootparam(intf,
|
|
||||||
IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS,
|
|
||||||
flags, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, uint8_t *iflags)
|
ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, uint8_t *iflags)
|
||||||
{
|
{
|
||||||
@ -1133,23 +946,6 @@ ipmi_power_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ipmi_chassis_set_bootflag_help()
|
|
||||||
{
|
|
||||||
unsigned char set_flag;
|
|
||||||
unsigned char clr_flag;
|
|
||||||
lprintf(LOG_NOTICE, "bootparam set bootflag <device> [options=...]");
|
|
||||||
lprintf(LOG_NOTICE, " Legal devices are:");
|
|
||||||
lprintf(LOG_NOTICE, " none : No override");
|
|
||||||
lprintf(LOG_NOTICE, " force_pxe : Force PXE boot");
|
|
||||||
lprintf(LOG_NOTICE, " force_disk : Force boot from default Hard-drive");
|
|
||||||
lprintf(LOG_NOTICE, " force_safe : Force boot from default Hard-drive, request Safe Mode");
|
|
||||||
lprintf(LOG_NOTICE, " force_diag : Force boot from Diagnostic Partition");
|
|
||||||
lprintf(LOG_NOTICE, " force_cdrom : Force boot from CD/DVD");
|
|
||||||
lprintf(LOG_NOTICE, " force_bios : Force boot into BIOS Setup");
|
|
||||||
get_bootparam_options("options=help", &set_flag, &clr_flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv)
|
ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv)
|
||||||
{
|
{
|
||||||
@ -1240,27 +1036,26 @@ ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
else if (strncmp(argv[0], "bootparam", 9) == 0) {
|
else if (strncmp(argv[0], "bootparam", 9) == 0) {
|
||||||
if ((argc < 3) || (strncmp(argv[1], "help", 4) == 0)) {
|
if ((argc < 3) || (strncmp(argv[1], "help", 4) == 0)) {
|
||||||
lprintf(LOG_NOTICE, "bootparam get <param #>");
|
lprintf(LOG_NOTICE, "bootparam get <param #>");
|
||||||
ipmi_chassis_set_bootflag_help();
|
lprintf(LOG_NOTICE, "bootparam set bootflag <flag>");
|
||||||
|
lprintf(LOG_NOTICE, " force_pxe : Force PXE boot");
|
||||||
|
lprintf(LOG_NOTICE, " force_disk : Force boot from default Hard-drive");
|
||||||
|
lprintf(LOG_NOTICE, " force_safe : Force boot from default Hard-drive, request Safe Mode");
|
||||||
|
lprintf(LOG_NOTICE, " force_diag : Force boot from Diagnostic Partition");
|
||||||
|
lprintf(LOG_NOTICE, " force_cdrom : Force boot from CD/DVD");
|
||||||
|
lprintf(LOG_NOTICE, " force_bios : Force boot into BIOS Setup");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (strncmp(argv[1], "get", 3) == 0) {
|
if (strncmp(argv[1], "get", 3) == 0) {
|
||||||
rc = ipmi_chassis_get_bootparam(intf, argv[2]);
|
rc = ipmi_chassis_get_bootparam(intf, argv[2]);
|
||||||
}
|
}
|
||||||
else if (strncmp(argv[1], "set", 3) == 0) {
|
else if (strncmp(argv[1], "set", 3) == 0) {
|
||||||
unsigned char set_flag=0;
|
if (argc < 4) {
|
||||||
unsigned char clr_flag=0;
|
lprintf(LOG_NOTICE, "bootparam set <option> [value ...]");
|
||||||
if (strncmp(argv[2], "help", 4) == 0 ||
|
|
||||||
argc < 4 || (argc >= 4 &&
|
|
||||||
strncmp(argv[2], "bootflag", 8) != 0)) {
|
|
||||||
ipmi_chassis_set_bootflag_help();
|
|
||||||
} else {
|
} else {
|
||||||
if (argc == 5) {
|
if (strncmp(argv[2], "bootflag", 8) == 0)
|
||||||
get_bootparam_options(argv[4], &set_flag, &clr_flag);
|
|
||||||
}
|
|
||||||
rc = ipmi_chassis_set_bootdev(intf, argv[3], NULL);
|
rc = ipmi_chassis_set_bootdev(intf, argv[3], NULL);
|
||||||
if (argc == 5 && (set_flag != 0 || clr_flag != 0)) {
|
else
|
||||||
rc = ipmi_chassis_set_bootvalid(intf, set_flag, clr_flag);
|
lprintf(LOG_NOTICE, "bootparam set <option> [value ...]");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1371,7 +1166,7 @@ ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
token = strtok_r(NULL, ",", &saveptr);
|
token = strtok_r(NULL, ",", &saveptr);
|
||||||
}
|
}
|
||||||
if (optionError) {
|
if (optionError) {
|
||||||
lprintf(LOG_NOTICE, "Legal options settings are:");
|
lprintf(LOG_NOTICE, "Legal options are:");
|
||||||
lprintf(LOG_NOTICE, "\thelp:\tprint this message");
|
lprintf(LOG_NOTICE, "\thelp:\tprint this message");
|
||||||
for (op = options; op->name != NULL; ++op) {
|
for (op = options; op->name != NULL; ++op) {
|
||||||
lprintf(LOG_NOTICE, "\t%s:\t%s", op->name, op->desc);
|
lprintf(LOG_NOTICE, "\t%s:\t%s", op->name, op->desc);
|
@ -187,60 +187,18 @@ const struct dcmi_cmd dcmi_pwrmgmt_vals[] = {
|
|||||||
|
|
||||||
/* set power limit commands */
|
/* set power limit commands */
|
||||||
const struct dcmi_cmd dcmi_pwrmgmt_set_usage_vals[] = {
|
const struct dcmi_cmd dcmi_pwrmgmt_set_usage_vals[] = {
|
||||||
{ 0x00, "action", " <no_action | sel_logging | power_off>" },
|
{ 0x00, "action", " <sel_logging | power_off>" },
|
||||||
{ 0x01, "limit", " <number in Watts>" },
|
{ 0x01, "limit", " <number in Watts>" },
|
||||||
{ 0x02, "correction", "<number in milliseconds>" },
|
{ 0x02, "correction", "<number in milliseconds>" },
|
||||||
{ 0x03, "sample", " <number in seconds>" },
|
{ 0x03, "sample", " <number in seconds>" },
|
||||||
{ 0xFF, NULL, NULL }
|
{ 0xFF, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* power management/get action commands */
|
|
||||||
const struct dcmi_cmd dcmi_pwrmgmt_get_action_vals[] = {
|
|
||||||
{ 0x00, "No Action", ""},
|
|
||||||
{ 0x01, "Hard Power Off & Log Event to SEL", ""},
|
|
||||||
|
|
||||||
{ 0x02, "OEM reserved (02h)", ""},
|
|
||||||
{ 0x03, "OEM reserved (03h)", ""},
|
|
||||||
{ 0x04, "OEM reserved (04h)", ""},
|
|
||||||
{ 0x05, "OEM reserved (05h)", ""},
|
|
||||||
{ 0x06, "OEM reserved (06h)", ""},
|
|
||||||
{ 0x07, "OEM reserved (07h)", ""},
|
|
||||||
{ 0x08, "OEM reserved (08h)", ""},
|
|
||||||
{ 0x09, "OEM reserved (09h)", ""},
|
|
||||||
{ 0x0a, "OEM reserved (0ah)", ""},
|
|
||||||
{ 0x0b, "OEM reserved (0bh)", ""},
|
|
||||||
{ 0x0c, "OEM reserved (0ch)", ""},
|
|
||||||
{ 0x0d, "OEM reserved (0dh)", ""},
|
|
||||||
{ 0x0e, "OEM reserved (0eh)", ""},
|
|
||||||
{ 0x0f, "OEM reserved (0fh)", ""},
|
|
||||||
{ 0x10, "OEM reserved (10h)", ""},
|
|
||||||
|
|
||||||
{ 0x11, "Log Event to SEL", ""},
|
|
||||||
{ 0xFF, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
/* power management/set action commands */
|
/* power management/set action commands */
|
||||||
const struct dcmi_cmd dcmi_pwrmgmt_action_vals[] = {
|
const struct dcmi_cmd dcmi_pwrmgmt_action_vals[] = {
|
||||||
{ 0x00, "no_action", "No Action"},
|
{ 0x00, "No Action", "" },
|
||||||
{ 0x01, "power_off", "Hard Power Off & Log Event to SEL"},
|
{ 0x01, "Hard Power Off & Log Event to SEL", "" },
|
||||||
{ 0x11, "sel_logging", "Log Event to SEL"},
|
{ 0x11, "Log Event to SEL", "" },
|
||||||
|
|
||||||
{ 0x02, "oem_02", "OEM reserved (02h)"},
|
|
||||||
{ 0x03, "oem_03", "OEM reserved (03h)"},
|
|
||||||
{ 0x04, "oem_04", "OEM reserved (04h)"},
|
|
||||||
{ 0x05, "oem_05", "OEM reserved (05h)"},
|
|
||||||
{ 0x06, "oem_06", "OEM reserved (06h)"},
|
|
||||||
{ 0x07, "oem_07", "OEM reserved (07h)"},
|
|
||||||
{ 0x08, "oem_08", "OEM reserved (08h)"},
|
|
||||||
{ 0x09, "oem_09", "OEM reserved (09h)"},
|
|
||||||
{ 0x0a, "oem_0a", "OEM reserved (0ah)"},
|
|
||||||
{ 0x0b, "oem_0b", "OEM reserved (0bh)"},
|
|
||||||
{ 0x0c, "oem_0c", "OEM reserved (0ch)"},
|
|
||||||
{ 0x0d, "oem_0d", "OEM reserved (0dh)"},
|
|
||||||
{ 0x0e, "oem_0e", "OEM reserved (0eh)"},
|
|
||||||
{ 0x0f, "oem_0f", "OEM reserved (0fh)"},
|
|
||||||
{ 0x10, "oem_10", "OEM reserved (10h)"},
|
|
||||||
|
|
||||||
{ 0xFF, NULL, NULL }
|
{ 0xFF, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -523,14 +481,44 @@ ipmi_dcmi_prnt_oobDiscover(struct ipmi_intf * intf)
|
|||||||
intf->abort = 1;
|
intf->abort = 1;
|
||||||
intf->session->sol_data.sequence_number = 1;
|
intf->session->sol_data.sequence_number = 1;
|
||||||
|
|
||||||
if (ipmi_intf_socket_connect (intf) == -1) {
|
/* open port to BMC */
|
||||||
lprintf(LOG_ERR, "Could not open socket!");
|
memset(&s->addr, 0, sizeof(struct sockaddr_in));
|
||||||
|
s->addr.sin_family = AF_INET;
|
||||||
|
s->addr.sin_port = htons(s->port);
|
||||||
|
|
||||||
|
rc = inet_pton(AF_INET, (const char *)s->hostname, &s->addr.sin_addr);
|
||||||
|
if (rc <= 0) {
|
||||||
|
struct hostent *host = gethostbyname((const char *)s->hostname);
|
||||||
|
if (host == NULL) {
|
||||||
|
lprintf(LOG_ERR, "Address lookup for %s failed",
|
||||||
|
s->hostname);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (host->h_addrtype != AF_INET) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Address lookup for %s failed. Got %s, expected IPv4 address.",
|
||||||
|
s->hostname,
|
||||||
|
(host->h_addrtype == AF_INET6) ? "IPv6" : "Unknown");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
s->addr.sin_family = host->h_addrtype;
|
||||||
|
memcpy(&s->addr.sin_addr, host->h_addr, host->h_length);
|
||||||
|
}
|
||||||
|
|
||||||
|
lprintf(LOG_DEBUG, "IPMI LAN host %s port %d",
|
||||||
|
s->hostname, ntohs(s->addr.sin_port));
|
||||||
|
|
||||||
|
intf->fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
|
if (intf->fd < 0) {
|
||||||
|
lperror(LOG_ERR, "Socket failed");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intf->fd < 0) {
|
/* connect to UDP socket so we get async errors */
|
||||||
lperror(LOG_ERR, "Connect to %s failed",
|
rc = connect(intf->fd, (struct sockaddr *)&s->addr,
|
||||||
s->hostname);
|
sizeof(struct sockaddr_in));
|
||||||
|
if (rc < 0) {
|
||||||
|
lperror(LOG_ERR, "Connect failed");
|
||||||
intf->close(intf);
|
intf->close(intf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1467,7 +1455,7 @@ ipmi_dcmi_pwr_prnt_glimit(struct ipmi_intf * intf)
|
|||||||
(realCc == 0) ?
|
(realCc == 0) ?
|
||||||
"Power Limit Active" : "No Active Power Limit");
|
"Power Limit Active" : "No Active Power Limit");
|
||||||
printf(" Exception actions: %s\n",
|
printf(" Exception actions: %s\n",
|
||||||
val2str2(val.action, dcmi_pwrmgmt_get_action_vals));
|
val2str2(val.action, dcmi_pwrmgmt_action_vals));
|
||||||
printf(" Power Limit: %i Watts\n", val.limit);
|
printf(" Power Limit: %i Watts\n", val.limit);
|
||||||
printf(" Correction time: %i milliseconds\n", val.correction);
|
printf(" Correction time: %i milliseconds\n", val.correction);
|
||||||
printf(" Sampling period: %i seconds\n", val.sample);
|
printf(" Sampling period: %i seconds\n", val.sample);
|
||||||
@ -1498,6 +1486,12 @@ ipmi_dcmi_pwr_slimit(struct ipmi_intf * intf, const char * option,
|
|||||||
uint32_t lvalue = 0;
|
uint32_t lvalue = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (str2uint(value, &lvalue) != 0) {
|
||||||
|
lprintf(LOG_ERR, "Given %s '%s' is invalid.",
|
||||||
|
option, value);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
rsp = ipmi_dcmi_pwr_glimit(intf); /* get the power limit settings */
|
rsp = ipmi_dcmi_pwr_glimit(intf); /* get the power limit settings */
|
||||||
# if 0
|
# if 0
|
||||||
{
|
{
|
||||||
@ -1535,124 +1529,39 @@ ipmi_dcmi_pwr_slimit(struct ipmi_intf * intf, const char * option,
|
|||||||
* sample period in seconds *
|
* sample period in seconds *
|
||||||
* val.sample = *(uint16_t*)(&rsp->data[12]);
|
* val.sample = *(uint16_t*)(&rsp->data[12]);
|
||||||
*/
|
*/
|
||||||
lprintf(LOG_INFO,
|
|
||||||
"DCMI IN Limit=%d Correction=%d Action=%d Sample=%d\n",
|
|
||||||
val.limit, val.correction, val.action, val.sample);
|
|
||||||
switch (str2val2(option, dcmi_pwrmgmt_set_usage_vals)) {
|
switch (str2val2(option, dcmi_pwrmgmt_set_usage_vals)) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
/* action */
|
/* action */
|
||||||
switch (str2val2(value, dcmi_pwrmgmt_action_vals)) {
|
switch (str2val2(value, dcmi_pwrmgmt_action_vals)) {
|
||||||
case 0x00:
|
|
||||||
/* no_action */
|
|
||||||
val.action = 0;
|
|
||||||
break;
|
|
||||||
case 0x01:
|
case 0x01:
|
||||||
/* power_off */
|
/* power_off */
|
||||||
val.action = 1;
|
val.action = 1;
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x02;
|
|
||||||
break;
|
|
||||||
case 0x03:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x03;
|
|
||||||
break;
|
|
||||||
case 0x04:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x04;
|
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x05;
|
|
||||||
break;
|
|
||||||
case 0x06:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x06;
|
|
||||||
break;
|
|
||||||
case 0x07:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x07;
|
|
||||||
break;
|
|
||||||
case 0x08:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x08;
|
|
||||||
break;
|
|
||||||
case 0x09:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x09;
|
|
||||||
break;
|
|
||||||
case 0x0a:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x0a;
|
|
||||||
break;
|
|
||||||
case 0x0b:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x0b;
|
|
||||||
break;
|
|
||||||
case 0x0c:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x0c;
|
|
||||||
break;
|
|
||||||
case 0x0d:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x0d;
|
|
||||||
break;
|
|
||||||
case 0x0e:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x0e;
|
|
||||||
break;
|
|
||||||
case 0x0f:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x0f;
|
|
||||||
break;
|
|
||||||
case 0x10:
|
|
||||||
/* OEM reserved action */
|
|
||||||
val.action = 0x10;
|
|
||||||
break;
|
|
||||||
case 0x11:
|
case 0x11:
|
||||||
/* sel_logging*/
|
/* sel_logging*/
|
||||||
val.action = 0x11;
|
val.action = 0x11;
|
||||||
break;
|
break;
|
||||||
case 0xFF:
|
case 0xFF:
|
||||||
/* error - not a string we knew what to do with */
|
/* error - not a string we knew what to do with */
|
||||||
lprintf(LOG_ERR, "Given %s '%s' is invalid.",
|
|
||||||
option, value);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
/* limit */
|
/* limit */
|
||||||
if (str2uint(value, &lvalue) != 0) {
|
|
||||||
lprintf(LOG_ERR, "Given %s '%s' is invalid.",
|
|
||||||
option, value);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
val.limit = *(uint16_t*)(&lvalue);
|
val.limit = *(uint16_t*)(&lvalue);
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
/* correction */
|
/* correction */
|
||||||
if (str2uint(value, &lvalue) != 0) {
|
|
||||||
lprintf(LOG_ERR, "Given %s '%s' is invalid.",
|
|
||||||
option, value);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
val.correction = *(uint32_t*)(&lvalue);
|
val.correction = *(uint32_t*)(&lvalue);
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
/* sample */
|
/* sample */
|
||||||
if (str2uint(value, &lvalue) != 0) {
|
|
||||||
lprintf(LOG_ERR, "Given %s '%s' is invalid.",
|
|
||||||
option, value);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
val.sample = *(uint16_t*)(&lvalue);
|
val.sample = *(uint16_t*)(&lvalue);
|
||||||
break;
|
break;
|
||||||
case 0xff:
|
case 0xff:
|
||||||
/* no valid options */
|
/* no valid options */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
lprintf(LOG_INFO, "DCMI OUT Limit=%d Correction=%d Action=%d Sample=%d\n", val.limit, val.correction, val.action, val.sample);
|
|
||||||
|
|
||||||
msg_data[0] = val.grp_id; /* Group Extension Identification */
|
msg_data[0] = val.grp_id; /* Group Extension Identification */
|
||||||
msg_data[1] = 0x00; /* reserved */
|
msg_data[1] = 0x00; /* reserved */
|
||||||
@ -1817,10 +1726,6 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
|
|
||||||
/* action */
|
/* action */
|
||||||
switch (str2val2(argv[2], dcmi_pwrmgmt_action_vals)) {
|
switch (str2val2(argv[2], dcmi_pwrmgmt_action_vals)) {
|
||||||
case 0x00:
|
|
||||||
/* no_action */
|
|
||||||
data[4] = 0x00;
|
|
||||||
break;
|
|
||||||
case 0x01:
|
case 0x01:
|
||||||
/* power_off */
|
/* power_off */
|
||||||
data[4] = 0x01;
|
data[4] = 0x01;
|
||||||
@ -1831,8 +1736,6 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
case 0xFF:
|
case 0xFF:
|
||||||
/* error - not a string we knew what to do with */
|
/* error - not a string we knew what to do with */
|
||||||
lprintf(LOG_ERR, "Given Action '%s' is invalid.",
|
|
||||||
argv[2]);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* limit */
|
/* limit */
|
@ -123,16 +123,6 @@ const struct vFlashstr vFlash_completion_code_vals[] = {
|
|||||||
|
|
||||||
static int current_arg =0;
|
static int current_arg =0;
|
||||||
uint8_t iDRAC_FLAG=0;
|
uint8_t iDRAC_FLAG=0;
|
||||||
|
|
||||||
/*
|
|
||||||
* new flags for
|
|
||||||
* 11G || 12G || 13G -> _ALL
|
|
||||||
* 12G || 13G -> _12_13
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
uint8_t iDRAC_FLAG_ALL=0;
|
|
||||||
uint8_t iDRAC_FLAG_12_13=0;
|
|
||||||
|
|
||||||
LCD_MODE lcd_mode;
|
LCD_MODE lcd_mode;
|
||||||
static uint8_t LcdSupported=0;
|
static uint8_t LcdSupported=0;
|
||||||
static uint8_t SetLEDSupported=0;
|
static uint8_t SetLEDSupported=0;
|
||||||
@ -368,7 +358,7 @@ ipmi_delloem_lcd_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
lprintf(LOG_ERR, "lcd is not supported on this system.");
|
lprintf(LOG_ERR, "lcd is not supported on this system.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if (strncmp(argv[current_arg], "info\0", 5) == 0) {
|
} else if (strncmp(argv[current_arg], "info\0", 5) == 0) {
|
||||||
if (iDRAC_FLAG_ALL) {
|
if ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G)) {
|
||||||
rc = ipmi_lcd_get_info_wh(intf);
|
rc = ipmi_lcd_get_info_wh(intf);
|
||||||
} else {
|
} else {
|
||||||
rc = ipmi_lcd_get_info(intf);
|
rc = ipmi_lcd_get_info(intf);
|
||||||
@ -402,7 +392,7 @@ ipmi_delloem_lcd_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((strncmp(argv[current_arg], "mode\0", 5) == 0)
|
if ((strncmp(argv[current_arg], "mode\0", 5) == 0)
|
||||||
&& (iDRAC_FLAG_ALL)) {
|
&& ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G))) {
|
||||||
current_arg++;
|
current_arg++;
|
||||||
if (argc <= current_arg) {
|
if (argc <= current_arg) {
|
||||||
ipmi_lcd_usage();
|
ipmi_lcd_usage();
|
||||||
@ -456,7 +446,7 @@ ipmi_delloem_lcd_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
ipmi_lcd_usage();
|
ipmi_lcd_usage();
|
||||||
}
|
}
|
||||||
} else if ((strncmp(argv[current_arg], "lcdqualifier\0", 13) == 0)
|
} else if ((strncmp(argv[current_arg], "lcdqualifier\0", 13) == 0)
|
||||||
&& (iDRAC_FLAG_ALL)) {
|
&& ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G))) {
|
||||||
current_arg++;
|
current_arg++;
|
||||||
if (argc <= current_arg) {
|
if (argc <= current_arg) {
|
||||||
ipmi_lcd_usage();
|
ipmi_lcd_usage();
|
||||||
@ -480,7 +470,7 @@ ipmi_delloem_lcd_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
ipmi_lcd_usage();
|
ipmi_lcd_usage();
|
||||||
}
|
}
|
||||||
} else if ((strncmp(argv[current_arg], "errordisplay\0", 13) == 0)
|
} else if ((strncmp(argv[current_arg], "errordisplay\0", 13) == 0)
|
||||||
&& (iDRAC_FLAG_ALL)) {
|
&& ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G))) {
|
||||||
current_arg++;
|
current_arg++;
|
||||||
if (argc <= current_arg) {
|
if (argc <= current_arg) {
|
||||||
ipmi_lcd_usage();
|
ipmi_lcd_usage();
|
||||||
@ -645,33 +635,17 @@ ipmi_idracvalidator_command(struct ipmi_intf * intf)
|
|||||||
val2str(rsp->ccode, completion_code_vals)); */
|
val2str(rsp->ccode, completion_code_vals)); */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Set the new flags to 0
|
|
||||||
*/
|
|
||||||
iDRAC_FLAG_ALL = 0;
|
|
||||||
iDRAC_FLAG_12_13 = 0;
|
|
||||||
/* Support the 11G Monolithic, modular, Maisy and Coaster */
|
/* Support the 11G Monolithic, modular, Maisy and Coaster */
|
||||||
if ((IMC_IDRAC_11G_MONOLITHIC == data[10])
|
if ((IMC_IDRAC_11G_MONOLITHIC == data[10])
|
||||||
|| (IMC_IDRAC_11G_MODULAR == data[10])
|
|| (IMC_IDRAC_11G_MODULAR == data[10])
|
||||||
|| (IMC_MASER_LITE_BMC == data[10])
|
|| (IMC_MASER_LITE_BMC == data[10])
|
||||||
|| (IMC_MASER_LITE_NU == data[10])) {
|
|| (IMC_MASER_LITE_NU == data[10])) {
|
||||||
iDRAC_FLAG=IDRAC_11G;
|
iDRAC_FLAG=IDRAC_11G;
|
||||||
iDRAC_FLAG_ALL = 1;
|
|
||||||
} else if((IMC_IDRAC_12G_MONOLITHIC == data[10])
|
} else if((IMC_IDRAC_12G_MONOLITHIC == data[10])
|
||||||
|| (IMC_IDRAC_12G_MODULAR == data[10])) {
|
|| (IMC_IDRAC_12G_MODULAR == data[10])) {
|
||||||
iDRAC_FLAG = IDRAC_12G;
|
iDRAC_FLAG = IDRAC_12G;
|
||||||
iDRAC_FLAG_ALL = 1;
|
|
||||||
iDRAC_FLAG_12_13 = 1;
|
|
||||||
} else if ((IMC_IDRAC_13G_MONOLITHIC == data[10])
|
|
||||||
|| (IMC_IDRAC_13G_MODULAR == data[10])
|
|
||||||
|| (IMC_IDRAC_13G_DCS == data[10])) {
|
|
||||||
iDRAC_FLAG=IDRAC_13G;
|
|
||||||
iDRAC_FLAG_ALL = 1;
|
|
||||||
iDRAC_FLAG_12_13 = 1;
|
|
||||||
} else {
|
} else {
|
||||||
iDRAC_FLAG = 0;
|
iDRAC_FLAG = 0;
|
||||||
iDRAC_FLAG_ALL = 0;
|
|
||||||
iDRAC_FLAG_12_13 = 0;
|
|
||||||
}
|
}
|
||||||
IMC_Type = data[10];
|
IMC_Type = data[10];
|
||||||
return 0;
|
return 0;
|
||||||
@ -1420,7 +1394,7 @@ ipmi_lcd_usage(void)
|
|||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
"");
|
"");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
"iDRAC 11g or iDRAC 12g or iDRAC 13g :");
|
"iDRAC 11g or iDRAC 12g:");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" lcd set {mode}|{lcdqualifier}|{errordisplay}");
|
" lcd set {mode}|{lcdqualifier}|{errordisplay}");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
@ -1587,9 +1561,7 @@ ipmi_macinfo_drac_idrac_virtual_mac(struct ipmi_intf* intf,uint8_t NicNum)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type)
|
if ((IMC_IDRAC_12G_MODULAR == IMC_Type)
|
||||||
|| (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)
|
|| (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) {
|
||||||
|| (IMC_IDRAC_13G_MODULAR == IMC_Type)
|
|
||||||
|| (IMC_IDRAC_13G_MONOLITHIC== IMC_Type)) {
|
|
||||||
/* Get the Chasiss Assigned MAC Addresss for 12g Only */
|
/* Get the Chasiss Assigned MAC Addresss for 12g Only */
|
||||||
memcpy(VirtualMacAddress, ((rsp->data) + 1), MACADDRESSLENGH);
|
memcpy(VirtualMacAddress, ((rsp->data) + 1), MACADDRESSLENGH);
|
||||||
for (i = 0; i < MACADDRESSLENGH; i++) {
|
for (i = 0; i < MACADDRESSLENGH; i++) {
|
||||||
@ -1627,9 +1599,6 @@ ipmi_macinfo_drac_idrac_virtual_mac(struct ipmi_intf* intf,uint8_t NicNum)
|
|||||||
} else if ((IMC_IDRAC_12G_MODULAR == IMC_Type)
|
} else if ((IMC_IDRAC_12G_MODULAR == IMC_Type)
|
||||||
|| (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) {
|
|| (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) {
|
||||||
printf("\niDRAC7 MAC Address ");
|
printf("\niDRAC7 MAC Address ");
|
||||||
} else if ((IMC_IDRAC_13G_MODULAR == IMC_Type)
|
|
||||||
|| (IMC_IDRAC_13G_MONOLITHIC== IMC_Type)) {
|
|
||||||
printf ("\niDRAC8 MAC Address ");
|
|
||||||
} else if ((IMC_MASER_LITE_BMC== IMC_Type)
|
} else if ((IMC_MASER_LITE_BMC== IMC_Type)
|
||||||
|| (IMC_MASER_LITE_NU== IMC_Type)) {
|
|| (IMC_MASER_LITE_NU== IMC_Type)) {
|
||||||
printf("\nBMC MAC Address ");
|
printf("\nBMC MAC Address ");
|
||||||
@ -1699,9 +1668,6 @@ ipmi_macinfo_drac_idrac_mac(struct ipmi_intf* intf,uint8_t NicNum)
|
|||||||
} else if ((IMC_IDRAC_12G_MODULAR == IMC_Type)
|
} else if ((IMC_IDRAC_12G_MODULAR == IMC_Type)
|
||||||
|| (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) {
|
|| (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) {
|
||||||
printf("\niDRAC7 MAC Address ");
|
printf("\niDRAC7 MAC Address ");
|
||||||
} else if ((IMC_IDRAC_13G_MODULAR == IMC_Type)
|
|
||||||
|| (IMC_IDRAC_13G_MONOLITHIC== IMC_Type)) {
|
|
||||||
printf ("\niDRAC8 MAC Address ");
|
|
||||||
} else if ((IMC_MASER_LITE_BMC== IMC_Type)
|
} else if ((IMC_MASER_LITE_BMC== IMC_Type)
|
||||||
|| (IMC_MASER_LITE_NU== IMC_Type)) {
|
|| (IMC_MASER_LITE_NU== IMC_Type)) {
|
||||||
printf("\n\rBMC MAC Address ");
|
printf("\n\rBMC MAC Address ");
|
||||||
@ -1913,8 +1879,6 @@ ipmi_macinfo(struct ipmi_intf* intf, uint8_t NicNum)
|
|||||||
|| IMC_IDRAC_11G_MONOLITHIC == IMC_Type)
|
|| IMC_IDRAC_11G_MONOLITHIC == IMC_Type)
|
||||||
|| (IMC_IDRAC_12G_MODULAR == IMC_Type
|
|| (IMC_IDRAC_12G_MODULAR == IMC_Type
|
||||||
|| IMC_IDRAC_12G_MONOLITHIC == IMC_Type)
|
|| IMC_IDRAC_12G_MONOLITHIC == IMC_Type)
|
||||||
|| (IMC_IDRAC_13G_MODULAR == IMC_Type
|
|
||||||
|| IMC_IDRAC_13G_MONOLITHIC == IMC_Type)
|
|
||||||
|| (IMC_MASER_LITE_NU == IMC_Type || IMC_MASER_LITE_BMC== IMC_Type)) {
|
|| (IMC_MASER_LITE_NU == IMC_Type || IMC_MASER_LITE_BMC== IMC_Type)) {
|
||||||
return ipmi_macinfo_11g(intf,NicNum);
|
return ipmi_macinfo_11g(intf,NicNum);
|
||||||
} else {
|
} else {
|
||||||
@ -1982,7 +1946,7 @@ ipmi_delloem_lan_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
ipmi_lan_usage();
|
ipmi_lan_usage();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (iDRAC_FLAG_12_13) {
|
if (iDRAC_FLAG == IDRAC_12G) {
|
||||||
nic_selection = get_nic_selection_mode_12g(intf, current_arg, argv,
|
nic_selection = get_nic_selection_mode_12g(intf, current_arg, argv,
|
||||||
nic_set);
|
nic_set);
|
||||||
if (INVALID == nic_selection) {
|
if (INVALID == nic_selection) {
|
||||||
@ -2099,7 +2063,7 @@ get_nic_selection_mode_12g(struct ipmi_intf* intf,int current_arg,
|
|||||||
}
|
}
|
||||||
if (argv[current_arg] != NULL
|
if (argv[current_arg] != NULL
|
||||||
&& strncmp(argv[current_arg], "lom1\0", 5) == 0) {
|
&& strncmp(argv[current_arg], "lom1\0", 5) == 0) {
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) {
|
if (IMC_IDRAC_12G_MODULAR == IMC_Type) {
|
||||||
return INVAILD_SHARED_MODE;
|
return INVAILD_SHARED_MODE;
|
||||||
}
|
}
|
||||||
if (failover) {
|
if (failover) {
|
||||||
@ -2118,7 +2082,7 @@ get_nic_selection_mode_12g(struct ipmi_intf* intf,int current_arg,
|
|||||||
return 0;
|
return 0;
|
||||||
} else if (argv[current_arg] != NULL
|
} else if (argv[current_arg] != NULL
|
||||||
&& strncmp(argv[current_arg], "lom2\0", 5) == 0) {
|
&& strncmp(argv[current_arg], "lom2\0", 5) == 0) {
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) {
|
if (IMC_IDRAC_12G_MODULAR == IMC_Type) {
|
||||||
return INVAILD_SHARED_MODE;
|
return INVAILD_SHARED_MODE;
|
||||||
}
|
}
|
||||||
if (failover) {
|
if (failover) {
|
||||||
@ -2137,7 +2101,7 @@ get_nic_selection_mode_12g(struct ipmi_intf* intf,int current_arg,
|
|||||||
return 0;
|
return 0;
|
||||||
} else if (argv[current_arg] != NULL
|
} else if (argv[current_arg] != NULL
|
||||||
&& strncmp(argv[current_arg], "lom3\0", 5) == 0) {
|
&& strncmp(argv[current_arg], "lom3\0", 5) == 0) {
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) {
|
if (IMC_IDRAC_12G_MODULAR == IMC_Type) {
|
||||||
return INVAILD_SHARED_MODE;
|
return INVAILD_SHARED_MODE;
|
||||||
}
|
}
|
||||||
if (failover) {
|
if (failover) {
|
||||||
@ -2156,7 +2120,7 @@ get_nic_selection_mode_12g(struct ipmi_intf* intf,int current_arg,
|
|||||||
return 0;
|
return 0;
|
||||||
} else if (argv[current_arg] != NULL
|
} else if (argv[current_arg] != NULL
|
||||||
&& strncmp(argv[current_arg], "lom4\0", 5) == 0) {
|
&& strncmp(argv[current_arg], "lom4\0", 5) == 0) {
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) {
|
if (IMC_IDRAC_12G_MODULAR == IMC_Type) {
|
||||||
return INVAILD_SHARED_MODE;
|
return INVAILD_SHARED_MODE;
|
||||||
}
|
}
|
||||||
if (failover) {
|
if (failover) {
|
||||||
@ -2175,7 +2139,7 @@ get_nic_selection_mode_12g(struct ipmi_intf* intf,int current_arg,
|
|||||||
return 0;
|
return 0;
|
||||||
} else if (failover && argv[current_arg] != NULL
|
} else if (failover && argv[current_arg] != NULL
|
||||||
&& strncmp(argv[current_arg], "none\0", 5) == 0) {
|
&& strncmp(argv[current_arg], "none\0", 5) == 0) {
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type) ) {
|
if (IMC_IDRAC_12G_MODULAR == IMC_Type) {
|
||||||
return INVAILD_SHARED_MODE;
|
return INVAILD_SHARED_MODE;
|
||||||
}
|
}
|
||||||
if (failover) {
|
if (failover) {
|
||||||
@ -2195,7 +2159,7 @@ get_nic_selection_mode_12g(struct ipmi_intf* intf,int current_arg,
|
|||||||
current_arg++;
|
current_arg++;
|
||||||
if (failover && argv[current_arg] != NULL
|
if (failover && argv[current_arg] != NULL
|
||||||
&& strncmp(argv[current_arg], "loms\0", 5) == 0) {
|
&& strncmp(argv[current_arg], "loms\0", 5) == 0) {
|
||||||
if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) {
|
if (IMC_IDRAC_12G_MODULAR == IMC_Type) {
|
||||||
return INVAILD_SHARED_MODE;
|
return INVAILD_SHARED_MODE;
|
||||||
}
|
}
|
||||||
if (nic_set[0] == 1) {
|
if (nic_set[0] == 1) {
|
||||||
@ -2278,8 +2242,7 @@ ipmi_lan_set_nic_selection_12g(struct ipmi_intf * intf, uint8_t * nic_selection)
|
|||||||
lprintf(LOG_ERR, "Error in setting nic selection");
|
lprintf(LOG_ERR, "Error in setting nic selection");
|
||||||
return -1;
|
return -1;
|
||||||
} else if( (nic_selection[0] == 1)
|
} else if( (nic_selection[0] == 1)
|
||||||
&& (( iDRAC_FLAG_12_13 )
|
&& ((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED))) {
|
||||||
&& (rsp->ccode == LICENSE_NOT_SUPPORTED))) {
|
|
||||||
/* Check license only for setting the dedicated nic. */
|
/* Check license only for setting the dedicated nic. */
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
@ -2334,7 +2297,7 @@ ipmi_lan_get_nic_selection(struct ipmi_intf * intf)
|
|||||||
input_length = 0;
|
input_length = 0;
|
||||||
req.msg.netfn = DELL_OEM_NETFN;
|
req.msg.netfn = DELL_OEM_NETFN;
|
||||||
req.msg.lun = 0;
|
req.msg.lun = 0;
|
||||||
if( iDRAC_FLAG_12_13 ) {
|
if (iDRAC_FLAG == IDRAC_12G) {
|
||||||
req.msg.cmd = GET_NIC_SELECTION_12G_CMD;
|
req.msg.cmd = GET_NIC_SELECTION_12G_CMD;
|
||||||
} else {
|
} else {
|
||||||
req.msg.cmd = GET_NIC_SELECTION_CMD;
|
req.msg.cmd = GET_NIC_SELECTION_CMD;
|
||||||
@ -2351,7 +2314,7 @@ ipmi_lan_get_nic_selection(struct ipmi_intf * intf)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
nic_selection = rsp->data[0];
|
nic_selection = rsp->data[0];
|
||||||
if( iDRAC_FLAG_12_13 ) {
|
if (iDRAC_FLAG == IDRAC_12G) {
|
||||||
nic_selection_failover = rsp->data[1];
|
nic_selection_failover = rsp->data[1];
|
||||||
if ((nic_selection < 6) && (nic_selection > 0)
|
if ((nic_selection < 6) && (nic_selection > 0)
|
||||||
&& (nic_selection_failover < 7)) {
|
&& (nic_selection_failover < 7)) {
|
||||||
@ -2450,7 +2413,7 @@ ipmi_lan_usage(void)
|
|||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" sets the NIC Selection Mode :");
|
" sets the NIC Selection Mode :");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" on iDRAC12g OR iDRAC13g :");
|
" on iDRAC12g :");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" dedicated, shared with lom1, shared with lom2,shared with lom3,shared");
|
" dedicated, shared with lom1, shared with lom2,shared with lom3,shared");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
@ -2470,7 +2433,7 @@ ipmi_lan_usage(void)
|
|||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" lan get ");
|
" lan get ");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" on iDRAC12g or iDRAC13g :");
|
" on iDRAC12g :");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
" returns the current NIC Selection Mode (dedicated, shared with lom1, shared");
|
" returns the current NIC Selection Mode (dedicated, shared with lom1, shared");
|
||||||
lprintf(LOG_NOTICE,
|
lprintf(LOG_NOTICE,
|
||||||
@ -2699,7 +2662,7 @@ ipmi_get_power_capstatus_command(struct ipmi_intf * intf)
|
|||||||
if (rsp == NULL) {
|
if (rsp == NULL) {
|
||||||
lprintf(LOG_ERR, "Error getting powercap status");
|
lprintf(LOG_ERR, "Error getting powercap status");
|
||||||
return -1;
|
return -1;
|
||||||
} else if (( iDRAC_FLAG_12_13 ) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
} else if((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1; /* Return Error as unlicensed */
|
return -1; /* Return Error as unlicensed */
|
||||||
@ -2750,7 +2713,7 @@ ipmi_set_power_capstatus_command(struct ipmi_intf * intf, uint8_t val)
|
|||||||
if (rsp == NULL) {
|
if (rsp == NULL) {
|
||||||
lprintf(LOG_ERR, "Error setting powercap status");
|
lprintf(LOG_ERR, "Error setting powercap status");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1; /* return unlicensed Error code */
|
return -1; /* return unlicensed Error code */
|
||||||
@ -2844,7 +2807,7 @@ ipmi_powermgmt(struct ipmi_intf * intf)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
if((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -2947,7 +2910,7 @@ ipmi_powermgmt_clear(struct ipmi_intf * intf, uint8_t clearValue)
|
|||||||
if (rsp == NULL) {
|
if (rsp == NULL) {
|
||||||
lprintf(LOG_ERR, "Error clearing power values.");
|
lprintf(LOG_ERR, "Error clearing power values.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13)
|
} else if ((iDRAC_FLAG == IDRAC_12G)
|
||||||
&& (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
&& (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
@ -3025,7 +2988,7 @@ ipmi_get_power_headroom_command(struct ipmi_intf * intf,uint8_t unit)
|
|||||||
if (rsp == NULL) {
|
if (rsp == NULL) {
|
||||||
lprintf(LOG_ERR, "Error getting power headroom status");
|
lprintf(LOG_ERR, "Error getting power headroom status");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13)
|
} else if ((iDRAC_FLAG == IDRAC_12G)
|
||||||
&& (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
&& (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
@ -3159,7 +3122,7 @@ ipmi_get_instan_power_consmpt_data(struct ipmi_intf * intf,
|
|||||||
if (rsp == NULL) {
|
if (rsp == NULL) {
|
||||||
lprintf(LOG_ERR, "Error getting instantaneous power consumption data .");
|
lprintf(LOG_ERR, "Error getting instantaneous power consumption data .");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13)
|
} else if ((iDRAC_FLAG == IDRAC_12G)
|
||||||
&& (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
&& (rsp->ccode == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
@ -3252,7 +3215,7 @@ ipmi_get_avgpower_consmpt_history(struct ipmi_intf * intf,
|
|||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"Error getting average power consumption history data.");
|
"Error getting average power consumption history data.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -3269,7 +3232,7 @@ ipmi_get_avgpower_consmpt_history(struct ipmi_intf * intf,
|
|||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
rdata = (void *)pavgpower;
|
rdata = (void *)pavgpower;
|
||||||
printf("Average power consumption history data"
|
printf("Average power consumption history data"
|
||||||
" :%x %x %x %x %x %x %x %x\n\n",
|
" :%x %x %x %x %x %x %x\n\n",
|
||||||
rdata[0], rdata[1], rdata[2], rdata[3],
|
rdata[0], rdata[1], rdata[2], rdata[3],
|
||||||
rdata[4], rdata[5], rdata[6], rdata[7]);
|
rdata[4], rdata[5], rdata[6], rdata[7]);
|
||||||
}
|
}
|
||||||
@ -3301,7 +3264,7 @@ ipmi_get_peakpower_consmpt_history(struct ipmi_intf * intf,
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
lprintf(LOG_ERR, "Error getting peak power consumption history data.");
|
lprintf(LOG_ERR, "Error getting peak power consumption history data.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -3318,7 +3281,7 @@ ipmi_get_peakpower_consmpt_history(struct ipmi_intf * intf,
|
|||||||
rdata = (void *)pstPeakpower;
|
rdata = (void *)pstPeakpower;
|
||||||
printf("Peak power consmhistory Data : "
|
printf("Peak power consmhistory Data : "
|
||||||
"%x %x %x %x %x %x %x %x %x %x\n "
|
"%x %x %x %x %x %x %x %x %x %x\n "
|
||||||
"%x %x %x %x %x %x %x %x %x %x %x %x %x %x\n\n",
|
"%x %x %x %x %x %x %x %x %x %x %x %x %x\n\n",
|
||||||
rdata[0], rdata[1], rdata[2], rdata[3],
|
rdata[0], rdata[1], rdata[2], rdata[3],
|
||||||
rdata[4], rdata[5], rdata[6], rdata[7],
|
rdata[4], rdata[5], rdata[6], rdata[7],
|
||||||
rdata[8], rdata[9], rdata[10], rdata[11],
|
rdata[8], rdata[9], rdata[10], rdata[11],
|
||||||
@ -3358,7 +3321,7 @@ ipmi_get_minpower_consmpt_history(struct ipmi_intf * intf,
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
lprintf(LOG_ERR, "Error getting peak power consumption history data .");
|
lprintf(LOG_ERR, "Error getting peak power consumption history data .");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -3555,7 +3518,7 @@ ipmi_get_power_cap(struct ipmi_intf * intf, IPMI_POWER_CAP * ipmipowercap)
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
lprintf(LOG_ERR, "Error getting power cap.");
|
lprintf(LOG_ERR, "Error getting power cap.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -3655,7 +3618,7 @@ ipmi_set_power_cap(struct ipmi_intf * intf, int unit, int val)
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
lprintf(LOG_ERR, "Error getting power cap.");
|
lprintf(LOG_ERR, "Error getting power cap.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -3670,7 +3633,7 @@ ipmi_set_power_cap(struct ipmi_intf * intf, int unit, int val)
|
|||||||
}
|
}
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
rdata = (void *)&ipmipowercap;
|
rdata = (void *)&ipmipowercap;
|
||||||
printf("power cap Data :%x %x %x %x %x %x %x %x %x %x %x ",
|
printf("power cap Data :%x %x %x %x %x %x %x %x %x %x ",
|
||||||
rdata[1], rdata[2], rdata[3],
|
rdata[1], rdata[2], rdata[3],
|
||||||
rdata[4], rdata[5], rdata[6], rdata[7],
|
rdata[4], rdata[5], rdata[6], rdata[7],
|
||||||
rdata[8], rdata[9], rdata[10],rdata[11]);
|
rdata[8], rdata[9], rdata[10],rdata[11]);
|
||||||
@ -3735,7 +3698,7 @@ ipmi_set_power_cap(struct ipmi_intf * intf, int unit, int val)
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
lprintf(LOG_ERR, "Error setting power cap");
|
lprintf(LOG_ERR, "Error setting power cap");
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) {
|
} else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
||||||
return -1;
|
return -1;
|
||||||
@ -3897,7 +3860,7 @@ ipmi_get_sd_card_info(struct ipmi_intf * intf) {
|
|||||||
|
|
||||||
sdcardinfoblock = (IPMI_DELL_SDCARD_INFO *) (void *) rsp->data;
|
sdcardinfoblock = (IPMI_DELL_SDCARD_INFO *) (void *) rsp->data;
|
||||||
|
|
||||||
if ((iDRAC_FLAG_12_13)
|
if ((iDRAC_FLAG == IDRAC_12G)
|
||||||
&& (sdcardinfoblock->vflashcompcode == VFL_NOT_LICENSED)) {
|
&& (sdcardinfoblock->vflashcompcode == VFL_NOT_LICENSED)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
"FM001 : A required license is missing or expired");
|
"FM001 : A required license is missing or expired");
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1681
ipmitool/lib/ipmi_fwum.c
Normal file
1681
ipmitool/lib/ipmi_fwum.c
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user