---
name: "ipmi"
section: "4"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd", "openbsd"]
url: "https://new.carta.tech/ipmi"
---

# ipmi(4)

OpenIPMI compatible IPMI interface driver

## NAME

**ipmi** – OpenIPMI compatible IPMI interface driver

## SYNOPSIS

**device ipmi**

To manually specify I/O attachment in */boot/device.hints*: **hint.ipmi.0.at="isa"** **hint.ipmi.0.port="0xCA2"** **hint.ipmi.0.spacing="8"** **hint.ipmi.0.mode="KCS"**

To manually specify memory attachment in */boot/device.hints*: **hint.ipmi.0.at="isa"** **hint.ipmi.0.maddr="0xf0000000"** **hint.ipmi.0.spacing="8"** **hint.ipmi.0.mode="SMIC"**

Meaning of *spacing*:

- 8

  8 bit alignment

- 16

  16 bit alignment

- 32

  32 bit alignment

If the *port* and *spacing* are not specified the interface type default will be used. Only specify either the *port* for I/O access or *maddr* for memory access.

## DESCRIPTION

The IPMI (Intelligent Platform Management Interface) is a standard for monitoring system hardware by permitting generic code to detect and monitor the sensors in a system. The IPMI standard offers watchdog support, an FRU database, and other support extensions. It is currently being adopted by the makers of many single board and embedded system manufacturers.

The **ipmi** driver in FreeBSD is heavily adopted from the standard and Linux driver; however, not all features described in the standard are supported.

The **ipmi** driver implements the power cycling option to [shutdown(8)](/shutdown/8.md) to implement power cycling of the system. The motherboard's BMC must support the chassis device and the optional power cycle subcomand of the chassis control command as described in section 28.3 of the IPMI standard. The length of time the system is off will be at least one second, but may be longer if the power cycle interval has been set (see section 28.9).

## SYSCTL VARIABLES

The following [sysctl(8)](/sysctl/8.md) variables are available:

- *hw.ipmi.cycle\_wait*

  If an IPMI power-cycle reboot hook is configured, wait this long for power-down. (sec)

- *hw.ipmi.hexdump\_send*

  When sending commands to the BMC, log the NetFn and Cmd, and the data sent to and received from the BMC.

- *hw.ipmi.wd\_init\_enable*

  Initialize the BMC watchdog during IPMI driver attachment.

- *hw.ipmi.wd\_pretimeout\_countdown*

  Trigger an interrupt before the BMC watchdog resets the system. (sec)

- *hw.ipmi.wd\_shutdown\_countdown*

  Set the BMC watchdog timer and countdown from here. (sec)

- *hw.ipmi.wd\_startup\_countdown*

  Initial BMC watchdog counter starting value. (sec)

- *hw.ipmi.wd\_timer\_actions*

  What action to take when the BMC watchdog timer expires:

  - 0

    NONE

  - 1

    RESET

  - 2

    POWER\_DOWN

  - 3

    POWER\_CYCLE

## IOCTLS

Sending and receiving messages through the **ipmi** driver requires the use of [ioctl(2)](/ioctl/2.md). The ioctls are used due to the complexity of data sent to and from the device. The [ioctl(2)](/ioctl/2.md) command codes below are defined in ⟨sys/ipmi.h⟩. The third argument to [ioctl(2)](/ioctl/2.md) should be a pointer to the type indicated.

Currently the following ioctls are supported:

- IPMICTL\_RECEIVE\_MSG (*struct ipmi\_recv*)

  Receive a message. Possible error values:

  - \[EAGAIN\]

    No messages are in the process queue.

  - \[EFAULT\]

    An address supplied was invalid.

  - \[EMSGSIZE\]

    The address could not fit in the message buffer and will remain in the buffer.

- IPMICTL\_RECEIVE\_MSG\_TRUNC (*struct ipmi\_recv*)

  Like IPMICTL\_RECEIVE\_MSG but if the message cannot fit into the buffer, it will truncate the contents instead of leaving the data in the buffer.

- IPMICTL\_SEND\_COMMAND (*struct ipmi\_req*)

  Send a message to the interface. Possible error values:

  - \[EFAULT\]

    An address supplied was invalid.

  - \[ENOMEM\]

    Buffers could not be allowed for the command, out of memory.

- IPMICTL\_SET\_MY\_ADDRESS\_CMD (*unsigned int*)

  Set the slave address for source messages.

- IPMICTL\_GET\_MY\_ADDRESS\_CMD (*unsigned int*)

  Get the slave address for source messages.

- IPMICTL\_SET\_MY\_LUN\_CMD (*unsigned int*)

  Set the slave LUN for source messages.

- IPMICTL\_GET\_MY\_LUN\_CMD (*unsigned int*)

  Get the slave LUN for source messages.

### Unimplemented Ioctls

- IPMICTL\_REGISTER\_FOR\_CMD (*struct ipmi\_cmdspec*)

  Register to receive a specific command. Possible error values:

  - \[EFAULT\]

    An supplied address was invalid.

  - \[EBUSY\]

    The network function/command is already in use.

  - \[ENOMEM\]

    Could not allocate memory.

- IPMICTL\_UNREGISTER\_FOR\_CMD (*struct ipmi\_cmdspec*)

  Unregister to receive a specific command. Possible error values:

  - \[EFAULT\]

    An address supplied was invalid.

  - \[ENOENT\]

    The network function/command was not found.

### Stub Only Ioctl

- IPMICTL\_SET\_GETS\_EVENTS\_CMD (*int*)

  Set whether this interface receives events. Possible error values:

  - \[EFAULT\]

    An address supplied was invalid.

## SEE ALSO

[ioctl(2)](/ioctl/2.md), [watchdog(4)](/watchdog/4.md), [reboot(8)](/reboot/8.md), [shutdown(8)](/shutdown/8.md), [watchdog(8)](/watchdog/8.md), [watchdogd(8)](/watchdogd/8.md), [watchdog(9)](/watchdog/9.md)

## HISTORY

The **ipmi** driver first appeared in FreeBSD 6.2.

## AUTHORS

The **ipmi** driver was written by Doug Ambrisko ⟨*ambrisko@FreeBSD.org*⟩. This manual page was written by Tom Rhodes ⟨*trhodes@FreeBSD.org*⟩.

## BUGS

Not all features of the MontaVista driver are supported.

Currently, IPMB and BT modes are not implemented.
