6 Managing Network Function Virtualization

This chapter describes how to configure and administer network function virtualization (NFV) for Oracle Communications Evolved Communications Application Server (OCECAS).

For an understanding of NFV concepts and implementation, see Oracle Communications Evolved Communications Application Server Concepts. For information on using Oracle Communications Application Orchestrator, see Oracle Communications Application Orchestrator User Guide at the Oracle Communications Application Orchestrator web site:

https://docs.oracle.com/cd/E65520_01/doc/ao_11_userguide.pdf

About Using Network Function Virtualization

Configuring and administering NFV consists of the following tasks:

The chapter provides the following CNFD examples:

Creating the OVA Image File

This procedure creates a Web-server type of OVA file from Oracle installation media using Oracle VM VirtualBox.

Note:

Oracle recommends that you are thoroughly familiar with the OCECAS installation procedure described in the Oracle Communications Evolved Communications Application Server Installation Guide before creating an OVA image file.

Follow these steps to create the OVA image file to be configured and deployed using Application Orchestrator.

  1. Run the following command as root to install Java JRE and JDK:

    install_java.sh
    
  2. If not already installed, run the following command as root to install netcat:

    yum install nc
    
  3. Execute the following commands as root to create the user occas.

    mkdir /middleware
    groupadd occas
    useradd -d /middleware/occas -g occas occas
    
  4. Create oracle directory as root and change the owner to user occas:

    mkdir /opt/oracle 
    chown -R occas /opt/oracle
    
  5. Execute the following commands as user occas to run the OCECAS installer:

    export JAVA_HOME=/usr/java/latest
    export PATH=/usr/java/latest/bin:$PATH
    java -jar ocecas_generic.jar -silent -responseFile /opt/oracle/ins.res -invPtrLoc /opt/oracle/ins.loc
    

    Note:

    This executes a silent install, which requires a response file. See ”Installing OCECAS in Silent Mode” for more information on using silent mode, and creating a response file.

    The content of the ins.res response file is:

    occas> cat /opt/oracle/ins.res
    [ENGINE]
     
    #DO NOT CHANGE THIS.
    Response File Version=1.0.0.0.0
     
    [GENERIC]
     
    #The oracle home location. This can be an existing Oracle Home or a new Oracle Home
    ORACLE_HOME=/opt/oracle/occas
     
    #Set this variable value to the Installation Type selected. e.g. Evolved Communications Application Server, Converged Application Server (SIP Container).
    INSTALL_TYPE=Evolved Communications Application Server
     
    #Provide the My Oracle Support Username. If you wish to ignore Oracle Configuration Manager configuration provide empty string for user name.
    MYORACLESUPPORT_USERNAME=
     
    #Provide the My Oracle Support Password
    MYORACLESUPPORT_PASSWORD=<SECURE VALUE>
     
    #Set this to true if you wish to decline the security updates. Setting this to true and providing empty string for My Oracle Support username will ignore the Oracle Configuration Manager configuration
    DECLINE_SECURITY_UPDATES=true
     
    #Set this to true if My Oracle Support Password is specified
    SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
     
    #Provide the Proxy Host
    PROXY_HOST=
     
    #Provide the Proxy Port
    PROXY_PORT=
     
    #Provide the Proxy Username
    PROXY_USER=
     
    #Provide the Proxy Password
    PROXY_PWD=<SECURE VALUE>
     
    #Type String (URL format) Indicates the OCM Repeater URL which should be of the format [scheme[Http/Https]]://[repeater host]:[repeater port]
    

    The content of the ins.loc file is:

    cat /opt/oracle/ins.loc
    inventory_loc=/opt/oracle/local_inventory
    inst_group=occas
    
  6. Copy NoSQL to the /opt/oracle/occas directory:

    ls -ltr /opt/oracle/occas/nosql
    total 8
    drwxrwxr-x. 6 occas occas 4096 Jul 14  2014 kv-3.0.14
    drwxrwxr-x. 2 occas occas 4096 Jul  6 17:03 kvroot
    
  7. If the image includes the Oracle database, run install_oracle.sh:

    install_oracle.sh occas
    

    And as user root, run the following scripts:

    /middleware/occas/oracle/oraInventoryDB/orainstRoot.sh
    /middleware/occas/oracle/product/12.1.0/root.sh
    
  8. Create an oracledb file in /etc/init.d using the script oracledb.sh.

  9. As user root, modify ORACLE_HOME and ORACLE_USER as appropriate:

    chmod 755 oracledb
    /sbin/chkconfig oracledb on     
    /sbin/service oracledb start
    
  10. Create the SDC and OPSS database schemas:

    export ORACLE_HOME=/middleware/occas/oracle/product/12.1.0; export ORACLE_BASE=/middleware/occas/oracle; export UNIX_USER=occas; export CONTINUE_ON_ERROR=1; bash /middleware/occas/sdc-root/sdc/sdc_1/root.sh <<STDIN -d remove -u occas -g occas -b /middleware/occas/oracle -h /middleware/occas/oracle/product/12.1.0 -c false
    sdc
    sdc
    sys
    sys
    manager
    manager
    sdc_admin
    sdc_admin
    sdc_opss
    sdc_opss
    STDIN
    
  11. As user root, remove all unnecessary files to shrink the size of the image:

    cat /dev/zero > /zero.fill; sync; sleep 1; sync; rm -f /zero.fill; echo "/ cleared.."
    
  12. As user root, remove any pre-existing network configurations:

    cat /etc/sysconfig/network-scripts/ifcfg-eth0; should look like
    DEVICE=eth0
    TYPE=Ethernet
    ONBOOT=yes
     
    rm /etc/udev/rules.d/70*net*
    
  13. Stop the Oracle database:

    service oracledb stop
    
  14. Disable Internet protocol, version 6 (IPV6) by adding the following lines to the /etc/sysctl.conf file:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
    
  15. Edit the java.security file to set securerandom.source as follows:

    vi /usr/java/latest/jre/lib/security/java.security
    securerandom.source=file:/dev/./urando
    
  16. Add the following lines to the rc.local file to mount the OpenStack configuration disk, stop firewall rules, set permissions, and apply bootstrap data.

    /bin/mount /dev/sr0 /mnt
     
    /sbin/service iptables stop
    /usr/sbin/setenforce permissive
    /usr/bin/python /root/setup-machine.py
    
  17. Add setup-machine.py:

    cat /root/setup-machine.py
    import json, os
     
    userDataFile = '/mnt/openstack/latest/user_data'
     
    with open(userDataFile, 'r') as data_file:
        userData = json.load(data_file)
     
    targetname = userData["bootparams"]["targetname"]
    mgmtip = userData["bootparams"]["mgmtIp"]
    netmask = userData["bootparams"]["netmask"]
    publickey = userData["bootparams"]["publickey"]
     
    etcHostEntry = mgmtip + ' ' + targetname
     
    if publickey != None:
            if os.path.exists('/middleware/occas/.ssh') == False:
                    os.system('su - occas -c  "mkdir -p /middleware/occas/.ssh; chmod 700 /middleware/occas/.ssh; echo ' + publickey + ' >> /middleware/occas/.ssh/authorized_keys; chmod 0600 /middleware/occas/.ssh/authorized_keys"')
     
    if mgmtip != None:
            os.system('/sbin/ifconfig eth0 ' + mgmtip + ' netmask ' + netmask + ' up')
            os.system('/bin/hostname ' + targetname)
            os.system('/bin/grep ^' + mgmtip + ' /etc/hosts ||  /bin/echo ' + etcHostEntry + ' >> /etc/hosts')
    
  18. Shut down the machine and export it as a new OVA appliance. VirtualBox should create a file with the extension .vmdk. For example:

    pwd
    ~/VirtualBox VMs/ecas-nfv
    ll
    total 4329956
    -rw-------. 1 user group 4434624512 Jul  9 09:36 ecas-nfv-disk1.vmdk
    -rw-------. 1 user group      55292 Sep 27 21:00 ecas-nfv.vbox
    -rw-------. 1 user group      55449 Sep 27 21:00 ecas-nfv.vbox-prev
    drwx------. 2 user group       4096 Sep 25 14:23 Logs
    drwx------. 2 user group       4096 Sep 27 21:00 Snapshots
    
  19. Import the image into VM Player.

    Note:

    This step is required because Application Orchestrator does not accept an OVA file that has been generated by VirtualBox.

    VMWare generates a new .vmx file. For example:

    pwd
    ~/vmware/ecas-nfv-1
    ll
    total 6376272
    -rw-------. 1 user group 4439080960 Aug 26 13:38 ecas-nfv-1-disk1.vmdk
    -rw-------. 1 user group 2090994176 Aug 26 13:42 ecas-nfv-1.ova
    -rw-r--r--. 1 user group          0 Aug 26 13:38 ecas-nfv-1.vmsd
    -rwxr-xr--. 1 user group       1132 Aug 26 13:38 ecas-nfv-1.vmx
    -rw-r--r--. 1 user group        265 Aug 26 13:38 ecas-nfv-1.vmxf
    drwxrwxrwx. 2 user group       4096 Aug 26 13:38 ecas-nfv-1.vmx.lck
    
  20. Run the ovftool command to convert the .vmx file to OVA format. For example:

    ovftool ecas-nfv-1.vmx ecas-nfv-1.ova
    

