Release Notes for Intel CDM v 2.0 Diagnostic Provider

Contents

Objective

Supported Operating Systems

What’s New in This Release

Implemented CIM Classes

Supported Diagnostics

Requirements

Driver Installation/Update

Known Issues

Objective

This document describes all known issues of using Intel CDM v2.0 Provider.

Supported Operating Systems

 

Operating System

Patch

IA32

IA64

SuSE Enterprise Linux 10 (SLES) 4 Y Y
SuSE Enterprise Linux 11 (SLES) 1 Y Y
Red Hat Enterprise Linux 5 (RHEL) 5 Y Y
Red Hat Enterprise Linux 6 (RHEL)  - Y Y
Microsoft* Windows Server* 2003 R2 2 Y Y
Microsoft* Windows Server* 2008 2 y Y

What’s New in This Release

Version: 2.0.1.18

Support for SLES 10.4

Added support for kernels:

Kernel-default-2.6.16.60-0.85.1.i586

Kernel-bigsmp-2.6.16.60-0.85.1.i586

Kernel-smp-2.6.16.60-0.85.1.i586

Kernel-xen-2.6.16.60-0.85.1.i586

Kernel-default-2.6.16.60-0.85.1.x86_64

Kernel-smp-2.6.16.60-0.85.1.x86_64

Kernel-xen-2.6.16.60-0.85.1.x86_64

Version: 2.0.1.14

Added support for CIM Schema 2.26

Added new property to class CIM_ElementCapabilities: uint16 Characteristics

Added new property to class CIM_ElementSoftwareIdentity: uint16 ElementSoftwareStatus

Added new properties: to class CIM_PciDevice: BusNumber, DeviceNumber, FunctionNumber, RevisioID

Version 2.0.1.13

Support for RHEL 6.0

Added support for kernels:

2.6.32-71.x86_64

2.6.32-71.x86

2.6.32-71.x86 PAE

Version 2.0.1.12

Support for SLES 11 SP1

Added support for kernels:

2.6.32.12-0.7.x86_64

2.6.32.12-0.7.x86

2.6.32.12.-0.7.x86 PAE

Version 2.0.1.4

New documentation file format

Automatically loads the driver during the CDMv2 Provider initialization.

Version 2.0.1.2

Support for BartonVille and Windley Key devices

Support for RHEL5.5 and SLES11.0

Version 2.0.0.5

The Intel CDM v2.0 Provider is the CIM-compliant Diagnostics Provider for Intel’s network adapter.

Implemented CIM Classes

This release delivers the CIM classes described in the document "CIM Classes Detailed Description.htm".

Supported Diagnostics

The provider delivers the diagnostic test for Intel network adapters described in the document "Diagnostic Test Description.htm"

Requirements

The installation package requires:

- Cimple framework version 1.0.0 with CMPI library

Driver Installation / Update

The description of the installation process is published in the document “Installation Guide.htm”

Known Issues

This section describes all known issues connected with the release of this product:

Version 2.0.0.3

Support for ‘Interrupt diagnostic test’

Support for ‘Interrupt diagnostic test’ has been disabled for all supported Operating Systems.

Version 1.8.0.0

Support for Red Hat Linux 5.3

This version of CDMv2 does not work with RHEL 5.3. At the time, when CDMv2 was validated, only RHEL 5.3 BETA was accessible on web pages. This system will be brought up when QA of RHEL5.3 is available. 

Version 1.5.0.0

Pegasus 2.7.0 sometimes unloads CDMv2 Provider

It has sometimes been observed that Pegasus CIMOM may unload Intel CDM v2.0 Provider from memory. Any next query to the provider, like enumeration of CIM_EthernetPort instances, causes the loading of the CDM v2.0 Provider again to memory. This was a problem e.g., when we executed the diagnostic test and we stay inactive (not communicate with provider). After some time we expect to obtain at least one instance of CIM_ConcreteJob, but we do not. This effect is obtained because unloading and loading CDM Provider causes the deletion of all created jobs, logs, and settings instances.

Work-around for these behaviors is to keep the communication with CDM v2.0 Provider up.

Version 1.3.0.0

Terminating job could take more time than requested

