|
Packit Service |
ed0f68 |
/*
|
|
Packit Service |
ed0f68 |
* Copyright (c) 2014 Pigeon Point Systems. All right reserved
|
|
Packit Service |
ed0f68 |
*
|
|
Packit Service |
ed0f68 |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
ed0f68 |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
ed0f68 |
* are met:
|
|
Packit Service |
ed0f68 |
*
|
|
Packit Service |
ed0f68 |
* Redistribution of source code must retain the above copyright
|
|
Packit Service |
ed0f68 |
* notice, this list of conditions and the following disclaimer.
|
|
Packit Service |
ed0f68 |
*
|
|
Packit Service |
ed0f68 |
* Redistribution in binary form must reproduce the above copyright
|
|
Packit Service |
ed0f68 |
* notice, this list of conditions and the following disclaimer in the
|
|
Packit Service |
ed0f68 |
* documentation and/or other materials provided with the distribution.
|
|
Packit Service |
ed0f68 |
*
|
|
Packit Service |
ed0f68 |
* Neither the name of Pigeon Point Systems, or the names of
|
|
Packit Service |
ed0f68 |
* contributors may be used to endorse or promote products derived
|
|
Packit Service |
ed0f68 |
* from this software without specific prior written permission.
|
|
Packit Service |
ed0f68 |
*
|
|
Packit Service |
ed0f68 |
* This software is provided "AS IS, " without a warranty of any kind.
|
|
Packit Service |
ed0f68 |
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
|
Packit Service |
ed0f68 |
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
|
Packit Service |
ed0f68 |
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
|
Packit Service |
ed0f68 |
* PIGEON POINT SYSTEMS ("PPS") AND ITS LICENSORS SHALL NOT BE LIABLE
|
|
Packit Service |
ed0f68 |
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
|
Packit Service |
ed0f68 |
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
|
Packit Service |
ed0f68 |
* PPS OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
|
Packit Service |
ed0f68 |
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
|
Packit Service |
ed0f68 |
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
|
Packit Service |
ed0f68 |
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
|
Packit Service |
ed0f68 |
* EVEN IF PPS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
Packit Service |
ed0f68 |
*/
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
#include <ipmitool/ipmi_intf.h>
|
|
Packit Service |
ed0f68 |
#include <ipmitool/ipmi_picmg.h>
|
|
Packit Service |
ed0f68 |
#include <ipmitool/ipmi_vita.h>
|
|
Packit Service |
ed0f68 |
#include <ipmitool/ipmi_fru.h>
|
|
Packit Service |
ed0f68 |
#include <ipmitool/ipmi_strings.h>
|
|
Packit Service |
ed0f68 |
#include <ipmitool/log.h>
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Handled VITA 46.11 commands */
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_HELP 0
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_PROPERTIES 1
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_FRUCONTROL 2
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_ADDRINFO 3
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_ACTIVATE 4
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_DEACTIVATE 5
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_POLICY_GET 6
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_POLICY_SET 7
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_LED_PROP 8
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_LED_CAP 9
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_LED_GET 10
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_LED_SET 11
|
|
Packit Service |
ed0f68 |
#define VITA_CMD_UNKNOWN 255
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* VITA 46.11 Site Type strings */
|
|
Packit Service |
ed0f68 |
static struct valstr vita_site_types[] = {
|
|
Packit Service |
ed0f68 |
{ VITA_FRONT_VPX_MODULE, "Front Loading VPX Plug-In Module" },
|
|
Packit Service |
ed0f68 |
{ VITA_POWER_ENTRY, "Power Entry Module" },
|
|
Packit Service |
ed0f68 |
{ VITA_CHASSIS_FRU, "Chassic FRU Information Module" },
|
|
Packit Service |
ed0f68 |
{ VITA_DEDICATED_CHMC, "Dedicated Chassis Manager" },
|
|
Packit Service |
ed0f68 |
{ VITA_FAN_TRAY, "Fan Tray" },
|
|
Packit Service |
ed0f68 |
{ VITA_FAN_TRAY_FILTER, "Fan Tray Filter" },
|
|
Packit Service |
ed0f68 |
{ VITA_ALARM_PANEL, "Alarm Panel" },
|
|
Packit Service |
ed0f68 |
{ VITA_XMC, "XMC" },
|
|
Packit Service |
ed0f68 |
{ VITA_VPX_RTM, "VPX Rear Transition Module" },
|
|
Packit Service |
ed0f68 |
{ VITA_FRONT_VME_MODULE, "Front Loading VME Plug-In Module" },
|
|
Packit Service |
ed0f68 |
{ VITA_FRONT_VXS_MODULE, "Front Loading VXS Plug-In Module" },
|
|
Packit Service |
ed0f68 |
{ VITA_POWER_SUPPLY, "Power Supply" },
|
|
Packit Service |
ed0f68 |
{ VITA_FRONT_VITA62_MODULE, "Front Loading VITA 62 Module\n" },
|
|
Packit Service |
ed0f68 |
{ VITA_71_MODULE, "VITA 71 Module\n" },
|
|
Packit Service |
ed0f68 |
{ VITA_FMC, "FMC\n" },
|
|
Packit Service |
ed0f68 |
{ 0, NULL }
|
|
Packit Service |
ed0f68 |
};
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* VITA 46.11 command help strings */
|
|
Packit Service |
ed0f68 |
static struct valstr vita_help_strings[] = {
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_HELP,
|
|
Packit Service |
ed0f68 |
"VITA commands:\n"
|
|
Packit Service |
ed0f68 |
" properties - get VSO properties\n"
|
|
Packit Service |
ed0f68 |
" frucontrol - FRU control\n"
|
|
Packit Service |
ed0f68 |
" addrinfo - get address information\n"
|
|
Packit Service |
ed0f68 |
" activate - activate a FRU\n"
|
|
Packit Service |
ed0f68 |
" deactivate - deactivate a FRU\n"
|
|
Packit Service |
ed0f68 |
" policy get - get the FRU activation policy\n"
|
|
Packit Service |
ed0f68 |
" policy set - set the FRU activation policy\n"
|
|
Packit Service |
ed0f68 |
" led prop - get led properties\n"
|
|
Packit Service |
ed0f68 |
" led cap - get led color capabilities\n"
|
|
Packit Service |
ed0f68 |
" led get - get led state\n"
|
|
Packit Service |
ed0f68 |
" led set - set led state"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_FRUCONTROL,
|
|
Packit Service |
ed0f68 |
"usage: frucontrol <FRU-ID> <OPTION>\n"
|
|
Packit Service |
ed0f68 |
" OPTION: 0 - Cold Reset\n"
|
|
Packit Service |
ed0f68 |
" 1 - Warm Reset\n"
|
|
Packit Service |
ed0f68 |
" 2 - Graceful Reboot\n"
|
|
Packit Service |
ed0f68 |
" 3 - Issue Diagnostic Interrupt"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_ADDRINFO,
|
|
Packit Service |
ed0f68 |
"usage: addrinfo [<FRU-ID>]"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_ACTIVATE,
|
|
Packit Service |
ed0f68 |
"usage: activate <FRU-ID>"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_DEACTIVATE,
|
|
Packit Service |
ed0f68 |
"usage: deactivate <FRU-ID>"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_POLICY_GET,
|
|
Packit Service |
ed0f68 |
"usage: policy get <FRU-ID>"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_POLICY_SET,
|
|
Packit Service |
ed0f68 |
"usage: policy set <FRU-ID> <MASK> <VALUE>\n"
|
|
Packit Service |
ed0f68 |
" MASK: [3] affect the Default-Activation-Locked Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" [2] affect the Commanded-Deactivation-Ignored Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" [1] affect the Deactivation-Locked Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" [0] affect the Activation-Locked Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" VALUE: [3] value for the Default-Activation-Locked Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" [2] value for the Commanded-Deactivation-Ignored Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" [1] value for the Deactivation-Locked Policy Bit\n"
|
|
Packit Service |
ed0f68 |
" [0] value for the Activation-Locked Policy Bit"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_LED_PROP,
|
|
Packit Service |
ed0f68 |
"usage: led prop <FRU-ID>"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_LED_CAP,
|
|
Packit Service |
ed0f68 |
"usage: led cap <FRU-ID>
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_LED_GET,
|
|
Packit Service |
ed0f68 |
"usage: led get <FRU-ID>
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_LED_SET,
|
|
Packit Service |
ed0f68 |
"usage: led set <FRU-ID> <LED-ID> <FUNCTION> <DURATION> <COLOR>\n"
|
|
Packit Service |
ed0f68 |
" <FRU-ID>\n"
|
|
Packit Service |
ed0f68 |
" <LED-ID> 0-0xFE: Specified LED\n"
|
|
Packit Service |
ed0f68 |
" 0xFF: All LEDs under management control\n"
|
|
Packit Service |
ed0f68 |
" <FUNCTION> 0: LED OFF override\n"
|
|
Packit Service |
ed0f68 |
" 1 - 250: LED blinking override (off duration)\n"
|
|
Packit Service |
ed0f68 |
" 251: LED Lamp Test\n"
|
|
Packit Service |
ed0f68 |
" 252: LED restore to local control\n"
|
|
Packit Service |
ed0f68 |
" 255: LED ON override\n"
|
|
Packit Service |
ed0f68 |
" <DURATION> 1 - 127: LED Lamp Test / on duration\n"
|
|
Packit Service |
ed0f68 |
" <COLOR> 1: BLUE\n"
|
|
Packit Service |
ed0f68 |
" 2: RED\n"
|
|
Packit Service |
ed0f68 |
" 3: GREEN\n"
|
|
Packit Service |
ed0f68 |
" 4: AMBER\n"
|
|
Packit Service |
ed0f68 |
" 5: ORANGE\n"
|
|
Packit Service |
ed0f68 |
" 6: WHITE\n"
|
|
Packit Service |
ed0f68 |
" 0xE: do not change\n"
|
|
Packit Service |
ed0f68 |
" 0xF: use default color"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
VITA_CMD_UNKNOWN,
|
|
Packit Service |
ed0f68 |
"Unknown command"
|
|
Packit Service |
ed0f68 |
},
|
|
Packit Service |
ed0f68 |
{ 0, NULL }
|
|
Packit Service |
ed0f68 |
};
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* check if VITA 46.11 is supported */
|
|
Packit Service |
ed0f68 |
uint8_t
|
|
Packit Service |
ed0f68 |
vita_discover(struct ipmi_intf *intf)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data;
|
|
Packit Service |
ed0f68 |
int vita_avail = 0;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_VSO_CAPABILITIES_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = &msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 1;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data = GROUP_EXT_VITA;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Running Get VSO Capabilities my_addr %#x, "
|
|
Packit Service |
ed0f68 |
"transit %#x, target %#x",
|
|
Packit Service |
ed0f68 |
intf->my_addr, intf->transit_addr, intf->target_addr);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received");
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode == 0xC1) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode == 0xCC) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Invalid data field received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 5) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Invalid response length %d",
|
|
Packit Service |
ed0f68 |
rsp->data_len);
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Invalid group extension %#x",
|
|
Packit Service |
ed0f68 |
rsp->data[0]);
|
|
Packit Service |
ed0f68 |
} else if ((rsp->data[3] & 0x03) != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Unknown VSO Standard %d",
|
|
Packit Service |
ed0f68 |
(rsp->data[3] & 0x03));
|
|
Packit Service |
ed0f68 |
} else if ((rsp->data[4] & 0x0F) != 1) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Unknown VSO Specification Revision %d.%d",
|
|
Packit Service |
ed0f68 |
(rsp->data[4] & 0x0F), (rsp->data[4] >> 4));
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
vita_avail = 1;
|
|
Packit Service |
ed0f68 |
lprintf(LOG_INFO, "Discovered VITA 46.11 Revision %d.%d",
|
|
Packit Service |
ed0f68 |
(rsp->data[4] & 0x0F), (rsp->data[4] >> 4));
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return vita_avail;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
uint8_t
|
|
Packit Service |
ed0f68 |
ipmi_vita_ipmb_address(struct ipmi_intf *intf)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_FRU_ADDRESS_INFO_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = &msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 1;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data = GROUP_EXT_VITA;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received");
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 7) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d",
|
|
Packit Service |
ed0f68 |
rsp->data_len);
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x",
|
|
Packit Service |
ed0f68 |
rsp->data[0]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
return rsp->data[2];
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_getaddr(struct ipmi_intf *intf, int argc, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[2];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_FRU_ADDRESS_INFO_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 2;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
msg_data[1] = 0; /* default FRU ID */
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (argc > 0) {
|
|
Packit Service |
ed0f68 |
/* validate and get FRU Device ID */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) {
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 7) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d",
|
|
Packit Service |
ed0f68 |
rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x",
|
|
Packit Service |
ed0f68 |
rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("Hardware Address : 0x%02x\n", rsp->data[1]);
|
|
Packit Service |
ed0f68 |
printf("IPMB-0 Address : 0x%02x\n", rsp->data[2]);
|
|
Packit Service |
ed0f68 |
printf("FRU ID : 0x%02x\n", rsp->data[4]);
|
|
Packit Service |
ed0f68 |
printf("Site ID : 0x%02x\n", rsp->data[5]);
|
|
Packit Service |
ed0f68 |
printf("Site Type : %s\n", val2str(rsp->data[6],
|
|
Packit Service |
ed0f68 |
vita_site_types));
|
|
Packit Service |
ed0f68 |
if (rsp->data_len > 8) {
|
|
Packit Service |
ed0f68 |
printf("Channel 7 Address: 0x%02x\n", rsp->data[8]);
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_get_vso_capabilities(struct ipmi_intf *intf)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data, tmp;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_VSO_CAPABILITIES_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = &msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 1;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 5) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("VSO Identifier : 0x%02x\n", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
printf("IPMC Identifier : 0x%02x\n", rsp->data[1]);
|
|
Packit Service |
ed0f68 |
printf(" Tier %d\n", (rsp->data[1] & 0x03) + 1);
|
|
Packit Service |
ed0f68 |
printf(" Layer %d\n", ((rsp->data[1] & 0x30) >> 4) + 1);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("IPMB Capabilities : 0x%02x\n", rsp->data[2]);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
tmp = (rsp->data[2] & 0x30) >> 4;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf(" Frequency %skHz\n",
|
|
Packit Service |
ed0f68 |
tmp == 0 ? "100" : tmp == 1 ? "400" : "RESERVED");
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
tmp = rsp->data[2] & 3;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (tmp == 1) {
|
|
Packit Service |
ed0f68 |
printf(" 2 IPMB interfaces supported\n");
|
|
Packit Service |
ed0f68 |
} else if (tmp == 0) {
|
|
Packit Service |
ed0f68 |
printf(" 1 IPMB interface supported\n");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("VSO Standard : %s\n",
|
|
Packit Service |
ed0f68 |
(rsp->data[3] & 0x3) == 0 ? "VITA 46.11" : "RESERVED");
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("VSO Spec Revision : %d.%d\n", rsp->data[4] & 0xf,
|
|
Packit Service |
ed0f68 |
rsp->data[4] >> 4);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("Max FRU Device ID : 0x%02x\n", rsp->data[5]);
|
|
Packit Service |
ed0f68 |
printf("FRU Device ID : 0x%02x\n", rsp->data[6]);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_set_fru_activation(struct ipmi_intf *intf,
|
|
Packit Service |
ed0f68 |
char **argv, unsigned char command)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[3];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_SET_FRU_ACTIVATION_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 3;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
msg_data[2] = command; /* command */
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 1) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("FRU has been successfully %s\n",
|
|
Packit Service |
ed0f68 |
command ? "activated" : "deactivated");
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_get_fru_state_policy_bits(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[2];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_FRU_STATE_POLICY_BITS_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 2;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 2) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("FRU State Policy Bits: %xh\n", rsp->data[1]);
|
|
Packit Service |
ed0f68 |
printf(" Default-Activation-Locked Policy Bit is %d\n",
|
|
Packit Service |
ed0f68 |
rsp->data[1] & 0x08 ? 1 : 0);
|
|
Packit Service |
ed0f68 |
printf(" Commanded-Deactivation-Ignored Policy Bit is %d\n",
|
|
Packit Service |
ed0f68 |
rsp->data[1] & 0x04 ? 1 : 0);
|
|
Packit Service |
ed0f68 |
printf(" Deactivation-Locked Policy Bit is %d\n",
|
|
Packit Service |
ed0f68 |
rsp->data[1] & 0x02 ? 1 : 0);
|
|
Packit Service |
ed0f68 |
printf(" Activation-Locked Policy Bit is %d\n",
|
|
Packit Service |
ed0f68 |
rsp->data[1] & 0x01);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_set_fru_state_policy_bits(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[4];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_SET_FRU_STATE_POLICY_BITS_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 4;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[1], &msg_data[2]) != 0) { /* bits mask */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[2], &msg_data[3]) != 0) { /* bits */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 1) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("FRU state policy bits have been updated\n");
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_get_led_properties(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[2];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_FRU_LED_PROPERTIES_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 2;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 3) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("LED Count: %#x\n", rsp->data[2]);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_get_led_color_capabilities(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[3];
|
|
Packit Service |
ed0f68 |
int i;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_LED_COLOR_CAPABILITIES_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 3;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[1], &msg_data[2]) != 0) { /* LED-ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 4) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("LED Color Capabilities: ");
|
|
Packit Service |
ed0f68 |
for (i = 0; i < 8; i++) {
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & (0x01 << i)) {
|
|
Packit Service |
ed0f68 |
printf("%s, ", led_color_str[i]);
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
putchar('\n');
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("Default LED Color in\n");
|
|
Packit Service |
ed0f68 |
printf(" LOCAL control: %s\n", led_color_str[rsp->data[2]]);
|
|
Packit Service |
ed0f68 |
printf(" OVERRIDE state: %s\n", led_color_str[rsp->data[3]]);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp->data_len == 5) {
|
|
Packit Service |
ed0f68 |
printf("LED flags:\n");
|
|
Packit Service |
ed0f68 |
if (rsp->data[4] & 2) {
|
|
Packit Service |
ed0f68 |
printf(" [HW RESTRICT]\n");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (rsp->data[4] & 1) {
|
|
Packit Service |
ed0f68 |
printf(" [PAYLOAD PWR]\n");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_get_led_state(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[3];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_GET_FRU_LED_STATE_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 3;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[1], &msg_data[2]) != 0) { /* LED-ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 5
|
|
Packit Service |
ed0f68 |
|| ((rsp->data[1] & 0x2) && rsp->data_len < 8)
|
|
Packit Service |
ed0f68 |
|| ((rsp->data[1] & 0x4) && rsp->data_len < 9)) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("LED states: %x\t", rsp->data[1]);
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & 0x1) {
|
|
Packit Service |
ed0f68 |
printf("[LOCAL CONTROL] ");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & 0x2) {
|
|
Packit Service |
ed0f68 |
printf("[OVERRIDE] ");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & 0x4) {
|
|
Packit Service |
ed0f68 |
printf("[LAMPTEST] ");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & 0x8) {
|
|
Packit Service |
ed0f68 |
printf("[HW RESTRICT] ");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
putchar('\n');
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & 1) {
|
|
Packit Service |
ed0f68 |
printf(" Local Control function: %x\t", rsp->data[2]);
|
|
Packit Service |
ed0f68 |
if (rsp->data[2] == 0x0) {
|
|
Packit Service |
ed0f68 |
printf("[OFF]\n");
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[2] == 0xff) {
|
|
Packit Service |
ed0f68 |
printf("[ON]\n");
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
printf("[BLINKING]\n");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
printf(" Local Control On-Duration: %x\n", rsp->data[3]);
|
|
Packit Service |
ed0f68 |
printf(" Local Control Color: %x\t[%s]\n",
|
|
Packit Service |
ed0f68 |
rsp->data[4], led_color_str[rsp->data[4] & 7]);
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* override state or lamp test */
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] & 0x06) {
|
|
Packit Service |
ed0f68 |
printf(" Override function: %x\t", rsp->data[5]);
|
|
Packit Service |
ed0f68 |
if (rsp->data[5] == 0x0) {
|
|
Packit Service |
ed0f68 |
printf("[OFF]\n");
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[5] == 0xff) {
|
|
Packit Service |
ed0f68 |
printf("[ON]\n");
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
printf("[BLINKING]\n");
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
printf(" Override On-Duration: %x\n", rsp->data[6]);
|
|
Packit Service |
ed0f68 |
printf(" Override Color: %x\t[%s]\n",
|
|
Packit Service |
ed0f68 |
rsp->data[7], led_color_str[rsp->data[7] & 7]);
|
|
Packit Service |
ed0f68 |
if (rsp->data[1] == 0x04) {
|
|
Packit Service |
ed0f68 |
printf(" Lamp test duration: %x\n", rsp->data[8]);
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_set_led_state(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[6];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_SET_FRU_LED_STATE_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 6;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[1], &msg_data[2]) != 0) { /* LED-ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[2], &msg_data[3]) != 0) { /* LED function */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[3], &msg_data[4]) != 0) { /* LED on duration */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[4], &msg_data[5]) != 0) { /* LED color */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 1) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("LED state has been updated\n");
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_fru_control(struct ipmi_intf *intf, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
struct ipmi_rs *rsp;
|
|
Packit Service |
ed0f68 |
struct ipmi_rq req;
|
|
Packit Service |
ed0f68 |
unsigned char msg_data[3];
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
memset(&req, 0, sizeof(req));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
req.msg.netfn = IPMI_NETFN_PICMG;
|
|
Packit Service |
ed0f68 |
req.msg.cmd = VITA_FRU_CONTROL_CMD;
|
|
Packit Service |
ed0f68 |
req.msg.data = msg_data;
|
|
Packit Service |
ed0f68 |
req.msg.data_len = 3;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
msg_data[0] = GROUP_EXT_VITA; /* VITA identifier */
|
|
Packit Service |
ed0f68 |
if (is_fru_id(argv[0], &msg_data[1]) != 0) { /* FRU ID */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
if (str2uchar(argv[1], &msg_data[2]) != 0) { /* control option */
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("FRU Device Id: %d FRU Control Option: %s\n", msg_data[1],
|
|
Packit Service |
ed0f68 |
val2str(msg_data[2], picmg_frucontrol_vals));
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
rsp = intf->sendrecv(intf, &req;;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (rsp == NULL) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "No valid response received.");
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->ccode != 0) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid completion code received: %s",
|
|
Packit Service |
ed0f68 |
val2str(rsp->ccode, completion_code_vals));
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data_len < 1) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid response length %d", rsp->data_len);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
} else if (rsp->data[0] != GROUP_EXT_VITA) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_ERR, "Invalid group extension %#x", rsp->data[0]);
|
|
Packit Service |
ed0f68 |
return -1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
printf("FRU Control: ok\n");
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return 0;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
static int
|
|
Packit Service |
ed0f68 |
ipmi_vita_get_cmd(int argc, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
if (argc < 1 || !strncmp(argv[0], "help", 4)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_HELP;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Get VSO Properties */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "properties", 10)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_PROPERTIES;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU Control command */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "frucontrol", 10)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_FRUCONTROL;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Get FRU Address Info command */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "addrinfo", 8)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_ADDRINFO;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Set FRU Activation (activate) command */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "activate", 8)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_ACTIVATE;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Set FRU Activation (deactivate) command */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "deactivate", 10)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_DEACTIVATE;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU State Policy Bits commands */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "policy", 6)) {
|
|
Packit Service |
ed0f68 |
if (argc < 2) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_UNKNOWN;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Get FRU State Policy Bits command */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[1], "get", 3)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_POLICY_GET;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* Set FRU State Policy Bits command */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[1], "set", 3)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_POLICY_SET;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* unknown command */
|
|
Packit Service |
ed0f68 |
return VITA_CMD_UNKNOWN;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU LED commands */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[0], "led", 3)) {
|
|
Packit Service |
ed0f68 |
if (argc < 2) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_UNKNOWN;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU LED Get Properties */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[1], "prop", 4)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_LED_PROP;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU LED Get Capabilities */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[1], "cap", 3)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_LED_CAP;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU LED Get State */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[1], "get", 3)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_LED_GET;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* FRU LED Set State */
|
|
Packit Service |
ed0f68 |
if (!strncmp(argv[1], "set", 3)) {
|
|
Packit Service |
ed0f68 |
return VITA_CMD_LED_SET;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* unknown command */
|
|
Packit Service |
ed0f68 |
return VITA_CMD_UNKNOWN;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
/* unknown command */
|
|
Packit Service |
ed0f68 |
return VITA_CMD_UNKNOWN;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
int
|
|
Packit Service |
ed0f68 |
ipmi_vita_main (struct ipmi_intf *intf, int argc, char **argv)
|
|
Packit Service |
ed0f68 |
{
|
|
Packit Service |
ed0f68 |
int rc = -1, show_help = 0;
|
|
Packit Service |
ed0f68 |
int cmd = ipmi_vita_get_cmd(argc, argv);
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
switch (cmd) {
|
|
Packit Service |
ed0f68 |
case VITA_CMD_HELP:
|
|
Packit Service |
ed0f68 |
cmd = ipmi_vita_get_cmd(argc - 1, &argv[1]);
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
rc = 0;
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_PROPERTIES:
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_get_vso_capabilities(intf);
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_FRUCONTROL:
|
|
Packit Service |
ed0f68 |
if (argc > 2) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_fru_control(intf, &argv[1]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_ADDRINFO:
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_getaddr(intf, argc - 1, &argv[1]);
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_ACTIVATE:
|
|
Packit Service |
ed0f68 |
if (argc > 1) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_set_fru_activation(intf, &argv[1], 1);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_DEACTIVATE:
|
|
Packit Service |
ed0f68 |
if (argc > 1) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_set_fru_activation(intf, &argv[1], 0);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_POLICY_GET:
|
|
Packit Service |
ed0f68 |
if (argc > 2) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_get_fru_state_policy_bits(intf,
|
|
Packit Service |
ed0f68 |
&argv[2]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_POLICY_SET:
|
|
Packit Service |
ed0f68 |
if (argc > 4) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_set_fru_state_policy_bits(intf,
|
|
Packit Service |
ed0f68 |
&argv[2]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_LED_PROP:
|
|
Packit Service |
ed0f68 |
if (argc > 2) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_get_led_properties(intf, &argv[2]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_LED_CAP:
|
|
Packit Service |
ed0f68 |
if (argc > 3) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_get_led_color_capabilities(intf,
|
|
Packit Service |
ed0f68 |
&argv[2]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_LED_GET:
|
|
Packit Service |
ed0f68 |
if (argc > 3) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_get_led_state(intf, &argv[2]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
case VITA_CMD_LED_SET:
|
|
Packit Service |
ed0f68 |
if (argc > 6) {
|
|
Packit Service |
ed0f68 |
rc = ipmi_vita_set_led_state(intf, &argv[2]);
|
|
Packit Service |
ed0f68 |
} else {
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
default:
|
|
Packit Service |
ed0f68 |
lprintf(LOG_NOTICE, "Unknown command");
|
|
Packit Service |
ed0f68 |
cmd = VITA_CMD_HELP;
|
|
Packit Service |
ed0f68 |
show_help = 1;
|
|
Packit Service |
ed0f68 |
break;
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
if (show_help) {
|
|
Packit Service |
ed0f68 |
lprintf(LOG_NOTICE, "%s", val2str(cmd, vita_help_strings));
|
|
Packit Service |
ed0f68 |
}
|
|
Packit Service |
ed0f68 |
|
|
Packit Service |
ed0f68 |
return rc;
|
|
Packit Service |
ed0f68 |
}
|