The image is now ready for use by Application Orchestrator.

Configuring the Domain and CNF

You configure the domain and CNF for the AO adapter through XML composite network function descriptor (CNFD) files. The CNFD files provide the following information:

  • CNF and NF group details

  • Minimum and maximum deployment units (DUs)

  • Resource requirements such as CPU, memory, disk, and so on, for deployment units

  • Registered KPIs, including threshold criteria and scaling policies, and the source adapter

Each CNF, or domain, requires a separate CNFD file. For OCECAS, for example, there is a separate CNFD file for the Management, Testing, Staging, Production, and UDR domains, if the UDR exists in a separate domain.

You create CNFD parameters using the Application Orchestrator user interface (UI), which you can access using your browser by specifying the hostname and port of the AO server:

https://hostname:port

The CNFD file has different sections , which are configurable through the UI screens. The following sections describe the CNF and NF group details.

See "Example CNFD Parameters for a Management Domain" for an example of CNFD parameters for a management domain. See "Example CNFD Parameters for a Runtime Domain" for an example of CNFD parameters for a runtime domain.

Specifying CNF Capacity and Sizing Model

You specify CNF capacity through the UI during staging of the CNF. Staging is done in the Application Orchestrator section of the UI under Onboarding >Catalogue. For the CNF being staged, you must specify the maximum number of subscribers, the minimum number of subscribers, and the sizing model. Based on the maximum and minimum number of subscribers, the adapter calculates the number of deployment units (DUs). The calculated number of deployment units are activated immediately when the NF group is deployed.

