Pegasus Enhancement Proposal (PEP)

PEP #: 345

Title: Release Notes for OpenPegasus 2.9.0

Created: 05 January 2009

Authors: Karl Schopmeyer

Status: draft

Version History:

1.0 | 05 January 2009 | Karl Schopmeyer | Initial Submission
1.1 | 16 Jananuary 2008 | Karl Schopmeyer | Update with comments from 1.0 incorporated.

Abstract: This document defines the release notes for the 2.9.0 release of the OpenPegasus CIM Server. The purpose of this PEP is to summarize the characteristics of this release, point to other documentation that defines the release in more detail, and provide additional information about this release that is not available in the other Pegasus documentation.

## Contents

1. Availability of this Release
2. OpenPegasus Functionality of This Release
3. Compatibility Considerations
4. Relationship to CIM/WBEM Standards
5. OpenPegasus Supported Platforms
6. Conformance with DMTF Specifications
7. OpenPegasus Bugs
8. OpenPegasus Release Control and Version Definition Documentation
9. General Documentation

## Availability of this Release

This release is available in a number of forms including:

- Source release in both ZIP (and ZIP EXE) and TAR formats. These can be downloaded from the OpenPegasus Web site at www.openpegasus.org.
- OpenPegasus source RPMs on the OpenPegasus web site.. A source RPM is available on the OpenPegasus web site that can be used to build binaries for most LSB-compliant RPM-based Linux distributions and versions.
- The Pegasus CVS repository. The CVS tags representing this release and subsequent snapshots that are made available in the Pegasus CVS are defined on the OpenPegasus CVS repository web page (see the OpenPegasus CVS page for information) using the tags defined on the release snapshots page.

The instructions for acquiring the released code are on the Pegasus WEB site. Installation instructions are part of the README in the root of the Pegasus source tree.

## OpenPegasus Functionality for This Release

Pegasus overall status by release is defined by a Feature Status WEB Page that is available on the OpenPegasus web site . That web page shows the Pegasus users and developers the status of the various features found in Pegasus using a simple color coded key (white, red, yellow, green) and a description of each feature.

Pegasus 2.9.0 is a major release, extending the previous Pegasus release in selected areas as described in the Pegasus PEP defining this release .

The major areas of development for this release were as follows. For more information access the PEP for each change defined:

Table of Major Changes for this Release

PEP/BUG # | Description of Change | Posted PEP Version
--- | --- | ---
PEP 311 | WS-Management Support in CIM Server - Phase II | 2.1
PEP 314 | SQLite Repository | 2.3
PEP 316 | In-Memory-Tracing | 1.1
PEP 328 | Solaris 11 (Nevada) support for CC compiler and IX86 | 1.2
Bug 7902 | Allow modifyClass on non-leaf class | 7902
Bug 7996 | 64 bit platform support for z;/OS | 7996
Bug 8074 | Significant performance enhancement in out-of-process providers (~ 300%) through binary protocol | 8074
Bug 8171 | Access to binary protocol for clients | 8171

The status of several components of Pegasus functionality change status between Pegasus versions. Features that have changed status can be identified by a change in color from the previous release to this release on the Feature Status WEB Page.

Finally, a significant number of internal changes and corrections were made under the control of the Pegasus bugzilla bug system. See the bug section below for more information.

### Information on IPv6 Support (PEP 291)

NOTE: This functionality was incorporated in OpenPegasus 2.7.0 but it was felt that the information below was worth repeating in subsequent Release Notes

IPv6 is short for "Internet Protocol Version 6". IPv6 is the "next generation" protocol designed by the IETF to replace the current version Internet Protocol, IP Version 4 ("IPv4"). IPv6 Support for OpenPegasus is documented in PEP 291 .

The IPv6 support in OpenPegasus is controlled by the PEGASUS_ENABLE_IPV6 build variable. The default for this variable is "true"; setting this to 'false' before building OpenPegasus will disable the IPv6 support.

The following subsections provide some information on IPv6 support for the Linux and Windows platforms. Note that in the 2.6.1 release there is no automatic run-time detection of IPv6 support on a platform by OpenPegasus. If you build with PEGASUS_ENABLE_IPV6=true, your platform must support IPv6 or you will get a build failure (missing header files), a run-time bind() failure, or possibly some other failure. This applies to both the CIM Server and Listener components. For more information on IPv6 support for your specific platform, refer to the documentation for that platform.

