.. This work is licensed under a
   Creative Commons Attribution 4.0 International License.

.. _master_index:

Open Network Automation Platform
================================

Open Network Automation Platform (ONAP) is an open source project hosted by
the Linux Foundation.

ONAP provides a comprehensive platform for real-time, policy-driven service
orchestration and automation. ONAP enables service providers and developers
to rapidly automate the instantiation and configuration of physical and
virtual network functions and to support complete life cycle management
activities. By unifying the resources of open source members, ONAP enables
the acceleration of the development of a vibrant ecosystem around a globally
shared architecture and the implementation of network automation faster than
any product could on its own.

Please find some guidance here on the content of ONAP documentation:

 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | Main documentation areas                                                        | Description                                                                                   |
 +=================================================================================+===============================================================================================+
 | :ref:`Release Notes <release-notes>`                                            | The Release Notes besides providing the basic information on the main release, also           |
 |                                                                                 | presents link to the release information of each, specific ONAP component.                    |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP Overview <overview>`                                                 | ONAP Overview provides generic and high-level guidance on the mission and main                |
 |                                                                                 | functionalities of ONAP. Basic guidelines on license details, limitations and                 |
 |                                                                                 | security references support understanding the solution.                                       |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP Architecture <ONAP-architecture>`                                    | The ONAP architecture and its functional elements are described in details                    |
 |                                                                                 | here. We can learn how the two main frameworks, namely the Design-time                        |
 |                                                                                 | framework and the Run-time framework cooperate and how the Microservices,                     |
 |                                                                                 | Common services and the ONAP Portal support the certain functions.                            |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP components and functionalities <doc_onap-developer_guide_projects>`  | The ONAP components and functionalities are described in details here.                        |
 |                                                                                 | We can learn what functionalities ONAP provides and how the certain components in ONAP        |
 |                                                                                 | operate together.                                                                             |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Operations and Adminstration Guides <operation_guides>`                   | ONAP Platform operation and adminstration cover the configuration and installation of ONAP,   |
 |                                                                                 | its management, monitoring and other operational tasks (integration, user management,...)     |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`User Guides <user-guides>`                                                | The User Guides focus on tasks to administer Services using ONAP, covering Service Design,    |
 |                                                                                 | instantiation and their management using control loops                                        |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Developer Guides <ONAP_developer_guides>`                                 | Developers contributing to the ONAP development can find crucial information                  |
 |                                                                                 | in the Developer Guides. The reader can search among the developers’ topics                   |
 |                                                                                 | in alphabetical order.                                                                        |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`VNF/PNF Requirements and Guidelines <vnf_pnf_reqs>`                       | Harmonized VNF and PNF requirements and reduced customization of onboarding VNFs              |
 |                                                                                 | and PNFs can accelerate the optimal usage of this ONAP environment. The guidelines            |
 |                                                                                 | on VNF/PNF requirements facilitates synchronized and aligned activities for all participants. |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+



.. toctree::
   :maxdepth: 1
   :hidden:

   Home <self>
   release/index
   guides/overview/index
   guides/onap-developer/architecture/index
   guides/onap-developer/developing/index
   guides/onap-operator/index
   guides/onap-user/index
   guides/onap-developer/index
   guides/onap-provider/index