The following example shows sample CNFD parameters generated for the maximum number of subscribers, the minimum number of subscribers, and the sizing model:

    <parameter description="Maximum Number Of Subscribers" label="Max # of Subscriber" name="MaximumNumberOfSubscribers" password="false" readOnly="false" required="true" value="20000000" valueType="NumberField">
      <validValues name=""/>
    </parameter>
    <parameter description="Minimum Number Of Subscribers" label="Min # of Subscriber" name="MinimumNumberOfSubscribers" password="false" readOnly="false" required="true" value="100000" valueType="NumberField">
      <validValues name=""/>
    </parameter>
    <parameter description="Sizing Model" label="Sizing Model" name="SizingModel" password="false" readOnly="false" required="true" value="Small" valueType="ComboBox"><validValues name="Small" /><validValues name="Medium" />
      <validValues name="Large" />
    </parameter>

Specifying NF Group Parameters

The NF groups are specified through the OVA file. For more information, see ”About the OVA File” in Oracle Communications Evolved Communications Application Server Concepts.

When you specify a sizing model during CNF staging, however, you indirectly specify the number of DUs and associated resources such as CPUs, memory and disk space, which are calculated as a result. The following example shows sample sizing allocation parameters for NF group SCE.

  <nfGroup name="SCE" componentType="SCE" softwareVersion="1.0" emsType="OCECASEM" maximumNumberDU="50" minimumNumberDU="1" order="2">
    <resiliencePolicy name="STANDALONE" activeDevicesPerDU="1"/>
    <resource isVirtual="true">
      <virtual minimumCpus="8" maximumCpus="8" minimumDiskBytes="13958643712" maximumDiskBytes="13958643712" minimumMemoryBytes="8589934592" maximumMemoryBytes="8589934592" managementIPCount="1">
        <Interfaces name="eth0" order="0"/>
        <SizingAllocation>
          <SupportedAllocation name="SizingModel" size="Small" cpus="8" memoryBytes="17179869184" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="100000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Medium" cpus="16" memoryBytes="34359738368" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="200000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Large" cpus="32" memoryBytes="34359738368" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="400000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
        </SizingAllocation>
      </virtual>
    </resource>

Specifying Boot Parameters

The VIM delivers boot parameters to the VM when the VM is booted. You specify boot parameters through the AO Orchestration section of the OCAO UI. For specific steps, see ”Specify Common Boot Parameters” in Oracle Communications Application Orchestrator User Guide at the Oracle Communications Application Orchestrator Documentation web site:

https://docs.oracle.com/cd/E65520_01/index.htm

The following example shows sample boot parameters for the SCE runtime NF group:

    <bootParameters>
      <!-- The parameters given to the VIM to boot the VM. -->
      <commonParameters>
        <parameter description="Default Gateway" label="Default Gateway" name="defaultGW" password="false" readOnly="false" required="true" value="10.0.0.1" valueType="Ipv4"/>
        <parameter description="Netmask" label="Netmask" name="netmask" password="false" readOnly="false" required="true" value="255.255.255.0" valueType="TextField"/>
        <parameter description="Public Key" label="Public Key" name="publickey" password="false" readOnly="false" required="true" value="" valueType="TextArea"/>
      </commonParameters>
      <deviceParameters>
        <parameter description="Hostname" label="Hostname" name="targetname" password="false" readOnly="false" required="true" value="engine" valueType="TextField"/>
        <parameter description="Management IP Address" label="IP Address" name="mgmtIp" password="false" readOnly="false" required="true" value="10.0.0.71" valueType="Ipv4"/>
      </deviceParameters>
    </bootParameters>

Specifying Scaling Policy

You specify a KPI threshold policy through the AO Orchestration section of the OCAO UI. For specific steps, see "Add a KPI Threshold Policy" in Oracle Communications Application Orchestrator User Guide.

Note:

The Relative limit, Warning %, Critical %, Growth Duration and Decline Duration parameters apply to the default scaling policy for the adapter and are unique to the component type.

The following example shows sample capacity scaling parameters for the SCE runtime NF group:

    <capacity scalingPolicy="AO standard scaling policy">
      <registeredKpis>
        <KPI name="Device CPU" referenceName="Device CPU" source="VIMAdaptor" description="Current CPU load as identified by VIM">
          <threshold relativeLimit="100">
            <parameter description="Percentage to start monitoring for spin up" label="warningThreshold" name="warningThreshold" password="false" readOnly="false" required="true" value="70" valueType="TextField"/>
            <parameter description="Percentage to force immediate spinup" label="criticalThreshold" name="criticalThreshold" password="false" readOnly="false" required="true" value="85" valueType="TextField"/>
            <parameter description="Minutes to wait before spin up" label="growthDuration" name="growthDuration" password="false" readOnly="false" required="true" value="2" valueType="TextField"/>
            <parameter description="Minutes to wait before spin down" label="declineDuration" name="declineDuration" password="false" readOnly="false" required="true" value="4" valueType="TextField"/>
          </threshold>
        </KPI>
      </registeredKpis>
      <parameter name="loadShedKpi" label="Load shedding KPI" description="KPI to use for Load Shedding" value="Device CPU" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedThreshold" label="Load shedding threshold" description="Load shedding threshold value" value="20" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedTimeout" label="Load shedding timeout (minutes)" description="Load shedding timeout (minutes)" value="1" password="false" readOnly="false" required="true" valueType="TextField"/>
    </capacity>

