Libyang est un analyseur de langage de modélisation de données Yang et une boîte à outils écrite (et fournissant une API) dans C. La bibliothèque est utilisée, par exemple dans les projets LibnetConf2, Netopeer2 ou SysRepo.
Le projet utilise 2 principales branches master and devel . D'autres branches ne doivent pas être clonées. Dans master , il y a des fichiers de la dernière version officielle. Toutes les dernières améliorations et changements, qui ont été testés au moins brièvement, se trouvent dans devel . À chaque nouvelle version , devel est fusionné dans master .
Cela signifie que lorsque seules les versions officielles stables doivent être utilisées, master peut être utilisé ou des versions spécifiques téléchargées. Si tous les derniers bugfix doivent être appliqués, la branche devel est celle à utiliser. Notez que chaque fois qu'un nouveau problème est créé et qu'il se produit sur la branche master , la première réponse sera probablement d'utiliser devel avant tout support supplémentaire.
Examinez la documentation et le Transition Manual de la section. Cela devrait aider à la migration de base et à la capacité de compiler un projet. Mais pour utiliser réellement les nouvelles fonctionnalités, il est nécessaire de lire l'ensemble de la documentation et l'API.
L'implémentation actuelle couvre Yang 1.0 (RFC 6020) ainsi que Yang 1.1 (RFC 7950).
Les packages Binary RPM ou DEB de la dernière version peuvent être construits localement à l'aide apkg , examinez README dans le répertoire distro .
pthreads-win32direntdlfcn-win32getopt-win32 La version Windows ne prend pas en charge les plugins et le yanglint fonctionne uniquement en mode non interactif. Sur Windows, toutes les valeurs de date et de temps Yang sont d'abord converties en UTC (si TZ Offset a été spécifié), puis renvoyés avec "fuseau horaire non spécifié".
$ mkdir build; cd build
$ cmake ..
$ make
# make install
Définir la variable CC :
$ CC=/usr/bin/clang cmake ..
Pour modifier le préfixe où la bibliothèque, les en-têtes et tout autre fichier sont installés, définissez la variable CMAKE_INSTALL_PREFIX :
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
Le préfixe par défaut est /usr/local .
Il y a deux modes de construction:
Le mode Debug est actuellement utilisé comme par défaut. Pour passer au mode Release , entrez sur la ligne de commande:
$ cmake -D CMAKE_BUILD_TYPE:String="Release" ..
Quant aux extensions de Yang, Libyang permet de charger des plugins d'extension. Par défaut, le répertoire pour stocker les plugins est Libdir / Libyang. Pour le modifier, utilisez l'option CMake suivante avec la valeur spécifiant le répertoire souhaité:
$ cmake -DPLUGINS_DIR:PATH=`pwd`"/src/extensions/" ..
Le chemin du répertoire peut également être modifié d'exécution via la variable d'environnement, par exemple:
$ LIBYANG_EXTENSIONS_PLUGINS_DIR=`pwd`/my/relative/path yanglint
Notez que les plugins ne sont pas disponibles sur Windows.
Chaque fois que la dernière révision d'un schéma est censée être chargée (importation sans révision spécifique), elle est effectuée de la manière standard, la première fois. Par défaut, chaque fois que la dernière révision du même schéma est nécessaire, celle initialement chargée est réutilisée. Si vous savez que cela peut causer des problèmes, ce qui signifie que la dernière révision disponible d'un schéma peut changer pendant le fonctionnement, vous pouvez forcer Libyang à toujours rechercher le schéma à nouveau:
$ cmake -DENABLE_LATEST_REVISIONS=OFF ..
Notez qu'avec Cmake, si vous souhaitez modifier le compilateur ou ses options après avoir déjà exécuté Cmake, vous devez d'abord effacer son cache - le moyen le plus simple de le faire est de supprimer tout le contenu du répertoire 'build'.
Toutes les fonctions Libyang sont disponibles via l'en-tête principal:
#include <libyang/libyang.h>
Pour compiler votre programme avec Libyang, il est nécessaire de le relier à Libyang en utilisant les paramètres de liaison suivants:
-lyang
Remarque qu'il peut être nécessaire d'appeler ldconfig(8) après l'installation de la bibliothèque et si la bibliothèque a été installée dans un chemin non standard, le chemin vers Libyang doit être spécifié pour le lieur. Pour aider à définir toutes les options du compilateur, il existe un fichier libyang.pc pour pkg-config(1) disponible dans l'arborescence source. Le fichier est installé avec la bibliothèque.
Si vous utilisez cmake dans votre projet, il est également possible d'utiliser le fichier FindLibYANG.cmake fourni pour détecter la présence de la bibliothèque Libyang dans le système.
Il n'y a pas de liaisons pour d'autres langues directement dans ce projet, mais elles sont disponibles séparément.
Le projet Libyang comprend un outil riche en fonctionnalités appelé yanglint(1) pour la validation et la conversion des schémas et des données modélisées par Yang. Les codes source sont situés sur /tools/lint et peuvent être utilisés pour explorer comment une application est censée utiliser la bibliothèque Libyang. yanglint(1) binaire ainsi que sa page Man sont installés avec la bibliothèque elle-même.
Il y a aussi ReadMe décrivant quelques exemples d'utilisation de yanglint .
Libyang comprend plusieurs tests construits avec CMocka. Les tests peuvent être trouvés dans le sous-répertoire tests et ils sont conçus pour vérifier les fonctionnalités de la bibliothèque après les modifications du code. Des tests de régression supplémentaires effectués avec un corpus d'entrées de fuzzing qui provoquaient auparavant des accidents sont effectués. Ceux-ci sont disponibles dans tests/fuzz et sont construits automatiquement avec les tests de l'unité CMocka.
Les tests sont par défaut intégrés dans le mode de construction Debug en exécutant
$ make
En cas de mode Release , les tests ne sont pas construits par défaut (il nécessite une dépendance supplémentaire), mais ils peuvent être activés via l'option CMake:
$ cmake -DENABLE_TESTS=ON ..
Notez que si les en-têtes CMocka nécessaires ne sont pas présents dans le système incluent les chemins, les tests ne sont pas disponibles malgré le mode de construction ou les options de CMake.
Les tests peuvent être effectués par la cible test de Make:
$ make test
Il existe un outil de mesure des performances inclus qui imprime des informations sur le temps nécessaire pour exécuter des cas d'utilisation courants pour travailler avec les données d'instance Yang.
Pour activer ce test, utilisez une option et pour obtenir des résultats représentatifs, activez le type de construction de libération:
$ cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_PERF_TESTS=ON ..
Et pour exécuter le test en voyant sa sortie s'exécuter:
$ make
$ ctest -V -R ly_perf
En fonction des tests exécutés, il est possible de générer un rapport de couverture de code. Mais il doit être activé et ces commandes sont nécessaires pour générer le rapport:
$ cmake -DENABLE_COVERAGE=ON ..
$ make
$ make coverage
Plusieurs cibles de fuzzing Yang et des instructions de fuzzing sont disponibles dans le répertoire tests/fuzz .
Toutes les cibles peuvent être floues avec LibFuzzer et AFL de LLVM, et de nouvelles cibles peuvent facilement être ajoutées. Des exemples d'asciinema qui décrivent la configuration de fuzzing pour AFL (https://asciinema.org/a/311060) et libfuzzer (https://asciinema.org/a/311035) sont disponibles.