Hello community,
here is the log from the commit of package lsvpd for openSUSE:Factory checked in at 2018-06-20 15:37:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lsvpd (Old)
and /work/SRC/openSUSE:Factory/.lsvpd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lsvpd"
Wed Jun 20 15:37:21 2018 rev:49 rq:618014 version:1.7.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/lsvpd/lsvpd.changes 2017-12-19 10:58:21.381730147 +0100
+++ /work/SRC/openSUSE:Factory/.lsvpd.new/lsvpd.changes 2018-06-20 15:37:29.644713158 +0200
@@ -1,0 +2,13 @@
+Wed Jun 20 09:26:49 UTC 2018 - jloeser@suse.com
+
+- version update to 1.7.9 (fate#324941)
+ - vpdupdate: Remove old archive db
+ - Add support to parse OPFR record format
+ - lsmcode: Add product version string to firmware information
+ - lsmcode: Support firmware info on BMC based Power9 system
+
+- removed patches:
+ * lsvpd.bug-1072079_add_host_number.patch
+ * lsvpd.bug-1072079_std_io_base_failure_workaround.patch
+
+-------------------------------------------------------------------
Old:
----
lsvpd-1.7.8.tar.gz
lsvpd.bug-1072079_add_host_number.patch
lsvpd.bug-1072079_std_io_base_failure_workaround.patch
New:
----
lsvpd-1.7.9.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ lsvpd.spec ++++++
--- /var/tmp/diff_new_pack.lxDfXw/_old 2018-06-20 15:37:30.328688329 +0200
+++ /var/tmp/diff_new_pack.lxDfXw/_new 2018-06-20 15:37:30.332688183 +0200
@@ -17,15 +17,13 @@
Name: lsvpd
-Version: 1.7.8
+Version: 1.7.9
Release: 0
Summary: VPD Hardware Inventory Utilities for Linux
License: GPL-2.0+
Group: System/Monitoring
Url: http://sourceforge.net/projects/linux-diag/
Source0: http://sourceforge.net/projects/linux-diag/files/lsvpd-new/%{version}/%{name}-%{version}.tar.gz
-Patch0: lsvpd.bug-1072079_add_host_number.patch
-Patch1: lsvpd.bug-1072079_std_io_base_failure_workaround.patch
BuildRequires: gcc-c++
BuildRequires: librtas-devel
BuildRequires: libvpd2-devel
@@ -47,8 +45,6 @@
%prep
%setup -q
-%patch0 -p1
-%patch1 -p1
%build
export CFLAGS="%{optflags} -UPCI_IDS -DPCI_IDS='\"%{_datadir}/pci.ids\"' -UUSB_IDS -DUSB_IDS='\"%{_datadir}/usb.ids\"'"
++++++ lsvpd-1.7.8.tar.gz -> lsvpd-1.7.9.tar.gz ++++++
++++ 24717 lines of diff (skipped)
++++ retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/ChangeLog new/lsvpd-1.7.9/ChangeLog
--- old/lsvpd-1.7.8/ChangeLog 2017-03-22 09:36:30.000000000 +0100
+++ new/lsvpd-1.7.9/ChangeLog 2018-06-12 12:35:31.000000000 +0200
@@ -1,6 +1,13 @@
+1.7.9: Vasant Hegde - Tue Jun 12 2018
+vpdupdate: Remove old archive db
+Add support to parse OPFR record format
+lsmcode: Add product version string to firmware information
+lsmcode: Support firmware info on BMC based Power9 system
+Fixed regression issues
+
1.7.8: Vasant Hegde - Wed Mar 22 2017
-- Remove temporary block file creation under /tmp
-- Various bug fixes
+Remove temporary block file creation under /tmp
+Various bug fixes
1.7.7: Vasant Hegde - Tue Apr 12 2016
Support for NVMe devices
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/config/compile new/lsvpd-1.7.9/config/compile
--- old/lsvpd-1.7.8/config/compile 2017-03-22 09:40:22.000000000 +0100
+++ new/lsvpd-1.7.9/config/compile 1970-01-01 01:00:00.000000000 +0100
@@ -1,347 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand '-c -o'.
-
-scriptversion=2012-10-14.11; # UTC
-
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
-# Written by Tom Tromey .
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see http://www.gnu.org/licenses/.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to or send patches to
-# .
-
-nl='
-'
-
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent tools from complaining about whitespace usage.
-IFS=" "" $nl"
-
-file_conv=
-
-# func_file_conv build_file lazy
-# Convert a $build file to $host form and store it in $file
-# Currently only supports Windows hosts. If the determined conversion
-# type is listed in (the comma separated) LAZY, no conversion will
-# take place.
-func_file_conv ()
-{
- file=$1
- case $file in
- / | /[!/]*) # absolute file, and not a UNC file
- if test -z "$file_conv"; then
- # lazily determine how to convert abs files
- case `uname -s` in
- MINGW*)
- file_conv=mingw
- ;;
- CYGWIN*)
- file_conv=cygwin
- ;;
- *)
- file_conv=wine
- ;;
- esac
- fi
- case $file_conv/,$2, in
- *,$file_conv,*)
- ;;
- mingw/*)
- file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
- ;;
- cygwin/*)
- file=`cygpath -m "$file" || echo "$file"`
- ;;
- wine/*)
- file=`winepath -w "$file" || echo "$file"`
- ;;
- esac
- ;;
- esac
-}
-
-# func_cl_dashL linkdir
-# Make cl look for libraries in LINKDIR
-func_cl_dashL ()
-{
- func_file_conv "$1"
- if test -z "$lib_path"; then
- lib_path=$file
- else
- lib_path="$lib_path;$file"
- fi
- linker_opts="$linker_opts -LIBPATH:$file"
-}
-
-# func_cl_dashl library
-# Do a library search-path lookup for cl
-func_cl_dashl ()
-{
- lib=$1
- found=no
- save_IFS=$IFS
- IFS=';'
- for dir in $lib_path $LIB
- do
- IFS=$save_IFS
- if $shared && test -f "$dir/$lib.dll.lib"; then
- found=yes
- lib=$dir/$lib.dll.lib
- break
- fi
- if test -f "$dir/$lib.lib"; then
- found=yes
- lib=$dir/$lib.lib
- break
- fi
- if test -f "$dir/lib$lib.a"; then
- found=yes
- lib=$dir/lib$lib.a
- break
- fi
- done
- IFS=$save_IFS
-
- if test "$found" != yes; then
- lib=$lib.lib
- fi
-}
-
-# func_cl_wrapper cl arg...
-# Adjust compile command to suit cl
-func_cl_wrapper ()
-{
- # Assume a capable shell
- lib_path=
- shared=:
- linker_opts=
- for arg
- do
- if test -n "$eat"; then
- eat=
- else
- case $1 in
- -o)
- # configure might choose to run compile as 'compile cc -o foo foo.c'.
- eat=1
- case $2 in
- *.o | *.[oO][bB][jJ])
- func_file_conv "$2"
- set x "$@" -Fo"$file"
- shift
- ;;
- *)
- func_file_conv "$2"
- set x "$@" -Fe"$file"
- shift
- ;;
- esac
- ;;
- -I)
- eat=1
- func_file_conv "$2" mingw
- set x "$@" -I"$file"
- shift
- ;;
- -I*)
- func_file_conv "${1#-I}" mingw
- set x "$@" -I"$file"
- shift
- ;;
- -l)
- eat=1
- func_cl_dashl "$2"
- set x "$@" "$lib"
- shift
- ;;
- -l*)
- func_cl_dashl "${1#-l}"
- set x "$@" "$lib"
- shift
- ;;
- -L)
- eat=1
- func_cl_dashL "$2"
- ;;
- -L*)
- func_cl_dashL "${1#-L}"
- ;;
- -static)
- shared=false
- ;;
- -Wl,*)
- arg=${1#-Wl,}
- save_ifs="$IFS"; IFS=','
- for flag in $arg; do
- IFS="$save_ifs"
- linker_opts="$linker_opts $flag"
- done
- IFS="$save_ifs"
- ;;
- -Xlinker)
- eat=1
- linker_opts="$linker_opts $2"
- ;;
- -*)
- set x "$@" "$1"
- shift
- ;;
- *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
- func_file_conv "$1"
- set x "$@" -Tp"$file"
- shift
- ;;
- *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
- func_file_conv "$1" mingw
- set x "$@" "$file"
- shift
- ;;
- *)
- set x "$@" "$1"
- shift
- ;;
- esac
- fi
- shift
- done
- if test -n "$linker_opts"; then
- linker_opts="-link$linker_opts"
- fi
- exec "$@" $linker_opts
- exit 1
-}
-
-eat=
-
-case $1 in
- '')
- echo "$0: No command. Try '$0 --help' for more information." 1>&2
- exit 1;
- ;;
- -h | --h*)
- cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand '-c -o'.
-Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file 'INSTALL'.
-
-Report bugs to .
-EOF
- exit $?
- ;;
- -v | --v*)
- echo "compile $scriptversion"
- exit $?
- ;;
- cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
- func_cl_wrapper "$@" # Doesn't return...
- ;;
-esac
-
-ofile=
-cfile=
-
-for arg
-do
- if test -n "$eat"; then
- eat=
- else
- case $1 in
- -o)
- # configure might choose to run compile as 'compile cc -o foo foo.c'.
- # So we strip '-o arg' only if arg is an object.
- eat=1
- case $2 in
- *.o | *.obj)
- ofile=$2
- ;;
- *)
- set x "$@" -o "$2"
- shift
- ;;
- esac
- ;;
- *.c)
- cfile=$1
- set x "$@" "$1"
- shift
- ;;
- *)
- set x "$@" "$1"
- shift
- ;;
- esac
- fi
- shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
- # If no '-o' option was seen then we might have been invoked from a
- # pattern rule where we don't need one. That is ok -- this is a
- # normal compilation that the losing compiler can handle. If no
- # '.c' file was seen then we are probably linking. That is also
- # ok.
- exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use '[/\\:.-]' here to ensure that we don't use the same name
-# that we are using for the .o file. Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
-while true; do
- if mkdir "$lockdir" >/dev/null 2>&1; then
- break
- fi
- sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
- test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
- test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/config/config.h.in new/lsvpd-1.7.9/config/config.h.in
--- old/lsvpd-1.7.8/config/config.h.in 2017-03-22 09:40:19.000000000 +0100
+++ new/lsvpd-1.7.9/config/config.h.in 2018-06-12 12:35:40.000000000 +0200
@@ -130,7 +130,8 @@
slash. */
#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
-/* Define to the sub-directory where libtool stores uninstalled libraries. */
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
#undef LT_OBJDIR
/* Define to 1 if `major', `minor', and `makedev' are declared in .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/config/missing new/lsvpd-1.7.9/config/missing
--- old/lsvpd-1.7.8/config/missing 2017-03-22 09:40:22.000000000 +0100
+++ new/lsvpd-1.7.9/config/missing 2018-06-12 12:35:41.000000000 +0200
@@ -1,9 +1,9 @@
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
-scriptversion=2013-10-28.13; # UTC
+scriptversion=2012-06-26.16; # UTC
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard , 1996.
# This program is free software; you can redistribute it and/or modify
@@ -160,7 +160,7 @@
;;
autom4te*)
echo "You might have modified some maintainer files that require"
- echo "the 'autom4te' program to be rebuilt."
+ echo "the 'automa4te' program to be rebuilt."
program_details 'autom4te'
;;
bison*|yacc*)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/configure.ac new/lsvpd-1.7.9/configure.ac
--- old/lsvpd-1.7.8/configure.ac 2017-03-22 09:37:47.000000000 +0100
+++ new/lsvpd-1.7.9/configure.ac 2018-06-12 12:35:31.000000000 +0200
@@ -3,7 +3,7 @@
AC_PREREQ([2.69])
#base
-AC_INIT([lsvpd],[1.7.8],[hegdevasant@in.ibm.com,kamaleshb@in.ibm.com])
+AC_INIT([lsvpd],[1.7.9],[hegdevasant@in.ibm.com])
AC_CONFIG_HEADER([config/config.h])
AC_SUBST(DATE, [`date`])
AC_CONFIG_MACRO_DIR([m4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/lsvpd.spec.in new/lsvpd-1.7.9/lsvpd.spec.in
--- old/lsvpd-1.7.8/lsvpd.spec.in 2017-03-22 09:35:01.000000000 +0100
+++ new/lsvpd-1.7.9/lsvpd.spec.in 2018-06-12 12:35:31.000000000 +0200
@@ -76,6 +76,12 @@
%changelog
+* Tue Jun 12 2018 - Vasant Hegde - 1.7.9
+- vpdupdate: Remove old archive db
+- Add support to parse OPFR record format
+- lsmcode: Add product version string to firmware information
+- lsmcode: Support firmware info on BMC based Power9 system
+
* Wed Mar 22 2017 - Vasant Hegde - 1.7.8
- Remove temporary block file creation under /tmp
- Various bug fixes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/src/internal/sys_interface/devicetreecollector.cpp new/lsvpd-1.7.9/src/internal/sys_interface/devicetreecollector.cpp
--- old/lsvpd-1.7.8/src/internal/sys_interface/devicetreecollector.cpp 2017-03-22 09:27:08.000000000 +0100
+++ new/lsvpd-1.7.9/src/internal/sys_interface/devicetreecollector.cpp 2018-06-12 12:35:31.000000000 +0200
@@ -765,7 +765,7 @@
{
Component *parent;
ostringstream val;
- const DataItem *target, *lun, *bus;
+ const DataItem *target, *lun, *bus, *host;
/* Build up a distinct YL based on parents YL - for device such as
* scsi, ide, usb, etc that do not generate ibm,loc-code
@@ -778,7 +778,9 @@
target = fillMe->getDeviceSpecific("XT");
lun = fillMe->getDeviceSpecific("XL");
bus = fillMe->getDeviceSpecific("XB");
- if (target != NULL && lun != NULL && bus != NULL) {
+ host = fillMe->getDeviceSpecific("XH");
+ if (host != NULL && target != NULL &&
+ lun != NULL && bus != NULL) {
if (fillMe->mPhysicalLocation.dataValue != "")
val << fillMe->mPhysicalLocation.dataValue;
else if
@@ -787,8 +789,8 @@
else
val << getAttrValue( parent->deviceTreeNode.dataValue,
"ibm,loc-code" );
- val << "-B" << bus->dataValue << "-T" << target->dataValue
- << "-L" << lun->dataValue;
+ val << "H" << host->dataValue << "-B" << bus->dataValue
+ << "-T" << target->dataValue << "-L" << lun->dataValue;
fillMe->mPhysicalLocation.setValue( val.str( ), 60 ,
__FILE__, __LINE__ );
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/src/internal/sys_interface/icollector.cpp new/lsvpd-1.7.9/src/internal/sys_interface/icollector.cpp
--- old/lsvpd-1.7.8/src/internal/sys_interface/icollector.cpp 2017-03-21 07:39:15.000000000 +0100
+++ new/lsvpd-1.7.9/src/internal/sys_interface/icollector.cpp 2018-06-12 12:35:31.000000000 +0200
@@ -104,14 +104,31 @@
*/
string ICollector::getBinaryData( const string& path )
{
- ifstream fi(path.c_str(), ios::binary);
+ struct stat sbuf;
string str;
- str.assign(istreambuf_iterator<char>(fi),
- istreambuf_iterator<char>());
- if (fi.bad())
+ /*
+ * Check file existence and size before calling ifstream
+ *
+ * Workaround for libstdc++ issue.
+ * https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=250545
+ */
+ if ((stat(path.c_str(), &sbuf) != 0))
+ return "";
+
+ ifstream fi(path.c_str(), ios::binary);
+ if (!fi)
return "";
+ try
+ {
+ str.assign(istreambuf_iterator<char>(fi),
+ istreambuf_iterator<char>());
+ }
+ catch (const std::ios_base::failure& e)
+ {
+ return "";
+ }
return str;
}
@@ -186,13 +203,15 @@
fillMe->mEngChangeLevel.setValue( val, 90, file, lineNum );
else if( key == "FN" )
fillMe->mFRU.setValue( val, 90, file, lineNum );
- else if( key == "PN" )
+ // OPFR uses VP for part number
+ else if( key == "PN" || key == "VP" )
fillMe->mPartNumber.setValue( val, 90, file, lineNum );
else if( key == "RL" )
fillMe->mFirmwareLevel.setValue( val, 90, file, lineNum );
else if( key == "RM" )
fillMe->mFirmwareVersion.setValue( val, 90, file, lineNum );
- else if( key == "SN" )
+ // OPFR uses VS for serial number
+ else if( key == "SN" || key == "VS" )
fillMe->mSerialNumber.setValue( val, 90, file, lineNum );
else if( key == "MN" )
fillMe->mManufacturerID.setValue( val, 90, file, lineNum );
@@ -214,6 +233,8 @@
fillMe->plantMfg.setValue( val, 90, file, lineNum );
else if( key == "VK" )
fillMe->mKeywordVersion.setValue( val, 90, file, lineNum );
+ else if ( key == "DR" )
+ fillMe->mDescription.setValue( val, 90, file, lineNum );
else if( key == "SZ" )
fillMe->addDeviceSpecific( key, "Size", val, 90 );
else if( key == "CC" )
@@ -230,6 +251,18 @@
else if ( key == "ME" )
fillMe->addDeviceSpecific( key, "Update Access Key Exp"
" Date", val, 90 );
+ else if ( key == "CE" )
+ fillMe->addDeviceSpecific( key, "CCIN Extension",
+ val, 90 );
+ else if ( key == "CT" )
+ fillMe->addDeviceSpecific( key, "Card Type", val, 90 );
+ else if ( key == "HW" )
+ fillMe->addDeviceSpecific( key, "Hardware Version",
+ val, 90 );
+ else if ( key == "VN" )
+ fillMe->addDeviceSpecific( key, "Vendor", val, 90 );
+ else if ( key == "MB" )
+ fillMe->addDeviceSpecific( key, "Build Date", val, 90 );
else if( key[ 0 ] == 'U' )
fillMe->addUserData( key, "User Data", val, 90, true );
else if( key[ 0 ] == 'Z' )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/src/internal/sys_interface/sysfstreecollector.cpp new/lsvpd-1.7.9/src/internal/sys_interface/sysfstreecollector.cpp
--- old/lsvpd-1.7.8/src/internal/sys_interface/sysfstreecollector.cpp 2017-03-22 06:00:37.000000000 +0100
+++ new/lsvpd-1.7.9/src/internal/sys_interface/sysfstreecollector.cpp 2018-06-12 12:35:31.000000000 +0200
@@ -1669,6 +1669,9 @@
*/
newDevDir = dev_syspath + "/" + dev_childname;
str = getAttrValue( newDevDir, "dev" );
+ if (str.empty())
+ return;
+
beg = end = 0;
while (end < (int) str.length() && str[end] != ':')
end++;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/src/internal/updater.cpp new/lsvpd-1.7.9/src/internal/updater.cpp
--- old/lsvpd-1.7.8/src/internal/updater.cpp 2017-03-21 07:39:15.000000000 +0100
+++ new/lsvpd-1.7.9/src/internal/updater.cpp 2018-06-12 12:35:31.000000000 +0200
@@ -42,6 +42,7 @@
#include
#include
#include
+#include <cstdlib>
#include
#include
@@ -164,6 +165,46 @@
}
/**
+ * Method to remove old DB archives.
+ */
+void removeOldArchiveDB(void)
+{
+ int n, fp;
+ struct dirent **namelist;
+ Logger logger;
+
+ n = scandir(env.c_str(), &namelist, NULL, alphasort);
+ if (n <= 0) {
+ ostringstream os;
+ os << "Error scanning directory : " << env.c_str() << endl;
+ logger.log( os.str( ), LOG_INFO );
+ return;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ string fname = string(namelist[i]->d_name);
+ string pathname = env + "/" + fname;
+
+ if ((fname.find("vpd.db.") == std::string::npos) &&
+ (fname.find(".gz") == std::string::npos)) {
+ free(namelist[i]);
+ continue;
+ }
+ unlink(pathname.c_str());
+ free(namelist[i]);
+ }
+
+ fp = open(env.c_str(), O_RDWR);
+ if (fp >= 0) {
+ fsync(fp);
+ close(fp);
+ }
+
+ free(namelist);
+}
+
+/**
* Method moves the old db out of the way.
*/
void archiveDB( const string& fullPath )
@@ -292,6 +333,7 @@
string fullPath = env + "/" + file;
+ removeOldArchiveDB( );
archiveDB( fullPath );
Gatherer info( limitSCSI );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/lsvpd-1.7.8/src/output/lsmcode.cpp new/lsvpd-1.7.9/src/output/lsmcode.cpp
--- old/lsvpd-1.7.8/src/output/lsmcode.cpp 2017-03-21 07:39:15.000000000 +0100
+++ new/lsvpd-1.7.9/src/output/lsmcode.cpp 2018-06-12 12:35:31.000000000 +0200
@@ -23,6 +23,7 @@
#include
#include
+#include
#include
#include
#include
@@ -39,6 +40,7 @@
#define _GNU_SOURCE // for getopt_long
#endif
+#include
#include
#include
#include
@@ -50,6 +52,9 @@
#include <iomanip>
#include
+/* Firmware information device tree node on PowerNV system */
+#define FW_VERSION_DT_NODE DEVTREEPATH"/ibm,firmware-versions/"
+
/* IPMI tool */
#define CMD_IPMITOOL "ipmitool"
@@ -120,16 +125,14 @@
}
/* Get System Firmware FRU information on BMC based system */
-static string bmc_get_fw_fru_info(string ipmitool)
+static string bmc_get_fw_fru_info(string ipmitool, string interface)
{
- string cmd = ipmitool + " fru";
+ string cmd = ipmitool + interface;
string fruData, fwData;
size_t start, end;
- if (HelperFunctions::execCmd(cmd.c_str(), fruData)) {
- cout << "Failed to execute ipmitool command" << endl;
+ if (HelperFunctions::execCmd(cmd.c_str(), fruData))
return string();
- }
start = fruData.find("System Firmware");
if (start == string::npos)
@@ -148,10 +151,140 @@
return fwData;
parse_err:
- cout << "Failed to get System Firmware information" << endl;
return string();
}
+static string read_dt_property(const string& path, const string& attrName)
+{
+ struct stat info;
+ string fullPath;
+ string ret = "";
+
+ ostringstream os;
+ os << path << "/" << attrName;
+ fullPath = os.str( );
+
+ if (stat(fullPath.c_str( ), &info) != 0) {
+ ostringstream os;
+ if (errno != ENOENT) {
+ os << "Error statting " << fullPath << ", errno: " << errno;
+ Logger().log( os.str( ), LOG_ERR );
+ }
+ return ret;
+ }
+
+ ifstream attrIn;
+ attrIn.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
+ try {
+ attrIn.open( fullPath.c_str( ) );
+ }
+ catch (std::ifstream::failure e) {
+ ostringstream os;
+ os << "Error opening " << fullPath;
+ Logger().log(os.str( ), LOG_WARNING);
+ return ret;
+ }
+
+ if (attrIn) {
+ char * strBuf;
+ try
+ {
+ strBuf = new char [ info.st_size + 1 ];
+ }
+ catch (exception& e)
+ {
+ return ret;
+ }
+ memset( strBuf, '\0', info.st_size + 1 );
+ attrIn.read( strBuf, info.st_size );
+ ret = strBuf;
+ attrIn.close( );
+ delete [] strBuf;
+ }
+ return ret;
+}
+
+/* Get system firmware information on BMC based system via device tree */
+static string bmc_get_fw_dt_info(void)
+{
+ string fwdata, tag, val, prod_ver = "", prod_extra = "", prop_ver = "";
+ struct dirent *ent;
+ DIR * pDBdir = NULL;
+ /* Properties to ignore from DT/ibm,firmware-versions node */
+ const char *ignore_dt[] = {"phandle", "name"};
+ /* Properties to look for version string */
+ const char *version_prop[] = {"version", "IBM", "open-power", "buildroot"};
+ int i;
+ bool ignore_dt_flag = false;
+
+ pDBdir = opendir(FW_VERSION_DT_NODE);
+ if (pDBdir == NULL) {
+ stringstream os;
+ os << "Error opening directory " << FW_VERSION_DT_NODE << endl;
+ Logger().log(os.str( ), LOG_ERR);
+ return string("");
+ }
+
+ /* Get the version property */
+ for (i = 0; i < (int)(sizeof(version_prop)/sizeof(char *)); i++) {
+ string path = FW_VERSION_DT_NODE + string(version_prop[i]);
+ if (HelperFunctions::file_exists(path)) {
+ prop_ver = version_prop[i];
+ break;
+ }
+ }
+
+ fwdata = string("\n Product Name : OpenPOWER Firmware\n");
+
+ /*
+ * Different BMCs uses different device tree property to display
+ * product name. On P9 system OPAL firmware takes care of parsing
+ * and it will add version property under device tree. But on older
+ * systems will have IBM or open-power or buildroot depending on
+ * who builds firmware image.
+ */
+ if (prop_ver != string("")) {
+ tag = string(" Product Version : ");
+ prod_ver = read_dt_property(string(FW_VERSION_DT_NODE), prop_ver);
+ if (prod_ver != string("")) {
+ if (prop_ver.compare("version") == 0)
+ prod_ver = tag + prod_ver + string("\n");
+ else
+ prod_ver = tag + prop_ver + string("-") + prod_ver + string("\n");
+ }
+ }
+
+ /* Form the product extra items using remaining properties */
+ while ((ent = readdir( pDBdir )) != NULL) {
+ string fname = ent->d_name;
+ for (i = 0; i < (int)(sizeof(ignore_dt)/sizeof(char *)); i++) {
+ if (fname.compare(string(ignore_dt[i])) == 0) {
+ ignore_dt_flag = true;
+ break;
+ }
+ }
+
+ if (ignore_dt_flag == true) {
+ ignore_dt_flag = false;
+ continue;
+ }
+
+ if (prop_ver != string("")) {
+ if (fname.compare(prop_ver) == 0)
+ continue;
+ }
+
+ tag = string(" Product Extra : \t");
+ val = read_dt_property(string(FW_VERSION_DT_NODE), fname);
+ if (val == string(""))
+ continue;
+ prod_extra = prod_extra + tag + fname + string("-") + val + string("\n");
+ }
+
+ fwdata = fwdata + prod_ver + prod_extra;
+ return fwdata;
+}
+
/* Get production version */
static string bmc_get_product_version(string fwData)
{
@@ -181,13 +314,30 @@
* based system. Hence we don't store this information in VPD db.
*/
if (PlatformCollector::isBMCBasedSystem()) {
- string ipmitool = get_ipmitool_path();
- if (ipmitool.empty())
- return false;
-
- string fwData = bmc_get_fw_fru_info(ipmitool);
- if (fwData.empty())
- return false;
+ string fwData;
+ if (!access(FW_VERSION_DT_NODE, F_OK | R_OK)) {
+ fwData = bmc_get_fw_dt_info();
+ if (fwData.empty())
+ return false;
+ } else {
+ string ipmitool = get_ipmitool_path();
+ if (ipmitool.empty())
+ return false;
+
+ /*
+ * AMI BMC stack supports usb interface. If usb interface
+ * is available use that, else fall back to inband interface.
+ */
+ fwData = bmc_get_fw_fru_info(ipmitool, string(" -I usb fru"));
+ if (fwData.empty()) {
+ fwData = bmc_get_fw_fru_info(ipmitool, string(" fru"));
+ if (fwData.empty()) {
+ cerr << "Failed to get System Firmware \
+ information" << endl;
+ return false;
+ }
+ }
+ }
if ( all ) {
string pVersion = bmc_get_product_version(fwData);
@@ -401,8 +551,7 @@
}
if( device == "" ) {
- if (printSystem( root->getLeaves( ) ) != true)
- return;
+ printSystem( root->getLeaves( ) );
}
if( !all && device == "" )