Specifying Administrative Parameters

In addition to CNFD parameters, you must also specify element manager (EM) configuration parameters in the OCAO Application Orchestrator section.

  1. In the Deployed folder, click CNF.

  2. In the Composite Network Functions section, select the CNF for OCECAS and click Expand.

  3. Select the runtime NF group, click the Manage drop-down list and then click Edit.

  4. Click the EM tab and complete the entries described in Table 6-1 and Table 6-2.

  5. Click Apply.

Table 6-1 Element Manager Parameters

Entry Description

Admin User

WebLogic administration user name.

Admin Password

WebLogic administration password.

ssh User

The ssh user name.

ssh Private Key

Private key for ssh login.

KVL NoSQL Directory

/opt/oracle/occas/nosql .


Specify the entries in Table 6-2 for each runtime domain (testing, staging, production).

Table 6-2 Runtime Domain Parameters

Entry Description

Runtime Domain

Select the runtime domain from the drop-down list.

Domain Admin Host Address

Address for the Administration server.

SIP Listen Port

Listen port for inbound SIP messages. Default: 5060

SIPS Listen Port

Listen port for inbound secure SIP messages. Default: 5061


Monitoring and Managing Overload Conditions

OCECAS uses a load monitoing and management framework to help the adapter to monitor and manage overload conditions using JMX. The CNFD configuration, in combination with MBean object sourcing, determines which KPIs are fetched. For example, the following MBean object source statement, in combination with the CNFD configuration, causes ActiveCallStates KPIs to be fetched:

com.bea:ServerRuntime=${serverName},Name=${serverName},Type=SipPerformanceRuntime,SipServerRuntime=${serverName}

The following example illustrates the corresponding CNFD XML configuration that's needed to trigger the collection of ActiveCallStates KPIs.

<KPI name="ActiveCallStates" referenceName="ActiveCallStates" source="EMAdaptor"
     description="com.bea:ServerRuntime=${serverName},Name=${serverName},
     Type=SipPerformanceRuntime,SipServerRuntime=${serverName}">
  <threshold relativeLimit="100">
    <parameter description="Number to start monitoring for spin up"
      label="warningThreshold" name="warningThreshold" password="false"
      readOnly="false" required="true" value="40" valueType="TextField"/>
    <parameter description="Number to force immediate spinup"
      label="criticalThreshold" name="criticalThreshold" password="false"
      readOnly="false" required="true" value="45" valueType="TextField"/>
    <parameter description="Minutes to wait before spin up" label="growthDuration"
      name="growthDuration" password="false" readOnly="false" required="true"
      value="2" valueType="TextField"/>
    <parameter description="Minutes to wait before spin down"
      label="declineDuration" name="declineDuration" password="false"
      readOnly="false" required="true" value="0" valueType="TextField"/>
  </threshold>
</KPI>

OCECAS also collects NoSQL KPIs over JMX. The following example illustrates the CNFD configuration that's needed to trigger the collection of MultiIntervalTotalRequests KPIs:

<KPI name="MultiIntervalTotalRequests" referenceName="MultiIntervalTotalRequests"
     source="EMAdaptor" description="MultiIntervalTotalRequests">
  <threshold relativeLimit="1000">
    <parameter description="Number to start monitoring for spin up"
      label="warningThreshold" name="warningThreshold" password="false"
      readOnly="false" required="true" value="500" valueType="TextField"/>
    <parameter description="Number to force immediate spinup"
      label="criticalThreshold" name="criticalThreshold" password="false"
      readOnly="false" required="true" value="1000" valueType="TextField"/>
    <parameter description="Minutes to wait before spin up" label="growthDuration"
      name="growthDuration" password="false" readOnly="false" required="true"
      value="1" valueType="TextField"/>
    <parameter description="Minutes to wait before spin down"
      label="declineDuration" name="declineDuration" password="false"
      readOnly="false" required="true" value="4" valueType="TextField"/>
  </threshold>
</KPI>

Example CNFD Parameters for a Management Domain

The following example shows snippets of possible CNFD elements for a Management CNF, or domain:

