go-ipmi is a pure golang native IPMI library. It DOES NOT wraps ipmitool
.
import (
"fmt"
"github.com/bougou/go-ipmi"
)
func main() {
host := "10.0.0.1"
port := 623
username := "root"
password := "123456"
client, err := ipmi.NewClient(host, port, username, password)
if err != nil {
panic(err)
}
// you can optionally open debug switch
// client.WithDebug(true)
// Connect will create an authenticated session for you.
if err := client.Connect(); err != nil {
panic(err)
}
// Now you can execute other IPMI commands that need authentication.
res, err := client.GetDeviceID()
if err != nil {
panic(err)
}
fmt.Println(res.Format())
selEntries, err := client.GetSELEntries(0)
if err != nil {
panic(err)
}
fmt.Println(ipmi.FormatSELs(selEntries, nil))
}
Functions Comparision with ipmitool
More is ongoing ...
IPM Device Global Commands
Note: All IPMI commands are implemented as methods of the ipmi.Client
struct.
Method |
Status |
corresponding ipmitool usage |
GetDeviceID |
√ |
mc info |
ColdReset |
√ |
mc reset cold |
WarmReset |
√ |
mc reset warm |
GetSelfTestResults |
√ |
mc selftest |
ManufacturingTestOn |
√ |
|
SetACPIPowerState |
√ |
|
GetACPIPowerState |
√ |
|
GetDeviceGUID |
√ |
|
GetNetFnSupport |
√ |
|
GetCommandSupport |
√ |
|
GetCommandSubfunctionSupport |
|
|
GetConfigurableCommands |
√ |
|
GetConfigurableCommandSubfunctions |
|
|
SetCommandEnables |
|
|
GetCommandEnables |
√ |
|
GetCommandSubfunctionsEnables |
√ |
|
GetSubfunctionsEnables |
|
|
GetOEMNetFnIanaSupport |
|
|
BMC Watchdog Timer Commands
Method |
Status |
corresponding ipmitool usage |
ResetWatchdogTimer |
|
|
SetWatchdogTimer |
|
|
GetWatchdogTimer |
|
|
BMC Device and Messaging Commands
Method |
Status |
corresponding ipmitool usage |
SetBMCGlobalEnables |
√ |
|
GetBMCGlobalEnables |
√ |
|
ClearMessageFlags |
√ |
|
GetMessageFlags |
√ |
|
EnableMessageChannelReceive |
√ |
|
GetMessage |
√ |
|
SendMessage |
√ |
|
ReadEventMessageBuffer |
√ |
|
GetBTInterfaceCapabilities |
|
|
GetSystemGUID |
√ |
mc guid |
SetSystemInfoParameters |
|
|
GetSystemInfoParameters |
|
|
GetChannelAuthCapabilities |
√ |
|
GetSessionChallenge |
√ |
|
ActivateSession |
√ |
|
SetSessionPrivilegeLevel |
√ |
|
CloseSession |
√ |
|
GetSessionInfo |
√ |
session info |
GetAuthCode |
√ |
|
SetChannelAccess |
√ |
channel setaccess |
GetChannelAccess |
√ |
channel info/getaccess |
GetChannelInfo |
√ |
channel info |
SetUserAccess |
√ |
|
GetUserAccess |
√ |
user summary |
GetUsers (*) |
√ |
user list |
SetUsername |
√ |
user set name |
DisableUser (*) |
√ |
user disable |
EnableUser (*) |
√ |
user enable |
GetUsername |
√ |
|
SetUserPassword |
√ |
user set password |
TestUserPassword(*) |
√ |
user test |
ActivatePayload |
|
|
DeactivatePayload |
|
|
GetPayloadActivationStatus |
|
|
GetPayloadInstanceInfo |
|
|
SetUserPayloadAccess |
|
|
GetUserPayloadAccess |
|
|
GetChannelPayloadSupport |
|
|
GetChannelPayloadVersion |
|
|
GetChannelOEMPayloadInfo |
|
|
MasterWriteRead |
|
|
GetChannelCipherSuites |
√ |
|
SuspendOrResumeEncryption |
|
|
SetChannelCipherSuites |
|
|
GetSystemInterfaceCapabilities |
√ |
|
Method |
Status |
corresponding ipmitool usage |
GetChassisCapabilities |
√ |
|
GetChassisStatus |
√ |
chassis status |
ChassisControl |
√ |
chassis power on/off/cycle/reset/diag/soft |
ChassisReset |
|
|
ChassisIdentify |
√ |
chassis identify |
SetChassisCapabilities |
√ |
|
SetPowerRestorePolicy |
√ |
chassis policy always-on/previous/always-off |
GetSystemRestartCause |
√ |
chassis restart_cause |
SetSystemBootOptions |
√ |
|
GetSystemBootOptions |
√ |
|
SetFrontPanelEnables |
√ |
|
SetPowerCycleInterval |
√ |
|
GetPOHCounter |
|
|
Method |
Status |
corresponding ipmitool usage |
SetEventReceiver |
|
|
GetEventReceiver |
|
|
EventMessage |
|
|
PEF and Alerting Commands
Method |
Status |
corresponding ipmitool usage |
GetPefCapabilities |
|
|
ArmPefPostponeTimer |
|
|
SetPefConfigParameters |
|
|
GetPefConfigParameters |
|
|
SetLastProcessedEventId |
|
|
GetLastProcessedEventId |
|
|
AlertImmediate |
|
|
PetAck |
|
|
Method |
Status |
corresponding ipmitool usage |
GetDeviceSDRInfo |
√ |
|
GetDeviceSDR |
√ |
|
ReserveDeviceSDRRepo |
√ |
|
GetSensorReadingFactors |
√ |
|
SetSensorHysteresis |
√ |
|
GetSensorHysteresis |
√ |
|
SetSensorThresholds |
√ |
|
GetSensorThresholds |
√ |
|
SetSensorEventEnable |
|
|
GetSensorEventEnable |
√ |
|
RearmSensorEvents |
|
|
GetSensorEventStatus |
√ |
|
GetSensorReading |
√ |
|
SetSensorType |
√ |
|
GetSensorType |
√ |
|
SetSensorReadingAndEventStatus |
√ |
|
Method |
Status |
corresponding ipmitool usage |
GetFRUInventoryAreaInfo |
√ |
|
ReadFRUData |
√ |
|
WriteFRUData |
√ |
|
Method |
Status |
corresponding ipmitool usage |
GetSDRRepoInfo |
√ |
sdr info |
GetSDRRepoAllocInfo |
√ |
sdr info |
ReserveSDRRepo |
|
|
GetSDR |
√ |
sdr get |
GetSDRs (*) |
√ |
sdr list/elist |
AddSDR |
|
|
PartialAddSDR |
|
|
DeleteSDR |
|
|
ClearSDRRepo |
|
|
GetSDRRepoTime |
|
|
SetSDRRepoTime |
|
|
EnterSDRRepoUpateMode |
|
|
ExitSDRRepoUpdateMode |
|
|
RunInitializationAgent |
|
|
Method |
Status |
corresponding ipmitool usage |
GetSELInfo |
√ |
sel info |
GetSELAllocInfo |
√ |
sel info |
ReserveSEL |
√ |
|
GetSELEntry |
√ |
|
AddSELEntry |
|
|
PartialAddSELEntry |
|
|
DeleteSELEntry |
|
|
ClearSEL |
√ |
sel clear |
GetSELTime |
|
|
SetSELTime |
|
|
GetAuxLogStatus |
|
|
SetAuxLogStatus |
|
|
GetSELTimeUtcOffset |
|
|
SetSELTimeUtcOffset |
|
|
Method |
Status |
corresponding ipmitool usage |
SetLanConfigParams |
|
|
GetLanConfigParams |
√ |
|
SuspendARPs |
√ |
|
GetIpStatistics |
√ |
|
Serial/Modem Device Commands
Method |
Status |
corresponding ipmitool usage |
SetSerialConfig |
|
|
GetSerialConfig |
|
|
SetSerialMux |
|
|
GetTapResponseCodes |
|
|
SetPPPTransmitData |
|
|
GetPPPTransmitData |
|
|
SendPPPPacket |
|
|
GetPPPReceiveData |
|
|
SerialConnectionActive |
|
|
Callback |
|
|
SetUserCallbackOptions |
|
|
GetUserCallbackOptions |
|
|
SetSerialRoutingMux |
|
|
SolActivating |
|
|
GetSolConfigParams |
|
|
SetSolConfigParams |
|
|
Command Forwarding Commands
Method |
Status |
corresponding ipmitool usage |
Fowarded |
|
|
SetForwarded |
|
|
GetForwarded |
|
|
EnableForwarded |
|
|
Bridge Management Commands (ICMB)
Method |
Status |
corresponding ipmitool usage |
GetBridgeState |
|
|
SetBridgeState |
|
|
GetICMBAddress |
|
|
SetICMBAddress |
|
|
SetBridgeProxyAddress |
|
|
GetBridgeStatistics |
|
|
GetICMBCapabilities |
|
|
ClearBridgeStatistics |
|
|
GetBridgeProxyAddress |
|
|
GetICMBConnectorInfo |
|
|
GetICMBConnectionID |
|
|
SendICMBConnectionID |
|
|
Discovery Commands (ICMB)
Method |
Status |
corresponding ipmitool usage |
PrepareForDiscovery |
|
|
GetAddresses |
|
|
SetDiscovered |
|
|
GetChassisDeviceId |
|
|
SetChassisDeviceId |
|
|
Method |
Status |
corresponding ipmitool usage |
BridgeRequest |
|
|
BridgeMessage |
|
|
Method |
Status |
corresponding ipmitool usage |
GetEventCount |
|
|
SetEventDestination |
|
|
SetEventReceptionState |
|
|
SendICMBEventMessage |
|
|
GetEventDestination |
|
|
GetEventReceptionState |
|
|
Method |
Status |
corresponding ipmitool usage |
ErrorReport |
|
|