The execution time of the method IANet_DiagJob.RequestStateChange could take more time than passed in RequestedTimeout parameter.

This occurs if IANet_DiagJob is in the state “Running(4)”, and value of the parameter RequestedState of RequestStateChange method is “Terminate(4)”.

Patch for proper build 3rd party Cimple library on Windows 2008 Server 64-bits.

The Cimple library in version 1.0.0 does not build on Windows 2008 Server 64-bits platform.

Workaround #1

Patch Cimple with attached file, as following:

  1. Get the following patch :

diff -aur /orginal/cimple-1.0.0/mak/platform_WIN32_IX86_MSVC.mak /x86-64/cimple-1.0.0/mak/platform_WIN32_IX86_MSVC.mak

--- /orginal/cimple-1.0.0/mak/platform_WIN32_IX86_MSVC.mak  2007-05-04 21:00:20.000000000 +0200

+++ /x86-64/cimple-1.0.0/mak/platform_WIN32_IX86_MSVC.mak   2008-10-03 16:45:55.269893000 +0200

@@ -1,3 +1,8 @@

+## Get information about OS installed on machine

+ifndef OS_MACHINE

+     OS_MACHINE = $(shell echo $(PROCESSOR_ARCHITECTURE))

+endif

+

 ##===============================================================

##

## CIMPLE_WINDOWS

@@ -100,6 +105,21 @@

   FLAGS += -O2

 endif

 

+FLAGS += -D_WIN32_WINNT=0x0400 -DWINVER=0x0400 -Gy -GF -DNDEBUG

+ifeq ($(OS_MACHINE),x86)

+     FLAGS += /DWIN32 /D_WIN32 /DWIN_x32 /D_WINDOWS

+else

+     ifeq ($(OS_MACHINE),AMD64)

+           FLAGS += /Wp64 /D_CRT_SECURE_NO_DEPRECATE

+#          FLAGS += /D_WINDOWS

+#          FLAGS += /DWIN64

+#          FLAGS += /D_WIN64

+           FLAGS += /DPEGASUS_ENABLE_IPV6

+     endif

+endif

+

+#FLAGS += /P

+

 ##===============================================================

##

## OBJ

@@ -130,6 +150,15 @@

   LINK_FLAGS += -debug

 endif

 

+LINK_FLAGS += /OPT:REF /OPT:ICF

+ifeq ($(OS_MACHINE),x86)

+     LINK_FLAGS += /MACHINE:X86 /SUBSYSTEM:WINDOWS

+else

+     ifeq ($(OS_MACHINE),AMD64)

+           LINK_FLAGS += /OPT:NOWIN98 /LTCG /MACHINE:X64 /SUBSYSTEM:WINDOWS

+     endif

+endif

+

 ##===============================================================

##

## LIB_FLAGS

@@ -138,6 +167,15 @@

 

 LIB_FLAGS += -nologo

 

+LINK_FLAGS += /OPT:REF /OPT:ICF

+ifeq ($(OS_MACHINE),x86)

+     LINK_FLAGS += /MACHINE:X86 /SUBSYSTEM:WINDOWS

+else

+     ifeq ($(OS_MACHINE),AMD64)

+           LINK_FLAGS += /OPT:NOWIN98 /LTCG /MACHINE:X64 /SUBSYSTEM:WINDOWS

+     endif

+endif

+

 ##===============================================================

##

## shlib_target(name)

@@ -190,6 +228,24 @@

 

 _full_libs = $(addsuffix .lib,$(1))

 

+

+##==============================================================

+##

+## macro "append_manifest" for appending manifest file to the destination file

+##

+##==============================================================

+

+# manifest type to pass as 2nd parameter to macro "append_manifest"

+MANIFEST_TYPE_EXE=1

+MANIFEST_TYPE_DLL=2

+

+# This command appends a manifest to given exe file (patch to compile under w2k8)

+# designed to call using "$(call append_manifest, EXENAME, MANIFESTTYPE).

+# Macro, after invoke "mt" tool deletes the manifest file.

+append_manifest = mt -manifest $(1).manifest -outputresource:$(1);$(2)

+

+#&& $(rm) $(1).manifest

+

 ##===============================================================

