summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors.kodali <s.kodali>2010-10-29 05:29:45 +0000
committers.kodali <s.kodali>2010-10-29 05:29:45 +0000
commitfc230e169eaf3722f506b3f3dc2f92779b8f622f (patch)
tree54bb15cbf27b3f70bdd27f201ad16f1fbc74c119
parent453543d5d3ffa909045684448a1bf9c615fc1de5 (diff)
downloadtog-pegasus-fc230e169eaf3722f506b3f3dc2f92779b8f622f.zip
tog-pegasus-fc230e169eaf3722f506b3f3dc2f92779b8f622f.tar.gz
tog-pegasus-fc230e169eaf3722f506b3f3dc2f92779b8f622f.tar.xz
BUG#: 8864
TITLE: PEP 318: 32bit providers in 64bit OpenPegasus
-rw-r--r--Makefile23
-rw-r--r--Makefile.Release24
-rw-r--r--Makefile.cimprovagt32178
-rw-r--r--Schemas/Pegasus/InterOp/VER20/PG_ProviderModule20.mof16
-rw-r--r--TestMakefile17
-rw-r--r--doc/BuildAndReleaseOptions.html17
-rw-r--r--env_var_Linux.status7
-rw-r--r--mak/config.mak28
-rw-r--r--rpm/tog-pegasus.spec68
-rw-r--r--rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec27
-rw-r--r--rpm/tog-specfiles/tog-pegasus-build.spec16
-rw-r--r--rpm/tog-specfiles/tog-pegasus-install.spec8
-rw-r--r--rpm/tog-specfiles/tog-pegasus-intro.spec4
-rw-r--r--src/Executor/Defines.h24
-rw-r--r--src/Executor/Messages.h1
-rw-r--r--src/Executor/Parent.c18
-rw-r--r--src/Executor/main.c14
-rw-r--r--src/Pegasus/Client/Makefile4
-rw-r--r--src/Pegasus/Common/Constants.cpp2
-rw-r--r--src/Pegasus/Common/Constants.h10
-rw-r--r--src/Pegasus/Common/Executor.cpp12
-rw-r--r--src/Pegasus/Common/Executor.h3
-rw-r--r--src/Pegasus/Common/tests/Executor/TestExecutor.cpp4
-rw-r--r--src/Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.cpp28
-rw-r--r--src/Pegasus/ProviderManager2/CMPI/Makefile1
-rw-r--r--src/Pegasus/ProviderManagerRouter/OOPProviderManagerRouter.cpp23
-rw-r--r--src/Pegasus/ProviderManagerService/ProviderAgent/Makefile6
-rw-r--r--src/Pegasus/ProviderManagerService/ProviderManagerService.cpp18
-rw-r--r--src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.cpp19
-rw-r--r--src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h7
-rw-r--r--src/Providers/TestProviders/CMPI/TestAssociation/tests/Makefile3
-rw-r--r--src/Providers/TestProviders/CMPI/TestCMPIBrokerEnc/tests/Makefile3
-rw-r--r--src/Providers/TestProviders/CMPI/TestCMPIEnumeration/tests/Makefile3
-rw-r--r--src/Providers/TestProviders/CMPI/TestExecQuery/tests/Makefile3
-rw-r--r--src/Providers/TestProviders/CMPI/TestIndications/tests/Makefile3
-rw-r--r--src/Providers/TestProviders/CMPI/TestMethod/tests/Makefile3
-rw-r--r--src/Providers/TestProviders/DefaultInstanceProvider/Makefile1
-rw-r--r--src/Providers/TestProviders/Load/Makefile26
-rw-r--r--src/Providers/TestProviders/Load/TestCMPI_ProviderRegistration32Bit.mof201
-rw-r--r--src/Providers/TestProviders/Load/TestCPP_ProviderRegistration32Bit.mof91
-rw-r--r--src/Providers/TestProviders/Makefile.cimprovagt32tests41
41 files changed, 962 insertions, 43 deletions
diff --git a/Makefile b/Makefile
index 4aa324e..2714053 100644
--- a/Makefile
+++ b/Makefile
@@ -50,7 +50,7 @@ TEST_DIRS = test
# Define the inclusion of the recurse.mak file to execute the next
# level of makefiles defined by the DIRS variable
-defaultrule: all setupdevserver
+defaultrule: cimprovagt32 all setupdevserver
include $(ROOT)/mak/recurse.mak
@@ -154,7 +154,7 @@ depend: buildmu
#-----------------------
# build target: builds all source
#
-build: depend all setupdevserver
+build: cimprovagt32depend cimprovagt32 depend all setupdevserver
#------------------------
# rebuild target is being deprecated instead use "make new build"
@@ -177,7 +177,7 @@ rebuild: rebuild_msg shortsleep new build s_unittests repository
# make new build
# make new world
-new: clean repositoryclean
+new: cimprovagt32clean clean repositoryclean
#-----------------------
# world targets: builds everything and dependent on which target may do testing
@@ -186,6 +186,23 @@ new: clean repositoryclean
world: build s_unittests servertests
+############################
+#
+# rules for building 32 bit provider agent
+#
+cimprovagt32depend: FORCE
+ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 depend
+endif
+cimprovagt32: FORCE
+ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32
+endif
+
+cimprovagt32clean: FORCE
+ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 clean
+endif
############################
#
diff --git a/Makefile.Release b/Makefile.Release
index 81ec3fc..78930d5 100644
--- a/Makefile.Release
+++ b/Makefile.Release
@@ -838,6 +838,9 @@ endif
@$(CAT) $(ROOT)/rpm/tog-specfiles/tog-pegasus-arch.spec \
>> $(PEGASUS_RPM_SPEC_FILE_PATH)
@$(ECHO-E) "" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(CAT) $(ROOT)/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
@$(ECHO-E) "%global PEGASUS_ARCH_LIB %{_lib}" >> \
$(PEGASUS_RPM_SPEC_FILE_PATH)
@$(ECHO-E) "%global OPENSSL_HOME $(OPENSSL_HOME)" >> \
@@ -1182,6 +1185,27 @@ _append_filesSectionToSpecFile: FORCE
@$(ECHO-E) "%attr($(Prwxr_xr_x),$(INSTALL_USR),$(INSTALL_GRP))" \
"$(PEGASUS_PROVIDER_MANAGER_LIB_DIR_2)/*$(LIB_SUFFIX)" \
>> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%dir /usr/lib/Pegasus" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%dir /usr/lib/Pegasus/providers" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%dir /usr/lib/Pegasus/providerManagers" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%attr($(Prwxr_xr_x),$(INSTALL_USR),$(INSTALL_GRP))" \
+ "/usr/lib/*$(LIB_SUFFIX)" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%attr($(Prwxr_xr_x),$(INSTALL_USR),$(INSTALL_GRP))" \
+ "/usr/lib/Pegasus/providerManagers/*$(LIB_SUFFIX)" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "/usr/lib/libpegclient.so" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "/usr/lib/libpegcommon.so" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "/usr/lib/libpegprovider.so" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "/usr/lib/libDefaultProviderManager.so" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "/usr/lib/Pegasus/providerManagers/libCMPIProviderManager.so" \
+ >> $(PEGASUS_RPM_SPEC_FILE_PATH)
+ @$(ECHO-E) "%endif" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
@$(ECHO-E) "%attr($(Prwxr_x___),$(INSTALL_USR),$(INSTALL_GRP))" \
"$(PEGASUS_SCRIPT_DIR)/*" >> $(PEGASUS_RPM_SPEC_FILE_PATH)
@$(ECHO-E) "%attr($(Prw_r__r__),$(INSTALL_USR),$(INSTALL_GRP))" \
diff --git a/Makefile.cimprovagt32 b/Makefile.cimprovagt32
new file mode 100644
index 0000000..0fab478
--- /dev/null
+++ b/Makefile.cimprovagt32
@@ -0,0 +1,178 @@
+#//%LICENSE////////////////////////////////////////////////////////////////
+#//
+#// Licensed to The Open Group (TOG) under one or more contributor license
+#// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
+#// this work for additional information regarding copyright ownership.
+#// Each contributor licenses this file to you under the OpenPegasus Open
+#// Source License; you may not use this file except in compliance with the
+#// License.
+#//
+#// Permission is hereby granted, free of charge, to any person obtaining a
+#// copy of this software and associated documentation files (the "Software"),
+#// to deal in the Software without restriction, including without limitation
+#// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#// and/or sell copies of the Software, and to permit persons to whom the
+#// Software is furnished to do so, subject to the following conditions:
+#//
+#// The above copyright notice and this permission notice shall be included
+#// in all copies or substantial portions of the Software.
+#//
+#// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+#// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+#// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+#// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+#// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+#// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#//
+#//////////////////////////////////////////////////////////////////////////
+
+ROOT = .
+
+include $(ROOT)/env_var.status
+
+export PEGASUS_PLATFORM=$(PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT)
+export PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT=true
+ifdef PEGASUS_DEST_LIB_DIR
+ export PEGASUS_DEST_LIB_DIR=$(PEGASUS_DEST_LIB_DIR)32
+else
+ export PEGASUS_DEST_LIB_DIR=lib32
+endif
+
+include $(ROOT)/mak/config.mak
+
+DIRS = \
+ src/Pegasus/Common \
+ src/Pegasus/General \
+ src/Pegasus/Config \
+ src/Pegasus/Query/QueryCommon \
+ src/Pegasus/Client
+
+ifeq ($(PEGASUS_ENABLE_CQL),true)
+ DIRS += src/Pegasus/CQL
+endif
+
+DIRS += \
+ src/Pegasus/WQL \
+ src/Pegasus/Query/QueryExpression \
+ src/Pegasus/Provider \
+ src/Pegasus/Provider/CMPI \
+ src/Pegasus/ProviderManager2 \
+ src/Pegasus/ProviderManager2/Default \
+ src/Pegasus/ProviderManagerRouter \
+ src/Pegasus/ProviderManagerService/ProviderAgent
+
+
+ifeq ($(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER), true)
+ DIRS += \
+ src/Pegasus/Provider/CMPI \
+ src/Pegasus/ProviderManager2/CMPI
+endif
+
+TEST_DIRS += \
+ src/Providers/TestProviders/MethodTestProvider \
+ src/Providers/TestProviders/InstanceProvider \
+ src/Providers/TestProviders/CMPI \
+ src/Providers/TestProviders/PerformanceTests
+
+include $(ROOT)/mak/recurse.mak
+
+ifeq ($(PEGASUS_USE_RELEASE_DIRS), true)
+PEGASUS_32BIT_LIBRARIES = \
+ libProviderRegistrationProvider \
+ libpegclient \
+ libpeggeneral \
+ libpegcommon \
+ libpegconfig \
+ libpegpmservice \
+ libpegprm \
+ libpegprovider \
+ libpegprovidermanager \
+ libpegrepository \
+ libpegwql \
+ libDefaultProviderManager \
+ libpegqueryexpression \
+ libpegquerycommon \
+ libpegservice \
+ libpegpmrouter
+
+ifeq ($(PEGASUS_ENABLE_CQL),true)
+ PEGASUS_32BIT_LIBRARIES += \
+ libpegcql \
+ libCIMQueryCapabilitiesProvider
+endif
+
+ifeq ($(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER),true)
+PEGASUS_32BIT_LIBRARIES += \
+ libcmpiCppImpl
+PEGASUS_32BIT_PROVIDER_MANAGERS += \
+ libCMPIProviderManager
+endif
+
+PEGASUS_32BIT_LIBRARY_LINKS = \
+ libpegclient \
+ libpegcommon \
+ libpegprovider \
+ libDefaultProviderManager
+
+PEGASUS_32BIT_ADMIN_CMDS = \
+ cimprovagt32
+
+ifndef PEGASUS_FLAVOR
+ PEGASUS_FLAVOR = tog
+endif
+
+ifeq ($(PEGASUS_FLAVOR), tog)
+ PEGASUS_PROD_DIR = /usr
+else
+ PEGASUS_PROD_DIR = /usr/local/$(PEGASUS_FLAVOR)-pegasus
+endif
+
+PEGASUS_ARCH_LIB = lib
+PEGASUS_DEST_LIB_DIR = $(PEGASUS_PROD_DIR)/$(PEGASUS_ARCH_LIB)
+PEGASUS_SBIN_DIR = $(PEGASUS_PROD_DIR)/sbin
+PEGASUS_PROVIDER_DIR = $(PEGASUS_PROD_DIR)/$(PEGASUS_ARCH_LIB)/Pegasus
+PEGASUS_PROVIDER_LIB_DIR = $(PEGASUS_PROVIDER_DIR)/providers
+
+PEGASUS_SYSTEM_DIRECTORIES = \
+ $(PEGASUS_PROD_DIR) \
+ $(PEGASUS_SBIN_DIR) \
+ $(PEGASUS_DEST_LIB_DIR) \
+ $(PEGASUS_PROVIDER_DIR) \
+ $(PEGASUS_PROVIDER_LIB_DIR) \
+ $(PEGASUS_PROVIDER_MANAGER_LIB_DIR)
+
+stage: FORCE
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 stage_PegasusDirectories
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 stage_PegasusFiles
+
+stage_PegasusDirectories: FORCE
+ $(foreach i, $(PEGASUS_SYSTEM_DIRECTORIES), $(MKDIRHIER) $(PEGASUS_STAGING_DIR)$(i);)
+
+stage_PegasusFiles: FORCE
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 stage_PegasusLibraryDirectoryFiles
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 stage_PegasusProviderManagerLibraryDirectoryFiles
+ $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 stage_PegasusAdminCmdsDirectoryFiles
+
+stage_PegasusLibraryDirectoryFiles: FORCE
+ $(foreach i, $(PEGASUS_32BIT_LIBRARIES), $(COPY) $(PEGASUS_HOME)/lib32/$(i)$(LIB_SUFFIX) $(PEGASUS_STAGING_DIR)$(PEGASUS_DEST_LIB_DIR)/$(i)$(LIB_SUFFIX);)
+ $(foreach i, $(PEGASUS_32BIT_LIBRARY_LINKS), $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 createlink OBJECT=$(i)$(LIB_SUFFIX) LINKNAME=$(PEGASUS_STAGING_DIR)$(PEGASUS_DEST_LIB_DIR)/$(i)$(LIB_LINK_SUFFIX);)
+
+stage_PegasusProviderLibraryDirectoryFiles: FORCE
+ $(foreach i, $(PEGASUS_PROVIDERS), $(COPY) $(PEGASUS_HOME)/lib32/$(i)$(LIB_SUFFIX) $(PEGASUS_STAGING_DIR)$(PEGASUS_PROVIDER_LIB_DIR)/$(i)$(LIB_SUFFIX);)
+ $(foreach i, $(PEGASUS_PROVIDERS), $(MAKE) --directory=$(ROOT) -f Makefile.cimprovagt32 createlink OBJECT=$(i)$(LIB_SUFFIX) LINKNAME=$(PEGASUS_STAGING_DIR)$(PEGASUS_PROVIDER_LIB_DIR)/$(i)$(LIB_LINK_SUFFIX);)
+
+stage_PegasusProviderManagerLibraryDirectoryFiles: FORCE
+ $(foreach i, $(PEGASUS_32BIT_PROVIDER_MANAGERS), $(COPY) $(PEGASUS_HOME)/lib32/$(i)$(LIB_SUFFIX) $(PEGASUS_STAGING_DIR)$(PEGASUS_PROVIDER_MANAGER_LIB_DIR)/$(i)$(LIB_SUFFIX);)
+ $(foreach i, $(PEGASUS_32BIT_PROVIDER_MANAGERS), $(MAKE) --directory=${ROOT} -f Makefile.cimprovagt32 createlink OBJECT=$(i)$(LIB_SUFFIX) LINKNAME=$(PEGASUS_STAGING_DIR)$(PEGASUS_PROVIDER_MANAGER_LIB_DIR)/$(i)$(LIB_LINK_SUFFIX);)
+
+stage_PegasusAdminCmdsDirectoryFiles: FORCE
+ $(foreach i, $(PEGASUS_32BIT_ADMIN_CMDS), $(COPY) $(PEGASUS_HOME)/bin/$(i)$(EXE) $(PEGASUS_STAGING_DIR)$(PEGASUS_SBIN_DIR)/$(i)$(EXE);)
+
+.PHONY: FORCE
+
+FORCE:
+
+include $(ROOT)/mak/commands.mak
+
+endif
diff --git a/Schemas/Pegasus/InterOp/VER20/PG_ProviderModule20.mof b/Schemas/Pegasus/InterOp/VER20/PG_ProviderModule20.mof
index 80fddd1..c693880 100644
--- a/Schemas/Pegasus/InterOp/VER20/PG_ProviderModule20.mof
+++ b/Schemas/Pegasus/InterOp/VER20/PG_ProviderModule20.mof
@@ -137,6 +137,22 @@ class PG_ProviderModule : CIM_LogicalElement {
" Sets the module group name")]
sint16 setModuleGroupName([IN] string moduleGroupName);
+ [Description(
+ " Uint16 value indicating the provider module bitness."
+ " This option is useful when the CIMServer is compiled"
+ " to support different types of (bitness) provider modules. For"
+ " example: 64 bit CIMServer supporting the 32 bit provider"
+ " modules. \"Default\" indicates both provider module and"
+ " CIMServer have same bitness."
+ " \"32\" indicates that the provider module is 32/31-bit type."
+ " \"64\" indicates that the provider module is 64-bit type."
+ " If the specified bitness is different from CIMServer bitness,"
+ " the provider module is always loaded into out of process"
+ " irrespective of forceProviderProcesses option value."),
+ ValueMap {"1", "2", "3", "4"},
+ Values {"Default", "32", "64" }]
+ uint16 Bitness;
+
[Description ("")]
uint32 start();
[Description ("")]
diff --git a/TestMakefile b/TestMakefile
index 174e716..71588e2 100644
--- a/TestMakefile
+++ b/TestMakefile
@@ -309,6 +309,7 @@ serversuite: FORCE
ifeq ($(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER),true)
$(MAKE) --directory=$(PEGASUS_ROOT) -f TestMakefile run_Cmpi_Sub
endif
+ $(MAKE) --directory=$(PEGASUS_ROOT) -f TestMakefile cimprovagt32tests
$(MAKE) --directory=$(PEGASUS_ROOT) -f TestMakefile run_idleConnectionTimeout1
$(MAKE) --directory=$(PEGASUS_ROOT) -f TestMakefile run_idleConnectionTimeout2
@@ -856,6 +857,21 @@ run_Cmpi_Sub: FORCE
##############################################################################
+#############################################################################
+##
+## 32-bit provider tests on 64-bit CIMServer
+##
+#############################################################################
+
+TEST_32BIT_CONFIG_OPTIONS = providerDir=lib32:lib
+TEST_32BIT_CMDS = \
+ $(MAKE)@@--directory \
+ $(PEGASUS_ROOT)/src/Providers/TestProviders -f@@Makefile.cimprovagt32tests@@cimprovagt32tests
+cimprovagt32tests: FORCE
+ $(MAKE) -f $(PEGASUS_ROOT)/TestMakefile runTestSuite \
+ CIMSERVER_CONFIG_OPTIONS="$(TEST_32BIT_CONFIG_OPTIONS)" \
+ TESTSUITE_CMDS="$(TEST_32BIT_CMDS)"
+
##############################################################################
##
## TestXMLRepository rule is used to run the poststarttests suite on
@@ -1084,7 +1100,6 @@ TestRegBuild: FORCE
@ $(MAKE) "-SC" $(ROOT)/src/Pegasus/Repository depend
@ $(MAKE) "-SC" $(ROOT)/src/Pegasus/Repository
-
###############################################################################
##
## Trace Configuration
diff --git a/doc/BuildAndReleaseOptions.html b/doc/BuildAndReleaseOptions.html
index 6e02450..4d9a8d2 100644
--- a/doc/BuildAndReleaseOptions.html
+++ b/doc/BuildAndReleaseOptions.html
@@ -1730,6 +1730,23 @@ additional information.</p>
<br>
</ul>
+<h5>PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT</h5>
+<ul>
+ <b>Description:&nbsp;</b> Builds the Pegasus with 32-bit provider support for the specified platform.
+ If this option is set, the value MUST be one of the 32-bit supported platforms by Pegasus.
+ <br>
+ <b>Default Value:&nbsp;</b>Not set<br>
+ <b>Recommended Value (Development Build):&nbsp;</b>Not set<br>
+ <b>Recommended Value (Release Build):&nbsp;</b>Not set<br>
+ <b>Required:&nbsp;</b>No<br>
+ <b>Considerations:&nbsp;</b>
+ This option is used to run the 32-bit providers under 64-bit CIMserver.
+ To register the 32-bit providers, register the provider module by setting the
+ Bitness property value to "2". 32-bit Providers are always loaded out of process
+ irrespective of forceProviderProcesses config option.
+ <br>
+</ul>
+
<h5>PEGASUS_USE_SQLITE_REPOSITORY</h5>
<ul>
<b>Description:&nbsp;</b>If true, new repository stores are created
diff --git a/env_var_Linux.status b/env_var_Linux.status
index 24213ba..d27c8f0 100644
--- a/env_var_Linux.status
+++ b/env_var_Linux.status
@@ -51,6 +51,7 @@ JAVA_SDK=/usr/lib/jvm
JAVA_SDKINC=/usr/lib/gcc/$(PEGASUS_JAVA_ARCH)-redhat-linux/4.1.1
PEGASUS_FLAVOR = tog
+#PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=
ifeq ($(PEGASUS_FLAVOR), tog)
@@ -59,6 +60,9 @@ PEGASUS_VARDATA_DIR = /var/lib/Pegasus
PEGASUS_CONFIG_DIR = /etc/Pegasus
PEGASUS_VARRUN_DIR = /var/run/tog-pegasus
PAM_CONFIG_FILE=wbem
+ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+PEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR=$(PEGASUS_PROD_DIR)/lib/Pegasus/providerManagers
+endif
else
@@ -67,6 +71,9 @@ PEGASUS_VARDATA_DIR = $(PEGASUS_PROD_DIR)/var/Pegasus
PEGASUS_CONFIG_DIR = $(PEGASUS_PROD_DIR)/etc/Pegasus
PEGASUS_VARRUN_DIR = $(PEGASUS_PROD_DIR)/var/run/$(PEGASUS_FLAVOR)-pegasus
PAM_CONFIG_FILE=wbem$(PEGASUS_FLAVOR)
+ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+PEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR=$(PEGASUS_PROD_DIR)/lib/Pegasus/providerManagers
+endif
endif
diff --git a/mak/config.mak b/mak/config.mak
index c2139ca..266d217 100644
--- a/mak/config.mak
+++ b/mak/config.mak
@@ -105,9 +105,17 @@ endif
##
ifndef ALT_OBJ_DIR
+ ifeq ($(PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT),true)
+ OBJ_DIR = $(HOME_DIR)/obj32/$(DIR)
+ else
OBJ_DIR = $(HOME_DIR)/obj/$(DIR)
+ endif
else
+ ifeq ($(PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT),true)
+ OBJ_DIR = $(HOME_DIR)/obj/$(ALT_OBJ_DIR)32
+ else
OBJ_DIR = $(HOME_DIR)/obj/$(ALT_OBJ_DIR)
+ endif
endif
#############################################################################
@@ -118,7 +126,12 @@ ifdef PEGASUS_TEST_VALGRIND_LOG_DIR
else
BIN_DIR = $(HOME_DIR)/bin
endif
-LIB_DIR = $(HOME_DIR)/lib
+
+ifeq ($(PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT),true)
+ LIB_DIR = $(HOME_DIR)/lib32
+else
+ LIB_DIR = $(HOME_DIR)/lib
+endif
# l10n
# define the location for the compiled messages
@@ -525,6 +538,19 @@ ifdef PEGASUS_REMOVE_TRACE
DEFINES += -DPEGASUS_REMOVE_TRACE
endif
+
+ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+ PLATFORM_FILE_32 = $(ROOT)/mak/platform_$(PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT).mak
+ ifeq ($(wildcard $(PLATFORM_FILE_32)), )
+ $(error PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT environment variable must be set to one of\
+ the following:$(VALID_PLATFORMS))
+ endif
+ DEFINES += -DPEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+ ifdef PEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR
+ DEFINES += -DPEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR=\"$(PEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR)\"
+ endif
+endif
+
# PEP 315
# Control whether compile with or without method entertexit trace code.
# A value other than 'true' or 'false' will cause a make error.
diff --git a/rpm/tog-pegasus.spec b/rpm/tog-pegasus.spec
index 27daa0b..e685d77 100644
--- a/rpm/tog-pegasus.spec
+++ b/rpm/tog-pegasus.spec
@@ -60,6 +60,10 @@ Epoch: 1
# Use "rpmbuild --define 'EXTERNAL_SLP_REQUESTED 1'" to include External SLP support.
%{?!EXTERNAL_SLP_REQUESTED: %define EXTERNAL_SLP_REQUESTED 0}
+# Use "rpmbuild --define 'PEGASUS_32BIT_PROVIDER_SUPPORT 1'" to build 32 bit
+# providers for 64 bit CIMOM.
+%{?!PEGASUS_32BIT_PROVIDER_SUPPORT: %define PEGASUS_32BIT_PROVIDER_SUPPORT 0}
+
Summary: OpenPegasus WBEM Services for Linux
Name: %{Flavor}-pegasus
Group: Systems Management/Base
@@ -152,6 +156,34 @@ sources.
#
# End of section pegasus/rpm/tog-specfiles/tog-pegasus-arch.spec
+# Start of section pegasus/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec
+# This is required only when PEGASUS_32BIT_PROVIDER_SUPPORT is set
+
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+
+%ifarch x86_64
+%global PEGASUS_HARDWARE_PLATFORM_FOR_32BIT LINUX_IX86_GNU
+%global PEGASUS_EXTRA_CXX_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Wno-unused -m32"
+%global PEGASUS_EXTRA_LINK_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -march=i386 -mtune=generic -fasynchronous-unwind-tables -m32"
+%else
+%ifarch ppc64 pseries
+%global PEGASUS_HARDWARE_PLATFORM_FOR_32BIT LINUX_PPC_GNU
+%global PEGASUS_EXTRA_CXX_FLAGS_32BIT "-O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -m32 -Wno-unused"
+%global PEGASUS_EXTRA_LINK_FLAGS_32BIT "-O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -m32"
+%else
+%ifarch s390x zseries
+%global PEGASUS_HARDWARE_PLATFORM_FOR_32BIT LINUX_ZSERIES_GNU
+%global PEGASUS_EXTRA_CXX_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m31 -Wno-unused"
+%global PEGASUS_EXTRA_LINK_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m31"
+%endif
+%endif
+%endif
+
+%endif
+
+#
+# End of section pegasus/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec
+
%global PEGASUS_ARCH_LIB %{_lib}
%global OPENSSL_HOME /usr
%global OPENSSL_BIN /usr/bin
@@ -243,12 +275,28 @@ sed -i 's/PEGASUS_ENABLE_SLP=.*$/PEGASUS_ENABLE_SLP=true/' $PEGASUS_ENVVAR_FILE
sed -i 's/PEGASUS_ENABLE_SLP=.*$/PEGASUS_ENABLE_SLP=false/' $PEGASUS_ENVVAR_FILE
%endif
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+sed -i 's/#PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=.*$/PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=%PEGASUS_HARDWARE_PLATFORM_FOR_32BIT/' $PEGASUS_ENVVAR_FILE
+%endif
+
make -f $PEGASUS_ROOT/Makefile.Release create_ProductVersionFile
make -f $PEGASUS_ROOT/Makefile.Release create_CommonProductDirectoriesInclude
make -f $PEGASUS_ROOT/Makefile.Release create_ConfigProductDirectoriesInclude
make %{?_smp_mflags} -f $PEGASUS_ROOT/Makefile.Release all
chmod 777 %PEGASUS_RPM_HOME
make -f $PEGASUS_ROOT/Makefile.Release repository
+
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+
+export PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=%PEGASUS_HARDWARE_PLATFORM_FOR_32BIT
+export PEGASUS_EXTRA_C_FLAGS=%PEGASUS_EXTRA_CXX_FLAGS_32BIT
+export PEGASUS_EXTRA_CXX_FLAGS="$PEGASUS_EXTRA_C_FLAGS"
+export PEGASUS_EXTRA_LINK_FLAGS=%PEGASUS_EXTRA_LINK_FLAGS_32BIT
+
+make %{?_smp_mflags} -f $PEGASUS_ROOT/Makefile.cimprovagt32 all
+
+%endif
+
#
# End of section pegasus/rpm/tog-specfiles/tog-pegasus-build.spec
@@ -276,6 +324,14 @@ make -f $PEGASUS_ROOT/Makefile.Release stage \
PEGASUS_STAGING_DIR=$PEGASUS_STAGING_DIR
%endif
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+export PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=%PEGASUS_HARDWARE_PLATFORM_FOR_32BIT
+export LD_LIBRARY_PATH=$PEGASUS_HOME/lib32
+make -f $PEGASUS_ROOT/Makefile.cimprovagt32 stage \
+ PEGASUS_STAGING_DIR=$PEGASUS_STAGING_DIR
+
+%endif
+
[ "$PEGASUS_HOME" != "/" ] && [ -d $PEGASUS_HOME ] && rm -rf $PEGASUS_HOME;
#
# End of section pegasus/rpm/tog-specfiles/tog-pegasus-install.spec
@@ -519,6 +575,18 @@ fi
%endif
%attr(755,root,pegasus) /usr/%PEGASUS_ARCH_LIB/Pegasus/providers/*.so.1
%attr(755,root,pegasus) /usr/%PEGASUS_ARCH_LIB/Pegasus/providerManagers/*.so.1
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+%dir /usr/lib/Pegasus
+%dir /usr/lib/Pegasus/providers
+%dir /usr/lib/Pegasus/providerManagers
+%attr(755,root,pegasus) /usr/lib/*.so.1
+%attr(755,root,pegasus) /usr/lib/Pegasus/providerManagers/*.so.1
+/usr/lib/libpegclient.so
+/usr/lib/libpegcommon.so
+/usr/lib/libpegprovider.so
+/usr/lib/libDefaultProviderManager.so
+/usr/lib/Pegasus/providerManagers/libCMPIProviderManager.so
+%endif
%attr(750,root,pegasus) /usr/share/Pegasus/scripts/*
%attr(644,root,pegasus) /usr/share/man/man1/*
%attr(644,root,pegasus) /usr/share/man/man8/*
diff --git a/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec b/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec
new file mode 100644
index 0000000..dc8a042
--- /dev/null
+++ b/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec
@@ -0,0 +1,27 @@
+# Start of section pegasus/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec
+# This is required when BIT_32_PROVIDERS_SUPPORT_FOR_BIT_64_CIMOM is set
+
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+
+%ifarch x86_64
+%global PEGASUS_HARDWARE_PLATFORM_FOR_32BIT LINUX_IX86_GNU
+%global PEGASUS_EXTRA_CXX_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Wno-unused -m32"
+%global PEGASUS_EXTRA_LINK_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -march=i386 -mtune=generic -fasynchronous-unwind-tables -m32"
+%else
+%ifarch ppc64 pseries
+%global PEGASUS_HARDWARE_PLATFORM_FOR_32BIT LINUX_PPC_GNU
+%global PEGASUS_EXTRA_CXX_FLAGS_32BIT "-O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -m32 -Wno-unused"
+%global PEGASUS_EXTRA_LINK_FLAGS_32BIT "-O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -m32"
+%else
+%ifarch s390x zseries
+%global PEGASUS_HARDWARE_PLATFORM_FOR_32BIT LINUX_ZSERIES_GNU
+%global PEGASUS_EXTRA_CXX_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m31 -Wno-unused"
+%global PEGASUS_EXTRA_LINK_FLAGS_32BIT "-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m31"
+%endif
+%endif
+%endif
+
+%endif
+
+#
+# End of section pegasus/rpm/tog-specfiles/tog-pegasus-arch-for-32bit-provider-support.spec
diff --git a/rpm/tog-specfiles/tog-pegasus-build.spec b/rpm/tog-specfiles/tog-pegasus-build.spec
index d757264..c340108 100644
--- a/rpm/tog-specfiles/tog-pegasus-build.spec
+++ b/rpm/tog-specfiles/tog-pegasus-build.spec
@@ -33,11 +33,27 @@ sed -i 's/PEGASUS_ENABLE_SLP=.*$/PEGASUS_ENABLE_SLP=true/' $PEGASUS_ENVVAR_FILE
sed -i 's/PEGASUS_ENABLE_SLP=.*$/PEGASUS_ENABLE_SLP=false/' $PEGASUS_ENVVAR_FILE
%endif
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+sed -i 's/#PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=.*$/PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=%PEGASUS_HARDWARE_PLATFORM_FOR_32BIT/' $PEGASUS_ENVVAR_FILE
+%endif
+
make -f $PEGASUS_ROOT/Makefile.Release create_ProductVersionFile
make -f $PEGASUS_ROOT/Makefile.Release create_CommonProductDirectoriesInclude
make -f $PEGASUS_ROOT/Makefile.Release create_ConfigProductDirectoriesInclude
make %{?_smp_mflags} -f $PEGASUS_ROOT/Makefile.Release all
chmod 777 %PEGASUS_RPM_HOME
make -f $PEGASUS_ROOT/Makefile.Release repository
+
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+
+export PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=%PEGASUS_HARDWARE_PLATFORM_FOR_32BIT
+export PEGASUS_EXTRA_C_FLAGS=%PEGASUS_EXTRA_CXX_FLAGS_32BIT
+export PEGASUS_EXTRA_CXX_FLAGS="$PEGASUS_EXTRA_C_FLAGS"
+export PEGASUS_EXTRA_LINK_FLAGS=%PEGASUS_EXTRA_LINK_FLAGS_32BIT
+
+make %{?_smp_mflags} -f $PEGASUS_ROOT/Makefile.cimprovagt32 all
+
+%endif
+
#
# End of section pegasus/rpm/tog-specfiles/tog-pegasus-build.spec
diff --git a/rpm/tog-specfiles/tog-pegasus-install.spec b/rpm/tog-specfiles/tog-pegasus-install.spec
index 52ede05..83e906f 100644
--- a/rpm/tog-specfiles/tog-pegasus-install.spec
+++ b/rpm/tog-specfiles/tog-pegasus-install.spec
@@ -21,6 +21,14 @@ make -f $PEGASUS_ROOT/Makefile.Release stage \
PEGASUS_STAGING_DIR=$PEGASUS_STAGING_DIR
%endif
+%if %{PEGASUS_32BIT_PROVIDER_SUPPORT}
+export PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT=%PEGASUS_HARDWARE_PLATFORM_FOR_32BIT
+export LD_LIBRARY_PATH=$PEGASUS_HOME/lib32
+make -f $PEGASUS_ROOT/Makefile.cimprovagt32 stage \
+ PEGASUS_STAGING_DIR=$PEGASUS_STAGING_DIR
+
+%endif
+
[ "$PEGASUS_HOME" != "/" ] && [ -d $PEGASUS_HOME ] && rm -rf $PEGASUS_HOME;
#
# End of section pegasus/rpm/tog-specfiles/tog-pegasus-install.spec
diff --git a/rpm/tog-specfiles/tog-pegasus-intro.spec b/rpm/tog-specfiles/tog-pegasus-intro.spec
index e8d12f8..b3bb35d 100644
--- a/rpm/tog-specfiles/tog-pegasus-intro.spec
+++ b/rpm/tog-specfiles/tog-pegasus-intro.spec
@@ -13,6 +13,10 @@
# Use "rpmbuild --define 'EXTERNAL_SLP_REQUESTED 1'" to include External SLP support.
%{?!EXTERNAL_SLP_REQUESTED: %define EXTERNAL_SLP_REQUESTED 0}
+# Use "rpmbuild --define 'PEGASUS_32BIT_PROVIDER_SUPPORT 1'" to build 32 bit
+# providers for 64 bit CIMOM.
+%{?!PEGASUS_32BIT_PROVIDER_SUPPORT: %define PEGASUS_32BIT_PROVIDER_SUPPORT 0}
+
Summary: OpenPegasus WBEM Services for Linux
Name: %{Flavor}-pegasus
Group: Systems Management/Base
diff --git a/src/Executor/Defines.h b/src/Executor/Defines.h
index 99e0613..5ec2578 100644
--- a/src/Executor/Defines.h
+++ b/src/Executor/Defines.h
@@ -145,6 +145,18 @@
/*
**==============================================================================
**
+** CIMPROVAGT32
+**
+** The name of the 32-bit provider agent program.
+**
+**==============================================================================
+*/
+
+#define CIMPROVAGT32 "cimprovagt32"
+
+/*
+**==============================================================================
+**
** CIMSERVERA
**
** The name of the external PAM authentication program.
@@ -157,6 +169,18 @@
/*
**==============================================================================
**
+** ProviderModule bitness values
+**
+**==============================================================================
+*/
+
+#define BITNESS_DEFAULT 1
+#define BITNESS_32 2
+#define BITNESS_64 3
+
+/*
+**==============================================================================
+**
** EXIT_ON_POLICY_FAILURE
**
** If this is defined, the executor exits on any policy failure.
diff --git a/src/Executor/Messages.h b/src/Executor/Messages.h
index bed5ef7..0912340 100644
--- a/src/Executor/Messages.h
+++ b/src/Executor/Messages.h
@@ -163,6 +163,7 @@ struct ExecutorRenameFileResponse
struct ExecutorStartProviderAgentRequest
{
+ unsigned short moduleBitness;
char module[EXECUTOR_BUFFER_SIZE];
char userName[EXECUTOR_BUFFER_SIZE];
};
diff --git a/src/Executor/Parent.c b/src/Executor/Parent.c
index a58245b..4c3fb6b 100644
--- a/src/Executor/Parent.c
+++ b/src/Executor/Parent.c
@@ -291,9 +291,21 @@ static void HandleStartProviderAgentRequest(int sock)
const char* path;
- if ((path = FindMacro("cimprovagtPath")) == NULL)
- Fatal(FL, "Failed to locate %s program", CIMPROVAGT);
-
+ if (request.moduleBitness == BITNESS_DEFAULT)
+ {
+ if ((path = FindMacro("cimprovagtPath")) == NULL)
+ Fatal(FL, "Failed to locate %s program", CIMPROVAGT);
+ }
+ else if (request.moduleBitness == BITNESS_32)
+ {
+ if ((path = FindMacro("cimprovagt32Path")) == NULL)
+ Fatal(FL, "Failed to locate %s program", CIMPROVAGT32);
+ }
+ else
+ {
+ status = -1;
+ break;
+ }
#if !defined(PEGASUS_DISABLE_PROV_USERCTXT)
/* Look up the user ID and group ID of the specified user. */
diff --git a/src/Executor/main.c b/src/Executor/main.c
index a76a9ac..558da0c 100644
--- a/src/Executor/main.c
+++ b/src/Executor/main.c
@@ -153,6 +153,10 @@ void DefineExecutorMacros(void)
DefineMacro("cimprovagt", CIMPROVAGT);
+ /* Define ${cimprovagt} */
+
+ DefineMacro("cimprovagt32", CIMPROVAGT32);
+
/* Define ${cimshutdown} */
DefineMacro("cimshutdown", CIMSHUTDOWN);
@@ -181,6 +185,16 @@ void DefineExecutorMacros(void)
DefineMacro("cimprovagtPath", path);
}
+ /* Define ${cimprovagt32Path} */
+ {
+ char path[EXECUTOR_BUFFER_SIZE];
+
+ if (ExpandMacros("${internalBinDir}/${cimprovagt32}", path) != 0)
+ Fatal(FL, "failed to resolve cimprovagt32Path");
+
+ DefineMacro("cimprovagt32Path", path);
+ }
+
/* Define ${cimshutdownPath} */
{
char path[EXECUTOR_BUFFER_SIZE];
diff --git a/src/Pegasus/Client/Makefile b/src/Pegasus/Client/Makefile
index ee0279e..396cae5 100644
--- a/src/Pegasus/Client/Makefile
+++ b/src/Pegasus/Client/Makefile
@@ -47,6 +47,7 @@ LIBRARY = pegclient
LIBRARIES = \
pegcommon
+ifndef PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT
ifeq ($(PEGASUS_ENABLE_SLP),true)
ifneq ($(OS_TYPE),windows)
LIBRARIES += pegslp_client
@@ -54,6 +55,7 @@ ifeq ($(PEGASUS_ENABLE_SLP),true)
SYS_LIBS = $(PEGASUS_HOME)/lib/pegslp_client.lib
endif
endif
+endif
PRE_DEPEND_INCLUDES = -I./depends
@@ -70,9 +72,11 @@ SOURCES = \
SOURCES_SLP = \
CIMServerDiscovery.cpp
+ifndef PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT
ifeq ($(PEGASUS_ENABLE_SLP),true)
SOURCES += $(SOURCES_SLP)
endif
+endif
include $(ROOT)/mak/dynamic-library.mak
diff --git a/src/Pegasus/Common/Constants.cpp b/src/Pegasus/Common/Constants.cpp
index 0518c17..1723d2d 100644
--- a/src/Pegasus/Common/Constants.cpp
+++ b/src/Pegasus/Common/Constants.cpp
@@ -161,6 +161,8 @@ const CIMName PEGASUS_PROPERTYNAME_MODULE_DESIGNATEDUSER =
CIMNameCast("DesignatedUserContext");
const CIMName PEGASUS_PROPERTYNAME_MODULE_MODULEGROUPNAME =
CIMNameCast("ModuleGroupName");
+const CIMName PEGASUS_PROPERTYNAME_MODULE_BITNESS =
+ CIMNameCast("Bitness");
/**
The name of the Destination property for CIM XML Indication Handler
diff --git a/src/Pegasus/Common/Constants.h b/src/Pegasus/Common/Constants.h
index 03a3e22..6b94ef6 100644
--- a/src/Pegasus/Common/Constants.h
+++ b/src/Pegasus/Common/Constants.h
@@ -370,6 +370,9 @@
# undef PEGASUS_DEFAULT_MESSAGE_SOURCE /* Not defined */
#endif
+#define PEGASUS_PROVIDER_AGENT32_PROC_NAME \
+ PEGASUS_PROVIDER_AGENT_PROC_NAME "32"
+
/* Use the PID file as a semaphore for repository access */
/* Use the configuration file instead of the PID file on Windows*/
#ifdef PEGASUS_OS_TYPE_WINDOWS
@@ -406,6 +409,11 @@
#define PG_PROVMODULE_USERCTXT_PRIVILEGED 4
#define PG_PROVMODULE_USERCTXT_CIMSERVER 5
+/* Constants defining Bitness values in a PG_ProviderModule */
+#define PG_PROVMODULE_BITNESS_DEFAULT 1
+#define PG_PROVMODULE_BITNESS_32 2
+#define PG_PROVMODULE_BITNESS_64 3
+
/* Constant defining Server truststore type value in a PG_SSLCertificate */
#define PG_SSLCERTIFICATE_TSTYPE_VALUE_SERVER Uint16(2)
@@ -657,6 +665,8 @@ PEGASUS_COMMON_LINKAGE
extern const CIMName PEGASUS_PROPERTYNAME_MODULE_DESIGNATEDUSER;
PEGASUS_COMMON_LINKAGE
extern const CIMName PEGASUS_PROPERTYNAME_MODULE_MODULEGROUPNAME;
+PEGASUS_COMMON_LINKAGE
+ extern const CIMName PEGASUS_PROPERTYNAME_MODULE_BITNESS;
/**
The name of the Destination property for CIM XML Indication Handler
diff --git a/src/Pegasus/Common/Executor.cpp b/src/Pegasus/Common/Executor.cpp
index 45e53d5..9f51cd5 100644
--- a/src/Pegasus/Common/Executor.cpp
+++ b/src/Pegasus/Common/Executor.cpp
@@ -111,6 +111,7 @@ public:
const char* path) = 0;
virtual int startProviderAgent(
+ unsigned short bitness,
const char* module,
const String& pegasusHome,
const String& userName,
@@ -217,6 +218,7 @@ public:
virtual int startProviderAgent(
+ unsigned short bitness,
const char* module,
const String& pegasusHome,
const String& userName,
@@ -231,7 +233,10 @@ public:
// Resolve full path of "cimprovagt" program.
String path = FileSystem::getAbsolutePath(
- pegasusHome.getCString(), PEGASUS_PROVIDER_AGENT_PROC_NAME);
+ pegasusHome.getCString(),
+ bitness == PG_PROVMODULE_BITNESS_32 ?
+ PEGASUS_PROVIDER_AGENT32_PROC_NAME :
+ PEGASUS_PROVIDER_AGENT_PROC_NAME);
// Create CString handles for cimprovagt arguments
@@ -779,6 +784,7 @@ public:
}
virtual int startProviderAgent(
+ unsigned short bitness,
const char* module,
const String& pegasusHome,
const String& userName,
@@ -818,6 +824,7 @@ public:
memset(&request, 0, sizeof(request));
memcpy(request.module, module, moduleNameLength);
memcpy(request.userName, userNameCString, userNameLength);
+ request.moduleBitness = bitness;
if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request))
return -1;
@@ -1138,6 +1145,7 @@ int Executor::removeFile(
}
int Executor::startProviderAgent(
+ unsigned short bitness,
const char* module,
const String& pegasusHome,
const String& userName,
@@ -1146,7 +1154,7 @@ int Executor::startProviderAgent(
AnonymousPipe*& writePipe)
{
once(&_executorImplOnce, _initExecutorImpl);
- return _executorImpl->startProviderAgent(
+ return _executorImpl->startProviderAgent(bitness,
module, pegasusHome, userName, pid, readPipe, writePipe);
}
diff --git a/src/Pegasus/Common/Executor.h b/src/Pegasus/Common/Executor.h
index c2646fc..04a5cca 100644
--- a/src/Pegasus/Common/Executor.h
+++ b/src/Pegasus/Common/Executor.h
@@ -142,7 +142,7 @@ public:
/** Start a provider agent as the given user. The provider agent will
load the given provider module.
-
+ @param type of provider module (32 or 64 bit)
@param module name of provider module to be loaded.
@param pegasusHome the Pegasus home directory to use to find the
cimprovagt executable.
@@ -154,6 +154,7 @@ public:
@return 0=success, -1=failure
*/
static int startProviderAgent(
+ unsigned short bitness,
const char* module,
const String& pegasusHome,
const String& userName,
diff --git a/src/Pegasus/Common/tests/Executor/TestExecutor.cpp b/src/Pegasus/Common/tests/Executor/TestExecutor.cpp
index 8dacda6..d9ae35d 100644
--- a/src/Pegasus/Common/tests/Executor/TestExecutor.cpp
+++ b/src/Pegasus/Common/tests/Executor/TestExecutor.cpp
@@ -70,7 +70,7 @@ void testExecutorLoopbackImpl()
AnonymousPipe* readPipe;
AnonymousPipe* writePipe;
PEGASUS_TEST_ASSERT(Executor::startProviderAgent(
- "MyModule", "HomeDir", "me", pid, readPipe, writePipe) == -1);
+ 1, "MyModule", "HomeDir", "me", pid, readPipe, writePipe) == -1);
PEGASUS_TEST_ASSERT(Executor::reapProviderAgent(123) == -1);
#endif
@@ -110,7 +110,7 @@ void testExecutorSocketImpl()
AnonymousPipe* readPipe;
AnonymousPipe* writePipe;
PEGASUS_TEST_ASSERT(Executor::startProviderAgent(
- "MyModule", "HomeDir", "me", pid, readPipe, writePipe) == -1);
+ 1, "MyModule", "HomeDir", "me", pid, readPipe, writePipe) == -1);
PEGASUS_TEST_ASSERT(Executor::reapProviderAgent(123) == 0);
diff --git a/src/Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.cpp b/src/Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.cpp
index 9981a46..5549ed2 100644
--- a/src/Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.cpp
+++ b/src/Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.cpp
@@ -387,6 +387,34 @@ void ProviderRegistrationProvider::createInstance(
" PG_ProviderModule class."));
}
+ Uint32 bitnessIndx = instanceObject.findProperty(
+ PEGASUS_PROPERTYNAME_MODULE_BITNESS);
+
+ if (bitnessIndx != PEG_NOT_FOUND)
+ {
+ CIMValue value = instanceObject.getProperty(bitnessIndx).getValue();
+ if (!value.isNull())
+ {
+ if (value.getType() != CIMTYPE_UINT16)
+ {
+ throw PEGASUS_CIM_EXCEPTION(CIM_ERR_TYPE_MISMATCH,
+ PEGASUS_PROPERTYNAME_MODULE_BITNESS.getString());
+ }
+ Uint16 bitness;
+ value.get(bitness);
+ if(bitness != PG_PROVMODULE_BITNESS_DEFAULT
+#ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT
+ && bitness != PG_PROVMODULE_BITNESS_32
+ && bitness != PG_PROVMODULE_BITNESS_64
+#endif
+ )
+ {
+ throw PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED,
+ PEGASUS_PROPERTYNAME_MODULE_BITNESS.getString());
+ }
+ }
+ }
+
if (instanceObject.findProperty(_PROPERTY_VERSION) == PEG_NOT_FOUND)
{
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER,
diff --git a/src/Pegasus/ProviderManager2/CMPI/Makefile b/src/Pegasus/ProviderManager2/CMPI/Makefile
index e7f5172..5258aeb 100644
--- a/src/Pegasus/ProviderManager2/CMPI/Makefile
+++ b/src/Pegasus/ProviderManager2/CMPI/Makefile
@@ -49,7 +49,6 @@ endif
LIBRARIES = \
pegprovider \
pegprovidermanager \
- pegprm \
pegclient \
pegquerycommon \
pegwql \
diff --git a/src/Pegasus/ProviderManagerRouter/OOPProviderManagerRouter.cpp b/src/Pegasus/ProviderManagerRouter/OOPProviderManagerRouter.cpp
index 510cdf9..feb43d9 100644
--- a/src/Pegasus/ProviderManagerRouter/OOPProviderManagerRouter.cpp
+++ b/src/Pegasus/ProviderManagerRouter/OOPProviderManagerRouter.cpp
@@ -176,6 +176,7 @@ class ProviderAgentContainer
{
public:
ProviderAgentContainer(
+ Uint16 bitness,
const String & groupNameWithType,
const String & userName,
Uint16 userContext,
@@ -304,6 +305,8 @@ private:
*/
Mutex _agentMutex;
+ Uint16 _bitness;
+
/**
Name of the provider module or group served by this Provider Agent.
*/
@@ -420,6 +423,7 @@ private:
*/
Boolean _subscriptionInitComplete;
+
/**
OOPProviderManagerRouter ThreadPool pointer.
*/
@@ -435,6 +439,7 @@ CIMResponseMessage* ProviderAgentContainer::_REQUEST_NOT_PROCESSED =
static_cast<CIMResponseMessage*>((void*)&_REQUEST_NOT_PROCESSED);
ProviderAgentContainer::ProviderAgentContainer(
+ Uint16 bitness,
const String & groupName,
const String & userName,
Uint16 userContext,
@@ -445,6 +450,7 @@ ProviderAgentContainer::ProviderAgentContainer(
Boolean subscriptionInitComplete,
ThreadPool* threadPool)
:
+ _bitness(bitness),
_groupNameWithType(groupName),
_userName(userName),
_userContext(userContext),
@@ -510,8 +516,8 @@ void ProviderAgentContainer::_startAgentProcess()
int pid;
AnonymousPipe* readPipe;
AnonymousPipe* writePipe;
-
int status = Executor::startProviderAgent(
+ (unsigned short)_bitness,
(const char*)_moduleOrGroupName.getCString(),
ConfigManager::getPegasusHome(),
_userName,
@@ -1900,6 +1906,20 @@ ProviderAgentContainer* OOPProviderManagerRouter::_lookupProviderAgent(
}
}
+ Uint16 bitness = PG_PROVMODULE_BITNESS_DEFAULT;
+ pos = providerModule.findProperty(
+ PEGASUS_PROPERTYNAME_MODULE_BITNESS);
+
+ if (pos != PEG_NOT_FOUND)
+ {
+ CIMValue value =
+ providerModule.getProperty(pos).getValue();
+ if (!value.isNull())
+ {
+ value.get(bitness);
+ }
+ }
+
if (userContext == 0)
{
// PASE has a default user context "QYCMCIMOM",
@@ -1978,6 +1998,7 @@ ProviderAgentContainer* OOPProviderManagerRouter::_lookupProviderAgent(
if (!_providerAgentTable.lookup(key, pa))
{
pa = new ProviderAgentContainer(
+ bitness,
groupNameWithType, userName, userContext,
_indicationCallback, _responseChunkCallback,
_providerModuleGroupFailCallback,
diff --git a/src/Pegasus/ProviderManagerService/ProviderAgent/Makefile b/src/Pegasus/ProviderManagerService/ProviderAgent/Makefile
index ef98784..ef40763 100644
--- a/src/Pegasus/ProviderManagerService/ProviderAgent/Makefile
+++ b/src/Pegasus/ProviderManagerService/ProviderAgent/Makefile
@@ -67,7 +67,11 @@ EXTRA_LINK_FLAGS += $(JVM_LINK_FLAGS)
LOCAL_DEFINES = -DPEGASUS_PROVIDERAGENT_INTERNAL -DPEGASUS_INTERNALONLY
-PROGRAM = cimprovagt
+ifeq ($(PEGASUS_INTERNAL_ENABLE_32BIT_PROVIDER_SUPPORT),true)
+ PROGRAM = cimprovagt32
+else
+ PROGRAM = cimprovagt
+endif
SOURCES = \
ProviderAgent.cpp \
diff --git a/src/Pegasus/ProviderManagerService/ProviderManagerService.cpp b/src/Pegasus/ProviderManagerService/ProviderManagerService.cpp
index 451cc2a..7e782eb 100644
--- a/src/Pegasus/ProviderManagerService/ProviderManagerService.cpp
+++ b/src/Pegasus/ProviderManagerService/ProviderManagerService.cpp
@@ -709,6 +709,7 @@ Message* ProviderManagerService::_processMessage(CIMRequestMessage* request)
else
{
CIMInstance providerModule;
+ Uint16 bitness = PG_PROVMODULE_BITNESS_DEFAULT;
if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)
{
@@ -739,10 +740,22 @@ Message* ProviderManagerService::_processMessage(CIMRequestMessage* request)
itValue.get(interfaceType);
ivValue.get(interfaceVersion);
+ Uint32 idx = providerModule.findProperty(
+ PEGASUS_PROPERTYNAME_MODULE_BITNESS);
+
+ if (idx != PEG_NOT_FOUND)
+ {
+ CIMValue value = providerModule.getProperty(idx).getValue();
+ if (!value.isNull())
+ {
+ value.get(bitness);
+ }
+ }
+
String provMgrPath;
if (!ProviderManagerMap::instance().getProvMgrPathForIfcType(
- interfaceType, interfaceVersion, provMgrPath))
+ interfaceType, interfaceVersion, bitness, provMgrPath))
{
MessageLoaderParms parms(
"ProviderManager.ProviderManagerService."
@@ -820,7 +833,8 @@ Message* ProviderManagerService::_processMessage(CIMRequestMessage* request)
// on the CIM Server configuration and the UserContext setting.
if ( (_forceProviderProcesses &&
- moduleGroupName != PG_PROVMODULE_GROUPNAME_CIMSERVER)
+ (moduleGroupName != PG_PROVMODULE_GROUPNAME_CIMSERVER))||
+ bitness == PG_PROVMODULE_BITNESS_32
#if !defined(PEGASUS_DISABLE_PROV_USERCTXT) && !defined(PEGASUS_OS_ZOS)
|| (userContext == PG_PROVMODULE_USERCTXT_REQUESTOR)
|| (userContext == PG_PROVMODULE_USERCTXT_DESIGNATED)
diff --git a/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.cpp b/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.cpp
index dcd6ee4..49bee11 100644
--- a/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.cpp
+++ b/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.cpp
@@ -87,8 +87,10 @@ bool ProviderManagerMap::isValidProvMgrIfc(String &ifcType, String &ifcVersion)
}
-bool ProviderManagerMap::getProvMgrPathForIfcType(String &ifcType,
- String &ifcVersion,
+bool ProviderManagerMap::getProvMgrPathForIfcType(
+ const String &ifcType,
+ const String &ifcVersion,
+ Uint16 bitness,
String &path)
{
path.clear();
@@ -98,14 +100,16 @@ bool ProviderManagerMap::getProvMgrPathForIfcType(String &ifcType,
{
if (ifcVersion.size()==0)
{
- path = _pmArray[ifc].path;
+ path = bitness == PG_PROVMODULE_BITNESS_32 ?
+ _pmArray[ifc].path32 : _pmArray[ifc].path;
return true;
}
else for (Uint32 ver=0; ver<_pmArray[ifc].ifcVersions.size(); ver++)
{
if (_pmArray[ifc].ifcVersions[ver] == ifcVersion)
{
- path = _pmArray[ifc].path;
+ path = bitness == PG_PROVMODULE_BITNESS_32 ?
+ _pmArray[ifc].path32 : _pmArray[ifc].path;
return true;
}
}
@@ -157,6 +161,12 @@ void ProviderManagerMap::initialize()
FileSystem::buildLibraryFileName("pegprovidermanager")))
{
String fullPath = dirName + "/" + filename;
+#ifdef PEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR
+ String fullPath32 = PEGASUS_PROVIDER_MANAGER_32BIT_LIB_DIR;
+ fullPath32 = fullPath32 + "/" + filename;
+#else
+ String fullPath32 = dirName + "32/" + filename;
+#endif
// found a file... assume it's a ProviderManager library
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
"Found file %s. Checking to see if it is a ProviderManager.",
@@ -243,6 +253,7 @@ void ProviderManagerMap::initialize()
ProvMgrIfcInfo entry;
entry.path = fullPath;
+ entry.path32 = fullPath32;
entry.ifcName = ifcName;
// now get the versions
diff --git a/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h b/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h
index 08fe11f..cb5cf61 100644
--- a/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h
+++ b/src/Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h
@@ -47,14 +47,17 @@ class PEGASUS_PRM_LINKAGE ProviderManagerMap
public:
static ProviderManagerMap& instance();
bool isValidProvMgrIfc(String &ifcType, String &ifcVersion);
- bool getProvMgrPathForIfcType(String &ifcType,
- String &ifcVersion,
+ bool getProvMgrPathForIfcType(
+ const String &ifcType,
+ const String &ifcVersion,
+ Uint16 bitness,
String &path);
private:
typedef struct __PROV_MGR_IFC_INFO_S
{
String path;
+ String path32;
String ifcName;
Array<String> ifcVersions;
} ProvMgrIfcInfo;
diff --git a/src/Providers/TestProviders/CMPI/TestAssociation/tests/Makefile b/src/Providers/TestProviders/CMPI/TestAssociation/tests/Makefile
index a10da58..eae4bb5 100644
--- a/src/Providers/TestProviders/CMPI/TestAssociation/tests/Makefile
+++ b/src/Providers/TestProviders/CMPI/TestAssociation/tests/Makefile
@@ -32,10 +32,7 @@ DIR = Providers/TestProviders/CMPI/TestAssociation/tests
include $(ROOT)/mak/config.mak
LIBRARIES = \
- pegserver \
pegclient \
- pegrepository \
- pegconfig \
pegcommon
diff --git a/src/Providers/TestProviders/CMPI/TestCMPIBrokerEnc/tests/Makefile b/src/Providers/TestProviders/CMPI/TestCMPIBrokerEnc/tests/Makefile
index 51e45ec..f985868 100644
--- a/src/Providers/TestProviders/CMPI/TestCMPIBrokerEnc/tests/Makefile
+++ b/src/Providers/TestProviders/CMPI/TestCMPIBrokerEnc/tests/Makefile
@@ -32,10 +32,7 @@ DIR = Providers/TestProviders/CMPI/TestCMPIBrokerEnc/tests
include $(ROOT)/mak/config.mak
LIBRARIES = \
- pegserver \
pegclient \
- pegrepository \
- pegconfig \
pegcommon
EXTRA_INCLUDES = $(SYS_INCLUDES)
diff --git a/src/Providers/TestProviders/CMPI/TestCMPIEnumeration/tests/Makefile b/src/Providers/TestProviders/CMPI/TestCMPIEnumeration/tests/Makefile
index 689631f..3a8ffc5 100644
--- a/src/Providers/TestProviders/CMPI/TestCMPIEnumeration/tests/Makefile
+++ b/src/Providers/TestProviders/CMPI/TestCMPIEnumeration/tests/Makefile
@@ -32,10 +32,7 @@ DIR = Providers/TestProviders/CMPI/TestCMPIEnumeration/tests
include $(ROOT)/mak/config.mak
LIBRARIES = \
- pegserver \
pegclient \
- pegrepository \
- pegconfig \
pegcommon
EXTRA_INCLUDES = $(SYS_INCLUDES)
diff --git a/src/Providers/TestProviders/CMPI/TestExecQuery/tests/Makefile b/src/Providers/TestProviders/CMPI/TestExecQuery/tests/Makefile
index 29683c0..04e0e05 100644
--- a/src/Providers/TestProviders/CMPI/TestExecQuery/tests/Makefile
+++ b/src/Providers/TestProviders/CMPI/TestExecQuery/tests/Makefile
@@ -32,10 +32,7 @@ DIR = Providers/TestProviders/CMPI/TestExecQuery/tests
include $(ROOT)/mak/config.mak
LIBRARIES = \
- pegserver \
pegclient \
- pegrepository \
- pegconfig \
pegcommon
EXTRA_INCLUDES = $(SYS_INCLUDES)
diff --git a/src/Providers/TestProviders/CMPI/TestIndications/tests/Makefile b/src/Providers/TestProviders/CMPI/TestIndications/tests/Makefile
index c09a891..ad29567 100644
--- a/src/Providers/TestProviders/CMPI/TestIndications/tests/Makefile
+++ b/src/Providers/TestProviders/CMPI/TestIndications/tests/Makefile
@@ -32,10 +32,7 @@ DIR = Providers/TestProviders/CMPI/TestIndications/tests
include $(ROOT)/mak/config.mak
LIBRARIES = \
- pegserver \
pegclient \
- pegrepository \
- pegconfig \
pegcommon
LOGFILES = TestCMPIIndication
diff --git a/src/Providers/TestProviders/CMPI/TestMethod/tests/Makefile b/src/Providers/TestProviders/CMPI/TestMethod/tests/Makefile
index 66a0848..7652f77 100644
--- a/src/Providers/TestProviders/CMPI/TestMethod/tests/Makefile
+++ b/src/Providers/TestProviders/CMPI/TestMethod/tests/Makefile
@@ -32,10 +32,7 @@ DIR = Providers/TestProviders/CMPI/TestMethod/tests
include $(ROOT)/mak/config.mak
LIBRARIES = \
- pegserver \
pegclient \
- pegrepository \
- pegconfig \
pegcommon
EXTRA_INCLUDES = $(SYS_INCLUDES)
diff --git a/src/Providers/TestProviders/DefaultInstanceProvider/Makefile b/src/Providers/TestProviders/DefaultInstanceProvider/Makefile
index 37ecb3e..fc5e304 100644
--- a/src/Providers/TestProviders/DefaultInstanceProvider/Makefile
+++ b/src/Providers/TestProviders/DefaultInstanceProvider/Makefile
@@ -38,7 +38,6 @@ LIBRARY = PG_DefaultInstanceProvider
LIBRARIES = \
pegprovider \
- pegrepository \
pegclient \
pegconfig \
pegcommon
diff --git a/src/Providers/TestProviders/Load/Makefile b/src/Providers/TestProviders/Load/Makefile
index 3e6ec41..79c518a 100644
--- a/src/Providers/TestProviders/Load/Makefile
+++ b/src/Providers/TestProviders/Load/Makefile
@@ -363,6 +363,32 @@ endif
cimprovider -r -m EmbeddedInstanceProviderModule
+setup32bittestproviders:
+ $ $(MAKE) unregister32bittestproviders
+ @ cimmof "-n$(INTEROPNS)" TestCPP_ProviderRegistration32Bit.mof
+ifeq ($(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER), true)
+ @ cimmof "-n$(INTEROPNS)" TestCMPI_ProviderRegistration32Bit.mof
+endif
+
+unsetup32bittestproviders:
+ $ $(MAKE) unregister32bittestproviders
+ @ cimmof "-n$(INTEROPNS)" MethodTestProviderR.mof
+ @ cimmof "-n$(INTEROPNS)" TestInstanceProviderRegistration.mof
+ifeq ($(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER), true)
+ @ cimmof "-n$(INTEROPNS)" TestCMPI_AssociationProviderR.mof
+ @ cimmof "-n$(INTEROPNS)" CMPIPerf_TestProviderRegistration.mof
+endif
+
+unregister32bittestproviders:
+ -cimprovider -r -m MethodTestProviderModule
+ -cimprovider -r -m TestInstanceProviderModule
+ifeq ($(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER), true)
+ -cimprovider -r -m TestCMPIAssociationProviderModule
+ -cimprovider -r -m cmpiPerf_TestAssocClassProviderModule
+ -cimprovider -r -m cmpiPerf_TestClassAProviderModule
+ -cimprovider -r -m cmpiPerf_TestClassProviderModule
+endif
+
depend:
sub:
diff --git a/src/Providers/TestProviders/Load/TestCMPI_ProviderRegistration32Bit.mof b/src/Providers/TestProviders/Load/TestCMPI_ProviderRegistration32Bit.mof
new file mode 100644
index 0000000..d9fb782
--- /dev/null
+++ b/src/Providers/TestProviders/Load/TestCMPI_ProviderRegistration32Bit.mof
@@ -0,0 +1,201 @@
+//%LICENSE////////////////////////////////////////////////////////////////
+//
+// Licensed to The Open Group (TOG) under one or more contributor license
+// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
+// this work for additional information regarding copyright ownership.
+// Each contributor licenses this file to you under the OpenPegasus Open
+// Source License; you may not use this file except in compliance with the
+// License.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+//////////////////////////////////////////////////////////////////////////
+#pragma locale ("en_US")
+
+// ===================================================================
+// cmpiPerf_TestClassB
+// ===================================================================
+
+instance of PG_ProviderModule
+{
+ Name = "cmpiPerf_TestClassProviderModule";
+ //The library name on disk
+ Location = "cmpiPerf_TestClassProvider";
+ Vendor = "IBM";
+ Version = "2.0.0";
+ InterfaceType = "CMPI";
+ Bitness = 2;
+ InterfaceVersion = "2.0.0";
+};
+
+instance of PG_Provider
+{
+ //The provider module as defined in PG_ProviderModule
+ ProviderModuleName = "cmpiPerf_TestClassProviderModule";
+ // The provider name as referenced in the code
+ Name = "cmpiPerf_TestClassProvider";
+};
+
+instance of PG_ProviderCapabilities
+{
+ //The provider module as defined in PG_ProviderModule
+ ProviderModuleName = "cmpiPerf_TestClassProviderModule";
+ //The provider name as defined in PG_Provider
+ ProviderName = "cmpiPerf_TestClassProvider";
+ CapabilityID = "1";
+ //Name of the CIM class as defined in the mof
+ ClassName = "cmpiPerf_TestClassB";
+ Namespaces = {"test/TestProvider"};
+ ProviderType = { 2 }; // Instance
+ SupportedProperties = NULL; // All properties
+ SupportedMethods = NULL; // All methods
+};
+
+// ===================================================================
+// cmpiPerf_TestClassA
+// ===================================================================
+
+instance of PG_ProviderModule
+{
+ Name = "cmpiPerf_TestClassAProviderModule";
+ //The library name on disk
+ Location = "cmpiPerf_TestClassAProvider";
+ Vendor = "IBM";
+ Version = "2.0.0";
+ InterfaceType = "CMPI";
+ Bitness = 2;
+ InterfaceVersion = "2.0.0";
+};
+
+instance of PG_Provider
+{
+ //The provider module as defined in PG_ProviderModule
+ ProviderModuleName = "cmpiPerf_TestClassAProviderModule";
+ // The provider name as referenced in the code
+ Name = "cmpiPerf_TestClassAProvider";
+};
+
+instance of PG_ProviderCapabilities
+{
+ //The provider module as defined in PG_ProviderModule
+ ProviderModuleName = "cmpiPerf_TestClassAProviderModule";
+ //The provider name as defined in PG_Provider
+ ProviderName = "cmpiPerf_TestClassAProvider";
+ CapabilityID = "1";
+ //Name of the CIM class as defined in the mof
+ ClassName = "cmpiPerf_TestClassA";
+ Namespaces = {"test/TestProvider"};
+ ProviderType = { 2 }; // Instance
+ SupportedProperties = NULL; // All properties
+ SupportedMethods = NULL; // All methods
+};
+
+// ===================================================================
+// cmpiPerf_TestAssocClass
+// ===================================================================
+
+instance of PG_ProviderModule
+{
+ Name = "cmpiPerf_TestAssocClassProviderModule";
+ //The library name on disk
+ Location = "cmpiPerf_TestAssocClassProvider";
+ Vendor = "IBM";
+ Version = "2.0.0";
+ InterfaceType = "CMPI";
+ Bitness = 2;
+ InterfaceVersion = "2.0.0";
+};
+
+instance of PG_Provider
+{
+ //The provider module as defined in PG_ProviderModule
+ ProviderModuleName = "cmpiPerf_TestAssocClassProviderModule";
+ // The provider name as referenced in the code
+ Name = "cmpiPerf_TestAssocClassProvider";
+};
+
+instance of PG_ProviderCapabilities
+{
+ //The provider module as defined in PG_ProviderModule
+ ProviderModuleName = "cmpiPerf_TestAssocClassProviderModule";
+ //The provider name as defined in PG_Provider
+ ProviderName = "cmpiPerf_TestAssocClassProvider";
+ CapabilityID = "1";
+ //Name of the CIM class as defined in the mof
+ ClassName = "cmpiPerf_TestAssocClass";
+ Namespaces = {"test/TestProvider"};
+ ProviderType = { 2,3 }; // Instance, Association
+ SupportedProperties = NULL; // All properties
+ SupportedMethods = NULL; // All methods
+};
+
+instance of PG_ProviderModule
+{
+ Description = "The Test CMPI Association Provider Module implements the CMPI_TEST_PERSON, Class";
+ Caption = "Test CMPI Association Pegasus Provider Module";
+ Name = "TestCMPIAssociationProviderModule";
+ Vendor = "OpenPegasus";
+ Version = "2.0.0";
+ InterfaceType = "CMPI";
+ Bitness = 2;
+ InterfaceVersion = "2.0.0";
+ Location = "TestCMPIAssociationProvider";
+};
+
+instance of PG_Provider
+{
+ ProviderModuleName = "TestCMPIAssociationProviderModule";
+ Name = "TestCMPIAssociationProvider";
+};
+
+instance of PG_ProviderCapabilities
+{
+ ProviderModuleName = "TestCMPIAssociationProviderModule";
+ ProviderName = "TestCMPIAssociationProvider";
+ CapabilityID = "TestCMPIAssociationProviderPerson";
+ ClassName = "CMPI_TEST_Person";
+ Namespaces = { "test/TestProvider", "test/Remote/Localhost" };
+ ProviderType = { 3 };
+ SupportedProperties = NULL;
+ SupportedMethods = NULL;
+};
+
+instance of PG_ProviderCapabilities
+{
+ ProviderModuleName = "TestCMPIAssociationProviderModule";
+ ProviderName = "TestCMPIAssociationProvider";
+ CapabilityID = "TestCMPIAssociationProviderVehicle";
+ ClassName = "CMPI_TEST_Vehicle";
+ Namespaces = { "test/TestProvider", "test/Remote/Localhost" };
+ ProviderType = { 3 };
+ SupportedProperties = NULL;
+ SupportedMethods = NULL;
+};
+
+instance of PG_ProviderCapabilities
+{
+ ProviderModuleName = "TestCMPIAssociationProviderModule";
+ ProviderName = "TestCMPIAssociationProvider";
+ CapabilityID = "TestCMPIAssociationProviderRacing";
+ ClassName = "CMPI_TEST_Racing";
+ Namespaces = { "test/TestProvider", "test/Remote/Localhost" };
+ ProviderType = { 3 };
+ SupportedProperties = NULL;
+ SupportedMethods = NULL;
+};
diff --git a/src/Providers/TestProviders/Load/TestCPP_ProviderRegistration32Bit.mof b/src/Providers/TestProviders/Load/TestCPP_ProviderRegistration32Bit.mof
new file mode 100644
index 0000000..c426428
--- /dev/null
+++ b/src/Providers/TestProviders/Load/TestCPP_ProviderRegistration32Bit.mof
@@ -0,0 +1,91 @@
+//%LICENSE////////////////////////////////////////////////////////////////
+//
+// Licensed to The Open Group (TOG) under one or more contributor license
+// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
+// this work for additional information regarding copyright ownership.
+// Each contributor licenses this file to you under the OpenPegasus Open
+// Source License; you may not use this file except in compliance with the
+// License.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+//////////////////////////////////////////////////////////////////////////
+#pragma locale ("en_US")
+
+instance of PG_ProviderModule
+{
+ Description = "Test provider for extrinsic method support";
+ Caption = "Pegasus Method Test Provider Module";
+ Name = "MethodTestProviderModule";
+ Vendor = "OpenPegasus";
+ Version = "2.5.0";
+ InterfaceType = "C++Default";
+ Bitness = 2;
+ InterfaceVersion = "2.5.0";
+ Location = "MethodTestProvider";
+};
+
+instance of PG_Provider
+{
+ ProviderModuleName = "MethodTestProviderModule";
+ Name = "MethodTestProvider";
+};
+
+instance of PG_ProviderCapabilities
+{
+ ProviderModuleName = "MethodTestProviderModule";
+ ProviderName = "MethodTestProvider";
+ CapabilityID = "MethodTestProviderCapability1";
+ ClassName = "Test_MethodProviderClass";
+ Namespaces = { "test/TestProvider" };
+ ProviderType = { 5 };
+ SupportedProperties = NULL;
+ SupportedMethods = { "getIdentity", "Test1", "Test2", "Test3", "Test4" };
+};
+
+instance of PG_ProviderModule
+{
+ Description = "A test provider to test variations of instances provider might return.";
+ Caption = "Pegasus Test Instance Provider Module";
+ Name = "TestInstanceProviderModule";
+ Vendor = "OpenPegasus";
+ Version = "2.5.0";
+ InterfaceType = "C++Default";
+ Bitness = 2;
+ InterfaceVersion = "2.5.0";
+ Location = "TestInstanceProvider";
+};
+
+instance of PG_Provider
+{
+ ProviderModuleName = "TestInstanceProviderModule";
+ Name = "TestInstanceProvider";
+};
+
+instance of PG_ProviderCapabilities
+{
+ ProviderModuleName = "TestInstanceProviderModule";
+ ProviderName = "TestInstanceProvider";
+ CapabilityID = "001";
+ ClassName = "TST_Instance1";
+ Namespaces = { "test/TestProvider" };
+ ProviderType = { 2 };
+ SupportedProperties = NULL;
+ SupportedMethods = NULL;
+};
diff --git a/src/Providers/TestProviders/Makefile.cimprovagt32tests b/src/Providers/TestProviders/Makefile.cimprovagt32tests
new file mode 100644
index 0000000..6c3ae9c
--- /dev/null
+++ b/src/Providers/TestProviders/Makefile.cimprovagt32tests
@@ -0,0 +1,41 @@
+#//%LICENSE////////////////////////////////////////////////////////////////
+#//
+#// Licensed to The Open Group (TOG) under one or more contributor license
+#// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
+#// this work for additional information regarding copyright ownership.
+#// Each contributor licenses this file to you under the OpenPegasus Open
+#// Source License; you may not use this file except in compliance with the
+#// License.
+#//
+#// Permission is hereby granted, free of charge, to any person obtaining a
+#// copy of this software and associated documentation files (the "Software"),
+#// to deal in the Software without restriction, including without limitation
+#// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#// and/or sell copies of the Software, and to permit persons to whom the
+#// Software is furnished to do so, subject to the following conditions:
+#//
+#// The above copyright notice and this permission notice shall be included
+#// in all copies or substantial portions of the Software.
+#//
+#// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+#// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+#// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+#// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+#// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+#// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#//
+#//////////////////////////////////////////////////////////////////////////
+
+ROOT = ../../..
+
+include $(ROOT)/mak/config.mak
+
+cimprovagt32tests:
+ $(MAKE) --directory=$(ROOT)/src/Providers/TestProviders/Load setup32bittestproviders
+ $(MAKE) --directory=$(ROOT)/src/Providers/TestProviders/MethodTestProvider/testclient poststarttests
+ $(MAKE) --directory=$(ROOT)/src/Providers/TestProviders/InstanceProvider/testclient poststarttests
+ $(MAKE) --directory=$(ROOT)/src/Providers/TestProviders/CMPI/TestAssociation/tests poststarttests
+ $(MAKE) --directory=$(ROOT)/src/Providers/TestProviders/PerformanceTests poststarttests
+ $(MAKE) --directory=$(ROOT)/src/Providers/TestProviders/Load unsetup32bittestproviders
+