LINKTYPE_IPMB_LINUX

Packet structure

+-------------------------+
|  Bus number+event flag  |
|        (1 Octet)        |
+-------------------------+
|          Flags          |
|       (4 Octets)        |
+-------------------------+
|    Hardware address     |
|        (1 Octet)        |
+-------------------------+
|         Payload         |
.                         .
.                         .
.                         .

Description

The lower 7 bits of the bus number + event flag field contain the bus number; the upper bit indicates whether the packet is an event or a regular packet—if it's set, the packet is an event.

The flags are in network byte order (big-endian). The interpretation of the flags depends on whether the packet is a regular packet or an event.

If the packet is a regular packet, the flag bits are:

  • 0x00000001 - if set, the packet is a read.

The upper 7 bits of the hardware address field contain the slave address for the packet. The payload is an IPMB packet.

If the packet is an event, the lower-order 16 bits indicate what type of event this is:

  • 0x00000001 - promiscuous mode was enabled;
  • 0x00000002 - promiscuous mode was disabled;
  • 0x00000004 - the I2C controller went online;
  • 0x00000008 - the I2C controller went offline;
  • 0x00000010 - the I2C controller attached to an I2C bus;
  • 0x00000020 - the I2C controller detached from an I2C bus;
  • 0x00000040 - the promiscuous data buffer overflowed, and some data was lost;
  • 0x00000080 - the promiscuous data buffer is no longer full;
  • 0x00000100 - the incoming I2C data buffer overflowed, and some data was lost;
  • 0x00000200 - the incoming I2C data buffer is no longer full;

For the "I2C controller went offline" error, the upper-order 16 bits indicate that:

  • 0x00010000 - the I2C controller is unable to drive data LO;
  • 0x00020000 - the I2C controller is unable to drive data HI;
  • 0x00040000 - the I2C controller is unable to drive clock LO;
  • 0x00080000 - the I2C controller is unable to drive clock HI;
  • 0x00100000 - the I2C controller got a clock low timeout;
  • 0x00200000 - the I2C controller was physically disconnected from the bus;
  • 0x00400000 - an undiagnosed failure occurred;