mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
doc: Add documentation for MGMT daemon
This commit adds user documentation for the new MGMT daemon and new FRR Management Framework. Co-authored-by: Yash Ranjan <ranjany@vmware.com> Co-authored-by: Abhinay Ramesh <rabhinay@vmware.com> Co-authored-by: Ujwal P <ujwalp@vmware.com> Signed-off-by: Pushpasis Sarkar <pushpasis@gmail.com>
This commit is contained in:
parent
d1e85e3600
commit
5b08f6f9ea
|
@ -46,7 +46,7 @@ Add packages:
|
||||||
sudo yum install git autoconf automake libtool make \
|
sudo yum install git autoconf automake libtool make \
|
||||||
readline-devel texinfo net-snmp-devel groff pkgconfig \
|
readline-devel texinfo net-snmp-devel groff pkgconfig \
|
||||||
json-c-devel pam-devel flex epel-release c-ares-devel libcap-devel \
|
json-c-devel pam-devel flex epel-release c-ares-devel libcap-devel \
|
||||||
elfutils-libelf-devel
|
elfutils-libelf-devel protobuf-c-devel
|
||||||
|
|
||||||
Install newer version of bison (CentOS 6 package source is too old) from CentOS
|
Install newer version of bison (CentOS 6 package source is too old) from CentOS
|
||||||
7:
|
7:
|
||||||
|
|
|
@ -22,7 +22,7 @@ Add packages:
|
||||||
readline-devel texinfo net-snmp-devel groff pkgconfig \
|
readline-devel texinfo net-snmp-devel groff pkgconfig \
|
||||||
json-c-devel pam-devel bison flex pytest c-ares-devel \
|
json-c-devel pam-devel bison flex pytest c-ares-devel \
|
||||||
python-devel python-sphinx libcap-devel \
|
python-devel python-sphinx libcap-devel \
|
||||||
elfutils-libelf-devel libunwind-devel
|
elfutils-libelf-devel libunwind-devel protobuf-c-devel
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,8 @@ Add packages:
|
||||||
automake libtool make readline-devel texinfo net-snmp-devel pkgconfig \
|
automake libtool make readline-devel texinfo net-snmp-devel pkgconfig \
|
||||||
groff pkgconfig json-c-devel pam-devel bison flex python2-pytest \
|
groff pkgconfig json-c-devel pam-devel bison flex python2-pytest \
|
||||||
c-ares-devel python2-devel libcap-devel \
|
c-ares-devel python2-devel libcap-devel \
|
||||||
elfutils-libelf-devel libunwind-devel
|
elfutils-libelf-devel libunwind-devel \
|
||||||
|
protobuf-c-devel
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ Add packages:
|
||||||
sudo apt-get install git autoconf automake libtool make \
|
sudo apt-get install git autoconf automake libtool make \
|
||||||
libreadline-dev texinfo libjson-c-dev pkg-config bison flex python3-pip \
|
libreadline-dev texinfo libjson-c-dev pkg-config bison flex python3-pip \
|
||||||
libc-ares-dev python3-dev python3-sphinx build-essential \
|
libc-ares-dev python3-dev python3-sphinx build-essential \
|
||||||
libsnmp-dev libcap-dev libelf-dev
|
libsnmp-dev libcap-dev libelf-dev libprotobuf-c-dev protobuf-c-compiler
|
||||||
|
|
||||||
Install newer pytest (>3.0) from pip
|
Install newer pytest (>3.0) from pip
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@ Add packages:
|
||||||
sudo apt-get install git autoconf automake libtool make \
|
sudo apt-get install git autoconf automake libtool make \
|
||||||
libreadline-dev texinfo libjson-c-dev pkg-config bison flex \
|
libreadline-dev texinfo libjson-c-dev pkg-config bison flex \
|
||||||
libc-ares-dev python3-dev python3-pytest python3-sphinx build-essential \
|
libc-ares-dev python3-dev python3-pytest python3-sphinx build-essential \
|
||||||
libsnmp-dev libcap-dev libelf-dev libunwind-dev
|
libsnmp-dev libcap-dev libelf-dev libunwind-dev \
|
||||||
|
libprotobuf-c-dev protobuf-c-compiler
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ Installing Dependencies
|
||||||
readline-devel texinfo net-snmp-devel groff pkgconfig json-c-devel \
|
readline-devel texinfo net-snmp-devel groff pkgconfig json-c-devel \
|
||||||
pam-devel python3-pytest bison flex c-ares-devel python3-devel \
|
pam-devel python3-pytest bison flex c-ares-devel python3-devel \
|
||||||
python3-sphinx perl-core patch libcap-devel \
|
python3-sphinx perl-core patch libcap-devel \
|
||||||
elfutils-libelf-devel libunwind-devel
|
elfutils-libelf-devel libunwind-devel protobuf-c-devel
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,8 @@ is first package install and asked)
|
||||||
::
|
::
|
||||||
|
|
||||||
pkg install git autoconf automake libtool gmake json-c pkgconf \
|
pkg install git autoconf automake libtool gmake json-c pkgconf \
|
||||||
bison flex py36-pytest c-ares python3.6 py36-sphinx libunwind
|
bison flex py36-pytest c-ares python3.6 py36-sphinx libunwind \
|
||||||
|
protobuf-c
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,8 @@ is first package install and asked)
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
pkg install git autoconf automake libtool gmake json-c pkgconf \
|
pkg install git autoconf automake libtool gmake json-c pkgconf \
|
||||||
bison flex py36-pytest c-ares python3.6 py36-sphinx texinfo libunwind
|
bison flex py36-pytest c-ares python3.6 py36-sphinx texinfo libunwind \
|
||||||
|
protobuf-c
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ is first package install and asked)
|
||||||
|
|
||||||
pkg install -y git autoconf automake libtool gmake \
|
pkg install -y git autoconf automake libtool gmake \
|
||||||
pkgconf texinfo json-c bison flex py36-pytest c-ares \
|
pkgconf texinfo json-c bison flex py36-pytest c-ares \
|
||||||
python3 py36-sphinx libexecinfo
|
python3 py36-sphinx libexecinfo protobuf-c
|
||||||
|
|
||||||
Make sure there is no /usr/bin/flex preinstalled (and use the newly
|
Make sure there is no /usr/bin/flex preinstalled (and use the newly
|
||||||
installed in /usr/local/bin): (FreeBSD frequently provides a older flex
|
installed in /usr/local/bin): (FreeBSD frequently provides a older flex
|
||||||
|
|
|
@ -23,7 +23,8 @@ Add packages:
|
||||||
::
|
::
|
||||||
|
|
||||||
sudo pkg_add git autoconf automake libtool gmake openssl \
|
sudo pkg_add git autoconf automake libtool gmake openssl \
|
||||||
pkg-config json-c py36-test python36 py36-sphinx
|
pkg-config json-c py36-test python36 py36-sphinx \
|
||||||
|
protobuf-c
|
||||||
|
|
||||||
Install SSL Root Certificates (for git https access):
|
Install SSL Root Certificates (for git https access):
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,8 @@ Install required packages
|
||||||
::
|
::
|
||||||
|
|
||||||
sudo pkgin install git autoconf automake libtool gmake openssl \
|
sudo pkgin install git autoconf automake libtool gmake openssl \
|
||||||
pkg-config json-c python36 py36-test py36-sphinx
|
pkg-config json-c python36 py36-test py36-sphinx \
|
||||||
|
protobuf-c
|
||||||
|
|
||||||
Install SSL Root Certificates (for git https access):
|
Install SSL Root Certificates (for git https access):
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Add packages:
|
||||||
|
|
||||||
pkg_add clang libcares python3
|
pkg_add clang libcares python3
|
||||||
pkg_add git autoconf-2.69p2 automake-1.15.1 libtool bison
|
pkg_add git autoconf-2.69p2 automake-1.15.1 libtool bison
|
||||||
pkg_add gmake json-c py-test py-sphinx libexecinfo
|
pkg_add gmake json-c py-test py-sphinx libexecinfo protobuf-c
|
||||||
|
|
||||||
Select Python2.7 as default (required for pytest)
|
Select Python2.7 as default (required for pytest)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ Installing Dependencies
|
||||||
readline-devel texinfo net-snmp-devel groff pkgconfig libjson-c-devel\
|
readline-devel texinfo net-snmp-devel groff pkgconfig libjson-c-devel\
|
||||||
pam-devel python3-pytest bison flex c-ares-devel python3-devel\
|
pam-devel python3-pytest bison flex c-ares-devel python3-devel\
|
||||||
python3-Sphinx perl patch libcap-devel libyang-devel \
|
python3-Sphinx perl patch libcap-devel libyang-devel \
|
||||||
libelf-devel libunwind-devel
|
libelf-devel libunwind-devel protobuf-c
|
||||||
|
|
||||||
.. include:: building-libunwind-note.rst
|
.. include:: building-libunwind-note.rst
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,13 @@ Installing Dependencies
|
||||||
|
|
||||||
.. include:: building-libyang.rst
|
.. include:: building-libyang.rst
|
||||||
|
|
||||||
|
Protobuf
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
sudo apt-get install protobuf-c-compiler libprotobuf-c-dev
|
||||||
|
|
||||||
Building & Installing FRR
|
Building & Installing FRR
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,17 @@ Installing Dependencies
|
||||||
pkg-config libpam0g-dev libjson-c-dev bison flex python3-pytest \
|
pkg-config libpam0g-dev libjson-c-dev bison flex python3-pytest \
|
||||||
libc-ares-dev python3-dev python-ipaddress python3-sphinx \
|
libc-ares-dev python3-dev python-ipaddress python3-sphinx \
|
||||||
install-info build-essential libsnmp-dev perl libcap-dev \
|
install-info build-essential libsnmp-dev perl libcap-dev \
|
||||||
libelf-dev
|
libelf-dev libprotobuf-c-dev protobuf-c-compiler
|
||||||
|
|
||||||
.. include:: building-libyang.rst
|
.. include:: building-libyang.rst
|
||||||
|
|
||||||
|
Protobuf
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
sudo apt-get install protobuf-c-compiler libprotobuf-c-dev
|
||||||
|
|
||||||
Building & Installing FRR
|
Building & Installing FRR
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ Protocols
|
||||||
vrrp
|
vrrp
|
||||||
bmp
|
bmp
|
||||||
watchfrr
|
watchfrr
|
||||||
|
mgmtd
|
||||||
|
|
||||||
########
|
########
|
||||||
Appendix
|
Appendix
|
||||||
|
|
375
doc/user/mgmtd.rst
Normal file
375
doc/user/mgmtd.rst
Normal file
|
@ -0,0 +1,375 @@
|
||||||
|
.. _mgmtd:
|
||||||
|
|
||||||
|
*************************
|
||||||
|
MGMTd (Management Daemon)
|
||||||
|
*************************
|
||||||
|
|
||||||
|
The FRR Management Daemon (from now on referred to as MGMTd) is a new
|
||||||
|
centralized entity representing the FRR Management Plane which can take
|
||||||
|
management requests from any kind of UI/Frontend entity (e.g. CLI, Netconf,
|
||||||
|
Restconf, Grpc etc.) over a new unified and common Frontend interface and
|
||||||
|
can help maintain configurational data or retrieve operational data from
|
||||||
|
any number of FRR managed entities/components that have been integrated
|
||||||
|
with the new FRR Centralised Management Framework.
|
||||||
|
|
||||||
|
For organizing the management data to be owned by the FRR Management plane,
|
||||||
|
management data is stored in YANG in compliance with a pre-defined set
|
||||||
|
of YANG based schema. Data shall also be stored/retrieved in YANG format only.
|
||||||
|
|
||||||
|
The MGMTd also acts as a separate computational entity for offloading much
|
||||||
|
of the management related computational overload involved in maintaining of
|
||||||
|
management data and processing of management requests, from individual
|
||||||
|
component daemons (which can otherwise be a signficant burden on the individual
|
||||||
|
components, affecting performance of its other functionalities).
|
||||||
|
|
||||||
|
Lastly, the MGMTd works in-tandem with one (or more) MGMT Frontend
|
||||||
|
Clients and a bunch of MGMT Backend Clients to realize the entirety
|
||||||
|
of the FRR Management plane. Some of the advanatages of this new framework
|
||||||
|
are:
|
||||||
|
|
||||||
|
1. Consolidation and management of all Management data by a single entity.
|
||||||
|
2. Better control over configuration validation, commit and rollback.
|
||||||
|
3. Faster collection of configuration data (without needing to involve
|
||||||
|
individual component daemons).
|
||||||
|
4. Offload computational burden of YANG data parsing and validations
|
||||||
|
of new configuration data being provisoned away from individual
|
||||||
|
component daemons
|
||||||
|
5. Improve performance of individual component daemons while loading
|
||||||
|
huge configuration or retrieving huge operational dataset.
|
||||||
|
|
||||||
|
The new FRR Management Daemon consists of the following sub-components:
|
||||||
|
- MGMT Frontend Interface
|
||||||
|
- MGMT Backend Interface
|
||||||
|
- MGMT Transaction Engine
|
||||||
|
|
||||||
|
.. _mgmt_fe:
|
||||||
|
|
||||||
|
MGMT Frontend Interface
|
||||||
|
=======================
|
||||||
|
|
||||||
|
The MGMT Frontend Interface is a bunch of message-based APIs that lets
|
||||||
|
any UI/Frontend client to interact with the MGMT daemon to requests a
|
||||||
|
set of management operations on a specific datastore/database.
|
||||||
|
Following is a list of databases/datastores supported by the MGMT
|
||||||
|
Frontend Interface and MGMTd:
|
||||||
|
|
||||||
|
- Candidate Database:
|
||||||
|
|
||||||
|
- Consists of configuration data items only.
|
||||||
|
- Data can be edited anytime using SET_CONFIG API.
|
||||||
|
- Data can be retrieved anytime using GET_CONFIG/GET_DATA API.
|
||||||
|
|
||||||
|
- Running Database:
|
||||||
|
|
||||||
|
- Consists of configuration data items only.
|
||||||
|
- Data cannot be edited using SET_CONFIG API.
|
||||||
|
- Data can only be modified using COMMIT_CONFIG API after which un-committed
|
||||||
|
data from Candidate database will be first validated and applied to
|
||||||
|
individualBackend component(s). Only on successful validation and apply on
|
||||||
|
all individual components will the new data be copied over to the Running
|
||||||
|
database.
|
||||||
|
- Data can be retrieved anytime using GET_CONFIG/GET_DATA API.
|
||||||
|
|
||||||
|
- Startup Database:
|
||||||
|
|
||||||
|
- Consists of configuration data items only.
|
||||||
|
- This is a copy of Running database that is stored in persistent
|
||||||
|
storage and is used to load configurations on Running database during
|
||||||
|
MGMT daemon startup.
|
||||||
|
- Data cannot be edited/retrieved directly via Frontend interface.
|
||||||
|
|
||||||
|
- Operational Database:
|
||||||
|
|
||||||
|
- Consists of non-configurational data items.
|
||||||
|
- Data is not stored on MGMT daemon. Rather it will be need to be fetched
|
||||||
|
in real-time from the corresponding Backend component (if present).
|
||||||
|
- Data can be retrieved anytime using GET_DATA API.
|
||||||
|
|
||||||
|
Frontend Clients connected to MGMTd via Frontend Interface can themselves have
|
||||||
|
multiple connections from one (or more) of its own remote clients. The MGMT
|
||||||
|
Frontend Interface supports reresenting each of the remote clients for a given
|
||||||
|
Frontend client(e.g. Netconf clients on a single Netconf server) as individual
|
||||||
|
Frontend Client Sessions. So a single connection from a single Frontend Client
|
||||||
|
can create more than one Frontend Client sessions.
|
||||||
|
|
||||||
|
Following are some of the management operations supported:
|
||||||
|
- INIT_SESSION/CLOSE_SESSION: Create/Destroy a session. Rest of all the
|
||||||
|
operations are supported only in the context of a specific session.
|
||||||
|
- LOCK_DB/UNLOCK_DB: Lock/Unlock Management datastores/databases.
|
||||||
|
- GET_CONFIG/GET_DATA: Retrieve configurational/operational data from a
|
||||||
|
specific datastore/database.
|
||||||
|
- SET_CONFIG/DELETE_CONFIG: Add/Modify/Delete specific data in a specific
|
||||||
|
datastore/database.
|
||||||
|
- COMMIT_CONFIG: Validate and/or apply the uncommited set of configurations
|
||||||
|
from one configuration database to another.
|
||||||
|
- Currently committing configurations from Candidate to Running database
|
||||||
|
is only allowed, and not vice versa.
|
||||||
|
|
||||||
|
The exact set of message-based APIs are represented as Google Protobuf
|
||||||
|
messages and can be found in the following file distributed with FRR codebase.
|
||||||
|
|
||||||
|
.. code-block:: frr
|
||||||
|
|
||||||
|
lib/mgmt.proto
|
||||||
|
|
||||||
|
The MGMT daemon implements a MGMT Frontend Server that opens a UNIX
|
||||||
|
socket-based IPC channel on the following path to listen for incoming
|
||||||
|
connections from all possible Frontend clients:
|
||||||
|
|
||||||
|
.. code-block:: frr
|
||||||
|
|
||||||
|
/var/run/frr/mgmtd_fe.sock
|
||||||
|
|
||||||
|
Each connection received from a Frontend client is managed and tracked
|
||||||
|
as a MGMT Frontend adapter by the MGMT Frontend Adapter sub-component
|
||||||
|
implemented by MGMTd.
|
||||||
|
|
||||||
|
To facilitate faster development/integration of Frontend clients with
|
||||||
|
MGMT Frontend Interface, a C-based library has been developed. The API
|
||||||
|
specification of this library can be found at:
|
||||||
|
|
||||||
|
.. code-block:: frr
|
||||||
|
|
||||||
|
lib/mgmt_fe_client.h
|
||||||
|
|
||||||
|
Following is a list of message types supported on the MGMT Frontend Interface:
|
||||||
|
- SESSION_REQ<Client-Connection-Id, Destroy>
|
||||||
|
- SESSION_REPLY<Client-Connection-Id, Destroy, Session-Id>
|
||||||
|
- LOCK_DB_REQ <Session-Id, Database-Id>
|
||||||
|
- LOCK_DB_REPLY <Session-Id, Database-Id>
|
||||||
|
- UNLOCK_DB_REQ <Session-Id, Database-Id>
|
||||||
|
- UNLOCK_DB_REPLY <Session-Id, Database-Id>
|
||||||
|
- GET_CONFIG_REQ <Session-Id, Database-Id, Base-Yang-Xpath>
|
||||||
|
- GET_CONFIG_REPLY <Session-Id, Database-Id, Base-Yang-Xpath, Yang-Data-Set>
|
||||||
|
- SET_CONFIG_REQ <Session-Id, Database-Id, Base-Yang-Xpath, Delete, ...>
|
||||||
|
- SET_CONFIG_REPLY <Session-Id, Database-id, Base-Yang-Xpath, ..., Status>
|
||||||
|
- COMMIT_CONFIG_REQ <Session-Id, Source-Db-Id, Dest-Db-Id>
|
||||||
|
- COMMIT_CONFIG_REPLY <Session-Id, Source-Db-id, Dest-Db-Id, Status>
|
||||||
|
- GET_DATA_REQ <Session-Id, Database-Id, Base-Yang-Xpath>
|
||||||
|
- GET_DATA_REPLY <Session-Id, Database-id, Base-Yang-Xpath, Yang-Data-Set>
|
||||||
|
- REGISTER_NOTIFY_REQ <Session-Id, Database-Id, Base-Yang-Xpath>
|
||||||
|
- DATA_NOTIFY_REQ <Database-Id, Base-Yang-Xpath, Yang-Data-Set>
|
||||||
|
|
||||||
|
Please refer to the MGMT Frontend Client Developers Reference and Guide
|
||||||
|
(coming soon) for more details.
|
||||||
|
|
||||||
|
MGMTD Backend Interface
|
||||||
|
=======================
|
||||||
|
The MGMT Backend Interface is a bunch of message-based APIs that can be
|
||||||
|
used by individual component daemons like BGPd, Staticd, Zebra to connect
|
||||||
|
with MGMTd and utilize the new FRR Management Framework to let any Frontend
|
||||||
|
clients to retrieve any operational data or manipulate any configuration data
|
||||||
|
owned by the individual daemon component.
|
||||||
|
|
||||||
|
Like the MGMT Frontend Interface, the MGMT Backend Interface is is also
|
||||||
|
comprised of the following:
|
||||||
|
|
||||||
|
- MGMT Backend Server (running on MGMT daemon)
|
||||||
|
- MGMT Backend Adapter (running on MGMT daemon)
|
||||||
|
- MGMT Backend client (running on Backend component daemons)
|
||||||
|
|
||||||
|
The MGMT Backend Client and MGMT Backend Adapter sub-component communicates
|
||||||
|
using a specific set of message-based APIs.
|
||||||
|
|
||||||
|
The exact set of message-based APIs are represented as Google Protobuf
|
||||||
|
messages and can be found in the following file distributed with FRR codebase.
|
||||||
|
|
||||||
|
.. code-block:: frr
|
||||||
|
|
||||||
|
lib/mgmt.proto
|
||||||
|
|
||||||
|
The MGMT daemon implements a MGMT Backend Server that opens a UNIX
|
||||||
|
socket-based IPC channel on the following path to listen for incoming
|
||||||
|
connections from all possible Backend clients:
|
||||||
|
|
||||||
|
.. code-block:: frr
|
||||||
|
|
||||||
|
/var/run/frr/mgmtd_be.sock
|
||||||
|
|
||||||
|
Each connection received from a Backend client is managed and tracked
|
||||||
|
as a MGMT Backend adapter by the MGMT Backend Adapter sub-component
|
||||||
|
implemented by MGMTd.
|
||||||
|
|
||||||
|
To facilitate faster development/integration of Backend clients with
|
||||||
|
MGMTd, a C-based library has been developed. The API specification
|
||||||
|
of this library can be found at:
|
||||||
|
|
||||||
|
.. code-block:: frr
|
||||||
|
|
||||||
|
lib/mgmt_be_client.h
|
||||||
|
|
||||||
|
Following is a list of message types supported on the MGMT Backend Interface:
|
||||||
|
|
||||||
|
- SUBSCRIBE_REQ <Req-Id, Base-Yang-Xpath, Filter-Type>
|
||||||
|
- SUBSCRIBE_REPLY <Req-Id, Status>
|
||||||
|
- TXN_REQ <Txn-Id, Create>
|
||||||
|
- TXN_REPLY <Txn-Id, Status>
|
||||||
|
- CREATE_CFGDATA_REQ <Txn-Id, Req-Id, Batch-Id, ConfigDataContents>
|
||||||
|
- CREATE_CFGDATA_ERROR <Txn-Id, Req-Id, Batch-Id, Status>
|
||||||
|
- VALIDATE_CFGDATA_REQ <Txn-Id, Batch-Id>
|
||||||
|
- VALIDATE_CFGDATA_REPLY <Txn-Id, Batch-Id, Status, ErrorInfo>
|
||||||
|
- APPLY_CFGDATA_REQ <Txn-Id, Batch-Id>
|
||||||
|
- APPLY_CFGDATA_REPLY <Txn-Id, Batch-Id, Status, ErrorInfo>
|
||||||
|
- GET_OPERDATA_REQ <Txn-Id, Base-Yang-Xpath, Filter-Type>
|
||||||
|
- GET_OPERDATA_REPLY <Txn-Id, OperDataContents>
|
||||||
|
|
||||||
|
Please refer to the MGMT Backend Client Developers Reference and Guide
|
||||||
|
(coming soon) for more details.
|
||||||
|
|
||||||
|
MGMTD Transaction Engine
|
||||||
|
========================
|
||||||
|
|
||||||
|
The MGMT Transaction sub-component is the main brain of the MGMT daemon that
|
||||||
|
takes management requests from one (or more) Frontend Client translates
|
||||||
|
them into transactions and drives them to completion in co-oridination with
|
||||||
|
one (or more) Backend client daemons involved in the request.
|
||||||
|
|
||||||
|
A transaction can be seen as a set of management procedures executed over
|
||||||
|
the Backend Interface with one (or more) individual Backend component
|
||||||
|
daemons, as a result of some management request initiated from a specific
|
||||||
|
Frontend client session. These group of operations on the Backend Interface
|
||||||
|
with one (or more) individual components involved should be executed without
|
||||||
|
taking any further management requests from other Frontend client sessions.
|
||||||
|
To maintain this kind of atomic behavior a lock needs to be acquired
|
||||||
|
(sometimes implicitly if not explicitly) by the corresponding Frontend client
|
||||||
|
session, on the various datastores/databases involved in the management request
|
||||||
|
being executed. The same datastores/databases need to be unlocked when all
|
||||||
|
the procedures have been executed and the transaction is being closed.
|
||||||
|
|
||||||
|
Following are some of the transaction types supported by MGMT:
|
||||||
|
|
||||||
|
- Configuration Transactions
|
||||||
|
|
||||||
|
- Used to execute management operations like SET_CONFIG and COMMIT_CONFIG
|
||||||
|
that involve writing/over-writing the contents of Candidate and Running
|
||||||
|
databases.
|
||||||
|
- One (and only) can be created and be in-progress at any given time.
|
||||||
|
- Once initiated by a specific Frontend Client session and is still
|
||||||
|
in-progress, all subsequent SET_CONFIG and COMMIT_CONFIG operations
|
||||||
|
from other Frontend Client sessions will be rejected and responded
|
||||||
|
with failure.
|
||||||
|
- Requires acquiring write-lock on Candidate (and later Running) databases.
|
||||||
|
|
||||||
|
- Show Transactions
|
||||||
|
|
||||||
|
- Used to execute management operations like GET_CONFIG and GET_DATA
|
||||||
|
that involve only reading the contents of Candidate and Running
|
||||||
|
databases (and sometimes real-time retrieval of operational data
|
||||||
|
from individual component daemons).
|
||||||
|
- Multiple instance of this transaction type can be created and be
|
||||||
|
in-progress at any given time.
|
||||||
|
- However, when a configuration transaction is currently in-progress
|
||||||
|
show transaction can be initiated by any Frontend Client session.
|
||||||
|
- Requires acquiring read-lock on Candidate and/or Running databases.
|
||||||
|
- NOTE: Currently GET_DATA on Operational database is NOT supported. To
|
||||||
|
be added in a future time soon.
|
||||||
|
|
||||||
|
MGMTD Configuration Rollback and Commit History
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
The MGMT daemon maintains upto 10 last configuration commit buffers
|
||||||
|
and can rollback the contents of the Running Database to any of the
|
||||||
|
commit-ids maintained in the commit buffers.
|
||||||
|
|
||||||
|
Once the number of commit buffers exceeds 10, the oldest commit
|
||||||
|
buffer is deleted to make space for the latest commit. Also on
|
||||||
|
rollback to a specific commit-id, buffer of all the later commits
|
||||||
|
are deleted from commit record.
|
||||||
|
|
||||||
|
Configuration rollback is only allowed via VTYSH shell as of today
|
||||||
|
and is not possible through the MGMT Frontend interface.
|
||||||
|
|
||||||
|
MGMT Configuration commands
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. clicmd:: mgmt set-config XPATH VALUE
|
||||||
|
|
||||||
|
This command uses a SET_CONFIG request over the MGMT Frontend Interface
|
||||||
|
for the specified xpath with specific value. This command is used for
|
||||||
|
testing purpose only. But can be used to set configuration data from CLI
|
||||||
|
using SET_CONFIG operations.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt delete-config XPATH
|
||||||
|
|
||||||
|
This command uses a SET_CONFIG request (with delete option) over the
|
||||||
|
MGMT Frontend Interface o delete the YANG data node at the given
|
||||||
|
xpath unless it is a key-leaf node(in which case it is not deleted).
|
||||||
|
|
||||||
|
.. clicmd:: mgmt load-config FILE <merge|replace>
|
||||||
|
|
||||||
|
This command loads configuration in JSON format from the filepath specified,
|
||||||
|
and merges or replaces the Candidate DB as per the option specified.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt save-config <candidate|running> FILE
|
||||||
|
|
||||||
|
This command dumps the DB specified in the db-name into the file in JSON
|
||||||
|
format. This command in not supported for the Operational DB.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt commit abort
|
||||||
|
|
||||||
|
This command will abort any configuration present on the Candidate but not
|
||||||
|
been applied to the Running DB.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt commit apply
|
||||||
|
|
||||||
|
This command commits any uncommited changes in the Candidate DB to the
|
||||||
|
Running DB. It also dumps a copy of the tree in JSON format into
|
||||||
|
frr_startup.json.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt commit check
|
||||||
|
|
||||||
|
This command validates the configuration but does not apply them to the
|
||||||
|
Running DB.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt rollback commit-id WORD
|
||||||
|
|
||||||
|
This command rolls back the Running Database contents to the state
|
||||||
|
corresponding to the commit-id specified.
|
||||||
|
|
||||||
|
.. clicmd:: mgmt rollback last WORD
|
||||||
|
|
||||||
|
This command rolls back the last specified number of recent commits.
|
||||||
|
|
||||||
|
|
||||||
|
MGMT Show commands
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt backend-adapter all
|
||||||
|
|
||||||
|
This command shows the backend adapter information and the clients/daemons
|
||||||
|
connected to the adapters.
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt backend-yang-xpath-registry
|
||||||
|
|
||||||
|
This command shows which Backend adapters are registered for which YANG
|
||||||
|
data subtree(s).
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt frontend-adapter all [detail]
|
||||||
|
|
||||||
|
This command shows the frontend adapter information and the clients
|
||||||
|
connected to the adapters.
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt transaction all
|
||||||
|
|
||||||
|
Shows the list of transaction and bunch of information about the transaction.
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt get-config [candidate|running] XPATH
|
||||||
|
|
||||||
|
This command uses the GET_CONFIG operation over the MGMT Frontend interface and
|
||||||
|
returns the xpaths and values of the nodes of the subtree pointed by the <xpath>.
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt get-data [candidate|operation|running] XPATH
|
||||||
|
|
||||||
|
This command uses the GET_DATA operation over the MGMT Frontend interface and
|
||||||
|
returns the xpaths and values of the nodes of the subtree pointed by the <xpath>.
|
||||||
|
Currenlty supported values for 'candidate' and 'running' only
|
||||||
|
('operational' shall be supported in future soon).
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt database-contents [candidate|operation|running] [xpath WORD] [file WORD] json|xml
|
||||||
|
|
||||||
|
This command dumps the subtree pointed by the xpath in JSON or XML format. If filepath is
|
||||||
|
not present then the tree will be printed on the shell.
|
||||||
|
|
||||||
|
.. clicmd:: show mgmt commit-history
|
||||||
|
|
||||||
|
This command dumps details of upto last 10 commits handled by MGMTd.
|
|
@ -54,6 +54,7 @@ user_RSTFILES = \
|
||||||
doc/user/flowspec.rst \
|
doc/user/flowspec.rst \
|
||||||
doc/user/watchfrr.rst \
|
doc/user/watchfrr.rst \
|
||||||
doc/user/wecmp_linkbw.rst \
|
doc/user/wecmp_linkbw.rst \
|
||||||
|
doc/user/mgmtd.rst \
|
||||||
# end
|
# end
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
|
|
|
@ -25,6 +25,7 @@ RUN source /src/alpine/APKBUILD.in \
|
||||||
gzip \
|
gzip \
|
||||||
py-pip \
|
py-pip \
|
||||||
rtrlib \
|
rtrlib \
|
||||||
|
protobuf-c-dev \
|
||||||
&& pip install pytest
|
&& pip install pytest
|
||||||
RUN mkdir -p /pkgs/apk
|
RUN mkdir -p /pkgs/apk
|
||||||
COPY . /src
|
COPY . /src
|
||||||
|
|
|
@ -5,6 +5,7 @@ RUN yum install -y rpm-build autoconf automake libtool make \
|
||||||
readline-devel texinfo net-snmp-devel groff pkgconfig \
|
readline-devel texinfo net-snmp-devel groff pkgconfig \
|
||||||
json-c-devel pam-devel bison flex pytest c-ares-devel \
|
json-c-devel pam-devel bison flex pytest c-ares-devel \
|
||||||
python3-devel python3-sphinx libcap-devel systemd-devel \
|
python3-devel python3-sphinx libcap-devel systemd-devel \
|
||||||
|
protobuf-c-devel \
|
||||||
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-7-x86_64-Packages/libyang2-2.0.0.10.g2eb910e4-1.el7.x86_64.rpm \
|
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-7-x86_64-Packages/libyang2-2.0.0.10.g2eb910e4-1.el7.x86_64.rpm \
|
||||||
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-7-x86_64-Packages/libyang2-devel-2.0.0.10.g2eb910e4-1.el7.x86_64.rpm \
|
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-7-x86_64-Packages/libyang2-devel-2.0.0.10.g2eb910e4-1.el7.x86_64.rpm \
|
||||||
https://ci1.netdef.org/artifact/RPKI-RTRLIB/shared/build-00146/CentOS-7-x86_64-Packages/librtr-0.8.0-1.el7.x86_64.rpm \
|
https://ci1.netdef.org/artifact/RPKI-RTRLIB/shared/build-00146/CentOS-7-x86_64-Packages/librtr-0.8.0-1.el7.x86_64.rpm \
|
||||||
|
|
|
@ -9,6 +9,7 @@ RUN dnf install --enablerepo=powertools -y rpm-build git autoconf pcre-devel \
|
||||||
automake libtool make readline-devel texinfo net-snmp-devel pkgconfig \
|
automake libtool make readline-devel texinfo net-snmp-devel pkgconfig \
|
||||||
groff pkgconfig json-c-devel pam-devel bison flex python3-pytest \
|
groff pkgconfig json-c-devel pam-devel bison flex python3-pytest \
|
||||||
c-ares-devel python3-devel python3-sphinx libcap-devel platform-python-devel \
|
c-ares-devel python3-devel python3-sphinx libcap-devel platform-python-devel \
|
||||||
|
protobuf-c-devel \
|
||||||
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-8-x86_64-Packages/libyang2-2.0.0.10.g2eb910e4-1.el8.x86_64.rpm \
|
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-8-x86_64-Packages/libyang2-2.0.0.10.g2eb910e4-1.el8.x86_64.rpm \
|
||||||
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-8-x86_64-Packages/libyang2-devel-2.0.0.10.g2eb910e4-1.el8.x86_64.rpm \
|
https://ci1.netdef.org/artifact/LIBYANG-LIBYANGV2/shared/build-2/CentOS-8-x86_64-Packages/libyang2-devel-2.0.0.10.g2eb910e4-1.el8.x86_64.rpm \
|
||||||
https://ci1.netdef.org/artifact/RPKI-RTRLIB/shared/build-00146/CentOS-7-x86_64-Packages/librtr-0.8.0-1.el7.x86_64.rpm \
|
https://ci1.netdef.org/artifact/RPKI-RTRLIB/shared/build-00146/CentOS-7-x86_64-Packages/librtr-0.8.0-1.el7.x86_64.rpm \
|
||||||
|
|
|
@ -7,7 +7,7 @@ ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y libpcre3-dev apt-transport-https ca-certificates curl wget logrotate \
|
apt-get install -y libpcre3-dev apt-transport-https ca-certificates curl wget logrotate \
|
||||||
libc-ares2 libjson-c3 vim procps libreadline7 gnupg2 lsb-release apt-utils \
|
libc-ares2 libjson-c3 vim procps libreadline7 gnupg2 lsb-release apt-utils \
|
||||||
tini && rm -rf /var/lib/apt/lists/*
|
libprotobuf-c-dev protobuf-c-compiler tini && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -
|
RUN curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -
|
||||||
RUN echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable | tee -a /etc/apt/sources.list.d/frr.list
|
RUN echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable | tee -a /etc/apt/sources.list.d/frr.list
|
||||||
|
|
|
@ -9,7 +9,7 @@ RUN apt update && \
|
||||||
pkg-config libpam0g-dev libjson-c-dev bison flex python3-pip \
|
pkg-config libpam0g-dev libjson-c-dev bison flex python3-pip \
|
||||||
libc-ares-dev python3-dev python3-sphinx \
|
libc-ares-dev python3-dev python3-sphinx \
|
||||||
install-info build-essential libsnmp-dev perl libcap-dev \
|
install-info build-essential libsnmp-dev perl libcap-dev \
|
||||||
libelf-dev \
|
libelf-dev libprotobuf-c-dev protobuf-c-compiler \
|
||||||
sudo gdb iputils-ping time \
|
sudo gdb iputils-ping time \
|
||||||
python-pip net-tools iproute2 && \
|
python-pip net-tools iproute2 && \
|
||||||
python3 -m pip install wheel && \
|
python3 -m pip install wheel && \
|
||||||
|
|
|
@ -9,7 +9,7 @@ RUN apt update && \
|
||||||
pkg-config libpam0g-dev libjson-c-dev bison flex python3-pip \
|
pkg-config libpam0g-dev libjson-c-dev bison flex python3-pip \
|
||||||
libc-ares-dev python3-dev python3-sphinx \
|
libc-ares-dev python3-dev python3-sphinx \
|
||||||
install-info build-essential libsnmp-dev perl \
|
install-info build-essential libsnmp-dev perl \
|
||||||
libcap-dev python2 libelf-dev \
|
libcap-dev python2 libelf-dev libprotobuf-c-dev protobuf-c-compiler \
|
||||||
sudo gdb curl iputils-ping time \
|
sudo gdb curl iputils-ping time \
|
||||||
lua5.3 liblua5.3-dev \
|
lua5.3 liblua5.3-dev \
|
||||||
net-tools iproute2 && \
|
net-tools iproute2 && \
|
||||||
|
|
Loading…
Reference in a new issue