<?xml version="1.0" encoding="utf-8"?>
 <CNF name="OCECAS_DESIGN" version="1.0" adaptorName="OcecasCNFAdaptor" adaptorVersion="1.0" vendor="ORACLE"
         vendorId="ACME" description="This CNF is composed of Management domain">
      <sizingInfo>
        <parameter description="Sizing Model" label="Sizing Model" name="SizingModel" password="false" readOnly="false" required="true" value="Small" valueType="ComboBox"><validValues name="Small" /><validValues name="Medium" />
          <validValues name="Large" />
        </parameter>
      </sizingInfo>
      <nfGroup name="MgmtAdmin" componentType="MgmtAdmin" softwareVersion="1.0" emsType="OCECASEM" maximumNumberDU="1" minimumNumberDU="1" order="1">
        <resiliencePolicy name="STANDALONE" activeDevicesPerDU="1"/>
        <resource isVirtual="true">
          <virtual minimumCpus="8" maximumCpus="8" minimumDiskBytes="13958643712" maximumDiskBytes="13958643712" minimumMemoryBytes="8589934592" maximumMemoryBytes="8589934592" managementIPCount="1">
            <Interfaces name="eth0" order="0"/>
            <SizingAllocation>
              <SupportedAllocation name="SizingModel" size="Small" cpus="8" memoryBytes="17179869184" diskBytes="13958643712">
                <SupportedAllocationKPI>
                </SupportedAllocationKPI>
              </SupportedAllocation>
              <SupportedAllocation name="SizingModel" size="Medium" cpus="16" memoryBytes="34359738368" diskBytes="13958643712">
                <SupportedAllocationKPI>
                </SupportedAllocationKPI>
              </SupportedAllocation>
              <SupportedAllocation name="SizingModel" size="Large" cpus="32" memoryBytes="34359738368" diskBytes="13958643712">
                <SupportedAllocationKPI>
                </SupportedAllocationKPI>
              </SupportedAllocation>
            </SizingAllocation>
          </virtual>
        </resource>which allows access
        <bootParameters>
          <!-- The parameters given to the VIM to boot the VM. -->
          <commonParameters>
            <parameter description="Default Gateway" label="Default Gateway" name="defaultGW" password="false" readOnly="false" required="true" value="10.0.0.1" valueType="Ipv4"/>
            <parameter description="Netmask" label="Netmask" name="netmask" password="false" readOnly="false" required="true" value="255.255.255.0" valueType="TextField"/>
            <parameter description="Public Key" label="Public Key" name="publickey" password="false" readOnly="false" required="true" value="" valueType="TextArea"/>
          </commonParameters>
          <deviceParameters>
            <parameter description="Hostname" label="Hostname" name="targetname" password="false" readOnly="false" required="true" value="mgmtadmin" valueType="TextField"/>
            <parameter description="Management IP Address" label="IP Address" name="mgmtIp" password="false" readOnly="false" required="true" value="10.0.0.50" valueType="Ipv4"/>
          </deviceParameters>
        </bootParameters>
        <dependencies>
          <notifications>
          </notifications>
          <groups>
          </groups>
        </dependencies>
        <capacity scalingPolicy="AO standard scaling policy">
          <registeredKpis>
            <KPI name="Device CPU" referenceName="Device CPU" source="VIMAdaptor" description="Current CPU load as identified by VIM">
              <threshold relativeLimit="100">
                <parameter description="Percentage to start monitoring for spin up" label="warningThreshold" name="warningThreshold" password="false" readOnly="false" required="true" value="70" valueType="TextField"/>
                <parameter description="Percentage to force immediate spinup" label="criticalThreshold" name="criticalThreshold" password="false" readOnly="false" required="true" value="85" valueType="TextField"/>
                <parameter description="Minutes to wait before spin up" label="growthDuration" name="growthDuration" password="false" readOnly="false" required="true" value="2" valueType="TextField"/>
                <parameter description="Minutes to wait before spin down" label="declineDuration" name="declineDuration" password="false" readOnly="false" required="true" value="4" valueType="TextField"/>
              </threshold>
            </KPI>
          </registeredKpis>
          <parameter name="loadShedKpi" label="Load shedding KPI" description="KPI to use for Load Shedding" value="Device CPU" password="false" readOnly="false" required="true" valueType="TextField"/>
          <parameter name="loadShedThreshold" label="Load shedding threshold" description="Load shedding threshold value" value="20" password="false" readOnly="false" required="true" valueType="TextField"/>
          <parameter name="loadShedTimeout" label="Load shedding timeout (minutes)" description="Load shedding timeout (minutes)" value="1" password="false" readOnly="false" required="true" valueType="TextField"/>
        </capacity>
      </nfGroup>
      <nfGroup name="SDC" componentType="SDC" softwareVersion="1.0" emsType="OCECASEM" maximumNumberDU="1" minimumNumberDU="1" order="2">
        <resiliencePolicy name="STANDALONE" activeDevicesPerDU="1"/>
        <resource isVirtual="true">
          <virtual minimumCpus="8" maximumCpus="8" minimumDiskBytes="32212254720" maximumDiskBytes="32212254720" minimumMemoryBytes="8589934592" maximumMemoryBytes="8589934592" managementIPCount="1">
            <Interfaces name="eth0" order="0"/>
            <SizingAllocation>
              <SupportedAllocation name="SizingModel" size="Small" cpus="8" memoryBytes="17179869184" diskBytes="32212254720">
                <SupportedAllocationKPI>
                </SupportedAllocationKPI>
              </SupportedAllocation>
              <SupportedAllocation name="SizingModel" size="Medium" cpus="16" memoryBytes="34359738368" diskBytes="32212254720">
                <SupportedAllocationKPI>
                </SupportedAllocationKPI>
              </SupportedAllocation>
              <SupportedAllocation name="SizingModel" size="Large" cpus="32" memoryBytes="34359738368" diskBytes="32212254720">
                <SupportedAllocationKPI>
                </SupportedAllocationKPI>
              </SupportedAllocation>
            </SizingAllocation>
          </virtual>
        </resource>
        <bootParameters>
          <!-- The parameters given to the VIM to boot the VM. -->
          <commonParameters>
            <parameter description="Default Gateway" label="Default Gateway" name="defaultGW" password="false" readOnly="false" required="true" value="10.0.0.1" valueType="Ipv4"/>
            <parameter description="Netmask" label="Netmask" name="netmask" password="false" readOnly="false" rwhich allows accessequired="true" value="255.255.255.0" valueType="TextField"/>
            <parameter description="Public Key" label="Public Key" name="publickey" password="false" readOnly="false" required="true" value="" valueType="TextArea"/>
          </commonParameters>
          <deviceParameters>
            <parameter description="Hostname" label="Hostname" name="targetname" password="false" readOnly="false" required="true" value="sdc" valueType="TextField"/>
            <parameter description="Management IP Address" label="IP Address" name="mgmtIp" password="false" readOnly="false" required="true" value="10.0.0.51" valueType="Ipv4"/>
          </deviceParameters>
        </bootParameters>
        <dependencies>
          <notifications>
          </notifications>
          <groups>
          </groups>
        </dependencies>
        <capacity scalingPolicy="AO standard scaling policy">
          <registeredKpis>
            <KPI name="Device CPU" referenceName="Device CPU" source="VIMAdaptor" description="Current CPU load as identified by VIM">
              <threshold relativeLimit="100">
                <parameter description="Percentage to start monitoring for spin up" label="warningThreshold" name="warningThreshold" password="false" readOnly="false" required="true" value="70" valueType="TextField"/>
                <parameter description="Percentage to force immediate spinup" label="criticalThreshold" name="criticalThreshold" password="false" readOnly="false" required="true" value="85" valueType="TextField"/>
                <parameter description="Minutes to wait before spin up" label="growthDuration" name="growthDuration" password="false" readOnly="false" required="true" value="2" valueType="TextField"/>
                <parameter description="Minutes to wait before spin down" label="declineDuration" name="declineDuration" password="false" readOnly="false" required="true" value="4" valueType="TextField"/>
              </threshold>
            </KPI>
          </registeredKpis>
          <parameter name="loadShedKpi" label="Load shedding KPI" description="KPI to use for Load Shedding" value="Device CPU" password="false" readOnly="false" required="true" valueType="TextField"/>
          <parameter name="loadShedThreshold" label="Load shedding threshold" description="Load shedding threshold value" value="20" password="false" readOnly="false" required="true" valueType="TextField"/>
          <parameter name="loadShedTimeout" label="Load shedding timeout (minutes)" description="Load shedding timeout (minutes)" value="1" password="false" readOnly="false" required="true" valueType="TextField"/>
        </capacity>
      </nfGroup>
    </CNF>

