C H A P T E R  3

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:


Operating System Support and IPMI Installation

The IPMI driver is supported on the following configurations:

Each platform requires two packages:

You can obtain these packages from the Oracle Support site:

https://support.oracle.com


procedure icon  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:


# reboot -- -rv



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:

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 icon 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.