##

## make_shlib(shlib, objects, libraries)

@@ -205,7 +261,9 @@

     $(2) \

     $(call _full_libs,$(3)) \

     posix.lib \

-    $(_SYS_LIBS) $(EXTRA_SYS_LIBS) $(NL)

+    $(_SYS_LIBS) $(EXTRA_SYS_LIBS) \

+     \

+     && $(call append_manifest,$(call shlib_target,$(1)),$(MANIFEST_TYPE_DLL))

 ##===============================================================

##

@@ -243,13 +301,17 @@

## ##===============================================================

+# here is linked exe file

 make_bin = $(CXX) $(FLAGS) \

     -Fe$(call binary_target,$(1)) \

     $(2) \

     $(call _full_libs,$(3)) \

     posix.lib \

     $(_SYS_LIBS) \

-    -link $(LDPATH)

+    -link $(LDPATH) \

+     \

+     && $(call append_manifest,$(call binary_target,$(1)),$(MANIFEST_TYPE_EXE))

+

 ##===============================================================##

diff -aur /orginal/cimple-1.0.0/schema/Makefile /x86-64/cimple-1.0.0/schema/Makefile

--- /orginal/cimple-1.0.0/schema/Makefile 2007-05-04 21:00:20.000000000 +0200

+++ /x86-64/cimple-1.0.0/schema/Makefile  2008-10-03 16:45:55.284907000 +0200

@@ -8,7 +8,7 @@

 

 endef

 

 SCHEMA_DIR=$(DATADIR_OPT)/cimple/schema

 

Tylko w /x86-64/cimple-1.0.0/schema: cim212

diff -aur /orginal/cimple-1.0.0/src/cimple/Atomic_WIN32_IX86_MSVC.h /x86-64/cimple-1.0.0/src/cimple/Atomic_WIN32_IX86_MSVC.h

--- /orginal/cimple-1.0.0/src/cimple/Atomic_WIN32_IX86_MSVC.h     2007-05-04 21:00:20.000000000 +0200

+++ /x86-64/cimple-1.0.0/src/cimple/Atomic_WIN32_IX86_MSVC.h      2008-10-03 16:45:55.291913000 +0200

@@ -30,13 +30,18 @@

 

 #include "config.h"

 

+#ifndef InterlockedIncrement

+#if defined (_M_AMD64)

+     #include <windows.h>

+#else

 // The following definitions are necessary to avoid the inclusion of

 // windows.h, which causes symbol conflicts with CIMPLE.

-

 extern "C" long __stdcall _InterlockedIncrement(long*);

 extern "C" long __stdcall _InterlockedDecrement(long*);

 #pragma intrinsic(_InterlockedIncrement)

 #pragma intrinsic(_InterlockedDecrement)

+#endif /* _M_AMD64 */

+#endif /* InterlockedDecrement */

 

 CIMPLE_NAMESPACE_BEGIN

 

diff -aur /orginal/cimple-1.0.0/src/cimple/Datetime.cpp /x86-64/cimple-1.0.0/src/cimple/Datetime.cpp

--- /orginal/cimple-1.0.0/src/cimple/Datetime.cpp     2007-05-04 21:00:20.000000000 +0200

+++ /x86-64/cimple-1.0.0/src/cimple/Datetime.cpp      2008-10-03 16:45:55.296920000 +0200

@@ -26,6 +26,7 @@

 

 #define _BSD_SOURCE

 

+#include <winsock2.h>

 #include "config.h"

 #include "Atomic.h"

 #include <sys/types.h>

Tylko w /x86-64/cimple-1.0.0/src/cimple: options.h

diff -aur /orginal/cimple-1.0.0/src/cimple/tests/array/main.cpp /x86-64/cimple-1.0.0/src/cimple/tests/array/main.cpp

--- /orginal/cimple-1.0.0/src/cimple/tests/array/main.cpp   2007-05-04 21:00:20.000000000 +0200

+++ /x86-64/cimple-1.0.0/src/cimple/tests/array/main.cpp    2008-10-03 16:45:55.316939000 +0200