All OpenPegasus externals that support either a hostname or an IP address as input have been updated to allow an IPv6 address to be specified. If the required input is just an IP address (eg. no optional or required port number), then the IPv6 address must be specified without brackets. For example, the OpenPegasus osinfo client (which returns information about the OS running on a host system) takes separate host and port options. In this case a host with an IPv6-configured network interface would be specified as:

osinfo -h 3ffe:1:2:1 -p 5988

But the cimcli command, which takes an optional "location" option including an optional port number, requires the IPv6 address to be delimited with brackets, for example:

cimcli ns -l [3ffe:1:2:1]

or

cimcli ns -l [3ffe:1:2:1]:5989
For more information on specifying IPv6 addresses, refer to IETF RFC 2373 - IP Version 6 Addressing Architecture and IETF RFC 2732 - Format for Literal IPv6 Addresses in URL's.

#### IPv6 on Linux

Modern Linux distributions already contain IPv6-ready kernels, the IPv6 capability is generally compiled as a module, but it's possible that this module is not loaded automatically on startup.

Note: you shouldn't use kernel series 2.2.x, because it's not IPv6-up-to-date anymore. Also the IPv6 support in series 2.4.x is no longer improved according to definitions in latest RFCs. It's recommend to use series 2.6.x now.

To check whether your current running kernel supports IPv6, take a look into your /proc filesystem. The entry /proc/net/if_inet6 must exist. A short automated test looks like:

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"

For more information on enabling IPv6 in the Linux kernel and configuring network interfaces, refer to The Linux Documentation Project's IPv6 HOWTO.
Warning: There is currently an open issue with RedHat to address a problem that is seen intermittently on RHEL5 and SLES10 systems. This problem is described in Pegasus bug 6586 and RedHat bug 248052, and manifests itself as an intermittent IPv6 socket failure. You should be aware that OpenPegasus with IPv6 enabled may be significantly impacted in these environments.

#### IPv6 on Windows

Microsoft provides supported IPv6 implementations for Windows Server 2003, Windows XP with Service Pack 1 (SP1), Windows XP with Service Pack 2 (SP2), and Windows CE .NET 4.1 and later.

On Windows XP, you can use the ipv6.exe tool to install, uninstall, and query your IPv6 configuration. For example:
ipv6 install
ipv6 if

Windows Vista and Windows Server 2008 support an integrated IPv4 and IPv6 implementation known as the Next Generation TCP/IP stack. Note that the OpenPegasus IPv6 support has not yet been tested on Windows Vista or Windows Server 2008.
For more information on installing, configuring, and using IPv6 on Windows platforms, refer to the document IPv6 for Microsoft Windows: Frequently Asked Questions.

#### Testing your OpenPegasus IPv6 support

As part of the OpenPegasus automated tests, the TestClient, g11ntest, and IndicationStressTest test clients were modified to run tests using the IPv6 loopback address (::1) if PEGASUS_ENABLE_IPV6=true.
You can also perform manual tests using the IPv6 loopback or a real IPv6-configured network interface. For example, using the IPv6 loopback on a system with OpenPegasus running on the WBEM standard http port of 5988:
osinfo -h ::1

## Compatibility Considerations

Support for forward-compatibility is a fundamental design principle for the OpenPegasus project. As a Community, our goal is for well-behaved OpenPegasus Providers or Clients, using only the externally defined OpenPegasus interface, to continue to work with a minor version upgrade of OpenPegasus. However, there are certain classes of errors (e.g., non-compliance with a standard that significantly affects interoperability) that may require the Community to make potentially incompatible changes. The following table contains a list of defect fixes that MAY impact, even well-behaved, OpenPegasus Providers or Clients when upgrading to this OpenPegasus release.

Bugzilla # | Description
--- | ---

8229

The Common Information Model (CIM) Infrastructure Specification (DSP0004) version 2.3 contains this statement in section 3.2: "If the specification references a class without defining it first, the server must reject it as invalid if it does not already have a definition of that class." Previously, this check was only performed for derived classes. In Pegasus 2.9, the check is also done for base classes. This may cause a MOF file that previously loaded without problem to generate an error if it contains a forward reference. Note that the CIM 2.13.1 schema in the Pegasus source repository contained such an error in Pegasus 2.8, which is also corrected in Pegasus 2.9.

6812

