# libnetconf2 – The NETCONF protocol library
[![BSD license](https://img.shields.io/badge/License-BSD-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
[![Build](https://github.com/CESNET/libnetconf2/workflows/libnetconf2%20CI/badge.svg)](https://github.com/CESNET/libnetconf2/actions?query=workflow%3A%22libnetconf2+CI%22)
[![Docs](https://img.shields.io/badge/docs-link-blue)](https://netopeer.liberouter.org/doc/libnetconf2/)
[![Coverity](https://scan.coverity.com/projects/7642/badge.svg)](https://scan.coverity.com/projects/7642)
[![Codecov](https://codecov.io/gh/CESNET/libnetconf2/branch/master/graph/badge.svg?token=HpKeW36N9D)](https://codecov.io/gh/CESNET/libnetconf2)
**libnetconf2** is a NETCONF library in C intended for building NETCONF clients
and servers. NETCONF is the [NETwork CONFiguration protocol](http://trac.tools.ietf.org/wg/netconf/trac/wiki)
introduced by IETF.
**libnetconf2** is a NETCONF library in C handling NETCONF authentication and all NETCONF RPC communication both server
and client-side. Note that NETCONF datastore implementation is not a part of this library. The library supports both
NETCONF 1.0 ([RFC 4741](https://tools.ietf.org/html/rfc4741)) as well as NETCONF 1.1
([RFC 6241](https://tools.ietf.org/html/rfc6241)). The main features include:
* NETCONF over SSH ([RFC 4742](https://tools.ietf.org/html/rfc4742), [RFC 6242](https://tools.ietf.org/html/rfc6242)),
using [libssh](https://www.libssh.org/).
* NETCONF over TLS ([RFC 7589](https://tools.ietf.org/html/rfc7589)), using [OpenSSL](https://www.openssl.org/).
* DNSSEC SSH Key Fingerprints ([RFC 4255](https://tools.ietf.org/html/rfc4255))
* NETCONF over pre-established transport sessions (using this mechanism the communication can be tunneled through
sshd(8), for instance).
* NETCONF Call Home ([RFC 8071](https://tools.ietf.org/html/rfc8071)).
* NETCONF Event Notifications ([RFC 5277](https://tools.ietf.org/html/rfc5277)),
**libnetconf2** is maintained and further developed by the [Tools for
Monitoring and Configuration](https://www.liberouter.org/) department of
[CESNET](http://www.ces.net/). Any testing or improving/fixing the library
is welcome. Please inform us about your experiences with using **libnetconf2**
via the [issue tracker](https://github.com/CESNET/libnetconf2/issues).
Besides the [**libyang**](https://github.com/CESNET/libyang), **libnetconf2** is
another basic building block for the [**Netopeer2** toolset](https://github.com/CESNET/Netopeer2).
For a reference implementation of NETCONF client and server, check the
**Netopeer2** project.
## Branches
The project uses 2 main branches `master` and `devel`. Other branches should not be cloned. In `master` there are files of the
last official *release*. Any latest improvements and changes, which were tested at least briefly are found in `devel`. On every
new *release*, `devel` is merged into `master`.
This means that when only stable official releases are to be used, either `master` can be used or specific *releases* downloaded.
If all the latest bugfixes should be applied, `devel` branch is the one to be used. Note that whenever **a new issue is created**
and it occurs on the `master` branch, the **first response will likely be** to use `devel` before any further provided support.
## libnetconf vs libnetconf2
**libnetconf2** was developed with experiences gained from the development
of the [**libnetconf**](https://github.com/CESNET/libnetconf) library, which
is now obsolete and should not be used.
## Packages
Binary RPM or DEB packages of the latest release can be built locally using `apkg`, look into `README` in
the `distro` directory.
## Requirements
* C compiler (gcc >= 4.8.4, clang >= 3.0, ...)
* cmake >= 2.8.12
* [libyang](https://github.com/CESNET/libyang)
* libssh >= 0.7.1 (for SSH support)
* recommended >= 0.9.0
* OpenSSL (for TLS support)
#### Optional
* libpam (for PAM-based SSH `keyboard-interactive` authentication method)
* libval (only for DNSSEC SSHFP retrieval)
* [DNSSEC-Tools/dnssec-tools/validator](https://github.com/DNSSEC-Tools/DNSSEC-Tools/tree/master/dnssec-tools/validator)
part of the DNSSEC-Tools suite
* doxygen (for generating documentation)
* cmocka >= 1.0.1 (for tests only, see [Tests](#Tests))
* valgrind (for enhanced testing)
* gcov (for code coverage)
* lcov (for code coverage)
* genhtml (for code coverage)
## Building
```
$ mkdir build; cd build
$ cmake ..
$ make
# make install
```
The library documentation can be generated directly from the source codes using
Doxygen tool:
```
$ make doc
```
## Build Options
There are various options to change result of building.
### Changing Compiler
Set `CC` environment variable:
```
$ CC=/usr/bin/clang cmake ..
```
### Installation Prefix
By default, the library is installed with the `/usr/local` prefix, to change
it, use the following option:
```
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
```
### Transport Protocol Support
The NETCONF protocol specification allows to use the protocol on top of
several transport protocols. **libnetconf2** provides support for SSH and
TLS transport. By default, both SSH and TLS transport is enabled. Disabling
and enabling both the transport protocols can be made
in the same way. The following command has actually the same effect as
specifying no option since it specifies the default settings.
```
$ cmake -DENABLE_TLS=ON -DENABLE_SSH=ON ..
```
### DNSSEC SSHFP Retrieval
In SSH connections, if the remote NETCONF server supports it and it is
enabled, it is possible to safely retrieve server host key fingerprints
using DNSSEC and automatically consider them to be trusted without any
interaction. Enable it with the following command.
```
$ cmake -DENABLE_DNSSEC=ON ..
```
### Build Modes
There are two build modes:
* Release.
This generates library for the production use without any debug information.
* Debug.
This generates library with the debug information and disables optimization
of the code.
The `Debug` mode is currently used as the default one. to switch to the
`Release` mode, enter at the command line:
```
$ cmake -D CMAKE_BUILD_TYPE:String="Release" ..
```
### Inactive Read Timeout
It is possible to adjust inactive read timeout. It is used when a new message is
being read and no new data had arrived for this amount of seconds. 20 is the default value.
```
$ cmake -D READ_INACTIVE_TIMEOUT:String="20" ..
```
### Active Read Timeout
Active read timeout is used to limit the maximum number of seconds a message is given
to arrive in its entirety once a beginning is read. The default is 300 (5 minutes).
```
$ cmake -D READ_ACTIVE_TIMEOUT:String="300" ..
```
### PSPoll Thread Count
This value limits the maximum number of threads that can concurrently access
(wait for access) a single pspoll structure. To simplify, how many threads could
simultaneously call a function whose parameter is one and the same pspoll structure.
If using **netopeer2-server**, it will warn that this value needs to be adjusted if
too small.
```
$ cmake -D MAX_PSPOLL_THREAD_COUNT:String="6" ..
```
### Code Coverage
Based on the tests run, it is possible to generate code coverage report. But
it must be enabled and these commands are needed to generate the report:
```
$ cmake -DENABLE_COVERAGE=ON ..
$ make
$ make coverage
```
Note that `gcc` compiler is required for this option.
### CMake Notes
Note that, with CMake, if you want to change the compiler or its options after
you already ran CMake, you need to clear its cache first - the most simple way
to do it is to remove all content from the 'build' directory.
## Usage
All public functions are available via 2 headers:
```
#include <nc_server.h>
#include <nc_client.h>
```
You need to include either one if implementing a NETCONF server or a NETCONF client,
respectively.
To compile your program with libnetconf2, it is necessary to link it with it using the
following linker parameters:
```
-lnetconf2
```
## Examples
See
没有合适的资源?快使用搜索试试~ 我知道了~
C NETCONF library.zip
共128个文件
c:27个
h:15个
cmake:13个
需积分: 5 0 下载量 198 浏览量
2023-12-31
11:11:14
上传
评论
收藏 367KB ZIP 举报
温馨提示
C NETCONF library
资源推荐
资源详情
资源评论
收起资源包目录
C NETCONF library.zip (128个子文件)
042686bb.0 12B
5412ca73.0 10B
62436b04.0 10B
session_server.c 105KB
session_client.c 104KB
session_server_tls.c 59KB
session_server_ssh.c 58KB
session_client_ssh.c 54KB
session.c 48KB
io.c 34KB
messages_client.c 33KB
test_client_messages.c 25KB
session_client_tls.c 24KB
test_client_ssh.c 23KB
test_server_thread.c 23KB
messages_server.c 22KB
test_fd_comm.c 15KB
server.c 14KB
pam_netconf.c 8KB
client.c 7KB
compat.c 6KB
test_thread_messages.c 5KB
test_client_tls.c 5KB
test_pam.c 5KB
test_io.c 4KB
log.c 3KB
test_client.c 3KB
test_client_thread.c 2KB
test_init_destroy_client.c 1KB
test_init_destroy_server.c 1KB
uncrustify.cfg 141KB
changelog 162B
FindLibSSH.cmake 5KB
GenCoverage.cmake 4KB
FindLibNETCONF2.cmake 4KB
FindLibYANG.cmake 3KB
FindLibVAL.cmake 3KB
FindLibPAM.cmake 3KB
ABICheck.cmake 3KB
UseCompat.cmake 3KB
FindCMocka.cmake 1KB
SourceFormat.cmake 1KB
GenDoc.cmake 1006B
FindUncrustify.cmake 848B
uninstall.cmake 735B
compat 3B
gbp.conf 77B
control 1KB
control 26B
copyright 2KB
server.crt 2KB
client.crt 1KB
cesnet-style.css 2KB
format 12B
.gitignore 5B
ietf_netconf@2013-09-29_yang.h 163KB
ietf_netconf_monitoring@2010-10-04_yang.h 105KB
session_server.h 38KB
session_p.h 30KB
session_client.h 26KB
libnetconf.h 25KB
messages_client.h 23KB
session_server_ch.h 18KB
session_client_ch.h 14KB
messages_server.h 11KB
messages_p.h 7KB
session.h 7KB
netconf.h 5KB
log.h 3KB
log_p.h 2KB
Doxyfile.in 104KB
compat.h.in 6KB
config.h.in 2KB
example.h.in 1KB
nc_version.h.in 932B
nc_server.h.in 796B
nc_client.h.in 796B
config.h.in 636B
libnetconf2.pc.in 343B
libnetconf2-dev.install 159B
libnetconf2-3.install 62B
client.key 3KB
server.key 3KB
serverca.key 2KB
key_ecdsa 227B
key_rsa 2KB
LICENSE 1KB
README.md 9KB
README.md 6KB
CODINGSTYLE.md 5KB
FAQ.md 4KB
serverca.pem 1KB
key_rsa.pub 395B
key_ecdsa.pub 175B
rpc-lock 185B
rpc-lock 130B
rules 226B
check_includes.sh 1KB
make-archive.sh 478B
upstream-version.sh 263B
共 128 条
- 1
- 2
资源评论
暮苍梧~
- 粉丝: 41
- 资源: 258
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功