.. This work is licensed under a Creative Commons Attribution 4.0
   International License. http://creativecommons.org/licenses/by/4.0

.. _docs_usecases:

Verified Use Cases and Functional Requirements
----------------------------------------------

Description
~~~~~~~~~~~
This session includes use cases and functional requirements which have been verified in Frankfurt release by the Integration team:
    1. What has been implemented
    2. Step by step instruction on how to deploy them, including the links to download the related assets and resources
    3. Known issues and workaround

The final testing status can be found at `Frankfurt Release Integration Testing Status <https://wiki.onap.org/display/DW/2%3A+Frankfurt+Release+Integration+Testing+Status>`_

Use Cases
~~~~~~~~~
:ref:`vFirewall Use Case <docs_vfw>`

:ref:`VF Module Scale Out Use Case (vLoadBalancer/vDNS example) <docs_scaleout>`

:ref:`vCPE Use Case <docs_vcpe>`

:ref:`CCVPN (Cross Domain and Cross Layer VPN) Use Case <docs_ccvpn>`

:ref:`vFirewall/vDNS with HPA Use Case <docs_vfw_hpa>`

:ref:`vFirewall Traffic Distribution Use Case <docs_vfw_traffic>`

:ref:`BBS (Broadband Service) Use Case <docs_bbs>`

:ref:`vIPsec with HPA Use Case <docs_vipsec_hpa>`

:ref:`vFirewall/edgex with multicloud kubernetes plugin <docs_vfw_edgex_multicloud_k8s>`

:ref:`vFirewall CNF (Container Network Function) With CDS Use Case <docs_vFW_CNF_CDS>`

Functional Requirements
~~~~~~~~~~~~~~~~~~~~~~~
:ref:`5G - Real Time PM and High Volume Stream Data Collection <docs_realtime_pm>`

:ref:`5G - Bulk PM <docs_5g_bulk_pm>`

:ref:`5G - Configuration over NETCONF <docs_5G_Configuration_over_NETCONF>`

:ref:`5G - OOF and PCI <docs_5G_oof_pci>`

:ref:`5G - E2E Network Slicing <docs_E2E_network_slicing>`

:ref:`5G - NRM Configuration <docs_5G_NRM_Configuration>`

:ref:`PNF Support - PNF Plug and Play <docs_5g_pnf_pnp>`

:ref:`PNF Support - PNF Software Upgrade <docs_5g_pnf_software_upgrade>`

:ref:`Change Management Flexible Designer and Orchestrator <docs_CM_flexible_designer_orchestrator>`

:ref:`Change Management Schedule Optimization <docs_CM_schedule_optimizer>`
