summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2014-07-23 15:03:00 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2014-07-23 15:03:00 +0200
commitb32d92e890caac903491116e9d817aa780c0323b (patch)
tree5a135c37eaa9ac94772819a28ce5beedd18e5c4a /contrib
parentc3445516ecd58e97de483cf4b7fafcc1104890d7 (diff)
Imported Upstream version 1.8.14upstream/1.8.14
Diffstat (limited to 'contrib')
-rw-r--r--contrib/Makefile.am41
-rw-r--r--contrib/Makefile.in481
-rw-r--r--contrib/README95
-rw-r--r--contrib/bmc-snmp-proxy381
-rw-r--r--contrib/bmc-snmp-proxy.service18
-rw-r--r--contrib/bmc-snmp-proxy.sysconf48
-rwxr-xr-xcontrib/bmclanconf308
-rwxr-xr-xcontrib/collect_data.sh29
-rwxr-xr-xcontrib/create_rrds.sh40
-rwxr-xr-xcontrib/create_webpage.sh211
-rwxr-xr-xcontrib/create_webpage_compact.sh151
-rw-r--r--contrib/exchange-bmc-os-info.init.redhat326
-rw-r--r--contrib/exchange-bmc-os-info.service.redhat13
-rw-r--r--contrib/exchange-bmc-os-info.sysconf26
-rwxr-xr-xcontrib/ipmi.init.basic17
-rwxr-xr-xcontrib/ipmi.init.redhat222
-rwxr-xr-xcontrib/ipmievd.init.debian92
-rwxr-xr-xcontrib/ipmievd.init.redhat87
-rwxr-xr-xcontrib/ipmievd.init.suse212
-rw-r--r--contrib/oem_ibm_sel_map229
20 files changed, 3027 insertions, 0 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644
index 0000000..c067dcb
--- /dev/null
+++ b/contrib/Makefile.am
@@ -0,0 +1,41 @@
+# Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# Redistribution of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# Redistribution in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# Neither the name of Sun Microsystems, Inc. or the names of
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# This software is provided "AS IS," without a warranty of any kind.
+# ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+# INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+# PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
+# SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
+# FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
+# OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
+# SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
+# OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
+# PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
+# LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
+# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+MAINTAINERCLEANFILES = Makefile.in
+
+dist_pkgdata_DATA = oem_ibm_sel_map
+
+EXTRA_DIST = README \
+ bmclanconf ipmi.init.basic ipmi.init.redhat \
+ exchange-bmc-os-info.init.redhat exchange-bmc-os-info.service.redhat \
+ exchange-bmc-os-info.sysconf \
+ ipmievd.init.redhat ipmievd.init.suse ipmievd.init.debian \
+ collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh \
+ bmc-snmp-proxy bmc-snmp-proxy.service bmc-snmp-proxy.sysconf
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644
index 0000000..5f615ef
--- /dev/null
+++ b/contrib/Makefile.in
@@ -0,0 +1,481 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# Redistribution of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# Redistribution in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# Neither the name of Sun Microsystems, Inc. or the names of
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# This software is provided "AS IS," without a warranty of any kind.
+# ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+# INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+# PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
+# SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
+# FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
+# OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
+# SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
+# OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
+# PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
+# LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
+# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = contrib
+DIST_COMMON = README $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkgdatadir)"
+DATA = $(dist_pkgdata_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ARCH = @ARCH@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASEDIR = @BASEDIR@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISTRO = @DISTRO@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTF_BMC = @INTF_BMC@
+INTF_BMC_LIB = @INTF_BMC_LIB@
+INTF_DUMMY = @INTF_DUMMY@
+INTF_DUMMY_LIB = @INTF_DUMMY_LIB@
+INTF_FREE = @INTF_FREE@
+INTF_FREE_LIB = @INTF_FREE_LIB@
+INTF_IMB = @INTF_IMB@
+INTF_IMB_LIB = @INTF_IMB_LIB@
+INTF_LAN = @INTF_LAN@
+INTF_LANPLUS = @INTF_LANPLUS@
+INTF_LANPLUS_LIB = @INTF_LANPLUS_LIB@
+INTF_LAN_LIB = @INTF_LAN_LIB@
+INTF_LIPMI = @INTF_LIPMI@
+INTF_LIPMI_LIB = @INTF_LIPMI_LIB@
+INTF_OPEN = @INTF_OPEN@
+INTF_OPEN_LIB = @INTF_OPEN_LIB@
+INTF_SERIAL = @INTF_SERIAL@
+INTF_SERIAL_LIB = @INTF_SERIAL_LIB@
+IPMITOOL_INTF_LIB = @IPMITOOL_INTF_LIB@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PSTAMP = @PSTAMP@
+RANLIB = @RANLIB@
+RPMBUILD = @RPMBUILD@
+RPM_RELEASE = @RPM_RELEASE@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_configure_args = @ac_configure_args@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+MAINTAINERCLEANFILES = Makefile.in
+dist_pkgdata_DATA = oem_ibm_sel_map
+EXTRA_DIST = README \
+ bmclanconf ipmi.init.basic ipmi.init.redhat \
+ exchange-bmc-os-info.init.redhat exchange-bmc-os-info.service.redhat \
+ exchange-bmc-os-info.sysconf \
+ ipmievd.init.redhat ipmievd.init.suse ipmievd.init.debian \
+ collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh \
+ bmc-snmp-proxy bmc-snmp-proxy.service bmc-snmp-proxy.sysconf
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign contrib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+ @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+ done
+
+uninstall-dist_pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgdatadir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_pkgdataDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_pkgdataDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dist_pkgdataDATA \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-dist_pkgdataDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/README b/contrib/README
new file mode 100644
index 0000000..22fc83e
--- /dev/null
+++ b/contrib/README
@@ -0,0 +1,95 @@
+
+Graphs for ipmitool
+-------------------
+
+This is a set of shell-scripts to quickly create a webpage with pretty graphs!
+
+Prerequisites are a webserver with cgi-bin support and RRDtool, a data
+collection and graphing utility you can get here:
+
+http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
+
+
+First, decide on a directory where to store the RRDtool database files and make
+sure it exists. The user that will run the cronjob to collect updates must have
+write permissions in this dir.
+
+Next, you'll need to edit some variables at the top of each script.
+
+Common to all scripts:
+
+hostname Override this if you are collecting data from a remote host,
+ or if the $HOSTNAME variable is incorrect.
+
+ipmi_cmd Command line used to call ipmitool. Default is to collect
+ data from the local server using OpenIPMI.
+
+ If you want to collect data from a remote host, add the
+ -I lan, -H, -U and -P options as necessary.
+
+ BIG NOTE! I do not recommend using remote data collection since
+ you'll have to store the password in the script. If you do,
+ make sure unauthorized people can't read or execute the scripts
+ or they'll be able to wreak havoc on your server.
+
+rrd_dir Enter the dir where to store the RRDtool database here.
+
+
+Now you can get the data collection going. Run create_rrds.sh to create the
+RDDtool database, you'll find one .rrd file per sensor in the designated dir.
+Add a line to your crontab that executes collect_data.sh every 5 minutes.
+
+Something like this:
+*/5 * * * * /usr/local/bin/collect_data.sh
+
+If you are a Solaris user you'll have to write the more verbose:
+0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/bin/collect_data.sh
+
+
+Finally it's time to create the webpage, begin with editing some more variables
+in the create_webpage.sh and/or create_webpage_compact.sh scripts:
+
+rrdcgi Full path to the rrdcgi executable.
+
+img_dir Directory to store the graph images. This path must be within
+ the document root and writable by the web server user.
+
+ Example: /usr/local/apache2/htdocs/images/graphs
+
+web_dir Relative path of the URL where the images will show up
+ on the web server.
+
+ Example: With the img_dir path above the corresponding web_dir
+ would be /images/graphs
+
+graph_width Size of the graph area in pixels (excluding title, legends etc.)
+graph_height
+
+graph_daily Decide which of daily, weekly and monthly graphs you want
+graph_weekly included on the page.
+graph_monthly
+
+
+Finally run the create webpage script and store the output as a cgi-script and
+don't forget to make it executable.
+
+Example:
+
+create_webpage.sh > /usr/local/apache2/cgi-bin/my_ipmi_graphs.cgi
+chmod 755 /usr/local/apache2/cgi-bin/my_ipmi_graphs.cgi
+
+Now you can surf to http://my.server.com/cgi-bin/my_ipmi_graphs.cgi and enjoy!
+
+
+The difference between create_webpage.sh and create_webpage_compact.sh is that
+the first script displays sensor thresholds in the graphs. The second script
+collects all sensors that measure the same unit into the same graph thus
+producing a lot fewer graphs.
+
+Note, RRDtool sometimes scales the graphs such that the sensor thresholds
+fall outside the visible area.
+
+
+Happy graphing!
+
+
diff --git a/contrib/bmc-snmp-proxy b/contrib/bmc-snmp-proxy
new file mode 100644
index 0000000..1704ef3
--- /dev/null
+++ b/contrib/bmc-snmp-proxy
@@ -0,0 +1,381 @@
+#!/bin/sh
+#############################################################################
+#
+# bmc-snmp-proxy: Set SNMP proxy to BMC (Baseboard Management Controller)
+#
+# version: 0.6
+#
+# Authors: Charles Rose <charles_rose@dell.com>
+# Jordan Hargrave <jordan_hargrave@dell.com>
+#
+# Description: Script to set snmp proxy to the BMC for certain OID
+# See here for details:
+# https://fedoraproject.org/wiki/Features/AgentFreeManagement
+#
+# Assumptions: This script will work only when /etc/snmp/ is writable.
+#
+#############################################################################
+# GLOBALS
+#############################################################################
+SYSCONF_DIR="/etc/sysconfig"
+CONFIG="${SYSCONF_DIR}/bmc-snmp-proxy"
+
+SNMPD_LOCAL_CONF_DIR="/etc/snmp/bmc"
+SNMPD_LOCAL_CONF="${SNMPD_LOCAL_CONF_DIR}/snmpd.local.conf"
+TRAPD_LOCAL_CONF="${SNMPD_LOCAL_CONF_DIR}/snmptrapd.local.conf"
+
+TRAPD_CONF="/etc/snmp/snmptrapd.conf"
+
+LOCKFILE="/var/lock/subsys/bmc-snmp-proxy"
+BMC_INFO="/var/run/bmc-info"
+
+IPMITOOL=`which ipmitool`
+
+#Default config
+BMC_COMMUNITY="public"
+BMC_OID=".1.3.6.1.4.1.674.10892.2" # Dell iDRAC
+TRAP_FORWARD="no"
+RELOAD_SERVICES="yes"
+
+#############################################################################
+
+#TODO: Use inotify and daemonize when $BMC_INFO changes
+
+# source config
+[ -r ${CONFIG} ] && . ${CONFIG}
+
+. gettext.sh
+
+SCRIPT_NAME=$(basename $0)
+RETVAL=0
+
+# Check if bmc-info created by exchange-bmc-os-info
+bmc_info_exists()
+{
+ if [ -r "${BMC_INFO}" ]; then
+ . ${BMC_INFO}
+ else
+ RETVAL=2
+ fi
+ return $RETVAL
+}
+
+check_snmp()
+{
+ if [ ! -d /etc/snmp ] && [ ! -x /usr/sbin/snmpd ]; then
+ RETVAL=12
+ fi
+ return $RETVAL
+}
+
+#############################################################################
+# configure SNMP proxy
+#############################################################################
+write_snmp_conf()
+{
+ # SNMPv3 security: bmcview, bmc_ctx, bmc_sec, bmc_grp, bmc_cmty
+ printf "###############################################\n"
+ printf "# Automatically created by %s #\n" "${SCRIPT_NAME}"
+ printf "###############################################\n"
+ printf "view bmcview included %s 80\n" "${BMC_OID}"
+ printf "com2sec -Cn bmc_ctx bmc_sec default bmc_cmty\n"
+ printf "group bmc_grp v1 bmc_sec\n"
+ printf "access bmc_grp bmc_ctx any noauth exact bmcview none none\n"
+ printf "proxy -Cn bmc_ctx -v 1 %s\n" "${PROXY_TOKEN}"
+ printf "###############################################\n"
+}
+
+valid_ip()
+{
+ #Thanks to mkyong.com
+ octet="([01]?[[:digit:]][[:digit:]]?|2[0-4][[:digit:]]|25[0-5])"
+
+ printf -- "%s" "${1}"| grep -Eq \
+ "^${octet}\\.${octet}\\.${octet}\\.${octet}$"
+ return $?
+}
+
+check_vars()
+{
+ [ -z ${BMC_COMMUNITY} ] && BMC_COMMUNITY="public"
+ [ -z ${BMC_OID} ] && return 1
+
+ if [ -n "${BMC_IPv4}" ] && valid_ip ${BMC_IPv4}; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+set_snmp_proxy()
+{
+ if check_vars; then
+ PROXY_TOKEN="-c ${BMC_COMMUNITY} ${BMC_IPv4} ${BMC_OID}"
+
+ if [ ! -d ${SNMPD_LOCAL_CONF_DIR} ] && \
+ mkdir ${SNMPD_LOCAL_CONF_DIR}; then
+ write_snmp_conf > ${SNMPD_LOCAL_CONF}
+ [ $? -ne 0 ] && RETVAL=4
+ fi
+ else
+ RETVAL=3
+ fi
+}
+
+
+set_snmpd_conf_path()
+{
+ for SYSCONF in ${SYSCONF_DIR}/snmp*d;
+ do
+ if grep -q "${SNMPD_LOCAL_CONF_DIR}" "${SYSCONF}" > \
+ /dev/null 2>&1; then
+ continue
+ else
+ printf "SNMPCONFPATH=%s\n" "${SNMPD_LOCAL_CONF_DIR}" \
+ >> ${SYSCONF} || RETVAL=7
+ fi
+ done
+ return $RETVAL
+}
+
+disable_snmp_proxy()
+{
+ if [ -f ${SNMPD_LOCAL_CONF} ]; then
+ rm -f ${SNMPD_LOCAL_CONF}
+ [ $? -ne 0 ] && RETVAL=5
+ fi
+}
+#############################################################################
+# Trap Forwarding
+#############################################################################
+
+pick_alert_dest()
+{
+ test_ip="$1"
+ for ALERT_DEST in `seq 1 4`
+ do
+ temp_ip=$(${IPMITOOL} lan alert print ${CHANNEL} ${ALERT_DEST}\
+ 2>/dev/null| sed -n "s#^Alert IP Address.*: ##p")
+
+ [ "${temp_ip}" = "${test_ip}" ] && return 0
+ done
+ return 1
+}
+
+set_alert_dest_ip()
+{
+ ${IPMITOOL} lan alert set ${CHANNEL} ${ALERT_DEST} ipaddr ${1} \
+ retry 4 type pet >/dev/null 2>&1
+ [ $? -ne 0 ] && RETVAL=8
+}
+
+bmc_alert_dest()
+{
+ # Pick the first active LAN channel
+ for CHANNEL in `seq 1 14`
+ do
+ [ $(${IPMITOOL} -I open channel info ${CHANNEL} 2>/dev/null \
+ | grep -q "802\.3") ] || break
+ done
+
+ # If TRAPD_IP is already set as an alert dest,
+ if pick_alert_dest "${TRAPD_IP}"; then
+ # reset: reset it if we are called with reset
+ [ "${1}" = "reset" ] && \
+ set_alert_dest_ip "0.0.0.0"
+ # else, find the next free alert dest,
+ elif pick_alert_dest "0.0.0.0"; then
+ [ "${1}" = "reset" ] && \
+ return $RETVAL
+ # set: the TRAPD_IP
+ set_alert_dest_ip "${TRAPD_IP}"
+ else
+ # No free alert destinations
+ RETVAL=9
+ fi
+ return $RETVAL
+}
+
+set_ipmi_alert()
+{
+ ${IPMITOOL} lan set ${CHANNEL} alert "${1}" >/dev/null 2>&1
+ [ $? -ne 0 ] && RETVAL=10
+}
+
+get_host_ip()
+{
+ # Get host's IP that the BMC can reach.
+ IFACE=$(/usr/sbin/ip -o -f inet address |awk '!/: lo/ {print $2}')
+ for dev in ${IFACE}
+ do
+ ping -c 1 -I ${dev} ${BMC_IPv4} > /dev/null 2>&1
+ done
+}
+
+config_bmc_alert()
+{
+ # Get Host's IP that the BMC can send traps to
+ TRAPD_IP=$(get_host_ip)
+
+ # Set Host's IP as the alert destination in the BMC
+ valid_ip ${TRAPD_IP} && bmc_alert_dest "${ACTION}"
+
+ # Enable alerting on the LAN channel
+ [ $RETVAL -eq 0 ] && set_ipmi_alert "${ACTION}"
+}
+
+write_trapd_conf()
+{
+ printf "###############################################\n"
+ printf "# Automatically created by %s #\n" "${SCRIPT_NAME}"
+ printf "forward %s %s\n" "${BMC_OID}*" "${FORWARD_HOST}"
+ printf "###############################################\n"
+}
+
+config_trapd()
+{
+ # Proceed only if snmptrapd is available on the system
+ if [ -f ${TRAPD_CONF} ]; then
+ write_trapd_conf > ${TRAPD_LOCAL_CONF}
+ [ $? -ne 0 ] && RETVAL=11
+ else
+ return 1
+ fi
+}
+
+trap_sink_exists()
+{
+ # TODO: We only set the first match. We should be able to set
+ # multiple
+ FORWARD_HOST=$(awk '/^trap.*sink/{print $2}; /^informsink/{print $2}' \
+ /etc/snmp/snmpd*conf | head -1)
+ if [ -z "${FORWARD_HOST}" ]; then
+ # there is no trapsink setup.
+ return 1
+ else
+ return 0
+ fi
+}
+
+# Forward SNMP traps from the BMC to trapsink.
+trap_forward()
+{
+ NO_TRAP=0
+ ACTION=${1} # set or reset
+
+ if [ "${ACTION}" = "set" ]; then
+ # Get trapd config,
+ if trap_sink_exists; then
+ config_trapd && config_bmc_alert
+ else
+ # exit silently if there is no sink
+ NO_TRAP=1
+ fi
+ else
+ if [ -f ${TRAPD_LOCAL_CONF} ]; then
+ rm -f ${TRAPD_LOCAL_CONF} >/dev/null 2>&1
+ else
+ NO_TRAP=1
+ fi
+ fi
+}
+
+#############################################################################
+service_reload()
+{
+ #TODO: do this in systemd
+ if [ ${RETVAL} -eq 0 ] && [ "${RELOAD_SERVICES}" = "yes" ]; then
+ service $1 reload
+ [ $? -ne 0 ] && RETVAL=6
+ fi
+ return
+}
+
+#############################################################################
+start()
+{
+ if bmc_info_exists && check_snmp; then
+ touch ${LOCKFILE}
+ set_snmpd_conf_path && set_snmp_proxy
+ [ $RETVAL -eq 0 ] && service_reload snmpd
+
+ if [ "${TRAP_FORWARD}" = "yes" ]; then
+ trap_forward "set"
+ [ $RETVAL -eq 0 ] && [ $NO_TRAP -eq 0 ] && \
+ service_reload snmptrapd
+ fi
+ fi
+}
+
+#############################################################################
+stop()
+{
+ [ ! -f ${LOCKFILE} ] && return
+ if bmc_info_exists && check_snmp; then
+ disable_snmp_proxy
+ [ $RETVAL -eq 0 ] && service_reload snmpd
+
+ if [ "${TRAP_FORWARD}" = "yes" ]; then
+ trap_forward "reset"
+ [ $RETVAL -eq 0 ] && [ $NO_TRAP -eq 0 ] && \
+ service_reload snmptrapd
+ fi
+ rm -f ${LOCKFILE}
+ fi
+}
+
+#############################################################################
+status()
+{
+ eval_gettext "${SCRIPT_NAME}: snmp proxy to BMC is "
+ # Checking for lockfile is better.
+ #if grep -q "^proxy" "${SNMPD_LOCAL_CONF}" > /dev/null 2>&1 ; then
+ if [ -f ${LOCKFILE} ]; then
+ eval_gettext "set"
+ else
+ eval_gettext "not set"
+ fi
+ echo
+ RETVAL=0
+}
+
+#############################################################################
+usage()
+{
+ eval_gettext "Usage: $0 {start|stop|status}"; echo 1>&2
+ RETVAL=1
+}
+
+#############################################################################
+# MAIN
+#############################################################################
+case "$1" in
+ start) start ;;
+ stop) stop ;;
+ status) status ;;
+ *) usage ;;
+esac
+
+case "$RETVAL" in
+ 0|1) ;;
+ 2) eval_gettext "${SCRIPT_NAME}: failed to read ${BMC_INFO} " 1>&2 ;;
+ 3) eval_gettext "${SCRIPT_NAME}: failed to get proxy config." 1>&2 ;;
+ 4) eval_gettext "${SCRIPT_NAME}: failed to set ${SNMPD_LOCAL_CONF}." 1>&2 ;;
+ 5) eval_gettext "${SCRIPT_NAME}: failed to disable snmp proxy." 1>&2 ;;
+ 6) eval_gettext "${SCRIPT_NAME}: failed to reload snmpd." 1>&2 ;;
+ 7) eval_gettext "${SCRIPT_NAME}: failed to update ${SYSCONF}." 1>&2 ;;
+ 8) eval_gettext "${SCRIPT_NAME}: failed to set IPMI alert dest." 1>&2 ;;
+ 9) eval_gettext "${SCRIPT_NAME}: no free IPMI alert dest." 1>&2 ;;
+ 10) eval_gettext "${SCRIPT_NAME}: failed to set IPMI PEF." 1>&2 ;;
+ 11) eval_gettext "${SCRIPT_NAME}: failed to write snmptrapd.conf." 1>&2 ;;
+ 12) eval_gettext "${SCRIPT_NAME}: snmpd not found." 1>&2 ;;
+ *) eval_gettext "${SCRIPT_NAME}: unknown error." 1>&2 ;;
+esac
+
+if [ ${RETVAL} -gt 1 ]; then
+ eval_gettext " Return code: ${RETVAL}"; echo
+fi
+exit ${RETVAL}
+#############################################################################
+# end of file
+#############################################################################
diff --git a/contrib/bmc-snmp-proxy.service b/contrib/bmc-snmp-proxy.service
new file mode 100644
index 0000000..247137a
--- /dev/null
+++ b/contrib/bmc-snmp-proxy.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=Setup SNMP proxy to BMC
+
+After=exchange-bmc-os-info.service
+Requires=exchange-bmc-os-info.service
+PartOf=exchange-bmc-os-info.service
+
+ConditionPathExists=/var/run/bmc-info
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+
+ExecStart=/usr/libexec/bmc-snmp-proxy start
+ExecStop=/usr/libexec/bmc-snmp-proxy stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/contrib/bmc-snmp-proxy.sysconf b/contrib/bmc-snmp-proxy.sysconf
new file mode 100644
index 0000000..30bf62c
--- /dev/null
+++ b/contrib/bmc-snmp-proxy.sysconf
@@ -0,0 +1,48 @@
+# bmc-snmp-proxy
+#
+# Config file to control SNMP redirection between
+# the OS and Service Processor/Baseboard Management Controller (BMC)
+#
+# bmc-snnmp-proxy helps redirect certain SNMP requests (to this host)
+# destined to the Service Processor. We will need the Service Processor's
+# SNMP community string and the OID of the Service Processor's SNMP agent.
+#
+# For redirecting Traps from the Service Processor to the trap sink
+# configured in the host (this system), we will have to set
+# TRAP_FORWARD below.
+#
+# See here for details
+# https://fedoraproject.org/wiki/Features/AgentFreeManagement
+
+### Configure SNMP proxy to BMC/Service Processor ###
+
+### Service Processor/BMC SNMP Community String.
+# Name: BMC_COMMUNITY
+# Description: Set community string of the Service Processor (BMC)'s
+# SNMP agent.
+# Default: public
+#
+BMC_COMMUNITY="public"
+
+### OEM Specific OID of Service Processor
+# Name: BMC_OID
+# Description: SNMP OID that we would like to redirect to the Service
+# Processor (BMC). This can be unique to each OEM.
+# Default: ".1.3.6.1.4.1.674.10892.2"
+BMC_OID=".1.3.6.1.4.1.674.10892.2" # Dell iDRAC
+
+### Forward Traps from the Service Processor to trap sink
+# Name: TRAP_FORWARD
+# Description: Enabling this will allow traps from the Service Processor
+# to be directed to this system and configure snmptrapd
+# Note: This option will have no effect if trap sink on the system is
+# not configured
+# Default: "no"
+TRAP_FORWARD="yes"
+
+### Reload snmpd and snmptrapd
+# Name: RELOAD_SERVICES
+# Description: Reload snmpd and snmptrapd after making changes to their config
+# files.
+# Default: "yes"
+RELOAD_SERVICES="yes"
diff --git a/contrib/bmclanconf b/contrib/bmclanconf
new file mode 100755
index 0000000..253afd4
--- /dev/null
+++ b/contrib/bmclanconf
@@ -0,0 +1,308 @@
+#!/bin/bash
+#
+# Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# Redistribution of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# Redistribution in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# Neither the name of Sun Microsystems, Inc. or the names of
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# This software is provided "AS IS," without a warranty of any kind.
+# ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+# INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+# PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
+# SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
+# FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
+# OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
+# SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
+# OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
+# PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
+# LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
+# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+# This script is designed for Sun Fire LX50, V60x and V65x systems.
+# It may work with other setups as long as you use the correct channel
+# and interface settings. It can be used on the V20z as long as you
+# specify network settings on the command line.
+#
+# If the wrong channel is used you could lose network access to the
+# box because your BMC will be sending out bad Gratuitous ARP packets
+# with the wrong MAC address. You will need to use a console or
+# override your local ARP cache with the correct addr.
+
+usage ()
+{
+ echo "
+usage: $0 -c <chan> -i <interface> [options]
+ $0 -c <chan> [-v|w|x|y|z address] [options]
+
+ -c channel Which BMC channel to configure [-c help for more info]
+ -i interface Auto-configure BMC based on interface network settings
+ -v address Use specified IP address
+ -w address Use specified Netmask address
+ -x address Use specified MAC address
+ -y address Use specified Gateway IP address
+ -z address Use specified Gateway MAC address
+ -m interface Which IPMI interface to use [default linux=open solaris=lipmi]
+ -p password Set BMC channel password
+ -s string Set SNMP community string
+ -a interval Set Gratuitous ARP interval, off=0, default=4
+ -r Reset BMC channel, zero all network settings, disable
+ -d Debug mode, does not make any changes
+"
+ exit 0;
+}
+
+channel_usage ()
+{
+ echo "
+ Sun Fire V60x and V65x - Linux 2.4
+ eth0 = channel 6, top
+ eth1 = channel 7, bottom
+
+ Sun Fire V60x and V65x - Linux 2.6
+ eth0 = channel 7, bottom
+ eth1 = channel 6, top
+
+ Sun Fire V60x and V65x - Solaris x86
+ e1000g0 = channel 7, bottom
+ e1000g1 = channel 6, top
+
+ Sun LX50 - Linux
+ eth0 = channel 7, bottom
+ eth1 = channel 6, top
+
+ Sun LX50 - Solaris x86
+ le0 = channel 7, bottom
+ le1 = channel 6, top
+
+ Sun Fire V20z (-i option does not apply)
+ channel 1
+"
+ exit 0
+}
+
+hex_to_ip ()
+{
+ test $# -ge 1 || return;
+ local HEX B1 B2 B3 B4;
+ HEX=`echo $1 | tr '[:lower:]' '[:upper:]'`;
+ H1=`echo $HEX | cut -c1-2`
+ H2=`echo $HEX | cut -c3-4`
+ H3=`echo $HEX | cut -c5-6`
+ H4=`echo $HEX | cut -c7-8`
+ B1=`echo 10 o 16 i $H1 p | dc`
+ B2=`echo 10 o 16 i $H2 p | dc`
+ B3=`echo 10 o 16 i $H3 p | dc`
+ B4=`echo 10 o 16 i $H4 p | dc`
+ echo "$B1.$B2.$B3.$B4"
+}
+
+ipmitool_lan_set ()
+{
+ [ $# -lt 1 ] && return
+ local PARAM=$1
+ local VALUE=
+ [ $# -ge 2 ] && VALUE=$2
+
+ if [ $DEBUG -gt 0 ]; then
+ echo "Setting LAN parameter $PARAM $VALUE"
+ echo "$IPMITOOL -I $IPMIINTF lan set $CHANNEL $PARAM $VALUE"
+ return
+ fi
+
+ $IPMITOOL -I $IPMIINTF lan set $CHANNEL $PARAM $VALUE
+}
+
+ipmitool_lan_reset ()
+{
+ ipmitool_lan_set "ipsrc" "static"
+ ipmitool_lan_set "ipaddr" "0.0.0.0"
+ ipmitool_lan_set "netmask" "0.0.0.0"
+ ipmitool_lan_set "macaddr" "00:00:00:00:00:00"
+ ipmitool_lan_set "defgw ipaddr" "0.0.0.0"
+ ipmitool_lan_set "defgw macaddr" "00:00:00:00:00:00"
+ ipmitool_lan_set "password"
+ ipmitool_lan_set "snmp" "public"
+ ipmitool_lan_set "arp generate" "off"
+ ipmitool_lan_set "access" "off"
+ exit 0
+}
+
+DEBUG=0
+LINUX=0
+SOLARIS=0
+CHANNEL=0
+IFACE=
+PASSWORD=
+SNMP=
+GRATARP=8
+PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
+
+case `uname -s` in
+ Linux)
+ IPMIINTF=open
+ IPMITOOL=ipmitool
+ PING=ping
+ IFCONFIG=ifconfig
+ ARP=arp
+ ROUTE=route
+ ;;
+ SunOS)
+ IPMIINTF=lipmi
+ IPMITOOL=ipmiadm
+ PING=ping
+ IFCONFIG=ifconfig
+ ARP=arp
+ ROUTE=route
+ ;;
+ *)
+ echo "Invalid OS!"
+ exit 1
+esac
+
+while getopts "dhri:c:m:p:s:a:v:w:x:y:z:" OPTION ; do
+ case "$OPTION" in
+ i) IFACE=$OPTARG ;;
+ c) CHANNEL=$OPTARG ; test X$CHANNEL = Xhelp && channel_usage ;;
+ m) IPMIINTF=$OPTARG ;;
+ p) PASSWORD=$OPTARG ;;
+ s) SNMP=$OPTARG ;;
+ a) GRATARP=$OPTARG ;;
+ d) DEBUG=1 ;;
+ v) IP_ADDRESS=$OPTARG ;;
+ w) IP_NETMASK=$OPTARG ;;
+ x) MAC_ADDRESS=$OPTARG ;;
+ y) GATEWAY_IP=$OPTARG ;;
+ z) GATEWAY_MAC=$OPTARG ;;
+ r) ipmitool_lan_reset ;;
+ h) usage ;;
+ *) echo "Ignoring invalid option : -$OPTARG" ;;
+ esac
+done
+
+if [ ! -x `which $IPMITOOL` ]; then
+ echo "Error: unable to find $IPMITOOL"
+ exit 1
+fi
+
+if [ $CHANNEL -eq 0 ]; then
+ echo
+ echo "Error: you must specify a channel with -c"
+ echo
+ exit 1
+fi
+
+if [ "$IFACE" ]; then
+ if ! $IFCONFIG $IFACE 2>/dev/null | grep "inet " >/dev/null 2>&1 ; then
+ echo
+ echo "Error: unable to find interface $IFACE"
+ echo
+ exit 1
+ fi
+ echo "Auto-configuring $IFACE (channel $CHANNEL)"
+fi
+
+case `uname -s` in
+ SunOS)
+ if [ X$IFACE != X ]; then
+ if [ X$IP_ADDRESS = X ]; then
+ IP_ADDRESS=`$IFCONFIG $IFACE | grep inet | awk '{print $2}'`
+ fi
+ if [ X$IP_NETMASK = X ]; then
+ HEX_NETMASK=`$IFCONFIG $IFACE | grep netmask | awk '{print $4}'`
+ IP_NETMASK=`hex_to_ip $HEX_NETMASK`
+ fi
+ if [ X$MAC_ADDRESS = X ]; then
+ MAC_ADDRESS=`$IFCONFIG $IFACE | grep ether | awk '{print $2}'`
+ fi
+ if [ X$GATEWAY_IP = X ]; then
+ GATEWAY_IP=`$ROUTE -n get default | grep gateway: | awk '{print $2}'`
+ fi
+ if [ X$GATEWAY_MAC = X ]; then
+ $PING -i $IFACE $GATEWAY_IP 1 >/dev/null 2>&1
+ GATEWAY_MAC=`$ARP $GATEWAY_IP | awk '{print $4}'`
+ if [ X$GATEWAY_MAC = Xno ]; then
+ GATEWAY_MAC=
+ fi
+ fi
+ fi
+ ;;
+
+ Linux)
+ if [ X$IFACE != X ]; then
+ if [ X$IP_ADDRESS = X ]; then
+ IP_ADDRESS=`$IFCONFIG $IFACE | grep "inet addr" | awk -F"[:[:space:]]+" '{print $4}'`
+ fi
+ if [ X$IP_NETMASK = X ]; then
+ IP_NETMASK=`$IFCONFIG $IFACE | grep Bcast | awk -F"[:[:space:]]+" '{print $8}'`
+ fi
+ if [ X$MAC_ADDRESS = X ]; then
+ MAC_ADDRESS=`$IFCONFIG $IFACE | grep HWaddr | awk '{print $5}'`
+ fi
+ if [ X$GATEWAY_IP = X ]; then
+ GATEWAY_IP=`$ROUTE -n | awk '/^0.0.0.0/ {print $2}'`
+ fi
+ if [ X$GATEWAY_MAC = X ]; then
+ $PING -q -c1 $GATEWAY_IP >/dev/null 2>&1
+ GATEWAY_MAC=`$ARP -an | grep "$GATEWAY_IP[^0-9]" | awk '{print $4}'`
+ fi
+ fi
+ ;;
+esac
+
+if [ X$IP_ADDRESS != X ]; then
+ ipmitool_lan_set "ipsrc" "static"
+ ipmitool_lan_set "ipaddr" "$IP_ADDRESS"
+fi
+
+if [ X$IP_NETMASK != X ]; then
+ ipmitool_lan_set "netmask" "$IP_NETMASK"
+fi
+
+if [ X$MAC_ADDRESS != X ]; then
+ ipmitool_lan_set "macaddr" "$MAC_ADDRESS"
+fi
+
+if [ X$GATEWAY_IP != X ]; then
+ ipmitool_lan_set "defgw ipaddr" "$GATEWAY_IP"
+fi
+
+if [ X$GATEWAY_MAC != X ]; then
+ ipmitool_lan_set "defgw macaddr" "$GATEWAY_MAC"
+fi
+
+if [ X$PASSWORD != X ]; then
+ ipmitool_lan_set "password" "$PASSWORD"
+fi
+
+if [ X$SNMP != X ]; then
+ ipmitool_lan_set "snmp" "$SNMP"
+fi
+
+if [ "$GRATARP" -ne 0 ]; then
+ ipmitool_lan_set "arp generate" "on"
+ ipmitool_lan_set "arp interval" "$GRATARP"
+else
+ ipmitool_lan_set "arp generate" "off"
+fi
+
+echo "Setting channel authentication capabilities"
+ipmitool_lan_set "auth callback,user,operator,admin" "md2,md5"
+
+echo "Enabling channel $CHANNEL"
+ipmitool_lan_set "access" "on"
+ipmitool_lan_set "user"
+
+exit 0
diff --git a/contrib/collect_data.sh b/contrib/collect_data.sh
new file mode 100755
index 0000000..c0a5099
--- /dev/null
+++ b/contrib/collect_data.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# Copyright (c) 2003 Fredrik Ohrn. All Rights Reserved.
+#
+# See the included COPYING file for license details.
+#
+
+# Edit the variables
+
+hostname=$HOSTNAME
+
+ipmi_cmd="/usr/local/bin/ipmitool -I open"
+rrd_dir="/some/dir/rrd"
+
+# No need to edit below this point.
+
+IFS="
+"
+
+for line in `eval $ipmi_cmd -c sdr list full` ; do
+
+ IFS=,
+
+ split=($line)
+
+ file="$rrd_dir/$hostname-${split[0]}.rrd"
+
+ rrdupdate "$file" "N:${split[1]}"
+done
diff --git a/contrib/create_rrds.sh b/contrib/create_rrds.sh
new file mode 100755
index 0000000..7298e1a
--- /dev/null
+++ b/contrib/create_rrds.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# Copyright (c) 2003 Fredrik Ohrn. All Rights Reserved.
+#
+# See the included COPYING file for license details.
+#
+
+# Edit the variables
+
+hostname=$HOSTNAME
+
+ipmi_cmd="/usr/local/bin/ipmitool -I open"
+rrd_dir="/some/dir/rrd"
+
+# No need to edit below this point.
+
+IFS="
+"
+
+for line in `eval $ipmi_cmd -c -v sdr list full` ; do
+
+ IFS=,
+
+ split=($line)
+
+ file="$rrd_dir/$hostname-${split[0]}.rrd"
+
+ if [ -e "$file" ] ; then
+ echo "Skipping existing file $file"
+ continue
+ fi
+
+ echo "Creating file $file"
+
+ rrdtool create "$file" \
+ --step 300 DS:var:GAUGE:900:${split[16]}:${split[17]} \
+ RRA:AVERAGE:0.5:1:288 \
+ RRA:AVERAGE:0.5:6:336 \
+ RRA:AVERAGE:0.5:12:720
+done
diff --git a/contrib/create_webpage.sh b/contrib/create_webpage.sh
new file mode 100755
index 0000000..7152b3d
--- /dev/null
+++ b/contrib/create_webpage.sh
@@ -0,0 +1,211 @@
+#!/bin/bash
+#
+# Copyright (c) 2003-2004 Fredrik Ohrn. All Rights Reserved.
+#
+# See the included COPYING file for license details.
+#
+
+# Edit the variables
+
+hostname=$HOSTNAME
+
+ipmi_cmd="/usr/local/bin/ipmitool -I open"
+rrd_dir="/some/dir/rrd"
+
+# Full path to the rrdcgi executable.
+rrdcgi=/usr/local/bin/rrdcgi
+
+# Where should rrdcgi store the graphs? This path must be within the
+# document root and writable by the webserver user.
+img_dir=/usr/local/apache2/htdocs/images/graphs
+
+# Where will the graphs show up on the webserver?
+web_dir=/images/graphs
+
+# Size of graph area (excluding title, legends etc.)
+graph_width=500
+graph_height=150
+
+# Graphs to include on page
+graph_daily=1
+graph_weekly=1
+graph_monthly=0
+
+
+# No need to edit below this point.
+
+color[0]="2020FF"
+color[1]="20FF20"
+color[2]="FF2020"
+color[3]="FF21FF"
+color[4]="21FFFF"
+color[5]="FFFF21"
+color[6]="8F21FF"
+color[7]="21FF8F"
+color[8]="FF8F21"
+color[9]="FF2190"
+color[10]="2190FF"
+color[11]="90FF21"
+
+cat << EOF
+#!$rrdcgi
+<html>
+<head>
+<title>$hostname</title>
+<RRD::GOODFOR 300>
+<body>
+<h2>$hostname</h2>
+EOF
+
+
+IFS="
+"
+
+i=0
+groups=
+
+for line in `eval $ipmi_cmd -c -v sdr list full` ; do
+
+ IFS=,
+
+ split=($line)
+
+ file="$rrd_dir/$hostname-${split[0]}.rrd"
+ group=`echo "${split[2]} ${split[*]:10:6}" | tr ' .-' ___`
+
+ group_color=${group}_color
+
+ if [ -z "${!group}" ] ; then
+ groups="$groups $group"
+
+ declare $group_color=0
+
+ group_unit=${group}_unit
+ declare $group_unit="${split[2]}"
+
+ group_title=${group}_title
+ declare $group_title="${split[5]} / ${split[6]}"
+
+ group_thres=${group}_thres
+ declare $group_thres="${split[10]},${split[11]},${split[12]},${split[13]},${split[14]},${split[15]}"
+ fi
+
+ declare $group="${!group}
+ DEF:var$i=\"$file\":var:AVERAGE LINE1:var$i#${color[${!group_color}]}:\"${split[0]}\""
+
+ declare $group_color=$[ ${!group_color} + 1 ]
+
+ c=$[ c + 1 ]
+ i=$[ i + 1 ]
+done
+
+IFS=" "
+
+for group in $groups ; do
+
+ group_unit=${group}_unit
+ group_title=${group}_title
+ group_thres=${group}_thres
+
+ IFS=,
+
+ split=(${!group_thres})
+
+ thres=
+
+ if [ -n "${split[0]}" ] ; then
+ if [ -n "${split[3]}" ] ; then
+ thres="
+ HRULE:${split[0]}#000000
+ HRULE:${split[3]}#000000:\"Upper & lower non-recoverable thresholds\""
+ else
+ thres="
+ HRULE:${split[0]}#000000:\"Upper non-recoverable threshold\""
+ fi
+ else
+ if [ -n "${split[3]}" ] ; then
+ thres="
+ HRULE:${split[3]}#000000:\"Lower non-recoverable threshold\""
+ fi
+ fi
+
+ if [ -n "${split[1]}" ] ; then
+ if [ -n "${split[4]}" ] ; then
+ thres="$thres
+ HRULE:${split[1]}#FF0000
+ HRULE:${split[4]}#FF0000:\"Upper & lower critical thresholds\""
+ else
+ thres="$thres
+ HRULE:${split[1]}#FF0000:\"Upper critical threshold\""
+ fi
+ else
+ if [ -n "${split[4]}" ] ; then
+ thres="$thres
+ HRULE:${split[4]}#FF0000:\"Lower critical threshold\""
+ fi
+ fi
+
+ if [ -n "${split[2]}" ] ; then
+ if [ -n "${split[5]}" ] ; then
+ thres="$thres
+ HRULE:${split[2]}#FFCC00
+ HRULE:${split[5]}#FFCC00:\"Upper & lower warning thresholds\""
+ else
+ thres="$thres
+ HRULE:${split[2]}#FFCC00:\"Upper warning threshold\""
+ fi
+ else
+ if [ -n "${split[5]}" ] ; then
+ thres="$thres
+ HRULE:${split[5]}#FFCC00:\"Lower warning threshold\""
+ fi
+ fi
+
+ echo "<h3>${!group_title}</h3>"
+
+ if [ "$graph_daily" -ne 0 ] ; then
+ cat << EOF
+<RRD::GRAPH "$img_dir/$hostname-$group-daily.gif"
+ --imginfo "<img src="$web_dir/%s" width="%lu" height="%lu">"
+ --lazy
+ --vertical-label "${!group_unit}"
+ --title "Daily graph"
+ --height $graph_height
+ --width $graph_width ${!group} $thres
+>
+EOF
+ fi
+
+ if [ "$graph_weekly" -ne 0 ] ; then
+ cat << EOF
+<RRD::GRAPH "$img_dir/$hostname-$group-weekly.gif"
+ --imginfo "<img src="$web_dir/%s" width="%lu" height="%lu">"
+ --lazy
+ --start -7d
+ --vertical-label "${!group_unit}"
+ --title "Weelky graph"
+ --height $graph_height
+ --width $graph_width ${!group} $thres
+>
+EOF
+ fi
+
+ if [ "$graph_monthly" -ne 0 ] ; then
+ cat << EOF
+<RRD::GRAPH "$img_dir/$hostname-$group-monthly.gif"
+ --imginfo "<img src="$web_dir/%s" width="%lu" height="%lu">"
+ --lazy
+ --start -30d
+ --vertical-label "${!group_unit}"
+ --title "Monthly graph"
+ --height $graph_height
+ --width $graph_width ${!group} $thres
+>
+EOF
+ fi
+done
+
+cat << EOF
+</body>
+</html>
+EOF
diff --git a/contrib/create_webpage_compact.sh b/contrib/create_webpage_compact.sh
new file mode 100755
index 0000000..d8df05b
--- /dev/null
+++ b/contrib/create_webpage_compact.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+#
+# Copyright (c) 2003-2004 Fredrik Ohrn. All Rights Reserved.
+#
+# See the included COPYING file for license details.
+#
+
+# Edit the variables
+
+hostname=$HOSTNAME
+
+ipmi_cmd="/usr/local/bin/ipmitool -I open"
+rrd_dir="/some/dir/rrd"
+
+# Full path to the rrdcgi executable.
+rrdcgi=/usr/local/bin/rrdcgi
+
+# Where should rrdcgi store the graphs? This path must be within the
+# document root and writable by the webserver user.
+img_dir=/usr/local/apache2/htdocs/images/graphs
+
+# Where will the graphs show up on the webserver?
+web_dir=/images/graphs
+
+# Size of graph area (excluding title, legends etc.)
+graph_width=500
+graph_height=150
+
+# Graphs to include on page
+graph_daily=1
+graph_weekly=1
+graph_monthly=0
+
+
+# No need to edit below this point.
+
+color[0]="2020FF"
+color[1]="20FF20"
+color[2]="FF2020"
+color[3]="FF21FF"
+color[4]="21FFFF"
+color[5]="FFFF21"
+color[6]="8F21FF"
+color[7]="21FF8F"
+color[8]="FF8F21"
+color[9]="FF2190"
+color[10]="2190FF"
+color[11]="90FF21"
+
+cat << EOF
+#!$rrdcgi
+<html>
+<head>
+<title>$hostname</title>
+<RRD::GOODFOR 300>
+<body>
+<h2>$hostname</h2>
+EOF
+
+
+IFS="
+"
+
+i=0
+groups=
+
+for line in `eval $ipmi_cmd -c -v sdr list full` ; do
+
+ IFS=,
+
+ split=($line)
+
+ file="$rrd_dir/$hostname-${split[0]}.rrd"
+ group=`echo "${split[2]}" | tr ' .-' ___`
+
+ group_color=${group}_color
+
+ if [ -z "${!group}" ] ; then
+ groups="$groups $group"
+
+ declare $group_color=0
+
+ group_unit=${group}_unit
+ declare $group_unit="${split[2]}"
+ fi
+
+ declare $group="${!group}
+ DEF:var$i=\"$file\":var:AVERAGE LINE1:var$i#${color[${!group_color}]}:\"${split[0]}\""
+
+ declare $group_color=$[ ${!group_color} + 1 ]
+
+ c=$[ c + 1 ]
+ i=$[ i + 1 ]
+done
+
+IFS=" "
+
+for group in $groups ; do
+
+ group_unit=${group}_unit
+
+ IFS=,
+
+ echo "<h3>${!group_unit}</h3>"
+
+ if [ "$graph_daily" -ne 0 ] ; then
+ cat << EOF
+<RRD::GRAPH "$img_dir/$hostname-$group-daily.gif"
+ --imginfo "<img src="$web_dir/%s" width="%lu" height="%lu">"
+ --lazy
+ --vertical-label "${!group_unit}"
+ --title "Daily graph"
+ --height $graph_height
+ --width $graph_width ${!group}
+>
+EOF
+ fi
+
+ if [ "$graph_weekly" -ne 0 ] ; then
+ cat << EOF
+<RRD::GRAPH "$img_dir/$hostname-$group-weekly.gif"
+ --imginfo "<img src="$web_dir/%s" width="%lu" height="%lu">"
+ --lazy
+ --start -7d
+ --vertical-label "${!group_unit}"
+ --title "Weelky graph"
+ --height $graph_height
+ --width $graph_width ${!group}
+>
+EOF
+ fi
+
+ if [ "$graph_monthly" -ne 0 ] ; then
+ cat << EOF
+<RRD::GRAPH "$img_dir/$hostname-$group-monthly.gif"
+ --imginfo "<img src="$web_dir/%s" width="%lu" height="%lu">"
+ --lazy
+ --start -30d
+ --vertical-label "${!group_unit}"
+ --title "Monthly graph"
+ --height $graph_height
+ --width $graph_width ${!group}
+>
+EOF
+ fi
+done
+
+cat << EOF
+</body>
+</html>
+EOF
diff --git a/contrib/exchange-bmc-os-info.init.redhat b/contrib/exchange-bmc-os-info.init.redhat
new file mode 100644
index 0000000..b7ec43f
--- /dev/null
+++ b/contrib/exchange-bmc-os-info.init.redhat
@@ -0,0 +1,326 @@
+#!/bin/sh
+#############################################################################
+#
+# exchange-bmc-os-info: Set OS and BMC (Baseboard Management Controller)
+# parameters during system startup.
+#
+# version: 0.72
+#
+# Authors: Charles Rose <charles_rose@dell.com>
+# Jordan Hargrave <jordan_hargrave@dell.com>
+#
+# Description: Script to set OS information in the BMC; fetch BMC IP/URL
+# and set in the OS for use by other scripts/user.
+#
+# BMC IP and URL are made available in /var/run/bmc-info
+#
+# Example to launch BMC web-interface:
+# # . /var/run/bmc-info
+# # xdg-open $BMC_URL
+#
+# See here for details:
+# https://fedoraproject.org/wiki/Features/AgentFreeManagement
+#
+# OEM Specific: OEM specific ipmi commands go in:
+# 'oem_set_os_version' and 'oem_get_bmc_url'
+#############################################################################
+#
+# chkconfig: 345 99 00
+# description: Set OS name, hostname in BMC; make BMC IP/URL available in OS
+# processname: exchange-bmc-os-info
+# config: /etc/sysconfig/exchange-bmc-os-info
+#
+### BEGIN INIT INFO
+# Provides: exchange-bmc-os-info
+# Required-Start: ipmi
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+
+
+#############################################################################
+# GLOBALS
+#############################################################################
+CONFIGFILE=/etc/sysconfig/exchange-bmc-os-info
+IPMI_TOOL=/usr/bin/ipmitool
+BMC_INFO=/var/run/bmc-info
+
+# BMC Manufacturer ID used in 'oem_set_os_version' and 'oem_get_bmc_url'
+DELL="674"
+#OTHER_OEM="123"
+
+# Defaults for ${CONFIGFILE}
+SET_OS_INFO="yes"
+RESET_OS_INFO="no"
+SET_BMC_INFO="yes"
+
+# getsysinfo and setsysinfo commands
+IPMI_SET_SYSINFO="${IPMI_TOOL} mc setsysinfo"
+IPMI_GET_SYSINFO="${IPMI_TOOL} mc getsysinfo"
+#############################################################################
+SCRIPT_NAME=$(basename $0)
+
+# source config
+[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
+
+RETVAL=0
+
+if [ -f /bin/gettext.sh ]; then
+ GETTEXT=1
+ . /bin/gettext.sh
+ OUTPUT="eval_gettext"
+else
+ GETTEXT=0
+ OUTPUT="echo"
+fi
+
+#############################################################################
+# Get Vendor ID of BMC for use in 'oem_set_os_version' and 'oem_get_bmc_url'
+#
+get_bmc_vendor_id()
+{
+ BMC_VENDOR=$(${IPMI_TOOL} mc info 2>/dev/null | \
+ sed -n "s#^Manufacturer ID.*: ##p")
+ [ -z "${BMC_VENDOR}" ] && RETVAL=4
+}
+
+check_ipmitool()
+{
+ if [ -x ${IPMI_TOOL} ]; then
+ # v1.8.12 plus patches are required for set/getsysinfo support
+ # http://sourceforge.net/mailarchive/message.php?msg_id=29647222
+ [ ! ${IPMI_GET_SYSINFO} >/dev/null 2>&1 ] && \
+ RETVAL=3
+ else
+ RETVAL=2
+ fi
+}
+
+bmc_exists()
+{
+ check_ipmitool
+ [ $RETVAL -eq 0 ] && get_bmc_vendor_id
+ return $RETVAL
+}
+#############################################################################
+
+get_os_info()
+{
+ OS_HOSTNAME=$(hostname)
+ KERNEL_VERSION=$(uname -r -m)
+
+ if [ -e /etc/lsb-release ] ; then
+ . /etc/lsb-release
+ NAME=${DISTRIB_ID}
+ VERSION="${DISTRIB_RELEASE} ${DISTRIB_CODENAME}"
+ fi
+
+ # we prefer systemd's /etc/os-release over other sources
+ [ -e /etc/os-release ] && . /etc/os-release
+
+ OS_NAME=${NAME}
+ OS_VERSION="${VERSION} kernel ${KERNEL_VERSION}"
+}
+
+oem_set_os_version()
+{
+ # OS Version setting is not standard yet
+ # we need per vendor oem commands
+ case "${BMC_VENDOR}" in
+ $DELL) ${IPMI_SET_SYSINFO} delloem_os_version \
+ "${OS_VERSION}" > /dev/null 2>&1
+ return $?
+ ;;
+# Add OEM specific commands.
+# Example:
+# $OTHER_OEM) ${IPMI_SET_SYSINFO} otheroem_os_version \
+# "${OS_VERSION}" > /dev/null 2>&1
+# return $?
+# ;;
+ *) return 0
+ ;;
+ esac
+}
+
+set_os_info()
+{
+ # Set and reset OS info in the BMC
+ if [ "$1" = "reset" ]; then
+ OS_NAME=""
+ OS_HOSTNAME=""
+ OS_VERSION=""
+ fi
+
+ ${IPMI_SET_SYSINFO} os_name "${OS_NAME}" >/dev/null 2>&1 \
+ || RETVAL=6
+ ${IPMI_SET_SYSINFO} primary_os_name "${OS_NAME}" >/dev/null 2>&1 \
+ || RETVAL=6
+ ${IPMI_SET_SYSINFO} system_name "${OS_HOSTNAME}" >/dev/null 2>&1 \
+ || RETVAL=6
+ oem_set_os_version || RETVAL=6
+}
+
+#############################################################################
+valid_url()
+{
+ url="(https?|http)://[a-z0-9-]+(\.[a-z0-9-]+)+([/?].*)?"
+ printf -- "%s" "${TMP_URL}"| grep -Eq "^${url}"
+ return $?
+}
+
+oem_get_bmc_url()
+{
+ # BMC URL is not standard yet
+ # we need per vendor oem commands
+ case "$BMC_VENDOR" in
+ $DELL) TMP_URL=$(${IPMI_GET_SYSINFO} delloem_url 2> /dev/null)
+ ;;
+# Add OEM specific commands
+# Example:
+# $OTHER_OEM)
+# TMP_URL=$(${IPMI_GET_SYSINFO} otheroem_url 2> /dev/null)
+# ;;
+ *) TMP_URL="" ;;
+ esac
+
+ valid_url && BMC_URL=${TMP_URL} || BMC_URL=""
+}
+
+valid_ip()
+{
+ #Thanks to mkyong.com
+ octet="([01]?[[:digit:]][[:digit:]]?|2[0-4][[:digit:]]|25[0-5])"
+
+ printf -- "%s" "${TMP_IPv4}"| grep -Eq "^${octet}\\.${octet}\\.${octet}\\.${octet}$"
+ return $?
+}
+
+get_bmc_ip()
+{
+ #Thanks to http://ingvar.blog.redpill-linpro.com
+ for CHANNEL in `seq 1 14`
+ do
+ [ $(${IPMI_TOOL} lan print ${CHANNEL} 2>/dev/null \
+ | grep -q "^Set") ] || break
+ done
+
+ # Get BMC_IPv4 and BMC_URL from BMC
+ TMP_IPv4=$(${IPMI_TOOL} lan print ${CHANNEL} 2>/dev/null \
+ | sed -n "s#^IP Address .*: ##p")
+
+ valid_ip && BMC_IPv4=${TMP_IPv4} || BMC_IPv4=""
+}
+
+get_bmc_info()
+{
+ get_bmc_ip
+ if [ -z "${BMC_IPv4}" ] || [ "${BMC_IPv4}" = "0.0.0.0" ]; then
+ BMC_IPv4=""
+ RETVAL=5
+ else
+ # URL makes sense only if there is an IP
+ oem_get_bmc_url
+ fi
+}
+
+set_bmc_info()
+{
+ if [ ! $(touch "${BMC_INFO}" && chmod 600 "${BMC_INFO}") ]; then
+ printf "BMC_IPv4=%s\n" "${BMC_IPv4}" > "${BMC_INFO}"
+ [ -n "${BMC_URL}" ] && \
+ printf "BMC_URL=%s\n" "${BMC_URL}" >> "${BMC_INFO}"
+ else
+ RETVAL=5
+ fi
+}
+
+unset_bmc_info()
+{
+ [ -f ${BMC_INFO} ] && rm -f ${BMC_INFO} > /dev/null 2>&1
+}
+
+#############################################################################
+start()
+{
+ if bmc_exists; then
+ [ "${SET_OS_INFO}" = "yes" ] && \
+ get_os_info && set_os_info
+
+ if [ "${SET_BMC_INFO}" = "yes" ]; then
+ get_bmc_info
+ if [ ${RETVAL} -eq 0 ]; then
+ set_bmc_info
+ fi
+ fi
+ fi
+}
+
+#############################################################################
+stop()
+{
+ if bmc_exists; then
+ # reset OS info while system reboots
+ # aids with debugging OS boot-up issues
+ if [ "${RESET_OS_INFO}" = "yes" ]; then
+ set_os_info reset
+ fi
+ unset_bmc_info
+ fi
+}
+
+#############################################################################
+restart()
+{
+ stop
+ [ $RETVAL -eq 0 ] && start
+}
+
+#############################################################################
+status()
+{
+ [ -r ${BMC_INFO} ] && \
+ grep -q "BMC_IPv4" "${BMC_INFO}" >/dev/null 1>&2 && \
+ BMC_STATUS="ok" || BMC_STATUS="inactive"
+ ${OUTPUT} "${SCRIPT_NAME}: ${BMC_STATUS}" 1>&2
+ [ ${GETTEXT} -eq 1 ] && echo
+}
+
+#############################################################################
+usage()
+{
+ ${OUTPUT} "Usage: ${SCRIPT_NAME} {start|stop|restart|status}" 1>&2
+ [ ${GETTEXT} -eq 1 ] && echo
+ RETVAL=1
+}
+
+#############################################################################
+# MAIN
+#############################################################################
+case "$1" in
+ start) start ;;
+ stop) stop ;;
+ restart) restart ;;
+ status) status ;;
+ *) usage ;;
+esac
+
+case "$RETVAL" in
+ 0|1) ;;
+ 2) ${OUTPUT} "${SCRIPT_NAME}: ipmitool(1) not found." 1>&2 ;;
+ 3) ${OUTPUT} "${SCRIPT_NAME}: this version of ipmitool does not support getsysinfo." 1>&2 ;;
+ 4) ${OUTPUT} "${SCRIPT_NAME}: failed to communicate with BMC." 1>&2 ;;
+ 5) ${OUTPUT} "${SCRIPT_NAME}: failed to set OS information in BMC." 1>&2 ;;
+ 6) ${OUTPUT} "${SCRIPT_NAME}: failed to get BMC information." 1>&2 ;;
+ *) ${OUTPUT} "${SCRIPT_NAME}: unexpected error." 1>&2 ;;
+esac
+
+if [ ${RETVAL} -gt 1 ]; then
+ ${OUTPUT} " Return code: ${RETVAL}" 1>&2
+ [ ${GETTEXT} -eq 1 ] && echo
+fi
+
+
+exit ${RETVAL}
+
+#############################################################################
+# end of file
+#############################################################################
diff --git a/contrib/exchange-bmc-os-info.service.redhat b/contrib/exchange-bmc-os-info.service.redhat
new file mode 100644
index 0000000..100493b
--- /dev/null
+++ b/contrib/exchange-bmc-os-info.service.redhat
@@ -0,0 +1,13 @@
+[Unit]
+Description=Exchange Information between BMC and OS
+After=ipmi.service network.target
+Requires=ipmi.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/libexec/exchange-bmc-os-info start
+ExecStop=/usr/libexec/exchange-bmc-os-info stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/contrib/exchange-bmc-os-info.sysconf b/contrib/exchange-bmc-os-info.sysconf
new file mode 100644
index 0000000..2f0e675
--- /dev/null
+++ b/contrib/exchange-bmc-os-info.sysconf
@@ -0,0 +1,26 @@
+# exchange-bmc-os-info
+#
+# Config file to control Exchange of information between
+# the OS and Service Processor/Baseboard Management Controller (BMC)
+#
+# See here for details
+# https://fedoraproject.org/wiki/Features/AgentFreeManagement
+
+### Set OS Info in BMC/Service Processor ###
+# Name: SET_OS_INFO
+# Description: Set OS Name, Version and Hostname in the Service Processor (BMC)
+# Default: yes
+SET_OS_INFO="yes"
+
+### Reset OS Info in BMC/Service Processor ###
+# Name: RESET_OS_INFO
+# Description: Reset OS Name, Version and Hostname in the Service Processor (BMC).
+# Useful when the OS Name/Hostname should be empty on reboot
+# Default: no
+RESET_OS_INFO="no"
+
+### Set BMC/Service Processor Info in OS ###
+# Name; SET_BMC_INFO
+# Description: Set IP Address and URL of Service Processor/BMC in /run/bmc-info
+# Default: yes
+SET_BMC_INFO="yes"
diff --git a/contrib/ipmi.init.basic b/contrib/ipmi.init.basic
new file mode 100755
index 0000000..96ca922
--- /dev/null
+++ b/contrib/ipmi.init.basic
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+echo "Setting up OpenIPMI driver..."
+
+# load the ipmi modules
+modprobe ipmi_msghandler
+modprobe ipmi_devintf
+if ! modprobe ipmi_si_drv ; then
+ modprobe ipmi_si # try new module name
+fi
+
+maj=$(cat /proc/devices | awk '/ipmidev/{print $1}')
+if [ "$maj" ]; then
+ test -e /dev/ipmi0 && rm -f /dev/ipmi0
+ /bin/mknod /dev/ipmi0 c $maj 0
+fi
+
diff --git a/contrib/ipmi.init.redhat b/contrib/ipmi.init.redhat
new file mode 100755
index 0000000..f77168c
--- /dev/null
+++ b/contrib/ipmi.init.redhat
@@ -0,0 +1,222 @@
+#!/bin/sh
+#
+# chkconfig: 2345 11 60
+# description: start, stop, or query ipmi system monitoring tools
+# config: /etc/sysconfig/ipmi
+#
+# For Redhat, Fedora, or similar systems. Handles both 2.4 and 2.6
+# configurations. Requires an /etc/sysconfig/ipmi file to function,
+# see below.
+#
+# Phil Hollenback
+# philiph@pobox.com
+
+# Source function library.
+. /etc/init.d/functions
+
+# Exit silently if we don't have a sysconfig file,
+# and read IPMI setting from it to determine whether or
+# not to continue.
+# The only current setting is ipmi={YES|NO}, whether or not
+# to enable IPMI.
+[ -f /etc/sysconfig/ipmi ] || exit 0
+. /etc/sysconfig/ipmi
+[ "${IPMI}" = "yes" ] || exit 0
+
+RETVAL=0
+
+start() {
+ echo -n $"Starting ipmi: "
+
+ # If ipmidev isn't listed in /proc/devices, try
+ # loading the modules.
+ if ! grep -q ipmidev /proc/devices
+ then
+ /sbin/modprobe ipmi_msghandler || RETVAL=1
+ /sbin/modprobe ipmi_devintf || RETVAL=1
+ # Try loading new driver module, fall back to old
+ # module if that fails.
+ if ! /sbin/modprobe ipmi_si >/dev/null 2>&1
+ then
+ /sbin/modprobe ipmi_si_drv || RETVAL=1
+ fi
+ fi
+
+
+ # If ipmidev still isn't listed in /proc/devices after we load
+ # modules, this just isn't going to work. Set RETVAL to mark
+ # this failure.
+ grep -q ipmidev /proc/devices || RETVAL=1
+
+ # remove old device file always
+ # in case ipmi gets assigned new dynamic major number from kernel
+ if [ -c /dev/ipmi0 ]; then
+ rm -f /dev/ipmi0
+ fi
+
+ # Check if the device file exists and create if not.
+ if [ ! -c /dev/ipmi0 ] && [ $RETVAL -eq 0 ]
+ then
+ major=$(awk '/ ipmidev$/{print $1}' /proc/devices)
+ /bin/mknod -m 0600 /dev/ipmi0 c $major 0 || RETVAL=1
+ fi
+
+ if [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ipmi ; then
+ echo_success
+ echo
+ else
+ echo_failure
+ echo
+ fi
+}
+
+stop() {
+ echo -n $"Shutting down ipmi: "
+
+ # Stop doesn't actually do anything because we currently don't
+ # unload ipmi modules on stop. That might change in the future
+ # if we decide unloading the ipmi modules is safe.
+ RETVAL=0
+
+ if [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ipmi ; then
+ echo_success
+ echo
+ else
+ echo_failure
+ echo
+ fi
+}
+
+dostatus() {
+ # Extract cpu temperatures from ipmitool output.
+
+ # Abort if we don't have the ipmitool program.
+ if ! /usr/bin/ipmitool -V >/dev/null
+ then
+ echo "/usr/bin/ipmitool not found!" >&2
+ exit 1
+ fi
+
+ # Abort if ipmi isn't loaded.
+ if ! grep -q ipmidev /proc/devices
+ then
+ echo "ipmi not listed in /proc/devices!" >&2
+ exit 1
+ fi
+
+ # Check if we are running on a v1.0 IPMI system, and
+ # change our processor search string appropriately.
+ if /usr/bin/ipmitool -I open bmc info | \
+ grep -q "IPMI Version.*1.0"
+ then
+ IpmiVersion="1.0"
+ fi
+
+ # Determine # of running processors
+ NumProcs=$(grep -c processor /proc/cpuinfo)
+ if [ $NumProcs -eq 0 ]
+ then
+ echo "Can't determine number of processors!" >&2
+ exit 1
+ fi
+
+ # Now build the query string. Concatenate it into
+ # one string because that's more efficient on 2.4 systems.
+ Count=1
+ TempString=""
+ while [ $Count -le $NumProcs ]
+ do
+ if [ x$IpmiVersion = x"1.0" ]
+ then
+ TempString="$TempString CPU\ $Count"
+ else
+ TempString="$TempString Processor$Count\ Temp"
+ fi
+ Count=$((Count + 1))
+ done
+ # building TempString like this and eval'ing it is ugly, but
+ # it's the only way I could make the quoting work. Sorry.
+ TempString="/usr/bin/ipmitool -I open sensor get $TempString"
+ eval $TempString | awk -v "c=$Count" '
+BEGIN {
+ n = 1
+}
+/Sensor Reading/ {
+ printf "CPU%s Temp: %s\n",n,$4
+ n++
+}
+END {
+ if ( n != c) {
+ printf "Error: found %s CPUs, but got temps for %s\n",--c,--n >"/dev/stderr"
+ exit 1
+ }
+ exit 0
+}'
+ RETVAL=$((RETVAL + $?))
+ return $RETVAL
+}
+
+restart() {
+ stop
+ start
+ RETVAL=$?
+}
+
+condrestart() {
+ [ -e /var/lock/subsys/ipmi ] && restart || :
+}
+
+remove () {
+ # Actually remove the drivers. Don't do during stop in case
+ # this causes system to become unstable (a la lm_sensors)
+ if /sbin/lsmod | awk '{print $1}' | grep -q ipmi_
+ then
+ # Try removing both 2.4 and 2.6 modules.
+ /sbin/rmmod ipmi_si 2>/dev/null
+ /sbin/rmmod ipmi_si_drv 2>/dev/null
+ /sbin/rmmod ipmi_devintf
+ /sbin/rmmod ipmi_msghandler
+ else
+ echo "No ipmi modules loaded!" >&2
+ RETVAL=1
+ return $RETVAL
+ fi
+
+ # Wait a sec to give modules time to unload.
+ sleep 1
+
+ # Check if we failed to remove any modules, and complain if so.
+ if /sbin/lsmod | awk '{print $1}' | grep -q ipmi_
+ then
+ echo "ipmi modules still loaded!" >&2
+ RETVAL=1
+ return $RETVAL
+ fi
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ dostatus
+ ;;
+ restart|reload)
+ restart
+ ;;
+ condrestart)
+ condrestart
+ ;;
+ remove)
+ remove
+ ;;
+ *)
+ echo "Usage: ipmi {start|stop|status|restart|condrestart|remove}"
+ exit 1
+esac
+
+exit $RETVAL
diff --git a/contrib/ipmievd.init.debian b/contrib/ipmievd.init.debian
new file mode 100755
index 0000000..1783d1a
--- /dev/null
+++ b/contrib/ipmievd.init.debian
@@ -0,0 +1,92 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: ipmievd
+# Required-Start: $local_fs $remote_fs $syslog
+# Required-Stop: $local_fs $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: S 0 1 6
+# Short-Description: IPMI event daemon
+# Description: ipmievd is a daemon which will listen for events
+# from the BMC that are being sent to the SEL and
+# also log those messages to syslog.
+### END INIT INFO
+#
+# Author: Elmar Hoffmann <elho@elho.net>
+# Licence: This script is public domain using the same
+# licence as ipmitool itself.
+# Modified by: Petter Reinholdtsen
+
+set -e
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DESC="IPMI event daemon"
+NAME=ipmievd
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+# Gracefully exit if the package has been removed.
+test -x $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+. /etc/default/rcS
+
+# Options used by ipmievd.
+#
+# "open" uses the asynchronous event notification from the OpenIPMI
+# kernel driver, "sel" uses active polling of the contents of the SEL
+# for new events.
+#
+# Need to force 'daemon' mode, to make sure messages are sent to
+# syslog and the program forks into the background.
+#
+# Se ipmievd(8) for more info.
+IPMIEVD_OPTIONS="open daemon"
+
+# Read config file if it is present.
+[ -f /etc/default/$NAME ] && . /etc/default/$NAME
+
+#
+# Function that starts the daemon/service.
+#
+d_start() {
+ start-stop-daemon --start --quiet --exec $DAEMON -- $IPMIEVD_OPTIONS
+}
+
+#
+# Function that stops the daemon/service.
+#
+d_stop() {
+ start-stop-daemon --stop --quiet --name $NAME --exec $DAEMON
+}
+
+CODE=0
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_begin_msg "Starting $DESC" "$NAME"
+ d_start || CODE=$?
+ [ "$VERBOSE" != no ] && log_end_msg $CODE
+ exit $CODE
+ ;;
+ stop)
+ log_begin_msg "Stopping $DESC" "$NAME"
+ d_stop || CODE=$?
+ log_end_msg $CODE
+ exit $CODE
+ ;;
+ restart|force-reload)
+ log_begin_msg "Restarting $DESC" "$NAME"
+ d_stop || true
+ sleep 1
+ d_start || CODE=$?
+ log_end_msg $CODE
+ exit $CODE
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/contrib/ipmievd.init.redhat b/contrib/ipmievd.init.redhat
new file mode 100755
index 0000000..1c0253d
--- /dev/null
+++ b/contrib/ipmievd.init.redhat
@@ -0,0 +1,87 @@
+#!/bin/bash
+#
+# /etc/rc.d/init.d/ipmievd
+#
+# Based on example sysvinitfiles script
+# Copyright (c) 2000 Red Hat Software, Inc.
+#
+# chkconfig: 345 99 00
+# description: ipmievd daemon to send events to syslog
+# processname: ipmievd
+# config: /etc/sysconfig/ipmievd
+#
+### BEGIN INIT INFO
+# Provides: ipmievd
+# Required-Start: $syslog ipmi
+# Should-Start: $time
+# Required-Stop: $syslog ipmi
+# Should-Stop: $time
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: ipmievd daemon to send events to syslog
+# Description: Start ipmievd to read events from BMC and
+# log them to syslog. Events correspond to hardware faults,
+# state transitions such as power on and off, and sensor
+# readings such as temperature, voltage and fan speed that
+# are abnormal.
+### END INIT INFO
+
+IPMIEVD_BIN=/usr/sbin/ipmievd
+test -x $IPMIEVD_BIN || { echo "$IPMIEVD_BIN not installed";
+ if [ "$1" = "stop" ]; then exit 0;
+ else exit 5; fi; }
+
+# Check for existence of needed config file
+IPMIEVD_CONFIG=/etc/sysconfig/ipmievd
+test -r $IPMIEVD_CONFIG || { echo "$IPMIEVD_CONFIG does not exist";
+ if [ "$1" = "stop" ]; then exit 0;
+ else exit 6; fi; }
+
+# Read config file
+. $IPMIEVD_CONFIG
+
+# Source function library.
+. /etc/init.d/functions
+
+start() {
+ echo "Starting ipmievd:"
+ if [ -f /var/lock/subsys/ipmievd ]; then
+ return 0
+ fi
+ daemon $IPMIEVD_BIN $IPMIEVD_OPTIONS
+ ret=$?
+ [ $ret -eq 0 ] && touch /var/lock/subsys/ipmievd
+ return $ret
+}
+
+stop() {
+ echo "Shutting down ipmievd:"
+ killproc $IPMIEVD_BIN
+ ret=$?
+ [ $ret -eq 0 ] && rm -f /var/lock/subsys/ipmievd
+ return $ret
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status $IPMIEVD_BIN
+ ;;
+ restart|reload)
+ stop
+ start
+ ;;
+ condrestart)
+ [ -f /var/lock/subsys/ipmievd ] && restart || :
+ ;;
+ *)
+ echo "Usage: ipmievd {start|stop|status|reload|restart|condrestart}"
+ exit 1
+ ;;
+esac
+exit $?
diff --git a/contrib/ipmievd.init.suse b/contrib/ipmievd.init.suse
new file mode 100755
index 0000000..a1e216c
--- /dev/null
+++ b/contrib/ipmievd.init.suse
@@ -0,0 +1,212 @@
+#!/bin/bash
+#
+# System startup script for ipmievd
+# Based on skeleton.compat example script
+# Copyright (C) 1995--2005 Kurt Garloff, SUSE / Novell Inc.
+#
+# This library is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or (at
+# your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# Note: This template uses functions rc_XXX defined in /etc/rc.status on
+# UnitedLinux/SUSE/Novell based Linux distributions. However, it will work
+# on other distributions as well, by using the LSB (Linux Standard Base)
+# or RH functions or by open coding the needed functions.
+# Read http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/ if you prefer not
+# to use this template.
+#
+# chkconfig: 345 99 00
+# description: ipmievd daemon
+#
+### BEGIN INIT INFO
+# Provides: ipmievd
+# Required-Start: $syslog ipmi
+# Should-Start: $time
+# Required-Stop: $syslog ipmi
+# Should-Stop: $time
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: ipmievd daemon to send events to syslog
+# Description: Start ipmievd to read events from BMC and
+# log them to syslog. Events correspond to hardware faults,
+# state transitions such as power on and off, and sensor
+# readings such as temperature, voltage and fan speed that
+# are abnormal.
+### END INIT INFO
+#
+
+# Check for missing binaries (stale symlinks should not happen)
+# Note: Special treatment of stop for LSB conformance
+IPMIEVD_BIN=/usr/sbin/ipmievd
+test -x $IPMIEVD_BIN || { echo "$IPMIEVD_BIN not installed";
+ if [ "$1" = "stop" ]; then exit 0;
+ else exit 5; fi; }
+
+# Check for existence of needed config file and read it
+IPMIEVD_CONFIG=/etc/sysconfig/ipmievd
+test -r $IPMIEVD_CONFIG || { echo "$IPMIEVD_CONFIG does not exist";
+ if [ "$1" = "stop" ]; then exit 0;
+ else exit 6; fi; }
+
+# Read config
+. $IPMIEVD_CONFIG
+
+if test -e /etc/rc.status; then
+ # SUSE rc script library
+ . /etc/rc.status
+else
+ export LC_ALL=POSIX
+ _cmd=$1
+ declare -a _SMSG
+ if test "${_cmd}" = "status"; then
+ _SMSG=(running dead dead unused unknown reserved)
+ _RC_UNUSED=3
+ else
+ _SMSG=(done failed failed missed failed skipped unused failed failed reserved)
+ _RC_UNUSED=6
+ fi
+ if test -e /lib/lsb/init-functions; then
+ # LSB
+ . /lib/lsb/init-functions
+ echo_rc()
+ {
+ if test ${_RC_RV} = 0; then
+ log_success_msg " [${_SMSG[${_RC_RV}]}] "
+ else
+ log_failure_msg " [${_SMSG[${_RC_RV}]}] "
+ fi
+ }
+ # TODO: Add checking for lockfiles
+ checkproc() { return pidofproc ${1+"$@"} >/dev/null 2>&1; }
+ elif test -e /etc/init.d/functions; then
+ # RHAT
+ . /etc/init.d/functions
+ echo_rc()
+ {
+ #echo -n " [${_SMSG[${_RC_RV}]}] "
+ if test ${_RC_RV} = 0; then
+ success " [${_SMSG[${_RC_RV}]}] "
+ else
+ failure " [${_SMSG[${_RC_RV}]}] "
+ fi
+ }
+ checkproc() { return status ${1+"$@"}; }
+ start_daemon() { return daemon ${1+"$@"}; }
+ else
+ # emulate it
+ echo_rc() { echo " [${_SMSG[${_RC_RV}]}] "; }
+ fi
+ rc_reset() { _RC_RV=0; }
+ rc_failed()
+ {
+ if test -z "$1"; then
+ _RC_RV=1;
+ elif test "$1" != "0"; then
+ _RC_RV=$1;
+ fi
+ return ${_RC_RV}
+ }
+ rc_check()
+ {
+ return rc_failed $?
+ }
+ rc_status()
+ {
+ rc_failed $?
+ if test "$1" = "-r"; then _RC_RV=0; shift; fi
+ if test "$1" = "-s"; then rc_failed 5; echo_rc; rc_failed 3; shift; fi
+ if test "$1" = "-u"; then rc_failed ${_RC_UNUSED}; echo_rc; rc_failed 3; shift; fi
+ if test "$1" = "-v"; then echo_rc; shift; fi
+ if test "$1" = "-r"; then _RC_RV=0; shift; fi
+ return ${_RC_RV}
+ }
+ rc_exit() { exit ${_RC_RV}; }
+ rc_active()
+ {
+ if test -z "$RUNLEVEL"; then read RUNLEVEL REST < <(/sbin/runlevel); fi
+ if test -e /etc/init.d/S[0-9][0-9]${1}; then return 0; fi
+ return 1
+ }
+fi
+
+# Reset status of this service
+rc_reset
+
+# Return values acc. to LSB for all commands but status:
+# 0 - success
+# 1 - generic or unspecified error
+# 2 - invalid or excess argument(s)
+# 3 - unimplemented feature (e.g. "reload")
+# 4 - user had insufficient privileges
+# 5 - program is not installed
+# 6 - program is not configured
+# 7 - program is not running
+# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
+#
+# Note that starting an already running service, stopping
+# or restarting a not-running service as well as the restart
+# with force-reload (in case signaling is not supported) are
+# considered a success.
+
+case "$1" in
+ start)
+ echo -n "Starting ipmievd "
+ start_daemon $IPMIEVD_BIN $IPMIEVD_OPTIONS
+ rc_status -v
+ ;;
+ stop)
+ echo -n "Shutting down ipmievd "
+ killproc -TERM $IPMIEVD_BIN
+ rc_status -v
+ ;;
+ try-restart|condrestart)
+ ## Do a restart only if the service was active before.
+ ## Note: try-restart is now part of LSB (as of 1.9).
+ ## RH has a similar command named condrestart.
+ if test "$1" = "condrestart"; then
+ echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
+ fi
+ $0 status
+ if test $? = 0; then
+ $0 restart
+ else
+ rc_reset # Not running is not a failure.
+ fi
+ rc_status
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ rc_status
+ ;;
+ force-reload)
+ echo -n "Reload service ipmievd "
+ $0 try-restart
+ rc_status
+ ;;
+ reload)
+ rc_failed 3
+ rc_status -v
+ ;;
+ status)
+ echo -n "Checking for service ipmievd "
+ checkproc $IPMIEVD_BIN
+ rc_status -v
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload| reload}"
+ exit 1
+ ;;
+esac
+rc_exit
diff --git a/contrib/oem_ibm_sel_map b/contrib/oem_ibm_sel_map
new file mode 100644
index 0000000..330d362
--- /dev/null
+++ b/contrib/oem_ibm_sel_map
@@ -0,0 +1,229 @@
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x01","0x00","Chassis Number","R","R","0x00","CPU shutdown - Potential cause "triple fault" a software address problem"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x01","Chassis Number","Failed Memory Card","Spare Memory Card","0x00","Memory Mirrored Failover Occurred - System running from mirrored memory image"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x04","Chassis Number","Memory Card","Completion Code (0x00=Success)","0x00","Memory hot replace event"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x02","0x05","Chassis Number","Memory Card","Memory Size (in 512MB units)","0x00","Memory hot add event"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x00","Chassis Number","Scalability Port Number","R","0x00","Scalability link down"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","Chassis Number","Scalability Port Number","R","0x00","Scalability link up"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x02","Chassis Number","Scalability Port Number","R","0x00","Scalability link double wide down"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x03","Chassis Number","Scalability Port Number","R","0x00","Scalability link double wide up"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x80","Chassis Number","Scalability Port Number","R","0x00","Scalability link PFA"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x81","Chassis Number","Scalability Port Number","R","0x00","Scalability link invalid port"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x82","Chassis Number","Scalability Port Number","R","0x00","Scalability link invalid node"
+"0xC1","XX","XX","XX","XX","XX","XX","XX","0x03","0x83","Chassis Number","Scalability Port Number","R","0x00","Scalability link kill"
+"0xE0","0x00","0x00","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Device OK"
+"0xE0","0x00","0x01","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required ROM space not available"
+"0xE0","0x00","0x02","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required I/O Space not available"
+"0xE0","0x00","0x03","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required memory not available"
+"0xE0","0x00","0x04","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Required memory below 1MB not available"
+"0xE0","0x00","0x05","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","ROM checksum failed"
+"0xE0","0x00","0x06","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","BIST failed"
+"0xE0","0x00","0x07","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Planar device missing or disabled by user"
+"0xE0","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","PCI device has an invalid PCI configuration space header"
+"0xE0","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for added PCI device"
+"0xE0","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for removed PCI device"
+"0xE0","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was removed, PCI FRU information is stored in next log entry"
+"0xE0","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was added, PCI FRU information is stored in next log entry"
+"0xE0","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Requested resources not available"
+"0xE0","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Planar video disabled due to add in video card"
+"0xE0","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information for PCI device partially disabled "
+"0xE0","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A PCI device was partially disabled, PCI FRU information is stored in next log entry"
+"0xE0","0x00","0x16","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","A 33Mhz device is installed on a 66Mhz bus, PCI device information is stored in next log entry"
+"0xE0","0x00","0x17","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","FRU information, 33Mhz device installed on 66Mhz bus"
+"0xE0","0x00","0x18","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Merge cable missing"
+"0xE0","0x00","0x19","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Node 1 to Node 2 cable missing"
+"0xE0","0x00","0x1A","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Node 1 to Node 3 cable missing"
+"0xE0","0x00","0x1B","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Node 2 to Node 3 cable missing"
+"0xE0","0x00","0x1C","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Nodes could not merge"
+"0xE0","0x00","0x1D","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","No 8 way SMP cable"
+"0xE0","0x00","0x1E","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Primary North Bridge to PCI Host Bridge IB Link has failed"
+"0xE0","0x00","0x1F","Chassis Number","Slot Number","Bus Number","Device ID (MSB)","Device ID (LSB)","Vendor ID (MSB)","Vendor ID (LSB)","R","R","R","0x00","Redundant PCI Host Bridge IB Link has failed"
+"0xE0","0x00","0x00","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Device OK"
+"0xE0","0x00","0x01","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required ROM space not available"
+"0xE0","0x00","0x02","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required I/O Space not available"
+"0xE0","0x00","0x03","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required memory not available"
+"0xE0","0x00","0x04","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Required memory below 1MB not available"
+"0xE0","0x00","0x05","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","ROM checksum failed"
+"0xE0","0x00","0x06","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","BIST failed"
+"0xE0","0x00","0x07","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Planar device missing or disabled by user"
+"0xE0","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","PCI device has an invalid PCI configuration space header"
+"0xE0","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","FRU information for added PCI device"
+"0xE0","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","FRU information for removed PCI device"
+"0xE0","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was added, PCI FRU information is stored in next log entry"
+"0xE0","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was removed, PCI FRU information is stored in next log entry"
+"0xE0","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Requested resources not available"
+"0xE0","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Planar video disabled due to add in video card"
+"0xE0","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","FRU information for PCI device partially disabled "
+"0xE0","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A PCI device was partially disabled, PCI FRU information is stored in next log entry"
+"0xE0","0x00","0x16","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","A 33Mhz device is installed on a 66Mhz bus, PCI device information is stored in next log entry"
+"0xE0","0x00","0x17","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","FRU information, 33Mhz device installed on 66Mhz bus"
+"0xE0","0x00","0x18","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Merge cable missing"
+"0xE0","0x00","0x19","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Node 1 to Node 2 cable missing"
+"0xE0","0x00","0x1A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Node 1 to Node 3 cable missing"
+"0xE0","0x00","0x1B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Node 2 to Node 3 cable missing"
+"0xE0","0x00","0x1C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Nodes could not merge"
+"0xE0","0x00","0x1D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","No 8 way SMP cable"
+"0xE0","0x00","0x1E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Primary North Bridge to PCI Host Bridge IB Link has failed"
+"0xE0","0x00","0x1F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","R","R","R","0x01","Redundant PCI Host Bridge IB Link has failed"
+"0xE0","0x01","0x00","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","Processor has failed BIST"
+"0xE0","0x01","0x01","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","Unable to apply processor microcode update"
+"0xE0","0x01","0x02","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","POST does not support current stepping level of processor"
+"0xE0","0x01","0x03","Chassis Number","Processor Number","R","R","R","R","R","R","R","R","0x00","CPU mismatch detected"
+"0xE0","0x01","0x04","Chassis Number","R","R","R","R","R","R","R","R","R","0x00","Invalid configuration of processor card."
+"0xE0","0x02","0x00","Chassis Number","Memory Card","Memory DIMM","R","R","R","R","R","R","R","0x00","Uncorrectable memory error occurred"
+"0xE0","0x02","0x01","Chassis Number","Memory Card","Memory DIMM","Failing Symbol","R","R","R","R","R","R","0x00","Correctable memory threshold occurred"
+"0xE0","0x02","0x02","0x00","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM enabled"
+"0xE0","0x02","0x02","0x01","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, failed ECC test"
+"0xE0","0x02","0x02","0x02","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, failed POST/BIOS memory test"
+"0xE0","0x02","0x02","0x03","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, non-supported memory device"
+"0xE0","0x02","0x02","0x04","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x00","DIMM disabled, non-matching or missing DIMM(s)"
+"0xE0","0x02","0x03","0x00","Chassis Number","Memory Card","R","R","R","R","R","R","R","0x00","Memory card enabled"
+"0xE0","0x02","0x03","0x01","Chassis Number","Memory Card","R","R","R","R","R","R","R","0x00","Memory card disabled"
+"0xE0","0x02","0x00","0x00","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM enabled"
+"0xE0","0x02","0x00","0x01","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, failed ECC test"
+"0xE0","0x02","0x00","0x02","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, failed POST/BIOS memory test"
+"0xE0","0x02","0x00","0x03","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, non-supported memory device"
+"0xE0","0x02","0x00","0x04","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, non-matching or missing DIMM(s)"
+"0xE0","0x02","0x00","0x05","Chassis","Memory Card","Memory DIMM","R","R","R","R","R","R","0x01","DIMM disabled, multi-bit or multi-symbol error"
+"0xE0","0x02","0x01","0x00","Chassis","Failed Channel","R","R","R","R","R","R","R","0x01","AMB Failure Detected on Channel X During Last Boot"
+"0xE1","0x00","0x00","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","Unknown SERR/PERR detected on PCI bus"
+"0xE1","0x00","0x01","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Address of special cycle DPE"
+"0xE1","0x00","0x02","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Master read parity error"
+"0xE1","0x00","0x03","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received target parity error"
+"0xE1","0x00","0x04","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Master write parity error"
+"0xE1","0x00","0x05","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Device signaled SERR"
+"0xE1","0x00","0x06","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Slave signaled parity error"
+"0xE1","0x00","0x07","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Signaled Target Abort"
+"0xE1","0x00","0x08","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: Additional Correctable ECC Error"
+"0xE1","0x00","0x09","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received Master Abort"
+"0xE1","0x00","0x0A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Additional Uncorrectable ECC Error"
+"0xE1","0x00","0x0B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Split Completion Discarded"
+"0xE1","0x00","0x0C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: Correctable ECC Error"
+"0xE1","0x00","0x0D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Unexpected Split Completion"
+"0xE1","0x00","0x0E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: Uncorrectable ECC Error"
+"0xE1","0x00","0x0F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Received split completion error"
+"0xE1","0x00","0x11","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Address of special cycle DPE"
+"0xE1","0x00","0x12","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Master read parity error"
+"0xE1","0x00","0x13","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received target parity error"
+"0xE1","0x00","0x14","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Master write parity error"
+"0xE1","0x00","0x15","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Device Signaled SERR"
+"0xE1","0x00","0x16","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Slave Signaled Parity Error"
+"0xE1","0x00","0x17","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Signaled Target Abort"
+"0xE1","0x00","0x18","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: PCI-PCI bridge secondary error: Additional Correctable ECC Error"
+"0xE1","0x00","0x19","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received Master Abort"
+"0xE1","0x00","0x1A","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Additional Uncorrectable ECC Error"
+"0xE1","0x00","0x1B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Split Completion Discarded"
+"0xE1","0x00","0x1C","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: PCI-PCI bridge secondary error: Correctable ECC Error"
+"0xE1","0x00","0x1D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Unexpected Split Completion"
+"0xE1","0x00","0x1E","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI-PCI bridge secondary error: Uncorrectable ECC Error"
+"0xE1","0x00","0x1F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI-PCI bridge secondary error: Received split completion error"
+"0xE1","0x00","0x20","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","BUS_CORRECTABLE: PCI ECC Error (Corrected)"
+"0xE1","0x00","0x21","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI Bus Address Parity Error"
+"0xE1","0x00","0x22","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI Bus Data Parity Error"
+"0xE1","0x00","0x23","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: SERR# Asserted"
+"0xE1","0x00","0x24","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PERR Received by Calgary on a PCIX Split Completion"
+"0xE1","0x00","0x25","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Invalid Address"
+"0xE1","0x00","0x27","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: TCE Extent Error"
+"0xE1","0x00","0x29","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Page Fault"
+"0xE1","0x00","0x2B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Unauthorized Access"
+"0xE1","0x00","0x2D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Parity Error in DMA Read Data Buffer"
+"0xE1","0x00","0x2F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI Bus Time Out"
+"0xE1","0x00","0x31","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: DMA Delayed Read Timeout"
+"0xE1","0x00","0x33","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Internal Error on PCIX Split Completion"
+"0xE1","0x00","0x35","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: DMA Read Reply (RIO) Timeout"
+"0xE1","0x00","0x37","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Internal RAM Error on DMA Write"
+"0xE1","0x00","0x39","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: MVE Valid Bit Off"
+"0xE1","0x00","0x3B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: MVE Index Invalid"
+"0xE1","0x00","0x40","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: ECC Error (Corrected)"
+"0xE1","0x00","0x41","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: SERR# Detected"
+"0xE1","0x00","0x42","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI Bus Data Parity Error"
+"0xE1","0x00","0x43","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: No DEVSEL#"
+"0xE1","0x00","0x45","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Bus Time Out"
+"0xE1","0x00","0x47","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Retry Count Expired"
+"0xE1","0x00","0x49","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Target-Abort"
+"0xE1","0x00","0x4B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Invalid Size"
+"0xE1","0x00","0x4D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Access Not Enabled"
+"0xE1","0x00","0x4F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Internal RAM Error on MMIO Store"
+"0xE1","0x00","0x51","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Split Response Received"
+"0xE1","0x00","0x53","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCIX Split Completion Error Status Received"
+"0xE1","0x00","0x55","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Unexpected PCIX Split Completion Received"
+"0xE1","0x00","0x57","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCIX Split Completion Timeout"
+"0xE1","0x00","0x59","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Recoverable Error Summary Bit"
+"0xE1","0x00","0x5B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: CSR Error Summary Bit"
+"0xE1","0x00","0x5D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Internal RAM Error on MMIO Load"
+"0xE1","0x00","0x61","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Bad Command"
+"0xE1","0x00","0x63","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Length Field Invalid"
+"0xE1","0x00","0x65","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Load Greater Than 8 & No Write Buffer Enabled"
+"0xE1","0x00","0x67","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCIX Discontiguous Byte Enable Error"
+"0xE1","0x00","0x69","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: 4K Address Boundary Crossing Error"
+"0xE1","0x00","0x6B","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Store Wrap State Machine Check"
+"0xE1","0x00","0x6D","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Target State Machine Check"
+"0xE1","0x00","0x6F","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Invalid Transaction PM/DW"
+"0xE1","0x00","0x71","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Invalid Transaction PM/DR"
+"0xE1","0x00","0x73","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: Invalid Transaction PS/DW"
+"0xE1","0x00","0x75","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: DMA Write Command FIFO Parity Error"
+"0xE1","0x00","0x76","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PERR: PCI Secondary Status Register Dump"
+"0xE1","0x00","0x77","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","SERR: PCI Secondary Status Register Dump"
+"0xE1","0x00","0x81","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x00","PCI-to-PCI Bridge Discard Timer Error"
+"0xE1","0x00","0x01","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x01","SERR detected on PCI bus"
+"0xE1","0x00","0x02","Chassis Number","Slot Number","Bus Number","Device ID (LSB)","Device ID (MSB)","Vendor ID (LSB)","Vendor ID (MSB)","Status Register (LSB)","Status Register (MSB)","DevFun Number","0x01","PERR detected on PCI bus"
+"0xE1","0x01","0x00","R","R","Bank (LSB)","Bank (MSB)","Apic ID (LSB)","Apic ID (MSB)","CK4(LSB)","CK4","CK4","CK4(MSB)","0x00","Processor Error Information Data A"
+"0xE1","0x01","0x01","R","R","Address high (LSB)","Address high","Address high","Address high (MSB)","Address low (LSB)","Address low ","Address low ","Address low (MSB)","0x00","Processor Error Information Data B1"
+"0xE1","0x01","0x02","R","R","Timestamp high (LSB)","Timestamp high","Timestamp high","Timestamp high (MSB)","Timestamp Low (LSB)","Timestamp low","Timestamp low","Timestamp low (MSB)","0x00","Processor Error Information Data B2"
+"0xE1","0x01","0x03","R","R","MCA status register high (LSB)","MCA status register high","MCA status register high","MCA status register high (MSB)","MCA status register low (LSB)","MCA status register low","MCA status register low","MCA status register low (MSB)","0x00","Processor Error Information Data C"
+"0xE1","0x01","0x04","Chassis","0x00","Processor ID","R","R","R","R","R","R","R","0x00","Processor recoverable error"
+"0xE1","0x01","0x04","Chassis","0x01","Processor ID","R","R","R","R","R","R","R","0x00","Processor unrecoverable error"
+"0xE1","0x02","0x00","0x00","Failed Row","Spare Row","R","R","R","R","R","R","R","0x00","Memory sparing event, start 1"
+"0xE1","0x02","0x00","0x02","Failed Row","Spare Row","R","R","R","R","R","R","R","0x00","Memory sparing event, done 1"
+"0xE1","0x02","0x00","0x01","Failed Row 1","Failed Row 2","Spare Row 1","Spare Row 2","R","R","R","R","R","0x00","Memory sparing event, start 2"
+"0xE1","0x02","0x00","0x03","Failed Row 1","Failed Row 2","Spare Row 1","Spare Row 2","R","R","R","R","R","0x00","Memory sparing event, done 2"
+"0xE1","0x02","0x01","Failed Port","Spare Port","R","R","R","R","R","R","R","R","0x00","Memory mirroring failover occurred"
+"0xE1","0x02","0x00","0x00","R","R","R","R","R","R","R","R","R","0x01","Memory sparing event, start 1"
+"0xE1","0x02","0x00","0x02","R","R","R","R","R","R","R","R","R","0x01","Memory sparing event, done 1"
+"0xE1","0x04","0x00","0x00","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB A Fatal"
+"0xE1","0x04","0x00","0x01","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB A Nonfatal"
+"0xE1","0x04","0x00","0x02","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB B Fatal"
+"0xE1","0x04","0x00","0x03","FSB FERR/NERR Register","FSB FERR/NERR Register","Chassis Number","R","R","R","R","R","R","0x00","FSB B Nonfatal"
+"0xE1","0x05","0x00","0x02","Hi FERR or NERR Register","R","R","R","R","R","R","R","R","0x00","Lindenhurst Chipset Event: Hi Fatal"
+"0xE1","0x05","0x00","0x03","Hi FERR or NERR Register","R","R","R","R","R","R","R","R","0x00","Lindenhurst Chipset Event: Hi Nonfatal"
+"0xE1","0x05","0x01","0x02","Status Register Contents","R","R","R","R","R","R","R","R","0x00","Fatal internal north bridge error"
+"0xE1","0x05","0x01","0x03","Status Register Contents","R","R","R","R","R","R","R","R","0x00","Nonfatal internal north bridge error"
+"0xE1","0x05","0x01","0x04","Bus","Device","Function Number","R","R","R","R","R","R","0x00","Link Degrade Event"
+"0xE1","0x05","0x01","0x05","R","R","R","R","R","R","R","R","R","0x00","Spurious Memory Event"
+"0xE2","0x00","Register ID","R","First Fire Bit (0xFF=N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI Industry Standard Register Dump"
+"0xE2","0x01","Register ID","R","First Fire Bit (0xFF if N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI-X Industry Standard Register Dump"
+"0xE2","0x02","Register ID","R","First Fire Bit (0xFF if N/A)","Register Data (LSB)","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data","Register Data (MSB)","0x00","PCI Express Industry Standard Register Dump"
+"0xE3","Platform ID","Register ID","R","R","R","R","R","R","Register Data (LSB)","Register Data","Register Data","Register Data (MSB)","0x00","RAW Hex Dump"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x00","0x00","R","R","R","0x00","PCI Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x01","0x00","R","R","R","0x00","Processor Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x02","0x00","R","R","R","0x00","Memory Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x00","R","R","R","0x00"," Scalability Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x07","R","R","0x00","Merge Failure - BIOS version is newer than secondary server BIOS"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x08","R","R","0x00","Merge Failure - BIOS version is older than secondary server BIOS"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x09","R","R","0x00","Merge Failure - Primary server booted standalone"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x0A","R","R","0x00","Merge Failure - Communication error occurred with secondary server"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x0B","R","R","0x00","Merge Failure - Timed out waiting for secondary server"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x10","R","R","0x00","Merge Failure - No path through partition"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x11","Expected Chassis Count","R","0x00","Merge Information - Expected chassis count"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x12","Actual Chassis Count","R","0x00","Merge Information - Actual chassis count"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x19","R","R","0x00","Merge Failure - No secondary servers found to merge"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x34","R","R","0x00","Merge Failure - Primary server booted standalone"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x35","R","R","0x00","Merge Failure - Communication error occurred with primary server"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x36","R","R","0x00","Merge Failure - Secondary server booted standalone"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x41","R","R","0x00","Merge Failure - Timeout occurred waiting for primary server"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x46","R","R","0x00","Merge Failure - BIOS version is newer than primary server BIOS"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x47","R","R","0x00","Merge Failure - BIOS version is older than primary server BIOS"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x52","R","R","0x00","Merge Failure - Scalability hardware not detected"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x53","R","R","0x00","Merge Failure - No partition descriptor found"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x54","R","R","0x00","Merge Failure - Error Reading partition descriptor"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x55","R","R","0x00","Merge Failure - Error Reading system UUID"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x56","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x57","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x58","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x59","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x5A","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x5B","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x03","0x01","0x5C","R","R","0x00","Merge Failure [Byte 13 value]"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x04","0x00","R","R","R","0x00","Bus PCI Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x05","0x00","R","R","R","0x00","Chipset Event/Error Occurred. Next non-timestamped OEM SEL entry will contain details of the specific PCI event/error"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x06","0x01","PostVersion","BMCVersion","R","0x00","Incompatible BIOS-BMC Power Executive support"
+"0xC0","XX","XX","XX","XX","XX","XX","XX","0x06","0x02","R","R","R","0x00","Boot denied due to power limitations"