Example CNFD Parameters for a Runtime Domain

The following example shows snippets of possible CNFD elements for a Runtime CNF, or domain:

<?xml version="1.0" encoding="utf-8"?>
 
<CNF name="OCECAS_RUNTIME_PRODUCTION" version="1.0" adaptorName="OcecasCNFAdaptor" adaptorVersion="1.0" vendor="ORACLE"
     vendorId="ACME" description="This CNF is composed of Production domain">
  <sizingInfo>
    <parameter description="Maximum Number Of Subscribers" label="Max # of Subscriber" name="MaximumNumberOfSubscribers" password="false" readOnly="false" required="true" value="20000000" valueType="NumberField">
      <validValues name=""/>
    </parameter>
    <parameter description="Minimum Number Of Subscribers" label="Min # of Subscriber" name="MinimumNumberOfSubscribers" password="false" readOnly="false" required="true" value="100000" valueType="NumberField">
      <validValues name=""/>
    </parameter>
    <parameter description="Sizing Model" label="Sizing Model" name="SizingModel" password="false" readOnly="false" required="true" value="Small" valueType="ComboBox"><validValues name="Small" /><validValues name="Medium" />
      <validValues name="Large" />
    </parameter>
    <parameter description="SCF Redundancy Factor (n+m)" label="SCF Redundancy Factor" name="scfRedundancyFactor" password="false" readOnly="false" required="true" value="1" valueType="TextField">
      <validValues name=""/>
    </parameter>
    <parameter description="UDR Redundancy Factor (n+m)" label="UDR Redundancy Factor" name="udrRedundancyFactor" password="false" readOnly="false" required="true" value="1" valueType="TextField">
      <validValues name=""/>
    </parameter>
  </sizingInfo>
  <nfGroup name="RuntimeAdmin" componentType="RuntimeAdmin" softwareVersion="1.0" emsType="OCECASEM" maximumNumberDU="1" minimumNumberDU="1" order="1">
    <resiliencePolicy name="STANDALONE" activeDevicesPerDU="1"/>
    <resource isVirtual="true">
      <virtual minimumCpus="8" maximumCpus="8" minimumDiskBytes="13958643712" maximumDiskBytes="13958643712" minimumMemoryBytes="8589934592" maximumMemoryBytes="8589934592" managementIPCount="1">
        <Interfaces name="eth0" order="0"/>
        <SizingAllocation>
          <SupportedAllocation name="SizingModel" size="Small" cpus="8" memoryBytes="17179869184" diskBytes="13958643712">
            <SupportedAllocationKPI>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Medium" cpus="16" memoryBytes="34359738368" diskBytes="13958643712">
            <SupportedAllocationKPI>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Large" cpus="32" memoryBytes="34359738368" diskBytes="13958643712">
            <SupportedAllocationKPI>
            </SupportedAllocationKPI>
          </SupportedAllocation>
        </SizingAllocation>
      </virtual>
    </resource>
    <bootParameters>
      <!-- The parameters given to the VIM to boot the VM. -->
      <commonParameters>
        <parameter description="Default Gateway" label="Default Gateway" name="defaultGW" password="false" readOnly="false" required="true" value="10.0.0.1" valueType="Ipv4"/>
        <parameter description="Netmask" label="Netmask" name="netmask" password="false" readOnly="false" required="true" value="255.255.255.0" valueType="TextField"/>
        <parameter description="Public Key" label="Public Key" name="publickey" password="false" readOnly="false" required="true" value="" valueType="TextArea"/>
      </commonParameters>
      <deviceParameters>
        <parameter description="Hostname" label="Hostname" name="targetname" password="false" readOnly="false" required="true" value="runtimeadmin" valueType="TextField"/>
        <parameter description="Management IP Address" label="IP Address" name="mgmtIp" password="false" readOnly="false" required="true" value="10.0.0.70" valueType="Ipv4"/>
      </deviceParameters>
    </bootParameters>
    <dependencies>
      <notifications>
      </notifications>
      <groups>
      </groups>
    </dependencies>
    <capacity scalingPolicy="AO standard scaling policy">
      <registeredKpis>
        <KPI name="Device CPU" referenceName="Device CPU" source="VIMAdaptor" description="Current CPU load as identified by VIM">
          <threshold relativeLimit="100">
            <parameter description="Percentage to start monitoring for spin up" label="warningThreshold" name="warningThreshold" password="false" readOnly="false" required="true" value="70" valueType="TextField"/>
            <parameter description="Percentage to force immediate spinup" label="criticalThreshold" name="criticalThreshold" password="false" readOnly="false" required="true" value="85" valueType="TextField"/>
            <parameter description="Minutes to wait before spin up" label="growthDuration" name="growthDuration" password="false" readOnly="false" required="true" value="2" valueType="TextField"/>
            <parameter description="Minutes to wait before spin down" label="declineDuration" name="declineDuration" password="false" readOnly="false" required="true" value="4" valueType="TextField"/>
          </threshold>
        </KPI>
      </registeredKpis>
      <parameter name="loadShedKpi" label="Load shedding KPI" description="KPI to use for Load Shedding" value="Device CPU" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedThreshold" label="Load shedding threshold" description="Load shedding threshold value" value="20" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedTimeout" label="Load shedding timeout (minutes)" description="Load shedding timeout (minutes)" value="1" password="false" readOnly="false" required="true" valueType="TextField"/>
    </capacity>
  </nfGroup>
  <nfGroup name="SCE" componentType="SCE" softwareVersion="1.0" emsType="OCECASEM" maximumNumberDU="50" minimumNumberDU="1" order="2">
    <resiliencePolicy name="STANDALONE" activeDevicesPerDU="1"/>
    <resource isVirtual="true">
      <virtual minimumCpus="8" maximumCpus="8" minimumDiskBytes="13958643712" maximumDiskBytes="13958643712" minimumMemoryBytes="8589934592" maximumMemoryBytes="8589934592" managementIPCount="1">
        <Interfaces name="eth0" order="0"/>
        <SizingAllocation>
          <SupportedAllocation name="SizingModel" size="Small" cpus="8" memoryBytes="17179869184" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="100000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Medium" cpus="16" memoryBytes="34359738368" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="200000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Large" cpus="32" memoryBytes="34359738368" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="400000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
        </SizingAllocation>
      </virtual>
    </resource>
    <bootParameters>
      <!-- The parameters given to the VIM to boot the VM. -->
      <commonParameters>
        <parameter description="Default Gateway" label="Default Gateway" name="defaultGW" password="false" readOnly="false" required="true" value="10.0.0.1" valueType="Ipv4"/>
        <parameter description="Netmask" label="Netmask" name="netmask" password="false" readOnly="false" required="true" value="255.255.255.0" valueType="TextField"/>
        <parameter description="Public Key" label="Public Key" name="publickey" password="false" readOnly="false" required="true" value="" valueType="TextArea"/>
      </commonParameters>
      <deviceParameters>
        <parameter description="Hostname" label="Hostname" name="targetname" password="false" readOnly="false" required="true" value="engine" valueType="TextField"/>
        <parameter description="Management IP Address" label="IP Address" name="mgmtIp" password="false" readOnly="false" required="true" value="10.0.0.71" valueType="Ipv4"/>
      </deviceParameters>
    </bootParameters>
    <dependencies>
      <notifications>
      </notifications>
      <groups>
      </groups>
    </dependencies>
    <capacity scalingPolicy="AO standard scaling policy">
      <registeredKpis>
        <KPI name="ActiveCallStates" referenceName="ActiveCallStates" source="EMAdaptor" description="com.bea:ServerRuntime=${serverName},Name=${serverName},Type=SipPerformanceRuntime,SipServerRuntime=${serverName}">
          <threshold relativeLimit="100">
            <parameter description="Number to start monitoring for spin up" label="warningThreshold" name="warningThreshold" password="false" readOnly="false" required="true" value="40" valueType="TextField"/>
            <parameter description="Number to force immediate spinup" label="criticalThreshold" name="criticalThreshold" password="false" readOnly="false" required="true" value="45" valueType="TextField"/>
            <parameter description="Minutes to wait before spin up" label="growthDuration" name="growthDuration" password="false" readOnly="false" required="true" value="2" valueType="TextField"/>
            <parameter description="Minutes to wait before spin down" label="declineDuration" name="declineDuration" password="false" readOnly="false" required="true" value="0" valueType="TextField"/>
          </threshold>
        </KPI>
      </registeredKpis>
      <parameter name="loadShedKpi" label="Load shedding KPI" description="KPI to use for Load Shedding" value="ActiveCallStates" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedThreshold" label="Load shedding threshold" description="Load shedding threshold value" value="20" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedTimeout" label="Load shedding timeout (minutes)" description="Load shedding timeout (minutes)" value="1" password="false" readOnly="false" required="true" valueType="TextField"/>
    </capacity>
  </nfGroup>
  <nfGroup name="UDR" componentType="UDR" softwareVersion="1.0" emsType="OCECASEM" maximumNumberDU="50" minimumNumberDU="1" order="3">
    <resiliencePolicy name="STANDALONE" activeDevicesPerDU="1"/>
    <resource isVirtual="true">
      <virtual minimumCpus="8" maximumCpus="8" minimumDiskBytes="13958643712" maximumDiskBytes="13958643712" minimumMemoryBytes="8589934592" maximumMemoryBytes="8589934592" managementIPCount="1">
        <Interfaces name="eth0" order="0"/>
        <SizingAllocation>
          <SupportedAllocation name="SizingModel" size="Small" cpus="2" memoryBytes="17179869184" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="100000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Medium" cpus="2" memoryBytes="17179869184" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="200000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
          <SupportedAllocation name="SizingModel" size="Large" cpus="4" memoryBytes="17179869184" diskBytes="13958643712">
            <SupportedAllocationKPI>
              <parameter description="Number of Subscribers" label="Subscribers" name="SubscriberPerVm" password="false" readOnly="false" required="true" value="400000" valueType="NumberField"><validValues name="" /></parameter>
            </SupportedAllocationKPI>
          </SupportedAllocation>
        </SizingAllocation>
      </virtual>
    </resource>
    <bootParameters>
      <!-- The parameters given to the VIM to boot the VM. -->
      <commonParameters>
        <parameter description="Default Gateway" label="Default Gateway" name="defaultGW" password="false" readOnly="false" required="true" value="10.0.0.1" valueType="Ipv4"/>
        <parameter description="Netmask" label="Netmask" name="netmask" password="false" readOnly="false" required="true" value="255.255.255.0" valueType="TextField"/>
        <parameter description="Public Key" label="Public Key" name="publickey" password="false" readOnly="false" required="true" value="" valueType="TextArea"/>
      </commonParameters>
      <deviceParameters>
        <parameter description="Hostname" label="Hostname" name="targetname" password="false" readOnly="false" required="true" value="udr" valueType="TextField"/>
        <parameter description="Management IP Address" label="IP Address" name="mgmtIp" password="false" readOnly="false" required="true" value="10.0.0.80" valueType="Ipv4"/>
      </deviceParameters>
    </bootParameters>
    <dependencies>
      <notifications>
      </notifications>
      <groups>
      </groups>
    </dependencies>
    <capacity scalingPolicy="AO standard scaling policy">
      <registeredKpis>
        <KPI name="MultiIntervalTotalRequests" referenceName="MultiIntervalTotalRequests" source="EMAdaptor" description="MultiIntervalTotalRequests">
          <threshold relativeLimit="1000">
            <parameter description="Number to start monitoring for spin up" label="warningThreshold" name="warningThreshold" password="false" readOnly="false" required="true" value="500" valueType="TextField"/>
            <parameter description="Number to force immediate spinup" label="criticalThreshold" name="criticalThreshold" password="false" readOnly="false" required="true" value="1000" valueType="TextField"/>
            <parameter description="Minutes to wait before spin up" label="growthDuration" name="growthDuration" password="false" readOnly="false" required="true" value="1" valueType="TextField"/>
            <parameter description="Minutes to wait before spin down" label="declineDuration" name="declineDuration" password="false" readOnly="false" required="true" value="4" valueType="TextField"/>
          </threshold>
        </KPI>
      </registeredKpis>
      <parameter name="loadShedKpi" label="Load shedding KPI" description="KPI to use for Load Shedding" value="MultiIntervalTotalRequests" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedThreshold" label="Load shedding threshold" description="Load shedding threshold value" value="10" password="false" readOnly="false" required="true" valueType="TextField"/>
      <parameter name="loadShedTimeout" label="Load shedding timeout (minutes)" description="Load shedding timeout (minutes)" value="1" password="false" readOnly="false" required="true" valueType="TextField"/>
    </capacity>
  </nfGroup>
</CNF>