/*****************************************************************************\ * $Id: ipmi_monitoring.h,v 1.69 2010-07-22 21:49:00 chu11 Exp $ ***************************************************************************** * Copyright (C) 2007-2012 Lawrence Livermore National Security, LLC. * Copyright (C) 2006-2007 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). * Written by Albert Chu * UCRL-CODE-222073 * * This file is part of Ipmimonitoring, an IPMI sensor monitoring * library. For details, see http://www.llnl.gov/linux/. * * Ipmimonitoring is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * Ipmimonitoring is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with Ipmimonitoring. If not, see . \*****************************************************************************/ #ifndef IPMI_MONITORING_H #define IPMI_MONITORING_H #ifdef __cplusplus extern "C" { #endif /* * Libipmimonitoring version * * MAJOR - Incremented when interfaces are changed or removed. * Interfaces may be binary incompatible. When incremented, MINOR * and PATCH are zeroed. * * MINOR - Incremented when interfaces are added. Interfaces are * binary compatible with older minor versions. When incremented, * PATCH is zeroed. * * PATCH - Incremented when interfaces are not changed. Typically * incremented due to bug fixes or minor features. Interfaces are * forward and backward compatible to other PATCH versions. */ #define LIBIPMIMONITORING_VERSION_MAJOR 1 #define LIBIPMIMONITORING_VERSION_MINOR 0 #define LIBIPMIMONITORING_VERSION_PATCH 6 enum ipmi_monitoring_error_codes { IPMI_MONITORING_ERR_SUCCESS = 0, IPMI_MONITORING_ERR_CTX_NULL = 1, IPMI_MONITORING_ERR_CTX_INVALID = 2, IPMI_MONITORING_ERR_PARAMETERS = 3, IPMI_MONITORING_ERR_PERMISSION = 4, IPMI_MONITORING_ERR_LIBRARY_UNINITIALIZED = 5, IPMI_MONITORING_ERR_SEL_CONFIG_FILE_DOES_NOT_EXIST = 6, IPMI_MONITORING_ERR_SEL_CONFIG_FILE_PARSE = 7, IPMI_MONITORING_ERR_SENSOR_CONFIG_FILE_DOES_NOT_EXIST = 8, IPMI_MONITORING_ERR_SENSOR_CONFIG_FILE_PARSE = 9, IPMI_MONITORING_ERR_SDR_CACHE_PERMISSION = 10, IPMI_MONITORING_ERR_SDR_CACHE_FILESYSTEM = 11, IPMI_MONITORING_ERR_HOSTNAME_INVALID = 12, IPMI_MONITORING_ERR_SENSOR_NOT_FOUND = 13, IPMI_MONITORING_ERR_NO_SEL_RECORDS = 14, IPMI_MONITORING_ERR_SEL_RECORDS_LIST_END = 15, IPMI_MONITORING_ERR_SEL_RECORD_DATA_NOT_AVAILABLE = 16, IPMI_MONITORING_ERR_NO_SENSOR_READINGS = 17, IPMI_MONITORING_ERR_SENSOR_READINGS_LIST_END = 18, IPMI_MONITORING_ERR_CONNECTION_TIMEOUT = 19, IPMI_MONITORING_ERR_SESSION_TIMEOUT = 20, IPMI_MONITORING_ERR_USERNAME_INVALID = 21, IPMI_MONITORING_ERR_PASSWORD_INVALID = 22, IPMI_MONITORING_ERR_PASSWORD_VERIFICATION_TIMEOUT = 23, IPMI_MONITORING_ERR_K_G_INVALID = 24, IPMI_MONITORING_ERR_PRIVILEGE_LEVEL_INSUFFICIENT = 25, IPMI_MONITORING_ERR_PRIVILEGEL_LEVEL_CANNOT_BE_OBTAINED = 26, IPMI_MONITORING_ERR_AUTHENTICATION_TYPE_UNAVAILABLE = 27, IPMI_MONITORING_ERR_IPMI_2_0_UNAVAILABLE = 28, IPMI_MONITORING_ERR_CIPHER_SUITE_ID_UNAVAILABLE = 29, IPMI_MONITORING_ERR_CALLBACK_ERROR = 30, IPMI_MONITORING_ERR_BMC_BUSY = 31, IPMI_MONITORING_ERR_OUT_OF_MEMORY = 32, IPMI_MONITORING_ERR_IPMI_ERROR = 33, IPMI_MONITORING_ERR_SYSTEM_ERROR = 34, IPMI_MONITORING_ERR_INTERNAL_ERROR = 35, IPMI_MONITORING_ERR_ERRNUMRANGE = 36, }; enum ipmi_monitoring_state { IPMI_MONITORING_STATE_NOMINAL = 0x00, IPMI_MONITORING_STATE_WARNING = 0x01, IPMI_MONITORING_STATE_CRITICAL = 0x02, IPMI_MONITORING_STATE_UNKNOWN = 0x03, }; enum ipmi_monitoring_sel_record_type_class { IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD = 0x00, IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD = 0x01, IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_NON_TIMESTAMPED_OEM_RECORD = 0x02, IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_UNKNOWN = 0x03, }; enum ipmi_monitoring_sensor_type { IPMI_MONITORING_SENSOR_TYPE_RESERVED = 0x00, IPMI_MONITORING_SENSOR_TYPE_TEMPERATURE = 0x01, IPMI_MONITORING_SENSOR_TYPE_VOLTAGE = 0x02, IPMI_MONITORING_SENSOR_TYPE_CURRENT = 0x03, IPMI_MONITORING_SENSOR_TYPE_FAN = 0x04, IPMI_MONITORING_SENSOR_TYPE_PHYSICAL_SECURITY = 0x05, IPMI_MONITORING_SENSOR_TYPE_PLATFORM_SECURITY_VIOLATION_ATTEMPT = 0x06, IPMI_MONITORING_SENSOR_TYPE_PROCESSOR = 0x07, IPMI_MONITORING_SENSOR_TYPE_POWER_SUPPLY = 0x08, IPMI_MONITORING_SENSOR_TYPE_POWER_UNIT = 0x09, IPMI_MONITORING_SENSOR_TYPE_COOLING_DEVICE = 0x0A, IPMI_MONITORING_SENSOR_TYPE_OTHER_UNITS_BASED_SENSOR = 0x0B, IPMI_MONITORING_SENSOR_TYPE_MEMORY = 0x0C, IPMI_MONITORING_SENSOR_TYPE_DRIVE_SLOT = 0x0D, IPMI_MONITORING_SENSOR_TYPE_POST_MEMORY_RESIZE = 0x0E, IPMI_MONITORING_SENSOR_TYPE_SYSTEM_FIRMWARE_PROGRESS = 0x0F, IPMI_MONITORING_SENSOR_TYPE_EVENT_LOGGING_DISABLED = 0x10, IPMI_MONITORING_SENSOR_TYPE_WATCHDOG1 = 0x11, IPMI_MONITORING_SENSOR_TYPE_SYSTEM_EVENT = 0x12, IPMI_MONITORING_SENSOR_TYPE_CRITICAL_INTERRUPT = 0x13, IPMI_MONITORING_SENSOR_TYPE_BUTTON_SWITCH = 0x14, IPMI_MONITORING_SENSOR_TYPE_MODULE_BOARD = 0x15, IPMI_MONITORING_SENSOR_TYPE_MICROCONTROLLER_COPROCESSOR = 0x16, IPMI_MONITORING_SENSOR_TYPE_ADD_IN_CARD = 0x17, IPMI_MONITORING_SENSOR_TYPE_CHASSIS = 0x18, IPMI_MONITORING_SENSOR_TYPE_CHIP_SET = 0x19, IPMI_MONITORING_SENSOR_TYPE_OTHER_FRU = 0x1A, IPMI_MONITORING_SENSOR_TYPE_CABLE_INTERCONNECT = 0x1B, IPMI_MONITORING_SENSOR_TYPE_TERMINATOR = 0x1C, IPMI_MONITORING_SENSOR_TYPE_SYSTEM_BOOT_INITIATED = 0x1D, IPMI_MONITORING_SENSOR_TYPE_BOOT_ERROR = 0x1E, IPMI_MONITORING_SENSOR_TYPE_OS_BOOT = 0x1F, IPMI_MONITORING_SENSOR_TYPE_OS_CRITICAL_STOP = 0x20, IPMI_MONITORING_SENSOR_TYPE_SLOT_CONNECTOR = 0x21, IPMI_MONITORING_SENSOR_TYPE_SYSTEM_ACPI_POWER_STATE = 0x22, IPMI_MONITORING_SENSOR_TYPE_WATCHDOG2 = 0x23, IPMI_MONITORING_SENSOR_TYPE_PLATFORM_ALERT = 0x24, IPMI_MONITORING_SENSOR_TYPE_ENTITY_PRESENCE = 0x25, IPMI_MONITORING_SENSOR_TYPE_MONITOR_ASIC_IC = 0x26, IPMI_MONITORING_SENSOR_TYPE_LAN = 0x27, IPMI_MONITORING_SENSOR_TYPE_MANAGEMENT_SUBSYSTEM_HEALTH = 0x28, IPMI_MONITORING_SENSOR_TYPE_BATTERY = 0x29, IPMI_MONITORING_SENSOR_TYPE_SESSION_AUDIT = 0x2A, IPMI_MONITORING_SENSOR_TYPE_VERSION_CHANGE = 0x2B, IPMI_MONITORING_SENSOR_TYPE_FRU_STATE = 0x2C, /* 0x2D - 0xBF - RESERVED */ /* 0xC0 - 0xFF - OEM sensor types */ IPMI_MONITORING_SENSOR_TYPE_OEM_MIN = 0xC0, IPMI_MONITORING_SENSOR_TYPE_OEM_MAX = 0xFF, IPMI_MONITORING_SENSOR_TYPE_UNKNOWN = 0xFFFF, }; enum ipmi_monitoring_sel_event_direction { IPMI_MONITORING_SEL_EVENT_DIRECTION_ASSERTION = 0x00, IPMI_MONITORING_SEL_EVENT_DIRECTION_DEASSERTION = 0x01, }; enum ipmi_monitoring_sensor_units { IPMI_MONITORING_SENSOR_UNITS_NONE = 0x00, IPMI_MONITORING_SENSOR_UNITS_CELSIUS = 0x01, IPMI_MONITORING_SENSOR_UNITS_FAHRENHEIT = 0x02, IPMI_MONITORING_SENSOR_UNITS_VOLTS = 0x03, IPMI_MONITORING_SENSOR_UNITS_AMPS = 0x04, IPMI_MONITORING_SENSOR_UNITS_RPM = 0x05, IPMI_MONITORING_SENSOR_UNITS_WATTS = 0x06, IPMI_MONITORING_SENSOR_UNITS_PERCENT = 0x07, /* 0x08 - 0xFE - reserved for ipmimonitoring */ IPMI_MONITORING_SENSOR_UNITS_UNKNOWN = 0xFF, }; enum ipmi_monitoring_sensor_reading_type { IPMI_MONITORING_SENSOR_READING_TYPE_UNSIGNED_INTEGER8_BOOL = 0x00, IPMI_MONITORING_SENSOR_READING_TYPE_UNSIGNED_INTEGER32 = 0x01, IPMI_MONITORING_SENSOR_READING_TYPE_DOUBLE = 0x02, /* 0x03 - 0xFE - reserved for ipmimonitoring */ IPMI_MONITORING_SENSOR_READING_TYPE_UNKNOWN = 0xFF, }; enum ipmi_monitoring_driver_type { IPMI_MONITORING_DRIVER_TYPE_KCS = 0x00, IPMI_MONITORING_DRIVER_TYPE_SSIF = 0x01, IPMI_MONITORING_DRIVER_TYPE_OPENIPMI = 0x02, IPMI_MONITORING_DRIVER_TYPE_SUNBMC = 0x03, }; enum ipmi_monitoring_protocol_version { IPMI_MONITORING_PROTOCOL_VERSION_1_5 = 0x00, IPMI_MONITORING_PROTOCOL_VERSION_2_0 = 0x01, }; enum ipmi_monitoring_privilege { IPMI_MONITORING_PRIVILEGE_LEVEL_USER = 0x00, IPMI_MONITORING_PRIVILEGE_LEVEL_OPERATOR = 0x01, IPMI_MONITORING_PRIVILEGE_LEVEL_ADMIN = 0x02, }; enum ipmi_monitoring_authentication_type { IPMI_MONITORING_AUTHENTICATION_TYPE_NONE = 0x00, IPMI_MONITORING_AUTHENTICATION_TYPE_STRAIGHT_PASSWORD_KEY = 0x01, IPMI_MONITORING_AUTHENTICATION_TYPE_MD2 = 0x02, IPMI_MONITORING_AUTHENTICATION_TYPE_MD5 = 0x03, }; enum ipmi_monitoring_flags { IPMI_MONITORING_FLAGS_NONE = 0x00, IPMI_MONITORING_FLAGS_DEBUG = 0x01, IPMI_MONITORING_FLAGS_DEBUG_IPMI_PACKETS = 0x02, IPMI_MONITORING_FLAGS_LOCK_MEMORY = 0x04, }; enum ipmi_monitoring_workaround_flags { /* For use w/ IPMI_MONITORING_PROTOCOL_VERSION_1_5 */ IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_AUTHENTICATION_CAPABILITIES = 0x00000001, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_ACCEPT_SESSION_ID_ZERO = 0x00000002, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_FORCE_PERMSG_AUTHENTICATION = 0x00000004, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_CHECK_UNEXPECTED_AUTHCODE = 0x00000008, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_BIG_ENDIAN_SEQUENCE_NUMBER = 0x00000010, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_NO_AUTH_CODE_CHECK = 0x00000020, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_1_5_NO_CHECKSUM_CHECK = 0x00000040, /* For use w/ IPMI_MONITORING_PROTOCOL_VERSION_2_0 */ IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_AUTHENTICATION_CAPABILITIES = 0x00000001, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_INTEL_2_0_SESSION = 0x00000002, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_SUPERMICRO_2_0_SESSION = 0x00000004, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_SUN_2_0_SESSION = 0x00000008, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_OPEN_SESSION_PRIVILEGE = 0x00000010, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_NON_EMPTY_INTEGRITY_CHECK_VALUE = 0x00000020, IPMI_MONITORING_WORKAROUND_FLAGS_PROTOCOL_VERSION_2_0_NO_CHECKSUM_CHECK = 0x00000040, /* For use w/ an In-band driver */ IPMI_MONITORING_WORKAROUND_FLAGS_INBAND_ASSUME_IO_BASE_ADDRESS = 0x00000001, IPMI_MONITORING_WORKAROUND_FLAGS_INBAND_SPIN_POLL = 0x00000002, }; /* REREAD_SDR_CACHE - Re-read the SDR cache * * INTERPRET_OEM_DATA - Attempt to interpret OEM data if read. * * ASSUME_SYSTEM_EVENT_RECORD - If an event record is illegal, assume * it is a bug in the system and actually a system event record. * * ENTITY_SENSOR_NAMES - Return sensor names with appropriate entity * id and instance prefixed when appropriate. * * ASSUME_MAX_SDR_RECORD_COUNT - If motherboard does not implement SDR * record reading properly, do not fail out. Assume a max count. */ enum ipmi_monitoring_sel_flags { IPMI_MONITORING_SEL_FLAGS_REREAD_SDR_CACHE = 0x00000001, IPMI_MONITORING_SEL_FLAGS_INTERPRET_OEM_DATA = 0x00000002, IPMI_MONITORING_SEL_FLAGS_ASSUME_SYSTEM_EVENT_RECORD = 0x00000004, IPMI_MONITORING_SEL_FLAGS_ENTITY_SENSOR_NAMES = 0x00000008, IPMI_MONITORING_SEL_FLAGS_ASSUME_MAX_SDR_RECORD_COUNT = 0x00000010, }; /* REREAD_SDR_CACHE - Re-read the SDR cache * * IGNORE_NON_INTERPRETABLE_SENSORS - Do not read sensors that cannot be interpreted. * * BRIDGE_SENSORS - Attempt to bridge sensors not owned by the BMC * * INTERPRET_OEM_DATA - Attempt to interpret OEM data if read. * * SHARED_SENSORS - Iterate through shared sensors if found * * DISCRETE_READING - Allow sensor readings to be read even if the event/reading type * code for the sensor is not valid. This option works around * poorly defined (and arguably illegal) SDR records that list * non-discrete sensor expectations along with discrete state * conditions. * * IGNORE_SCANNING_DISABLED - Ignore the scanning bit and read sensors no matter * what. This option works around motherboards * that incorrectly indicate sensors as disabled. * * ASSUME_BMC_OWNER - Assume the BMC is the sensor owner no matter what. This option * works around motherboards that incorrectly indicate a non-BMC * sensor owner (e.g. usually bridging is required). * * ENTITY_SENSOR_NAMES - Return sensor names with appropriate entity * id and instance prefixed when appropriate. * * ASSUME_MAX_SDR_RECORD_COUNT - If motherboard does not implement SDR * record reading properly, do not fail * out. Assume a max count. */ enum ipmi_monitoring_sensor_reading_flags { IPMI_MONITORING_SENSOR_READING_FLAGS_REREAD_SDR_CACHE = 0x00000001, IPMI_MONITORING_SENSOR_READING_FLAGS_IGNORE_NON_INTERPRETABLE_SENSORS = 0x00000002, IPMI_MONITORING_SENSOR_READING_FLAGS_BRIDGE_SENSORS = 0x00000004, IPMI_MONITORING_SENSOR_READING_FLAGS_INTERPRET_OEM_DATA = 0x00000008, IPMI_MONITORING_SENSOR_READING_FLAGS_SHARED_SENSORS = 0x00000010, IPMI_MONITORING_SENSOR_READING_FLAGS_DISCRETE_READING = 0x00000020, IPMI_MONITORING_SENSOR_READING_FLAGS_IGNORE_SCANNING_DISABLED = 0x00000040, IPMI_MONITORING_SENSOR_READING_FLAGS_ASSUME_BMC_OWNER = 0x00000080, IPMI_MONITORING_SENSOR_READING_FLAGS_ENTITY_SENSOR_NAMES = 0x00000100, IPMI_MONITORING_SENSOR_READING_FLAGS_ASSUME_MAX_SDR_RECORD_COUNT = 0x00000200, IPMI_MONITORING_SENSOR_READING_FLAGS_IGNORE_UNREADABLE_SENSORS = 0x00000002, /* legacy macro */ }; /* * ipmi_monitoring_ipmi_config * * Configuration information for IPMI Inband monitoring * * driver_type * * Use a specific in-band driver. * * IPMI_MONITORING_DRIVER_TYPE_KCS * IPMI_MONITORING_DRIVER_TYPE_SSIF * IPMI_MONITORING_DRIVER_TYPE_OPENIPMI * IPMI_MONITORING_DRIVER_TYPE_SUNBMC * * Pass < 0 for default of IPMI_MONITORING_DRIVER_TYPE_KCS. * * disable_auto_probe * * Flag informs the library if in-band driver information should be * probed or not. * * driver_address * * Use this specified driver address instead of a probed one. * * register_spacing * * Use this register space instead of the probed one. * * driver_device * * Use this driver device for the IPMI driver. * * Configuration information for IPMI Out-of-Band monitoring * * protocol_version * * Indicate the IPMI protocol version to use * * IPMI_MONITORING_PROTOCOL_VERSION_1_5 * IPMI_MONITORING_PROTOCOL_VERSION_2_0 * * Pass < 0 for default of IPMI_MONITORING_VERSION_1_5. * * username * * BMC username. Pass NULL ptr for NULL username. Maximum length of * 16 bytes. * * password * * BMC password. Pass NULL ptr for NULL password. Maximum length of * 16 bytes for IPMI 1.5, 20 bytes for IPMI 2.0 * * k_g * * BMC Key for 2-key authentication. Pass NULL ptr to use password * as BMC key. The k_g key need not be an ascii string. * * k_g_len * * Length of k_g. Necessary b/c k_g may contain null values or in its * hex key. Maximum length of 20 bytes. * * privilege_level * * privilege level to authenticate with. * * Supported privilege levels: * * IPMI_MONITORING_PRIVILEGE_LEVEL_USER * IPMI_MONITORING_PRIVILEGE_LEVEL_OPERATOR * IPMI_MONITORING_PRIVILEGE_LEVEL_ADMIN * * Pass < 0 for default of IPMI_MONITORING_PRIVILEGE_LEVEL_USER. * * authentication_type * * authentication type to use * * IPMI_MONITORING_AUTHENTICATION_TYPE_NONE * IPMI_MONITORING_AUTHENTICATION_TYPE_STRAIGHT_PASSWORD_KEY * IPMI_MONITORING_AUTHENTICATION_TYPE_MD2 * IPMI_MONITORING_AUTHENTICATION_TYPE_MD5 * * Pass < 0 for default of IPMI_MONITORING_AUTHENTICATION_TYPE_MD5. * * cipher_suite_id * * Cipher suite identifier to determine authentication, integrity, * and confidentiality algorithms to use. * * Supported Cipher Suite IDs * (Key: A - Authentication Algorithm * I - Integrity Algorithm * C - Confidentiality Algorithm) * * 0 - A = None; I = None; C = None * 1 - A = HMAC-SHA1; I = None; C = None * 2 - A = HMAC-SHA1; I = HMAC-SHA1-96; C = None * 3 - A = HMAC-SHA1; I = HMAC-SHA1-96; C = AES-CBC-128 * 6 - A = HMAC-MD5; I = None; C = None * 7 - A = HMAC-MD5; I = HMAC-MD5-128; C = None * 8 - A = HMAC-MD5; I = HMAC-MD5-128; C = AES-CBC-128 * 11 - A = HMAC-MD5; I = MD5-128; C = None * 12 - A = HMAC-MD5; I = MD5-128; C = AES-CBC-128 * 15 - A = HMAC-SHA256; I = None; C = None * 16 - A = HMAC-SHA256; I = HMAC-SHA256-128; C = None * 17 - A = HMAC-SHA256; I = HMAC-SHA256-128; C = AES-CBC-128 * * Pass < 0 for default of 3. * * session_timeout_len * * Specifies the session timeout length in milliseconds. Pass <= 0 * to default to 60000 (60 seconds). * * retransmission_timeout_len * * Specifies the packet retransmission timeout length in * milliseconds. Pass <= 0 to default to 500 (0.5 seconds). * * Configuration information for both Inband and Outofband * * workaround_flags * * Bitwise OR of flags indicating any behavior which should be * changed from the default to handle IPMI non-compliance problems. * Some BMCs which are non-compliant may require a workaround flag * for correct operation. Pass 0 for default of no modifications to * behavior. */ struct ipmi_monitoring_ipmi_config { int driver_type; int disable_auto_probe; unsigned int driver_address; unsigned int register_spacing; char *driver_device; int protocol_version; char *username; char *password; unsigned char *k_g; unsigned int k_g_len; int privilege_level; int authentication_type; int cipher_suite_id; int session_timeout_len; int retransmission_timeout_len; unsigned int workaround_flags; }; typedef struct ipmi_monitoring_ctx *ipmi_monitoring_ctx_t; /* * Ipmi_Monitoring_Callback * * If callback returns < 0, libipmimonitoring will stop reading * remaining information. */ typedef int (*Ipmi_Monitoring_Callback)(ipmi_monitoring_ctx_t c, void *callback_data); /* * ipmi_monitoring_init * * Initialize the ipmi monitoring library. Needs to be called only * once before any ipmi monitoring functions are called. Threaded * applications are responsible for calling this function before any * thread may call another function in the library. * * Returns 0 on success, -1 on error */ int ipmi_monitoring_init (unsigned int flags, int *errnum); /* * ipmi_monitoring_ctx_create * * Create an ipmi monitoring context * * Returns context on success, NULL on error */ ipmi_monitoring_ctx_t ipmi_monitoring_ctx_create (void); /* * ipmi_monitoring_ctx_destroy * * Destroy an ipmi monitoring context */ void ipmi_monitoring_ctx_destroy (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_ctx_errnum * * Returns the error code of the most recently caused error */ int ipmi_monitoring_ctx_errnum (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_ctx_strerror * * Returns a pointer to statically allocated string describing the * error code in errnum. */ char *ipmi_monitoring_ctx_strerror (int errnum); /* * ipmi_monitoring_ctx_errormsg * * Returns a pointer to statically allocated string describing the * most recently caused error. */ char *ipmi_monitoring_ctx_errormsg (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_ctx_sel_config_file * * Initialize the ipmi monitoring context with the interpretation * rules stored in a specific sel configuration file. If NULL * sel_config_file is specified, the default sel configuration * file will be read and parsed. * * If this function is never called, only the default * libipmimonitoring interpretations will be used. * * Returns 0 on success, -1 on error */ int ipmi_monitoring_ctx_sel_config_file (ipmi_monitoring_ctx_t c, const char *sel_config_file); /* * ipmi_monitoring_ctx_sensor_config_file * * Initialize the ipmi monitoring context with the interpretation * rules stored in a specific sensor configuration file. If NULL * sensor_config_file is specified, the default sensor configuration * file will be read and parsed. * * If this function is never called, only the default * libipmimonitoring interpretations will be used. * * Returns 0 on success, -1 on error */ int ipmi_monitoring_ctx_sensor_config_file (ipmi_monitoring_ctx_t c, const char *sensor_config_file); /* * ipmi_monitoring_ctx_sdr_cache_directory * * Initialize the ipmi monitoring context with a different SDR cache * directory. * * Returns 0 on success, -1 on error */ int ipmi_monitoring_ctx_sdr_cache_directory (ipmi_monitoring_ctx_t c, const char *dir); /* * ipmi_monitoring_ctx_sdr_cache_filenames * * Initialize how sdr cache filenames will be formatted when * written/read. * * The following may be included in the format. * * %L - the hostname of the local machine * %H - the remote host being monitored * * Atleast %H must be specified. * * Returns 0 on success, -1 on error */ int ipmi_monitoring_ctx_sdr_cache_filenames (ipmi_monitoring_ctx_t c, const char *format); /* * ipmi_monitoring_sel_by_record_id * * Retrieve SEL records by record ID and store them in the monitoring context. * * If 'hostname' is NULL, SEL records for the current node will be retrieved in-band. * If 'record_ids' is NULL, all records will be retrieved * If specified, callback function will be called after each record is read and parsed. * * Returns number of records retrieved on success, -1 on error. * SEL iterators below may be used after calling this function to * iterate through records. */ int ipmi_monitoring_sel_by_record_id (ipmi_monitoring_ctx_t c, const char *hostname, struct ipmi_monitoring_ipmi_config *config, unsigned int sel_flags, unsigned int *record_ids, unsigned int record_ids_len, Ipmi_Monitoring_Callback callback, void *callback_data); /* * ipmi_monitoring_sel_by_sensor_type * * Retrieve SEL records by sensor type and store them in the * monitoring context. See 'ipmi_monitoring_sensor_type' for possible * sensor type values. * * If 'hostname' is NULL, SEL records for the current node will be retrieved in-band. * If 'sensor_types' is NULL, all records will be retrieved. * If specified, callback function will be called after each record is read and parsed. * * Returns number of records retrieved on success, -1 on error * SEL iterators below may be used after calling this function to * iterate through records. */ int ipmi_monitoring_sel_by_sensor_type (ipmi_monitoring_ctx_t c, const char *hostname, struct ipmi_monitoring_ipmi_config *config, unsigned int sel_flags, unsigned int *sensor_types, unsigned int sensor_types_len, Ipmi_Monitoring_Callback callback, void *callback_data); /* * ipmi_monitoring_sel_by_date_range * * Retrieve SEL records by date range and store them in the monitoring * context. Dates may be specified in a format of MM/DD/YYYY or * MM-DD-YYYY. The month may be specified as a numeral or its * abbreviated string name. * * If 'hostname' is NULL, SEL records for the current node will be retrieved in-band. * If 'date_begin' is NULL, all records before the 'date_end' will be retrieved. * If 'date_end' is NULL, the current time is assumed. * If specified, callback function will be called after each record is read and parsed. * * Note that non-timestamped SEL records will not be retrieved at all * b/c they lack a timestamp. * * Returns number of records retrieved on success, -1 on error * SEL iterators below may be used after calling this function to * iterate through records. */ int ipmi_monitoring_sel_by_date_range (ipmi_monitoring_ctx_t c, const char *hostname, struct ipmi_monitoring_ipmi_config *config, unsigned int sel_flags, const char *date_begin, const char *date_end, Ipmi_Monitoring_Callback callback, void *callback_data); /* * ipmi_monitoring_sel_iterator_first * * Reset iterator to the first sel record * * Returns 0 on success, -1 on error */ int ipmi_monitoring_sel_iterator_first (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_iterator_next * * Advance iterator to the next sel record information * * Returns 0 on success, -1 on error */ int ipmi_monitoring_sel_iterator_next (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_iterator_destroy * * Destroy all internally stored sel records. */ void ipmi_monitoring_sel_iterator_destroy (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_record_id * * Returns the record id of the current sel record in a callback * or the iterator, -1 on error. */ int ipmi_monitoring_sel_read_record_id (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_record_type * * Returns the sel record type of the current sel record in a * callback or the iterator, -1 on error. */ int ipmi_monitoring_sel_read_record_type (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_record_type_class * * Returns the sel record type class of the current sel record in a * callback or the iterator, -1 on error. See * 'ipmi_monitoring_sel_record_type_class' for possible return values. */ int ipmi_monitoring_sel_read_record_type_class (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_sel_state * * Returns the sel state of the current sel record in a callback or * the iterator, -1 on error. See 'ipmi_monitoring_state' for * possible return values. */ int ipmi_monitoring_sel_read_sel_state (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_timestamp * * Returns 0 on success, -1 on error. Returns the sel record * timestamp of the current sel record in 'timestamp'. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD or * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD class * records. */ int ipmi_monitoring_sel_read_timestamp (ipmi_monitoring_ctx_t c, unsigned int *timestamp); /* * ipmi_monitoring_sel_read_sensor_type * * Returns the sel record sensor type of the current sel record in a * callback or the iterator, -1 on error. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD class * records. See 'ipmi_monitoring_sensor_type' for possible return * values. */ int ipmi_monitoring_sel_read_sensor_type (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_sensor_number * * Returns the sel record sensor number of the current sel record in a * callback or the iterator, -1 on error. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD class * records. */ int ipmi_monitoring_sel_read_sensor_number (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_sensor_name * * Returns the sel record sensor name of the current sel record in a * callback or the iterator, NULL on error. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD class * records. */ char *ipmi_monitoring_sel_read_sensor_name (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_event_direction * * Returns the sel record event direction of the current sel record in * a callback or the iterator, -1 on error. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD class * records. See 'ipmi_monitoring_sel_event_direction' for possible * return values. */ int ipmi_monitoring_sel_read_event_direction (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_event_offset_type * * Returns the offset type of the current sel record in a * callback or the iterator, -1 on error. See * 'ipmi_monitoring_event_offset_type' and offsets in * ipmi_monitoring_offsets.h to determine offset conditions for a * given offset type. */ int ipmi_monitoring_sel_read_event_offset_type (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_event_offset * * Returns the offset of the current sel record in a callback or * the iterator, -1 on error. See offsets in ipmi_monitoring_offsets.h to * determine offset conditions for a given offset type. */ int ipmi_monitoring_sel_read_event_offset (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_event_offset_string * * Returns a string representing the event in the event offset, NULL * on error. An empty string may be returned if no event offset * string is available. */ char *ipmi_monitoring_sel_read_event_offset_string (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_event_type_code * * Returns the event type code of the current sel record in a callback * or the iterator, -1 on error. The event type code is is piece of * information is internal to the IPMI protocol. This may be useful * for advanced users wanting to handle OEM sel records or sensors not * covered by this library. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD class * records. */ int ipmi_monitoring_sel_read_event_type_code (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_event_data * * Returns 0 on success, -1 on error. Returns event data of the * current sel record in a callback or the iterator in 'event_data1', * 'event_data2', and 'event_data3' respectively. The event data is * is piece of information is internal to the IPMI protocol. This may * be useful for advanced users wanting to handle OEM sel records not * covered by this library. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD class * records. */ int ipmi_monitoring_sel_read_event_data (ipmi_monitoring_ctx_t c, unsigned int *event_data1, unsigned int *event_data2, unsigned int *event_data3); /* * ipmi_monitoring_sel_read_manufacturer_id * * Returns the manufacturer ID of the current sel record in a callback * or the iterator, -1 on error. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD class * records. */ int ipmi_monitoring_sel_read_manufacturer_id (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sel_read_oem_data * * Returns the OEM record data length of the current sel record in a * callback or the iterator, -1 on error. Returns OEM record data in * 'oem_data'. Valid for * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD or * IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_NON_TIMESTAMPED_OEM_RECORD * class records. */ int ipmi_monitoring_sel_read_oem_data (ipmi_monitoring_ctx_t c, void *oem_data, unsigned int oem_data_len); /* * ipmi_monitoring_sensor_readings_by_record_id * * Retrieve sensor readings by sensor numbers and store them in the monitoring context. * * If 'hostname' is NULL, sensors for the current node will be retrieved in-band. * If 'record_ids' is NULL, all sensors will be retrieved * If specified, callback function will be called after each sensor is read and parsed. * * Returns number of sensors values retrieved on success, -1 on error. * Sensor iterators below may be used after calling this function to * iterate through sensors. */ int ipmi_monitoring_sensor_readings_by_record_id (ipmi_monitoring_ctx_t c, const char *hostname, struct ipmi_monitoring_ipmi_config *config, unsigned int sensor_reading_flags, unsigned int *record_ids, unsigned int record_ids_len, Ipmi_Monitoring_Callback callback, void *callback_data); /* * ipmi_monitoring_sensor_readings_by_sensor_type * * Retrieve sensor readings by sensor type and store them in the * monitoring context. See 'ipmi_monitoring_sensor_type' for possible * sensor type values. * * If 'hostname' is NULL, sensors for the current node will be retrieved in-band. * If 'sensor_types' is NULL, all sensors will be retrieved. * If specified, callback function will be called after each sensor is read and parsed. * * Returns number of sensors values retrieved on success, -1 on error * Sensor iterators below may be used after calling this function to * iterate through sensors. */ int ipmi_monitoring_sensor_readings_by_sensor_type (ipmi_monitoring_ctx_t c, const char *hostname, struct ipmi_monitoring_ipmi_config *config, unsigned int sensor_reading_flags, unsigned int *sensor_types, unsigned int sensor_types_len, Ipmi_Monitoring_Callback callback, void *callback_data); /* * ipmi_monitoring_sensor_iterator_first * * Reset iterator to the first sensor reading * * Returns 0 on success, -1 on error */ int ipmi_monitoring_sensor_iterator_first (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_iterator_next * * Advance iterator to the next set of sensors information * * Returns 0 on success, -1 on error */ int ipmi_monitoring_sensor_iterator_next (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_iterator_destroy * * Destroy all internally stored sensors readings. */ void ipmi_monitoring_sensor_iterator_destroy (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_record_id * * Returns the record id of the current sensor reading in a callback * or the iterator, -1 on error. */ int ipmi_monitoring_sensor_read_record_id (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_number * * Returns the sensor number of the current sensor reading in a * callback or the iterator, -1 on error. May be useful if * IPMI_MONITORING_SENSOR_READING_FLAGS_SHARED_SENSORS has been set. */ int ipmi_monitoring_sensor_read_sensor_number (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_type * * Returns the sensor type of the current sensor reading in a callback * or the iterator, -1 on error. See 'ipmi_monitoring_sensor_type' for possible * return values. */ int ipmi_monitoring_sensor_read_sensor_type (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_name * * Returns a pointer to the sensor name of the current sensor reading * in a callback or the iterator, NULL on error. */ char *ipmi_monitoring_sensor_read_sensor_name (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_state * * Returns the current sensor state of the current sensor reading in a * callback or the iterator, -1 on error. See 'ipmi_monitoring_state' * for possible return values. */ int ipmi_monitoring_sensor_read_sensor_state (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_units * * Returns the sensor units type of the current sensor reading in a * callback or the iterator, -1 on error. See * 'ipmi_monitoring_sensor_units' for possible return values. */ int ipmi_monitoring_sensor_read_sensor_units (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_reading_type * * Returns the sensor reading type of the current sensor reading in a * callback or the iterator, -1 on error. See * 'ipmi_monitoring_sensor_reading_type' for possible return values. */ int ipmi_monitoring_sensor_read_sensor_reading_type (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_reading * * Returns a pointer to the sensor reading of the current sensor * reading in a callback or the iterator, NULL on error. It is the responsibility of * the user to cast it to the correct type based on the reading type. * Returns NULL if no reading available. */ void *ipmi_monitoring_sensor_read_sensor_reading (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_bitmask_type * * Returns the bitmask type of the current sensor reading in a * callback or the iterator, -1 on error. See * 'ipmi_monitoring_sensor_bitmask_type' and bitmasks in * ipmi_monitoring_bitmasks.h to determine bitmask conditions for a * given bitmask type. */ int ipmi_monitoring_sensor_read_sensor_bitmask_type (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_bitmask * * Returns the bitmask of the current sensor reading in a callback or * the iterator, -1 on error. See bitmasks in ipmi_monitoring_bitmasks.h to * determine bitmask conditions for a given bitmask type. */ int ipmi_monitoring_sensor_read_sensor_bitmask (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_sensor_bitmask_strings * * Returns an array of strings representing the events in the bitmask, * NULL on error. Array is NUL terminated. */ char **ipmi_monitoring_sensor_read_sensor_bitmask_strings (ipmi_monitoring_ctx_t c); /* * ipmi_monitoring_sensor_read_event_reading_type_code * * Returns the event/reading type code of the current sensor reading * in a callback or the iterator, -1 on error. The event/reading type * code is is piece of information is internal to the IPMI protocol. * This may be useful for advanced users wanting to handle OEM sensors * not covered by this library. */ int ipmi_monitoring_sensor_read_event_reading_type_code (ipmi_monitoring_ctx_t c); #ifdef __cplusplus } #endif #endif /* IPMI_MONITORING_H */