@@ -184,8 +184,8 @@

     }

 

     {

-        const boolean data[] = { true, false };

-        Array<boolean> x(data, 2);

+        const cimple::boolean data[] = { true, false };

+        Array<cimple::boolean> x(data, 2);

         assert(x.size() == 2);

         assert(x[0] == true);

         assert(x[1] == false);

diff -aur /orginal/cimple-1.0.0/src/cmpi/adapter/CMPI_Adapter.cpp /x86-64/cimple-1.0.0/src/cmpi/adapter/CMPI_Adapter.cpp

--- /original/cimple-1.0.0/src/cmpi/adapter/CMPI_Adapter.cpp      2007-05-04 21:00:18.000000000 +0200

+++ /x86-64/cimple-1.0.0/src/cmpi/adapter/CMPI_Adapter.cpp  2008-10-03 16:45:55.362984000 +0200

@@ -85,8 +85,8 @@

     sd->instance_ft.miName = sd->inst_mi_name;

 

     sd->instance_ft.cleanup = CMPI_Adapter::instanceCleanup;

-    sd->instance_ft.enumInstanceNames = CMPI_Adapter::enumInstanceNames;

-    sd->instance_ft.enumInstances = CMPI_Adapter::enumInstances;

+    sd->instance_ft.enumerateInstanceNames = CMPI_Adapter::enumInstanceNames;

+    sd->instance_ft.enumerateInstances = CMPI_Adapter::enumInstances;

     sd->instance_ft.getInstance = CMPI_Adapter::getInstance;

     sd->instance_ft.createInstance = CMPI_Adapter::createInstance;

     sd->instance_ft.modifyInstance = CMPI_Adapter::modifyInstance;

@@ -680,7 +680,7 @@

     // Create model.

 

     Instance* model = clone(cimple_inst);

-    Ref<Instance> model_d(cimple_inst);

+    Ref<Instance> model_d(model);

     filter_properties(model, properties);

 

     // Invoke the provider:

diff -aur /orginal/cimple-1.0.0/src/tools/gencommon/gencommon.cpp /x86-64/cimple-1.0.0/src/tools/gencommon/gencommon.cpp

--- /orginal/cimple-1.0.0/src/tools/gencommon/gencommon.cpp 2007-05-04 21:00:18.000000000 +0200

+++ /x86-64/cimple-1.0.0/src/tools/gencommon/gencommon.cpp  2008-10-03 16:45:55.351973000 +0200

@@ -84,7 +84,7 @@

 

                 if (stat(tmp.c_str(), &st) == 0)

                 {

-                    schema_mof = tmp;

+                    schema_mof = string(name);

                     closedir(dir);

                     return 0;

                 }

@@ -108,14 +108,9 @@

     char* tmp = strdup(mof_path);

     bool found = false;

 

-    for (char* p = strtok(tmp, ":"); p; p = strtok(NULL, ":"))

-    {

-        MOF_include_paths[MOF_num_include_paths++] = strdup(p);

-

-        if (_find_schema_mof(p, _schema_mof) == 0)

-            found = true;

-

-    }

+    MOF_include_paths[MOF_num_include_paths++] = strdup(tmp);

+    if (_find_schema_mof(tmp, _schema_mof) == 0)

+        found = true;

     free(tmp);

 
  1. Enter into the Cimple source directory: “cd cimple-1.0.0”
  2. Apply the patch to Cimple sources using the command patch for Windows platform delivered within CygWin.
  3. Recompile Cimple: “make clean; make”
  4. Reinstall Cimple: “make install”

Environment limitations on Windows 2008 Server 64-bit platforms

During preparing CDMv2 Provider on Windows 2008 Server 64-bit platform there were some problems with OpenPegasus 2.7.0. Compilation of this CIM Object Manager was successfully completed, but there were problems with the creation of CIM repository. Therefore we recommended using Win 2k8 64-bit OpenPegasus 2.8.0 instead of version 2.7.0.

Patch Quartzville Linux Driver for proper installation on SLES 10 SP1 Linux distributions

The attached Quartzville Linux Driver improperly detects SLES distribution. In order to allow proper installation of this driver, perform the following steps:

  1. Unpack driver source to temporary location:

# tar xzvf /opt/IntelCDMv2/drivers/iqvlinux.tar.gz 

  1. Go to source:

# cd src/linux/driver 

  1. Patch Makefile, localized in directory src/linux/driver/

--- Makefile.orig 2008-10-03 08:39:26.000000000 +0200

+++ Makefile      2008-10-03 08:39:38.000000000 +0200

@@ -159,7 +159,7 @@

 

 # look for SMP in config.h

 SMP := $(shell $(CC) $(CFLAGS) -E -dM $(CONFIG_FILE) | \

-         grep CONFIG_SMP | awk '{ print $$3 }')

+         grep '\<CONFIG_SMP\>' | awk '{ print $$3 }')

 ifneq ($(SMP),1)

   SMP := 0

 endif

  1.  Run make:

# make KSRC=/usr/src/linux-obj/i586/bigsmp NALDIR=$PWD 

Make sure that the KSRC path above matches your running kernel. You also need the kernel-source package to be installed.

  1. Install the module in the appropriate directory:

#cp iqvlinux.ko \

/lib/modules/2.6.16.46-0.12-bigsmp/kernel/drivers/net/iqvlinux.ko

Make sure the path above matches your running kernel.

You also may need to run "depmod -a" if the driver refuses to load.

Localization of Intel CDMv2 Provider help files

This provider expects that it is installed in a particular destination directory. In this directory this provider looks for help files which are needed for support CIM_HelpService class.

For any Linux distribution, CDMv2 Provider returns help files from the following directory: /usr/share/doc/package/IntelCDMv2/

For any Windows distribution CDMv2 Provider returns help files from the following directory: %PROGRAMFILES%/Intel/CDMv2.0/

Windows 2008 Server unresponsive after provider removal/disable during ongoing operation

When the CDMv2 Provider is disabled and removed (using cimprovider -r command) while at the same time some tests are being executed, there is observed (after a few seconds) that the OS can be nearly halted. There were observed some problems with cimserver.exe (CIM Object Manager of Pegasus). In this case the cimserver crashed pointing to some problems with “Unknown” module or “CimpleCMPIAdap.dll”.

We recommend not removing the CDMv2 Provider during the ongoing operation.

Version 1.0.0.1

Defect “ModifyInstance” in 3rd party Cimple library

The Cimple library in version 1.0.0 contains a defect that could cause CIM provider core dumps in some situations.

Root cause

When CIMOM (or other CMPI client) tries to use “modify_instance” method, the Cimple CMPI adapter double destructs the same object. This implies double freeing the same memory location.

Location

The defect is located in Cimple’s CMPI adapter, CMPI_Adapter::ModifyInstance method, file src/cmpi/adapter/CMPI_Adapter.cpp, line 683.

This line constructs “Ref<Instance> model_d” object with the wrong parameter “cimple_inst”: “Ref<Instance> model_d(cimple_inst);”.

Instead of “cimple_inst”, the “model” variable shall be used as a “model_d” constructor parameter, like the following: “Ref<Instance> model_d(model);”

Workaround #1

Patch Cimple with attached file, as following:

  1. Get the following patch :

diff -Naur
cimple-1.0.0.original/src/cmpi/adapter/CMPI_Adapter.cpp
cimple-1.0.0.patched/src/cmpi/adapter/CMPI_Adapter.cpp

 

--- cimple-1.0.0.original/src/cmpi/adapter/CMPI_Adapter.cpp 2007-05-04 21:00:17 +0200

+++ cimple-1.0.0.patched/src/cmpi/adapter/CMPI_Adapter.cpp  2008-08-19 13:05:21 +0200

@@ -680,7 +680,7 @@

     // Create model.

 

     Instance* model = clone(cimple_inst);

-    Ref<Instance> model_d(cimple_inst);

+    Ref<Instance> model_d(model);

     filter_properties(model, properties);

 

     // Invoke the provider:

  1. Enter into the Cimple source directory: “cd cimple-1.0.0”
  2. Apply patch to Cimple sources using command patch (for Windows platform you can use patch from CygWin)
  3. Recompile Cimple: “make clean; make”
  4. Reinstall Cimple: “make install” 

Workaround #2

Avoid using the “modify_instance”  method. Use the “create_instance” method instead.