This document describes all known issues of using Intel CDM v2.0 Provider.
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 |
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
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
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
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
New documentation file format
Automatically loads the driver during the CDMv2 Provider initialization.
Support for BartonVille and Windley Key devices
Support for RHEL5.5 and SLES11.0
The Intel CDM v2.0 Provider is the CIM-compliant Diagnostics Provider for Intel’s network adapter.
This release delivers the
CIM classes described in the document "CIM Classes Detailed Description.htm".
The provider delivers the diagnostic test for
Intel network adapters described in the document "Diagnostic Test
Description.htm"
The installation package requires:
- Cimple framework version 1.0.0 with CMPI library
The description of the installation process is published in the document “Installation Guide.htm”
This section describes all known issues connected with the release of this product:
Support for ‘Interrupt diagnostic test’ has been disabled for all supported Operating Systems.
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.
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.
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)”.
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:
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);
The attached Quartzville Linux Driver improperly detects SLES distribution. In order to allow proper installation of this driver, perform the following steps:
# tar xzvf /opt/IntelCDMv2/drivers/iqvlinux.tar.gz
# cd 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
# 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.
#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.
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/
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.
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:
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:
Workaround #2
Avoid using the “modify_instance” method. Use the “create_instance” method
instead.