Libyangは、Cで書かれた(およびAPIを提供する)Yangデータモデリング言語のパーサーとツールキットです。ライブラリは、libnetconf2、netopeer2、またはsysrepoプロジェクトで使用されています。
このプロジェクトでは、2つのメインブランチmasterとdevelを使用しています。他の枝をクローニングしないでください。 masterには、最後の公式リリースのファイルがあります。少なくとも一時的にテストされた最新の改善と変更は、 develで見つかります。新しいリリースごとに、 develはmasterに統合されます。
これは、安定した公式リリースのみを使用する場合、 masterを使用するか、特定のリリースをダウンロードできることを意味します。すべての最新のバグフィックスを適用する必要がある場合、 devel Branchが使用されるものです。新しい問題が作成され、 masterブランチで発生するたびに、最初の応答は、さらに提供されるサポートの前にdevelを使用することである可能性が高いことに注意してください。
ドキュメントとセクションのTransition Manualを調べてください。それは、基本的な移行とプロジェクトをコンパイルする能力に役立つはずです。しかし、実際に新機能を利用するには、ドキュメント全体とAPIを読む必要があります。
現在の実装は、Yang 1.0(RFC 6020)とYang 1.1(RFC 7950)をカバーしています。
最新リリースのバイナリRPMまたはDEBパッケージは、 apkgを使用してローカルに構築でき、 distroディレクトリのREADMEを調べてください。
pthreads-win32direntdlfcn-win32getopt-win32 Windowsバージョンはプラグインをサポートせず、 yanglint非対話モードでのみ動作します。 Windowsでは、すべてのYangの日付と時間の値が最初にUTCに変換され(TZオフセットが指定された場合)、「不特定のタイムゾーン」で返されます。
$ mkdir build; cd build
$ cmake ..
$ make
# make install
CC変数を設定します。
$ CC=/usr/bin/clang cmake ..
ライブラリ、ヘッダー、その他のファイルがインストールされているプレフィックスを変更するには、 CMAKE_INSTALL_PREFIX変数を設定します。
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
デフォルトのプレフィックスは/usr/localです。
2つのビルドモードがあります。
Debugモードは現在、デフォルトのモードとして使用されています。 Releaseモードに切り替えるには、コマンドラインに入力します。
$ cmake -D CMAKE_BUILD_TYPE:String="Release" ..
Yang Extensionsについては、Libyangで拡張プラグインをロードできます。デフォルトでは、プラグインを保存するディレクトリはLibdir/Libyangです。それを変更するには、目的のディレクトリを指定する値を使用して、次のcmakeオプションを使用します。
$ cmake -DPLUGINS_DIR:PATH=`pwd`"/src/extensions/" ..
ディレクトリパスは、環境変数を介してランタイムを変更することもできます。
$ LIBYANG_EXTENSIONS_PLUGINS_DIR=`pwd`/my/relative/path yanglint
プラグインはWindowsで使用できないことに注意してください。
スキーマの最新の改訂がロードされることになっているときはいつでも(特定の改訂なしでインポート)、標準的な方法で初めて実行されます。デフォルトでは、同じスキーマの最新の改訂が必要な場合、最初にロードされたものが再利用されます。これが問題を引き起こす可能性があることがわかっている場合、操作中にスキーマの最新の利用可能な改訂が変更される可能性があることを意味する場合、Libyangは常に次のことでスキーマを検索させることができます。
$ cmake -DENABLE_LATEST_REVISIONS=OFF ..
cmakeを使用すると、既にCmakeを実行した後にコンパイラまたはそのオプションを変更する場合は、最初にキャッシュをクリアする必要があることに注意してください。これを行う最も簡単な方法は、すべてのコンテンツを「ビルド」ディレクトリから削除することです。
すべてのlibyang関数は、メインヘッダーから使用できます。
#include <libyang/libyang.h>
Libyangでプログラムをコンパイルするには、次のリンカーパラメーターを使用してLibyangにリンクする必要があります。
-lyang
ライブラリのインストール後にldconfig(8)に電話する必要がある場合があり、ライブラリが非標準パスにインストールされた場合、リビャンへのパスをリンカーに指定する必要があります。すべてのコンパイラのオプションを設定するために、ソースツリーで利用可能なpkg-config(1)用のlibyang.pcファイルがあります。ファイルはライブラリにインストールされています。
cmake in You Projectを使用している場合は、提供されたFindLibYANG.cmakeファイルを使用して、システム内のLibyangライブラリの存在を検出することもできます。
このプロジェクトには、他の言語のバインディングは直接ありませんが、個別に利用できます。
Libyangプロジェクトには、スキーマとYangモデル化されたデータの検証と変換のためのyanglint(1)と呼ばれる機能が豊富なツールが含まれています。ソースコードは/tools/lintに配置されており、アプリケーションがLibyangライブラリの使用方法を探索するために使用できます。 yanglint(1)バイナリとそのManページは、ライブラリ自体とともにインストールされます。
また、 yanglintを使用する例を説明するReadmeもあります。
Libyangには、Cmockaで構築されたいくつかのテストが含まれています。テストはtestsサブディレクトリに記載されており、コードの変更後にライブラリ機能をチェックするために設計されています。以前にクラッシュを引き起こしたファジング入力のコーパスで行われた追加の回帰テストが行われます。これらはtests/fuzzで利用可能であり、CMOCKAユニットテストで自動的に構築されます。
テストはデフォルトでDebugビルドモードに組み込まれています。
$ make
Releaseモードの場合、テストはデフォルトでビルドされていません(追加の依存関係は必要です)が、Cmakeオプションで有効にすることができます。
$ cmake -DENABLE_TESTS=ON ..
システムに必要なcmockaヘッダーがパスに存在しない場合、ビルドモードまたはcmakeのオプションにもかかわらず、テストは使用できないことに注意してください。
テストは、Makeのtestターゲットによって実行できます。
$ make test
Yang Instanceデータを使用するための一般的なユースケースを実行するために必要な時間に関する情報を印刷するパフォーマンス測定ツールが含まれています。
このテストを有効にするには、オプションを使用して代表的な結果を取得するには、リリースビルドタイプを有効にします。
$ cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_PERF_TESTS=ON ..
そして、その出力が実行されるのを見るとテストを実行するには:
$ make
$ ctest -V -R ly_perf
実行の実行に基づいて、コードカバレッジレポートを生成することができます。ただし、有効にする必要があり、これらのコマンドはレポートを生成するために必要です。
$ cmake -DENABLE_COVERAGE=ON ..
$ make
$ make coverage
複数のヤンファジングターゲットとファジング命令がtests/fuzzディレクトリで利用できます。
すべてのターゲットは、LLVMのLibfuzzerとAFLでファズすることができ、新しいターゲットを簡単に追加できます。 ASCIINEMAの例は、AFL(https://asciinema.org/a/311060)とlibfuzzer(https://asciinema.org/a/311035)の両方のファジングセットアップを説明しています。