CHAPTER 3. IPMI INTERFACES
System Interface to LAN
TBD - write this, use the formats described in the send/receive message commands.
IPMB provides the main channel for transferring messages around an IPMI system. It is a message bus that works somewhat like Ethernet, it is a CSMA (carrier-sense multiple access) system. It does check to see if another sender is transmitting before sending, and will wait for that sender to complete before starting to transmit. However, it does not have collision detection; so if two MCs attempt to transmit at the same time, both messages will be lost. Because of this, IPMB does not scale very well; careful use needs to be made of the bandwith on the bus.
The format of an IPMB message of n bytes is:
Destination IPMB address Bits 0-1 - Destination LUN
Bits 2-7 - NetFN Checksum for bytes 0-1
Source IPMB address Bits 0-1 - Source LUN
Bits 2-7 - Sequence Number Command
6 .. n-2 n-1
Message Contents Checksum for the whole message
Note that for commands, the “destination LUN” will be called the “responder LUN” and the “source LUN” will be called the “requester LUN.” For responses, the “destination LUN” will be called the “requester LUN” and the “source LUN” will be called the “responder LUN.” IPMB is a peer-to-peer protocol, but there is a strong master-slave sentiment in IPMI.
Unfortunately, IPMI does not have any type of routing handling or transparency of messages. To send a message out on the IPMB, you encapsulate the entire IPMB message in a Send Message command and send it over the proper channel.
Since IPMB can lose messages, the OpenIPMI device driver implements a resend mechanism on commands sent over IPMB; if a response is not seen withing a given period of time, the command will be resent. This will be done a few times before an error is returned.
One special type of message is the broadcast IPMB message. This message is exactly like a normal IPMB message, but it has a 0 byte prepended to the message. This can only be a Get Device Id command. It is used to discover management controllers in the system. Broadcast is a really bad name, because it will not actually broadcast, it will go to the IPMB address is the second byte of the message. This is used for discovery because it will not have any effect on I2C devices on the bus, but IPMI devices will do a normal