.. 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
