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
-----------

Libfreeipmi is the primary library that most of the FreeIPMI tools are based
upon.  The following describe the sub-sections of the library.

api - The highest level API provided by libfreeipmi.  It abstracts
away the details of inband and outofband protocols from the user.  It
also provides useful error codes for the user to easily interpret IPMI
problems.  'api' is used by most FreeIPMI tools and libraries, such as
bmc-info(8), ipmi-sensors(8), and libipmimonitoring(3).

cmds - Provides fiid templates and 'fill' functions for IPMI
commands.  Also provides macros definining common parameters for
IPMI commands.  The cmds are used by most other portions of
libfreeipmi including the 'api' sub-section and tools such as
ipmipower(8) and ipmiconsole(8).

debug - Provides various packet/record dumping utility functions.
Utilized by the 'api' subsection and by tools such as ipmipower(8) and
ipmiconsole(8).

driver - Provides APIs for in-band IPMI communication.  Currently
supported drivers are KCS, SSIF, and OpenIPMI.  The 'driver'
subsction is used by tools such as bmc-watchdog(8) and the 'api'
sub-section.

fiid - The "FreeIPMI Interface Definition" provides an API used for
the construction/deconstruction of packets in libfreeipmi.  The API
works around fiid-templates, which are then used to create
fiid-objects.  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.  Marshalling, packing, endian, and various other network
issues are handled within 'fiid'.  Fiid objects are used throughout
libfreeipmi, including the 'api' sub-section, 'cmds' sub-sections,
and various tools.

interface - Provides 'assemble' and 'disassemble' functions for
building packets for individual in-band or out-of-band protocols.
Also provides all necessary fiid templates, 'fill' functions, and
other utility functions necessary to communicate on an IPMI
interface.  Utilized by the 'api' sub-section and tools such as
ipmipower(8) and ipmiconsole(8).

locate - Provides an API to probe several standards to find default
values for in-band IPMI communication.  Utilized by the 'api'
sub-section and the ipmi-locate(8) tool.

record-format - Provides macros, fiid-templates, and information on
records used in IPMI.  Utilized by the 'sdr-cache' subsection and
tools like ipmi-sensors(8).

sdr-cache - Provides an API for creating, caching, reading, and
parsing a sensor data repository (SDR).  Utilized by tools such as
ipmi-sensors(8) and ipmimonitoring(8).

spec - Provides macros and arrays for various other definitions and
tables in IPMI.  Utilized by tools such as ipmi-sensors(8).

util - Provides various utility functions for the calculation of keys,
sensor readings, etc.  Utilized by most of the rest of FreeIPMI.

Libipmiconsole
--------------

Libipmiconsole implements a high level serial-over-lan (SOL) API for
remote console access.  It can be used to establish and manage
multiple IPMI 2.0 SOL sessions.  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.

Libipmimonitoring
-----------------

Libipmimonitoring 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 and map IPMI sensor
readings into NOMINAL, WARNING, or CRITICAL states so that monitoring
software may take appropriate actions dependent on sensor readings.
An iterator interface is provided that allows the user to iterate
through sensor values, groups, units, and states.

Libipmidetect
-------------

Libipmidetect implements a high level API for determing which nodes in
a cluster do or do-not support IPMI.  This library is primarily useful
for detecting whe nodes are removed from a cluster for servicing, so
that IPMI applications can avoid unnecessary timeouts.  The library
interacts with the ipmidetectd(8) daemon.


