Intelligent Platform Management Interface Driver
|
IPMI is a messaging protocol that defines how to monitor system hardware, control system components, and retrieve hardware event logs. IPMI describes how multiple embedded management controllers collaborate. The latest revision, IPMI v2.0, added standardized console access, called serial-over-LAN (SOL) re-direction, stronger security through AES encryption, and enhanced support for blade and modular systems.
You benefit by using an autonomous management subsystem in an ATCA shelf because the management subsystem is not affected by failures in the main CPU or OS. Thus, a higher level of system manageability is achieved.
In the ATCA architecture, IPMI is a key element for managing system resources. This chapter provides examples of applications that use the IPMI driver on the blade.
This chapter contains the following topics:
IPMI Overview
IPMB is the management bus in an ATCA system. Each blade has a IPMI controller to interface with the IPMB. The Sun Netra CP3xxx blades have an IPMI controller on board to meet the PICMG standard. The Solaris OS IPMI driver is the interface to the IPMI controller on the host or blade.
You need the IPMI driver to communicate to the local IPMI controller or other IPMI clients. For instance, with the IPMI driver, you can:
- Program the blade front panel LEDs.
- Program the watchdog timer in the IPMI controller.
- Receive a message, like a shutdown request, from other IPMI clients (typically, the Shelf Manager).
Operating System Support and IPMI Installation
The IPMI driver is supported on the following configurations:
- Solaris 10 and Solaris 10 1/06 OS on the CP3010 blade
- Solaris 10 and Solaris 10 6/06 OS on the CP3020 blade
- Solaris 10 and Solaris 10 6/06 OS on the CP3060 blade
Each platform requires two packages:
- SUNWctipmi.u and SUNWctipmic on the CP3010 blade
- SUNWctipmi.v and SUNWctipmic on the CP3020 and CP3060 blades
You can obtain these packages from the Oracle Support site:
https://support.oracle.com
To Install the IPMI Driver
|
1. Add the SUNWctipmi.v package:
# pkgadd -d . SUNWctipmi.v
|
2. Add the SUNWctipmic package:
# pkgadd -d . SUNWctipmic
|
3. Reboot the system:
Note - Answer yes to any questions during the installation.
|
IPMI User Interface
For the supported features, the IPMI driver user interface is compatible with the Linux OpenIPMI driver user interface.
The IPMI device node has the following interfaces:
- /dev/ipmidev/0
- ioctl(2)
- IPMICTL_SEND_CMD
- IPMICTL_RECEIVE_MSG
- IPMICTL_RECEIVE_MSG_TRUNC
- IPMICTL_SET_GETS_EVENTS_CMD
The IPMI driver has the following poll(2) flags:
The ipmi.h and ipmi_msgdef.h header files in the /usr/include/sys directory define the interfaces.
IPMI Programming Examples
This section contains two programming examples of how to use the IPMI driver. The first example shows how to get a device ID, and the second example shows how to program the LEDs.
Getting a Device ID
The following example shows how to use the IPMI driver to get a device ID.
EXAMPLE 3-1 IPMI Device ID Example
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioccom.h>
#include <sys/ipmi.h>
char *devnode = "/dev/ipmidev/0";
int
main(int argc, char *argv[])
{
int i, fd, ret = 0;
uchar_t data[60];
struct ipmi_req req;
struct ipmi_recv recv;
struct ipmi_system_interface_addr addr, addr1;
/* open the ipmi device */
if ((fd = open(devnode, O_RDWR)) < 0){
fprintf(stderr, "Can't open ipmi device: %s\n", devnode);
exit (1);
};
addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
addr.channel = 0;
addr.lun = 0;
/* send command */
req.addr = (u_char *)&addr;
req.addr_len = sizeof (addr);
req.msgid = 123;
req.msg.netfn = IPMI_NETFN_APP_REQUEST;
req.msg.cmd = IPMI_GET_DEVICE_ID_CMD;
req.msg.data_len = 0;
req.msg.data = NULL;
req.msgid++;
ret = ioctl(fd, IPMICTL_SEND_COMMAND, (char *)&req);
/* receive the command response */
recv.msg.data = data;
recv.msg.data_len = sizeof (data);
recv.addr = (u_char *)&addr1;
recv.addr_len = sizeof (addr1);
ret = ioctl(fd, IPMICTL_RECEIVE_MSG_TRUNC, &recv);
if (ret != 0) {
perror("Error in ioctl IPMICTL_RECEIVE_MSG_TRUNC: ");
} else {
/*
* Print the packet
*/
printf("Packet:\t\trecv_type = %d; msgid = %d\n",
recv.recv_type, recv.msgid);
printf("Address:\t");
printf("addr_type=0x%x", addr1.addr_type);
printf("; channel=0x%x", (int)addr1.channel);
printf("; lun=0x%x", (int)addr1.lun);
printf("\n");
printf("Msg:\t\t");
printf("netfn=0x%x", recv.msg.netfn);
printf("; cmd=0x%x", recv.msg.cmd);
printf("; data_len=%d", recv.msg.data_len);
printf("\n");
printf("Data:\t\t");
for (i = 0; i < recv.msg.data_len; i++)
printf("%x, ", (int)recv.msg.data[i]);
printf("\n");
}
close(fd);
return(0);
}
|
Programming the LEDs
The following example shows how to use the IPMI driver to program the system’s LEDs.
EXAMPLE 3-2 IPMI LED Programming Example
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* ipmi LED programming examples
*
*
Reference:
Section 3.2.5 "Front Board Face Plate Indicators",
PICMG 3.0 R2.0 AdvancedTCA Base Specification ECN-002, Dated: May 5, 2006
set channel "0x0f"
set luno "0x00"
set msg_id "9"
set netfn "0x2c"
set cmd "0x07"
set data_cnt 6
set group_id "0x00"
set byte1 "$led_id_arg"
set byte2 "$led_func_arg"
set byte3 "$on_duration_arg"
set byte4 "$lamp_color_arg"
set cmd_data "$fru_dev_id_arg $byte1 $byte2 $byte3 $byte4"
*
*/
#pragma ident "@(#)ipmi_led.c 1.1 07/05/09 SMI"
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioccom.h>
#include <sys/ipmi.h>
char *devnode = "/dev/ipmidev/0";
#define _DEMO_TIME 8 /* 8 seconds */
void
demo1(int fd)
{
int ret = 0;
uchar_t data[60];
struct ipmi_req req;
struct ipmi_system_interface_addr addr;
printf("***LED demo1\n");
addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
addr.channel = 0xf;
addr.lun = 0;
/* send command */
req.addr = (u_char *)&addr;
req.addr_len = sizeof (addr);
req.msgid = 9;
req.msg.netfn = 0x2c;
req.msg.cmd = 7;
req.msg.data_len = 6;
req.msg.data = data;
data[0]= 0x0; /* group id */
data[1]= 0x0; /* fru dev id */
data[2]= 0x1; /* led id */
/* led off */
printf("LED 1 (OOS): off\n");
data[3]= 0x0; /* led func */
data[4]= 0x0; /* led duration */
data[5]= 0xf; /* led color */
req.msgid++;
ret = ioctl(fd, IPMICTL_SEND_COMMAND, (char *)&req);
/* led blinks */
printf("LED 1 (OOS): blink every 0.5 second\n");
data[3]= 0x32; /* led off duration */
data[4]= 0x32; /* led on duration */
data[5]= 0xf; /* led color */
req.msgid++;
ret = ioctl(fd, IPMICTL_SEND_COMMAND, (char *)&req);
sleep(_DEMO_TIME);
/* led back to local control */
printf("LED 1 (OOS): restore to local control\n");
data[3]= 0xfc; /* led func */
data[4]= 0x0; /* led duration */
data[5]= 0xf; /* led color */
req.msgid++;
ret = ioctl(fd, IPMICTL_SEND_COMMAND, (char *)&req);
}
void
demo2_sub(int fd, int led_id, int led_func, int led_duration, int led_color)
{
int ret = 0;
uchar_t data[60];
struct ipmi_req req;
struct ipmi_system_interface_addr addr;
addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
addr.channel = 0xf;
addr.lun = 0;
req.addr = (u_char *)&addr;
req.addr_len = sizeof (addr);
req.msgid = 9;
req.msg.netfn = 0x2c;
req.msg.cmd = 7;
req.msg.data_len = 6;
req.msg.data = data;
data[0]= 0x0; /* group id */
data[1]= 0x0; /* fru dev id */
data[2]= led_id; /* led id */
data[3]= led_func; /* led func */
data[4]= led_duration; /* led duration */
data[5]= led_color; /* led color */
req.msgid++;
/* send command */
ret = ioctl(fd, IPMICTL_SEND_COMMAND, (char *)&req);
}
void
demo2(int fd)
{
int led;
printf("***LED demo2\n");
for (led=0; led<3; led++){
/* led off */
printf("LED %d: off\n", led);
demo2_sub(fd, led, 0, 0, 0xf);
/* led blink with default color */
printf("LED %d: slow blink (off=2.5s, on=1s)\n", led);
demo2_sub(fd, led, 0xfa, 0x64, 0xf);
sleep(_DEMO_TIME);
/* led blink with default color */
printf("LED %d: fast blink (off=on=0.2s)\n", led);
demo2_sub(fd, led, 0x14, 0x14, 0xf);
sleep(_DEMO_TIME);
/* led lamp test with default color */
printf("LED %d: lamp test\n", led);
demo2_sub(fd, led, 0xfb, 0xfa, 0xf);
sleep(_DEMO_TIME);
/* led back to local control */
printf("LED %d: restore to local control\n\n", led);
demo2_sub(fd, led, 0xfc, 0x0, 0xf);
}
}
int
main(int argc, char *argv[])
{
int fd;
/* open the ipmi device */
if ((fd = open(devnode, O_RDWR)) < 0){
fprintf(stderr, "Can't open ipmi device: %s\n", devnode);
exit (1);
};
printf("Programming LED demo starting in 5 seconds\n");
sleep(5);
demo1(fd);
demo2(fd);
close(fd);
return(0);
}
|
IPMI Commands
This section lists all IPMI/ATCA commands and Sun OEM commands supported on ATCA blades. References to applicable specifications are provided for more information.
IPMI/ATCA Commands Supported on Sun ATCA Boards
TABLE 3-1 IPMI Global Device Commands, Net Function: Application (0x06/0x07)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Get Device ID
|
0x1
|
All
|
Payload, IPMB
|
|
Cold Reset
|
0x2
|
All
|
Payload, IPMB.
|
The cold reset command resets the IPMC. The node state is retained after the reset; however, issuing this command can have adverse effects on the system. Ref: IPMI 1.5, section 17.3
|
Warm Reset
|
0x3
|
All
|
Payload, IPMB
|
The warm reset command resets the IPMC. The node state is retained after the reset; however, issuing this command can have adverse effects on the system. Ref: IPMI 1.5, section 17.3
|
Get Self Test Results
|
0x4
|
All
|
Payload, IPMB
|
For all boards, this command is supported from R3U1 onwards. In pre-R3U1 releases, this command is not supported.
|
Broadcast ’Get Device ID’
|
0x1
|
All
|
IPMB only
|
This command is used for board discovery purposes on IPMB bus only. It is not to be sent from the payload.
|
TABLE 3-2 BMC Watchdog Timer Commands, Net Function: Application (0x06/0x07)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Reset Watchdog Timer
|
0x22
|
All
|
Payload, IPMB
|
This command starts and pats the watchdog once the watchdog parameters are set using the Set Watchdog Timer command. It must be used after correctly setting the watchdog parameters. Ref: IPMI 1.5, section 21.5
|
Set Watchdog Timer
|
0x24
|
All
|
Payload, IPMB
|
Timer actions ‘pre-timeout interrupt’ and ’power cycle’ are not supported. Ref IPMI 1.5, Section 21.6
|
Get Watchdog Timer
|
0x25
|
All
|
Payload, IPMB
|
Ref IPMI 1.5, Section 21.7
|
TABLE 3-3 BMC Device and Messaging Commands, Net Function: Application, (0x06/0x07)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Send Message
|
0x34
|
All
|
Payload, IPMB
|
Ref IPMI 1.5, section 18.7
|
Master Write-Read
|
0x52
|
All
|
Payload, IPMB
|
The user has to be aware of characteristics of the device being accessed. This command should not be issued addressing IPMI bus. Ref IPMI 1.5, section 18.10.
|
TABLE 3-4 Event Commands, Net Function: Sensor/Event, (0x04/0x05)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Set Event Receiver
|
0x00
|
All
|
Payload, IPMB.
|
This command sets the event receiver’s address and LUN. By default, the event receiver is address 0x20 (that is., ShMM). This address should not be changed, because the events will not get logged. Ref IPMI 1.5, section 23.1 On getting this command, IPMC is supposed to resend the asserted events, which it does except for the IPMC reset event, if supported, on the board. This action is performed to ensure smooth NetConsole operation.
|
Get Event Receiver
|
0x01
|
All
|
Payload, IPMB
|
Ref IPMI 1.5, section 23.2
|
Platform Event
|
0x02
|
All
|
Payload, IPMB
|
This command logs an event in SEL. If IPMC gets this command from payload, it sends it to ShMM for logging in the SEL; however, sending this command from ShMM does not make sense.
|
TABLE 3-5 Sensor Device Commands, Net Function: Sensor/Event, (0x04/0x05)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Get Device SDR Info
|
0x20
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.2
|
Get Device SDR
|
0x21
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.3
|
Reserve Device SDR Repository
|
0x22
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.4
|
Set Sensor Hysteresis
|
0x24
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.6
|
Get Sensor Hysteresis
|
0x25
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.7
|
Set Sensor Threshold
|
0x26
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.8
|
Get Sensor Threshold
|
0x27
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.9
|
Set Sensor Event Enable
|
0x28
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.10
|
Get Sensor Event Enable
|
0x29
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.11
|
Get Sensor Event Status
|
0x2B
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.13
|
Get Sensor Reading
|
0x2D
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 29.14
|
TABLE 3-6 FRU Device Commands, Net Function: Storage, (0xA/0xB)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Get FRU Inventory Area Info
|
0x10
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 28.1
|
Read FRU Data
|
0x11
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 28.2
|
Write FRU Data
|
0x12
|
All
|
Payload, IPMB
|
Ref: IPMI 1.5, section 28.3
|
TABLE 3-7 ATCA Commands, Net Function: ATCA (0x2C/0x2D)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Get PICMG Properties
|
0x00
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-10
|
Get Address Info
|
0x01
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-9
|
FRU Control
|
0x04
|
All.
|
payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-25
|
Get FRU LED Properties
|
0x5
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-27
|
Get LED Color Capabilities
|
0x6
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-28
|
Set FRU LED State
|
0x7
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-29
|
Get FRU LED State
|
0x8
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-30
|
Set IPMB State
|
0x9
|
All.
|
IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-65
|
Set FRU Activation Policy
|
0xA
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-19
|
Get FRU Activation Policy
|
0xB
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-20
|
Set FRU Activation
|
0xC
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-18
|
Get Device Locator Record ID
|
0xD
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-35
|
Set Port State
|
0xE
|
All.
|
IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-54
|
Get Port State
|
0xF
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-55
|
Compute Power Properties
|
0x10
|
All.
|
IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-77
|
Set Power Level
|
0x11
|
All.
|
IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-79
|
Get Power Level
|
0x12
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-78
|
Get IPMB Link info
|
0x18
|
All.
|
Payload, IPMB
|
Ref: PICMG 3.0R2.0ECN002, Section 3-63
|
FRU control capabilities
|
0x1E
|
All.
|
Payload, IPMB
|
The graceful reboot option might be returned as supported in some versions of IPMC firmware, however, in the absence of support in the OS, this feature will not work.
Ref: PICMG 3.0R2.0ECN002, Section 3-24
|
Sun and OEM IPMI Commands
TABLE 3-8 Sun OEM Commands, Net Function: OEM, (0x2E/0x2F)
Command
|
Op Code
|
Platforms Supported
|
Interfaces Supported
|
Comments
|
Set AMC timeout params
|
0xF1
|
CP3220
CP3260
CP3270
T3-1BA
|
Payload, IPMB.
|
This command can be sent from ShMM, Payload, or Debug interface to set the timeout value for AMCs to come up. IPMC does not release the payload reset until all AMCs get to M4 state or until this timeout times out. The timeout value is in seconds. IPMC stores this timeout value in persistent storage, and the value is retained across board resets.
|
Get AMC timeout parameter
|
0xF0
|
CP3220
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command can be sent from ShMM, Payload, or Debug port to read the default AMC timeout value.
|
Set boot page
|
0x81
|
CP3020
CP3060
CP3220
CP3250
CP3260
CP3270
|
Payload, IPMB
|
This command can be sent from ShMM, Payload, or Debug interface to set the BIOS boot page. The default value for the boot page is 0. The value set by the user is stored in SEEPROM. Upon next boot, the same value of the boot page will be used.
|
Get boot page
|
0x82
|
CP3020
CP3060
CP3220
CP3250
CP3260
CP3270
|
Payload, IPMB
|
This command can be sent from ShMM, Payload, or Debug interface to read the boot page settings for BIOS boot.
|
Set front panel reset button state
|
0x83
|
CP3010
CP3220
CP3020
CP3270
|
Payload, IPMB
|
This command can be used by software to change the way the front panel reset is handled by CPLD when this button is pressed. Default on CPLD power up is 10.
|
Get front panel reset button state.
|
0x84
|
CP3220
CP3010
CP3020
CP3270
|
Payload, IPMB
|
This command returns current settings of the front panel reset button handling. By default on CPLD power on, it comes up as 10, (i.e., pressing this button causes POR to CPU).
|
Set IPMC control bits
|
0xE9
|
CP3220
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command gives or takes control to or from IPMC to control various functions that might be controlled by IPMC or by external entities. Users must always perform a read, modify, and write sequence when changing any of the bits in the control byte.
|
Get IPMC control bits
|
0xE8
|
CP3220
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command returns current settings of IPMC control bits. Bit 0 controls the Green LED behavior.
|
Set management port
|
0x9B
|
T3-1BA
|
Payload, IPMB
|
This command routes management port access to the front or rear panel.
|
Get management port
|
0x9C
|
T3-1BA
|
Payload, IPMB
|
This command returns current settings of management port access.
|
Get NIC IPMI PT firmware version
|
0x87
|
CP3010
CP3020
CP3220
|
Payload, IPMB
|
This command returns the version string for IPMI-PT firmware running in the Broadcom NIC chip.
|
Get version
|
0x80
|
CP3270
T3-1BA
|
Payload, IPMB
|
This command returns IPMC firmware version and standby CPLD version. Although this command returns IPMC firmware version with CPLD version, the primary reason for this command is to provide CPLD version for IPMC version. In place of this command, use the IPMI get device ID command.
|
Get Status
|
0x00
|
CP3020
CP3060
CP3220
CP3250
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command returns the current IPMC alert status.
|
Graceful Payload Reset
|
0x11
|
CP3220
CP3250
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command is used to notify the carrier IPMC about completion of payload
shutdown.
|
Set SOL fail over link change timeouts
|
0xE7
|
CP3270
T3-1BA
|
Payload, IPMB
|
This command sets the time for which IPMC waits to switch to second link when primary link fails, and the time it waits to switch back to primary channel if the primary channel link comes back up. Wait times are useful to filter out the link up/down bounces.
|
Get SOL fail over link change timeouts
|
0xE6
|
CP3270
T3-1BA
|
Payload, IPMB
|
This command returns current settings of IPMC control bits. Bit 0 controls the Green LED behavior, and bit 1 controls Fail LED behavior.
|
Set Payload Shutdown Timeout
|
0x16
|
CP3220
CP3250
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command sets the time out value for payload shutdown.
|
Get Payload Shutdown Timeout
|
0x15
|
CP3220
CP3250
CP3260
CP3270
T3-1BA
|
Payload, IPMB
|
This command returns the current value of payload shutdown timeout.
|
Set Thermal Trip
|
E5
|
T3-1BA
|
Payload, IPMB
|
This command enables or disables the thermal trip threshold which determines when to shut down a blade server.
|
Get Thermal Trip
|
0xE4
|
T3-1BA
|
Payload, IPMB
|
This command returns the value of the thermal trip.
|
Set XAUI mux control
|
0x95
|
CP3260
T3-1BA
|
Payload, IPMB
|
This command is used to route the XAUI1 and XAUI2 interfaces to either Zone 2 or Zone 3.
|
Get XAUI mux control
|
0x96
|
CP3260
T3-1BA
|
Payload, IPMB
|
This command returns the current setting for the XAUI1 and XAUI2 interface routing (either Zone 2 or Zone 3) for the board.
|
Tip - The following sections provide more detail about these commands.
|
Set AMC timeout params, Op Code: 0xF1, Net Function: 0x2E
This command can be sent from ShMM, Payload, or Debug interface to set the timeout value for AMCs to come up.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Delay LSB
Byte5: Delay MSB
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
(See IPMI spec for other completion codes)
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Get AMC timeout parameters, Op Code 0xF0, Net Function: 0x2E
This command can be sent from ShMM, Payload, or Debug port to read the default AMC timeout value.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
CB = this is returned if parameter was not set earlier.
(See IPMI spec for other completion codes)
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: Delay LSB
Byte6: Delay MSB
|
Set boot page, Op Code 0x82, Net Function: 0x2E
This command can be sent from ShMM, Payload, or Debug interface to set the BIOS boot page. The default value for the boot page is 0. Bits 7 to 1 should be set to zeroes. The value set by the user is stored in SEEPROM. Upon next boot, the same value of the boot page will be used.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
CB = Parameter not set
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: Boot page value. 0 = page 0, 1 = page 1.
|
Get boot page, Op Code 0x81, Net Function: 0x2E
This command can be sent from ShMM, Payload, or Debug interface to read the BIOS boot page.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Boot page. 0 or 1.
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Set front panel reset button state, Op Code 0x83, Net Function: 0x2e
This command can be used by software to change the way the front panel reset is handled by CPLD when this button is pressed. Default on CPLD power up is 10.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Front Panel Rest button settings.
Bits 7 to 2 = 0
Bits 1 and 0 = Front panel button state.
00 = Reset IPMC and hard reset to system.
01 = NMI to System.
10 = Hard reset to system.
11 = Front panel reset button disabled.
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Get front panel reset button, Op Code 0x84, Net Function: 0x2E
This command returns current settings of the front panel reset button handling. By default on CPLD power on it comes up as 10, i.e., pressing this button causes Power on Reset to CPU.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: Front panel reset button setting.
Bits 7 to 2 = Zeros.
Bits 1 and 0 = Front panel button state.
00 = Reset IPMC and assert POR to CPU.
01 = XIR to CPU.
10 = POR to CPU.
11 = Front panel reset button disabled.
|
Set IPMC control bits, Op Code 0xE9, Net Function: 0x2E
This command can be used to set the configuration of the blade server’s LED and the AMC shutdown behavior.
Note - Users must always perform a read, modify, and write sequence when changing any of the bits in the control byte.
|
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Control byte.
- Bit 0 = LED 2 (green) control bit:
- 1 = IPMC controls green LED.
- 0 = IPMC does not control green LED.
- Bit 1 = LED 1 (amber or red OOS) ontrol bit:
- 1 = IPMC controls LED 1 for default behavior.
- 0 = IPMC does not control LED 1.
- Bit 2 = AMC latch control bit:
- 1 = IPMC initiates shutdown of AMC upon latch opening.
- 0 = IPMC does not initiate shutdown of AMC upon latch opening.
- Bits 3 to 7 = Reserved for future use. Write as is. (See Note)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Note - If an attempt is made to write 0 to any reserved bits (3 to 7), IPMC will reject the command with completion code 0xCC.
|
Get IPMC control bits, Op Code 0xE8, Net Function 0x2E.
This command returns current configuration of the blade server’s LED and the AMC shutdown behavior.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: IPMC control bits.
- Bit 0: LED 2 (green) control bit.
- Bit 1: LED 1 (amber or red OOS) control bit.
- Bit 2: AMC latch control bit.
- Bits 3 - 7: Reserved for future use.
|
Set management port, Op Code 0x9B, Net Function: 0x2E
This command can be used to route management port access to font or rear panel.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F
Byte4: Control byte.
Bits 7 to 1 = Reserved. Write zeros.
Bits 0:
1 => Route port to front (default.
0 => Route port to rear (ARTM).
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F
|
Get management port, Op Code 0x9C, Net Function 0x2E.
This command returns current settings of management port access.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F
Byte5: IPMC control bit.
Bits 7 - 1 : Reserved for future use.
Bits 0:
1 => Route port to front (default.
0 => Route port to rear.
|
Get NIC IPMI PT firmware version, Op Code 0x87, Net Function: 0x2E
This command returns the IPMI PT firmware version string.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
CB = Could not read NIC
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5-20: The version number as ASCII string.
|
Get version, Op Code 0x80, Net Function: 0x2E
This command returns IPMC firmware version and standby CPLD version. Although this command returns IPMC firmware version with CPLD version, the primary reason for this command is to provide CPLD version for IPMC version. In place of this command, use the IPMI get device ID command.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
CC = Invalid data in request
(See IPMI spec for all completion codes.)
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: CPLD version
Byte6: REV1 Byte of IPMC Firmware
Byte7: REV2 Byte of IPMC Firmware
Byte8:
Bit 7 to Bit 1: Reserved
Bit 8 to Bit 1: Reserved
1 => Test release.
0 => Regular release.
Byte9: Reserved for future use.(ignore)
ByteA: Reserved for future use.(ignore)
|
Note - IPMC version is read as low nibble of REV1, high nibble of REV2, and low nibble of REV2.
|
Get Status, Op Code 0x00, Net Function: 0x2E
This command returns the current IPMC alert status.
Op code: 0x00.
Net function: OEM (0x2E)
Request data:
Byte 1: 00
Byte 2: 40
Byte 3: 0A
Response data:
Byte 1 Completion code.
OK = 0
Command not supported = 0xC1
Invalid data in request = 0xCC
Byte 2: 00
Byte 3: 40
Byte 4: 0A
Byte 5:
Bit 0: 0 IPMC control over payload disabled.*
Bits 1,2: IPMC mode.*
Bit 3: Sensor Alert.*
Bit 4: Reset Alert.
Bit 5: Shutdown Alert.
Bit 6: Diagnostic interrupt request.
Bit 7: Graceful reboot request.
Byte 6:
Bits 0-3: Metallic bus 1 events.*
Bits 4-7: Metallic bus 2 events.*
Byte 7:
Bits 0-3: Clock bus 1 events.*
Bits 4-7: Clock bus 2 events.*
Byte 8:
Bits 0-3: Clock bus 3 events.*
Bit 4: Receive message queue alert.*
Bits 5-7: Not applicable.
Byte 9:
Bit 0: Non-Intelligent RTM reset alert.*
Bit 1: Non-Intelligent RTM shut down alert.*
Bit 2: Non-Intelligent RTM diagnostic interrupt alert. *
Bit 3: Non-Intelligent RTM graceful reboot alert.*
Bits 4-7: Not applicable.
* These options are not applicable to this specification.
|
Graceful Payload Reset, Op Code 0x11, Net Function: 0x2E
This command is used to notify the carrier IPMC about completion of payload shutdown. On getting this command from payload and before the shutdown timer has expired, it goes ahead with the follow up action.
Op code: 0x11
Net function: OEM(0x2E)
Request data:
Byte 1: 00
Byte 2: 40
Byte 3: 0A
Byte 4: FRU ID(Optional. Default is 0)
Response data:
Byte 1: Completion code.
00 = OK.
C1 = Command not supported.
CC = Invalid data in request.
Byte 2: 00
Byte 3: 40
Byte 4: 0A
|
Set Payload Shutdown Timeout, Op Code 0x16, Net Function: 0x2E
This command sets the time out value for payload shutdown. On getting a shutdown request, IPMC sends alert to payload to get ready for power shutdown and after this time out, IPMC turns off the power. Value is retained across IPMC resets. Timeout value is in 100 ms tick, that is, a value of 0x32 (50 decimal) means 50 ticks of 100 ms which is 5 seconds.
Op code: 0x16
Net function: OEM(0x2E)
Request data:
Byte 1: 00
Byte 2: 40
Byte 3: 0A
Byte 4: Timeout value LS Byte.
Byte 5: Timeout value MS Byte.
Response data:
Byte 1: Completion code.
00 = OK.
0xC1 = Command not supported.
0xCC = Invalid data in request.
Byte 2: 00
Byte 3: 40
Byte 4: 0A
|
Get Payload Shutdown Timeout, Op Code 0x15, Net Function: 0x2E
This command shall return the current value of payload shutdown timeout. Timeout value is in 100 ms ticks, that is., a value of 0x32 (50 decimal) means 50 ticks of 100 ms which is 5 seconds.
Op code: 0x15.
Net function: OEM (0x2E)
Request data:
Byte 1: 00
Byte 2: 40
Byte 3: 0A
Response data:
Byte 1:Completion code.
OK = 0
Command not supported = 0xC1
Invalid data in request = 0xCC
Byte 2: 00
Byte 3: 40
Byte 4: 0A
Byte 5: Payload shutdown timeout LSB.
Byte 6: Payload shutdown timeout MSB.(
|
Set SOL fail over link change timeouts, Op Code 0xE7, Net Function 0x2E.
This command sets the time for which IPMC waits to switch to second serial over LAN (SOL) link when primary link fails, and the time it waits to switch back to primary channel if the primary channel link comes back up. Wait times are useful to filter out the link up/down bounces.
Wait times are in seconds. For example, a number 10 (0xA) in Byte 4 means IPMC will wait 10 seconds before switching the link to secondary channel. And a number 15(0xf) means IPMC will wait for 15 seconds before switching back to primary channel once it comes back up.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Primary Link down, fail-over wait time.
Byte5: Primary Link up, wait time to switch to primary.
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Get SOL fail over link change timeouts, Op Code 0xE6, Net Function 0x2E.
This command returns current settings of IPMC control bits for serial over LAN (SOL). Bit 0 controls the Green LED behavior, and bit 1 controls Fail LED behavior.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: Primary Link down, fail-over wait time.
Byte6: Primary Link up, wait time to switch to primary.
|
Set Thermal Trip, Op Code E5, Net Function: 0x2E
This command can be used to enable or disable the thermal trip. The thermal trip setting determines if a blade server shuts down because maximum temperature is reached. This feature is available only on the Netra SPARC T3-1BA blade server.
|
Caution - Damage to blades and systems can occur if temperature thresholds are reached and shut down does not occur. Unless the operating situation warrants overriding the default, use the default value.
|
In extreme situations such as operating in a war zone, there may be a requirement by the user to override the maximum temperature thresholds to prevent shutdowns of blade servers. Referred to as “war-zone mode,” users can override thermal trip to keep blades, and subsequently their systems, running, even if they reach maximum temperature thresholds. Sensors will still record the threshold violation event, even when the shut down is disabled.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Control byte.
Bits 7 to 1 = Reserved. Write zeros.
Bits 0:
- 1 => Enable thermal trip (default.
- 0 => Disable thermal trip.
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Get Thermal Trip, Op Code 0xE4, Net Function: 0x2E
This command returns current settings of thermal trip.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: Current state:
- 1 => Thermal trip enabled (default).
- 0 => Thermal trip disabled (war-zone mode).
|
Set XAUI mux control, Op Code 0x95, Net Function: 0x2E
This command can be used to route XAUI1 and XAUI2 interfaces to either Zone 2 or Zone 3. Applicable to Sun Netra CP3260 board only.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Byte4: Control byte.
Bits 7 to 2 = Reserved for future use.Write as zeros.
Bit 1 = 1 => Route XAUI2 to Zone 2
0 => Route XAUI2 to Zone 3
Bit 0 = 1 => Route XAUI1 to Zone 2
0 => Route XAUI1 to Zone 3
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
(See IPMI spec for all completion codes.)
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
|
Get XAUI mux control, Op Code 0x96, Net Function: 0x2E
This command returns the current XAUI1 and XAUI2 interfaces route setting, either Zone 2 or Zone 3. Applicable to Sun Netra CP3260 board only.
Data Bytes:
Request:
Byte1: 00
Byte2: 00
Byte3: 6F or 2A (Sun legacy)
Response:
Byte1: Completion Code
00 = OK
C1 = Command not supported
CC = Invalid data in request
(See IPMI spec for all completion codes.)
Byte2: 00
Byte3: 00
Byte4: 6F or 2A (Sun legacy)
Byte5: Control byte.
Bits 7 to 2 = Reserved for future use.Returned as zeros.
Bits 1 1 => Route XAUI2 to Zone 2.
0 => Route XAUI2 to Zone 3.
Bits 0 1 => Route XAUI1 to Zone 2.
0 => Route XAUI1 to Zone 3.
|
Sun Netra CT900 Server Software Developer’s Guide
|
819-1178-16
|
|
Copyright © 2011, Oracle and/or its affiliates. All rights reserved.