Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

YANG data modeling language library

License

NotificationsYou must be signed in to change notification settings

CESNET/libyang

BSD licenseBuildDocsCoverity Scan Build Statuscodecov.ioFuzzing StatusOhloh Project Status

libyang is a YANG data modelling language parser and toolkit written (andproviding API) in C. The library is used e.g. inlibnetconf2,Netopeer2 orsysrepo projects.

Branches

The project uses 2 main branchesmaster anddevel. Other branches should not be cloned. Inmaster there are files of thelast officialrelease. Any latest improvements and changes, which were tested at least briefly are found indevel. On everynewrelease,devel is merged intomaster.

This means that when only stable official releases are to be used, eithermaster can be used or specificreleases downloaded.If all the latest bugfixes should be applied,devel branch is the one to be used. Note that whenevera new issue is createdand it occurs on themaster branch, thefirst response will likely be to usedevel before any further provided support.

Migration from libyang version 1 or older

Look into the documentation and the sectionTransition Manual. That should help with basic migration and theability to compile a project. But to actually make use of the new features, it is required to read throughthe whole documentation and the API.

Provided Features

  • Parsing (and validating) schemas in YANG format.
  • Parsing (and validating) schemas in YIN format.
  • Parsing, validating and printing instance data in XML format.
  • Parsing, validating and printing instance data in JSON format(RFC 7951).
  • Manipulation with the instance data.
  • Support for default values in the instance data (RFC 6243).
  • Support for YANG extensions.
  • Support for YANG Metadata (RFC 7952).
  • Support for YANG Schema Mount (RFC 8528).
  • Support for YANG Structure (RFC 8791).
  • yanglint - feature-rich YANG tool.

Current implementation covers YANG 1.0 (RFC 6020)as well as YANG 1.1 (RFC 7950).

Packages

Binary RPM or DEB packages of the latest release can be built locally usingapkg, look intoREADME inthedistro directory.

Requirements

Unix Build Requirements

  • C compiler
  • cmake >= 2.8.12
  • libpcre2 >= 10.21 (including devel package)

Optional

  • xxhash (for faster hashing)
  • doxygen (for generating documentation)
  • cmocka >= 1.0.1 (fortests)
  • valgrind (for enhanced testing)
  • gcov (for code coverage)
  • lcov (for code coverage)
  • genhtml (for code coverage)

Unix Runtime Requirements

  • libpcre2 >= 10.21

Windows Build Requirements

The Windows versiondoes not support plugins, and theyanglint works in anon-interactive mode only.On Windows, all YANG date-and-time values are first converted to UTC (if TZ offset was specified), and then returned with "unspecified timezone".

Building

$ mkdir build; cd build$ cmake ..$ make# make install

Useful CMake Options

Changing Compiler

SetCC variable:

$ CC=/usr/bin/clang cmake ..

Changing Install Path

To change the prefix where the library, headers and any other files are installed,setCMAKE_INSTALL_PREFIX variable:

$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

Default prefix is/usr/local.

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 optimizationof the code.

TheDebug mode is currently used as the default one. to switch to theRelease mode, enter at the command line:

$ cmake -D CMAKE_BUILD_TYPE:String="Release" ..

Changing Extensions Plugins Directory

As for YANG extensions, libyang allows loading extension plugins. By default, thedirectory to store the plugins is LIBDIR/libyang. To change it, use the followingcmake option with the value specifying the desired directory:

$ cmake -DPLUGINS_DIR:PATH=`pwd`"/src/extensions/" ..

The directory path can be also changed runtime via environment variable, e.g.:

$ LIBYANG_EXTENSIONS_PLUGINS_DIR=`pwd`/my/relative/path yanglint

Note that plugins arenot available on Windows.

Optimizations

Whenever the latest revision of a schema is supposed to be loaded (import without specific revision),it is performed in the standard way, the first time. By default, every other time when the latestrevision of the same schema is needed, the one initially loaded is reused. If you know this can causeproblems meaning the latest available revision of a schema can change during operation, you can forcelibyang to always search for the schema anew by:

$ cmake -DENABLE_LATEST_REVISIONS=OFF ..

CMake Notes

Note that, with CMake, if you want to change the compiler or its options afteryou already ran CMake, you need to clear its cache first - the most simple wayto do it is to remove all content from the 'build' directory.

Usage

All libyang functions are available via the main header:

#include <libyang/libyang.h>

To compile your program with libyang, it is necessary to link it with libyang using thefollowing linker parameters:

-lyang

Note, that it may be necessary to callldconfig(8) after library installation and if thelibrary was installed into a non-standard path, the path to libyang must be specified to thelinker. To help with setting all the compiler's options, there islibyang.pc file forpkg-config(1) available in the source tree. The file is installed with the library.

If you are usingcmake in you project, it is also possible to use the providedFindLibYANG.cmake file to detect presence of the libyang library in the system.

Bindings

There are no bindings for other languages directly in this project but they areavailable separately.

yanglint

libyang project includes a feature-rich tool calledyanglint(1) for validationand conversion of the schemas and YANG modeled data. The source codes arelocated at/tools/lint and can be used to explore how anapplication is supposed to use the libyang library.yanglint(1) binary aswell as its man page are installed together with the library itself.

There is alsoREADME describing some examples ofusingyanglint.

Tests

libyang includes several tests built withcmocka. The testscan be found intests subdirectory and they are designed for checking libraryfunctionality after code changes. Additional regression tests done witha corpus of fuzzing inputs that previously caused crashes are done.Those are available intests/fuzz and are built automatically with thecmocka unit tests.

The tests are by default built in theDebug build mode by running

$ make

In case of theRelease mode, the tests are not built by default (it requiresadditional dependency), but they can be enabled via cmake option:

$ cmake -DENABLE_TESTS=ON ..

Note that if the necessarycmocka headers are not presentin the system include paths, tests are not available despite the build mode orcmake's options.

Tests can be run by the make'stest target:

$ make test

Perf

There is a performance measurement tool included that prints information aboutthe time required to execute common use-cases of working with YANG instance data.It is always compiled if the tests are but needs to be run manually.

Code Coverage

Based on the tests run, it is possible to generate code coverage report. Butit must be enabled and these commands are needed to generate the report:

$ cmake -DENABLE_COVERAGE=ON ..$ make$ make coverage

Fuzzing

Multiple YANG fuzzing targets and fuzzing instructions are available in thetests/fuzz directory.

All of the targets can be fuzzed with LLVM's LibFuzzer and AFL, and new targetscan easily be added.Asciinema examples which describe the fuzzing setup for both AFL (https://asciinema.org/a/311060)and LibFuzzer (https://asciinema.org/a/311035) are available.


[8]ページ先頭

©2009-2026 Movatter.jp