libnetconf – The NETCONF protocol library
libnetconf is a NETCONF library in C intended for building NETCONF clients and servers. It provides basic functions to connect NETCONF client and server to each other via SSH, to send and receive NETCONF messages and to store and work with the configuration data in a datastore.
With the experiences from libnetconf, we have moved our activities to work on next generation of this library based on libyang library. libnetconf2 is mature enough to be used as a replacement of the original libnetconf. Therefore, the libnetconf is no more developed neither maintained. Note, that while libnetconf2 does not include NETCONF datastore implementation, this particular functionality can be implemented via sysrepo project. Similarly, the NETCONF server/client implementation Netopeer is deprecated and replaced by Netopeer2 which can be also used as a reference tool using libnetconf2 functions.
libnetconf was developed by the Tools for Monitoring and Configuration department of CESNET. It implements the NETCONF protocol introduced by IETF - more information about NETCONF protocol can be found at NETCONF WG.
Documentation
libnetconf's API documentation including a description of its use is available here (Python API is available here).
Documentation can be also built from source codes:
$ make doc
Instructions to compile the libnetconf library can be found in INSTALL file.
Informations about differencies to the previous version can be found in [RELEASE_NOTES] (./RELEASE_NOTES) document or compatibility reports.
Features
- NETCONF v1.0 and v1.1 compliant (RFC 6241)
- NETCONF over SSH (RFC 6242) including Chunked Framing Mechanism
- DNSSEC SSH Key Fingerprints (RFC 4255)
- NETCONF over TLS (RFC 5539bis)
- NETCONF Writable-running capability (RFC 6241)
- NETCONF Candidate configuration capability (RFC 6241)
- NETCONF Validate capability ( RFC 6241)
- NETCONF Distinct startup capability ( RFC 6241)
- NETCONF URL capability (RFC 6241
- NETCONF Event Notifications (RFC 5277 and RFC 6470)
- NETCONF With-defaults capability (RFC 6243)
- NETCONF Access Control (RFC 6536)
- NETCONF Call Home (Reverse SSH draft, RFC 5539bis)
- Python bindings
Interoperability
In November 2012, prior to the IETF 85 meeting, libnetconf was one of the NETCONF protocol implementation participating in NETCONF Interoperability Testing.
Papers and Articles
- Building NETCONF-enabled Network Management Systems with libnetconf at the IFIP/IEEE International Symposium on Integrated Network Management 2013 (IM2013),
- Managing SamKnows Probes using NETCONF at the IEEE/IFIP Network Operations and Management Symposium 2014 (NOMS 2014),
Project History
libnetconf comes from the Netopeer project. The first version of Netopeer was implemented in 2007 as a bachelor thesis at Masaryk university (available only czech). Further work on the project was covered by CESNET, z.s.p.o., Czech National Research and Education Network (NREN) operator and in 2009 released as an open source project at GoogleCode.
Further development led to splitting the original Netopeer applications and creating a separate library implementing NETCONF functionality. The libnetconf library was detached as a standalone project in 2012. For some time, the Netopeer server was developed internally at CESNET to control specific CESNET devices.
In 2013, the Netopeer project was restarted. Currently it contains an advanced NETCONF server developed at CESNET with several transAPI modules covering basic configuration of the Linux server. Furthermore, it also contains a command line interface that came from the libnetconf, where it was used as example application. The Netopeer web client is available separately at GitHub.
In June 2015, the project was moved to GitHub because of GoogleCode shutdown.
In 2016 we have moved our activity to libyang and libnetconf2. The tools became mature in 2017 so the original libnetconf is no more maintained from that time.
Release History
- libnetconf-0.10 was released in June 2015
- libnetconf-0.9 was released in November 2014
- libnetconf-0.8 was released in May 2014
- libnetconf-0.7 was released in February 2014
- libnetconf-0.6 was released in September 2013
- libnetconf-0.5 was released in June 2013
- libnetconf-0.4 was released in April 2013
- libnetconf-0.3 was released in December 2012
- libnetconf-0.2 was released in October 2012
- libnetconf-0.1 was released in July 2012
- The libnetconf project was started in April 2012