.. 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:`ONAP Release Notes <onap-release-notes>`                                  | The Release Notes are providing general information about the ONAP release and recent changes,|
 |                                                                                 | feature enhancements, or bug fixes.                                                           |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Project Specific Release Notes <doc-releaserepos>`                        | The Project Specific Release Notes are providing information about recent changes, feature    |
 |                                                                                 | enhancements, or bug fixes on a component level.                                              |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :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:`Documentation Guides <ONAP_documentation_guides>`                         | People interested in the creation of ONAP documentation can find crucial information          |
 |                                                                                 | in the ONAP Documentation Guide. Currently some content resides also in the Developer Guide.  |
 |                                                                                 | This is subject to be reviewed, updated and migrated to the ONAP Documenation Guide.          |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP Security <onap-security>`                                            | The current state of ONAP Security is described here. We can learn about discovered and fixed |
 |                                                                                 | vulnerabilities.                                                                              |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+

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

   Home <self>
   release/index
   release/releaserepos
   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-documentation/index