In Pegasus 2.8, the behavior of the setName() method was changed in the Pegasus C++ interface for the CIM data type model. For data types that use a shared representation model, the setName() method now throws an Exception when the object is "contained" by another CIM data object.
Specifically, setName() may throw the new exception in these cases:
CIMProperty contained by CIMClass, CIMInstance, and CIMObject
CIMQualifier contained by CIMClass, CIMInstance, CIMObject, CIMProperty, CIMParameter, and CIMMethod
CIMMethod contained by CIMClass
CIMParameter contained by CIMMethod

7453

In Pegasus 2.8, the C++ CMPI IndicationMI function signatures were changed to fit the CMPIIndicationMIFT definitions.
The CmpiResult parameter in CmpiIndicationMI authorizeFilter, mustPoll, activateFilter and deActivateFilter have been removed cause it does not exist in the CMPIIndicationMIFT definitions.
The missing CmpiContext parameter and CMPIStatus have been added to enableIndications and disableIndications.

7488

In Pegasus 2.8, the CMPI property filter handling performance was improved.
Two things have changed in the behaviour of the property filter handling:
* Repeated applying of property filters onto the same instance will now only leave the properties which build the most common dominator on the instance.
* It is not possible anymore to add properties not defined for the corresponding class to an instance.

7624

In Pegasus 2.8, the algorithm used by the MessageLoader to search the accept language list to determine which message file to open was changed. Before Pegasus 2.8, the Message Loader used the following algorithm:

> 1.) The Message Loader will search the accept language list for an exact match. The first exact match found will be returned.
> 2.) If an exact match does not exist, the Message Loader will return an ICU "fallback" match for the first entry in accept language list.
> 3.) If an ICU "fallback" match does not exist for the first entry, it will return the ROOT resource bundle.

With the release of Pegasus 2.8, the Message Loader no longer returns ICU "fallback" matches. In addition, it gives preference to the default process locale over the ROOT resource bundle. In Pegasus 2.8, the Message Loader was modified to use the following algorithm:

1.) The Message Loader will search the accept language list for an exact match. The first exact match found will be returned.
2.) If an exact match does not exist, the Message Loader will return an exact match for the default process locale.
3.) If an exact match for the default process locale is not found, it will return the ROOT resource bundle.

7501

Since OpenPegasus 2.7.2 the way CMPI_chars are added to arrays was corrected to follow the CMPI specification. Following the CMPI specification means that CMPI_chars are not to be dereferenced, contrary to all other subtypes of CMPIValues.
If you experience an error since switching over to OpenPegasus 2.8 saying "The byte sequence starting at offset xx is not valid UTF-8 encoding", this is an indication for a missing update in the provider code.
The update for a C CMPI provider using arrays of CMPI_chars is to use a char* now as input parameter instead of a char**.
CMPI Example:
char* role = "Unknown";
array = CMNewArray(_broker,1,CMPI_chars,rc);
from:
CMSetArrayElementAt(array,0,(CMPIValue*)&role,CMPI_chars);
to:
CMSetArrayElementAt(array,0,(CMPIValue*)role,CMPI_chars);

## OpenPegasus Relationship to CIM/WBEM Standards

Pegasus was designed and implemented to comply with the DMTF CIM/WBEM specifications The following table defines the level of the DMTF specifications to which this version of Pegasus aims to conform today.

DMTF Specification | Specification Version
DSP 0004 - CIM Infrastructure Specification | Version 2.3 Final, 4 October 2005
DSP 0200 - CIM Operations over HTTP | Version 1.2, Final, January 09, 2007
DSP 0201 - Representation of CIM in XML | Version 2.2 Final, January 09, 2007
DSP 0202 - CIM Query Language Specification | 1.0.0, preliminary, 9 December 2004
DSP 0205 - WBEM Discovery using SLP | 1.0, preliminary, 27 January 2004
DSP 0206 - WBEM SLP Template | 1.0.0, Preliminary, January 2004
CIM Schema | 2.17.1 Final, 14 Dec 2007( default)

## Conformance Exceptions to DMTF Specifications

It is a major goal of the OpenPegasus project to both drive and utilize the DMTF CIM/WBEM specifications. However, today there are a number of known differences. As of this release, some of the differences include the following:

