diff options
47 files changed, 297 insertions, 5384 deletions
| @@ -4220,7 +4220,7 @@ wdt.8          iwdt.8       (ipmiutil wdt)      idiscover(ipmiutil discover) ver 1.11      ipmi_port	(ipmi_port)  	 ver 1.4 -02/16/2016 ARCress ipmiutil-3.0.2  changes +02/16/2017 ARCress ipmiutil-3.0.2  changes    util/isensor.c        - if oem sensors, vary output by fsimple    scripts/ipmiutil_wdt  - fixup for systemd (from Mike Williams)    README, COPYING       - clarify that md2.h is not included unless --enable-gpl @@ -4243,14 +4243,14 @@ wdt.8          iwdt.8       (ipmiutil wdt)      idiscover(ipmiutil discover) ver 1.11      ipmi_port	(ipmi_port)  	 ver 1.4 -03/24/2016 ARCress ipmiutil-3.0.3  changes +03/24/2017 ARCress ipmiutil-3.0.3  changes (iver 3.03)    util/ihealth.c        - add more SuperMicro product strings for X11, -  						  add some Lenovo and HP restrictions +  			              add some Lenovo and HP restrictions    util/iseltime.c       - add get_sel_utc/set_sel_utc routines    util/oem_hp.c         - Remove custom 0x40 Init for HP (support#22 fix)    util/ilan.c           - added GetUserInfo routine for iuser -  util/iuser.c          - new file, user subfunctions    util/ilan.c           - fix indenting +  util/iuser.c          - new file, user subfunctions    util/Makefile.am      - add iuser.c    util/*.mak            - add iuser.c    ipmiutil-3.0.3 contains: @@ -4260,3 +4260,13 @@ wdt.8          iwdt.8       (ipmiutil wdt)      ihpm	(ipmiutil hpm)  	 ver 1.09      idiscover	(ipmiutil discover)  	 ver 1.11      ipmi_port	(ipmi_port)  	 ver 1.4 + +04/24/2017 ARCress ipmiutil-3.0.4  changes (iver 3.04) +  util/ievents.c        - resolve type 0xDB printf warning (support #24) +  util/iuser.c          - resolve compile warning +  util/oem_dell.c       - resolve compile warning +  util/oem_lenovo.c     - added custom DIMM and CPU sensor meanings (#23) +  util/oem_supermicro.c - fix fan sensors for simple mode format +  util/isensor.c        - add simple param to decode_sensor_supermicro +  util/AnsiTerm.cpp     - pick default instead of assert if bad SGR (#25) + @@ -1,6 +1,6 @@  #! /bin/sh  # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.63 for ipmiutil 3.0.3. +# Generated by GNU Autoconf 2.63 for ipmiutil 3.0.4.  #  # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,  # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. @@ -743,8 +743,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}  # Identity of this package.  PACKAGE_NAME='ipmiutil'  PACKAGE_TARNAME='ipmiutil' -PACKAGE_VERSION='3.0.3' -PACKAGE_STRING='ipmiutil 3.0.3' +PACKAGE_VERSION='3.0.4' +PACKAGE_STRING='ipmiutil 3.0.4'  PACKAGE_BUGREPORT=''  ac_unique_file="util/ipmiutil.c" @@ -1503,7 +1503,7 @@ if test "$ac_init_help" = "long"; then    # Omit some internal or obsolete options to make the list less imposing.    # This message is too long to be a string in the A/UX 3.1 sh.    cat <<_ACEOF -\`configure' configures ipmiutil 3.0.3 to adapt to many kinds of systems. +\`configure' configures ipmiutil 3.0.4 to adapt to many kinds of systems.  Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1573,7 +1573,7 @@ fi  if test -n "$ac_init_help"; then    case $ac_init_help in -     short | recursive ) echo "Configuration of ipmiutil 3.0.3:";; +     short | recursive ) echo "Configuration of ipmiutil 3.0.4:";;     esac    cat <<\_ACEOF @@ -1683,7 +1683,7 @@ fi  test -n "$ac_init_help" && exit $ac_status  if $ac_init_version; then    cat <<\_ACEOF -ipmiutil configure 3.0.3 +ipmiutil configure 3.0.4  generated by GNU Autoconf 2.63  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1697,7 +1697,7 @@ cat >config.log <<_ACEOF  This file contains any messages produced by compilers while  running configure, to aid debugging if configure makes a mistake. -It was created by ipmiutil $as_me 3.0.3, which was +It was created by ipmiutil $as_me 3.0.4, which was  generated by GNU Autoconf 2.63.  Invocation command line was    $ $0 $@ @@ -2551,7 +2551,7 @@ fi  # Define the identity of the package.   PACKAGE='ipmiutil' - VERSION='3.0.3' + VERSION='3.0.4'  cat >>confdefs.h <<_ACEOF @@ -13943,7 +13943,7 @@ exec 6>&1  # report actual input values of CONFIG_FILES etc. instead of their  # values after options handling.  ac_log=" -This file was extended by ipmiutil $as_me 3.0.3, which was +This file was extended by ipmiutil $as_me 3.0.4, which was  generated by GNU Autoconf 2.63.  Invocation command line was    CONFIG_FILES    = $CONFIG_FILES @@ -14006,7 +14006,7 @@ Report bugs to <bug-autoconf@gnu.org>."  _ACEOF  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1  ac_cs_version="\\ -ipmiutil config.status 3.0.3 +ipmiutil config.status 3.0.4  configured by $0, generated by GNU Autoconf 2.63,    with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.ac b/configure.ac index 7e21f7a..9ba80e9 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@  dnl Process this file with autoconf to produce a configure script. -AC_INIT(ipmiutil,3.0.3) +AC_INIT(ipmiutil,3.0.4)  AC_CONFIG_SRCDIR(util/ipmiutil.c)  echo "ipmiutil version ${PACKAGE_VERSION}"  AM_CONFIG_HEADER(config.h) diff --git a/debpkg/changelog b/debpkg/changelog index bb882b1..247e8f8 100644 --- a/debpkg/changelog +++ b/debpkg/changelog @@ -1,3 +1,63 @@ +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 14:18:26 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 14:17:44 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 14:06:38 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 14:01:50 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 14:00:53 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 13:57:42 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 13:46:58 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 13:42:10 -0400 + +ipmiutil (3.0.4-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 13:38:31 -0400 + +ipmiutil (3.0.3-1) unstable; urgency=low + +  * New upstream version. + + -- Andy Cress <arcress@users.sourceforge.net>  Mon, 03 Apr 2017 13:37:52 -0400 +  ipmiutil (3.0.3-1) unstable; urgency=low    * New upstream version. diff --git a/doc/Makefile b/doc/Makefile index 5f0e9ee..0f23c85 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -46,12 +46,12 @@ CONFIG_CLEAN_VPATH_FILES =  SOURCES =  DIST_SOURCES =  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run aclocal-1.11 -AMTAR = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run tar +ACLOCAL = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run aclocal-1.11 +AMTAR = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run tar  AR = ar -AUTOCONF = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run automake-1.11 +AUTOCONF = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run autoconf +AUTOHEADER = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run autoheader +AUTOMAKE = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run automake-1.11  AWK = gawk  CC = gcc  CCDEPMODE = depmode=gcc3 @@ -99,7 +99,7 @@ LIB_DIR = /usr/lib64  LIPO =   LN_S = ln -s  LTLIBOBJS =  -MAKEINFO = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run makeinfo +MAKEINFO = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run makeinfo  MKDIR_P = /bin/mkdir -p  NM = /usr/bin/nm -B  NMEDIT =  @@ -113,9 +113,9 @@ OTOOL64 =  PACKAGE = ipmiutil  PACKAGE_BUGREPORT =   PACKAGE_NAME = ipmiutil -PACKAGE_STRING = ipmiutil 3.0.3 +PACKAGE_STRING = ipmiutil 3.0.4  PACKAGE_TARNAME = ipmiutil -PACKAGE_VERSION = 3.0.3 +PACKAGE_VERSION = 3.0.4  PATH_SEPARATOR = :  PKG_DIR = /root/rpmbuild  RANLIB = ranlib @@ -127,11 +127,11 @@ SHR_LINK = libipmiutil.so.1  STRIP = strip  SUBDIR_S = doc scripts lib util  SYSTEMD_DIR = /usr/share/ipmiutil -VERSION = 3.0.3 -abs_builddir = /usr/dev/ipmiutil-3.0.3/doc -abs_srcdir = /usr/dev/ipmiutil-3.0.3/doc -abs_top_builddir = /usr/dev/ipmiutil-3.0.3 -abs_top_srcdir = /usr/dev/ipmiutil-3.0.3 +VERSION = 3.0.4 +abs_builddir = /usr/dev/ipmiutil-3.0.4/doc +abs_srcdir = /usr/dev/ipmiutil-3.0.4/doc +abs_top_builddir = /usr/dev/ipmiutil-3.0.4 +abs_top_srcdir = /usr/dev/ipmiutil-3.0.4  ac_ct_CC = gcc  ac_ct_DUMPBIN =   am__include = include @@ -159,7 +159,7 @@ host_vendor = redhat  htmldir = ${docdir}  includedir = ${prefix}/include  infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/dev/ipmiutil-3.0.3/install-sh +install_sh = ${SHELL} /usr/dev/ipmiutil-3.0.4/install-sh  libdir = ${exec_prefix}/lib  libexecdir = ${exec_prefix}/libexec  localedir = ${datarootdir}/locale diff --git a/doc/UserGuide b/doc/UserGuide index 6c2207e..eb86edc 100644 --- a/doc/UserGuide +++ b/doc/UserGuide @@ -1,6 +1,6 @@                    IPMIUTIL USER GUIDE  -                     VERSION 3.0.3 +                     VERSION 3.0.4           An easy-to-use IPMI server management utility diff --git a/doc/ipmiutil.spec b/doc/ipmiutil.spec index 01dbbcf..107d3e1 100644 --- a/doc/ipmiutil.spec +++ b/doc/ipmiutil.spec @@ -3,7 +3,7 @@  # Copyright (c) 2012 Andy Cress  #  Name:      ipmiutil -Version: 3.0.3 +Version: 3.0.4  Release: 1%{?dist}  Summary:   Easy-to-use IPMI server management utilities  License:   BSD diff --git a/lib/Makefile b/lib/Makefile index 7c7afca..5cb97f6 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -47,12 +47,12 @@ CONFIG_CLEAN_VPATH_FILES =  SOURCES =  DIST_SOURCES =  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run aclocal-1.11 -AMTAR = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run tar +ACLOCAL = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run aclocal-1.11 +AMTAR = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run tar  AR = ar -AUTOCONF = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run automake-1.11 +AUTOCONF = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run autoconf +AUTOHEADER = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run autoheader +AUTOMAKE = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run automake-1.11  AWK = gawk  CC = gcc  CCDEPMODE = depmode=gcc3 @@ -101,7 +101,7 @@ LIB_DIR = /usr/lib64  LIPO =   LN_S = ln -s  LTLIBOBJS =  -MAKEINFO = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run makeinfo +MAKEINFO = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run makeinfo  MKDIR_P = /bin/mkdir -p  NM = /usr/bin/nm -B  NMEDIT =  @@ -115,9 +115,9 @@ OTOOL64 =  PACKAGE = ipmiutil  PACKAGE_BUGREPORT =   PACKAGE_NAME = ipmiutil -PACKAGE_STRING = ipmiutil 3.0.3 +PACKAGE_STRING = ipmiutil 3.0.4  PACKAGE_TARNAME = ipmiutil -PACKAGE_VERSION = 3.0.3 +PACKAGE_VERSION = 3.0.4  PATH_SEPARATOR = :  PKG_DIR = /root/rpmbuild  RANLIB = ranlib @@ -129,11 +129,11 @@ SHR_LINK = libipmiutil.so.1  STRIP = strip  SUBDIR_S = doc scripts lib util  SYSTEMD_DIR = /usr/share/ipmiutil -VERSION = 3.0.3 -abs_builddir = /usr/dev/ipmiutil-3.0.3/lib -abs_srcdir = /usr/dev/ipmiutil-3.0.3/lib -abs_top_builddir = /usr/dev/ipmiutil-3.0.3 -abs_top_srcdir = /usr/dev/ipmiutil-3.0.3 +VERSION = 3.0.4 +abs_builddir = /usr/dev/ipmiutil-3.0.4/lib +abs_srcdir = /usr/dev/ipmiutil-3.0.4/lib +abs_top_builddir = /usr/dev/ipmiutil-3.0.4 +abs_top_srcdir = /usr/dev/ipmiutil-3.0.4  ac_ct_CC = gcc  ac_ct_DUMPBIN =   am__include = include @@ -161,7 +161,7 @@ host_vendor = redhat  htmldir = ${docdir}  includedir = ${prefix}/include  infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/dev/ipmiutil-3.0.3/install-sh +install_sh = ${SHELL} /usr/dev/ipmiutil-3.0.4/install-sh  libdir = $(iprefix)/lib  libexecdir = ${exec_prefix}/libexec  localedir = ${datarootdir}/locale diff --git a/lib/libipmiutil.pc b/lib/libipmiutil.pc index 10acea4..0f73ef4 100644 --- a/lib/libipmiutil.pc +++ b/lib/libipmiutil.pc @@ -8,6 +8,6 @@ nutuser=@RUN_AS_USER@  Name: libipmiutil  Description: Library for ipmiutil -Version: 3.0.3 +Version: 3.0.4  Libs: -L${libdir} -lipmi_lanplus  Cflags: -I${includedir} diff --git a/scripts/Makefile b/scripts/Makefile index 1e5d70c..cf2fddc 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -46,12 +46,12 @@ CONFIG_CLEAN_VPATH_FILES =  SOURCES =  DIST_SOURCES =  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run aclocal-1.11 -AMTAR = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run tar +ACLOCAL = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run aclocal-1.11 +AMTAR = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run tar  AR = ar -AUTOCONF = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run automake-1.11 +AUTOCONF = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run autoconf +AUTOHEADER = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run autoheader +AUTOMAKE = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run automake-1.11  AWK = gawk  CC = gcc  CCDEPMODE = depmode=gcc3 @@ -99,7 +99,7 @@ LIB_DIR = /usr/lib64  LIPO =   LN_S = ln -s  LTLIBOBJS =  -MAKEINFO = ${SHELL} /usr/dev/ipmiutil-3.0.3/missing --run makeinfo +MAKEINFO = ${SHELL} /usr/dev/ipmiutil-3.0.4/missing --run makeinfo  MKDIR_P = /bin/mkdir -p  NM = /usr/bin/nm -B  NMEDIT =  @@ -113,9 +113,9 @@ OTOOL64 =  PACKAGE = ipmiutil  PACKAGE_BUGREPORT =   PACKAGE_NAME = ipmiutil -PACKAGE_STRING = ipmiutil 3.0.3 +PACKAGE_STRING = ipmiutil 3.0.4  PACKAGE_TARNAME = ipmiutil -PACKAGE_VERSION = 3.0.3 +PACKAGE_VERSION = 3.0.4  PATH_SEPARATOR = :  PKG_DIR = /root/rpmbuild  RANLIB = ranlib @@ -127,11 +127,11 @@ SHR_LINK = libipmiutil.so.1  STRIP = strip  SUBDIR_S = doc scripts lib util  SYSTEMD_DIR = /usr/share/ipmiutil -VERSION = 3.0.3 -abs_builddir = /usr/dev/ipmiutil-3.0.3/scripts -abs_srcdir = /usr/dev/ipmiutil-3.0.3/scripts -abs_top_builddir = /usr/dev/ipmiutil-3.0.3 -abs_top_srcdir = /usr/dev/ipmiutil-3.0.3 +VERSION = 3.0.4 +abs_builddir = /usr/dev/ipmiutil-3.0.4/scripts +abs_srcdir = /usr/dev/ipmiutil-3.0.4/scripts +abs_top_builddir = /usr/dev/ipmiutil-3.0.4 +abs_top_srcdir = /usr/dev/ipmiutil-3.0.4  ac_ct_CC = gcc  ac_ct_DUMPBIN =   am__include = include @@ -159,7 +159,7 @@ host_vendor = redhat  htmldir = ${docdir}  includedir = ${prefix}/include  infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/dev/ipmiutil-3.0.3/install-sh +install_sh = ${SHELL} /usr/dev/ipmiutil-3.0.4/install-sh  libdir = ${exec_prefix}/lib  libexecdir = ${exec_prefix}/libexec  localedir = ${datarootdir}/locale @@ -6,7 +6,7 @@  #    [doinc?] is 'n'.  #    if [doinc?] is 'r', reverse increment (decrement).  # -ver=3.0.2 +ver=3.0.4  rel=1  tmped=/tmp/edver.tmp  tmpspec=/tmp/edspec.tmp @@ -198,10 +198,11 @@ q  fi  cmdc="ialarms.c icmd.c iconfig.c ievents.c ifru.c igetevent.c ihealth.c  -      ilan.c ireset.c isel.c isensor.c iserial.c isol.c iwdt.c  -      ifruset.c oem_sun.c ipicmg.c ifirewall.c oem_dell.c itsol.c  -      idcmi.c iseltime.c iuser.c oem_supermicro.c  -      ifwum.c ihpm.c iekanalyzer.c idiscover.c" +      ilan.c ireset.c isel.c isensor.c iserial.c isol.c iwdt.c itsol.c   +      ifruset.c ipicmg.c ifirewall.c idcmi.c iuser.c iseltime.c  +      oem_intel.c oem_kontron.c oem_dell.c oem_hp.c oem_sun.c oem_asus.c  +      oem_fujitsu.c oem_lenovo.c oem_newisys.c oem_quanta.c oem_supermicro.c +      iekanalyzer.c ifwum.c ihpm.c idiscover.c"  if [ $skipinc -ne 1 ]  then @@ -214,7 +215,8 @@ then    echo $utilc >$cmdf    cd util -  echo "  ipmiutil-$ver contains:" >$relnote +  # echo "  ipmiutil-$ver contains:" >$relnote +  num=0    for f in $utilc    do        fver=`grep "progver   = " $f |cut -f2 -d'=' |cut -f2 -d'"'` @@ -222,23 +224,23 @@ then        fver2=`echo $fver |cut -f2 -d'.'`        if [ $reverseinc -eq 1 ]        then       -	fvernew=${fver1}.`expr $fver2 - 1` +          fvernew=${fver1}.`expr $fver2 - 1`        else -	# fvernew=${fver1}.`expr $fver2 + 1` -	# use the specified version from above -	fvernew=${v12}${v3} +          # fvernew=${fver1}.`expr $fver2 + 1` +          # use the specified version from above +          fvernew=${v12}${v3}        fi        tmpf=/tmp/$f.new        tag=`grep "progname  = " $f |cut -f2 -d'=' |cut -f2 -d'"'`        alias=`grep "int argc" $f |head -n1 |cut -f1 -d'(' |awk '{print $2}' |sed -e 's/i_/ipmiutil /'`        if [ "$f" = "ipmi_port.c" ]; then            do_incr=0 -	  tag=ipmi_port -	  alias=ipmi_port +          tag=ipmi_port +          alias=ipmi_port        elif [ "$f" = "iseltime.c" ]; then -	  alias=iseltime +          alias=iseltime        elif [ "$f" = "ifruset.c" ]; then -	  alias=ifruset +          alias=ifruset        elif [ "$f" = "idiscover.c" ]; then            do_incr=0        elif [ "$f" = "iekanalyzer.c" ]; then @@ -250,23 +252,23 @@ then        else             do_incr=1        fi +      num=`expr $num + 1`        f1=`echo $f |cut -f1 -d'.'` -      if [ $do_incr -eq 0 ] -      then +      if [ $do_incr -eq 0 ]; then          # don't update the version           fvernew=$fver          echo "$tag   	progver: $fvernew" -        echo "    $tag	($alias)  	 ver $fvernew" >>$relnote +        # echo "    $tag	($alias)  	 ver $fvernew" >>$relnote        else          # update the version automatically  -        echo "$tag   	progver: $fvernew" -        echo "    $tag	($alias)  	 ver $fvernew" >>$relnote          sed -e "s/progver   = .${fver}/progver   = \"${fvernew}/" $f >$tmpf          cp -f $tmpf $f +        echo "$tag   	progver: $fvernew" +        # echo "    $tag	($alias)  	 ver $fvernew" >>$relnote        fi    done    cd .. -  cat $relnote >>ChangeLog +  # cat $relnote >>ChangeLog  fi  echo "" diff --git a/util/AnsiTerm.cpp b/util/AnsiTerm.cpp index 750fd52..956ec98 100644 --- a/util/AnsiTerm.cpp +++ b/util/AnsiTerm.cpp @@ -1774,7 +1774,8 @@ CAnsiTerm::ProcessSGR(void)              break;          default: -            assert(false); +	    	dbglog("ERROR: bad SGR param %d (0x%02x)\n",index,index); +            m_Attribute = kDefaultAttribute;              break;          }      } @@ -1798,6 +1799,7 @@ CAnsiTerm::ProcessSM(void)              {              case 0:              default: +	    		dbglog("ERROR: bad private SM param %d\n",m_Parameters[0]);                  assert(false);                  break;              case DECCKM: @@ -1846,8 +1848,9 @@ CAnsiTerm::ProcessSM(void)              {              case 20: m_bLineFeedNewLineMode = true; break;  // LNM              default:  -		dbglog("ProcessSM: param %d != 20\n",m_Parameters[0]); -		assert(false);                 break; +				dbglog("ProcessSM: param %d != 20\n",m_Parameters[0]); +				assert(false);                  +				break;              }          }      } diff --git a/util/ialarms.c b/util/ialarms.c index 3b73885..7260356 100644 --- a/util/ialarms.c +++ b/util/ialarms.c @@ -75,7 +75,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "ialarms";  static char   fdebug    = 0;  static char   fbmctam   = 0; diff --git a/util/icmd.c b/util/icmd.c index 2f62b00..ec467e7 100644 --- a/util/icmd.c +++ b/util/icmd.c @@ -78,7 +78,7 @@ extern void ipmi_lan_set_timeout(int ipmito, int tries, int pingto);  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "icmd";  static char   fdebug    = 0;  static char   fquiet    = 0; diff --git a/util/iconfig.c b/util/iconfig.c index d29dd8f..f7b9972 100644 --- a/util/iconfig.c +++ b/util/iconfig.c @@ -172,7 +172,7 @@ typedef struct  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "iconfig";  static char   fdebug    = 0;  static char   fipmilan  = 0; diff --git a/util/idcmi.c b/util/idcmi.c index 9382aa7..0cce3c0 100644 --- a/util/idcmi.c +++ b/util/idcmi.c @@ -62,7 +62,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #include "idcmi.h"  static char * progname  = "idcmi"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  extern char   fdebug;  /*from ipmicmd.c*/  static uchar  g_bus  = PUBLIC_BUS;  static uchar  g_sa   = BMC_SA; diff --git a/util/ievents.c b/util/ievents.c index dc49508..10b665b 100644 --- a/util/ievents.c +++ b/util/ievents.c @@ -76,7 +76,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #define  SELprintf  printf    #define  SMS_SA   0x41  #define  SMI_SA   0x21 -static char *progver   = "3.03"; +static char *progver   = "3.04";  static char *progname  = "ievents";  static char fsensdesc = 0;   /* 1= get extended sensor descriptions*/  static char fcanonical = 0;  /* 1= show canonical, delimited output*/ @@ -1595,20 +1595,21 @@ int decode_sel_entry( uchar *pevt, char *outbuf, int szbuf)  	char fhave_sdr = 0;  	char mdesc[80];   /*used for oem memory description*/  	int msz; +	char *mfgstr; +	int mfg;  	if (outbuf == NULL) return(ERR_BAD_PARAM);  	if (pevt == NULL) {  		outbuf[0] = 0;  		return(ERR_BAD_PARAM);  	} -        get_mfgid(&vend,&prod); /*saved from ipmi_getdeviceid */ +	get_mfgid(&vend,&prod); /*saved from ipmi_getdeviceid */  	psel = (SEL_RECORD *)pevt;  	j = decode_sel_oem(vend,pevt,outbuf,szbuf,fsensdesc,fdebug);  	if (j == 0) return(0);  /*successful, have the description*/  	if (psel->record_type == RT_OEMIU) { /* 0xDB usu ipmiutil OEM string */ -		   int ix = 0;  		   /* ipmiutil OEM event with 9-byte string */  		   pc = (uchar *)&psel->generator_id;  /* offset 7 */  		   evtime = (uchar *)&psel->timestamp; @@ -1616,9 +1617,9 @@ int decode_sel_entry( uchar *pevt, char *outbuf, int szbuf)  		   		(evtime[2] << 16) + (evtime[3] << 24);  		   fmt_time(eventTime, timebuf, sizeof(timebuf));  		   if (fcanonical)  -		     sprintf(outbuf,"%04x %c %s %c %s %c %02x %c %06x %c %s %c OEM Event ", -                       psel->record_id, bdelim, timebuf, bdelim,  -                       get_sev_str(sev), bdelim, psel->record_type, bdelim); +		     sprintf(outbuf,"%04x %c %s %c %s %c %02x %c OEM Event ", +			          psel->record_id, bdelim, timebuf, bdelim,  +			          get_sev_str(sev), bdelim, psel->record_type, bdelim);  		   else  		     sprintf(outbuf,"%04x %s %s %02x OEM Event ",   			   psel->record_id, timebuf, get_sev_str(sev), @@ -1633,8 +1634,6 @@ int decode_sel_entry( uchar *pevt, char *outbuf, int szbuf)  		   outbuf[j++] = 0;  	} else if (psel->record_type == 0xDC) {  		   /* OEM Record: these are usually Microsoft */ -		   char *mfgstr; -		   int mfg;  		   evtime = (uchar *)&psel->timestamp;  		   eventTime = evtime[0] + (evtime[1] << 8) +   		   		(evtime[2] << 16) + (evtime[3] << 24); @@ -1659,8 +1658,6 @@ int decode_sel_entry( uchar *pevt, char *outbuf, int szbuf)  		   outbuf[j++] = '\n';  		   outbuf[j++] = 0;  	} else if (psel->record_type == 0xDD) {  /* usu Intel OEM string */ -		   char *mfgstr; -		   int mfg;  		   int ix = 0;  		   /* Windows reboot reason string from MS ipmidrv.sys */  		   evtime = (uchar *)&psel->timestamp; diff --git a/util/ifirewall.c b/util/ifirewall.c index e3e7626..719d2b8 100644 --- a/util/ifirewall.c +++ b/util/ifirewall.c @@ -64,7 +64,7 @@  /* global variables */  static char * progname  = "ifirewall"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char   fdebug    = 0;  static uchar  g_bus  = PUBLIC_BUS;  static uchar  g_sa   = BMC_SA; diff --git a/util/ifru.c b/util/ifru.c index 6c3573c..c91fab2 100644 --- a/util/ifru.c +++ b/util/ifru.c @@ -116,7 +116,7 @@ extern int ipmi_kontronoem_main(void * intf, int  argc, char ** argv);  #endif  static char *progname  = "ifru"; -static char *progver   = "3.03"; +static char *progver   = "3.04";  static int  vend_id = 0;   static int  prod_id = 0;   static char fdebug = 0; diff --git a/util/ifruset.c b/util/ifruset.c index b62d885..d24b089 100644 --- a/util/ifruset.c +++ b/util/ifruset.c @@ -106,7 +106,7 @@ extern void fmt_time(time_t etime, char *buf, int bufsz); /*see ievents.c*/  #define IPROD_OEM    7  static char *progname  = "ifruset"; -static char *progver   = "3.03"; +static char *progver   = "3.04";  static char fdebug = 0;  static char fpicmg = 0;  static char fonlybase = 0; diff --git a/util/igetevent.c b/util/igetevent.c index 9f8a2c0..40c5e4a 100644 --- a/util/igetevent.c +++ b/util/igetevent.c @@ -169,7 +169,7 @@ extern void free_sdr_cache(uchar *pret); /*see isensor.c*/   * Global variables    */  static char * progname  = "igetevent"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char   fdebug    = 0;  static char   fipmilan  = 0;  static char   frunonce  = 0; diff --git a/util/ihealth.c b/util/ihealth.c index be5c57a..974fa95 100644 --- a/util/ihealth.c +++ b/util/ihealth.c @@ -82,7 +82,7 @@ extern int oem_supermicro_get_firmware_str(char *pstr, int sz); /*oem_supermicro   * Global variables    */  static char * progname  = "ihealth"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char   fdebug    = 0;  static char   fipmilan  = 0;  static char   fcanonical = 0; diff --git a/util/ilan.c b/util/ilan.c index 6451ba8..6f63fe5 100644 --- a/util/ilan.c +++ b/util/ilan.c @@ -305,8 +305,8 @@ extern char *get_sensor_type_desc (uchar stype);	/*from ievents.c */  /*   * Global variables    */ -static char *progver = "3.03"; -static char *progname = "ilan"; +static char * progname  = "ilan"; +static char * progver   = "3.04";  static char fdebug = 0;  static char fipmilan = 0;  static char fIPMI10 = 0;	/* =1 if IPMI v1.0 or less */ @@ -4058,15 +4058,14 @@ PefDesc (int idx, uchar stype)  #ifdef METACOMMAND -int -i_lan (int argc, char **argv) +int i_lan(int argc, char **argv)  #else  #ifdef WIN32  int __cdecl  #else  int  #endif -main (int argc, char **argv) +main(int argc, char **argv)  #endif  {    int ret; diff --git a/util/ilan.c~ b/util/ilan.c~ deleted file mode 100644 index 7d91d55..0000000 --- a/util/ilan.c~ +++ /dev/null @@ -1,5242 +0,0 @@ -/*--------------------------------------------------------------------------- - * Filename:   ilan.c  (was pefconfig.c) - * - * Author:     arcress at users.sourceforge.net - * Copyright (c) 2009 Kontron America, Inc. - * - * Abstract: - * This tool sets up the custom Platform Event Filter for the panicSEL  - * record (0x20, OS Critical Stop) to send a PEF SNMP alert for Linux - * panics.  It also configures the BMC LAN parameters, which are needed  - * to support PEF alerts. - * - * ----------- Change History ----------------------------------------------- - * 10/16/01 Andy Cress - created - * 10/24/01 Andy Cress - mods for SetPefEntry(0c) - * 11/02/01 Andy Cress - added option to disable a given PefEntry - * 11/15/01 Andy Cress - added function to GetLanEntry - * 11/19/01 Andy Cress - added function to SetLanEntry - * 01/18/02 Andy Cress - added GetCfgData function - * 01/31/02 Andy Cress - converted to use ipmi_cmd_ia - * 02/06/02 Andy Cress - removed GetCfgData - * 02/06/02 Andy Cress - added ipmi_cmd_va  - * 02/08/02 Andy Cress - added GetChanAcc - * 02/14/02 Andy Cress - added Get_IPMac_Addr() - * 02/21/02 Andy Cress - added Alert IP/MAC logic to Get_IPMac_Addr() - * 03/21/02 Andy Cress - do SetChanAcc(0x80) with every SetChanAcc(0x40) - * 04/15/02 Andy Cress v1.2 - fix bug with user-specified Alert IP: - *		            (ccode=c7 on SetLanEntry(16 & 18), also - *		            added Get_Mac() for user-specified Alert IP. - * 04/16/02 Andy Cress v1.3 added SetUser() to set password if specified, - *                          also changed unset mac[0] to be 0xFF, not 0. - * 05/09/02 Andy Cress v1.4 fixed bug 504 gwymac[0]=00 (mymac overwrote it), - *                          also fixed alert scan to pick last trapsink - * 05/31/02 Andy Cress v1.5 for gwy mac, changed arping -c 1 to -c 2, - *                          also get com2sec community from snmpd.conf, - *                          set dest type for no ack, no retry, - *                          special handling to set preset PEF entries - * 07/02/02 Andy Cress v1.6 added more Usage text - * 07/08/02 Andy Cress v1.7 SetUserAccess length change  - * 08/02/02 Andy Cress v1.8  moved common ipmi_cmd() code to ipmicmd.c - * 08/27/02 Andy Cress v1.9 fixed 0xc7 on SETUSER_ACCESS with pefconfig -P "", - *                          show message if alert dest not found - * 09/10/02 Andy Cress v1.10 make channel nums into defines (16) - * 09/17/02 Andy Cress v1.11 decode Dest Addr IP (19) in decimal, - *                           fix enable user padding in SetUser, - *                           display new community string when setting - * 12/09/02 Andy Cress v1.12 fix error w -C & snmpd.conf conflict - * 01/29/03 Andy Cress v1.13 added MV OpenIPMI support - * 02/05/03 Andy Cress v1.14 show pef entry descriptions, - *                           added EnablePef routine - *                           show correct Alert dest mac if -A only - * 04/04/03 Andy Cress v1.15 add eth interface option (-i)  - * 05/13/03 Andy Cress v1.16 fix EnablePef if startup delay not supported - * 06/19/03 Andy Cress v1.17 added errno.h (email from Travers Carter)  - * 07/25/03 Andy Cress v1.18 add SerialOverLan configuration - *                           mod to SetUser, added GetBmcEthDevice, - *                           use 'arping -I' if eth1. - * 08/18/03 Andy Cress v1.19 Don't abort if IPMI 1.0, just skip PEF, - *                           SetLanEntry(10 & 11) for bmc grat arp, - *                           SetLanEntry(2) to 0x17 for auth priv - * 09/10/03 Andy Cress v1.20 Don't enable a PEF entry if it is empty, - *                           added -L lan_ch parameter, - *                           scan for lan_ch in GetBmcEthDevice - * 09/22/03 Andy Cress v1.21 Add DHCP option (-D), from Jerry Yu. - * 12/05/03 Andy Cress v1.22 Fix auth type enables for ServerConfig - * 12/16/03 Andy Cress v1.23 Allow flexible auth types via authmask - * 03/19/04 Andy Cress v1.24 Change default pefnum for mBMC to 10 - * 04/15/04 Andy Cress v1.25 Init each response for channel info, avoids - *                           0xcc error with /dev/ipmi0 due to wrong lan_ch - * 05/05/04 Andy Cress v1.26 call ipmi_close before exit.  Note that - *                           Get_IPMac_Addr and GetBmcEthDevice - *                           routines need more work for WIN32. - * 05/24/04 Andy Cress v1.27 added CHAN_ACC params for ia64 - * 06/28/04 Andy Cress v1.28 added parsing to get community from trapsink - * 07/23/04 Andy Cress v1.29 use lan_ch variable to set Alert Policy Table - * 08/23/04 Andy Cress v1.30 fixed decoding of PE Table entries, - *                           added -e option (same as no params) - * 08/25/04 Andy Cress v1.31 added some WIN32 logic to Get_Mac, Get_IPMac_Addr - * 11/01/04 Andy Cress v1.32 add -N / -R for remote nodes    - *                           added -U for remote username - * 11/18/04 Andy Cress v1.33 added -u to configure a lan username (user 2) - * 11/23/04 Andy Cress v1.34 added pef_defaults if first 11 empty - * 01/11/05 Andy Cress v1.35 allow scan for BMC LAN if fIPMI10 - * 01/20/05 Andy Cress v1.36 fix to allow IPMI 2.0 - * 02/16/05 Andy Cress v1.37 added IPMI 2.0 VLAN parameters,  - *                           if DHCP, can set DHCP Server via -I param - * 03/02/05 Andy Cress v1.38 show Serial-Over-Lan params,  - *                           fix -L with lan_ch_parm. mods to GetBmcEthDevice - * 03/18/05 Andy Cress v1.39 fix GetBmcEthDevice for invalid MAC compares - * 06/03/05 Andy Cress v1.40 For my MAC in BMC, check user-specified, then  - *			  				 check existing BMC MAC, then check OS MAC. - * 06/10/05 Andy Cress v1.41 Display multiple Alert Destinations,  - *                           handle fSOL20 commands - * 07/07/05 Andy Cress v1.42 Fix GetBmcEthDevice for TIGI2U to skip GCM ch 3 - * 07/08/05 Andy Cress v1.43 Mods to handle Intel NSI2U miniBMC, - * 08/01/05 Andy Cress v1.44 added -t option to test if BMC LAN configured - * 08/10/05 Andy Cress v1.45 truncate extra string chars, - *                           decode more PEF params - * 09/07/05 Andy Cress v1.46 enable mBMC PEF entries 26 thru 30 - * 04/06/06 Andy Cress v1.47 show "gcm" as ifname if -L 3. - * 06/20/06 Andy Cress v1.48 fix strcmp(gcm), show all 4 alert policies, - *                           add PefDesc() for misc vendor pefdesc, add -a. - * 08/08/06 Andy Cress v1.49 add Alcolu to fsharedMAC - * 09/29/06 Andy Cress v1.52 use bmcmymac if valid, use bmcmyip if ok,  - *                           added -q for user number,  - *                           enhanced Get_IPMac_Addr for Windows - * 10/12/06 Andy Cress v1.53 FindEthNum updates, always use gwy iface for mac - * 11/02/06 Andy Cress v1.55 add user names, EnablePef mods for non-Intel. - * 05/02/07 Brian Johnson v1.65 add fpefenable flag to not do SetPefEntry  - *                           if no Alert Destination.  Previously did  - *                           SetPefEntry but not EnablePef in this case. - * 05/04/07 Andy Cress v1.65 Use 0x02 for DHCP source instead of 0x03, - *                           fix 1714748 missing "X:" in getopt line - * 05/23/07 Jakub Gorgolewski  - *                     v1.66 Use iphlpapi for Windows detection - * 10/31/07 Andy Cress v2.3  Fixed PEF entry for Power Redundancy Lost - * 11/15/07 Andy Cress v2.4  Move custom PEF to #14, add to usage, - *                           Allow broadcast MAC for -X - * 12/17/07 Andy Cress v2.5  Add fSetPEFOks & secondary Gateway - */ -/*M* - *--------------------------------------------------------------------------- -Copyright (c) 2009 Kontron America, 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: - -  a.. Redistributions of source code must retain the above copyright notice,  -	  this list of conditions and the following disclaimer.  -  b.. Redistributions 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.  -  c.. Neither the name of Kontron nor the names of its contributors  -	  may be used to endorse or promote products derived from this software  -	  without specific prior written permission.  - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND  -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED  -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR  -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES  -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON  -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *--------------------------------------------------------------------------- - *M*/ -#ifdef WIN32 -#include <winsock2.h> -#include <iphlpapi.h> -#include <windows.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include "getopt.h" -#elif defined(DOS) -#include <dos.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "getopt.h" -#else   -/* Linux or similar */ -#include <stdio.h> -#include <stdlib.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#if defined(HPUX) -/* getopt is defined in stdio.h */ -#elif defined(MACOS) -/* getopt is defined in unistd.h */ -#include <unistd.h> -#else -#include <getopt.h> -#endif -#include <string.h> -#include <sys/socket.h>  -#include <sys/ioctl.h>    -#include <net/if.h>      -#include <errno.h> -#endif -#ifdef LINUX -#include <unistd.h> -#endif -#ifdef SOLARIS -#include <sys/sockio.h> -#define SIOCGIFHWADDR   SIOCGENADDR -#define ifr_netmask         ifr_ifru.ifru_addr -// #define ifr_hwaddr.sa_data  ifr_ifru.ifru_enaddr -#elif defined(BSD) -#include <sys/sockio.h> -#define SIOCGIFHWADDR   SIOCGIFMAC -#define ifr_netmask         ifr_ifru.ifru_addr  -// #define ifr_hwaddr.sa_data  ifr_ifru.ifru_addr  -#elif defined(MACOS) -#include <sys/sockio.h> -#define ifr_netmask         ifr_ifru.ifru_addr  -#endif -#include "ipmicmd.h"  -#include "oem_intel.h"  -#include "oem_supermicro.h"  -  -#define SELprintf          printf -#define RTF_UP          0x0001   /* route usable */ - -#define SOL_ENABLE_FLAG			0x01 -#define SOL_DISABLE_FLAG		0x00 -#define SOL_PRIVILEGE_LEVEL_USER	0x02 -#define SOL_PRIVILEGE_LEVEL_OPERATOR	0x03 -#define SOL_PRIVILEGE_LEVEL_ADMIN 	0x04 -#define SOL_PREFERRED_BAUD_RATE		0x0a  /*115.2k*/ -/* For IPMI 1.5, use Intel SOL commands & subfunctions */ -#define SOL_ENABLE_PARAM		0x01 -#define SOL_AUTHENTICATION_PARAM 	0x02 -#define SOL_ACC_INTERVAL_PARAM	 	0x03 -#define SOL_RETRY_PARAM  	 	0x04 -#define SOL_BAUD_RATE_PARAM		0x05  /*non-volatile*/ -#define SOL_VOL_BAUD_RATE_PARAM		0x06  /*volatile*/ -/* For IPMI 2.0, use IPMI SOL commands & subfunctions */ -#define SOL_ENABLE_PARAM2		0x08 -#define SOL_AUTHENTICATION_PARAM2 	0x09 -#define SOL_BAUD_RATE_PARAM2		0x11 - -/* IPMI 2.0 SOL PAYLOAD commands */ -#define SET_PAYLOAD_ACCESS  0x4C -#define GET_PAYLOAD_ACCESS  0x4D -#define GET_PAYLOAD_SUPPORT 0x4E - -/* Channel Access values */ -#define CHAN_ACC_DISABLE   0x20   /* PEF off, disabled*/ -#define CHAN_ACC_PEFON     0x02   /* PEF on, always avail */ -#define CHAN_ACC_PEFOFF    0x22   /* PEF off, always avail*/ -/* special channel access values for ia64 */ -#define CHAN_ACC_PEFON64   0x0A   /* PEF on, always avail, UserLevelAuth=off */ -#define CHAN_ACC_PEFOFF64  0x2A   /* PEF off, always avail, UserLevelAuth=off */ -#define OS_LINUX          1 -#define OS_WINDOWS        2 -#define OS_SOLARIS        3 -#define OS_BSD            4 -#define OS_HPUX           5 - -   /* TSRLT2 Channels: 0=IPMB, 1=Serial/EMP, 6=LAN2, 7=LAN1 */ -   /* S5000 Channels: 0=IPMB, 1=LAN1, 2=LAN2, 3=RMM2, 4=Serial, 6=pci, 7=sys */ -   /* For TIGPT1U/mBMC: 1=LAN channel, no serial */ -#define LAN_CH   1   -#define SER_CH   4 -#define MAXCHAN  12  /*was 16, reduced for gnu ipmi_lan*/ -#define NUM_DEVICES_TO_CHECK		32   /*for GetBmcEthDevice()*/ -#define MAC_LEN  6   /*length of MAC Address*/ -#define PSW_LEN  16  /* see also PSW_MAX =20  in ipmicmd.h*/ -/* Note: The optional IPMI 2.0 20-byte passwords are not supported here,  - * due to back-compatibility issues. */ - -   /* IP address source values */ -#define SRC_STATIC 0x01 -#define SRC_DHCP   0x02  /* BMC running DHCP */ -#define SRC_BIOS   0x03  /* BIOS, sometimes DHCP */ -#define SRC_OTHER  0x04 - -/* PEF event severities */ -#define PEF_SEV_UNSPEC   0x00 -#define PEF_SEV_MON      0x01 -#define PEF_SEV_INFO     0x02 -#define PEF_SEV_OK       0x04 -#define PEF_SEV_WARN     0x08 -#define PEF_SEV_CRIT     0x10 -#define PEF_SEV_NORECOV  0x20 -#define FLAG_INIT  99  /*initial value of char flag, beyond scope*/ -#define PARM_INIT  0xff - -typedef struct -{            /* See IPMI Table 15-2 */ -		uchar              rec_id; -		uchar              fconfig; -		uchar              action; -		uchar              policy; -		uchar              severity; -		uchar              genid1; -		uchar              genid2; -		uchar              sensor_type; -		uchar              sensor_no; -		uchar              event_trigger; -		uchar              data1; -		uchar              mask1; -		uchar              res[9]; -}       PEF_RECORD; - -typedef struct -{            /* See IPMI Table 19-3 */ -		uchar              data[36]; -}       LAN_RECORD;   /*LanRecord*/ - -#ifdef METACOMMAND -extern int get_lan_stats(uchar chan);  /*see bmchealth.c */ -extern char *get_sensor_type_desc(uchar stype);  /*from ievents.c*/ -#endif - -#define MYIP   0x01 -#define GWYIP  0x02 -#define DESTIP 0x04 -#define MAXPEF 41	 	/* max pefnum offset = 40 (41 entries) */ -/* - * Global variables  - */ -static char * progver   = "3.03"; -static char * progname  = "ilan"; -static char   fdebug    = 0; -static char   fipmilan  = 0; -static char   fIPMI10   = 0;      /* =1 if IPMI v1.0 or less */ -static char   fIPMI20   = 0;      /* =1 if IPMI v2.0 or greater */ -static char   fSOL20    = 1;      /* =1 if use Serial-Over-Lan 2.0 w IPMI 2.0 */ -static char   fsharedMAC = 0;     /* =1 if special shared-MAC BMC LAN port */ -static char   fAdjustPefNum = 0;  /* =1 adjust pefnum to first empty index */ -static char   fUserPefNum = 0;    /* =1 if user specified a valid pefnum value*/ -static char   freadonly = 1;      /* =1 to only read LAN & PEF parameters */ -static char   fcanonical = 0;     /* =1 to show only canonical output */ -static char   flansecure = 0;     /* =1 set lan security: no null, cipher0 off*/ -static char   bdelim = BCOLON;    /* delimiter ':' or '|' if canonical output*/ -static char   ftestonly = 0; -static char   fprivset  = 0; -static char   flanstats = 0;      /* =1 to show the IPMI LAN statistics */ -static char   foptmsg    = 0;     /* =1 to show the option warning msg */ -static char   fshowchan  = 0;     /* =1 to show the IPMI channels */ -static char   nopts      = 0;     /* number of pefconfig options specified*/ -static int    nerrs      = 0;     /* number of errors during processing */ -static int    ngood      = 0;     /* number of good results */ -static int    lasterr    = 0;     /* value of the last error */ -static char   fCustomPEF = 0;     /* =1 if -j to input a custom PEF record */ -static char   fSetPEFOks = 0;     /* =1 if -k to set PEF OK rules */ -static char   fdisable  = 0; -static char   fenable   = 0;      /* =1 to config BMC LAN and PEF */ -static char   fpefenable = 0;     /* =1 enable PEF if Alert Dest is specified*/ -static char   fdisableSOL = 0; -static char   fgetser   = 0; -static char   fsetifn   = 0;	  /* =1 if user specified ifname[] with -i */ -static char   fethfound = 0;      /* =1 if FindEthNum successful */ -static char   fset_ip   = 0;	 /* !=0 if options used to specify an IP addr*/ -static char   fpassword = 0;	  /* =1 user-specified a password, so set it. */ -static uchar  fmBMC     = 0;      /* =1 mini-BMC, =0 Sahalee BMC */ -static uchar  fiBMC     = 0;      /* =1 Intel iBMC */ -static uchar  fRomley   = 0;      /* =1 Intel Romley BMC */ -static uchar  fGrantley = 0; -static uchar  fipv6     = 0;      /* =1 if BMC supports IPv6 */ -static uchar  bmcpefctl  = 0;     /* existing BMC PEF Control, !0 = enabled */ -static char   alertnum  = 1;      /* alert dest num (usu 1 thru 4) */ -static char   alertmax  = 9;      /* alert dest num max (usu 4, error if >9) */ -static char   pefnum    = 12;     /* 11 pre-defined entries, adding 12th */ -static char   pefadd    = 0;      /* num PEF rules added (usu 2, could be 5 */ -static char   pefmax    = MAXPEF; /* 20 for Sahalee, 30 for miniBMC */ -static char  *myuser    = NULL;   /* username to set, specified by -u */ -static uchar  usernum   = 0;      /* set non-zero to specify user number */ -static uchar  rgmyip[4]    = {0,0,0,0}; -static uchar  rggwyip[4]   = {0,0,0,0}; -static uchar  rggwy2ip[4]  = {0,0,0,0}; -static uchar  rgdestip[4]  = {0,0,0,0}; -static uchar  rgsubnet[4]  = {0,0,0,0}; -static uchar  bmcsubnet[4] = {255,255,255,0};  /* default subnet */ -static uchar  ossubnet[4]  = {0,0,0,0};  -static uchar  osmyip[4]    = {0,0,0,0}; -static uchar  bmcmyip[4]   = {0,0,0,0}; -static uchar  bmcdestip[4] = {0,0,0,0}; -static uchar  bmcdestmac[6]= {0xff,0,0,0,0,0}; -static uchar  bmcgwyip[4]   = {0,0,0,0}; -static uchar  bmcgwymac[6]= {0xff,0,0,0,0,0}; -static uchar  bmcmymac[6]  = {0xff,0,0,0,0,0}; -static uchar  rgmymac[6]   = {0xff,0,0,0,0,0}; -static uchar  osmymac[6]   = {0xff,0,0,0,0,0}; -static uchar  rggwymac[6]  = {0xff,0,0,0,0,0}; -static uchar  rggwy2mac[6] = {0xff,0,0,0,0,0}; -static uchar  rgdestmac[6] = {0xff,0,0,0,0,0}; -static uchar  rgdhcpmac[6] = {0xff,0,0,0,0,0}; -static int    nciphers = 16; -static int    ncipher0 = 0; -static uchar  rgciphers[16] = {0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -static char   rghostname[32] = {'\0'}; -static uchar  custPEF[20];   /* max used = 18 bytes */ -static char   rgcommunity[19] = "public";  /* default community */ -static char   fsetcommunity = 0;    /* =1 if user-specified community */ -static char   passwordData[PSW_MAX+1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  -static uchar  authmask      = 0;    /* usu 0x17, mBMC = 0x15 */ -static uchar  bAuth         = 0x16; /*exclude auth=None for security*/ -static uchar  arp_interval  = 0x04;   /* in 500 ms increments, 0-based */ -static uchar  arp_ctl       = 0x01;   /* 01=grat arp, 02=arp resp, 03=both*/ -static uchar  fsetarp       = 0;      /* 1=user-specified arp_ctl */ -#ifdef WIN32 -static uchar  ostype        = OS_WINDOWS;  /*windows*/ -static char   ifname[64]    = "Local Area Connection "; /* interface name */ -static char   ifpattn[25]   = "Local Area Connection "; -#elif SOLARIS -/* for i86pc use "e1000g0", but for sun4u(sparc) this might be "eri0" */ -static uchar  ostype        = OS_SOLARIS;   -#ifdef __SPARC__ -static char   ifname[16]    = "eri0"; /* SPARC interface name */ -static char   ifname0[16]   = "eri0";  -static char   ifpattn[14]    = "eri"; -#else -static char   ifname[16]    = "e1000g0"; /* Solaris x86 interface name */ -static char   ifname0[16]   = "e1000g0";  -static char   ifpattn[14]    = "e1000g"; -#endif -#elif defined(BSD) -static uchar  ostype        = OS_BSD;   -static char   ifname[16]    = "em0"; /* interface name */ -static char   ifname0[16]   = "em0";  -static char   ifpattn[14]    = "em"; -#elif defined(HPUX) -static uchar  ostype        = OS_HPUX;   -static char   ifname[16]    = "lan0"; /* interface name */ -static char   ifname0[16]   = "lan0";  -static char   ifpattn[14]    = "lan"; -#else -static uchar  ostype        = OS_LINUX;   -static char   ifname[16]    = "eth0"; /* interface name */ -static char   ifname0[16]   = "eth0";  -static char   ifpattn[14]    = "eth"; -#endif -static char  *pspace1 = "\t";  /*used for fcanonical output*/ -static char  *pspace2 = "\t\t"; -static char  *pspace3 = "\t\t\t"; -static char  *pspace4 = "\t\t\t\t"; -static int    vend_id; -static int    prod_id; -static int    lan_dhcp      = 0;      /*=1 if using DHCP for bmc lan channel*/ -static uchar  ser_ch        = SER_CH; -static uchar  gcm_ch        = PARM_INIT; -static uchar  failover_enable = PARM_INIT; -static uchar  vlan_enable   = PARM_INIT; -static uchar  vlan_prio     = 0;  /*default = 0*/ -static ushort vlan_id       = 0;  /*max 12 bits used*/ -static uchar  lan_access    = 0x04;   /* -v usu 4=Admin, 3=Operator, 2=User */ -static uchar  lan_user      = 0x02;   /* -u if specified, default to user 2 */ -static uchar  lan_ch_parm   = PARM_INIT; /* -L to set, unused if PARM_INIT */ -static uchar  lan_ch        = LAN_CH;    /* default=LAN_CH=1 */ -static uchar  max_users     = 5;  /* set in GetUser(1); */ -static uchar  enabled_users = 0;  /* set in GetUser(1); */ -static uchar  show_users    = 5;  /* default, adjusted based on DeviceID  */ -static uchar  fnewbaud      = 0;  /* =1 if user specified baud */ -static uchar  sol_baud      = SOL_PREFERRED_BAUD_RATE; /*115.2k default*/ -static uchar  sol_accum[2] = { 0x04, 0x32 }; -static uchar  sol_retry[2] = { 0x06, 0x14 }; -static uchar  sol_bvalid    = 0;  /* =1 if SOL baud is valid */ -static uchar  chan_pefon    = CHAN_ACC_PEFON; -static uchar  chan_pefoff   = CHAN_ACC_PEFOFF; -static uchar  SessInfo[18];     /* Session Info data */ -// static uchar  bparm7[3] = {0x00, 0x00, 0x00}; /*ipv4 header before*/ -static uchar  iparm7[3] = {0x1E, 0x00, 0x00}; /*intel ipv4 TTL,Flags,Service*/ -static uchar  oparm7[3] = {0x40, 0x40, 0x10}; /*other ipv4 TTL,Flags,Service*/ -static uchar *parm7 = &oparm7[0]; -#define MAX_PEFPARAMS  14	/* max pef params = 14 */ -uchar peflen[MAX_PEFPARAMS] = {0,1,1,1,1,1,21,2,1,4,17,1,3,18}; /*for ShowPef*/ -uchar pef_array[MAXPEF][21];    /* array of all PEF entries read, */ -								/* sizeof(PEF_RECORD) = 21  */ -uchar pef_defaults[11][21] = {  /* array of first 11 default PEF entries */ -{0x01,0x80,1,1,PEF_SEV_CRIT,0xff,0xff,0x01,0xff,0x01,0x95,0x0a,0,0,0,0,0,0,0,0,0}, /*Temp*/ -{0x02,0x80,1,1,PEF_SEV_CRIT,0xff,0xff,0x02,0xff,0x01,0x95,0x0a,0,0,0,0,0,0,0,0,0}, /*Volt*/ -{0x03,0x80,1,1,PEF_SEV_CRIT,0xff,0xff,0x04,0xff,0x01,0x95,0x0a,0,0,0,0,0,0,0,0,0}, /*Fan*/ -{0x04,0x80,1,1,PEF_SEV_WARN,0xff,0xff,0x05,0x05,0x03,0x01,0x00,0,0,0,0,0,0,0,0,0}, /*Chass*/ -{0x05,0x80,1,1,PEF_SEV_WARN,0xff,0xff,0x08,0xff,0x6f,0x06,0x00,0,0,0,0,0,0,0,0,0}, /*PS*/ -{0x06,0x80,1,1,PEF_SEV_WARN,0xff,0xff,0x0c,0x08,0x6f,0x02,0x00,0,0,0,0,0,0,0,0,0}, /*ECC*/ -{0x07,0x80,1,1,PEF_SEV_CRIT,0xff,0xff,0x0f,0x06,0x6f,0x01,0x00,0,0,0,0,0,0,0,0,0}, /*FRB*/ -{0x08,0x80,1,1,PEF_SEV_WARN,0xff,0xff,0x07,0xff,0x6f,0x1c,0x00,0,0,0,0,0,0,0,0,0}, /*POST*/ -{0x09,0x80,1,1,PEF_SEV_CRIT,0xff,0xff,0x13,0xff,0x6f,0x3e,0x03,0,0,0,0,0,0,0,0,0}, /*NMI*/ -{0x0a,0x80,1,1,PEF_SEV_INFO,0xff,0xff,0x23,0x03,0x6f,0x0e,0x00,0,0,0,0,0,0,0,0,0}, /*WDT*/ -{0x0b,0x80,1,1,PEF_SEV_MON,0xff,0xff,0x12,0xff,0x6f,0x02,0x00,0,0,0,0,0,0,0,0,0} };/*Restart*/ - -char **pefdesc; -char *pefdesc1[MAXPEF] = {    /* for Sahalee BMC */ -/* 0 0x00 */ "", -/* 1 0x01 */ "Temperature Sensor", -/* 2 0x02 */ "Voltage Sensor", -/* 3 0x04 */ "Fan Failure", -/* 4 0x05 */ "Chassis Intrusion", -/* 5 0x08 */ "Power Supply Fault", -/* 6 0x0c */ "Memory ECC Error", -/* 7 0x0f */ "BIOS POST Error", -/* 8 0x07 */ "FRB Failure", -/* 9 0x13 */ "Fatal NMI", -/*10 0x23 */ "Watchdog Timer Reset", -/*11 0x12 */ "System Restart", -/*12 0x20 */ "OS Critical Stop", -/*13 0x09 */ "Power Redundancy Lost", -/*14 0x00 */ "reserved", -/*15 0x00 */ "reserved", -/*16 0x00 */ "reserved", -/*17 */ "reserved", -/*18 */ "reserved", -/*19 */ "reserved", -/*20 */ "reserved", -/*21 */ "reserved", -/*22 */ "reserved", -/*23 */ "reserved", -/*24 */ "reserved", -/*25 */ "reserved", -/*26 */ "reserved", -/*27 */ "reserved", -/*28 */ "reserved", -/*29 */ "unused", -/*30 */ "unused" }; - -char *pefdesc2[MAXPEF] = {    /* for NSC miniBMC */ -/* 0 */ "", -/* 1 0x02*/ "Voltage Sensor Assert", -/* 2 0x23*/ "Watchdog FRB Timeout",  /* was "Proc FRB Thermal", */ -/* 3 0x02*/ "Voltage Sensor Deassert", -/* 4 0x07*/ "Proc1 IERR", -/* 5 0xff*/ "Digital Sensor OK", -/* 6 0x14*/ "Chassis Identify", -/* 7 0x13*/ "NMI Button", -/* 8 0x14*/ "Clear CMOS via Panel", -/* 9 0x0f*/ "OS Load POST Code", -/*10 0x20*/ "OS Critical Stop", -/*11 0x09 */ "Power Redundancy Lost", -/*12 0x00*/ "reserved", -/*13 */ "reserved", -/*14 */ "reserved", -/*15 */ "reserved", -/*16 */ "reserved", -/*17 */ "reserved", -/*18 */ "reserved", -/*19 */ "reserved", -/*20 */ "reserved", -/*21 */ "reserved", -/*22 */ "reserved", -/*23 */ "reserved", -/*24 */ "reserved", -/*25 */ "reserved", -/*26 0x05*/ "Chassis Intrusion", -/*27 0x0f*/ "POST Code Error", -/*28 0x02*/ "Voltage Failure", -/*29 0x04*/ "Fan Failure", -/*30 0x01*/ "Temperature Failure"}; - -#define NLAN  39 -char canon_param[NLAN] = { 0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1, -			   0,0,0,0,0,0,1,1,1,1}; -struct { -  int cmd; -  int sz; -  char desc[28]; -} lanparams[NLAN] = {   /* see IPMI Table 19-4 */ - /*  0 */ { 0, 1, "Set in progress"}, - /*  1 */ { 1, 1, "Auth type support"}, - /*  2 */ { 2, 5, "Auth type enables"}, - /*  3 */ { 3, 4, "IP address"}, - /*  4 */ { 4, 1, "IP addr src"},  /* (DHCP/Static) */ - /*  5 */ { 5, 6, "MAC addr"}, - /*  6 */ { 6, 4, "Subnet mask"}, - /*  7 */ { 7, 3, "IPv4 header"}, - /*  8 */ { 8, 2, "Prim RMCP port"}, - /*  9 */ { 9, 2, "Sec RMCP port"}, - /* 10 */ {10, 1, "BMC grat ARP"}, - /* 11 */ {11, 1, "grat ARP interval"}, - /* 12 */ {12, 4, "Def gateway IP"}, - /* 13 */ {13, 6, "Def gateway MAC"}, - /* 14 */ {14, 4, "Sec gateway IP"}, - /* 15 */ {15, 6, "Sec gateway MAC"}, - /* 16 */ {16,18, "Community string"}, - /* 17 */ {17, 1, "Num dest"}, - /* 18 */ {18, 5, "Dest type"}, - /* 19 */ {19, 13, "Dest address"}, - /* 20 */ {20, 2,  "VLAN ID"}, - /* 21 */ {21, 1,  "VLAN Priority"}, - /* 22 */ {22, 1,  "Cipher Suite Support"}, - /* 23 */ {23,17,  "Cipher Suites    "}, - /* 24 */ {24, 9,  "Cipher Suite Priv"}, - /* 25 */ {25, 4,  "VLAN Dest Tag"}, - /* 26 */ {96, 28, "OEM Alert String"}, - /* 27 */ {97,  1, "Alert Retry Algorithm"}, - /* 28 */ {98,  3, "UTC Offset"}, - /* 29 */ {102, 1, "IPv6 Enable"}, - /* 30 */ {103, 1, "IPv6 Addr Source"}, - /* 31 */ {104,16, "IPv6 Address"}, - /* 32 */ {105, 1, "IPv6 Prefix Len"}, - /* 33 */ {106,16, "IPv6 Default Gateway"}, - /* 34 */ {108,17, "IPv6 Dest address"}, - /* 35 */ {192, 4, "DHCP Server IP"}, - /* 36 */ {193, 6, "DHCP MAC Address"}, - /* 37 */ {194, 1, "DHCP Enable"}, - /* 38 */ {201, 2, "Channel Access Mode(Lan)"} -}; - -#define NSER  22   /* max=32 */ -struct { -  int cmd; -  int sz; -  char desc[28]; -} serparams[NSER] = {   /* see IPMI Table 20-4 */ - /*  0 */ { 0, 1, "Set in progress"}, - /*  1 */ { 1, 1, "Auth type support"}, - /*  2 */ { 2, 5, "Auth type enables"}, - /*  3 */ { 3, 1, "Connection Mode"}, - /*  4 */ { 4, 1, "Sess Inactiv Timeout"}, - /*  5 */ { 5, 5, "Channel Callback"}, - /*  6 */ { 6, 1, "Session Termination"}, - /*  7 */ { 7, 2, "IPMI Msg Comm"}, - /*  8 */ { 8, 2, "Mux Switch"}, - /*  9 */ { 9, 2, "Modem Ring Time"}, - /* 10 */ {10,17, "Modem Init String"}, - /* 11 */ {11, 5, "Modem Escape Seq"}, - /* 12 */ {12, 8, "Modem Hangup Seq"}, - /* 13 */ {13, 8, "Modem Dial Command"}, - /* 14 */ {14, 1, "Page Blackout Interval"}, - /* 15 */ {15,18, "Community String"}, - /* 16 */ {16, 1, "Num of Alert Dest"}, - /* 17 */ {17, 5, "Destination Info"}, - /* 18 */ {18, 1, "Call Retry Interval"}, - /* 19 */ {19, 3, "Destination Comm Settings"}, - /* 20 */ {29, 2, "Terminal Mode Config"}, - /* 21 */ {201, 2,"Channel Access Mode (Ser)"} -}; - -static void getauthstr(uchar auth, char *s) -{ -	 if (s == NULL) return; -	 s[0] = 0; -	 if (auth & 0x01) strcat(s,"None "); -	 if (auth & 0x02) strcat(s,"MD2 "); -	 if (auth & 0x04) strcat(s,"MD5 "); -	 if (auth & 0x10) strcat(s,"Pswd "); -	 if (auth & 0x20) strcat(s,"OEM "); -	 return; -} - -static int GetDeviceID(LAN_RECORD *pLanRecord) -{  /*See also ipmi_getdeviceid( pLanRecord, sizeof(LAN_RECORD),fdebug); */ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	int status; -	uchar inputData[24]; -	uchar completionCode; - -	if (pLanRecord == NULL) return(-1); - -		status = ipmi_cmd(GET_DEVICE_ID, inputData, 0, responseData, -						&responseLength, &completionCode, fdebug);  - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			SELprintf("GetDeviceID: completion code=%x\n",  -				completionCode);  -			status = completionCode; -		} else { -			memcpy(pLanRecord,&responseData[0],responseLength); -			set_mfgid(&responseData[0],responseLength); -			return(0);  // successful, done -		} -	}  /* endif */ -	/* if get here, error */ -	return(status); -}  /*end GetDeviceID() */ - -static int GetChanAcc(uchar chan, uchar parm, LAN_RECORD *pLanRecord) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	int status; -	uchar inputData[24]; -	uchar completionCode; - -	if (pLanRecord == NULL) return(-1); -	responseLength = 3; -	inputData[0] = chan; -	inputData[1] = parm;  /* 0x80 = active, 0x40 = non-volatile */ -	responseLength = sizeof(responseData); -		status = ipmi_cmd(GET_CHANNEL_ACC, inputData, 2, responseData, -						&responseLength, &completionCode, fdebug);  - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			SELprintf("GetChanAcc: completion code=%x\n",  -				completionCode);  -			status = completionCode; -		} else { -			// dont copy first byte (Parameter revision, usu 0x11) -			memcpy(pLanRecord,&responseData[0],responseLength); -			return(0);  // successful, done -		} -	}  /* endif */ -	/* if get here, error */ -	return(status); -}  /*GetChanAcc()*/ - -static int SetChanAcc(uchar chan, uchar parm, uchar val) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	int status; -	uchar inputData[24]; -	uchar completionCode; - -	if (fmBMC) return(0);  /* mBMC doesn't support this */ -		/* parm: 0x80 = active, 0x40 = set non-vol*/ -	responseLength = 1; -	inputData[0] = chan;  /* channel */ -	inputData[1] = (parm & 0xc0) | (val & 0x3F);  -	inputData[2] = (parm & 0xc0) | lan_access; /* set priv level to Admin */ - -	responseLength = sizeof(responseData); -		status = ipmi_cmd(SET_CHANNEL_ACC, inputData, 3, responseData, -						&responseLength, &completionCode, fdebug);  - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			SELprintf("SetChanAcc: completion code=%x\n",  -				completionCode);  -			status = completionCode; -		} else { -			return(0);  // successful, done -		} -	}  /* endif */ -	/* if get here, error */ -	return(status); -}  /*SetChanAcc()*/ - -int SetPasswd(int unum, char *uname, char *upswd, uchar chan, uchar priv) -{ -   uchar responseData[MAX_BUFFER_SIZE]; -   int responseLength = MAX_BUFFER_SIZE; -   int status, i, psw_len; -   uchar completionCode; -   uchar inputData[24]; -   int ret = 0; - -	inputData[0] = (uchar)unum;  /*user 1 = null user */ -	responseLength = sizeof(responseData); -		status = ipmi_cmd(GET_USER_NAME, inputData, 1, responseData,  -				&responseLength, &completionCode, fdebug); -		SELprintf("GET_USERNAME: %x %x %x, status = %x, ccode=%x\n", -				responseData[0],responseData[1],responseData[2], -		status,completionCode); -	if (fdebug) { -		char aname[17]; -				printf("User %d: ",unum); -		for (i = 0; i < responseLength; i++) { -				   printf("%02x ",responseData[i]); -		   if (responseData[i] < 0x20) aname[i] = '.'; -		   else aname[i] = responseData[i]; -		} -		aname[16] = 0; -				printf(" %s\n",aname); -	} - -	if (unum != 1)  -	{   /* user specified a lan username */ -	   if (fiBMC && (unum == 2)) { -		  /* cannot set user 2 name */ -		  if (uname != NULL) { -			 if (strcmp(uname,"root") != 0)  -				   printf("SETUSERNAME - user2 name %s must be root\n",uname); -		  } -	   } else if (unum == 2 && (vend_id == VENDOR_SUPERMICROX || -			vend_id == VENDOR_SUPERMICRO) ) { -		  /* cannot set user 2 name */ -		  if (uname != NULL) { -			 if (strcmp(uname,"ADMIN") != 0)  -				   printf("SETUSERNAME - user2 name %s must be ADMIN\n",uname); -		  } -	   } else if (uname != NULL) { -		  inputData[0] = (uchar)unum; -		  memset(&inputData[1],0,16); -		  memcpy(&inputData[1],uname,strlen(uname)); -		  status = ipmi_cmd(SET_USER_NAME, inputData, 17, responseData,  -				   &responseLength, &completionCode, fdebug); -		  if (completionCode == 0xCC)  -			 status = 0;  /*setting username to previous gives 0xCC, ok*/ -		  else { -				SELprintf("SETUSERNAME - %x %x %x  status = %x, ccode=%x\n", -				   inputData[0],inputData[1],inputData[2], -				   status,completionCode); -			if (status == 0) status = completionCode; -			if (status != 0) ret = status; -		  } -	   } -	} - -	if ((unum != 1) && (uname == NULL)) { -	   ;  /* if no username, do not enable user */ -	} else { -		   inputData[0] = (uchar)unum;   -		   inputData[1] = 0x01;  /*enable user*/ -		   responseLength = sizeof(responseData); -		   status = ipmi_cmd(SET_USER_PASSWORD, inputData, 2, responseData,  -				&responseLength, &completionCode, fdebug); -		   printf("SETUSERENAB - inputData %x %x %x, status = %x, ccode=%x\n", -				inputData[0],inputData[1],inputData[2], -				status,completionCode); -	   if (status == 0) status = completionCode; -	   if (status != 0) ret = status; -	} - -	if (upswd != NULL) { -		 inputData[0] = (uchar)unum;   -		 inputData[1] = 0x02;  /*set password*/ -		 psw_len = PSW_LEN;   /*=16 change if 20-byte passwords supported */ -		 memset(&inputData[2],0,psw_len); -		 strcpy((char *)&inputData[2],upswd); -	  if (fdebug) { -		char apsw[PSW_MAX+1]; -		char c; -				printf("Pswd %d: ",unum); -		for (i = 0; i < psw_len; i++) { -		   c = inputData[i+2]; -				   printf("%02x ",(unsigned char)c); -		   if (c < 0x20) apsw[i] = '.'; -		   else apsw[i] = c; -		} -		apsw[psw_len] = 0; -				printf(" %s\n",apsw); -	 } -	 responseLength = sizeof(responseData); -		 status = ipmi_cmd(SET_USER_PASSWORD, inputData, 2+psw_len,  -			responseData,&responseLength, &completionCode,fdebug); -		 SELprintf("SETUSERPSW - inputData %x %x %x, status = %x, ccode=%x\n", -				inputData[0],inputData[1],inputData[2], -		status,completionCode); -	 if (status == 0) status = completionCode; -	 if (status != 0) ret = status; - -		 inputData[0] = (uchar)unum;  /*user 1 = null user */ -		 inputData[1] = 0x03;  /*test password*/ -		 memset(&inputData[2],0,psw_len); -	 if (upswd != NULL)  -		strcpy((char *)&inputData[2],upswd); -	 responseLength = sizeof(responseData); -		 status = ipmi_cmd(SET_USER_PASSWORD, inputData, 2+psw_len,  -			responseData,&responseLength, &completionCode,fdebug); -		 SELprintf("TESTUSERPSW - inputData %x %x %x, status = %x, ccode=%x\n", -				inputData[0],inputData[1],inputData[2], -		status,completionCode); -	} - -	if (fiBMC && (unum == 2)) { /*iBMC doesn't support this on user 2*/ -		if (fdebug) -		printf("skipping SETUSER_ACCESS on iBMC for user %d\n",unum); -	} else { -		   inputData[0] = 0x90 | chan;   /* = 0x97 for chan=lan_ch=7 */ -		   inputData[1] = (uchar)unum;   /* user num */ -		   inputData[2] = priv;   /* usu priv=lan_access is admin */ -		   inputData[3] = 0x00;   /* User Session Limit, 0=not limited*/ -		   responseLength = sizeof(responseData); -		   status = ipmi_cmd(SET_USER_ACCESS, inputData, 4, responseData, -						   &responseLength, &completionCode, fdebug); -		   printf("SETUSER_ACCESS - inputData %x %x %x, status = %x ccode=%x\n", -		   (uchar)inputData[0],inputData[1],inputData[2], -		   status,completionCode); -	   if (status == 0) status = completionCode; -	   if (status != 0) ret = status; -	} - -   return(ret); -}  /*end SetPswd()*/ - -int SetUser(int unum, char *uname, char *passwd, uchar chan) -{ -	  int ret = 0;  -	  /* if the user specified a username or password, set it. */ -	  if ((fpassword) || (uname != NULL)) { -	   /* set username and password */ -	   ret = SetPasswd(unum, uname,passwd, chan, lan_access); -	  } -	  return(ret); -}  /*end SetUser()*/ - -int -DisableUser(int unum, uchar chan) -{ -   uchar responseData[MAX_BUFFER_SIZE]; -   int responseLength = MAX_BUFFER_SIZE; -   int status; -   uchar completionCode; -   uchar inputData[24]; - -   inputData[0] = 0x80 | chan;   /* = 0x87, no IPMI */ -   inputData[1] = (uchar)unum;   /* user 1 */ -   inputData[2] = 0x0F;   /* No access  */ -   inputData[3] = 0x00;   /* User Session Limit, 0=not limited*/ -   responseLength = sizeof(responseData); -   status = ipmi_cmd(SET_USER_ACCESS, inputData, 4, responseData, -					 &responseLength, &completionCode, fdebug); -   if (status == 0) status = completionCode; -   return(status); -} - -static char *parse_priv(uchar c) -{ -	char *p; -	c = (c & 0x0f); -	switch(c) { -		case 1:    p = "Callback"; break; -		case 2:    p = "User  "; break; -		case 3:    p = "Operator"; break; -		case 4:    p = "Admin "; break; -		case 5:    p = "OEM   "; break; -		case 0x0f: p = "No access"; break; -		default:   p = "Reserved"; /*usually =0*/ -	} -	return(p); -} - -static void show_priv(uchar c) -{ -	char *privstr; -	privstr = parse_priv(c); -	printf("%s",privstr); -} - -static int valid_priv(int c) -{ -	int rv; -		switch(c) { -		case 1:   -		case 2:  -		case 3:  -		case 4:  -		case 5:  -		case 0x0f:  -			rv = 1; -			break; -		default:   -			rv = 0; -			break; -	} -	return rv; -} - -/* GetUserINfo - get user configuration info for user subfunction */ -int GetUserInfo(uchar unum, uchar chan, uchar *enab, uchar *priv, char *uname) -{ -	 uchar responseData[MAX_BUFFER_SIZE]; -	 int responseLength = MAX_BUFFER_SIZE; -	 int status, rv; -	 uchar completionCode; -	 uchar inputData[24]; -	 uchar upriv; - -	 if (enab == NULL || priv == NULL) return(-2); -	 inputData[0] = chan; /*lan_ch*/ -	 inputData[1] = unum; /* user number for IPMI LAN */ -	 responseLength = sizeof(responseData); -	 status = ipmi_cmd(GET_USER_ACCESS, inputData, 2, responseData, -						&responseLength, &completionCode, fdebug); -	 rv = status; -	 if (status == 0 && completionCode != 0) rv = completionCode; -	 if (rv == 0) { -		if (unum == 1) { /*get max_users and enabled_users*/ -		   max_users = responseData[0] & 0x3f; -		   enabled_users = responseData[1] & 0x3f; -		} -		upriv = responseData[3]; -		inputData[0] = unum;  /* usually = 1 for BMC LAN */ -		responseLength = sizeof(responseData); -		status = ipmi_cmd(GET_USER_NAME, inputData, 1, responseData,  -				&responseLength, &completionCode, fdebug); -		if (status != 0 || completionCode != 0)  -				responseData[0] = 0; /*empty user name */ -		responseData[PSW_MAX-1] = 0;  /*for safety*/ -		*priv = upriv; -		if ((responseData[1] & 0x80) == 0) *enab = 0; -		else *enab = 1; -		if (uname != NULL) strcpy(uname,responseData); -	 } -	 return(rv); -} - -/* GetUser - get and show user configuration */ -int GetUser(uchar user_num, uchar chan) -{ -	  uchar responseData[MAX_BUFFER_SIZE]; -	  int responseLength = MAX_BUFFER_SIZE; -	  int status; -	  uchar completionCode; -	  uchar inputData[24]; - -		 inputData[0] = chan; /*lan_ch*/ -		 inputData[1] = user_num;  /* usually = 1 for BMC LAN */ -		 responseLength = sizeof(responseData); -		 status = ipmi_cmd(GET_USER_ACCESS, inputData, 2, responseData, -						&responseLength, &completionCode, fdebug); -	 if (status == 0 && completionCode == 0) { -		uchar c; -		if (user_num == 1) { /*get max_users and enabled_users*/ -		max_users = responseData[0] & 0x3f; -		enabled_users = responseData[1] & 0x3f; -		if (enabled_users > show_users) show_users = enabled_users; -		if (show_users > max_users) show_users = max_users; -		if (!fcanonical) -				  SELprintf("Users:  showing %d of max %d users (%d enabled)\n", -			  show_users,max_users,enabled_users); -		} -		if (fcanonical)  -			SELprintf("Channel %d User %d Access %s%c ", chan, user_num, -			  pspace2,bdelim); -		else  -			SELprintf("User Access(chan%d,user%d): %02x %02x %02x %02x : ", -			  chan, user_num, (uchar)responseData[0], -			  responseData[1],responseData[2], responseData[3]); -		c = responseData[3]; -		inputData[0] = user_num;  /* usually = 1 for BMC LAN */ -		responseLength = sizeof(responseData); -		status = ipmi_cmd(GET_USER_NAME, inputData, 1, responseData,  -				&responseLength, &completionCode, fdebug); -		if (status != 0 || completionCode != 0)  -				responseData[0] = 0; -			if (c & 0x10) printf("IPMI, "); -			show_priv(c); -			printf(" (%s)\n",responseData);  /*show user name */ -	 } else  -			SELprintf("Get User Access(%d,%d), status=%x, ccode=%x\n", -			chan, user_num, status, completionCode); -	return(status); -}  /*end ShowUser()*/ - -static int GetSerEntry(uchar subfunc, LAN_RECORD *pLanRecord) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	uchar inputData[24]; -	int status; -	uchar completionCode; -	uchar chan; uchar bset; - -	if (pLanRecord == NULL) -	{ -	   if (fdebug) -		  printf("GetSerEntry(%d): error, output buffer is NULL\n",subfunc); -	   return (-1); -	} - -		chan = ser_ch;  /* 1=EMP, 0=IPMB, 6=LAN2, 7=LAN1 */ -	bset = 0; - -	inputData[0]            = chan;  // flags, channel 3:0 (1=EMP) -	inputData[1]            = subfunc;  // Param selector  -	inputData[2]            = bset;  // Set selector  -	inputData[3]            = 0;  // Block selector -	if (subfunc == 10)  { -	   inputData[2] = 0; -	   inputData[3] = 1; -	} - -		status = ipmi_cmd(GET_SER_CONFIG, inputData, 4, responseData, -						&responseLength, &completionCode, fdebug);  - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			if (fdebug) -			  SELprintf("GetSerEntry(%d,%d): completion code=%x\n",  -				chan,subfunc,completionCode);  -		} else { -			// dont copy first byte (Parameter revision, usu 0x11) -			memcpy(pLanRecord,&responseData[1],responseLength-1); -			pLanRecord->data[responseLength-1] = 0; -			//successful, done -			return(0); -		} -	} - -	// we are here because completionCode is not COMPLETION_CODE_OK -	if (fdebug)  -		SELprintf("GetSerEntry(%d,%d): ipmi_cmd status=%x ccode=%x\n", -						  chan,subfunc,status,completionCode); -	return -1; -} - -static int GetLanEntry(uchar subfunc, uchar bset, LAN_RECORD *pLanRecord) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	uchar inputData[24];  -	int status, n; -	uchar completionCode; -	uchar chan;  - -	if (pLanRecord == NULL) -	{ -	   if (fdebug) -		   printf("GetLanEntry: error, output buffer is NULL\n"); -	   return (-1); -	} - -		chan = lan_ch;  /* LAN 1 = 7 */ - -	inputData[0]            = chan;  // flags, channel 3:0 (LAN 1) -	inputData[1]            = subfunc;  // Param selector (3 = ip addr) -	inputData[2]            = bset;  // Set selector  -	inputData[3]            = 0;  // Block selector - -		status = ipmi_cmd(GET_LAN_CONFIG, inputData, 4, responseData, -						&responseLength, &completionCode, fdebug);  - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			if (fdebug)  -			   SELprintf("GetLanEntry: completion code=%x\n",  -					completionCode); -			status = completionCode; -		} else { -			// dont copy first byte (Parameter revision, usu 0x11) -			if (responseLength > 0) { -			   n = responseLength-1; -			   memcpy(pLanRecord,&responseData[1],n); -			} else n = 0; -			pLanRecord->data[n] = 0; -			//successful, done -			return(0); -		} -	} - -	// we are here because completionCode is not COMPLETION_CODE_OK -	if (fdebug)  -		SELprintf("GetLanEntry: ipmi_cmd status=%d completionCode=%x\n", -						  status,completionCode); -	return status; -}  /* end GetLanEntry() */ - -static int SetLanEntry(uchar subfunc, LAN_RECORD *pLanRecord, int reqlen) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	uchar inputData[24]; -	int status; -	uchar completionCode; - -	if (pLanRecord == NULL) -	{ -	   if (fdebug) -		   printf("SetLanEntry(%d): error, input buffer is NULL\n",subfunc); -	   return (-1); -	} -		if (vend_id == VENDOR_SUPERMICROX || vend_id == VENDOR_SUPERMICRO)  { -	   /* SUPERMICRO cannot set grat arp or grat arp interval */ -	   if (subfunc == 10 || subfunc == 11) return(0); -	} - -	inputData[0]            = lan_ch;  // flags, channel 3:0 (LAN 1) -	inputData[1]            = subfunc;  // Param selector (3 = ip addr) -	memcpy(&inputData[2],pLanRecord,reqlen); - -		status = ipmi_cmd(SET_LAN_CONFIG, inputData, (uchar)(reqlen+2),  -			responseData, &responseLength,&completionCode,fdebug); - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			if (fdebug) -			   SELprintf("SetLanEntry(%d): completion code=%x\n",  -				  subfunc,completionCode); // responseData[0]); -						return(completionCode); -		} else { -			//successful, done -			return(0); -		} -	} - -	// we are here because completionCode is not COMPLETION_CODE_OK -	if (fdebug)  -		SELprintf("SetLanEntry(%d): ipmi_cmd status=%d ccode=%x\n", -						  subfunc,status,completionCode); -	return status; -}  /* end SetLanEntry() */ - -int GetPefEntry(uchar subfunc, ushort rec_id, PEF_RECORD *pPefRecord) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	uchar inputData[24]; /* only use 3 bytes for input */ -	int status, n; -	uchar completionCode; - -	if (pPefRecord == NULL) -	{ -	   if (fdebug) -		  printf("GetPefEntry(%d): error, output buffer is NULL\n",subfunc); -	   return (-1); -	} - -	inputData[0]            = subfunc; // Parameter = Evt Filter Table -	inputData[1]            = (uchar)rec_id;  -	inputData[2]            = 0;  - -		status = ipmi_cmd(GET_PEF_CONFIG, inputData, 3, responseData, -						&responseLength, &completionCode, fdebug);  - -		if (status == ACCESS_OK) { -				if( completionCode ) { -			if (fdebug) -						   SELprintf("GetPefEntry(%d/%d): completion code=%x\n", -								subfunc,rec_id,completionCode);  -			status = completionCode; -				} else { -			/* expect PEF record to be >=21 bytes */ -			if (responseLength > 1) n = responseLength-1; -			else n = 0; -			if (n > 21) n = 21; /*only use 21 bytes*/ -			if ((subfunc == 6) && (n < 21)) { -			  if (fdebug) -							 printf("GetPefEntry(%d/%d): length %d too short\n", -					subfunc,rec_id,responseLength);  -			} -						// dont copy first byte (Parameter revision, usu 0x11) -			if (n == 0) memset(pPefRecord,0,21);  -			else memcpy(pPefRecord,&responseData[1],n); -						//successful, done -						return(0); -				} -	} - -	// we are here because completionCode is not COMPLETION_CODE_OK -	if (fdebug)  -		  SELprintf("GetPefEntry: ipmi_cmd status=%x completionCode=%x\n", -						 status, completionCode); -	return status; -}  /* end GetPefEntry() */ - -int SetPefEntry(PEF_RECORD *pPefRecord) -{ -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	uchar inputData[32]; /* sizeof(PEF_RECORD) = 21 +1=22 */ -	int status; -	uchar completionCode; -	uchar subfunc; - -	subfunc = 0x06; // Parameter = Evt Filter Table - -	if (pPefRecord == NULL) { -	   if (fdebug) -		   printf("SetPefEntry: error, output buffer is NULL\n"); -	   return (-1); -	} - -		//  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 -		// 06 0c 80 01 01 00 ff ff 20 ff 6f ff 00 00 00 00 00 00 00 00 00 00 -	// memset(&inputData[0],0,requestData.dataLength); -	inputData[0]            = subfunc;  -	memcpy(&inputData[1],pPefRecord,sizeof(PEF_RECORD)); - -		status = ipmi_cmd(SET_PEF_CONFIG, inputData, sizeof(PEF_RECORD)+1,  -			   responseData, &responseLength, &completionCode, fdebug);  - -	if (status == ACCESS_OK) { -		if( completionCode ) { -			if (fdebug) -			   SELprintf("SetPefEntry: completion code=%x\n",  -				   completionCode); // responseData[0]); -			status = completionCode; -		} else { -			//successful, done -			return(0); -		} - -	} - -	// we are here because completionCode is not COMPLETION_CODE_OK -	if (fdebug)  -		SELprintf("SetPefEntry: ipmi_cmd status=%d completion code=%x\n", -						  status,completionCode); -	return(status); -  -}  /* end SetPefEntry() */ - -int DisablePef(int anum) -{ -	uchar iData[24]; /* sizeof(PEF_RECORD) = 21 +1=22 */ -	uchar rData[MAX_BUFFER_SIZE]; -	int rLength = MAX_BUFFER_SIZE; -	uchar cc; -	int status; - -	if (fmBMC) { -		   SELprintf("mini-BMC does not support disabling BMC LAN\n"); -	   return(-1); -	} else { -		   status = SetChanAcc(lan_ch, 0x80, CHAN_ACC_DISABLE); -		   if (fdebug) SELprintf("SetChanAcc(lan/active), ret = %d\n",status); -		   status = SetChanAcc(lan_ch, 0x40, CHAN_ACC_DISABLE);  -		   SELprintf("SetChanAcc(lan), ret = %d\n",status); -	   if (status != 0) return(status); -	} - -	iData[0] = 0x01;        /* PEF Control Param */ -	iData[1] = 0x00;	/* PEF disable */ -	rLength = MAX_BUFFER_SIZE; -		status = ipmi_cmd(SET_PEF_CONFIG, iData, 2, rData, &rLength,  -			  &cc, fdebug);  -	if (status != 0) return(status); -	if( cc ) { -	   SELprintf("DisablePef[%d]: completion code=%x\n",iData[0],cc); -	   return(-1); -	} - -		if (anum != 0) { -	  iData[0] = 0x09;        /* PEF Alert Policy Table */ -	  iData[1] = (uchar)anum; /* Policy number (default 0x01) */ -	  iData[2] = 0x10;        /* PEF LAN, policy disable */ -	  iData[3] = 0x00;        /* LAN_CH=00, default dest=00 */ -	  iData[4] = 0x00;        /* No alert string */ -	  rLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmd(SET_PEF_CONFIG, iData, 5, rData, &rLength,  -			  &cc, fdebug);  -	  if (status != 0) return(status); -	  if( cc ) { -		SELprintf("DisablePef[%d]: completion code=%x\n",iData[0],cc); -		return(-1); -	  } -		} -	return(status); -} - -int ShowPef(void) -{ -	uchar iData[24]; /* sizeof(PEF_RECORD) = 21 +1=22 */ -	uchar rData[MAX_BUFFER_SIZE]; -	int rLength = MAX_BUFFER_SIZE; -	uchar cc; -	int status, i,j; -	  -	for (j = 1; j < MAX_PEFPARAMS; j++) { -	   if (j == 4 && fmBMC) { -		/* fmBMC gets cc=0x80 for param 4, so skip it. */ -		continue; -	   } -	   iData[0] = (uchar)j;         /* PEF Control Param */ -	   if (j == 6 || j == 7 || j == 9) iData[1] = 1;  -	   else iData[1] = 0x00;	 /* PEF Set Selector */ -	   if (j == 13) iData[2] = 1;  -	   else iData[2] = 0x00;	 /* PEF Block Selector */ -	   rLength = MAX_BUFFER_SIZE; -	   status = ipmi_cmd(GET_PEF_CONFIG, iData, 3, rData, &rLength,  -				&cc, fdebug);  -	   if (status == 0 && cc == 0) { -		SELprintf("PefParam[%d]: ",iData[0]); -		if (rLength > 0) -		  for (i=0;i<peflen[j];i++) SELprintf("%02x ", rData[1+i]); -		SELprintf("\n"); -	   } else -		SELprintf("PefParam[%d]: GET_PEF status=%d cc=%x\n", -				iData[0],status,cc); -	} -	return(status); -} - -int EnablePef(int anum) -{ -	uchar iData[24]; /* sizeof(PEF_RECORD) = 21 +1=22 */ -	uchar rData[MAX_BUFFER_SIZE]; -	int rLength = MAX_BUFFER_SIZE; -	uchar cc; -	int status; -	uchar sdelay; - -		status = SetChanAcc(lan_ch, 0x80, chan_pefon);   -		if (fdebug) SELprintf("SetChanAcc(lan/active), ret = %d\n",status); -		status = SetChanAcc(lan_ch, 0x40, chan_pefon);  -		SELprintf("SetChanAcc(lan), ret = %d\n",status); -	if (status != 0) return(status); - -	{ -	  iData[0] = 0x01;         /* PEF Control Param */ -	  iData[1] = 0x00;	   /* PEF Set Selector */ -	  iData[2] = 0x00;	   /* PEF Block Selector */ -	  rLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmd(GET_PEF_CONFIG, iData, 3, rData, &rLength,  -			  &cc, fdebug);  -	  if (status != 0 || cc != 0) sdelay = 0; -	  else sdelay = rData[1]; -	  if (fdebug) SELprintf("EnablePef[%d]: get cc=%x, control=%02x\n", -				iData[0],cc,sdelay); -	  iData[0] = 0x01;         /* PEF Control Param (0x01 or 0x05) */ -	  iData[1] = 0x01;	   /* PEF enable, & no startup delay */ -	  rLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmd(SET_PEF_CONFIG, iData, 2, rData, &rLength,  -			  &cc, fdebug);  -	  if (status != 0) return(status); -	  if( cc ) { -		SELprintf("EnablePef[%d]: completion code=%x\n",iData[0],cc); -		return(-1); -	  } - -#ifdef TEST -	  iData[0] = 0x01;         /* Serial Channel */ -	  iData[1] = 0x13;         /* Dest Com settings = 19. */ -	  iData[2] = 0x01;         /* POL Default Dest */ -	  iData[3] = 0x60;          -	  iData[4] = 0x07;         -		  status = ipmi_cmd(SET_SER_CONFIG, iData, 5, rData, &rLength,  -			  &cc, fdebug);  -#endif - -	  iData[0] = 0x02;         /* PEF Action Param */ -	  iData[1] = 0x00;	   /* PEF Set Selector */ -	  iData[2] = 0x00;	   /* PEF Block Selector */ -	  rLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmd(GET_PEF_CONFIG, iData, 3, rData, &rLength,  -			  &cc, fdebug);  -	  if (fdebug) SELprintf("EnablePef[%d]: get cc=%x, val=%02x\n", -				iData[0],cc,rData[1]); -	  iData[0] = 0x02;         /* PEF Action Param */ -		  if (vend_id == VENDOR_INTEL) -		  iData[1] = 0x2f; /* enable alerts, reset, power cycle/down, diag*/ -		  else  -		  iData[1] = 0x0f; /* enable alerts, reset, power cycle/down */ -	  rLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmd(SET_PEF_CONFIG, iData, 2, rData, &rLength,  -			  &cc, fdebug);  -	  if (status != 0) return(status); -	  if( cc ) { -		SELprintf("EnablePef[%d]: completion code=%x\n",iData[0],cc); -		return(-1); -	  } - -	  if ((sdelay & 0x04) != 0) {  /* startup delay is supported */ -		iData[0] = 0x03;         /* PEF Startup Delay Param */ -		iData[1] = 0x00;         /* 0 seconds, default is 0x3c (60 sec) */ -		rLength = MAX_BUFFER_SIZE; -			status = ipmi_cmd(SET_PEF_CONFIG, iData, 2, rData, &rLength,  -			  &cc, fdebug);  -		if (fdebug) SELprintf("EnablePef[%d]: set val=%02x cc=%x\n", -				 iData[0],iData[1],cc); -		if (status != 0) return(status); -		if( cc ) { -		SELprintf("EnablePef[%d]: completion code=%x\n",iData[0],cc); -		// return(-1); -		} -		iData[0] = 0x04;         /* PEF Alert Startup Delay Param */ -		iData[1] = 0x00;         /* 0 seconds, default is 0x3c (60 sec) */ -		rLength = MAX_BUFFER_SIZE; -			status = ipmi_cmd(SET_PEF_CONFIG, iData, 2, rData, &rLength,  -			  &cc, fdebug);  -		if (fdebug) SELprintf("EnablePef[%d]: set val=%02x cc=%x\n", -				 iData[0],iData[1],cc); -		if (status != 0) return(status); -		if( cc ) { -		SELprintf("EnablePef[%d]: completion code=%x\n",iData[0],cc); -		// return(-1); -		} -	  } /*endif sdelay*/ - -	  iData[0] = 0x09;        /* PEF Alert Policy Table */ -	  iData[1] = (uchar)anum; /* Policy number (default 0x01) */ -	  iData[2] = 0x18;        /* PEF LAN, always alert, policy enable */ -	  iData[3] = (lan_ch << 4) + anum;  /* LAN_CH=70, default dest=01 */ -	  iData[4] = 0x00;        /* No alert string */ -	  rLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmd(SET_PEF_CONFIG, iData, 5, rData, &rLength,  -			  &cc, fdebug);  -	  if (fdebug) SELprintf("EnablePef[%d]: set val=%02x cc=%x\n", -				 iData[0],iData[1],cc); -	  if (status != 0) return(status); -	  if( cc ) { -		SELprintf("EnablePef[%d]: completion code=%x\n",iData[0],cc); -		return(-1); -	  } -	}  /*endif IPMI 1.5 */ - -	return(status); -}  /* end EnablePef */ - -#define NBAUDS  10 -static struct { -	   unsigned char val; -	   char str[8]; -	} mapbaud[NBAUDS] = { -	   { 6,  "9600" }, -	   { 6,  "9.6K" }, -	   { 7,  "19.2K" }, -	   { 7,  "19200" }, -	   { 8,  "38.4K" }, -	   { 8,  "38400" }, -	   { 9,  "57.6K" }, -	   { 9,  "57600" }, -	   { 10, "115.2K" }, -	   { 10, "115200" } -	}; - -static unsigned char Str2Baud(char * str) -{ -   unsigned char baud = 0; -   int i, n, len; -   len = strlen_(str); -   for (i = 0; i < len; i++)  /*toupper*/ -	  if (str[i] >= 'a' && str[i] <= 'z') str[i] &= 0x5F; -   for (i = 0; i < NBAUDS; i++) { -	   n = strlen_(mapbaud[i].str); -	   if (strncmp(str,mapbaud[i].str,n) == 0) { -		   baud = mapbaud[i].val; -		   break; -	   } -   } -   if (i == NBAUDS || baud == 0) { -	   printf("Invalid -B parameter value (%s), using 19.2K.\n",str); -	   i = 1; /* default is 19.2K */ -	   baud = mapbaud[i].val; /* =7 */ -   } -   if (fdebug) printf("new baud = %02x (%s)\n",baud,mapbaud[i].str); -   return(baud); -} - -static char *Baud2Str(unsigned char bin) -{ -	char *baudstr; -	unsigned char b; -	b = bin & 0x0f; -	switch(b) { -	case 6:  baudstr = "9600 "; break; -	case 7:  baudstr = "19.2k"; break; -	case 8:  baudstr = "38.4k"; break; -	case 9:  baudstr = "57.6k"; break; -	case 10: baudstr = "115.2k"; break; -	default: baudstr = "nobaud"; -	} -	return(baudstr); -} - -static int BaudValid(unsigned char b) -{ -	int val = 0; -	switch(b) { -	case 6:  val = 1; break;  -	case 7:  val = 1; break;  -	case 8:  val = 1; break;  -	case 9:  val = 1; break;  -	case 10: val = 1; break;  -	default: val = 0; break;  -	} -	return(val); -} - -/* - * atomac - converts ASCII string to binary MAC address (array). - * Accepts input formatted as 11:22:33:44:55:66 or 11-22-33-44-55-66. - */ -void atomac(uchar *array, char *instr) -{ -   int i,j,n; -   char *pi; -   j = 0; -   pi = instr; -   n = strlen_(instr); -   for (i = 0; i <= n; i++) { -	  if (instr[i] == ':') { -	array[j++] = htoi(pi); -	pi = &instr[i+1]; -	  } else if (instr[i] == '-') { -	array[j++] = htoi(pi); -	pi = &instr[i+1]; -	  } else if (instr[i] == 0) { -	array[j++] = htoi(pi); -	  } -	  if (j >= MAC_LEN) break; /*safety valve*/ -   } -   if (fdebug)  -	  printf("atomac: %02x %02x %02x %02x %02x %02x\n",  -		 array[0],array[1],array[2],array[3], array[4],array[5]); -}  /*end atomac()*/ - -/* extern void atoip(uchar *array,char *instr); *from subs.c*/ -void MacSetInvalid(uchar *mac) -{ -   int i; -   if (mac == NULL) return; -   for (i = 0; i < MAC_LEN; i++) { -	  if (i == 0) mac[i] = 0xFF; -	  else mac[i] = 0x00; -   } -} - -int MacIsValid(uchar *mac) -{ -   int fvalid = 0; -   int i; -   /* check for initial invalid value of FF:00:... */ -   if (mac[0] == 0xff && mac[1] == 0x00)  /* marked as invalid */ -	return(fvalid); -   /* check for all zeros */ -   for (i = 0; i < MAC_LEN; i++) -	if (mac[i] != 0) {  /* not all zeros */ -		fvalid = 1; -		break; -	} -   return(fvalid); -} - -int IpIsValid(uchar *ipadr) -{ -   int fvalid = 1; -   if (ipadr[0] == 0) fvalid = 0; -   return(fvalid); -} - -int SubnetIsValid(uchar *subnet) -{ -   int fvalid = 0; -   /* if masking off at least one bit, say valid */ -   if (subnet[0] != 0) fvalid = 1; -   return(fvalid); -} - -int SubnetIsSame(uchar *ip1, uchar *ip2, uchar *subnet) -{ -	int i; -	uchar c1, c2; -	for (i = 0; i < 4; i ++) { -	c1 = ip1[i] & subnet[i]; -	c2 = ip2[i] & subnet[i]; -	if (c1 != c2) return 0;  -	} -	return 1;    /*same, return true*/ -} - -#ifdef WIN32 -/* - * Obtain network adapter information (Windows). - */ -PIP_ADAPTER_ADDRESSES GetAdapters() { -	PIP_ADAPTER_ADDRESSES AdapterAddresses = NULL; -	ULONG OutBufferLength = 0; -	ULONG RetVal = 0, i; -	   -	// The size of the buffer can be different  -	// between consecutive API calls. -	// In most cases, i < 2 is sufficient; -	// One call to get the size and one call to get the actual parameters. -	// But if one more interface is added or addresses are added,  -	// the call again fails with BUFFER_OVERFLOW.  -	// So the number is picked slightly greater than 2.  -	// We use i <5 in the example -	for (i = 0; i < 5; i++) { -		RetVal = GetAdaptersAddresses( -				AF_INET, 0, NULL,  -				AdapterAddresses,  -				&OutBufferLength); -		 -		if (RetVal != ERROR_BUFFER_OVERFLOW) { -			break; -		} - -		if (AdapterAddresses != NULL) { -			free(AdapterAddresses); -		} -		 -		AdapterAddresses = (PIP_ADAPTER_ADDRESSES) malloc(OutBufferLength); -		if (AdapterAddresses == NULL) { -			RetVal = GetLastError(); -			break; -		} -	} -	if (RetVal == NO_ERROR) { -	  // If successful, return pointer to structure -		return AdapterAddresses; -	} -	else {  -	  LPVOID MsgBuf; -	   -	  printf("Call to GetAdaptersAddresses failed.\n"); -	  if (FormatMessage(  -		FORMAT_MESSAGE_ALLOCATE_BUFFER |  -		FORMAT_MESSAGE_FROM_SYSTEM |  -		FORMAT_MESSAGE_IGNORE_INSERTS, -		NULL, -		RetVal, -		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language -		(LPTSTR) &MsgBuf, -		0, -		NULL )) { -		printf("\tError: %s", MsgBuf); -	  } -	  LocalFree(MsgBuf); -	}   -	return NULL; -} - -/* - * Set BMC MAC corresponding to current BMC IP address (Windows). - */ -int GetLocalMACByIP() { -	PIP_ADAPTER_ADDRESSES AdapterAddresses = NULL; -	PIP_ADAPTER_ADDRESSES AdapterList; -	int result = 0; - -	struct sockaddr_in *si; -	 -	AdapterAddresses = GetAdapters(); -	AdapterList = AdapterAddresses; -	 -	while (AdapterList) { -		PIP_ADAPTER_UNICAST_ADDRESS addr; -		addr = AdapterList->FirstUnicastAddress; -	if (addr == NULL) si = NULL; -		else si = (struct sockaddr_in*)addr->Address.lpSockaddr; -	if (si != NULL) { -		   if(memcmp(&si->sin_addr.s_addr, rgmyip, 4) == 0) { -		  if (!MacIsValid(rgmymac)) -		memcpy(rgmymac, AdapterList->PhysicalAddress, MAC_LEN); -			  memcpy(osmyip, &si->sin_addr.s_addr, 4); -		  memcpy(osmymac, AdapterList->PhysicalAddress, MAC_LEN); -			  wcstombs(ifname,AdapterList->FriendlyName, sizeof(ifname)); -			  result = 1; -			  break; -		   } -		} -		AdapterList = AdapterList->Next; -	}    - -	if (AdapterAddresses != NULL) { -		free(AdapterAddresses); -	} -	return result; -} - -/* - * Get First IP Address in Windows OS - *   ipaddr is 4 bytes, macaddr is 6 bytes, ipname can be 64 bytes. - * (called by idiscover.c) - */ -int GetFirstIP(uchar *ipaddr, uchar *macadr, char *ipname, char fdbg)  -{ -	PIP_ADAPTER_ADDRESSES AdapterAddresses = NULL; -	PIP_ADAPTER_ADDRESSES AdapterList; -	struct sockaddr_in *si; -	uchar *psaddr; -	int result = -1; -	 -	AdapterAddresses = GetAdapters(); -	AdapterList = AdapterAddresses; -	 -	while (AdapterList) { -		PIP_ADAPTER_UNICAST_ADDRESS addr; -		 -	addr = AdapterList->FirstUnicastAddress; -	si = (struct sockaddr_in*)addr->Address.lpSockaddr; -	psaddr = (uchar *)&si->sin_addr.s_addr; -	if ((psaddr[0] != 0) && (psaddr[0] != 169)) { -		if (fdbg) printf("found IP: s_addr=%d.%d.%d.%d\n", -				psaddr[0], psaddr[1], psaddr[2], psaddr[3]); -		if (ipaddr != NULL) -			   memcpy(ipaddr, &si->sin_addr.s_addr, 4); -		if (macadr != NULL) { -		   memcpy(macadr, AdapterList->PhysicalAddress, MAC_LEN); -		   if (fdbg) printf("found MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", -			macadr[0], macadr[1], macadr[2], macadr[3], -			macadr[4], macadr[5]); -		} -		if (ipname != NULL) { -			   wcstombs(ipname,AdapterList->FriendlyName, sizeof(ifname)); -		   if (fdbg) printf("found Adapter: %d\n",ipname); -		} -			result = 0; -			break; -		} -		AdapterList = AdapterList->Next; -	}    - -	if (AdapterAddresses != NULL) { -		free(AdapterAddresses); -	} -	return result; -} - -/* - * Set BMC MAC corresponding to current BMC IP address (Windows). - */ -int GetLocalIPByMAC(uchar *macadr) { -	PIP_ADAPTER_ADDRESSES AdapterAddresses = NULL; -	PIP_ADAPTER_ADDRESSES AdapterList; -	int result = 0; - -	struct sockaddr_in *si; -	 -	AdapterAddresses = GetAdapters(); -	AdapterList = AdapterAddresses; -	 -	while (AdapterList) { -		PIP_ADAPTER_UNICAST_ADDRESS addr; -		if(memcmp(AdapterList->PhysicalAddress, macadr, MAC_LEN) == 0) { -			addr = AdapterList->FirstUnicastAddress; -			 -			si = (struct sockaddr_in*)addr->Address.lpSockaddr; -		if (fdebug) { -		uchar *psaddr; -		psaddr = (uchar *)&si->sin_addr.s_addr; -		printf("mac match: rgmyip=%d.%d.%d.%d s_addr=%d.%d.%d.%d\n", -			rgmyip[0], rgmyip[1], rgmyip[2], rgmyip[3], -			psaddr[0], psaddr[1], psaddr[2], psaddr[3]); -		} -		if (!IpIsValid(rgmyip) && (fsharedMAC==1)) /*not specified, shared*/ -		memcpy(rgmyip, &si->sin_addr.s_addr, 4); -			memcpy(osmyip, &si->sin_addr.s_addr, 4); -		memcpy(osmymac, AdapterList->PhysicalAddress, MAC_LEN); -			wcstombs(ifname,AdapterList->FriendlyName, sizeof(ifname)); -			result = 1; -			break; -		} -		AdapterList = AdapterList->Next; -	}    - -	if (AdapterAddresses != NULL) { -		free(AdapterAddresses); -	} -	return result; -} -/* - * Set MAC and IP address from given interface name (Windows). - */ -int GetLocalDataByIface() { -	PIP_ADAPTER_ADDRESSES AdapterAddresses = NULL; -	PIP_ADAPTER_ADDRESSES AdapterList; -	int result = 0; - -	size_t origsize, newsize, convertedChars; -	wchar_t* wcstring; -	struct sockaddr_in *si; -	 -	AdapterAddresses = GetAdapters(); -	AdapterList = AdapterAddresses; -	 -	origsize = strlen(ifname) + 1; -	newsize = origsize; -	convertedChars = 0; -	wcstring = (wchar_t*) malloc(sizeof(wchar_t) * newsize)  ; -	if (wcstring == NULL) AdapterList = NULL;  /*skip loop, do free*/ -	else mbstowcs(wcstring, ifname, origsize ); -	 -	while (AdapterList) { -		PIP_ADAPTER_UNICAST_ADDRESS addr; -		if(wcsstr(AdapterList->FriendlyName, wcstring)) { -			printf("Using interface: %S\n", AdapterList->FriendlyName); -			printf("\t%S\n", AdapterList->Description); -			addr = AdapterList->FirstUnicastAddress; -			 -			si = (struct sockaddr_in*)addr->Address.lpSockaddr; -		if (fdebug) { -		uchar *psaddr; -		psaddr = (uchar *)&si->sin_addr.s_addr; -		printf("mac match: rgmyip=%d.%d.%d.%d s_addr=%d.%d.%d.%d " -			"fsharedMAC=%d\n", -			rgmyip[0], rgmyip[1], rgmyip[2], rgmyip[3], -			psaddr[0], psaddr[1], psaddr[2], psaddr[3], -			fsharedMAC); -		} -		if (!IpIsValid(rgmyip)) {  /*IP not specified*/ -			   memcpy(rgmyip, &si->sin_addr.s_addr, 4); -			   memcpy(rgmymac, AdapterList->PhysicalAddress, MAC_LEN); -		} -			memcpy(osmyip, &si->sin_addr.s_addr, 4); -		memcpy(osmymac, AdapterList->PhysicalAddress, MAC_LEN); -			/* FriendlyName == ifname already */ -			result = 1; -			break; -		} -		AdapterList = AdapterList->Next; -	}    - -	if (AdapterAddresses != NULL) { -		free(AdapterAddresses); -	} -	return result; -} - -int FindEthNum(uchar *macadrin) -{ -   int i; -   uchar macadr[MAC_LEN]; -   memcpy(macadr,macadrin,MAC_LEN); -   if (fsharedMAC == 0 && vend_id == VENDOR_INTEL)  { -	/* Intel factory assigns them this way, so use that to compare */ -	macadr[MAC_LEN-1] -= 2; /*OS MAC = BMC MAC - 2*/ -   } -   i = GetLocalIPByMAC(macadr); -   if (i == 1) fethfound = 1; -   if (fdebug)  /* show the local OS eth if and MAC */ -	printf("FindEth: OS %s IP=%d.%d.%d.%d MAC=%02x:%02x:%02x:%02x:%02x:%02x\n", -				ifname, osmyip[0], osmyip[1], osmyip[2], osmyip[3],  -		osmymac[0], osmymac[1], osmymac[2], osmymac[3],  -		osmymac[4], osmymac[5]); -   /* The actual Windows ethernet interface is determined  -	* in Get_IPMac_Addr using ipconfig, so -	* init eth interface number as eth0 for Windows. */ -   return(0); -} -#elif defined(HPUX) -#define INSAP 22 -#define OUTSAP 24 - -#include <sys/types.h> -#include <fcntl.h> -#include <errno.h> -#include <stdio.h> -#include <string.h> -#include <signal.h> -#include <ctype.h> -#include <sys/stropts.h> -#include <sys/poll.h> -#include <sys/dlpi.h> - -#define bcopy(source, destination, length) memcpy(destination, source, length) -#define AREA_SZ 5000 /*=* buffer length in bytes *=*/ -#define GOT_CTRL 1 -#define GOT_DATA 2 -#define GOT_BOTH 3 -#define GOT_INTR 4 -#define GOT_ERR 128 -static u_long ctl_area[AREA_SZ]; -static u_long dat_area[AREA_SZ]; -static struct strbuf ctl = {AREA_SZ, 0, (char *)ctl_area}; -static struct strbuf dat = {AREA_SZ, 0, (char *)dat_area}; -static char *dlpi_dev[] = {"/dev/dlpi", ""}; - -/*=* get a message from a stream; return type of message *=*/ -static int get_msg(int fd) -{ -	int flags = 0; -	int res, ret; -	ctl_area[0] = 0; -	dat_area[0] = 0; -	ret = 0; -	res = getmsg(fd, &ctl, &dat, &flags); -	if(res < 0) { -		if(errno == EINTR) { -			return(GOT_INTR); -		} else { -			return(GOT_ERR); -		} -	} -	if(ctl.len > 0) { -		ret |= GOT_CTRL; -	} -	if(dat.len > 0) { -		ret |= GOT_DATA; -	} -	return(ret); -} - -/*=* verify that dl_primitive in ctl_area = prim *=*/ -static int check_ctrl(int prim) -{ -	dl_error_ack_t *err_ack = (dl_error_ack_t *)ctl_area; -	if(err_ack->dl_primitive != prim) { -		return GOT_ERR; -	} -	return 0; -} - -/*=* put a control message on a stream *=*/ -static int put_ctrl(int fd, int len, int pri) -{ -	ctl.len = len; -	if(putmsg(fd, &ctl, 0, pri) < 0) { -		return GOT_ERR; -	} -	return  0; -} - -/*=* put a control + data message on a stream *=*/ -static int put_both(int fd, int clen, int dlen, int pri) -{ -	ctl.len = clen; -	dat.len = dlen; -	if(putmsg(fd, &ctl, &dat, pri) < 0) { -		return GOT_ERR; -	} -	return  0; -} - -/*=* open file descriptor and attach *=*/ -static int dl_open(const char *dev, int ppa, int *fd) -{ -	dl_attach_req_t *attach_req = (dl_attach_req_t *)ctl_area; -	if((*fd = open(dev, O_RDWR)) == -1) { -		return GOT_ERR; -	} -	attach_req->dl_primitive = DL_ATTACH_REQ; -	attach_req->dl_ppa = ppa; -	put_ctrl(*fd, sizeof(dl_attach_req_t), 0); -	get_msg(*fd); -	return check_ctrl(DL_OK_ACK); -} - -/*=* send DL_BIND_REQ *=*/ -static int dl_bind(int fd, int sap, u_char *addr) -{ -	dl_bind_req_t *bind_req = (dl_bind_req_t *)ctl_area; -	dl_bind_ack_t *bind_ack = (dl_bind_ack_t *)ctl_area; -	bind_req->dl_primitive = DL_BIND_REQ; -	bind_req->dl_sap = sap; -	bind_req->dl_max_conind = 1; -	bind_req->dl_service_mode = DL_CLDLS; -	bind_req->dl_conn_mgmt = 0; -	bind_req->dl_xidtest_flg = 0; -	put_ctrl(fd, sizeof(dl_bind_req_t), 0); -	get_msg(fd); -	if (GOT_ERR == check_ctrl(DL_BIND_ACK)) { -		return GOT_ERR; -	} -	bcopy((u_char *)bind_ack + bind_ack->dl_addr_offset, addr, -		bind_ack->dl_addr_length); -	return 0; -} - -int FindEthNum(uchar *addr) -{               /* Need to use DLPI for HPUX */ -   /*See http://cplus.kompf.de/artikel/macaddr.html */ -	int fd; -	int ppa; -	u_char mac_addr[25]; -	char **dev; -	int i = 0; - -	for (dev = dlpi_dev; **dev != ''; ++dev) { -		for (ppa=0; ppa<10; ++ppa) { -			if (GOT_ERR != dl_open(*dev, ppa, &fd)) { -				if (GOT_ERR != dl_bind(fd, INSAP, mac_addr)) { -					// bcopy( mac_addr, addr, 6); -			i = ppa; -			if (memcmp(mac_addr,addr,MAC_LEN) == 0) { -			   memcpy(osmymac, addr, MAC_LEN); -					   return(ppa); -			} -				} -			} -			close(fd); -		} -	} -	return(i); -} -#else - -static char *get_ifreq_mac(struct ifreq *ifrq) -{ -	char *ptr; -#ifdef SOLARIS -	ptr = (char *)&ifrq->ifr_ifru.ifru_enaddr[0]; -#elif BSD -	ptr = (char *)&ifrq->ifr_ifru.ifru_addr.sa_data[0]; -#elif MACOS -	static uchar mactmp[MAC_LEN]; -	ptr = &mactmp[0]; -	MacSetInvalid(ptr); -#else -	ptr = (char *)&ifrq->ifr_hwaddr.sa_data[0]; -#endif -	return (ptr); -} - -extern int find_ifname(char *ifname);   /*see idiscover.c*/ - -int FindEthNum(uchar *macadrin) -{                     /*only used for Linux*/ -	struct ifreq ifr; -	int skfd; -	int nCurDevice; -	int devnum = -1; -	int devos = 0; -	uchar macadr[MAC_LEN]; -	uchar macsav[MAC_LEN]; -	uchar mactmp[MAC_LEN]; -	uchar ipsav[4]; -	char szDeviceName[ 16 ];    /* MAX_DEVICE_NAME_LENGTH + 1 */ -	uchar fipvalid = 0; -	int n; - -	memcpy(macadr,macadrin,MAC_LEN); -	if (fsharedMAC == 0 && vend_id == VENDOR_INTEL)  { -	/* Intel factory assigns them this way, so use that to compare */ -	macadr[MAC_LEN-1] -= 2; /*OS MAC = BMC MAC - 2*/ -	} -#ifdef DBG -	if (fdebug) { -		  uchar *pb; -		  pb = macadrin; -		  printf("input mac:%02x:%02x:%02x:%02x:%02x:%02x   " -				 "tmp mac:%02x:%02x:%02x:%02x:%02x:%02x\n",   -		pb[0],pb[1],pb[2],pb[3],pb[4],pb[5], -		macadr[0],macadr[1],macadr[2],macadr[3],macadr[4],macadr[5]); -	} -#endif -	 -	n = find_ifname(szDeviceName); -	if (n >= 0) { -	n = strlen_(szDeviceName); -	if (n < sizeof(ifpattn)) { -		   strcpy(ifpattn,szDeviceName); -		   ifpattn[n - 1] = 0;  /*truncate last digit*/ -	} -	if (fdebug)  -	   printf("found ifname %s, pattern %s\n",szDeviceName,ifpattn); -	} - -	if ( ( skfd = socket(AF_INET, SOCK_DGRAM, 0 ) ) < 0) { -	   if ( fdebug ) { -		  perror("socket"); -		  return devnum; -	   } -	} -		 -	for( nCurDevice = 0 ; -		 (nCurDevice < NUM_DEVICES_TO_CHECK) && (devnum == -1); -	 nCurDevice++ ) -	{ -		sprintf( szDeviceName, "%s%d", ifpattn, nCurDevice ); /*eth%d*/ -		memset((char *)&ifr,0,sizeof(ifr)); -		strcpy(ifr.ifr_name, szDeviceName ); -#ifdef SIOCGIFHWADDR -		if (ioctl(skfd, SIOCGIFHWADDR, &ifr) > 0) { -			if ( fdebug )  -			printf("FindEthNum: Could not get MAC address for %s\n", -				 szDeviceName); -		} else  -#endif -		{ -			uchar *pb; -			pb = (uchar *)get_ifreq_mac(&ifr); -#ifdef DBG -			if (fdebug) { -			printf("%s mac: %02x:%02x:%02x:%02x:%02x:%02x\n",   -				 szDeviceName, pb[0],pb[1],pb[2],pb[3],pb[4],pb[5]); -			} -#endif -			memcpy(macsav, pb, MAC_LEN); -			/* check if this device is configured for IP addr */ -			memset((char *)&ifr,0,sizeof(ifr)); -			strcpy(ifr.ifr_name, szDeviceName); -			ifr.ifr_addr.sa_family = AF_INET; -			if (ioctl(skfd, SIOCGIFADDR, &ifr) >= 0) { -			fipvalid = 1; -			memcpy(ipsav, &ifr.ifr_addr.sa_data[2], 4); -			} else fipvalid = 0; -			if (memcmp(macsav, macadr, MAC_LEN) == 0) { /*found match*/ -			devnum = nCurDevice; -				memcpy(osmymac, macsav, MAC_LEN); -			if (fipvalid) memcpy(osmyip, ipsav, 4); -			break; -			} -			if (nCurDevice == 0) {   /*set a default of eth0*/ -			devos = nCurDevice; -			memcpy(osmymac,macsav, MAC_LEN); -			if (fipvalid) memcpy(osmyip, ipsav, 4); -			} else if (fipvalid) {   /*check if NIC1 is eth1,2,3,...*/ -			memcpy(mactmp,osmymac,MAC_LEN); -			mactmp[MAC_LEN-1] -= 1; -			if (memcmp(mactmp,macsav,MAC_LEN) == 0) { -				devos = nCurDevice; -					memcpy(osmymac, macsav, MAC_LEN); -				memcpy(osmyip, ipsav, 4); -			} -			} -		} /*end else*/ -	} -	if (!fsetifn) { -	  if (devnum == -1) {  /*not found, use devos default*/ -	devnum = devos; -	sprintf( ifname, "%s%d", ifpattn, devnum ); /*eth%d*/ -	  } else {  /* match was found, devnum set */ -	fethfound = 1; -	strcpy(ifname, szDeviceName ); -	  } -	} -	close(skfd); -	if (fdebug)  /* show the local OS eth if and MAC */ -	printf("FindEth: OS %s IP=%d.%d.%d.%d MAC=%02x:%02x:%02x:%02x:%02x:%02x\n", -				ifname, osmyip[0], osmyip[1], osmyip[2], osmyip[3],  -		osmymac[0], osmymac[1], osmymac[2], osmymac[3],  -		osmymac[4], osmymac[5]); -	return(devnum); -} -#endif - -int show_channels(void) -{ -   int ret, rlen; -   uchar iData[2]; -   uchar rData[10]; -   uchar cc, mtype; -   int j; -   int rv = -1; - -   for (j = 1; j < MAXCHAN; j++) { -	  rlen = sizeof(rData); -	  iData[0] = (uchar)j; /*channel #*/ -	  memset(rData,0,9); /*initialize recv data*/ -	  ret = ipmi_cmd(GET_CHANNEL_INFO, iData, 1, rData, &rlen, &cc, fdebug); -	  if (rv != 0) rv = ret; -	  if (ret == 0xcc || cc == 0xcc) /* special case for ipmi_lan */ -		 continue; -	  if (ret != 0) { -		 if (fdebug) printf("get_chan_info rc = %x\n",ret); -		 break; -	  } -	  mtype = rData[1];  /* channel medium type */ -	  switch(mtype) { -	  case 4:   printf("channel[%d] type = lan\n",j); break; /*802.3 LAN type*/ -	  case 5:   printf("channel[%d] type = serial\n",j); break;  -	  case 7:   printf("channel[%d] type = pci_smbus\n",j); break;  -	  case 12:  printf("channel[%d] type = system_interface\n",j); break;  -	  default:  printf("channel[%d] type = other %d\n",j,mtype); break; -	  } -	  rv = 0; -   } /*end for j*/ -   return(rv); -} - -/* - * GetBmcEthDevice - * Attempt to auto-detect the BMC LAN channel and matching OS eth port. - * INPUT:  lan_parm = lan channel from user -L option, 0xFF if not specified - * OUTPUT: lan_ch is set to BMC LAN channel number - *         if success, returns index of OS eth port (0, 1, ...).  - *         if no lan channels found, returns -2. - *         if other error, returns -1. - */ -int GetBmcEthDevice(uchar lan_parm, uchar *pchan) -{ -		LAN_RECORD LanRecord; -		int devnum = -1; -		int ret; -		uchar bmcMacAddress[ MAC_LEN ];  /*MAC_LEN = 6*/ -		int rlen; -		uchar iData[2]; -		uchar rData[10]; -		uchar cc; -		int i = 0; -		int j, jstart, jend, jlan; -		uchar mtype; -		uchar *pb; -		int fchgmac; -		// int found = 0; - -		/* Find the LAN channel(s) via Channel Info */ -		if (lan_parm < MAXCHAN) {  /* try user-specified channel only */ -		lan_ch = lan_parm; -		jstart = lan_parm; -		jend = lan_parm+1;   -		} else { -		jstart = 1; -		jend = MAXCHAN;  -		} -		memset(bmcMacAddress,0xff,sizeof(bmcMacAddress)); /*initialize to invalid*/ -		for (j = jstart; j < jend; j++) { -		rlen = sizeof(rData); -		iData[0] = (uchar)j; /*channel #*/ -		memset(rData,0,9); /*initialize recv data*/ -		ret = ipmi_cmd(GET_CHANNEL_INFO, iData, 1, rData, &rlen, &cc, fdebug);  -		if (ret == 0xcc || cc == 0xcc) /* special case for ipmi_lan */ -			continue; -		if (ret != 0) { -			if (fdebug) printf("get_chan_info rc = %x\n",ret); -			break; -		} -		mtype = rData[1];  /* channel medium type */ -		if (mtype == 4) {  /* 802.3 LAN type*/ -			if (fdebug) printf("chan[%d] = lan\n",j); -			jlan = lan_ch;  /*save prev lan chan */ -			/* Get BMC MAC for this LAN channel. */ -			/* Note: BMC MAC may not be valid yet. */ -			lan_ch = (uchar)j; /*set lan channel for GetLanEntry*/ -			ret = GetLanEntry( 5 /*MAC_ADDRESS_LAN_PARAM*/,0, &LanRecord); -			if ( ret != 0 ) { -			   lan_ch = (uchar)jlan;  /*restore lan_ch*/ -			   printf( "GetBmcEthDevice: GetLanEntry failed\n" ); -			   return devnum; -			} else { -			  pb = &LanRecord.data[0]; -			  if (fdebug) printf("chan[%d] BMC MAC %x:%x:%x:%x:%x:%x\n",j, -					   pb[0], pb[1], pb[2], pb[3], pb[4], pb[5] ); -			  fchgmac = 0; -			  /* use the lowest valid lan channel MAC address */ -			  if (!MacIsValid(bmcMacAddress)) /* old MAC not valid*/ -				fchgmac = 1;  -			  else if (MacIsValid(pb) &&   /* new MAC is valid and*/ -				  (memcmp(bmcMacAddress,pb, sizeof(bmcMacAddress)) > 0)) -				fchgmac = 1;   /* new MAC lower */ -			  /* if no -L 3 and this is gcm, do not pick it. */ -			  if ((j == gcm_ch) && (lan_parm == PARM_INIT))  -				fchgmac = 0; -			  if (fchgmac) {    /* pick this channel & MAC */ -				 memcpy(bmcMacAddress,pb,sizeof(bmcMacAddress)); -				 lan_ch = (uchar)j; -			  } else lan_ch = (uchar)jlan; /*restore prev lan chan*/ -			}  -			i++;  /* i = num lan channels found */ -		} else if (mtype == 5) { /* serial type*/ -			if (fdebug) printf("chan[%d] = serial\n",j); -			ser_ch = (uchar)j;    /* set to last serial channel */ -		} else if (mtype == 7) {  /* PCI SMBus */ -			if (fdebug) printf("chan[%d] = pci_smbus\n",j); -		} else if (mtype == 12) { /* system interface */ -			if (fdebug) printf("chan[%d] = system_interface\n",j); -		} else if (mtype == 1) {  /* IPMB */ -			if (fdebug) printf("chan[%d] = IPMB\n",j); -		} else  /* other channel medium types, see IPMI 1.5 Table 6-3 */ -			if (fdebug) printf("chan[%d] = %d\n",j,mtype); -		} -		if (i == 0) return(-2);  /* no lan channels found */ -		if (fdebug) printf("lan_ch detected = %d\n",lan_ch); - -		/* This will work if the BMC MAC is shared with the OS */ -		/* Otherwise, wait until we get the eth dev from the gateway below */ -		devnum = FindEthNum(bmcMacAddress); -		if ( fdebug )  -		printf("GetBmcEthDevice: channel %d, %s%d\n",lan_ch,ifpattn,devnum); -	if (pchan != NULL) *pchan = lan_ch; -	return devnum; -} - -/* file_grep/findmatch - No longer used here, see ievents.c */ - -/*  - * Get_Mac - * This routine finds a MAC address from a given IP address. - * Usually for the Alert destination. - * It uses ARP cache to do this. - */ -#if defined(WIN32) -int Get_Mac(uchar *ipadr,uchar *macadr, char *nodname) -{ -	DWORD dwRetVal; -	IPAddr DestIp = 0; -	IPAddr SrcIp = 0;       /* default for src ip */ -	ULONG MacAddr[2];       /* for 6-byte hardware addresses */ -	ULONG PhysAddrLen = MAC_LEN;  /* default to length of six bytes */ -	BYTE *bPhysAddr; - -	if (!IpIsValid(ipadr)) { -	if (fdebug) printf("Get_Mac: invalid IP addr\n"); -	return 1; /*error*/ -	} -	memcpy(&DestIp, ipadr, 4); -	 -	/* invoke system ARP query */ -	dwRetVal = SendARP(DestIp, SrcIp, MacAddr, &PhysAddrLen); - -	if (dwRetVal == NO_ERROR)  -	{ /* no error - get the MAC */ -		bPhysAddr = (BYTE *) & MacAddr; -		if (PhysAddrLen) { -			memcpy(macadr, bPhysAddr, MAC_LEN); -		} else -			printf("Warning: SendArp completed successfully, but returned length=0\n"); -	} else if (dwRetVal == ERROR_GEN_FAILURE)  -	{ /* MAC not available in this network - get gateway MAC */  -		memcpy(macadr, rggwymac, MAC_LEN); -	} else  -	{ /* other errors */ -		printf("Error: SendArp failed with error: %d", dwRetVal); -		switch (dwRetVal) { -		case ERROR_INVALID_PARAMETER: -			printf(" (ERROR_INVALID_PARAMETER)\n"); -			break; -		case ERROR_INVALID_USER_BUFFER: -			printf(" (ERROR_INVALID_USER_BUFFER)\n"); -			break; -		case ERROR_BAD_NET_NAME: -			printf(" (ERROR_GEN_FAILURE)\n"); -			break; -		case ERROR_BUFFER_OVERFLOW: -			printf(" (ERROR_BUFFER_OVERFLOW)\n"); -			break; -		case ERROR_NOT_FOUND: -			printf(" (ERROR_NOT_FOUND)\n"); -			break; -		default: -			printf("\n"); -			break; -		} -		return 1; -	} -	return 0; -}  /* end Get_Mac() for WIN32*/ -#elif defined(SOLARIS) -int Get_Mac(uchar *ipadr,uchar *macadr, char *nodename) -{ -   FILE *fparp; -   char buff[1024];  -   /* char arpfile[] = "/proc/net/arp";  */ -   char alertfile[] = "/tmp/dest.arping"; -   char arping_cmd[128]; -   char *pb, *pm; -   int num, i; -   int foundit = 0; -   int ret = 0; - -   if (IpIsValid(ipadr)) {  /* if valid IP address */ -	  sprintf(arping_cmd, -		  "ping %d.%d.%d.%d >/dev/null; arp -a -n |grep %d.%d.%d.%d  >%s\n", -			  ipadr[0],ipadr[1],ipadr[2],ipadr[3], -			  ipadr[0],ipadr[1],ipadr[2],ipadr[3], alertfile); -   } else if (nodename != NULL) {  /*if valid nodename */ -	  sprintf(arping_cmd, -		  "ping %s >/dev/null; arp -a |grep %s  >%s\n", -		nodename,nodename,alertfile); -   } else ret = -1; - -   if (ret == 0) {   /* if valid IP address */ -	  /* make sure the destination is in the arp cache */ -	  if (fdebug) printf("%s", arping_cmd); -	  system(arping_cmd); - -	  fparp = fopen(alertfile,"r"); -	  if (fparp == NULL) { -		  fprintf(stdout,"Get_Mac: Cannot open %s, errno = %d\n", -			alertfile,get_errno()); -	  ret = -1; -	   } else { -	 /* sample output: */ -	 /* e1000g0 cooper9     255.255.255.255 o   00:07:e9:06:55:c8 */ -		 while (fgets(buff, 1023, fparp)) { -	   /* should only run through loop once */ -	   num = strcspn(buff," \t");    /* skip 1st word ("e1000g0") */ -	   i = strspn(&buff[num]," \t"); /* skip whitespace */ -	   pb = &buff[num+i]; -	   num = strcspn(pb," \t");    /* skip 2nd word (nodename/IP) */ -	   i = strspn(&pb[num]," \t"); /* skip whitespace */ -	   pb += (num+i); -	   pm = &pb[25]; /* Now pb[25] has the MAC address */ -	   {   /*validate new address?*/ -		  if (fdebug) printf("Get_Mac: mac=%s\n",pm); -		  foundit = 1; -		  if (!MacIsValid(macadr)) atomac(macadr,pm); -		  break; -	   } -		 } /*end while*/ -		 fclose(fparp); -	   }  /*end else file opened*/ -   }  /*endif valid IP */ - -   if (foundit == 0) {  /* no errors, but no mac reply */ -	  if (MacIsValid(rggwymac) && !MacIsValid(macadr))   -	 /* this is useful if the ipadr is not in the local subnet */ -		 memcpy(macadr,rggwymac,6); /* get to it from the default gateway */ -   } -   return(ret); -}  /*end Get_Mac for Solaris*/ -#elif defined(BSD) -int Get_Mac(uchar *ipadr,uchar *macadr, char *nodename) -{ -   FILE *fparp; -   char buff[1024];  -   /* char arpfile[] = "/proc/net/arp";  */ -   char alertfile[] = "/tmp/dest.arping"; -   char arping_cmd[128]; -   char *pb, *pm; -   int num, i, j; -   int foundit = 0; -   int ret = 0; - -   if (IpIsValid(ipadr)) {  /* if valid IP address */ -	  sprintf(arping_cmd, -	   "ping -c2 %d.%d.%d.%d >/dev/null; arp -a -n |grep %d.%d.%d.%d >%s\n", -			  ipadr[0],ipadr[1],ipadr[2],ipadr[3], -			  ipadr[0],ipadr[1],ipadr[2],ipadr[3], alertfile); -   } else if (nodename != NULL) {  /*if valid nodename */ -	  sprintf(arping_cmd, -		  "ping -c2 %s >/dev/null; arp -a |grep %s  >%s\n", -		nodename,nodename,alertfile); -   } else ret = -1; - -   if (ret == 0) {   /* if valid IP address */ -	  /* make sure the destination is in the arp cache */ -	  if (fdebug) printf("%s", arping_cmd); -	  system(arping_cmd); - -	  fparp = fopen(alertfile,"r"); -	  if (fparp == NULL) { -		  fprintf(stdout,"Get_Mac: Cannot open %s, errno = %d\n", -			alertfile,get_errno()); -	  ret = -1; -	   } else { -	 /* sample output of arp -a -n: */ -	 /* ? (192.168.1.200) at 00:0e:0c:e5:df:65 on em0 [ethernet] */ -	 /* sample output of arp -a: */ -	 /* telcoserv (192.168.1.200) at 00:0e:0c:e5:df:65 on em0 [ethernet] */ -		 while (fgets(buff, 1023, fparp)) { -	   /* should only run through loop once */ -	   pb = &buff[0]; -	   for (j = 0; j < 3; j++) { /* skip 3 words */ -		  num = strcspn(pb," \t");    /* skip jth word */ -		  i = strspn(&pb[num]," \t"); /* skip whitespace */ -		  pb += (num+i); -	   } -	   pm = &pb[0]; /* Now pb[0] has the MAC address */ -	   {   /* no need to validate new address*/ -		  if (fdebug) printf("Get_Mac: mac=%s\n",pm); -		  foundit = 1; -		  if (!MacIsValid(macadr)) atomac(macadr,pm); -		  break; -	   } -		 } /*end while*/ -		 fclose(fparp); -	   }  /*end else file opened*/ -   }  /*endif valid IP */ - -   if (foundit == 0) {  /* no errors, but no mac reply */ -	  if (MacIsValid(rggwymac) && !MacIsValid(macadr))   -	 /* this is useful if the ipadr is not in the local subnet */ -		 memcpy(macadr,rggwymac,6); /* get to it from the default gateway */ -   } -   return(ret); -}  /*end Get_Mac for BSD */ -#else -int Get_Mac(uchar *ipadr,uchar *macadr, char *nodename) -{   /* Get_Mac for Linux */ -   FILE *fparp; -   char buff[1024];  -   /* char arpfile[] = "/proc/net/arp";  */ -   char alertfile[] = "/tmp/dest.arping"; -   char arping_cmd[128]; -   char *pb, *pm, *px; -   int num, i; -   int foundit = 0; -   int ret = 0; -   char *_ifname; - -   if (strcmp(ifname,"gcm") == 0) _ifname = ifname0; /*see gcm_ch instead*/ -   else _ifname = ifname; - -   /* Get a MAC address for a given IP address or nodename */ -   if (IpIsValid(ipadr)) {  /* if valid IP address */ -	  sprintf(arping_cmd, -		  "arping -I %s -c 2 %d.%d.%d.%d |grep reply |tail -n1 >%s\n", -			  _ifname,ipadr[0],ipadr[1],ipadr[2],ipadr[3],alertfile); -   } else if (nodename != NULL) {  /*if valid nodename */ -	  sprintf(arping_cmd, -		  "arping -I %s -c 2 %s |grep reply |tail -n1 >%s\n", -			  _ifname,nodename,alertfile); -   } else ret = -1; - -   if (ret == 0) {   /* if valid IP address */ -	  /* make sure the destination is in the arp cache */ -	  if (fdebug) printf("%s", arping_cmd); -	  ret = system(arping_cmd); - -	  fparp = fopen(alertfile,"r"); -	  if (fparp == NULL) { -		 fprintf(stdout,"Get_Mac: Cannot open %s, errno = %d\n", -			alertfile,get_errno()); -	 ret = -1; -	   } else { -	 ret = 0; -		 while (fgets(buff, 1023, fparp)) { -	   /* should only run through loop once */ -	   num = strcspn(buff," \t");    /* skip 1st word ("Unicast") */ -	   i = strspn(&buff[num]," \t"); -	   pb = &buff[num+i]; -	   if (strncmp(pb,"reply",5) == 0) {  /* valid output */ -		  /* Find the ip address */ -		  pb += 6 + 5;         /* skip "reply from " */ -		  num = strcspn(pb," \t"); -		  pb[num] = 0; -		  if (fdebug) printf("Get_Mac: ip=%s\n",pb); -		  /* IP address should already match input param */ -			  if (!IpIsValid(ipadr))  /* had nodname only*/ -			   atoip(ipadr,pb);   /* fill in ipadr */ -		  /* Now find the mac address */ -		  pm = strchr(&pb[num+1],'['); -		  if (pm == NULL) pm = &pb[num+2];  /* just in case */ -		  pm++; -		  px = strchr(pm,']'); -		  if (px == NULL) px = pm + 17;    /* just in case */ -		  px[0] = 0; -		  if (fdebug) printf("Get_Mac: mac=%s\n",pm); -		  foundit = 1; -		  if (!MacIsValid(macadr)) atomac(macadr,pm); -		  break; -	   } -		 } /*end while*/ -		 fclose(fparp); -	   }  /*end else file opened*/ -   }  /*endif valid IP */ - -   if (foundit == 0) {  /* no errors, but no mac reply */ -	  if (MacIsValid(rggwymac) && !MacIsValid(macadr))   -	 /* this is useful if the ipadr is not in the local subnet */ -		 memcpy(macadr,rggwymac,6); /* get to it from the default gateway */ -   } -   return(ret); -}  /* end Get_Mac() for Linux*/ -#endif - -#ifdef WIN32 -/* - * Set subnet mask based on current IP address (Windows). - */ -int SetSubnetMask() { -	PMIB_IPADDRTABLE pIPAddrTable; -	unsigned int i; -	DWORD dwSize = 0, dwRetVal; -	LPVOID lpMsgBuf; - -	pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof( MIB_IPADDRTABLE) ); - -	if ( pIPAddrTable ) { -		// Make an initial call to GetIpAddrTable to get the -		// necessary size into the dwSize variable -		if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { -			free( pIPAddrTable ); -			pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); -		} -	} else -		printf("Memory allocation failed.\n"); - -	if ( pIPAddrTable ) { -		// Make a second call to GetIpAddrTable to get the -		// actual data we want -		if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) == NO_ERROR ) {  -			for(i = 0; i < pIPAddrTable->dwNumEntries; ++i) { -				if(memcmp(&(pIPAddrTable->table[i].dwAddr), rgmyip, 4) == 0) { -					memcpy(rgsubnet, &(pIPAddrTable->table[i].dwMask), 4); -					free( pIPAddrTable ); -					return 1;      -				} -			} -		} else { -			if (FormatMessage(  -				FORMAT_MESSAGE_ALLOCATE_BUFFER |  -				FORMAT_MESSAGE_FROM_SYSTEM |  -				FORMAT_MESSAGE_IGNORE_INSERTS, -				NULL, -				dwRetVal, -				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language -				(LPTSTR) &lpMsgBuf, -				0, -				NULL )) { -				printf("\tError: %s", lpMsgBuf); -			} - -			printf("Call to GetIpAddrTable failed.\n"); -		} -	} - -	if ( pIPAddrTable ) -		free( pIPAddrTable ); - -	return 0; -} - -/* - * Extract gateway address from routing table (Windows). - */ -int SetDefaultGateway() { -	PMIB_IPFORWARDTABLE pIpForwardTable; -	DWORD dwRetVal, dwSize; - -	unsigned int nord_mask; -	unsigned int nord_ip; -	unsigned int nord_net; - -	unsigned int i; - -	nord_mask = *((unsigned int *)rgsubnet); -	nord_ip = *((unsigned int *)rgmyip); - -	nord_net = nord_ip & nord_mask; - -	pIpForwardTable = (MIB_IPFORWARDTABLE*) malloc(sizeof(MIB_IPFORWARDTABLE)); -	if (pIpForwardTable == NULL) { -		printf("Error allocating memory\n"); -		return 0; -	} - -	dwSize = 0; -	if (GetIpForwardTable(pIpForwardTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { -		free(pIpForwardTable); -		pIpForwardTable = (MIB_IPFORWARDTABLE*) malloc(dwSize); -		if (pIpForwardTable == NULL) { -			printf("Error allocating memory\n"); -			return 0; -		} -	} - -	/*  -	 * Note that the IPv4 addresses returned in  -	 * GetIpForwardTable entries are in network byte order  -	 */ -	if ((dwRetVal = GetIpForwardTable(pIpForwardTable, &dwSize, 0)) == NO_ERROR) { -		for (i = 0; i < (int) pIpForwardTable->dwNumEntries; i++) { -			unsigned int gwaddr = pIpForwardTable->table[i].dwForwardNextHop; -			if(nord_net == (gwaddr & nord_mask) && nord_ip != gwaddr)  -			{ /* searching for gateways from our network with different address than ours */ -				memcpy(rggwyip, &gwaddr, 4); -				return 0; -			} -		} -		free(pIpForwardTable); -		return 1; -	} -	else { -		printf("\tGetIpForwardTable failed.\n"); -		free(pIpForwardTable); -		return 0; -	} -	 -} -/*endif  WIN32*/ -#endif - -/*  - * Get_IPMac_Addr - * This routine finds the IP and MAC for the local interface,  - * the default gateway, and SNMP alert destination from the  - * BMC and OS information. - * - * Linux snmpd.conf locations (see ipmiutil.spec): - * RedHat, MontaVista:  /etc/snmp/snmpd.conf - * SuSE SLES 8:   /etc/ucdsnmpd.conf - * SuSE SLES 9:   /etc/snmpd.conf - */ -#ifdef WIN32 -int Get_IPMac_Addr() -{  				/*for Windows*/ -   char ipstr[]  = "IP Address"; -   char macstr[] = "Physical Address"; -   char gwystr[] = "Default Gateway"; -   char substr[] = "Subnet Mask"; -   int found = 0; -   char fgetmac; - -	if (IpIsValid(rgmyip))  -	{ /* user-specified ip, get mac */ -		if (fdebug) printf("User IP was specified\n"); -		if (!MacIsValid(rgmymac)) -		{  /* no user-specified MAC, get it from IP */ -			if (fdebug) printf("No user MAC specified\n"); -			if(!GetLocalMACByIP()) -			{ /* couldn't get MAC from IP, get old one */ -				if (fdebug) printf("No MAC from IP, use old\n"); -				if(IpIsValid(bmcmyip) && MacIsValid(bmcmymac))  -				{ -					printf("Using current BMC MAC %02x:%02x:%02x:%02x:%02x:%02x\n", -							bmcmymac[0], bmcmymac[1], -							bmcmymac[2], bmcmymac[3], -							bmcmymac[4], bmcmymac[5]); -					memcpy(rgmymac,bmcmymac,MAC_LEN); -				} else { -					printf("Failed to obtain valid MAC\n"); -				} -			} else {  -				printf("Using adapter MAC %02x:%02x:%02x:%02x:%02x:%02x\n", -						rgmymac[0], rgmymac[1], -						rgmymac[2], rgmymac[3], -						rgmymac[4], rgmymac[5]); -			} -		} else { /* user MAC available */ -			printf("Using user MAC %02x:%02x:%02x:%02x:%02x:%02x\n", -					rgmymac[0], rgmymac[1], -							rgmymac[2], rgmymac[3], -							rgmymac[4], rgmymac[5]); -		} -	} else { /* no user-specified IP */ -		if (fdebug) printf("No user IP specified\n"); -		if (!MacIsValid(rgmymac)) -		{  /* no user-specified MAC, get it from interface */ -			if(!GetLocalDataByIface())  -			{  /* use existing MAC an IP */ -				printf("Using current BMC IP %d.%d.%d.%d\n", -						bmcmyip[0], bmcmyip[1], -						bmcmyip[2], bmcmyip[3]); -				memcpy(rgmyip,bmcmyip,4); -				printf("Using current BMC MAC %02x:%02x:%02x:%02x:%02x:%02x\n", -						bmcmymac[0], bmcmymac[1], -						bmcmymac[2], bmcmymac[3], -						bmcmymac[4], bmcmymac[5]); -				memcpy(rgmymac,bmcmymac,MAC_LEN); -				 -			} -		} else { /* user-specified MAC */ -			if(!GetLocalIPByMAC(rgmymac)) -			{ /* use existing MAC and IP */ -				printf("Using current BMC IP %d.%d.%d.%d\n", -						bmcmyip[0], bmcmyip[1], -						bmcmyip[2], bmcmyip[3]); -				memcpy(rgmyip,bmcmyip,4); -				printf("Using current BMC MAC %02x:%02x:%02x:%02x:%02x:%02x\n", -						bmcmymac[0], bmcmymac[1], -						bmcmymac[2], bmcmymac[3], -						bmcmymac[4], bmcmymac[5]); -				memcpy(rgmymac,bmcmymac,MAC_LEN); -			} -		} -	} - -	if (rghostname[0] == 0) {  /*hostname not specified*/ -	   if (!fipmilan) -		  gethostname(rghostname,sizeof(rghostname)); -	} -   if (fdebug)  /* show the local OS eth if and MAC */ -	   printf("OS %s IP=%d.%d.%d.%d %s MAC=%02x:%02x:%02x:%02x:%02x:%02x used for arp\n", -				ifname, osmyip[0],osmyip[1],osmyip[2],osmyip[3], rghostname, -		osmymac[0], osmymac[1], osmymac[2], osmymac[3],  -		osmymac[4], osmymac[5]); - -	if(!SubnetIsValid(rgsubnet)) { -		SetSubnetMask(); -	} -	if (!IpIsValid(rggwyip)) {  /* if gwy ip not user-specified */ -		SetDefaultGateway(); -	} - -	if (lan_ch == gcm_ch) { -	if (SubnetIsSame(rgmyip,rggwyip,rgsubnet)) fgetmac = 1; -	else fgetmac = 0; -	} else fgetmac = 1; - -	if (fgetmac) { -	  if (IpIsValid(rggwyip) && !MacIsValid(rggwymac)) /*gwy mac not specified*/ -		Get_Mac(rggwyip,rggwymac,NULL); - -	  if (IpIsValid(rggwy2ip) && !MacIsValid(rggwy2mac)) /*gwy2 mac not valid*/ -		Get_Mac(rggwy2ip,rggwy2mac,NULL); -	} - -   return(0); -} /* end Get_IPMac_Addr for Windows */ - -#elif defined(HPUX) -int Get_IPMac_Addr() -{  				/*for HP-UX*/ -	return(-1); -} -#else -int Get_IPMac_Addr() -{  				/*for Linux*/ -#if defined(SOLARIS)  -   char rtfile[] = "/tmp/route";  -   char snmpfile[] = "/etc/snmp/conf/snmpd.conf"; -#elif defined(BSD) -   char rtfile[] = "/tmp/route";  -   char snmpfile[] = "/etc/snmpd.config"; -#else -   char rtfile[] = "/proc/net/route"; -   char snmpfile[] = "/etc/snmp/snmpd.conf"; -#endif -   // char alertfile[] = "/tmp/alert.arping"; -   // FILE *fparp; -   FILE *fprt; -   int fd = -1; -   int skfd;  -   uchar *pc; -   int rc = 0; -   int i,j; -   uchar bnetadr[4]; -   uchar bgateadr[4]; -   char gate_addr[128];  -   char iface[16];  -   char defcommunity[19] = "public";  -   char buff[1024];  -   char alertname[60]; -   int num, nmatch; -   struct ifreq ifr; -   char *_ifname; -   char fgetmac; - -   /* Get the IP address and associated MAC address specified. */ -   /* Local for ethN; Default Gateway; Alert Destination */ - -   /* Get the default gateway IP */ -#if defined(SOLARIS) || defined(BSD) -   char rtcmd[80]; -   sprintf(rtcmd,"netstat -r -n |grep default |awk '{ print $2 }' >%s",rtfile); -   system(rtcmd); -   /* use rtfile output from netstat -r, see also /etc/defaultroute */ -   fprt = fopen(rtfile,"r"); -   if (fprt == NULL) { -	  fprintf(stdout,"netstat: Cannot open %s, errno = %d\n",rtfile,get_errno()); -   } else { -	  while (fgets(buff, 1023, fprt)) { -	  if ((buff[0] > '0') && (buff[0] <= '9')) { /*valid*/ -		atoip(bgateadr,buff);  -		if (fdebug) -		   printf("default gateway: %s, %d.%d.%d.%d %s\n",buff, -				   bgateadr[0], bgateadr[1], bgateadr[2], bgateadr[3],ifname); -		if (!IpIsValid(rggwyip))   /* if not user-specified */ -		   memcpy(rggwyip,bgateadr,4); -			break; -	  } -	  } -	  fclose(fprt); -   }  /*end-else good open */ -#else -   /* cat /proc/net/route and save Gwy if Dest == 0 and Gateway != 0 */ -   fprt = fopen(rtfile,"r"); -   if (fprt == NULL) { -	  fprintf(stdout,"route: Cannot open %s, errno = %d\n",rtfile,get_errno()); -   } else { -	  char rtfmt[]  = "%16s %128s %128s %X %d %d %d %128s %d %d %d\n"; -	  int  iflags, refcnt, use, metric, mss, window, irtt; -	  char mask_addr[128], net_addr[128]; -	  uint *pnet;   -	  uint *pgate; - -	  pnet = (uint *)&bnetadr[0]; -	  pgate = (uint *)&bgateadr[0]; -	  while (fgets(buff, 1023, fprt)) { -		num = sscanf(buff, rtfmt, -					 iface, net_addr, gate_addr, -					 &iflags, &refcnt, &use, &metric, mask_addr, -					 &mss, &window, &irtt);  -		if (num < 10 || !(iflags & RTF_UP)) -			continue; - -	j = 6; -	for (i = 0; i < 4; i ++) { -			bnetadr[i] = htoi(&net_addr[j]); -			bgateadr[i] = htoi(&gate_addr[j]); -		j -= 2; -		} -		if ((*pnet == 0) && (*pgate != 0)) {  /* found default gateway */ -		if (fdebug) -		   printf("default gateway: %s, %d.%d.%d.%d %s\n",gate_addr, -				   bgateadr[0], bgateadr[1], bgateadr[2], bgateadr[3],iface); -		if (!IpIsValid(rggwyip))   /* if not user-specified */ -		   memcpy(rggwyip,bgateadr,4); -			_ifname = iface;  /*use this iface for gwy mac */ -			if (!fsetifn) strncpy(ifname,iface,16);  -			break; -	} -	  } /*end while*/ -	  fclose(fprt); -   }  /*end-else good open */ -#endif - -   /* Create a channel to the NET kernel. */ -   if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { -		perror("socket"); -		return(-3); -   } - -   /* Find a valid local BMC MAC Address */ -   if (lan_ch == gcm_ch) { -	   /* GCM has its own unique mac address */ -	   if (!MacIsValid(rgmymac)) { -		  if (MacIsValid(bmcmymac)) { -			memcpy(rgmymac,bmcmymac,MAC_LEN); /*use existing*/ -		  } else {   /*error*/ -		printf("invalid MAC address for gcm\n"); -		  } -	   } /*else use rgmymac if specified*/ -	   _ifname = iface;  /*use the iface from gwy (e.g. eth0) */ -	   fsharedMAC = 0;   /*gcm has separate NIC, separate MAC*/ - -	   // fd = -1; -	   fd = skfd;   // get_socket_for_af(AF_INET) below; -   } else {   /*else not gcm*/ -	   if (!fsetifn && !fethfound) {  /*do not have ifname yet*/ -		   i = FindEthNum(bmcmymac); -		   if (i >= 0) sprintf(ifname,"%s%d",ifpattn,i); -	   } -	   ifr.ifr_addr.sa_family = AF_INET; -	   if (fdebug) printf("getipmac: ifname=%s\n",ifname); -	   _ifname = ifname; -	   strcpy(ifr.ifr_name, _ifname); - -#ifdef SIOCGIFHWADDR -	   /* Get the local if HWADDR (MAC Address) from OS */ -	   if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) { -	   if (fdebug) -		printf("ioctl(SIOCGIFHWADDR,%s) error, errno = %d\n",_ifname,get_errno()); -	   } else memcpy(osmymac,get_ifreq_mac(&ifr),MAC_LEN); /*OS mac*/ -#endif -	   -	   if (memcmp(bmcmymac,osmymac,MAC_LEN) == 0) { -	   /* osmymac and ifname were set above by FindEthNum */ -	   printf("\tBMC shares IP/MAC with OS NIC %s\n",_ifname); -	   fsharedMAC = 1; -	   } /* else fsharedMAC = 0; */ - -	   if (fsharedMAC == 0) {  /* then BMC has separate MAC */ -		  if (!MacIsValid(rgmymac) && MacIsValid(bmcmymac))  -		  memcpy(rgmymac,bmcmymac,MAC_LEN); /*use existing*/ -	   } else {  /* else OS & BMC share a MAC */ -		  /* Use the local if HWADDR (MAC Address) from OS */ -	  if (!MacIsValid(rgmymac)) {  /* if not user-specified */ -			if (MacIsValid(bmcmymac))   -				 memcpy(rgmymac,bmcmymac,MAC_LEN); /*use existing*/ -			else memcpy(rgmymac,osmymac,MAC_LEN); /*use OS mac*/ -	  } -	   } -	   fd = skfd;   // get_socket_for_af(AF_INET) below; -   }  - -   if (fd >= 0) {   /* if valid fd, find OS IP */ -		strcpy(ifr.ifr_name, _ifname); -		ifr.ifr_addr.sa_family = AF_INET; -		/* Get the IFADDR (IP Address) from OS */ -		if (ioctl(fd, SIOCGIFADDR, &ifr) < 0) { -		int err; -		err = get_errno(); -		/* errno 99 here means that eth0 is not enabled/up/defined. */ -			if (err == 99)  -		   printf("ioctl(SIOCGIFADDR) error, %s not enabled\n",_ifname); -			else if (fdebug)  -			  printf("ioctl(SIOCGIFADDR,%s) error, errno=%d\n",_ifname,err); -	} else {  /* got the local OS IP successfully */ -		pc = (uchar *)&ifr.ifr_addr.sa_data[2]; -		if (fdebug) -		  printf("%s addr = %d.%d.%d.%d\n",_ifname,pc[0],pc[1],pc[2],pc[3]); -			memcpy(osmyip, pc, 4);    -		if (!IpIsValid(rgmyip) && (fsharedMAC==1)) /*not specified, shared*/ -			   memcpy(rgmyip, osmyip, 4);    - -		/* get the local OS netmask */ -			strcpy(ifr.ifr_name, _ifname); -			if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0) { -		if (fdebug) -			  printf("ioctl(SIOCGIFNETMASK) error, errno=%d\n",get_errno()); -		/* if leave invalid, will use default rgsubnet */ -			} else {              // sizeof(struct sockaddr) -		   pc = (uchar *)&ifr.ifr_netmask.sa_data[2]; -		   if (fdebug) -			  printf("subnet = %d.%d.%d.%d \n", pc[0],pc[1],pc[2],pc[3]); -			   memcpy(ossubnet, pc, 4);  -			   if (!SubnetIsValid(rgsubnet) && fsharedMAC) /*not specified*/ -		  memcpy(rgsubnet, pc, 4); -		} - -#ifdef SIOCGIFHWADDR -			/* Get the localhost OS HWADDR (MAC Address) */ -			if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) { -		   if (fdebug) -		  printf("ioctl(SIOCGIFHWADDR,%s) error, errno = %d\n", -			 _ifname,get_errno()); -		} else memcpy(osmymac,get_ifreq_mac(&ifr),MAC_LEN); /*OS mac*/ -#endif -	} -   } -   close(skfd);  /* done, close the socket */ - -   if (rghostname[0] == 0) {  /*hostname not specified*/ -	   if (!fipmilan) -		  gethostname(rghostname,sizeof(rghostname)); -   } -   if (fdebug)  /* show the local OS eth if and MAC */ -	   printf("OS %s IP=%d.%d.%d.%d %s MAC=%02x:%02x:%02x:%02x:%02x:%02x used for arp\n", -				_ifname, osmyip[0],osmyip[1],osmyip[2],osmyip[3], rghostname, -		osmymac[0], osmymac[1], osmymac[2], osmymac[3],  -		osmymac[4], osmymac[5]); - -   if (!IpIsValid(rgmyip) && IpIsValid(bmcmyip)) { -	   /* If no user-specified IP and there is a valid IP already in the  -		* BMC LAN configuration, use the existing BMC LAN IP.  */ -	   memcpy(rgmyip,bmcmyip,4); -	   if (fdebug) printf("Using current IP %d.%d.%d.%d\n", -				bmcmyip[0], bmcmyip[1], -				bmcmyip[2], bmcmyip[3]); -   } - -   /* Get the default gateway MAC */ -   if (lan_ch == gcm_ch) { -	if (SubnetIsSame(osmyip,rggwyip,ossubnet)) fgetmac = 1; -	else {  /* gateway is not on the same subnet as RMM/GCM */ -	   fgetmac = 0; /*don't try to get mac if not the same subnet*/ -	   if ((fset_ip & GWYIP) == 0) memset(rggwyip,0,4); -	} -   } else fgetmac = 1; -   if (fgetmac && IpIsValid(rggwyip) && !MacIsValid(rggwymac))  -		Get_Mac(rggwyip,rggwymac,NULL); /*gwy mac not specified, so get mac*/ - -   /* Get the Alert Destination IP */ -   /* By default, attempt to obtain this from /etc/snmp/snmpd.conf. */ -   /* cat /etc/snmp/snmpd.conf | grep trapsink |tail -n1 | cut -f2 -d' ' */ -   alertname[0] = 0;  /* default to null string */ -   fprt = fopen(snmpfile,"r"); -   if (fprt == NULL) { -	  printf("snmp: Cannot open %s, errno = %d\n",snmpfile,get_errno()); -   } else { -	  // char snmpfmt[] = "%20s %60s\n"; -	  // char *keywd, *value; -	  while (fgets(buff, 1023, fprt)) { -	/* parse each line */ -	if (buff[0] == '#') continue;  /*skip comment lines*/ -	/* skip leading whitespace here */ -	j = strspn(&buff[0]," \t"); -	if (strncmp(&buff[j],"com2sec",7) == 0) {  /* found community line */ -	   /* usu like this: "com2sec demouser default  public" */ -	   i = j + 7; -	   for (j = 0; j < 3; j++) { -		 num = strspn(&buff[i]," \t"); -		 i += num; -		 num = strcspn(&buff[i]," \t\r\n"); -		 if (j < 2) i += num; -	   } -	   buff[i+num] = 0; -	   if (fsetcommunity == 0) {  /* if not user-specified */ -		  strcpy(rgcommunity,&buff[i]); -		  strcpy(defcommunity,&buff[i]); -	   } -	} -#ifdef BSD -	if (strncmp(&buff[j],"traphost :=",11) == 0) nmatch = 11; -	else nmatch = 0; -#else -	if (strncmp(&buff[j],"trapsink",8) == 0) nmatch = 8; -	else if (strncmp(&buff[j],"trap2sink",9) == 0) nmatch = 9; -	else nmatch = 0; -#endif -	if (nmatch > 0) { /* found trapsink line match */ -	   if (fdebug) printf("%s: %s",snmpfile,&buff[j]); -	   num = strspn(&buff[j+nmatch]," \t"); -	   i = j + nmatch + num; -	   if (buff[i] == '`') continue; -	   num = strcspn(&buff[i]," \t\r\n"); -	   strncpy(alertname,&buff[i],num);   /* save alert destination */ -	   alertname[num] = 0; -	   i += num; -	   num = strspn(&buff[i]," \t"); /*skip whitespace*/ -	   i += num; -	   num = strcspn(&buff[i]," \t\r\n");  /*span next word*/ -	   if (num != 0) {  /* there is another word, that is community */ -		  if (fsetcommunity == 0) {  /* if not user-specified */ -			 strncpy(rgcommunity,&buff[i],num); /* save community */ -		 rgcommunity[num] = 0; -		 } -	   } else {  /*have trapsink node with no community*/ -		  /* use previously discovered default community from above */ -		  strcpy(rgcommunity,defcommunity); -	   } -	   /* dont break, keep looking, use the last one */ -	} -	  } /*end while*/ -	  fclose(fprt); -	  if (fdebug)  -	printf("snmp alertname=%s community=%s\n",alertname,rgcommunity); -   }  /*end else snmpfile*/ -    -   /* Get the Alert Destination MAC from the alertname. */ -   if (alertname[0] != 0) { -#ifdef TEST -	  char arping_cmd[128]; -	  char *pb, *pm, *px; -	  int num, i; -	  if (fdebug) printf("alert %s ip=%d.%d.%d.%d osip=%d.%d.%d.%d " -			 "mac=%02x:%02x:%02x:%02x:%02x:%02x " -			 "osmac=%02x:%02x:%02x:%02x:%02x:%02x\n", -		alertname,  -		rgdestip[0], rgdestip[1], rgdestip[2], rgdestip[3], -		osmyip[0], osmyip[1], osmyip[2], osmyip[3], -		rgdestmac[0], rgdestmac[1], rgdestmac[2], rgdestmac[3],  -		rgdestmac[4], rgdestmac[5], -		osmymac[0], osmymac[1], osmymac[2], osmymac[3],  -		osmymac[4], osmymac[5]); -#endif -	  if (!IpIsValid(rgdestip)) {    /* if not user-specified with -A */ -	if (IpIsValid(bmcdestip)) {  /* use existing if valid */ -			memcpy(rgdestip,bmcdestip,4); -		if (MacIsValid(bmcdestmac)) -		   memcpy(rgdestmac,bmcdestmac,MAC_LEN); -	}  -	else if ((strncmp(alertname,"localhost",9) == 0) )  -	{   /* snmpd.conf = localhost (self) is the SNMP alert destination */ -	  if (IpIsValid(osmyip)) -		memcpy(rgdestip,osmyip,4); -	  if (!MacIsValid(rgdestmac)) {   /* if not user-specified */ -		// Get_Mac(rgdestip,rgdestmac,alertname);  (wont work for local) -		memcpy(rgdestmac,osmymac,MAC_LEN); -	  } -		} /*endif local */ -	  } -	  if (!MacIsValid(rgdestmac))    /* if MAC not vaild or user-specified */ -	  { -		 /* Use arping to get MAC from alertname or IP */ -	 Get_Mac(rgdestip,rgdestmac,alertname); -	  }  -   }  /*endif have alertname*/ - -   return(rc); -} /* end Get_IPMac_Addr */ -#endif - -int ShowChanAcc(uchar bchan) -{ -	LAN_RECORD LanRecord; -	int ret = 0; -	uchar access; -	char *pstr; -	uchar pb0, pb1; - -	if (bchan == lan_ch) pstr = "lan"; -	else if (bchan == ser_ch) pstr = "ser"; -	else pstr = "?"; -	ret = GetChanAcc(bchan, 0x40, &LanRecord); -	if (fdebug) -		 printf("  GetChanAcc(%d), ret = %d, data = %02x %02x\n", -			bchan,ret, LanRecord.data[0], LanRecord.data[1]); -	pb0 = LanRecord.data[0]; -	pb1 = LanRecord.data[1]; -	if (fcanonical) -	  printf("Channel %d Access Mode %s%c ",bchan,pspace3,bdelim); -	else -	  printf("Channel(%d=%s) Access Mode: %02x %02x : ",bchan,pstr,pb0,pb1); -	access = pb0; -	switch (access & 0x03) { -		 case 0: printf("Disabled, ");     break; -		 case 1: printf("Pre-Boot, ");     break; -		 case 2: printf("Always Avail, "); break; -		 case 3: printf("Shared, ");       break; -		 } -	if (access & 0x20) printf("PEF Alerts Disabled\n"); /*0*/ -	else printf("PEF Alerts Enabled\n");   /*1*/ -	return(ret); -} - -static int GetSessionInfo(uchar *rData, int sz) -{ -   int rv, rlen; -   uchar ccode; -   uchar iData[5]; - -   iData[0] = 0x00;  /*get data for this session*/ -   rlen = sz; -   rv = ipmi_cmdraw(CMD_GET_SESSION_INFO,NETFN_APP, BMC_SA,PUBLIC_BUS,BMC_LUN, -			iData,1,rData, &rlen, &ccode, fdebug); -   if ((rv == 0) && (ccode != 0)) rv = ccode; -   return(rv); -} - -static int GetPefCapabilities(uchar *bmax) -{ -   int rv, rlen; -   uchar ccode; -   uchar rData[MAX_BUFFER_SIZE]; - -   rlen = sizeof(rData); -   rv = ipmi_cmdraw(0x10, NETFN_SEVT, BMC_SA,PUBLIC_BUS,BMC_LUN, -						NULL,0,rData, &rlen, &ccode, fdebug); -   if ((rv == 0) && (ccode != 0)) rv = ccode; -   if ((rv == 0) && (bmax != NULL)) -	  *bmax = rData[2]; /*max num PEF table entries*/ -   return(rv); -} - -int GetSerialOverLan( uchar chan, uchar bset, uchar block ) -{ -	uchar requestData[24]; -	uchar rData[MAX_BUFFER_SIZE]; -	int rlen; -	int status, i; -	uchar ccode; -	uchar enable_parm, auth_parm, baud_parm; -	ushort getsolcmd; -	uchar user; - -		if (fIPMI20 && fSOL20) { -	   getsolcmd = GET_SOL_CONFIG2; -	   enable_parm = SOL_ENABLE_PARAM; -	   auth_parm   = SOL_AUTHENTICATION_PARAM; -	   baud_parm   = SOL_BAUD_RATE_PARAM; -	} else { -	   getsolcmd = GET_SOL_CONFIG; -	   enable_parm = SOL_ENABLE_PARAM; -	   auth_parm   = SOL_AUTHENTICATION_PARAM; -	   baud_parm   = SOL_BAUD_RATE_PARAM; -	   chan = 0;  /*override chan for IPMI 1.5*/ -	} -	if (!fcanonical) -	   printf("%s, GetSOL for channel %d ...\n",progname,chan); - -	requestData[0] = chan;  /*channel*/ -	requestData[1] = enable_parm; -	requestData[2] = bset;    /*set*/ -	requestData[3] = block;   /*block*/ -	rlen = sizeof(rData); -		status = ipmi_cmd(getsolcmd, requestData,4, rData, &rlen,&ccode,fdebug); -	if (status != 0) return(status); -	if (ccode) { -		if (ccode == 0xC1) { /* unsupported command */ -		   printf("Serial-Over-Lan not available on this platform\n"); -		   return(status); -		} else { -			   printf("SOL Enable ccode = %x\n",ccode); -			   status = ccode; -		} -	} else {  /*success*/ -		 if (fcanonical) { -			printf("Channel %d SOL Enable %s",chan,pspace3); -		 } else { -			printf("SOL Enable: "); -			for (i = 1; i < rlen; i++) printf("%02x ",rData[i]); -		 } -			 if (rData[1] == 0x01) printf("%c enabled\n",bdelim); -		 else printf("%c disabled\n",bdelim); -	} - -	if (!fcanonical)  -	{ -	  requestData[0] = chan; -	  requestData[1] = auth_parm; -	  requestData[2] = bset;   // selector -	  requestData[3] = block;  // block -	  rlen = sizeof(rData); -		  status = ipmi_cmd(getsolcmd,requestData,4,rData,&rlen,&ccode,fdebug);  -	  if (status != 0) return(status); -	  if (ccode) { -		 printf("SOL Auth ccode = %x\n",ccode); -		 status = ccode; -	  } else {  /*success*/ -		 printf("SOL Auth: "); -		 for (i = 1; i < rlen; i++) printf("%02x ",rData[i]); -		 printf(": "); -			 show_priv(rData[1]);  /* priv level = User,Admin,... */ -		 printf("\n"); -	  } - -	  requestData[0] = chan; -	  requestData[1] = SOL_ACC_INTERVAL_PARAM; -	  requestData[2] = bset; -	  requestData[3] = block; -	  rlen = sizeof(rData); -		  status = ipmi_cmd(getsolcmd,requestData,4,rData,&rlen,&ccode,fdebug);  -	  if (status != 0) return(status); -	  if (ccode) { -		 printf("SOL Accum Interval ccode = %x\n",ccode); -		 status = ccode; -	  } else {  /*success*/ -		 printf("SOL Accum Interval: "); -		 for (i = 1; i < rlen; i++) printf("%02x ",rData[i]); -			 printf(": %d msec\n",(rData[1] * 5)); -		  } - -	  requestData[0] = chan; -	  requestData[1] = SOL_RETRY_PARAM; -	  requestData[2] = bset; -	  requestData[3] = block; -	  rlen = sizeof(rData); -		  status = ipmi_cmd(getsolcmd,requestData,4,rData,&rlen,&ccode,fdebug); -	  if (status != 0) return(status); -	  if (ccode) { -		 printf("SOL Retry ccode = %x\n",ccode); -		 status = ccode; -	  } else {  /*success*/ -		 printf("SOL Retry Interval: "); -		 for (i = 1; i < rlen; i++) printf("%02x ",rData[i]); -			 printf(": %d msec\n",(rData[2] * 10)); -		  } -		} - -		if (!fRomley) -	{ -	  requestData[0] = chan; -	  requestData[1] = baud_parm; -	  requestData[2] = bset; -	  requestData[3] = block; -	  rlen = sizeof(rData); -		  status = ipmi_cmd(getsolcmd,requestData,4,rData, &rlen,&ccode,fdebug); -	  if (status != 0) return(status); -	  if (ccode) { -		 printf("SOL nvol Baud ccode = %x\n",ccode); -		 status = ccode; -	  } else {  /*success*/ -		 uchar b; -		 if (fcanonical) { -			printf("Channel %d SOL Baud Rate%s",chan,pspace3); -		 } else { -			printf("SOL nvol Baud Rate: "); -			for (i = 1; i < rlen; i++) printf("%02x ",rData[i]); -		 } -		 /* if not user-specified and previously enabled, use existing */ -		 b = (rData[1] & 0x0f); -		 if ((fnewbaud == 0) && BaudValid(b)) {  -		sol_baud = b;  -		sol_bvalid = 1;  -		 } -			 printf("%c %s\n",bdelim,Baud2Str(b)); -		  } - -	  if (!fcanonical)  -	  { -		requestData[0] = chan; -		requestData[1] = SOL_VOL_BAUD_RATE_PARAM;  /*0x06*/ -		requestData[2] = bset; -		requestData[3] = block; -		rlen = sizeof(rData); -			status = ipmi_cmd(getsolcmd,requestData,4,rData,&rlen,&ccode,fdebug);  -		if (status != 0) return(status); -		if (ccode) { -		   printf("SOL vol Baud ccode = %x\n",ccode); -		   status = ccode; -		} else {  /*success*/ -		   printf("SOL vol Baud Rate: "); -		   for (i = 1; i < rlen; i++) printf("%02x ",rData[i]); -			   printf("%c %s\n",bdelim,Baud2Str(rData[1])); -		} -	  } -	} -		if (fIPMI20) { -	  if (vend_id != VENDOR_IBM) {  -	   /* IBM 0x00DC returns invalid cmd for SOL Payload commands. */ -	   if (!fcanonical) { -		requestData[0] = chan;   -		rlen = sizeof(rData); -		status = ipmi_cmdraw(GET_PAYLOAD_SUPPORT, NETFN_APP,  -			BMC_SA,PUBLIC_BUS,BMC_LUN, -			requestData,1,rData, &rlen, &ccode, fdebug); -			if ((status != 0) || (ccode != 0)) { -		  printf("SOL Payload Support error %d, ccode = %x\n",status,ccode); -		  if (status == 0) status = ccode; -			} else {  /*success*/ -		  printf("SOL Payload Support(%d): ",chan); -		  for (i = 0; i < rlen; i++) printf("%02x ",rData[i]); -			  printf("\n"); -			} -	   } /*endif not canonical*/ -	   /* get Payload Access for 4 users, not just lan_user */ -	   for (user = 1; user <= show_users; user++) -	   { -			 /* mBMC doesn't support more than 1 user */ -		 if (fmBMC && (user > 1)) break; -		 /* IPMI 2.0 has >= 4 users */ -		 requestData[0] = chan;   -		 requestData[1] = user;   -		 rlen = sizeof(rData); -		 status = ipmi_cmdraw(GET_PAYLOAD_ACCESS, NETFN_APP,  -			BMC_SA,PUBLIC_BUS,BMC_LUN, -			requestData,2,rData, &rlen, &ccode, fdebug); -			 if ((status != 0) || (ccode != 0)) { -		   printf("SOL Payload Access(%d,%d) error %d, ccode = %x\n", -				chan,user,status,ccode); -		   if (status == 0) status = ccode; -			 } else {  /*success*/ -		   if (fcanonical) { -		 printf("Channel %d SOL Payload Access(user%d)%s",chan,user, -			pspace1); -		   } else { -		 printf("SOL Payload Access(%d,%d): ",chan,user); -		 for (i = 0; i < rlen; i++) printf("%02x ",rData[i]); -			   }   -		   if ((rData[0] & 0x02) != 0) printf("%c enabled\n",bdelim); -		   else printf("%c disabled\n",bdelim); -			 } -		   }  /*end user loop*/ -		 } /*endif not IBM*/ -		} - -	return(status); -} /*end GetSerialOverLan */ - -/* -ECHO SOL Config Enable -CMDTOOL 20 30 21 %1 01 01 -  -ECHO SOL Authentication (Administrator) -CMDTOOL 20 30 21 %1 02 04 -  -ECHO SOL Accumlate Interval and threshold -CMDTOOL 20 30 21 %1 03 06 14 -  -ECHO SOL Retry Interval and threshold -CMDTOOL 20 30 21 %1 04 06 14 -  -ECHO SOL non-volatile baud rate -CMDTOOL 20 30 21 %1 05 07 -  -ECHO SOL volatile baud rate -CMDTOOL 20 30 21 %1 06 07 -  -ECHO Set user Payload Access for user 1 -CMDTOOL 20 18 4c %1 01 02 00 00 00 - */ -int SetupSerialOverLan( int benable ) -{ -	uchar requestData[24]; -	uchar responseData[MAX_BUFFER_SIZE]; -	int responseLength = MAX_BUFFER_SIZE; -	int status; -	uchar completionCode; -	uchar enable_parm, auth_parm, baud_parm; -	ushort setsolcmd; -	ushort getsolcmd; -		uchar bchan, b; - -		if (fIPMI20 && fSOL20) { -	   setsolcmd = SET_SOL_CONFIG2; -	   getsolcmd = GET_SOL_CONFIG2; -	   enable_parm = SOL_ENABLE_PARAM; -	   auth_parm   = SOL_AUTHENTICATION_PARAM; -	   baud_parm   = SOL_BAUD_RATE_PARAM; -		   bchan = lan_ch; -	} else { -	   setsolcmd = SET_SOL_CONFIG; -	   getsolcmd = GET_SOL_CONFIG; -	   enable_parm = SOL_ENABLE_PARAM; -	   auth_parm   = SOL_AUTHENTICATION_PARAM; -	   baud_parm   = SOL_BAUD_RATE_PARAM; -		   bchan = 0x00;  /*override chan for IPMI 1.5*/ -	} -	memset(requestData, 0, sizeof(requestData));  /* zero-fill */ -	requestData[0] = bchan; -	requestData[1] = enable_parm; -	if (benable == 0) -	   requestData[2] = SOL_DISABLE_FLAG; -	else  -	   requestData[2] = SOL_ENABLE_FLAG; -	responseLength = MAX_BUFFER_SIZE; -		status = ipmi_cmd(setsolcmd, requestData,3,responseData, -						&responseLength, &completionCode, fdebug);  -	if (status == ACCESS_OK) { -		switch( completionCode ) { -		   case 0x00: /* success */ -			break; -		   case 0xC1: /* unsupported command */ -			SELprintf("SetupSerialOverLan: SOL not available on this platform\n"); -			return 0; -		   default: /* other error */ -			SELprintf("SetupSerialOverLan: SOL_ENABLE_PARAM ccode=%x\n", -					completionCode); -			return -1; -			break; -		} -	} else { -		SELprintf( "SET_SOL_CONFIG, enable SOL failed\n" ); -		return -1; -	} -	if (benable == 0) return 0; - -	requestData[0] = bchan; /* channel */ -	requestData[1] = auth_parm; -	requestData[2] = 0x00; /* set selector */ -	requestData[3] = 0x00; /* block selector */ -	responseLength = MAX_BUFFER_SIZE; -		status = ipmi_cmd(getsolcmd, requestData,4,responseData, -						&responseLength, &completionCode, fdebug);  -	if (status == ACCESS_OK) { -		if( completionCode ) { -			SELprintf("SetupSerialOverLan: GET_SOL_AUTHENTICATION_PARAM code=%x\n", -				completionCode); - -			return -1; -		} -	} else { -		SELprintf( "SOL_CONFIG, get SOL authentication failed\n" ); -		return -1; -	} - -		if ((vend_id == VENDOR_SUPERMICROX) || -			(vend_id == VENDOR_SUPERMICRO)) b = SOL_PRIVILEGE_LEVEL_OPERATOR; -		else b = SOL_PRIVILEGE_LEVEL_USER; -	requestData[0] = bchan; -	requestData[1] = auth_parm; -	requestData[2] = b | ( responseData[1] & 0x80 ); /* priv | enable */ -	responseLength = MAX_BUFFER_SIZE; -	status = ipmi_cmd(setsolcmd, requestData,3,responseData, -			&responseLength, &completionCode, fdebug); -	if (status == ACCESS_OK) { -		if( completionCode ) { -			SELprintf("SET_SOL_AUTHENTICATION_PARAM code=%x\n", -				completionCode); - -			return -1; -		} -	} else { -		SELprintf( "SET_SOL_CONFIG, set SOL authentication failed\n" ); -		return -1; -	} - -	requestData[0] = bchan; -	requestData[1] = SOL_ACC_INTERVAL_PARAM; -	requestData[2] = sol_accum[0]; //0x04; -	requestData[3] = sol_accum[1]; //0x32; -	responseLength = MAX_BUFFER_SIZE; -		if (fdebug) SELprintf("Setting SOL AccumInterval\n"); -	status = ipmi_cmd(setsolcmd, requestData,4,responseData, -			&responseLength, &completionCode, fdebug); -	if (status != ACCESS_OK || completionCode) { -	   SELprintf("SET SOL AccumInterval ret=%d ccode=%x\n",  -			status,completionCode); -	   return -1; -		} - -	/* Some BMCs return sporadic errors for SOL params (e.g. Kontron)*/ -		// if (vend_id == VENDOR_KONTRON) ;  -	// else -	{ -	   requestData[0] = bchan; -	   requestData[1] = SOL_RETRY_PARAM; -	   requestData[2] = sol_retry[0]; //0x06; -	   requestData[3] = sol_retry[1]; //0x14; -	   responseLength = MAX_BUFFER_SIZE; -		   if (fdebug) SELprintf("Setting SOL RetryInterval\n"); -	   status = ipmi_cmd(setsolcmd, requestData,4,responseData, -			   &responseLength, &completionCode, fdebug); -	   if (status != ACCESS_OK || completionCode) { -		  SELprintf("SET SOL RetryInterval ret=%d ccode=%x\n",  -			status,completionCode); -		  return -1; -		   } -		} - -		if (fRomley) ;  /* skip SOL BAUD */  -	else {  /* else SOL BAUD is used, so set it. */ -		  if (fnewbaud == 0) {  /* no user-specified SOL baud */ -		/* if sol_bvalid, sol_baud was set to existing value above */ -		if (!sol_bvalid) { -			   status = GetSerEntry(7, (LAN_RECORD *)&responseData); -			   if (status == 0) {  /* use Serial baud for SOL */ -				sol_baud = responseData[1]; -				if (fdebug) SELprintf("Serial Baud is %s\n",Baud2Str(sol_baud)); -			   } -			} -		  } -	  requestData[0] = bchan; -	  requestData[1] = baud_parm; -	  requestData[2] = sol_baud; -	  responseLength = MAX_BUFFER_SIZE; -		  if (fdebug) SELprintf("Setting SOL BAUD to %s\n",Baud2Str(sol_baud)); -	  status = ipmi_cmd(setsolcmd, requestData,3,responseData, -			  &responseLength, &completionCode, fdebug); -	  if (status != ACCESS_OK || completionCode) { -		 SELprintf("SET SOL BAUD ret=%d ccode=%x\n", status,completionCode); -		 return -1; -		  } - -	  requestData[0] = bchan; -	  requestData[1] = SOL_VOL_BAUD_RATE_PARAM; -	  requestData[2] = sol_baud; -	  responseLength = MAX_BUFFER_SIZE; -		  if (fdebug)  -			  printf("Setting SOL vol BAUD to %s\n",Baud2Str(sol_baud)); -	  status = ipmi_cmd(setsolcmd, requestData,3,responseData, -			&responseLength, &completionCode, fdebug); -	  if (status != ACCESS_OK || completionCode) { -		printf("SET SOL vol BAUD ret=%d ccode=%x\n",status,completionCode); -		return -1; -		  } -		} - -		if (fIPMI20 && fSOL20) { -	   if (vend_id == VENDOR_KONTRON && lan_user == 1) { -			  if (fdebug) SELprintf("Skipping SOL Payload Access for user %d\n", -				lan_user); -	   } else if (vend_id == VENDOR_IBM) { /*non-conformance*/ -			  if (fdebug) SELprintf("Skipping SOL Payload Access for user %d\n", -				lan_user); -	   } else { -			  if (fdebug) SELprintf("Setting SOL Payload Access for user %d\n", -				lan_user); -		  requestData[0] = bchan;   -		  requestData[1] = lan_user;  /*enable this user*/ -		  requestData[2] = 0x02;      /*enable std 2.0 SOL*/ -		  requestData[3] = 0; -		  requestData[4] = 0; -		  requestData[5] = 0; -		  responseLength = MAX_BUFFER_SIZE; -		  status = ipmi_cmdraw(SET_PAYLOAD_ACCESS, NETFN_APP,  -			BMC_SA,PUBLIC_BUS,BMC_LUN, -			requestData,6,responseData, &responseLength,  -			&completionCode, fdebug); -		  if (status != ACCESS_OK || completionCode) { -			 SELprintf("SET SOL Payload Access ret=%d ccode=%x\n", -			   status,completionCode); -			 return -1; -			  } -		   } -		} -	return 0; -}  /*end SetupSerialOverLan */ - -static char *PefDesc(int idx, uchar stype) -{ -   char *pdesc, *p; -   static char mystr[60]; -   int mylen = sizeof(mystr); -   pdesc = &mystr[0]; -   if (pefdesc != NULL) strcpy(pdesc,pefdesc[idx]); /* if Intel, pre-defined */ -   else strcpy(pdesc,"reserved");             /* else set default to detect */ -   if ((stype != 0) && (strcmp(pdesc,"reserved") == 0)) { -	  /* Dynamically set the pef desc string from the sensor type */ -	  switch(stype) {   -		 case 0x01: strcpy(pdesc,"Temperature");    break; -		 case 0x02: strcpy(pdesc,"Voltage");  break; -		 case 0x04: strcpy(pdesc,"Fan");      break; -		 case 0x05: strcpy(pdesc,"Chassis");  break; -		 case 0x07: strcpy(pdesc,"BIOS");     break; -		 case 0x08: strcpy(pdesc,"Power Supply");   break; -		 case 0x09: strcpy(pdesc,"Power Unit");   break; -		 case 0x0c: strcpy(pdesc,"Memory");   break; -		 case 0x0f: strcpy(pdesc,"Boot");     break; -		 case 0x12: strcpy(pdesc,"System Restart"); break; -		 case 0x13: strcpy(pdesc,"NMI"); break; -		 case 0x23: strcpy(pdesc,"Watchdog"); break; -		 case 0x20: strcpy(pdesc,"OS Critical Stop"); break; -		 default:    -#ifdef METACOMMAND -		p = get_sensor_type_desc(stype);  -		if (p != NULL) {  -		   strncpy(pdesc,p,mylen); -		   mystr[mylen-1] = 0; /*stringify*/ -		} -#else -		sprintf(pdesc,"Other[%02x]",stype); -#endif -		break; -	  } -	  if (pef_array[idx-1][4] == PEF_SEV_OK) strcat(pdesc," OK"); -   } -   return(pdesc); -} - - -#ifdef METACOMMAND -int i_lan(int argc, char **argv) -#else -#ifdef WIN32 -int __cdecl -#else -int -#endif -main(int argc, char **argv) -#endif -{ -   int ret; -   PEF_RECORD PefRecord; -   LAN_RECORD LanRecord; -   int i, idx, j; -   int c; -   char *pstr; -   uchar bset; -   int ndest = 4; -   int idest; -   char mystr[80]; -   char fpefok = 1; -   uchar * pc; int sz;  -   char *pa; -   char *pb; - -   // progname = argv[0]; -   printf("%s ver %s \n",progname,progver); -   j = 0; freadonly = FLAG_INIT; -   idx = argc;  /*getopt loop counter*/ -   /* available opt chars: y O Q + = ~ _ */ -   while ((c = getopt(argc, argv,"a:b:cdef:gh:i:j:klm:n:op:q:rstu:v:w:xy:z#::A:B:C:DEF:G:H:I:J:K:L:M:N:OP:Q:R:S:T:U:V:X:YZ:?")) != EOF) { -	  switch(c) { -		  case 'a':      /* alert dest number (usu 1 thru 4) */ -			alertnum = atob(optarg); -			if (alertnum > alertmax) alertnum = 1; -			j++; -			break; -		  case 'b': bAuth = htoi(optarg); j++; break; /*undocumented*/ -		  case 'c': fcanonical = 1; bdelim = BDELIM; break; -		  case 'd': fenable = 0; fdisable = 1; freadonly = 0; break; -		  case 'e': fenable = 1; fdisable = 0; freadonly = 0; break; -		  case 'f': i = atoi(optarg);    /*set arp_ctl*/ -			if (i < 0 || i > 3) printf("Invalid ARP control %d\n",i); -			else { -			arp_ctl = i; -			fsetarp = 1; -			j++; -			} -			break; -		  case 'l': fpefenable = 0;  fenable = 2;  -					fdisable = 0; freadonly = 0; break; -	  case 'h':      /* VLAN ID */ -		i = atoi(optarg); -		if (i > 4095) vlan_enable = 0; -		else { -		   vlan_enable = 1; -		   vlan_id = (ushort)i; -		} -		j++; -		break; -	  case 'y':      /* OEM LAN Failover enable/disable */ -		i = atoi(optarg); -		if (i < 0) printf("Failover(-y) parameter is negative\n"); -		else failover_enable = i; -		j++; -		break; -	  case 'Q':      /* VLAN Priority */ -		i = atoi(optarg); -		if (i > 7 || i < 0) vlan_enable = 0; -		else { -		   vlan_enable = 1; -		   vlan_prio = (uchar)i; -		} -		j++; -		break; -	  case 'i':      /* eth interface (ifname) */ -			fsetifn = 1; -		i = sizeof(ifname); -		if (strlen(optarg) > (uint)i) optarg[i] = 0; -		strcpy(ifname,optarg); -				if (fdebug) printf("ifname = %s\n",ifname); -		j++; -		break; -		  case 'j': fCustomPEF = 1;     /*custom 10 PEF bytes */ -					fpefenable = 1;   /* PEF is implied here */ -					freadonly = 0;  -			memset(custPEF,0,sizeof(custPEF)); -					custPEF[0] = htoi(&optarg[0]);  /*action  */ -					custPEF[1] = htoi(&optarg[2]);  /*policy  */ -					custPEF[2] = htoi(&optarg[4]);  /*severity*/ -					custPEF[3] = htoi(&optarg[6]);  /*genid1  */ -					custPEF[4] = htoi(&optarg[8]);  /*genid2  */ -					custPEF[5] = htoi(&optarg[10]); /*sensor_type*/ -					custPEF[6] = htoi(&optarg[12]); /*sensor_num */ -					custPEF[7] = htoi(&optarg[14]); /*evt_trigger*/ -					custPEF[8] = htoi(&optarg[16]); /*data1offset*/ -					custPEF[9] = htoi(&optarg[18]); /*data1mask  */ -			if (optarg[20] != 0) {   -			/* optionally get 8 extra PEF entry bytes */ -						custPEF[10] = htoi(&optarg[20]); /*data1cmp1 */ -						custPEF[11] = htoi(&optarg[22]); /*data1cmp2 */ -						custPEF[12] = htoi(&optarg[24]); /*data2mask */ -						custPEF[13] = htoi(&optarg[26]); /*data2cmp1 */ -						custPEF[14] = htoi(&optarg[28]); /*data2cmp2 */ -						custPEF[15] = htoi(&optarg[30]); /*data3mask */ -						custPEF[16] = htoi(&optarg[32]); /*data3cmp1 */ -						custPEF[17] = htoi(&optarg[34]); /*data3cmp2 */ -			} -			j++; -			break; -		  case 'k': fSetPEFOks = 1; j++; break;  /*configure PEF OK rules */ -		  case 'm': set_max_kcs_loops(atoi(optarg)); break; -		  case 'n':      /* number/index in PEF table to insert new entry */ -				fpefenable = 1; -		pefnum = atob(optarg); -		if (pefnum >= MAXPEF) { -				   pefnum = MAXPEF - 1; -				   fAdjustPefNum = 1; -				} else fUserPefNum = 1; -		j++; -		break; -		  case 'o': fdisableSOL = 1;    /*disable SOL only*/ -					fpefenable = 0;   /*no change to PEF*/ -					freadonly = 0;  -			break;   -		  case 'r': freadonly = 1; fenable = 0; break; -		  case 's': fgetser = 1;   break; -		  case 't': ftestonly = 1; freadonly = 1;  break; -		  case 'v':      /* user access privilege level */ -			i = atoi(optarg); -			if (valid_priv(i)) lan_access = i & 0x0f; -			else printf("Invalid privilege -v %d, using Admin\n",i); -			j++; -			break; -		  case 'w': i = atoi(optarg);  /*set grat arp interval, in #sec*/ -			if (i >= 0 && i < 256) arp_interval = i * 2; -			else printf("Invalid arp interval -w %d, skipping\n",i); -			break; -		  case 'x': fdebug = 1;     break; -		  case 'z': flanstats = 1;     break; -		  case 'D': lan_dhcp = 1; j++;  break; -		  case 'O': flansecure = 1; j++; break; -		  case 'I':      /* My BMC IP Address */ -		fset_ip |= MYIP; -		atoip(rgmyip,optarg); -		j++; -		break; -		  case 'M':      /* My BMC MAC Address */ -		atomac(rgmymac,optarg); -			if (!MacIsValid(rgmymac)) printf("Invalid MAC for -M\n"); -		j++; -		break; -		  case 'S':      /* Subnet IP Address */ -		atoip(rgsubnet,optarg); -		j++; -		break; -		  case 'G':      /* Gateway IP Address */ -		fset_ip |= GWYIP; -		atoip(rggwyip,optarg); -		j++; -		break; -		  case 'g':      /* Secondary Gateway IP Address */ -		fset_ip |= GWYIP; -		atoip(rggwy2ip,optarg); -		j++; -		break; -		  case 'H':      /* Gateway MAC Address */ -		atomac(rggwymac,optarg); -			if (!MacIsValid(rggwymac)) printf("Invalid MAC for -H\n"); -		j++; -		break; -		  case 'B':      /* SOL Baud rate */ -				fnewbaud = 1; -				sol_baud = Str2Baud(optarg); -		j++; -		break; -		  case 'A':      /* Alert Dest IP Address */ -		fset_ip |= DESTIP; -		/* allow name or ip here via Get_Mac() ? */ -		atoip(rgdestip,optarg); -				fpefenable = 1;   /* PEF is implied here */ -		j++; -		break; -		  case 'X':      /* Alert Dest MAC Address */ -		atomac(rgdestmac,optarg); -			if (!MacIsValid(rgdestmac)) printf("Invalid MAC for -X\n"); -				fpefenable = 1;   /* PEF is implied here */ -		j++; -		break; -		  case 'K':      /* Kontron IPMI hostname */ -		i = sizeof(rghostname);  /*usu 18*/ -		if (strlen(optarg) > (uint)i) optarg[i] = 0; -		strcpy(rghostname,optarg); -		j++; -		break; -		  case 'C':      /* Community String */ -		fsetcommunity = 1; -		i = sizeof(rgcommunity);  /*usu 18*/ -		if (strlen(optarg) > (uint)i) optarg[i] = 0; -		strcpy(rgcommunity,optarg); -				fpefenable = 1;   /* PEF is implied here */ -		j++; -		break; -	  case 'u': 	 /* username to set */ -		myuser = strdup_(optarg);  /*remote username */ -		j++; -		break; -	  case 'p':      /* password to set */ -		fpassword = 1; -		if (strlen(optarg) > PSW_MAX) optarg[PSW_MAX] = 0; -		strcpy(passwordData,optarg); -				if (fdebug) printf("Password = %s\n",passwordData); -		/* Hide password from 'ps' */ -		memset(optarg, ' ', strlen(optarg)); -		j++; -		break; -		  case 'q': -		  case '#': -				usernum = atob(optarg); -				if (usernum > 15) usernum = 0;  /*MAX_IPMI_USERS = 15*/ -		j++; -				break; -		  case 'L':  -		if (strcmp(optarg,"list") == 0) fshowchan = 1; -		lan_ch_parm = atob(optarg); -		if (lan_ch_parm > MAXCHAN) lan_ch_parm = PARM_INIT; /*invalid*/ -		break; -		  case 'V':    /* priv level */ -		fprivset = 1; -		  case 'N':    /* nodename */ -		  case 'U':    /* remote username */ -		  case 'P':    /* remote password */ -		  case 'R':    /* remote password */ -		  case 'E':    /* get password from IPMI_PASSWORD environment var */ -		  case 'F':    /* force driver type */ -		  case 'T':    /* auth type */ -		  case 'J':    /* cipher suite */  -		  case 'Y':    /* prompt for remote password */ -		  case 'Z':    /* set local MC address */ -				parse_lan_options(c,optarg,fdebug); -				break; -	  default: -			 printf("Usage: %s [-abcdefghijklmnopq#rstuvwxyzBDQK]\n",progname); -			 printf("         \t [-a alertnum -i eth1 -n pefnum ]\n"); -			 printf("         \t [-I ipadr -M macadr -S subnet ]\n"); -			 printf("         \t [-G gwyip -H gwymac -L lan_channel_num]\n"); -			 printf("         \t [-A alertip -X alertmac -C community ]\n"); -			 printf("         \t [-g 2nd_gwyip  -v priv  -B sol_baud ]\n"); -			 printf("         \t [-j 10_bytes_custom_pef -b authmask ]\n"); -			 printf("where -c  shows Canonical, simpler output format\n"); -			 printf("      -d  Disables BMC LAN & PEF\n"); -			 printf("      -e  Enables BMC LAN & PEF\n"); -			 printf("      -f  set ARP Control to 1=grat, 2=resp, 3=both\n"); -			 printf("      -g  secondary Gateway IP (-G=primary_gwy_ip)\n"); -			 printf("      -h  VLAN ID (>=4096 to disable)\n"); -		 printf("      -j  specify custom PEF rule (10 or 18 hex bytes)\n"); -		 printf("      -k  add PEF oK rules, if PEF enable\n"); -			 printf("      -l  Enables BMC LAN only, not PEF\n"); -			 printf("      -o  disable Only SOL\n"); -			 printf("      -p  password to set \n"); -			 printf("   -q/-#  User number of LAN username_to_set\n"); -			 printf("      -r  Read-only BMC LAN & PEF settings\n"); -			 printf("      -s  Show some Serial settings also \n"); -			 printf("      -t  Test if BMC LAN is already configured\n"); -			 printf("      -u  username to set \n"); -			 printf("      -v  access priVilege: 4=Admin,3=Operator,2=User\n"); -			 printf("      -w  set Grat ARP Interval to specified # seconds\n"); -			 printf("      -x  Show eXtra debug messages\n"); -			 printf("      -y  OEM LAN Failover (1=enable,0=disable if Intel)\n"); -			 printf("      -z  Show IPMI LAN statistics\n"); -			 printf("      -B  Baud for SerialOverLan (19.2K,115.2K,...)\n"); -			 printf("      -D  Use DHCP instead of static IP (-I for server)\n"); -			 printf("      -K  (Kontron) IPMI hostname to set\n"); -			 printf("      -Q  VLAN Priority (default =0)\n"); -			 printf("      -O  Force LAN security: no null user, cipher 0 off\n"); -		 print_lan_opt_usage(0); -		 ret = ERR_USAGE; -			 goto do_exit; -	  } /*end switch*/ -	  nopts++; -   } /*end while*/ - -   if ((freadonly == FLAG_INIT) && (j > 0)) { -	  /* got some options implying set, but no -e -l -d option specified. */ -	  foptmsg = 1;    /*show warning message later*/ -	  freadonly = 1;  /*assume read only*/ -   } -   fipmilan = is_remote(); -   if (fipmilan && !fprivset)  -	parse_lan_options('V',"4",0); /*even if freadonly request admin*/ -   if ((fsetarp == 0) && ostype == OS_WINDOWS)  -		arp_ctl = 0x03;  /*grat arp & arp resp enabled */ - -   ret = GetDeviceID( &LanRecord); -   if (ret != 0) { -	goto do_exit; -   } else {  /* success */ -	  uchar ipmi_maj, ipmi_min; -	  ipmi_maj = LanRecord.data[4] & 0x0f; -	  ipmi_min = LanRecord.data[4] >> 4; -	  show_devid( LanRecord.data[2],  LanRecord.data[3], ipmi_maj, ipmi_min); -	  if (ipmi_maj == 0)  fIPMI10 = 1; -	  else if (ipmi_maj == 1 && ipmi_min < 5) fIPMI10 = 1;  -	  else  fIPMI10 = 0;    /* >= IPMI 1.5 is ok */ -	  if (ipmi_maj >= 2) fIPMI20 = 1; -	  if (fIPMI20) show_users = 5; -	  else show_users = 3; -	  if (fIPMI10) { -		 printf("This IPMI v%d.%d system does not support PEF records.\n", -			 ipmi_maj,ipmi_min); -	 /* Wont handle PEF, but continue and look for BMC LAN anyway */ -	 // fIPMI10 = 1; -	 // ipmi_close_(); -	 // exit(1);   -		 } -	  prod_id = LanRecord.data[9] + (LanRecord.data[10] << 8); -	  vend_id = LanRecord.data[6] + (LanRecord.data[7] << 8)  -				  + (LanRecord.data[8] << 16); -	  /* check Device ID response for Manufacturer ID = 0x0322 (NSC) */ -	  if (vend_id == VENDOR_NSC) {         /* NSC = 0x000322 */ -	 fmBMC = 1;  /*NSC miniBMC*/ -	 if (pefnum == 12) pefnum = 10;  /* change CritStop pefnum to 0x0a */ -	 pefdesc = &pefdesc2[0];  /*mini-BMC PEF*/ -	 pefmax = 30; -		 fsharedMAC = 1;  /* shared MAC with OS */ -	  } else if (vend_id == VENDOR_LMC) {  /* LMC (on SuperMicro) = 0x000878 */ -	 pefdesc = NULL;  /* unknown, see PefDesc() */ -	 if (pefnum == 12) pefnum = 15;  /* change CritStop pefnum */ -	 pefmax  = 16; -		 fsharedMAC = 0;  /* not-shared BMC LAN port */ -	  } else if (vend_id == VENDOR_INTEL) {  /* Intel = 0x000157 */ -	 pefdesc = &pefdesc1[0];  /*default Intel PEF*/ -	 pefmax  = 20;            /*default Intel PEF*/ -		 switch(prod_id) { -		 case 0x4311:  /* Intel NSI2U w SE7520JR23 */ -	   fmBMC = 1;  /* Intel miniBMC*/ -	   if (pefnum == 12) pefnum = 14;  /* change CritStop pefnum */ -	   pefdesc = &pefdesc2[0];  /*mini-BMC PEF*/ -	   pefmax = 30; -		   fsharedMAC = 1;  /* shared-MAC BMC LAN port, same MAC */ -		   break; -		 case 0x0022:  /* Intel TIGI2U w SE7520JR23 +IMM*/ -		   fsharedMAC = 1;  /* shared-MAC BMC LAN port, same MAC */ -		   gcm_ch = 3;      /* IMM GCM port, dedicated MAC */ -	   show_users = 4; -	   break; -	 case 0x000C:  /*TSRLT2*/ -	 case 0x001B:  /*TIGPR2U*/ -	   /* fmBMC=0; Intel Sahalee BMC*/ -		   fsharedMAC = 1;  /* shared-MAC BMC LAN port, same MAC */ -		   break; -		 case 0x0026:  /*S5000 Bridgeport*/ -		 case 0x0028:  /*S5000PAL Alcolu*/ -		 case 0x0029:  /*S5000PSL StarLake*/ -		 case 0x0811:  /*S5000PHB TIGW1U */ -	   /* fmBMC=0;   Intel Sahalee ESB2 BMC*/ -		   fsharedMAC = 0;  /* not-shared BMC LAN port, separate MAC */ -		   gcm_ch = 3; -	   parm7 = &iparm7[0]; /*TTL=30*/ -		   break; -		 case 0x003E:  /*NSN2U or CG2100 Urbanna*/ -	   fiBMC = 1;  /* Intel iBMC */ -		   fsharedMAC = 0;  /* not-shared BMC LAN port, separate MAC */ -		   // gcm_ch = 3; -	   parm7 = &iparm7[0]; /*TTL=30*/ -	   if (fsetarp == 0)  -		  arp_ctl = 0x02;    /*grat arp disabled, arp resp enabled */ -	   arp_interval = 0x00;  /*0 sec, since grat arp disabled */ -	   sol_accum[0] = 0x0c;  /*Intel defaults*/ -	   sol_accum[1] = 0x60;  /*Intel defaults*/ -	   sol_retry[0] = 0x07;  /*Intel defaults*/ -	   sol_retry[1] = 0x32;  /*Intel defaults*/ -		   set_max_kcs_loops(URNLOOPS); /*longer for SetLan cmds (default 300)*/ -		   break; -		 case 0x0107:  /* Intel Caneland*/ -		   fsharedMAC = 0;  /* not-shared BMC LAN port, separate MAC */ -		   gcm_ch = 3; -		   break; -		 case 0x0100:  /*Tiger2 ia64*/ -	   /* for ia64 set chan_pefon, chan_pefoff accordingly*/ -	   chan_pefon  = CHAN_ACC_PEFON64; -	   chan_pefoff = CHAN_ACC_PEFOFF64; -	   /* fall through */ -		 default:      /* else other Intel */ -	   /* fmBMC = 0;  * Intel Sahalee BMC*/ -		   if (fIPMI20) fsharedMAC = 0;  /* recent, not-shared BMC MAC */ -	   else fsharedMAC = 1;  /* usu IPMI 1.x has shared BMC MAC */ -		   break; -		 } /*end switch*/ -		 if (is_romley(vend_id,prod_id)) fRomley = 1; -		 if (is_grantley(vend_id,prod_id)) fGrantley = 1; -		 if (fRomley) { -			fiBMC = 1;  /* Intel iBMC */ -			fsharedMAC = 0;  /* not-shared BMC LAN port, separate MAC */ -			set_max_kcs_loops(URNLOOPS); /*longer for SetLan (default 300)*/ -			fipv6 = 1; -			if (fsetarp == 0) arp_ctl = 0x03; /*default to both for Romley*/ -		 } -	  } else {  /* else other vendors  */ -		 if (fIPMI20) fsharedMAC = 0;  /* recent, not-shared BMC MAC */ -	 else fsharedMAC = 1;  /* usu IPMI 1.x has shared BMC MAC */ -	 pefdesc = NULL;  /* unknown, see PefDesc() */ -	 if (pefnum == 12) pefnum = 15;  /* change CritStop pefnum to 15? */ -	 pefmax  = 20; -		 if (!fUserPefNum) fAdjustPefNum = 1; -	  } -	  if (fmBMC) show_users = 1; /* mBMC doesn't support more than 1 user */ -   } - -   if (fshowchan) { -	  ret = show_channels(); -	  exit(ret); -   } - -   ret = GetPefCapabilities(&bset); -   if ((ret == 0) && (bset <= MAXPEF)) pefmax = bset; - -   /* Get the BMC LAN channel & match it to an OS eth if. */ -   i = GetBmcEthDevice(lan_ch_parm,&lan_ch); -   if (i == -2) {  /* no lan channels found (see lan_ch) */ -	if (lan_ch_parm == PARM_INIT) -	   printf("This system does not support IPMI LAN channels.\n"); -	else  /*specified a LAN channel*/ -	   printf("BMC channel %d does not support IPMI LAN.\n",lan_ch_parm); -	ret = LAN_ERR_NOTSUPPORT; -	goto do_exit; -   } else if (i < 0) {  /* mac not found, use platform defaults */ -        i = 0;   /* default to eth0, lan_ch set already. */ -        if (vend_id == VENDOR_INTEL) { -           if ((prod_id == 0x001B) || (prod_id == 0x000c)) { -              /* Intel TIGPR2U or TSRLT2 defaults are special */ -              if (lan_ch_parm == 6) -                   { i = 0; lan_ch = 6; } -              else { i = 1; lan_ch = 7; } -              ser_ch = 1; -           } -        } -   } -   if ((i == gcm_ch) && (gcm_ch != PARM_INIT) && (lan_ch_parm == PARM_INIT)) { -	/* Has a GCM, defaulted to it, and user didn't specify -L */ -	/* Need this to avoid picking channel 3, the IMM/RMM GCM channel. */ -	lan_ch = 1;  /*default BMC LAN channel*/ -	// i = 0;       /*default eth0 (was eth1) */ -   } -   if (fsetifn == 0) { /*not user specified, use the detected one*/ -       // if (lan_ch == gcm_ch) strcpy(ifname,"gcm"); -       sprintf(ifname,"%s%d",ifpattn,i); /*eth%d*/ -   } -   if (fdebug) printf("lan_ch = %d, ifname = %s\n",lan_ch,ifname); - -   /* set the lan_user appropriately */ -   if (myuser == NULL) {  /* if no -u param */ -      if (ipmi_reserved_user(vend_id, 1)) lan_user = 2;  -      else if (flansecure) lan_user = 2; -      else lan_user = 1;   /*use default null user */ -   } else if (usernum != 0) lan_user = usernum;  /*use -q specified usernum*/ -   /* else use default lan_user (=2) if -u and not -q */   - -   if (ftestonly) {  /*test only if BMC LAN is configured or not */ -      /* TODO: test gcm also, if present */ -      ret = GetLanEntry(4, 0, &LanRecord);  /*ip addr src*/ -      if (ret == 0) { -         if ((LanRecord.data[0] == SRC_BIOS) || -             (LanRecord.data[0] == SRC_DHCP)) ret = 0; /* DHCP, so ok */  -         else {  /*static IP*/ -            ret = GetLanEntry(3, 0, &LanRecord); /* ip address */ -            if (ret == 0) { -	       if (!IpIsValid(LanRecord.data)) { -  printf("invalid BMC IP address\n"); -  ret = 1; /* invalid ip */ -               } else ret = GetLanEntry(12, 0, &LanRecord); /*gateway ip*/ -               if (ret == 0) { -	          if (!IpIsValid(LanRecord.data)) { -     printf("invalid gateway ip\n"); -     ret = 2; /*invalid gwy ip*/ -  } else ret = GetLanEntry(13, 0, &LanRecord); -                  if (ret == 0) { -                     if (!MacIsValid(&LanRecord.data[0])) { -	printf("invalid gateway mac\n"); -	ret = 3; /*invalid gwy mac */ -     } -                  } -               } -	    } -         } -      } /*endif GetLanEntry ok*/ -      if (ret == 0) printf("BMC LAN already configured\n"); -      else printf("BMC LAN not configured\n"); -      goto do_exit; -   } /*endif ftestonly*/ - -   memset(SessInfo,0,sizeof(SessInfo)); -   ret = GetSessionInfo(SessInfo,sizeof(SessInfo));  -   // rlen = sizeof(SessInfo)); ret = get_session_info(0,0,SessInfo,&rlen);  -   if (fdebug) printf("GetSessionInfo ret=%d, data: %02x %02x %02x %02x \n", -	ret,SessInfo[0],SessInfo[1],SessInfo[2],SessInfo[3]); -   if (!freadonly && fipmilan) {  /* setting LAN params, and using IPMI LAN */ -      if (SessInfo[2] > 1) { /* another session is active also */ -	 printf("Another session is also active, cannot change IPMI LAN settings now.\n"); -         ret = ERR_NOT_ALLOWED; -         goto do_exit; -      } -   } - -   if (!fIPMI10) { -      if (fcanonical)  -      {  /* canonical/simple output */ -       ret = GetPefEntry(0x01, 0,(PEF_RECORD *)&LanRecord);   -       if (ret != 0) ndest = 0; -       else {   /*success*/ -         j = LanRecord.data[0]; -         mystr[0] = 0; -         if (j == 0) strcat(mystr,"none "); -	 else { -            if (j & 0x01) strcat(mystr,"PEFenable "); -            if (j & 0x02) strcat(mystr,"DoEventMsgs "); -            if (j & 0x04) strcat(mystr,"Delay "); -            if (j & 0x08) strcat(mystr,"AlertDelay "); -	 } -	 printf("PEF Control %s%c %s\n",pspace4,bdelim,mystr); -       }  -      } else {  /* normal/full output */ -       ret = GetPefEntry(0x01, 0,(PEF_RECORD *)&LanRecord);   -       if (ret == 0 && (LanRecord.data[0] != 0)) { -	   fpefok = 1; -           bmcpefctl = LanRecord.data[0]; -       } else {   /* skip PEF rules/params if disabled */ -	 printf("PEF Control %s%c %s\n",pspace4,bdelim,"none "); -	 ndest = 0; -	 fpefok = 0;  -       } -        -       if (fpefok) { -        printf("%s, GetPefEntry ...\n",progname); -        for (idx = 1; idx <= pefmax; idx++) -        { -         ret = GetPefEntry( 0x06, (ushort)idx, &PefRecord); -         if (ret == 0) {    // Show the PEF record -            pc = (uchar *)&PefRecord; -            sz = 21;        // sizeof(PEF_RECORD) = 21 -	    if (PefRecord.sensor_type == 0) { -	      if (idx <= pefnum)  -                 printf("PEFilter(%02d): empty\n",idx); -              memcpy(pef_array[idx-1], &PefRecord, sz); -              if (fAdjustPefNum) pefnum = (char)idx; -	    } else { -              memcpy(pef_array[idx-1], &PefRecord, sz); -	      if (PefRecord.fconfig & 0x80) pb = "enabled"; -	      else pb = "disabled"; -	      i = PefRecord.rec_id; -              switch(PefRecord.action) { -				 case 0x01: pa = "alert";    break; -				 case 0x02: pa = "poweroff"; break; - 				 case 0x04: pa = "reset";    break; -				 case 0x08: pa = "powercycle"; break; -				 case 0x10: pa = "OEMaction";  break; -				 case 0x20: pa = "NMI";  break; -                 default:   pa = "no action";  -              } -              printf("PEFilter(%02d): %02x %s event - %s for %s\n", -     			 	 idx, PefRecord.sensor_type,  -                     PefDesc(i,PefRecord.sensor_type), pb,pa); -	    } -	    if (fdebug) {  /* show raw PEFilter record */ -			pc = &PefRecord.rec_id; -			printf("raw PEF(%.2d):  ",pc[0]); -			for (i = 0; i < sz; i++) printf("%02x ",pc[i]); -			printf("\n"); -	    } -         } else { -          	printf("GetPefEntry(%d), ret = %d\n",idx,ret); -	      	if (ret == 0xC1) {  /*PEF is not supported, so skip the rest. */ -				fpefok = 0; -				ndest = 0; /* if no PEF, no alerts & no alert dest */ -				break; -	      	} -		} -        } -       } /*endif fpefok*/ -       if (fpefok) {   -        if (fdebug) ShowPef(); -        ret = GetPefEntry(0x01, 0,(PEF_RECORD *)&LanRecord);   -        if (ret == 0) { -           j = LanRecord.data[0]; -           mystr[0] = 0; -           if (j & 0x01) strcat(mystr,"PEFenable "); -           if (j & 0x02) strcat(mystr,"DoEventMsgs "); -           if (j & 0x04) strcat(mystr,"Delay "); -           if (j & 0x08) strcat(mystr,"AlertDelay "); -		   printf("PEF Control: %02x : %s\n",j, mystr); -        } -        ret = GetPefEntry(0x02, 0,(PEF_RECORD *)&LanRecord); -        if (ret == 0) { -           j = LanRecord.data[0]; -           mystr[0] = 0; -           if (j & 0x01) strcat(mystr,"Alert "); -           if (j & 0x02) strcat(mystr,"PwrDn "); -           if (j & 0x04) strcat(mystr,"Reset "); -           if (j & 0x08) strcat(mystr,"PwrCyc "); -           if (j & 0x10) strcat(mystr,"OEM "); -           if (j & 0x20) strcat(mystr,"DiagInt "); -           printf("PEF Actions: %02x : %s\n",j, mystr); -        } -        ret = GetPefEntry(0x03, 0,(PEF_RECORD *)&LanRecord); -        if (ret == 0) printf("PEF Startup Delay: %02x : %d sec\n", -			   LanRecord.data[0],LanRecord.data[0]); -        if (!fmBMC) { -		   ret = GetPefEntry(0x04, 0,(PEF_RECORD *)&LanRecord); -		   if (ret == 0) printf("PEF Alert Startup Delay: %02x: %d sec\n", -			   LanRecord.data[0],LanRecord.data[0]); -		   /* fmBMC gets cc=0x80 here */ -        } -        /* note that ndest should be read from lan param 17 below. */ -        for (i = 1; i <= ndest; i++) -        { -           ret = GetPefEntry(0x09, (ushort)i,(PEF_RECORD *)&LanRecord); -           if (ret == 0) { -            mystr[0] = 0; -            j = LanRecord.data[2]; -            if (LanRecord.data[1] & 0x08) { -               sprintf(mystr,"Chan[%d] Dest[%d] ",((j & 0xf0) >> 4),(j & 0x0f)); -               strcat(mystr,"Enabled "); -            } else strcpy(mystr,"Disabled "); -            printf("PEF Alert Policy[%d]: %02x %02x %02x %02x : %s\n",i, -				LanRecord.data[0], LanRecord.data[1],  -				LanRecord.data[2], LanRecord.data[3],mystr); -           } -        } /*endfor ndest*/ -       } /*endif fpefok*/ -     } /*endif not canonical*/ - -     if (fpefenable && !freadonly) { /* fenable or fdisable */ -       if (fSetPEFOks) pefadd = 5; -       else pefadd = 2; -       sz = (pefnum - 1) + pefadd + fCustomPEF; -       printf("\n%s, SetPefEntry(1-%d) ...\n",progname,sz); -       if (fdebug) printf("pefnum = %d, pefmax = %d\n",pefnum,pefmax); -       for (idx = 1; idx <= pefmax; idx++) -       { -	 // Set & Enable all PEF records -         memset(&PefRecord.rec_id,0,sizeof(PEF_RECORD)); -         PefRecord.rec_id  = (uchar)idx; /* next record, or user-specified */ -         if (idx < pefnum) {  /* pefnum defaults to 12.(0x0c) */ -            if (pef_array[idx-1][7] == 0) /*empty pef record, set to default*/ -               memcpy(&PefRecord.rec_id,pef_defaults[idx-1],sizeof(PEF_RECORD)); -	        else  { /* set config however it was previously */ -               memcpy(&PefRecord.rec_id,pef_array[idx-1],sizeof(PEF_RECORD)); -               if (PefRecord.severity == 0)  -                  PefRecord.severity = pef_defaults[idx-1][4]; -            } -         } else if ((idx == pefnum) &&  /* new OS Crit Stop entry */ -	            (PefRecord.sensor_type == 0)) { -            // Set PEF values for 0x20, OS Critical Stop event  -            PefRecord.severity      = PEF_SEV_CRIT; -            PefRecord.genid1        = 0xff; -            PefRecord.genid2        = 0xff; -            PefRecord.sensor_type   = 0x20; /* OS Critical Stop */ -            PefRecord.sensor_no     = 0xff; -            PefRecord.event_trigger = 0x6f; -            PefRecord.data1         = 0xff; -            PefRecord.mask1         = 0x00; -         } else if ((idx == pefnum+1) &&  /* new Power Redundancy entry */ -	            (PefRecord.sensor_type == 0)) { -            // Set PEF values for 0x09/0x02/0x0b/0x41, Power Redundancy Lost  -            PefRecord.severity      = PEF_SEV_WARN; -            PefRecord.genid1        = 0xff; -            PefRecord.genid2        = 0xff; -            PefRecord.sensor_type   = 0x09;  /* Power Unit */ -            PefRecord.sensor_no     = 0xff;  /* usu 01 or 02 */ -            PefRecord.event_trigger = 0x0b;  /* event trigger */ -            PefRecord.data1         = 0x02;  /* 02 -> 41=Redundancy Lost */ -            PefRecord.mask1         = 0x00; -		 } else if (fSetPEFOks && idx == (pefnum+2)) { -            PefRecord.severity      = PEF_SEV_OK; -            PefRecord.genid1        = 0xff; -            PefRecord.genid2        = 0xff; -            PefRecord.sensor_type   = 0x09;  /* Power Unit, Redund OK */ -            PefRecord.sensor_no     = 0xff;  /* usu 01 or 02 */ -            PefRecord.event_trigger = 0x0b;  /* event trigger */ -            PefRecord.data1         = 0x01;  /* 01 -> 40=Redundancy OK */ -            PefRecord.mask1         = 0x00; -		 } else if (fSetPEFOks && idx == (pefnum+3)) { -            PefRecord.severity      = PEF_SEV_OK; -            PefRecord.genid1        = 0xff; -            PefRecord.genid2        = 0xff; -            PefRecord.sensor_type   = 0x01;  /* Temp OK */ -            PefRecord.sensor_no     = 0xff;  /* usu 01 or 02 */ -            PefRecord.event_trigger = 0x81;  /* event trigger */ -            PefRecord.data1         = 0x95;  /* 95 -> 50(NC),52(Crit) match */ -            PefRecord.mask1         = 0x0a; -		 } else if (fSetPEFOks && idx == (pefnum+4)) { -            PefRecord.severity      = PEF_SEV_OK; -            PefRecord.genid1        = 0xff; -            PefRecord.genid2        = 0xff; -            PefRecord.sensor_type   = 0x02;  /* Voltage OK */ -            PefRecord.sensor_no     = 0xff;  /* usu 01 or 02 */ -            PefRecord.event_trigger = 0x81;  /* event trigger */ -            PefRecord.data1         = 0x95;  /* 95 -> 50(NC),52(Crit) match */ -            PefRecord.mask1         = 0x0a; -		 } else if (fCustomPEF && idx == (pefnum+pefadd)) { -            /* user entered 10 or 18 PEF entry bytes */ -            PefRecord.action        = custPEF[0]; -            PefRecord.policy        = custPEF[1]; -            PefRecord.severity      = custPEF[2]; -            PefRecord.genid1        = custPEF[3]; -            PefRecord.genid2        = custPEF[4]; -            PefRecord.sensor_type   = custPEF[5]; -            PefRecord.sensor_no     = custPEF[6]; -            PefRecord.event_trigger = custPEF[7]; -            PefRecord.data1         = custPEF[8]; -            PefRecord.mask1         = custPEF[9]; -		    memcpy(&PefRecord.action,custPEF,18);  -		 } else { -            memcpy(&PefRecord.rec_id,pef_array[idx-1],sizeof(PEF_RECORD)); -            if (PefRecord.sensor_type == 0) continue; /* if reserved, skip it */ -         } -		 if (fdebug && (PefRecord.rec_id != idx)) { -		    /* memcpy from pef_defaults or pef_array clobbered rec_id */ -		    printf("Warning: SetPef idx=%d, rec_id=%d\n",idx,PefRecord.rec_id); -            PefRecord.rec_id  = (uchar)idx; /*fix it*/ -		 } -         if (fdisable) { -            /* Disable all PEF rules */ -		    if (idx >= pefnum) PefRecord.fconfig = 0x00; /*disabled, software*/ -		    else PefRecord.fconfig = 0x40;               /*disabled, preset */ -            PefRecord.action   = 0x00; -            PefRecord.policy   = 0x00; -		 } else {    /*fenable*/ -            if (PefRecord.sensor_type != 0) { /* not an empty PEF entry */ -              /* Enable all non-empty PEF rules */ -		      if (fCustomPEF && (idx == (pefnum+pefadd))) { -                 PefRecord.action   = custPEF[0]; -                 PefRecord.policy   = custPEF[1]; -              } else { -                 PefRecord.action   = 0x01;  /*Alert*/ -                 PefRecord.policy   = 0x01;  /*see Alert Policy #1*/ -              } -		      if (idx < pefnum) { /* special handling for presets, 1 thru 11 */ -	             PefRecord.fconfig  = 0x80;    /* enabled, software */ -                 ret = SetPefEntry(&PefRecord); -                 if (fdebug)  -                     printf("SetPefEntry(%d/80) ret=%d\n",PefRecord.rec_id,ret); -	             // if (ret != 0) { nerrs++; lasterr = ret; } -	             // else ngood++; -	             PefRecord.fconfig  = 0xC0;     /* enabled, preset */ -		      } else { -		         PefRecord.fconfig  = 0x80;         /* enabled, software */ -		      } -		    }  /*endif not empty*/ -		 } -         {  // Show the new PEF record before setting it. -            pc = (uchar *)&PefRecord; -            sz = 21; -            printf("PEFilter(%d): ",PefRecord.rec_id); -            for (i = 0; i < sz; i++) printf("%02x ",pc[i]); -                  printf("\n"); -         }  -         ret = SetPefEntry(&PefRecord); -         if (fdebug)  -             printf("SetPefEntry(%d) ret = %d\n", PefRecord.rec_id,ret);  -		 if (ret != 0) { nerrs++; lasterr = ret; } -		 else ngood++; -       }  /*end for*/ -      } -     }  /*end if not fIPMI10*/ - -     if (!fcanonical)  -        printf("\n%s, GetLanEntry for channel %d ...\n",progname,lan_ch); -     idest = 1; -     for (idx = 0; idx < NLAN; idx++) -     { -	 int ival; -	 if (fcanonical && (canon_param[idx] == 0)) continue; -         if (idx == 8 || idx == 9) continue;	  /* not implemented */ -	 ival = lanparams[idx].cmd; -         if (ival >= 96 && ival <= 98) continue;  /* not implemented */ -	 if (ival >= 102 && ival <= 108) { /*custom IPv6 parameters*/ -	     if (fipv6 == 0) continue;  /*skip these*/ -	 } -	 if (ival == 194 && vend_id == VENDOR_KONTRON) { /*oem hostname parm*/ -	     lanparams[idx].sz = 36; -	     strcpy(lanparams[idx].desc,"IPMI Hostname"); -	 } else if (ival >= 192 && ival <= 194) { /*custom DHCP parameters*/ -	     if (vend_id != VENDOR_INTEL) continue; -	     if (fmBMC || fiBMC || fcanonical) continue;  /*skip these*/ -	 } -	 if (ival >= 20 && ival <= 25) { -            if (!fIPMI20) continue;  /*VLAN params 20-25, fIPMI20 only/opt*/ -	 } -	 if ((ndest == 0) && (ival >= 18 && ival <= 19)) continue; /*skip dest*/ -	 if (ival == 11) {  /*grat arp interval*/ -            if (vend_id == VENDOR_SUPERMICROX) continue; -            if (vend_id == VENDOR_SUPERMICRO) continue; -	 } -         if (ival == 14 || ival == 15) {  /*secondary gateway is optional*/ -	    if (vend_id == VENDOR_KONTRON) continue; -	 } -         if (ival == 201) {  /*Get Channel Access*/ -             ret = ShowChanAcc(lan_ch); -	 } else { -	     if (ival == 18 || ival == 19) {  /*dest params*/ -			if (ndest == 0) continue;  /*skip if ndest==0 */ -			bset = (uchar)idest;  /* dest id = 1 thru n */ -	     } else bset = 0; -             ret = GetLanEntry((uchar)ival, bset, &LanRecord); -	 } -     if (ret == 0) {    // Show the LAN record -            pc = (uchar *)&LanRecord; -            sz = lanparams[idx].sz;  -	   	if (ival == 18) {  /*skip if invalid dest type param*/ -			if ((idest > 1) && (pc[2] == 0)) { idest = 1; continue; } -	    } else if (ival == 19) {  /*skip if invalid dest addr param*/ -			if ((idest > 1) && !IpIsValid(&pc[3])) { idest = 1; continue; } -	    } -	    if (ival == 201) ;  /* did it above */ -        else { -		if (fcanonical) { -   			if ((ival == 19) && (idest > 1)) ; /*skip it*/ -   			else { -				j = strlen_(lanparams[idx].desc); -				// (ival < 7) || (ival == 19) || ival == 102) -				if (j <= 12) pstr = pspace3; -				else pstr = pspace2;  -				printf("Channel %d %s %s%c ",lan_ch, -					lanparams[idx].desc,pstr,bdelim); -			} -		} else -			printf("Lan Param(%d) %s: ",ival,lanparams[idx].desc); -	    } -	    if (ival == 1) { -			authmask = pc[0]; /* auth type support mask */ -			/* if (fmBMC) authmask is usually 0x15, else 0x14 */ -            } else if (ival == 3) { -                if (IpIsValid(pc)) memcpy(bmcmyip,pc,4); -	    } else if (ival == 5) { -			if (MacIsValid(pc)) memcpy(bmcmymac,pc,MAC_LEN); -	    } else if (ival == 6) { -			if (SubnetIsValid(pc)) memcpy(bmcsubnet,pc,4); -			/* else if invalid, leave default as 255.255.255.0 */ -	    //} else if (ival == 7) {  -	    //   if (pc[0] >= 30) memcpy(bparm7,pc,3); -	    } else if (ival == 17)  {  /* num dest */ -			ndest = pc[0];  /* save the number of destinations */ -	    } else if (ival == 12)  {  /* gateway addr */ -                if (IpIsValid(pc)) memcpy(bmcgwyip,pc,4); -	    } else if (ival == 13)  {  /* gateway mac */ -			if (MacIsValid(pc)) memcpy(bmcgwymac,pc,MAC_LEN); -	    } else if (ival == 19)  {  /* dest addr */ -                if (IpIsValid(&pc[3])) memcpy(bmcdestip,&pc[3],4); -			if (MacIsValid(&pc[7])) memcpy(bmcdestmac,&pc[7],MAC_LEN); -	    } else if (ival == 22) { /*Cipher Suite Support*/ -			nciphers = pc[0]; -	    } -	    /* now start to display data */ -	    if (ival == 16) { printf("%s \n",pc);      /* string */ -	    } else if (ival == 194 && vend_id == VENDOR_KONTRON) {  -			printf("%s \n",pc);      /* string */ -	    } else if (ival == 201) {  ;      /* did it above */ -	    } else {  /* print results for all other ival's */ -	      pstr = ""; /*interpreted meaning*/ -	      if (fcanonical) { -			switch(ival) { -  			case 4:   /*param 4, ip src*/ -   				if (pc[0] == SRC_STATIC) pstr = "Static";  /*0x01*/ -   				else if (pc[0] == SRC_DHCP) pstr = "DHCP"; /*0x02*/ -   				else if (pc[0] == SRC_BIOS) pstr = "BIOS"; /*0x03*/ -   				else  pstr = "Other";  -   				printf("%s\n",pstr); -   				break; -  			case 5:   /*param 5, mac addr*/ -  			case 13:  /*param 6, def gwy mac*/ -   				printf("%02x:%02x:%02x:%02x:%02x:%02x\n",  -					pc[0], pc[1], pc[2], pc[3], pc[4], pc[5]); -   				break; -  			case 3:   /*param 4, ip address*/ -  			case 6:   /*param 6, subnet mask*/ -  			case 12:  /*param 12, def gwy ip*/ -  			case 14:  /*param 14, sec gwy ip*/ -  			case 192: /*param 192, DHCP svr ip*/ -   				printf("%d.%d.%d.%d\n",pc[0], pc[1], pc[2], pc[3]); -   				break; -  			case 19:  /*param 19, dest address*/ -   				if (idest == 1) { -      				printf("IP=%d.%d.%d.%d " -						"MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",  -						pc[3], pc[4], pc[5], pc[6], -						pc[7], pc[8], pc[9], pc[10], pc[11], pc[12]); -   				} -   				break; -  			case 102:  /*param 102, IPv6 enable*/ -				if (pc[0] == 0x01) printf("enabled\n"); -				else printf("disabled\n"); -				break; -  			default: -				printf("%02x \n",pc[0]); -				break; -			} -	      } else {  /*not canonical */ -	  		if (ival == 3 || ival == 6 || ival == 12 || ival == 14  -    			|| ival == 192) { -   				printf("%d.%d.%d.%d",pc[0], pc[1], pc[2], pc[3]); -	  		} else if (ival == 23) { /*Cipher Suites*/ -				for (i = 1; i <= nciphers; i++) { -				   if (pc[i] == 0) ncipher0 = pc[i]; -				   printf("%2d ",pc[i]); -   				} -	  		} else if (ival == 24) { /*Cipher Suite Privi Levels*/ -   j = 0; -   for (i = 1; i < 9; i++) { -	char c1, c2; -	char *p; -	p = parse_priv((pc[i] & 0x0f)); -	c1 = p[0]; -	p = parse_priv((pc[i] & 0xf0) >> 4); -	c2 = p[0]; -	rgciphers[j++] = (pc[i] & 0x0f); -	rgciphers[j++] = ((pc[i] & 0xf0) >> 4); -	if ((i*2) >= nciphers) c2 = ' '; -	printf(" %c  %c ",c1,c2); -	if ((i*2) > nciphers) break; -   } -} else -                for (i = 0; i < sz; i++)  -{ -  /* print in hex, decimal, or string, based on ival */ -  if (ival == 1)  {   /* Auth type support */ -     pstr = &mystr[0]; -     getauthstr(authmask,pstr); -     printf("%02x ",authmask); -  } else if (ival == 4)  {   /* IP addr source */ -     if (pc[i] == SRC_STATIC) pstr = "Static";  /*0x01*/ -     else if (pc[i] == SRC_DHCP) pstr = "DHCP"; /*0x02*/ -     else if (pc[i] == SRC_BIOS) pstr = "BIOS"; /*0x03*/ -     else  pstr = "Other";  -     printf("%02x ",pc[i]); -  } else if (ival == 10)  {   /* grat ARP */ -                     mystr[0] = 0; -     if (pc[i] == 0) strcat(mystr,"ARP disabled "); -     else if (pc[i] & 0x01) strcat(mystr,"Grat-ARP enabled"); -     else strcat(mystr,"Grat-ARP disabled"); -     if (pc[i] & 0x02) strcat(mystr,", ARP-resp enabled"); -     pstr = &mystr[0]; -     printf("%02x ",pc[i]); -  } else if (ival == 11)  {   /* grat ARP interval */ -     float f; -     f = (float)pc[i] / (float)2; /*500msec increments*/ -     sprintf(mystr,"%.1f sec",f); -     pstr = &mystr[0]; -     printf("%02x ",pc[i]); -  } else if (ival == 19)  {  /* dest addr */ -     if (i > 2 && i < 7) { -	char *sepstr; -        if (i == 3) printf("["); -	if (i == 6) sepstr = "] "; -	else if (i >=3 && i < 6) sepstr = "."; -	else sepstr = " "; -      printf("%d%s",pc[i],sepstr);  /* IP address in dec */ -      } -      else printf("%02x ",pc[i]);  /* show mac/etc. in hex */ -   } -	 	   else printf("%02x ",pc[i]);  /* show in hex */ -	        }  /*end for*/ -if (ival == 2) {  /*Auth type enables*/ -     pstr = &mystr[0]; -     i = 0; -     if (lan_ch > 0) i = lan_ch - 1;  -     getauthstr(pc[i],pstr); -} -	        if (pstr[0] != 0) printf(": %s\n",pstr); -	        else printf("\n"); -	      }  /*end-else not canonical*/ -	    }  /*end-else others*/ -	    if (ival == 18 || ival == 19) { -if (idest < ndest) { -   idest++; -   idx--;  /* repeat this param*/ -} else idest = 1; -	    } -         } else {  /* ret != 0 */ -	    if (ival >= 20 && ival <= 25) { /*if errors, optional*/ -	       if (fdebug) printf("GetLanEntry(%d), ret = %d\n",ival,ret); -	    } else   -	       printf("GetLanEntry(%d), ret = %d\n",ival,ret); -	    if (ival == 17)  ndest = 0;  /*error getting num dest*/ -	 } -     }  /*end for*/ -     if (fRomley || fGrantley) {  /*get LAN Failover param*/ -	 uchar b; -         ret = lan_failover_intel(0xFF,(uchar *)&b); -         if (ret != 0)  -            printf("Intel Lan Failover, ret = %d\n",ret); -	 else { -	    if (b == 1) pstr = "enabled"; -	    else pstr = "disabled"; -	    if (fcanonical)  -                 printf("Intel Lan Failover  %s%c %s\n", -	pspace3, bdelim,pstr); -	    else printf("Intel Lan Failover %s%c %02x %c %s\n", -	pspace2, bdelim,b,bdelim,pstr); -	 } -     } -     if (vend_id == VENDOR_SUPERMICROX || vend_id == VENDOR_SUPERMICRO) { -        ret = oem_supermicro_get_lan_port(&bset); -	if (ret == 0) { -	    pstr = oem_supermicro_lan_port_string(bset); -	    if (fcanonical)  -                 printf("SuperMicro Lan Interface  %s%c %s\n", -	pspace2, bdelim,pstr); -	    else printf("SuperMicro Lan Interface  %c %02x    %c %s\n", -	 bdelim,bset,bdelim,pstr); -	} else { -	    if (fdebug) printf("oem_supermicro_get_lan_port error %d\n",ret); -	    ret = 0; /*may not be supported on all smc plaforms*/ -	}  -     } -     // if (fmBMC) lan_access = 0x04;  /*Admin*/ -     // else lan_access = 0x04; /*Admin*/ -     if (!fIPMI10) {  /* Get SOL params */ -	ret = GetSerialOverLan(lan_ch,0,0); -	if (ret != 0) printf("GetSOL error %d\n",ret); -     } -     for (i = 1; i <= show_users; i++) -	   GetUser((uchar)i,lan_ch); - -     if (fgetser && !fcanonical) { -       printf("\n%s, GetSerEntry ...\n",progname); -       if (fmBMC)   /* mBMC doesn't support serial */ -	  printf("No serial channel support on this platform\n");	 -       else -       for (idx = 0; idx < NSER; idx++) { -   	 int ival; -         // if (idx == 9) continue; /* not implemented */ -	 ival = serparams[idx].cmd; -         if (ival == 201) { -             ret = GetChanAcc(ser_ch, 0x40, &LanRecord); -	 } else { -             ret = GetSerEntry((uchar)ival, &LanRecord); -	 } -         if (ret == 0) {    // Show the SER record -            pc = (uchar *)&LanRecord; -            sz = serparams[idx].sz;  -            printf("Serial Param(%d) %s: ",ival,serparams[idx].desc); -            if (idx == 10) {  /* modem init string */ -                pc[sz] = 0; -                printf("%02x %s\n",pc[0],&pc[1]); -                } -            else if ((idx >= 11 && idx <= 13) || idx == 15) {  /* strings */ -                printf("%s\n",pc); -                } -            else { -              for (i = 0; i < sz; i++) { -printf("%02x ",pc[i]);  /* show in hex */ -} -              printf("\n"); -	    } /*end else*/ -	 } -       }  /*end for*/ -      }  /*endif fgetser*/ - -      if (!freadonly)  /* Set IPMI LAN enable/disable params. */ -      { -       if (fipmilan)  /* Sets not valid via ipmi_lan if same channel. */ -         printf("\nWarning: Setting LAN %d params while using a LAN channel.\n",		lan_ch); - -       {    -         if (fenable && (fsharedMAC==0) && !lan_dhcp) {  -	    /* must have an IP from -I option */ - 	    if (!IpIsValid(rgmyip)) {  /* if not user-specified */ -               if (IpIsValid(bmcmyip)) { -                  memcpy(rgmyip,bmcmyip,4); -                  if (fdebug) printf("Using current IP %d.%d.%d.%d\n", -			bmcmyip[0], bmcmyip[1], -			bmcmyip[2], bmcmyip[3]); -               } else { -                  printf("\nNot shared BMC LAN, must specify a unique " -                      "IP address via -I\n"); -  ret = ERR_BAD_PARAM; -                  goto do_exit; -               } -            } -         } -	 /* Set LAN parameters.  fenable or fdisable */ -         printf("\n%s, SetLanEntry for channel %d ...\n",progname,lan_ch); -	 /* use ifname to resolve MAC addresses below */ -         if (fdisable) { -	     if (!fIPMI10) { -                ret = DisablePef(alertnum); -                printf("DisablePef, ret = %d\n",ret); -	        if (ret != 0) { nerrs++; lasterr = ret; } -else ngood++; -	     } -	     if (lan_user != 0) { -	        j = DisableUser(lan_user,lan_ch); /*disable this lan user*/ -                printf("DisableUser(%d), ret = %d\n",lan_user,j); -	        if (j != 0) { nerrs++; lasterr = j; } -	        else ngood++; -	     } -	    LanRecord.data[0] = 0x01;    /* static IP address source */ -            ret = SetLanEntry(4, &LanRecord, 1); -            printf("SetLanEntry(4), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    /* clear the BMC IP address */ -	    memset(&LanRecord,0,4); -            ret = SetLanEntry(3, &LanRecord, 4); -            printf("SetLanEntry(3), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    /* clear the gateway IP address */ -	    memset(&LanRecord,0,4); -            ret = SetLanEntry(12, &LanRecord, 4); -            printf("SetLanEntry(12), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    /* clear the gateway MAC address */ -	    memset(&LanRecord,0,6); -	    ret = SetLanEntry(13, &LanRecord, 6); -            printf("SetLanEntry(13), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -         } else if (fdisableSOL) { -	    ret = SetupSerialOverLan(0); /*disable*/ -	    SELprintf("SetupSerialOverLan: ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	 } else {  /*fenable*/ -	     uchar chanctl; -	     if (bmcpefctl != 0) chanctl = chan_pefon; /*previously on*/ -	     else chanctl = chan_pefoff; -             ret = SetChanAcc(lan_ch, 0x80, chanctl); -             if (fdebug) printf("SetChanAcc(lan/active), ret = %d\n",ret); -	     if (ret != 0) { nerrs++; lasterr = ret; } -	     else ngood++; -             ret = SetChanAcc(lan_ch, 0x40, chanctl); -             if (fdebug) printf("SetChanAcc(lan/nonvol), ret = %d\n",ret); -	     if (ret != 0) { nerrs++; lasterr = ret; } -	     else ngood++; -             if (flansecure) { -	        j = DisableUser(0,lan_ch); /*disable the default null user*/ -                printf("DisableUser(0), ret = %d\n",j); -             } -	     ret = SetUser(lan_user,myuser,passwordData,lan_ch); -             printf("SetUser(%d), ret = %d\n",lan_user,ret); -	     if (ret != 0) { nerrs++; lasterr = ret; } -	     else ngood++; -	 } -	 if (fdisable && (vend_id == VENDOR_SUPERMICROX -	|| vend_id == VENDOR_SUPERMICRO) ) { -	     failover_enable = 0; /*dedicated*/ -             ret = oem_supermicro_set_lan_port(failover_enable); -             printf("Set SuperMicro Lan port to %s, ret = %d\n", -	            oem_supermicro_lan_port_string(failover_enable),ret); -	     if (ret != 0) { nerrs++; lasterr = ret; } -	 } - -	 if (fdisable || fdisableSOL) {  -// if (nerrs > 0) printf("Warning: %d errors occurred\n",nerrs); -                goto do_exit; -	 } - -	 if (authmask == 0) authmask = 0x17; /*if none from GetLanEntry(1)*/ -	 LanRecord.data[0] = (bAuth & authmask); /*Callback level*/ -	 LanRecord.data[1] = (bAuth & authmask); /*User level    */ -	 LanRecord.data[2] = (bAuth & authmask); /*Operator level*/ -	 LanRecord.data[3] = (bAuth & authmask); /*Admin level   */ -	 LanRecord.data[4] = 0;         /*OEM level*/ -	 if (fdebug) printf("SetLanEntry(2): %02x %02x %02x %02x %02x\n", -	 		LanRecord.data[0],LanRecord.data[1],LanRecord.data[2], -	 		LanRecord.data[3],LanRecord.data[4]); -         ret = SetLanEntry(2, &LanRecord, 5); -	 printf("SetLanEntry(2), ret = %d\n",ret); -	 if (ret != 0) { nerrs++; lasterr = ret; } -	 else ngood++; - -         /* Get the values to use from Linux eth0, etc. */ -         ret = Get_IPMac_Addr(); -	 if (lan_dhcp) {  /* use DHCP */ -	    LanRecord.data[0] = SRC_DHCP;   /* BMC running DHCP */ -                /* = SRC_BIOS;  * address source = BIOS using DHCP */ -            ret = SetLanEntry(4, &LanRecord, 1); -            printf("SetLanEntry(4), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -            if (MacIsValid(rgmymac)) { -	       memcpy(&LanRecord,rgmymac,6); -               ret = SetLanEntry(5, &LanRecord, 6); -               if (ret == 0x82) {   /*BMC may not allow the MAC to be set*/ -                  if (fdebug)  -     printf("SetLanEntry(5), ret = %x cannot modify MAC\n",ret); -               } else { -  printf("SetLanEntry(5), ret = %d\n",ret); -	          if (ret != 0) { nerrs++; lasterr = ret; } -	          else ngood++; -	       } -            } - -	    /* DHCP also relates to OEM LAN params 192, 193, 194 */ -	    if ((vend_id == VENDOR_INTEL) && !fmBMC && !fiBMC)  -	    {   /*DHCP params 192-194 are Intel only*/ -	       if (IpIsValid(rgmyip))  -	       { -	          /* Set DHCP Server IP in param 192 from -I param. */ -	  	  memcpy(&LanRecord,rgmyip,4); -  ret = SetLanEntry(192, &LanRecord, 4); -  printf("SetLanEntry(192), ret = %d\n",ret); -	          if (!MacIsValid(rgdhcpmac))  /* if MAC not set yet */ -                     ret = Get_Mac(rgmyip,rgdhcpmac,NULL); -	          if (ret == 0) { -	             memcpy(&LanRecord,rgdhcpmac,MAC_LEN); -                     ret = SetLanEntry(193, &LanRecord, MAC_LEN); -                     printf("SetLanEntry(193), ret = %d\n",ret); -	          }  -	       }  -	       LanRecord.data[0] = 0x01;  /*enable DHCP*/ -               ret = SetLanEntry(194, &LanRecord, 1); -               printf("SetLanEntry(194), ret = %d\n",ret); -	       if (ret != 0) { nerrs++; lasterr = ret; } -	       else ngood++; -            } -	 } else {    /* use static IP */ -          printf("LAN%d (%s)\tip=%d.%d.%d.%d mac=%02x:%02x:%02x:%02x:%02x:%02x\n", -lan_ch,ifname, rgmyip[0], rgmyip[1], rgmyip[2], rgmyip[3],  -rgmymac[0], rgmymac[1], rgmymac[2], rgmymac[3],  -rgmymac[4], rgmymac[5]); -	  if (IpIsValid(rgmyip)) { -	    if (lan_ch != gcm_ch) {  /*skip if gcm*/ -	       LanRecord.data[0] = 0x00; /*disable grat arp while setting IP*/ -               ret = SetLanEntry(10, &LanRecord, 1); -	       if (fdebug) printf("SetLanEntry(10,0), ret = %d\n",ret); -	       if (ret != 0) { nerrs++; lasterr = ret; } -	    } -	    LanRecord.data[0] = 0x01;    /* static IP address source */ -            ret = SetLanEntry(4, &LanRecord, 1); -            printf("SetLanEntry(4), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    memcpy(&LanRecord,rgmyip,4); -            ret = SetLanEntry(3, &LanRecord, 4); -            printf("SetLanEntry(3), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -            if (MacIsValid(rgmymac)) { -	       memcpy(&LanRecord,rgmymac,6); -               ret = SetLanEntry(5, &LanRecord, 6); -               if (ret == 0x82) { -   -				/* Do not show anything, not an error if BMC does not -     allow the BMC MAC to be changed. */ -                  if (fdebug)  -      -				printf("SetLanEntry(5), ret = %x cannot modify MAC\n",ret); -               } else { -   -				printf("SetLanEntry(5), ret = %d\n",ret); -	          if (ret != 0) { nerrs++; lasterr = ret; } -	          else ngood++; -	       } -            } -            if (!SubnetIsValid(rgsubnet))  /* not specified, use previous */ -			memcpy(rgsubnet,bmcsubnet,4); -	    	memcpy(&LanRecord,rgsubnet,4); -            ret = SetLanEntry(6, &LanRecord, 4); -            printf("SetLanEntry(6), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    if (vend_id != VENDOR_PEPPERCON) { -			/* may want to check bparm7 here */ -			LanRecord.data[0] = parm7[0]; /*IPv4 header, TTL */ -			LanRecord.data[1] = parm7[1]; /*IPv4 header, Flags */ -			LanRecord.data[2] = parm7[2]; /*IPv4 hdr, Precedence/Service */ -			ret = SetLanEntry(7, &LanRecord, 3); -			printf("SetLanEntry(7), ret = %d\n",ret); -			if (ret != 0) { nerrs++; lasterr = ret; } -	        else ngood++; -	    } -            /* if lan_ch == 3, gcm gets error setting grat arp (ccode=0xCD) */ -	    if (lan_ch != gcm_ch) {  /*skip if gcm*/ -	       /* 01=enable grat arp, 02=enable arp resp, 03=both */ -	       LanRecord.data[0] = arp_ctl;        /*grat arp*/ -               ret = SetLanEntry(10, &LanRecord, 1); -	       printf("SetLanEntry(10,%x), ret = %d\n",arp_ctl,ret); -	       if (ret != 0) { nerrs++; lasterr = ret; } -	       else ngood++; -	    } -	    LanRecord.data[0] = arp_interval;   /*grat arp interval*/ -            ret = SetLanEntry(11, &LanRecord, 1); -	    printf("SetLanEntry(11), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    if ((vend_id == VENDOR_INTEL) && !fmBMC && !fiBMC) { -	       LanRecord.data[0] = 0x00;    /*disable DHCP*/ -               ret = SetLanEntry(194, &LanRecord, 1); -               printf("SetLanEntry(194), ret = %d\n",ret); -	       if (ret != 0) { nerrs++; lasterr = ret; } -	       else ngood++; -	    } -	  } else {      /* error, don't continue */ -            printf("Missing IP Address, can't continue. Use -I to specify\n"); -            ret = ERR_BAD_PARAM; -            goto do_exit; -	  } -	  if (vend_id == VENDOR_KONTRON && rghostname[0] != 0) { -	    /* set the IPMI Hostname if specified */ -	    sz = strlen_(rghostname); -	    /* LanRecord is larger than rghostname, bounds ok */ -	    strncpy((char *)&LanRecord.data,rghostname,sz); -            ret = SetLanEntry(194, &LanRecord, sz); -            printf("SetLanEntry(194), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -            else { -	       LanRecord.data[0] = 0x31;  -               ret = SetLanEntry(195, &LanRecord, 1); /*re-read hostname*/ -               // printf("SetLanEntry(195), ret = %d\n",ret); -	       // if (ret != 0) { nerrs++; lasterr = ret; } -	    } -	  } -          if (IpIsValid(rggwyip)) {  -	    if (!MacIsValid(rggwymac)) /* if gwy MAC not set by user */ -               ret = Get_Mac(rggwyip,rggwymac,NULL); -            printf("gateway \tip=%d.%d.%d.%d mac=%02x:%02x:%02x:%02x:%02x:%02x\n", -				rggwyip[0], rggwyip[1], rggwyip[2], rggwyip[3], -				rggwymac[0], rggwymac[1], rggwymac[2], rggwymac[3],  -				rggwymac[4], rggwymac[5]); -	    if (!SubnetIsSame(rgmyip,rggwyip,rgsubnet)) { -               printf("WARNING: IP Address and Gateway are not on the same subnet," -" setting Gateway to previous value\n"); -	       memcpy(rggwyip,bmcgwyip,4); -	       memcpy(rggwymac,bmcgwymac,6); -	    } - -	    /* Set the Default Gateway IP & MAC */ -	    memcpy(&LanRecord,rggwyip,4); -            ret = SetLanEntry(12, &LanRecord, 4); -            printf("SetLanEntry(12), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    if (!MacIsValid(rggwymac)) { /* if gwy MAC not resolved */ -			printf("  Warning: Gateway MAC address was not resolved! " -				"Check %s interface, use -i ethN, or use -H gwymac.\n", -				ifname); -			memcpy(&LanRecord,bmcgwymac,6); -	    } else { -			memcpy(&LanRecord,rggwymac,6); -	    } -			ret = SetLanEntry(13, &LanRecord, 6); -			printf("SetLanEntry(13), ret = %d\n",ret); -	        if (ret != 0) { nerrs++; lasterr = ret; } -	        else ngood++; -	  } -          if (IpIsValid(rggwy2ip)) {  -	    if (!MacIsValid(rggwy2mac)) /* if gwy2 MAC not set by user */ -               ret = Get_Mac(rggwy2ip,rggwy2mac,NULL); -	    /* Set the Secondary Gateway IP & MAC */ -	    memcpy(&LanRecord,rggwy2ip,4); -            ret = SetLanEntry(14, &LanRecord, 4); -            printf("SetLanEntry(14), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    memcpy(&LanRecord,rggwy2mac,6); -            ret = SetLanEntry(15, &LanRecord, 6); -	    printf("SetLanEntry(15), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	  } -	 } /* end-else static IP */ -         if (flansecure) {  /* disable cipher 0 */ -            char c1, c2; -	    memset(&LanRecord,0,12); -	    j = 1; -	    for (i = 0; i < nciphers; i+=2) { -			c1 = rgciphers[i]; -			c2 = rgciphers[i+1]; -			/* 0x0f may be vendor-specific, 0x00 = Reserved/Unused */ -			if (i == ncipher0)     c1 = 0x00;  -			if ((i+1) == ncipher0) c2 = 0x00; -			LanRecord.data[j++] = (c2 << 4) | c1; -	    } -            ret = SetLanEntry(24, &LanRecord, 9); -	    printf("SetLanEntry(24) disable cipher0, ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	 } -	 ret = SetupSerialOverLan(1); /*enable*/ -	 SELprintf("SetupSerialOverLan: ret = %d\n",ret); -	 if (ret != 0) { nerrs++; lasterr = ret; } -	 else ngood++; -	 if (!IpIsValid(rgdestip) && IpIsValid(bmcdestip)) { -            memcpy(rgdestip,bmcdestip,4); -            if (fdebug) printf("Using current dest IP %d.%d.%d.%d\n", -			bmcdestip[0], bmcdestip[1], -			bmcdestip[2], bmcdestip[3]); -         } -	 if (ndest == 0) { -	    if (fdebug) printf("ndest==0, anum=%d rgdestip=%d.%d.%d.%d\n", -			alertnum, rgdestip[0], rgdestip[1], rgdestip[2], rgdestip[3]); -            printf("alert dest \tnot supported\n"); -	 } else if (!IpIsValid(rgdestip)) { -            printf("alert dest \taddress not specified\n"); -	 } else {   /* valid alert dest ip */ -	    if (!MacIsValid(rgdestmac)) /* if dest MAC not set by user */ -               ret = Get_Mac(rgdestip,rgdestmac,NULL); /*try to resolve MAC */ -	    if (!MacIsValid(rgdestmac)) { /* if dest MAC not resolved */ -			printf("  Warning: Alert mac address was not resolved!" -				" Check %s interface or use -i.\n",ifname); -			/* use existing BMC alert dest mac (as best guess) */ -			memcpy(rgdestmac,bmcdestmac,6); -	    } -	    /* show destination data */ -            printf("alert dest %d\tip=%d.%d.%d.%d mac=%02x:%02x:%02x:%02x:%02x:%02x\n", -				alertnum, rgdestip[0], rgdestip[1], rgdestip[2], rgdestip[3], -				rgdestmac[0], rgdestmac[1], rgdestmac[2], rgdestmac[3],  -				rgdestmac[4], rgdestmac[5]); -            printf("snmp community \t%s\n",rgcommunity); -	    /* Only need the SNMP community if there is an Alert Destination */ -	    memset(&LanRecord.data[0], 0, 18);  /* make sure zero-filled */ -	    strcpy((char *)&LanRecord.data[0],rgcommunity); -            ret = SetLanEntry(16, &LanRecord, 18);   -            printf("SetLanEntry(16), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    /* Set Alert Destination Type */ -	    LanRecord.data[0] = alertnum; /* dest id = 1 */ -	    LanRecord.data[1] = 0x00;     /* dest type = PET, no ack */ -	    LanRecord.data[2] = 0x01;     /* ack timeout / retry interval */ -	    LanRecord.data[3] = 0x00;     /* no retries */ -	    // LanRecord.data[4] = 0x69;  -            ret = SetLanEntry(18, &LanRecord, 4); -            printf("SetLanEntry(18), ret = %d\n",ret); -	    if (ret != 0) { nerrs++; lasterr = ret; } -	    else ngood++; -	    {  -			/* Set the Alert Destination IP & MAC (param 19) */ -			LanRecord.data[0] = alertnum; /* dest id = 1 */ -			LanRecord.data[1] = 0x00;  -			LanRecord.data[2] = 0x00;  -			memcpy(&LanRecord.data[3],rgdestip,4); -			memcpy(&LanRecord.data[7],rgdestmac,6); -			ret = SetLanEntry(19, &LanRecord, 13); -			printf("SetLanEntry(19), ret = %d\n", ret); -	        if (ret != 0) { nerrs++; lasterr = ret; } -	        else ngood++; -	    } -	 } /*endif valid alert*/ - -	 /* Now enable PEF since we have an Alert destination. */ -	 if (!fdisable && !fIPMI10 && fpefenable) { /*fpefenable*/ -              ret = EnablePef(alertnum); -              printf("EnablePef, ret = %d\n",ret); -	      if (ret != 0) { nerrs++; lasterr = ret; } -	      else ngood++; -              /* ChanAcc changed, so show it again */ -	      j = ShowChanAcc(lan_ch); -	 } - -	 if ((vlan_enable != PARM_INIT) && (fIPMI20)) { -	    if (vlan_enable == 0) {  /*disable vlan*/ -			LanRecord.data[0] = 0x00; -			LanRecord.data[1] = 0x00; -			ret = SetLanEntry(20, &LanRecord, 2); -			printf("SetLanEntry(20,disable) ret = %d\n", ret); -	        if (ret != 0) { nerrs++; lasterr = ret; } -	        else ngood++; -	    } else {  /*vlan_enable == 1, enable vlan with id */ -			LanRecord.data[0] = (vlan_id & 0x00ff); -			LanRecord.data[1] = ((vlan_id & 0x0f00) >> 8) | 0x80;  -			ret = SetLanEntry(20, &LanRecord, 2); -			printf("SetLanEntry(20,%d), ret = %d\n", vlan_id,ret); -	        if (ret != 0) { nerrs++; lasterr = ret; } -	        else ngood++; -			LanRecord.data[0] = vlan_prio; -			ret = SetLanEntry(21, &LanRecord, 1); -			printf("SetLanEntry(21), ret = %d\n", ret); -	        if (ret != 0) { nerrs++; lasterr = ret; } -	        else ngood++; -	    } -	 } -	 if (failover_enable != PARM_INIT) { -       if (fRomley || fGrantley) { -	     if (failover_enable > 1) failover_enable = 0; /*default*/ -             ret = lan_failover_intel(failover_enable,(uchar *)&i); -             printf("Set Intel Lan Failover (%d), ret = %d\n", -	failover_enable,ret); -	     if (ret != 0) { nerrs++; lasterr = ret; } -	   } else if (vend_id == VENDOR_SUPERMICROX -	|| vend_id == VENDOR_SUPERMICRO) { -	     if (failover_enable > 2) failover_enable = 2; /*default*/ -             ret = oem_supermicro_set_lan_port(failover_enable); -             printf("Set SuperMicro Lan port to %s, ret = %d\n", -	            oem_supermicro_lan_port_string(failover_enable),ret); -	     if (ret != 0) { nerrs++; lasterr = ret; } -	   } -	 } /*endif failover specified*/ -       } /*end-else not via ipmi_lan*/ -      }  /*endif not readonly*/ - -      if (flanstats)  -      {  /* get BMC LAN Statistics */ -#ifdef METACOMMAND -	j = get_lan_stats(lan_ch); -#else -        uchar idata[2]; -        uchar rdata[20]; -        int rlen; -	uchar cc; -	idata[0] = lan_ch; -	idata[1] = 0x00;  /*do not clear stats*/ -	rlen = sizeof(rdata); -        j = ipmi_cmd(GET_LAN_STATS, idata,2, rdata,&rlen, &cc, fdebug);  -	if (j == 0) {  /*show BMC LAN stats*/ -	   ushort *rw; -	   rw = (ushort *)&rdata[0]; -	   printf("IPMI LAN channel %d statistics: \n",lan_ch); -	   printf(" \tReceived IP Packets      = %d\n",rw[0]); -	   printf(" \tRecvd IP Header errors   = %d\n",rw[1]); -	   printf(" \tRecvd IP Address errors  = %d\n",rw[2]); -	   printf(" \tRecvd IP Fragments       = %d\n",rw[3]); -	   printf(" \tTransmitted IP Packets   = %d\n",rw[4]); -	   printf(" \tReceived UDP Packets     = %d\n",rw[5]); -	   printf(" \tReceived Valid RMCP Pkts = %d\n",rw[6]); -	   printf(" \tReceived UDP Proxy Pkts  = %d\n",rw[7]); -	   printf(" \tDropped UDP Proxy Pkts   = %d\n",rw[8]); -	} -#endif -      } - -do_exit: -   ipmi_close_(); -   if (foptmsg) { -      if (fset_ip != 0)  -	printf("WARNING: IP address options were specified, but no -e,-l,-d option.\n"); -      else  -        printf("WARNING: %d options were specified, but no -e,-l,-d option.\n", -nopts); -      printf("Read-only usage assumed.\n"); -   } -   if (nerrs > 0) { -	printf("Warning: %d ok, %d errors occurred, last error = %d\n",ngood,nerrs,lasterr); -	ret = lasterr; -   } -   // show_outcome(progname,ret);  -   return(ret); -}  /* end main()*/ - -/* end ilan.c */ diff --git a/util/ipicmg.c b/util/ipicmg.c index 8019a3f..e463424 100644 --- a/util/ipicmg.c +++ b/util/ipicmg.c @@ -81,7 +81,7 @@  /* Global data */  static char * progname  = "ipicmg"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char   fdebug    = 0;  static char   fset_mc   = 0;  static uint8_t g_bus  = PUBLIC_BUS; diff --git a/util/ipmiutil.c b/util/ipmiutil.c index 26b156a..ffddc86 100644 --- a/util/ipmiutil.c +++ b/util/ipmiutil.c @@ -57,7 +57,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #include "ipmiutil.h"  static char *progname  = "ipmiutil"; -static char *progver   = "3.03"; +static char *progver   = "3.04";  // static char fdebug = 0;  /*int ipmiutil(int argc, char **argv); */ diff --git a/util/ireset.c b/util/ireset.c index 45133fe..3584cb1 100644 --- a/util/ireset.c +++ b/util/ireset.c @@ -108,7 +108,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "ireset";  static uchar  ipmi_maj;  static uchar  ipmi_min; diff --git a/util/isel.c b/util/isel.c index a1d4fdb..9045d62 100644 --- a/util/isel.c +++ b/util/isel.c @@ -162,7 +162,7 @@ typedef struct  #define RDATA_OFFSET    13    //byte offset to the record event data    static char *progname  = "isel"; -static char *progver   = "3.03"; +static char *progver   = "3.04";  #ifdef WIN32  #define IDXFILE   "sel.idx"  static char idxfile[80] = IDXFILE; diff --git a/util/iseltime.c b/util/iseltime.c index 3aa9f27..2f5c7e1 100644 --- a/util/iseltime.c +++ b/util/iseltime.c @@ -78,7 +78,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "iseltime";  static char   fdebug    = 0;  static char   fset      = 0; diff --git a/util/isensor.c b/util/isensor.c index 3de3d38..69d901f 100644 --- a/util/isensor.c +++ b/util/isensor.c @@ -161,7 +161,7 @@ extern int decode_sensor_fujitsu(uchar *sdr,uchar *reading,char *pstring,  extern int decode_sensor_sun(uchar *sdr,uchar *reading,char *pstring,  				int slen);  /*see oem_sun.c*/  extern int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, -				int slen);  /*see oem_supermicro.c*/ +				int slen, int fsimple);  /*see oem_supermicro.c*/  extern int decode_sensor_quanta(uchar *sdr,uchar *reading,char *pstring,  				int slen);  /*see oem_quanta.c*/  extern int decode_sensor_dell(uchar *sdr,uchar *reading,char *pstring, @@ -255,7 +255,7 @@ char *decode_entity_id(int id) {   *  Global Data   ************************/  static char *progname  = "isensor"; -static char *progver   = "3.03"; +static char *progver   = "3.04";  #ifdef WIN32  static char savefile[] = "%ipmiutildir%\\thresholds.cmd";  #else @@ -1952,7 +1952,7 @@ int decode_oem_sensor(uchar *sdr,uchar *reading,char *pstring,int slen)        case VENDOR_MAGNUM:         case VENDOR_SUPERMICRO:         case VENDOR_SUPERMICROX:  -          rv = decode_sensor_supermicro(sdr, reading, pstring, slen); +          rv = decode_sensor_supermicro(sdr, reading, pstring, slen, fsimple);            break;        case VENDOR_QUANTA:             rv = decode_sensor_quanta(sdr, reading, pstring, slen); diff --git a/util/iserial.c b/util/iserial.c index 8bed75c..a087614 100644 --- a/util/iserial.c +++ b/util/iserial.c @@ -155,7 +155,7 @@ typedef struct  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "iserial";  static int    vend_id = 0;  static int    prod_id = 0; diff --git a/util/isol.c b/util/isol.c index 8bd5a2f..fab0994 100644 --- a/util/isol.c +++ b/util/isol.c @@ -165,7 +165,7 @@ void dbglog( char *pattn, ... ); /*local prototype*/  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "isol";  static char  fdebug        = 0;  static char  fpicmg        = 0; diff --git a/util/itsol.c b/util/itsol.c index 8d5ba1b..6997ffe 100644 --- a/util/itsol.c +++ b/util/itsol.c @@ -98,7 +98,7 @@ int   gettimeofday(struct timeval *tv, struct timezone *tz);  extern int verbose;  extern char   fdebug;  /*from ipmicmd.c*/  static char * progname  = "itsol"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static uchar  g_bus  = PUBLIC_BUS;  static uchar  g_sa   = BMC_SA;  static uchar  g_lun  = BMC_LUN; diff --git a/util/iuser.c b/util/iuser.c index 7cbe661..e6a7b29 100644 --- a/util/iuser.c +++ b/util/iuser.c @@ -57,7 +57,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  /* global variables */  static char * progname  = "iuser"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char   fdebug    = 0;  static char   fcanonical = 0;  static char   bdelim = '|'; @@ -69,10 +69,12 @@ extern int verbose;  /*see ipmilanplus.c*/  extern void lprintf(int level, const char * format, ...);  /*ipmilanplus.c*/ -int GetUserInfo(uchar unum, uchar chan, uchar *enab, uchar *priv, char *uname, char fdebug); +/* from ilan.c */ +char *parse_priv(uchar c); +int DisableUser (int unum, uchar chan);  int SetPasswd(int unum, char *uname, char *upswd, uchar chan, uchar priv);  int GetBmcEthDevice(uchar lan_parm, uchar *pchan); -char *parse_priv(uchar c); +int GetUserInfo(uchar unum, uchar chan, uchar *enab, uchar *priv, char *uname, char fdebug);  static void printf_user_usage(void)  { diff --git a/util/iwdt.c b/util/iwdt.c index 820d57b..13253b3 100644 --- a/util/iwdt.c +++ b/util/iwdt.c @@ -100,7 +100,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  /*   * Global variables    */ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "iwdt";  static char   fdebug    = 0;  static char   fdontlog  = 0; diff --git a/util/oem_asus.c b/util/oem_asus.c index 24226b9..cd5c01e 100644 --- a/util/oem_asus.c +++ b/util/oem_asus.c @@ -60,8 +60,8 @@ extern uchar bitnum(ushort value);  /*isensor.c*/  extern char fdebug;  /*ipmicmd.c*/  void set_loglevel(int level);  /*prototype */ -static char * progver   = "3.02"; -static char * progname  = "ioemasus"; +static char * progname  = "iasusoem"; +static char * progver   = "3.04";  static int verbose = 0;  static uchar  g_bus  = PUBLIC_BUS;  static uchar  g_sa   = BMC_SA; diff --git a/util/oem_dell.c b/util/oem_dell.c index f8caf9a..4f9a7ab 100644 --- a/util/oem_dell.c +++ b/util/oem_dell.c @@ -132,7 +132,7 @@ char NIC_Selection_Mode_String_12g[] [50] =	{  						"shared with failover all loms"  						}; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "idelloem";  static int verbose = 0;  static char fdebug = 0; @@ -4476,10 +4476,9 @@ static int ipmi_print_power_cap(void* intf,uint8_t unit )  			tempbtuphrconv=watt_to_btuphr_conversion(ipmipowercap.PowerCap);  			printf ("Power cap    : %ld  BTU/hr\n",tempbtuphrconv);  		}else{ -		 -			printf ("Maximum power: %ld Watt\n",ipmipowercap.MaximumPowerConsmp); -			printf ("Minimum power: %ld Watt\n",ipmipowercap.MinimumPowerConsmp); -			printf ("Power cap    : %ld Watt\n",ipmipowercap.PowerCap); +			printf ("Maximum power: %d Watt\n",ipmipowercap.MaximumPowerConsmp); +			printf ("Minimum power: %d Watt\n",ipmipowercap.MinimumPowerConsmp); +			printf ("Power cap    : %d Watt\n",ipmipowercap.PowerCap);          }      }      return rc; @@ -5676,8 +5675,8 @@ char * get_dell_evt_desc(uchar *sel_rec, int *psev)  				{  					if(0x51  == version)   					{ -						snprintf(tmpdesc, SIZE_OF_DESC, "DIMM %s", ('A'+ data3)); -						strcat(desc, tmpdesc);						 +						snprintf(tmpdesc, SIZE_OF_DESC, "DIMM %c", (char)('A'+ data3)); +						strcat(desc, tmpdesc);  					}   					else if( ((data2 >> 4) > 0x07) && ((data2 >> 4) != 0x0F))   					{ diff --git a/util/oem_fujitsu.c b/util/oem_fujitsu.c index 362df96..9a4783a 100644 --- a/util/oem_fujitsu.c +++ b/util/oem_fujitsu.c @@ -52,6 +52,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  /* extern void get_mfgid(int *vend, int *prod);  * from ipmicmd.h*/  /* extern int get_lan_options();  * from ipmicmd.h */ +static char * progver   = "3.04"; +static char * progname  = "ifujitsuoem";  static char fdebug = 0;  static char freadok = 1;  #define ERRLED    0  /*GEL - red  Global Error LED*/ @@ -770,4 +772,11 @@ int decode_sensor_fujitsu(uchar *sdr,uchar *reading,char *pstring, int slen)     return(rv);  } +#ifdef METACOMMAND +int i_fujitsuoem(int argc, char **argv) +{ +   printf("%s ver %s\n", progname,progver); +   return(0); +} +#endif  /* end oem_fujitsu.c */ diff --git a/util/oem_hp.c b/util/oem_hp.c index b7f7d07..081ea6f 100644 --- a/util/oem_hp.c +++ b/util/oem_hp.c @@ -44,6 +44,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #include "ievents.h"  #include "isensor.h" +static char * progver   = "3.04"; +static char * progname  = "ihpoem"; +  static char *redund_str(uchar b)  {     char *pstr; @@ -153,4 +156,11 @@ void show_oemsdr_hp(uchar *sdr)     return;  } +#ifdef METACOMMAND +int i_hpoem(int argc, char **argv) +{ +   printf("%s ver %s\n", progname,progver); +   return(0); +} +#endif  /* end oem_hp.c */ diff --git a/util/oem_intel.c b/util/oem_intel.c index 6f61010..bf21ec5 100644 --- a/util/oem_intel.c +++ b/util/oem_intel.c @@ -83,6 +83,8 @@ extern char  fdebug;   /*ipmicmd.c*/  /*   * Global variables    */ +static char * progver   = "3.04"; +static char * progname  = "iinteloem";  static char  fRelayBits = 0;  static uchar g_bus = PUBLIC_BUS;  static uchar g_sa  = BMC_SA; @@ -1893,4 +1895,11 @@ void show_enc_leds_intel(uchar val, int numd)     else show_enc_leds_i2c(val, numd);  } +#ifdef METACOMMAND +int i_inteloem(int argc, char **argv) +{ +   printf("%s ver %s\n", progname,progver); +   return(0); +} +#endif  /* end oem_intel.c */ diff --git a/util/oem_kontron.c b/util/oem_kontron.c index 891075a..b8fedf7 100644 --- a/util/oem_kontron.c +++ b/util/oem_kontron.c @@ -73,6 +73,8 @@ typedef uint32_t   socklen_t;  #define FRU_TYPE_COMPONENT  0x01  #define FRU_TYPE_BASEBOARD  0x07 +static char * progver   = "3.04"; +static char * progname  = "ikontronoem";  const struct valstr ktc5520_post[] = {  /*from EAS*/   { 0x0003, "Start POST Init" },   { 0x0004, "Check CMOS" }, @@ -1103,4 +1105,11 @@ int decode_sensor_kontron(uchar *sdr,uchar *reading,char *pstring, int slen)     return(rv);  } +#ifdef METACOMMAND +int i_kontronoem(int argc, char **argv) +{ +   printf("%s ver %s\n", progname,progver); +   return(0); +} +#endif  /* end oem_kontron.c */ diff --git a/util/oem_lenovo.c b/util/oem_lenovo.c index a1162bb..dc15a5d 100644 --- a/util/oem_lenovo.c +++ b/util/oem_lenovo.c @@ -61,8 +61,8 @@ extern uchar bitnum(ushort value);  /*isensor.c*/  extern char fdebug;  /*ipmicmd.c*/  void set_loglevel(int level);  /*prototype */ -static char * progver   = "3.02"; -static char * progname  = "ioemlenovo"; +static char * progver   = "3.04"; +static char * progname  = "ilenovooem";  static int verbose = 0;  static uchar  g_bus  = PUBLIC_BUS;  static uchar  g_sa   = BMC_SA; @@ -92,6 +92,7 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)     ushort rval;     char *pstr = NULL;     int b; +   int vend, prod;     if (sdr == NULL || reading == NULL) return(rv);     if (pstring == NULL || slen == 0) return(rv); @@ -103,11 +104,12 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)     etype = sdr[13];     rval = reading[2] | ((reading[3] & 0x7f) << 8);     b = bitnum(rval); -   if (fdebug) printf("oem_lenovo: sensor type=%x evt=%x entity=%x rval=%04x\n", -					stype,etype,entity,rval); +   get_mfgid(&vend,&prod); /*saved from ipmi_getdeviceid */ +   if (fdebug) printf("oem_lenovo: mfg=%04x:%04x sensor type=%x evt=%x entity=%x rval=%04x\n", +					vend,prod,stype,etype,entity,rval);     switch(stype) { -       case 0x07:      /* All CPUs */ -           if (etype == 0x6F) { +       case 0x07:      /* CPU sensor type */ +           if ((etype == 0x6F) && (entity == 25)) {  /*All CPUs*/                switch(b) {                case 0x00: pstr = "OK"; break;                case 0x02: pstr = "BIST_Fail"; break; @@ -118,6 +120,28 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)                }                rv = 0;             } +           else if ((etype == 0x6F) && (entity == 3)) {  /*CPU status*/ +           /* Special CPU status reported on IBM/Lenovo */ +              switch(rval) { +              case 0x00: pstr = "Absent"; break; +              case 0x80: pstr = "Present"; break; +              default:   pstr = "Error"; break; +              } +              rv = 0; +           } +           break; +       case 0x0C:      /* DIMM slot status */ +           /* Special DIMM status reported on IBM/Lenovo */ +           /* IBM x3650 M2 (0x0002, 0x00dc) and  +			* Lenovo x3650 M4 (0x4f4d, 0x0143) */ +           if (etype == 0x6F) { +              switch(rval) { +              case 0x00: pstr = "Absent"; break; +              case 0x40: pstr = "Present"; break; +              default:   pstr = "Error"; break; +              } +              rv = 0; +           }             break;         case 0x0D:      /* Disk Drive slots */             if (etype == 0x6F) { @@ -204,6 +228,7 @@ int decode_sensor_lenovo(uchar *sdr,uchar *reading,char *pstring, int slen)                rv = 0;             }             break; +         default: break;     }     if (rv == 0) snprintf(pstring,slen,"%s",pstr); diff --git a/util/oem_newisys.c b/util/oem_newisys.c index dd4d759..6b21e1b 100644 --- a/util/oem_newisys.c +++ b/util/oem_newisys.c @@ -43,6 +43,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #include "ipmicmd.h"  #include "ievents.h" +static char * progver   = "3.04"; +static char * progname  = "inewisysoem";  static char  fdebug = 0;  static uchar g_bus = PUBLIC_BUS;  static uchar g_sa  = BMC_SA; @@ -126,4 +128,11 @@ int decode_sel_newisys(uchar *evt, char *outbuf, int outsz, char fdesc,     return rv;  } +#ifdef METACOMMAND +int i_newisysoem(int argc, char **argv) +{ +   printf("%s ver %s\n", progname,progver); +   return(0); +} +#endif  /* end oem_newisys.c */ diff --git a/util/oem_quanta.c b/util/oem_quanta.c index a0ee3bb..a6cfd6a 100644 --- a/util/oem_quanta.c +++ b/util/oem_quanta.c @@ -45,6 +45,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  extern int decode_sensor_intel_nm(uchar *sdr,uchar *reading,  				  char *pstring,int slen);  /*oem_intel.c*/ +static char * progver   = "3.04"; +static char * progname  = "iquantaoem";  static char fdbg = 0;  /* @@ -139,4 +141,11 @@ int decode_sel_quanta(uchar *evt, char *outbuf, int outsz, char fdesc,     return(rv);  } +#ifdef METACOMMAND +int i_quantaoem(int argc, char **argv) +{ +   printf("%s ver %s\n", progname,progver); +   return(0); +} +#endif  /* end oem_quanta.c */ diff --git a/util/oem_sun.c b/util/oem_sun.c index 1d25301..8aa211b 100644 --- a/util/oem_sun.c +++ b/util/oem_sun.c @@ -109,7 +109,7 @@ static const struct valstr sunoem_led_mode_optvals[] = {  /* global variables */  static char * progname  = "isunoem"; -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char   fdebug    = 0;  static uchar  g_bus  = PUBLIC_BUS;  static uchar  g_sa   = BMC_SA; diff --git a/util/oem_supermicro.c b/util/oem_supermicro.c index 165bf88..a480b7f 100644 --- a/util/oem_supermicro.c +++ b/util/oem_supermicro.c @@ -68,7 +68,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  void set_loglevel(int level);  /*prototype */  extern char fsm_debug;  /*mem_if.c*/ -static char * progver   = "3.03"; +static char * progver   = "3.04";  static char * progname  = "ismcoem";  static int verbose = 0;  static char fdebug = 0; @@ -414,7 +414,8 @@ int decode_threshold_supermicro(uchar rval, uchar *thresh)   *             non-zero otherwise, to use default interpretations.   *    pstring = contains the sensor reading interpretation string (if rv==0)   */ -int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, int slen) +int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, int slen,  +		int fsimple)  {     int i, rv = -1;     uchar stype, etype, snum; @@ -455,7 +456,9 @@ int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, int slen)  	  sdr01 = (SDR01REC *)sdr;  	  val = RawToFloat(reading[0],sdr);        typestr = get_unit_type(sdr01->sens_units,sdr01->sens_base,sdr01->sens_mod, 0); -      snprintf(pstring, slen, "%s %.2f %s",pstr,val,typestr); +	  if (fsimple)  +	       snprintf(pstring, slen, "%s | %.2f %s",pstr,val,typestr); +	  else snprintf(pstring, slen, "%s %.2f %s",pstr,val,typestr);  	  return(rv);     }     switch(stype) { diff --git a/util/oem_supermicro.h b/util/oem_supermicro.h index daf08d6..c8f9147 100644 --- a/util/oem_supermicro.h +++ b/util/oem_supermicro.h @@ -48,7 +48,7 @@ int oem_supermicro_get_lan_port(uchar *val);  int oem_supermicro_set_lan_port(uchar val);  char *oem_supermicro_lan_port_string(uchar val); -int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, int slen); +int decode_sensor_supermicro(uchar *sdr,uchar *reading,char *pstring, int slen, int fsimple);  int decode_mem_supermicro(int prod, uchar b2, uchar b3, char *desc, int *psz);  int decode_sel_supermicro(uchar *evt, char *outbuf, int outsz, char fdesc,                          char fdebug); | 
