FreeIPMI Libraries by Albert Chu chu11@llnl.gov The following is a short summary of the libraries and APIs available for use in FreeIPMI. Libfreeipmi ----------- This is the primary library that most of the FreeIPMI tools are based upon. There are various sub-sections and APIs in this library: fiid - The "FreeIPMI Interface Definition" is an API used for the construction/deconstruction of packets in libfreeipmi. The API works primarily around fiid-templates. Fiid-templates are used to describe packets through a string-name to bit-field mapping. The API allows users to read/write fields in an object using the string to bit-field mapping. In some cases (such as when IPMI over LAN packets are needed), multiple fiid objects must be assembled/disassembled together to/from a single packet. This is done via a number of 'assemble' or 'disassemble' functions within libfreeipmi. fill - A large number of "fill" functions are available to make it easier for the user to fill fiid objects with appropriate IPMI data. The fill functions cover most of the sections and packets in the IPMI specification. driver - Several IPMI in-band driver APIs are provided. Most notably supported are the KCS, SSIF, and OpenIPMI driver APIs. locate - The locate API allows users to probe for device addresses and other information on the motherboard. udm - The "Unified Driver Model" is a higher level API that tries to hide the underlying driver (i.e. KCS vs. SSIF vs. LAN) away from higher level IPMI functions (i.e. Get Sensor Reading). utility - There are a large number of utility functions in the library for the calculation of keys, sensor readings, etc. There are also arrays and functions to aid developers in mapping integers to their appropriate string mapping (i.e. 0x01 = "Temperature", 0x02 = "Voltage"). Libipmiconsole -------------- This library implements a high level serial-over-lan (SOL) API for remote console access. The goal of this library is to abstract away all of the underlying IPMI/SOL details away from the user into a relatively simple file descriptor interface. Initial attempts were made to create a TCP socket like interface, however there were limitations on mapping IPMI like connections to a TCP like interface. For example, TCP non-blocking connection semantics could not be met reliably and portably. IPMI error conditions could not be mapped into TCP error conditions as well. Libipmimonitoring ----------------- This library implements a high level sensor monitoring API for IPMI sensors. The goal of this library is to abstract away all of the underlying IPMI details away from the user. An iterator interface is provided that allows the user to iterate through sensor values, groups, units, and states.