1. Provider Registration - Pegasus supports registration through a set of Pegasus Provider registration classes rather than support the DMTF defined Provider Qualifier. Pegasus will not support this qualifier in the future. See the readme for more information on provider registration. This is not a deviation from the specifications but is a different method of registration than many CIM Servers and means that the the provider qualifier is unused in Pegasus.
2. Indications -Today Pegasus supports process indications and lifecycle indications when defined specifically by providers. Pegasus does not support lifecycle indications if they are not defined by the provider or for changes to CIM Classes. For more information see the Pegasus CVS file: pegasus/src/Unsupported/LifecycleIndicationProvider/README.LifecycleIndications.htm.

3. IncludeQualifiers option on Instance Operations - The DMTF specifications have deprecated the use of qualifiers on instance operations with the 1.2 CIM Operations Specification. Some CIM Client implementations expect instances returned from the CIM Server to include the qualifiers defined in the class definition (such as KEY qualifiers on properties). Pegasus today expects the provider to complete the qualifiers on instances in accordance with the specification and generally the interpretation is that Pegasus applies class level qualifiers when the includeInstance parameter is supplied on instance operations. However, Pegasus today is inconsistent in the return of qualifiers so that the user should NOT depend on Pegasus accurately honoring the includeQualifier parameter for instance operations. In the future it is expected that Pegasus will deprecate the use of qualifiers on instance operations completely.

4. LocalOnly option on instance Operations - With the 1.1 version of Specification for CIM Operations over HTTP, the definition of the LocalOnly parameter for the GetInstance and Enumerate Instances operations was modified. This change was incorrect, resulted in reduced functionality and introduced a number of backward compatibility issues. As a result of issues introduced by this change, we strongly recommend that CIM Clients set LocalOnly = false and do not rely on the use of this parameter to filter the set of set of properties returned. See Appendix C of this specification for more information.

5. MultiRequest Operations - Pegasus does not support the DMTF defined MultiRequest Operation option.

6. MOF Compiler namespace pragma - The Pegasus compiler does not support the namespace pragma.

7. CIMOperation Trailer - Pegasus implements chunking based on the DSP0200 1.2.0 preliminary spec. including the operation trailer defined in that specification Refer to bug 6760 for more details. This trailer was completely removed from the DSP0200 1.2 final specification as a non-compatible change so that if chunking is used Pegasus is returning a noncompliant response to enumerate type requests.

## OpenPegasus Supported Platforms

Each OpenPegasus release lists as 'active' platforms those hardware/software platforms that have recognized ports for the Pegasus code base including a maintainer for the platform that will be willing to regularly document issues and/or fix defects as the Pegasus code base is changed. Pegasus may be operable on other platforms (ex. Windows 98) but without a group to provide the role of test and maintenance, correct operation of Pegasus cannot be assured. In all cases, including the active platforms, it is the responsibility of the entity that packages and/or compiles OpenPegasus for shipment or deployment, to read, and actively monitor the Pegasus bugzilla database for a list of relevant defects that affect their platform. The platforms that are considered ported are shown in the two tables below. The first table represents platform sofr which testing is done on a regular basis and reported to the Pegasus Nightly Build Test WEB Page. Those platforms which have been ported but do not have test results that are current at the time of the release are reported in the second table.

Actively Supported Platforms (Nightly Tests Reported for this release)

Platform and OS | Compilers
HP-UX | HP aC++ B3910B
Linux on Power | gcc
zLinux | gcc
Linux Itanium | gcc
Linux IA-32 | gcc (versions 2.9x, 3.xx, 4.xx)
Linux X86_64 | gcc (versions 2.9x, 3.xx, 4.xx)
Windows 2000 | Microsoft Visual C++ Ver. 6 and Microsoft .Net compiler version. Works on VC .NET 2003 v7.1). NOTE: Visual C++ Ver. 6 no longer being regularly tested.
Windows 2003 | Microsoft Visual C++ Ver. 6 and Microsoft .Net compiler Version 7.1. Note: Visual C++ Ver. 6 no longer being regular tested.
HP OpenVMS 8.3 or later Alpha | HP C++ V7.3-009 or later required for OpenVMS Alpha
HP OpenVMS 8.3 or later IA64 | HP C++ V7.3-023 or later required on OpenVMS IA64
z/OS V1.7 and up | XL C/C++ from z/OS Version 1.7 and up

