YANG and NETCONF

This activity aims at development of various YANG and NETCONF tools allowing us to have full remote control on devices and software we develop. We develop the complete stack of the necessary tools from YANG parser and NETCONF transport library to a modular NETCONF server and various NETCONF clients.

libyang

liyang is YANG parser implemented and provided as a library with API in C language. It allows you to load and validate both, the YANG schemas and data. The schemas are supported in YANG as well in YIN format and data are supported in XML and JSON representation. The source codes are available from GitHub.

libnetconf

libnetconf is supposed to serve as a generic NETCONF library in C intended for building NETCONF clients and servers. It provides all necessary functions implementing a communication between a client and a server via NETCONF protocol.

The original libnetconf is based on libxml2 and its source codes are available from GitHub. Currently, we are working on development of libnetconf2, based on libyang library instead of libxml2. It rapidly improves perfomance characteristics – increases the processing speed and decreases memory consumption. libnetconf2 is also available at GitHub.

Netopeer Server

The goal of a Netopeer server is to provide a generic NETCONF framework that will allow network device developers to apply configuration changes to their devices without any knowledge of the NETCONF protocol.

The architecture of a Netopeer server consists of a core, which is connected with specific device control modules. The core deals with general NETCONF functionality such as NETCONF session management or the control of NETCONF startup and the candidate datastores. Device control modules are dynamically loadable modules used to control a specific device. These modules are responsible only for applying required configuration changes on the managed devices. Netopeer server is available from its GitHub page.

Netopeer Client

The goal of a Netopeer client is to create an Apache web server module providing NETCONF functionality. The other part of Netopeer client will be able to generate a simple web user interface according to the device configuration data model. For NETCONF controlled devices the configuration data models are provided in the YANG format, which is developed by IETF’s NETMOD working group. Following such a configuration data model, the user prepares any configuration changes of the specific device and will then be able to pass their request from the web interface via a Netopeer Apache module to a NETCONF server and the operated device.

Netopeer2

Based on libyang and libnetconf2, there is also the second generation of the Netopeer project. In contrast to the first generation, it uses sysrepo as a standalone datastore for storing configuration data. The mechanism of device specific modules was preserved, but the API was changed and moved directly into the sysrepo datastore.

Netopeer2GUI

As a last piece of puzzle we develop web-based NETCONF user interface to manage NETCONF devices. Netopeer2GUI is written as Angular5 frontend with Flask (Python3) backend providing connectivity to NETCONF devices. Besides manipulation with the device configuration data, the application is supposed also to provide NETCONF Notifications, allow user to browse through the YANG schemas or serve as a server for NETCONF Call Home. Another interesting feature is an API to create schema-specific modules to provide specialized interface to perform specific configuration changes in more user friendly way. Netopeer2GUI is available from its GitHub page.

More Information and Links