diff options
Diffstat (limited to 'src/plugins/open')
| -rw-r--r-- | src/plugins/open/Makefile.am | 39 | ||||
| -rw-r--r-- | src/plugins/open/Makefile.in | 538 | ||||
| -rw-r--r-- | src/plugins/open/open.c | 439 | ||||
| -rw-r--r-- | src/plugins/open/open.h | 106 | 
4 files changed, 1122 insertions, 0 deletions
| diff --git a/src/plugins/open/Makefile.am b/src/plugins/open/Makefile.am new file mode 100644 index 0000000..89ce711 --- /dev/null +++ b/src/plugins/open/Makefile.am @@ -0,0 +1,39 @@ +# 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 + +INCLUDES		= -I$(top_srcdir)/include + +EXTRA_LTLIBRARIES	= libintf_open.la +noinst_LTLIBRARIES	= @INTF_OPEN_LIB@ +libintf_open_la_LIBADD	= $(top_builddir)/lib/libipmitool.la +libintf_open_la_SOURCES	= open.c open.h + diff --git a/src/plugins/open/Makefile.in b/src/plugins/open/Makefile.in new file mode 100644 index 0000000..d6b1f26 --- /dev/null +++ b/src/plugins/open/Makefile.in @@ -0,0 +1,538 @@ +# 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 = src/plugins/open +DIST_COMMON = $(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 = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libintf_open_la_DEPENDENCIES = $(top_builddir)/lib/libipmitool.la +am_libintf_open_la_OBJECTS = open.lo +libintf_open_la_OBJECTS = $(am_libintf_open_la_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ +	$(LDFLAGS) -o $@ +SOURCES = $(libintf_open_la_SOURCES) +DIST_SOURCES = $(libintf_open_la_SOURCES) +ETAGS = etags +CTAGS = ctags +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 +INCLUDES = -I$(top_srcdir)/include +EXTRA_LTLIBRARIES = libintf_open.la +noinst_LTLIBRARIES = @INTF_OPEN_LIB@ +libintf_open_la_LIBADD = $(top_builddir)/lib/libipmitool.la +libintf_open_la_SOURCES = open.c open.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(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 src/plugins/open/Makefile'; \ +	$(am__cd) $(top_srcdir) && \ +	  $(AUTOMAKE) --foreign src/plugins/open/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): + +clean-noinstLTLIBRARIES: +	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) +	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ +	  test "$$dir" != "$$p" || dir=.; \ +	  echo "rm -f \"$${dir}/so_locations\""; \ +	  rm -f "$${dir}/so_locations"; \ +	done +libintf_open.la: $(libintf_open_la_OBJECTS) $(libintf_open_la_DEPENDENCIES) $(EXTRA_libintf_open_la_DEPENDENCIES)  +	$(LINK)  $(libintf_open_la_OBJECTS) $(libintf_open_la_LIBADD) $(LIBS) + +mostlyclean-compile: +	-rm -f *.$(OBJEXT) + +distclean-compile: +	-rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@	$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: +	-rm -f *.lo + +clean-libtool: +	-rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +	unique=`for i in $$list; do \ +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +	  done | \ +	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +	      END { if (nonempty) { for (i in files) print i; }; }'`; \ +	mkid -fID $$unique +tags: TAGS + +TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ +		$(TAGS_FILES) $(LISP) +	set x; \ +	here=`pwd`; \ +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ +	unique=`for i in $$list; do \ +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +	  done | \ +	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +	      END { if (nonempty) { for (i in files) print i; }; }'`; \ +	shift; \ +	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ +	  test -n "$$unique" || unique=$$empty_fix; \ +	  if test $$# -gt 0; then \ +	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +	      "$$@" $$unique; \ +	  else \ +	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +	      $$unique; \ +	  fi; \ +	fi +ctags: CTAGS +CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ +		$(TAGS_FILES) $(LISP) +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ +	unique=`for i in $$list; do \ +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +	  done | \ +	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +	      END { if (nonempty) { for (i in files) print i; }; }'`; \ +	test -z "$(CTAGS_ARGS)$$unique" \ +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +	     $$unique + +GTAGS: +	here=`$(am__cd) $(top_builddir) && pwd` \ +	  && $(am__cd) $(top_srcdir) \ +	  && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +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 $(LTLIBRARIES) +installdirs: +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 clean-noinstLTLIBRARIES \ +	mostlyclean-am + +distclean: distclean-am +	-rm -rf ./$(DEPDIR) +	-rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ +	distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +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 -rf ./$(DEPDIR) +	-rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ +	mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +	clean-libtool clean-noinstLTLIBRARIES ctags distclean \ +	distclean-compile distclean-generic distclean-libtool \ +	distclean-tags distdir dvi dvi-am html html-am info info-am \ +	install install-am install-data install-data-am 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-compile mostlyclean-generic mostlyclean-libtool \ +	pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# 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/src/plugins/open/open.c b/src/plugins/open/open.c new file mode 100644 index 0000000..92b6f37 --- /dev/null +++ b/src/plugins/open/open.c @@ -0,0 +1,439 @@ +/* + * 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. + */ + +#include <stdio.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/ioctl.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include <ipmitool/ipmi.h> +#include <ipmitool/ipmi_intf.h> +#include <ipmitool/helper.h> +#include <ipmitool/log.h> + +#if defined(HAVE_CONFIG_H) +# include <config.h> +#endif + +#if defined(HAVE_SYS_IOCCOM_H) +# include <sys/ioccom.h> +#endif + +#if defined(HAVE_OPENIPMI_H) +# if defined(HAVE_LINUX_COMPILER_H) +#  include <linux/compiler.h> +# endif +# include <linux/ipmi.h> +#elif defined(HAVE_FREEBSD_IPMI_H) +/* FreeBSD OpenIPMI-compatible header */ +# include <sys/ipmi.h> +#else +# include "open.h" +#endif + +/** + * Maximum input message size for KCS/SMIC is 40 with 2 utility bytes and + * 38 bytes of data. + * Maximum input message size for BT is 42 with 4 utility bytes and + * 38 bytes of data. + */ +#define IPMI_OPENIPMI_MAX_RQ_DATA_SIZE 38 + +/** + * Maximum output message size for KCS/SMIC is 38 with 2 utility bytes, a byte + * for completion code and 35 bytes of data. + * Maximum output message size for BT is 40 with 4 utility bytes, a byte + * for completion code and 35 bytes of data. + */ +#define IPMI_OPENIPMI_MAX_RS_DATA_SIZE 35 + +extern int verbose; + +static int +ipmi_openipmi_open(struct ipmi_intf * intf) +{ +	int i = 0; + +	char ipmi_dev[16]; +	char ipmi_devfs[16]; +	char ipmi_devfs2[16]; +	int devnum = 0; + +	devnum = intf->devnum; + +	sprintf(ipmi_dev, "/dev/ipmi%d", devnum); +	sprintf(ipmi_devfs, "/dev/ipmi/%d", devnum); +	sprintf(ipmi_devfs2, "/dev/ipmidev/%d", devnum); +	lprintf(LOG_DEBUG, "Using ipmi device %d", devnum); + +	intf->fd = open(ipmi_dev, O_RDWR); + +	if (intf->fd < 0) { +		intf->fd = open(ipmi_devfs, O_RDWR); +		if (intf->fd < 0) { +			intf->fd = open(ipmi_devfs2, O_RDWR); +		} +		if (intf->fd < 0) { +			lperror(LOG_ERR, "Could not open device at %s or %s or %s", +			ipmi_dev, ipmi_devfs , ipmi_devfs2); +			return -1; +		} +	} + +	if (ioctl(intf->fd, IPMICTL_SET_GETS_EVENTS_CMD, &i) < 0) { +		lperror(LOG_ERR, "Could not enable event receiver"); +		return -1; +	} +  +	intf->opened = 1; + +   /* This is never set to 0, the default is IPMI_BMC_SLAVE_ADDR */ +	if (intf->my_addr != 0) { +		if (intf->set_my_addr(intf, intf->my_addr) < 0) { +			lperror(LOG_ERR, "Could not set IPMB address"); +			return -1; +		} +		lprintf(LOG_DEBUG, "Set IPMB address to 0x%x", +			intf->my_addr ); +	} + +	intf->manufacturer_id = ipmi_get_oem(intf); +	return intf->fd; +} +static int +ipmi_openipmi_set_my_addr(struct ipmi_intf *intf, uint8_t addr) +{ +	unsigned int a = addr; +	if (ioctl(intf->fd, IPMICTL_SET_MY_ADDRESS_CMD, &a) < 0) { +		lperror(LOG_ERR, "Could not set IPMB address"); +		return -1; +	} +	intf->my_addr = addr; +	return 0; +} + +static void +ipmi_openipmi_close(struct ipmi_intf * intf) +{ +	if (intf->fd >= 0) { +		close(intf->fd); +		intf->fd = -1; +	} + +	intf->opened = 0; +	intf->manufacturer_id = IPMI_OEM_UNKNOWN; +} + +static struct ipmi_rs * +ipmi_openipmi_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req) +{ +	struct ipmi_recv recv; +	struct ipmi_addr addr; +	struct ipmi_system_interface_addr bmc_addr = { +		addr_type:	IPMI_SYSTEM_INTERFACE_ADDR_TYPE, +		channel:	IPMI_BMC_CHANNEL, +	}; +	struct ipmi_ipmb_addr ipmb_addr = { +		addr_type:	IPMI_IPMB_ADDR_TYPE, +	}; +	struct ipmi_req _req; +	static struct ipmi_rs rsp; +	static int curr_seq = 0; +	fd_set rset; + +	uint8_t * data = NULL; +	int data_len = 0; + + +	if (intf == NULL || req == NULL) +		return NULL; + +	ipmb_addr.channel = intf->target_channel & 0x0f; + +	if (intf->opened == 0 && intf->open != NULL) +		if (intf->open(intf) < 0) +			return NULL; + +	if (verbose > 2) +		printbuf(req->msg.data, req->msg.data_len, +			 "OpenIPMI Request Message"); + +	/* +	 * setup and send message +	 */ + +	memset(&_req, 0, sizeof(struct ipmi_req)); + +	if (intf->target_addr != 0 && +	    intf->target_addr != intf->my_addr) { +		/* use IPMB address if needed */ +		ipmb_addr.slave_addr = intf->target_addr; +		ipmb_addr.lun = req->msg.lun; +		lprintf(LOG_DEBUG, "Sending request 0x%x to " +			"IPMB target @ 0x%x:0x%x (from 0x%x)",  +			req->msg.cmd, +			intf->target_addr,intf->target_channel, intf->my_addr); + +		if(intf->transit_addr != 0 && intf->transit_addr != intf->my_addr) {  +		   uint8_t index = 0; +       +		   lprintf(LOG_DEBUG, "Encapsulating data sent to " +			   "end target [0x%02x,0x%02x] using transit [0x%02x,0x%02x] from 0x%x ", +			   (0x40 | intf->target_channel), +			   intf->target_addr, +			   intf->transit_channel, +			   intf->transit_addr, +			   intf->my_addr +			   );       + +		   /* Convert Message to 'Send Message' */ +		   /* Supplied req : req , internal req : _req  */ + +		   if (verbose > 4) { +		      fprintf(stderr, "Converting message:\n"); +		      fprintf(stderr, "  netfn     = 0x%x\n",  req->msg.netfn ); +		      fprintf(stderr, "  cmd       = 0x%x\n", req->msg.cmd); +		      if (recv.msg.data && recv.msg.data_len) { +			 fprintf(stderr, "  data_len  = %d\n", req->msg.data_len); +			 fprintf(stderr, "  data      = %s\n", +				 buf2str(req->msg.data,req->msg.data_len)); +		      } +		   } + +		   /* Modify target address to use 'transit' instead */ +		   ipmb_addr.slave_addr = intf->transit_addr; +		   ipmb_addr.channel    = intf->transit_channel; + +		   /* FIXME backup "My address" */ +		   data_len = req->msg.data_len + 8; +		   data = malloc(data_len); +		   if (data == NULL) { +		      lprintf(LOG_ERR, "ipmitool: malloc failure"); +		      return NULL; +		   } + +		   memset(data, 0, data_len); + +		   data[index++] = (0x40|intf->target_channel); +		   data[index++] = intf->target_addr; +		   data[index++] = (  req->msg.netfn << 2 ) |  req->msg.lun ; +		   data[index++] = ipmi_csum(data+1, 2); +		   data[index++] = 0xFF;    /* normally 0x20 , overwritten by IPMC  */ +		   data[index++] = ( (0)  << 2) | 0 ;           /* FIXME */ +		   data[index++] = req->msg.cmd; +		   memcpy( (data+index) , req->msg.data, req->msg.data_len); +		   index += req->msg.data_len; +		   data[index++] = ipmi_csum( (data+4),(req->msg.data_len + 3)  ); +           +		   if (verbose > 4) { +		      fprintf(stderr, "Encapsulated message:\n"); +		      fprintf(stderr, "  netfn     = 0x%x\n", IPMI_NETFN_APP  ); +		      fprintf(stderr, "  cmd       = 0x%x\n", 0x34 ); +		      if (data && data_len) { +			 fprintf(stderr, "  data_len  = %d\n", data_len); +			 fprintf(stderr, "  data      = %s\n", +				 buf2str(data,data_len)); +		      } +		   } +		} +		_req.addr = (unsigned char *) &ipmb_addr; +		_req.addr_len = sizeof(ipmb_addr); +	} else { +	   /* otherwise use system interface */ +	   lprintf(LOG_DEBUG+2, "Sending request 0x%x to " +		   "System Interface", req->msg.cmd); +	   bmc_addr.lun = req->msg.lun; +	   _req.addr = (unsigned char *) &bmc_addr; +	   _req.addr_len = sizeof(bmc_addr); +	} + +	_req.msgid = curr_seq++; + +	/* In case of a bridge request */ +	if( data != NULL && data_len != 0 ) { +	   _req.msg.data = data; +	   _req.msg.data_len = data_len; +	   _req.msg.netfn = IPMI_NETFN_APP; +	   _req.msg.cmd   = 0x34; + +	} else { +	   _req.msg.data = req->msg.data; +	   _req.msg.data_len = req->msg.data_len; +	   _req.msg.netfn = req->msg.netfn; +	   _req.msg.cmd = req->msg.cmd; +	} +    +	if (ioctl(intf->fd, IPMICTL_SEND_COMMAND, &_req) < 0) { +	   lperror(LOG_ERR, "Unable to send command"); +	   if (data != NULL) { +	      free(data); +				data = NULL; +		 } +	   return NULL; +	} + +	/* +	 * wait for and retrieve response +	 */ + +	if (intf->noanswer) { +	   if (data != NULL) { +	      free(data); +				data = NULL; +		 } +	   return NULL; +	} + +	FD_ZERO(&rset); +	FD_SET(intf->fd, &rset); + +	if (select(intf->fd+1, &rset, NULL, NULL, NULL) < 0) { +	   lperror(LOG_ERR, "I/O Error"); +	   if (data != NULL) { +	      free(data); +				data = NULL; +		 } +	   return NULL; +	} +	if (FD_ISSET(intf->fd, &rset) == 0) { +	   lprintf(LOG_ERR, "No data available"); +	   if (data != NULL) { +	      free(data); +				data = NULL; +		 } +	   return NULL; +	} + +	recv.addr = (unsigned char *) &addr; +	recv.addr_len = sizeof(addr); +	recv.msg.data = rsp.data; +	recv.msg.data_len = sizeof(rsp.data); + +	/* get data */ +	if (ioctl(intf->fd, IPMICTL_RECEIVE_MSG_TRUNC, &recv) < 0) { +	   lperror(LOG_ERR, "Error receiving message"); +	   if (errno != EMSGSIZE) { +	      if (data != NULL) { +					free(data); +					data = NULL; +				} +	      return NULL; +	   } +	} + +	if (verbose > 4) { +	   fprintf(stderr, "Got message:"); +	   fprintf(stderr, "  type      = %d\n", recv.recv_type); +	   fprintf(stderr, "  channel   = 0x%x\n", addr.channel); +	   fprintf(stderr, "  msgid     = %ld\n", recv.msgid); +	   fprintf(stderr, "  netfn     = 0x%x\n", recv.msg.netfn); +	   fprintf(stderr, "  cmd       = 0x%x\n", recv.msg.cmd); +	   if (recv.msg.data && recv.msg.data_len) { +	      fprintf(stderr, "  data_len  = %d\n", recv.msg.data_len); +	      fprintf(stderr, "  data      = %s\n", +		      buf2str(recv.msg.data, recv.msg.data_len)); +	   } +	} + +	if(intf->transit_addr != 0 && intf->transit_addr != intf->my_addr) { +	   uint8_t index = 0; +      +	   /* ipmb_addr.transit_slave_addr = intf->transit_addr; */ +	   lprintf(LOG_DEBUG, "Decapsulating data received from transit " +		   "IPMB target @ 0x%x", intf->transit_addr); + +	   /* comp code */ +	   /* Check data */ + +	   if( recv.msg.data[0] == 0 ) { +	      recv.msg.netfn = recv.msg.data[2] >> 2; +	      recv.msg.cmd   = recv.msg.data[6]; + +	      recv.msg.data = memmove(recv.msg.data ,recv.msg.data+7 , recv.msg.data_len - 7); +	      recv.msg.data_len -=8; +        +	      if (verbose > 4) {    +		 fprintf(stderr, "Decapsulated  message:\n"); +		 fprintf(stderr, "  netfn     = 0x%x\n",   recv.msg.netfn ); +		 fprintf(stderr, "  cmd       = 0x%x\n",  recv.msg.cmd); +		 if (recv.msg.data && recv.msg.data_len) { +		    fprintf(stderr, "  data_len  = %d\n",  recv.msg.data_len); +		    fprintf(stderr, "  data      = %s\n", +			    buf2str(recv.msg.data,recv.msg.data_len)); +		 } +	      } +	   } +	} + +	/* save completion code */ +	rsp.ccode = recv.msg.data[0]; +	rsp.data_len = recv.msg.data_len - 1; + +	/* save response data for caller */ +	if (rsp.ccode == 0 && rsp.data_len > 0) { +	   memmove(rsp.data, rsp.data + 1, rsp.data_len); +	   rsp.data[rsp.data_len] = 0; +	} + +	if (data != NULL) { +	   free(data); +		 data = NULL; +	} + +	return &rsp; +} + +int ipmi_openipmi_setup(struct ipmi_intf * intf) +{ +	/* set default payload size */ +	intf->max_request_data_size = IPMI_OPENIPMI_MAX_RQ_DATA_SIZE; +	intf->max_response_data_size = IPMI_OPENIPMI_MAX_RS_DATA_SIZE; + +	return 0; +} + +struct ipmi_intf ipmi_open_intf = { +	name:		"open", +	desc:		"Linux OpenIPMI Interface", +	setup:		ipmi_openipmi_setup, +	open:		ipmi_openipmi_open, +	close:		ipmi_openipmi_close, +	sendrecv:	ipmi_openipmi_send_cmd, +	set_my_addr:	ipmi_openipmi_set_my_addr, +	my_addr:	IPMI_BMC_SLAVE_ADDR, +	target_addr:	0, /* init so -m local_addr does not cause bridging */ +}; diff --git a/src/plugins/open/open.h b/src/plugins/open/open.h new file mode 100644 index 0000000..5d7aa5b --- /dev/null +++ b/src/plugins/open/open.h @@ -0,0 +1,106 @@ +/* + * 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. + */ + +#ifndef IPMI_OPENIPMI_H +#define IPMI_OPENIPMI_H + +#define IPMI_MAX_ADDR_SIZE		0x20 +#define IPMI_BMC_CHANNEL		0xf +#define IPMI_NUM_CHANNELS		0x10 + +#define IPMI_SYSTEM_INTERFACE_ADDR_TYPE	0x0c +#define IPMI_IPMB_ADDR_TYPE		0x01 +#define IPMI_IPMB_BROADCAST_ADDR_TYPE	0x41 + +#define IPMI_RESPONSE_RECV_TYPE		1 +#define IPMI_ASYNC_EVENT_RECV_TYPE	2 +#define IPMI_CMD_RECV_TYPE		3 + +struct ipmi_addr { +	int addr_type; +	short channel; +	char data[IPMI_MAX_ADDR_SIZE]; +}; + +struct ipmi_msg { +	unsigned char netfn; +        unsigned char cmd; +        unsigned short data_len; +        unsigned char *data; +}; + +struct ipmi_req { +	unsigned char *addr; +	unsigned int addr_len; +	long msgid; +	struct ipmi_msg msg; +}; + +struct ipmi_recv { +	int recv_type; +	unsigned char *addr; +	unsigned int addr_len; +	long msgid; +	struct ipmi_msg msg; +}; + +struct ipmi_cmdspec { +	unsigned char netfn; +	unsigned char cmd; +}; + +struct ipmi_system_interface_addr { +	int addr_type; +	short channel; +	unsigned char lun; +}; + +struct ipmi_ipmb_addr { +	int addr_type; +	short channel; +	unsigned char slave_addr; +	unsigned char lun; +}; + +#define IPMI_IOC_MAGIC			'i' +#define IPMICTL_RECEIVE_MSG_TRUNC	_IOWR(IPMI_IOC_MAGIC, 11, struct ipmi_recv) +#define IPMICTL_RECEIVE_MSG		_IOWR(IPMI_IOC_MAGIC, 12, struct ipmi_recv) +#define IPMICTL_SEND_COMMAND		_IOR(IPMI_IOC_MAGIC, 13, struct ipmi_req) +#define IPMICTL_REGISTER_FOR_CMD	_IOR(IPMI_IOC_MAGIC, 14, struct ipmi_cmdspec) +#define IPMICTL_UNREGISTER_FOR_CMD	_IOR(IPMI_IOC_MAGIC, 15, struct ipmi_cmdspec) +#define IPMICTL_SET_GETS_EVENTS_CMD	_IOR(IPMI_IOC_MAGIC, 16, int) +#define IPMICTL_SET_MY_ADDRESS_CMD	_IOR(IPMI_IOC_MAGIC, 17, unsigned int) +#define IPMICTL_GET_MY_ADDRESS_CMD	_IOR(IPMI_IOC_MAGIC, 18, unsigned int) +#define IPMICTL_SET_MY_LUN_CMD		_IOR(IPMI_IOC_MAGIC, 19, unsigned int) +#define IPMICTL_GET_MY_LUN_CMD		_IOR(IPMI_IOC_MAGIC, 20, unsigned int) + +#endif /*IPMI_OPENIPMI_H*/ | 
