How can we tell CA Performance Management (CAPM) to use a different Vendor Cert (VC) to the first compatible one listed in the priority order for specific devices?


Article ID: 206873


Updated On:


CA Performance Management - Usage and Administration


In some cases where the wrong VC gets mapped, incorrect statistics result. For example, if a device such as a Cisco FirePower Security Appliance may not be properly or fully certified in a previous version of CAPM. However, it is similar enough to an already certified device that it is discovered but using a VC for some metrics which result in incorrect statistic values such as for the Memory Metric Family (MF). In this case, because the Cisco Enhanced Memory Pool VC is higher in the priority list order, it will be selected instead of the Cisco CPM Memory VC, which is the VC that provides the correct values for the Memory MF for this device:

The VC priority order can be changed, but then this would affect other devices statistics and make them invalid. And Vendor Certifications (VCs) can't be bound to certain collections.

Instead, what can be done is to use the <VCSupportExpression> tag in the Cisco Enhanced Memory Pool to prevent this VC from discovering the device.


Release : 3.7.x & later


The only way to get CAPM to discover the device using the correct VC is to create a VC extension for the VC that's giving the wrong values (in this example - Cisco Enhanced Memory Pool) to block this device from being discovered, which then allows VCs lower down in the priority order to discover it. This is done using the VCSupportExpression tag.

So, the first step would be to get the VC (The internal CAPM name for the Cisco Enhanced Memory Pool MIB is CiscoEnhancedMempoolMIB) as a template via a REST client targeting the URL:


This will output the "Cisco Enhanced Memory Pool” VC MIB.

You would add the VCSupportExpression as a VC extension to "Cisco Enhanced Memory Pool” as:

<VCSupportExpression>sysObjectID.toString() !=""</VCSupportExpression>

where = The Device SysOID. 

This would need to be added AFTER the any <Filter> and <VariableGroup> sections located in the ExpressionGroup in the extension. For CiscoEnhancedMempoolMIB, the ExpressionGroup is (with the VCSupportExpression added):


            <!--  In addition to MemPoolType of 3 (ioMemory) and 12 (imageMemory), filter out MemPoolType 1 (other) that have "lsmpi_io in the name. -->

            <ExpressionGroup destCert="{}NormalizedMemoryInfo" name="CiscoEnhancedMempoolMibDS">

<Filter>cempMemPoolType != 3 &amp;&amp; cempMemPoolType != 12 &amp;&amp; !(cempMemPoolType == 1 &amp;&amp; cempMemPoolName.toString ().toLowerCase ().contains ("lsmpi_io"))</Filter>

<VCSupportExpression>sysObjectID.toString() !=""</VCSupportExpression>


                <Expression destAttr="Indexes">cempMemPoolIndex</Expression>

                <Expression destAttr="Names">"Enhanced-MemoryPool: " + cempMemPoolName + " " + cempMemPoolIndex</Expression>

                <Expression destAttr="Descriptions">"Cisco Enhanced-MemoryPool " + cempMemPoolName + " " +


                <Expression destAttr="Used">isdef (cempMemPoolHCUsed) &amp;&amp; (cempMemPoolHCUsed &gt; 0) ?

                    cempMemPoolHCUsed : cempMemPoolUsed</Expression>

                <Expression destAttr="Free">isdef (cempMemPoolHCFree) &amp;&amp; (cempMemPoolHCFree &gt; 0) ?

                    cempMemPoolHCFree : cempMemPoolFree</Expression>

                <Expression destAttr="LargestMemoryFree">isdef (cempMemPoolHCLargestFree) &amp;&amp;

                    (cempMemPoolHCLargestFree &gt; 0) ? cempMemPoolHCLargestFree : cempMemPoolLargestFree</Expression>

                <Expression destAttr="Total">(isdef (cempMemPoolHCUsed) &amp;&amp; (cempMemPoolHCUsed &gt; 0) ?

                    cempMemPoolHCUsed : cempMemPoolUsed)+(isdef (cempMemPoolHCFree) &amp;&amp; (cempMemPoolHCFree &gt; 0) ?

                    cempMemPoolHCFree : cempMemPoolFree)</Expression>

                <Expression destAttr="Utilization">snmpProtectedDiv ((100.0 * (isdef (cempMemPoolHCUsed) &amp;&amp;

                    (cempMemPoolHCUsed &gt; 0) ? cempMemPoolHCUsed : cempMemPoolUsed)),

                    ((isdef (cempMemPoolHCFree) &amp;&amp; (cempMemPoolHCFree &gt; 0) ? cempMemPoolHCFree :

                    cempMemPoolFree) + (isdef (cempMemPoolHCUsed) &amp;&amp; (cempMemPoolHCUsed &gt; 0) ? cempMemPoolHCUsed

                    : cempMemPoolUsed)))</Expression>



            <Expression destAttr="TotalMemory">((cempMemPoolUsed*(1)+cempMemPoolFree*(1)))</Expression>

            <Expression destAttr="MemoryUtilization">decode((cempMemPoolUsed*(1)+cempMemPoolFree*(1)),0.00,0.00,(((100.0*DELTA_TIME)*cempMemPoolUsed*(1))/NULLIF((cempMemPoolUsed*(1)+cempMemPoolFree*(1)),0)))</Expression>




Then you'd need to add the attribute 'sysObjectID' ( to the attributes section, and use it as in the VCSupportExpression above. So:

    <Attribute name="sysObjectID" external="true" type="ObjectID">

      <Documentation />




This would placed in the AttributeGroup section along with other Attribute definitions. For example, the last Attribute definition in the AttributeGroup section for the Out-of-the-box VC is:

<Attribute name="cempMemPoolHCLargestFree" type="Long">






You can place your additional sysObjectID definition after this. After you've done the above, you would import the VC extension as per our TechDocs:

TechDocs : DX NetOps 20.2 : CAPM - Import the Custom Vendor Certification

Basically, you would switch your REST client to a PUT request and target the URL (adding the "extension" to the URL between 'snmp' and 'CiscoEnhancedMempoolMib'):


Then update the MFs and VCs and rediscover the device.

Additional Information

The VCSupportExpression tag is described in our TechDocs:

TechDocs : DX NetOps 20.2 : CAPM - Vendor Certification XML Structure