Platforms no Actively supported for this release (No current Nightly Build Test Results

Platform and OS | Compilers
Windows XP | Microsoft Visual C++ Ver. 6 and Microsoft .Net compiler Version 7.1. Note: Visual C++ Ver. 6 no longer being regular tested.
MacOS version 10.3 and higher | gcc 4.01
Solaris 8 | GNU 2.95.3, Sun CC compiler V 5.8. Note that the latest thread patch (108993) may be required. (see Pegasus bug 4632)
Solaris 9 | GNU 2.95.3, Sun WorkShop 6 update 2 C++ 5.3, patch 111685-22 2005/04/09
OpenSolaris 11 (Nevada) Community Edition (Sparc and IX86) | CC Compiler Sun Studio 5.11

Platform patches

The following is a list known of platform patches Pegasus requires.

1. RHAS 2.1 needs the update to fix Red Hat Bugzilla 98815.

2. RHEL 4.4 multithreading bug in getpwuid-r could cause a CIM Server failure (Bugzilla 6232). This is fixed in RHEL 4.5

3. Red Hat and SUSE Linux multiple versions - multithreaded client intermittently fails connecting to IPv6 (Pegasus Bugzilla 6586) (Red Hat bug 248052)

Further information regarding Pegasus support on IBM platforms can be found at: http://publib.boulder.ibm.com/infocenter/eserver/v1r1/en_US/index.htm?info/icmain.htm

Further information regarding Pegasus support on HP platforms can be found at: http://www.hp.com/go/wbem.

## Pegasus Defects

The Pegasus bugzilla database documents any defects found in Pegasus and is available through the following link: OpenPegasus bugzilla database. Effective with the start of the Pegasus 2.6 work, all changes to the CVS tree were documented through bugs. Bugs reports were filed not only for bugs and their corresponding fixes but also as part of the process of committing new code representing the work on PEPs done for Pegasus 2.6 and all subsequent versions. Therefore, a search of the Open Pegasus bugzilla base for bugs with the tag for a particular version (ex. 2.6.0_APPROVED, 2.6.1_APPROVED, 2.7.0_APPROVED) will yield all changes to the Pegasus CVS tree for that Pegasus release.

- Changes for Pegasus 2.9.0 release (bugs Tagged 2.9.0_APPROVED). The link is Pegasus 2.9.0_APPROVED bug list.

## Release Control and Version Definition Documentation

The Pegasus project is controlled largely through a set of documents (PEPs) that serve both as the definition and review mechanism for new and modified Pegasus functionality and for the definition and documentation of releases.

The following PEPs define the characteristics of this Pegasus release. These PEPs are available at OpenPegasus Approved PEPs.

1. No PEP (See Wiki Section OpenPegasus 2.9.x Release Status) - OpenPegasus Release Definition/Status -
A section in the Pegasus wiki is used throughout the development of this version as the control point for functionality that will go into the release and points to all of the PEPs that represent the Pegasus functionality changes for this version of Pegasus.
2. PEP 343 - OpenPegasus Build and Configuration Options for Selected Platforms - Also located in the OpenPegasus CVS repository as pegasus/doc/BuildAndReleaseOptions.html.
3. PEP 344 - OpenPegasus 2.8 External Interfaces -
Lists the public interfaces for clients and providers that are considered external and therefore "frozen".
4. PEP 342 - OpenPegasus SDK Packaging Definition -
Defines the recommended set of files for inclusion in the OpenPegasus SDK
5. PEP 341 - Pegasus Runtime Packaging Definition -
Defines the recommended set of files for inclusion in this OpenPegasus release.
6. PEP 345 - Pegasus Release Notes - (This document located in the approved PEP repository and the OpenPegasus source tree root directory (pegasus/ReleaseNotes.html)

## General Documentation

The following documentation is available for the this Pegasus release:

- Utilities -
A combination of help generally available with the --help option for each command and HTML documentation for most of the tools.
- API and usage documentation -
See the header files and the HTML API documentation that is on the web site. The best API usage documentation is the existing utilities and test programs and the examples in the API documentation. In particular the Common/tests unit tests contain extensive examples of the use of the Common APIs.
- Building and Debugging Providers -
Readme.html in the Pegasus source tree Root Directory, API documentation, and documentation from the Pegasus Technical Workshop which is available on the Pegasus web site.
- Building and Debugging Clients -
API documentation and the documentation on the Pegasus Technical Workshop which is available on the Pegasus web site.
- PEPs -
The features of Pegasus that have been installed in this and the previous few versions are defined by Pegasus PEPs that are available on the OpenPegasus web site. While these are the original design documents largely and use in the process of defining and approving the overall characteristics of new functionality, they serve as a guide to the design and implementation of these features.

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.