Libyang es un análisis de lenguaje de modelado de datos yang escrito (y proporciona API) en C. La biblioteca se usa, por ejemplo, proyectos LibnetConf2, Netopeer2 o Sysrepo.
El proyecto utiliza 2 ramas principales master y devel . Otras ramas no deben ser clonadas. En master hay archivos del último lanzamiento oficial. Cualquier mejoras y cambios más recientes, que se probaron al menos se encuentren brevemente en devel . En cada nuevo lanzamiento , devel se fusiona en master .
Esto significa que cuando solo se van a usar versiones oficiales estables, se puede usar master o las versiones específicas descargadas. Si se aplican todas las últimas correcciones de errores, devel Branch es la que se utilizará. Tenga en cuenta que cada vez que se crea un nuevo problema y se produce en la rama master , la primera respuesta probablemente sea usar devel antes de cualquier soporte adicional proporcionado.
Mire la documentación y el Transition Manual de la sección. Eso debería ayudar con la migración básica y la capacidad de compilar un proyecto. Pero para hacer uso de las nuevas características, se requiere leer toda la documentación y la API.
La implementación actual cubre Yang 1.0 (RFC 6020) y Yang 1.1 (RFC 7950).
Los paquetes binarios de RPM o DEB de la última versión se pueden construir localmente utilizando apkg , busque README en el directorio distro .
pthreads-win32direntdlfcn-win32getopt-win32 La versión de Windows no admite complementos, y el yanglint funciona solo en modo no interactivo. En Windows, todos los valores de fecha y hora de Yang se convierten primero en UTC (si se especificó TZ Offset), y luego se devuelven con "zona horaria no especificada".
$ mkdir build; cd build
$ cmake ..
$ make
# make install
Establecer variable CC :
$ CC=/usr/bin/clang cmake ..
Para cambiar el prefijo donde se instalan la biblioteca, los encabezados y cualquier otro archivo, establezca CMAKE_INSTALL_PREFIX variable:
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
El prefijo predeterminado es /usr/local .
Hay dos modos de construcción:
El modo Debug se usa actualmente como el predeterminado. Para cambiar al modo Release , ingrese en la línea de comando:
$ cmake -D CMAKE_BUILD_TYPE:String="Release" ..
En cuanto a las extensiones de Yang, Libyang permite la carga de complementos de extensión. Por defecto, el directorio para almacenar los complementos es libdir/libyang. Para cambiarlo, use la siguiente opción CMake con el valor que especifica el directorio deseado:
$ cmake -DPLUGINS_DIR:PATH=`pwd`"/src/extensions/" ..
La ruta del directorio también se puede cambiar el tiempo de ejecución a través de la variable de entorno, por ejemplo:
$ LIBYANG_EXTENSIONS_PLUGINS_DIR=`pwd`/my/relative/path yanglint
Tenga en cuenta que los complementos no están disponibles en Windows.
Cada vez que se supone que la última revisión de un esquema se carga (importar sin revisión específica), se realiza de manera estándar, la primera vez. Por defecto, cada vez que se necesita la última revisión del mismo esquema, la inicialmente cargada se reutiliza. Si sabe que esto puede causar problemas, lo que significa que la última revisión disponible de un esquema puede cambiar durante la operación, puede obligar a Libyang a buscar siempre el esquema de nuevo por:
$ cmake -DENABLE_LATEST_REVISIONS=OFF ..
Tenga en cuenta que, con Cmake, si desea cambiar el compilador o sus opciones después de que ya ejecutó CMake, primero debe borrar su caché; la forma más simple de hacerlo es eliminar todo el contenido del directorio 'Build'.
Todas las funciones de Libyang están disponibles a través del encabezado principal:
#include <libyang/libyang.h>
Para compilar su programa con Libyang, es necesario vincularlo con Libyang utilizando los siguientes parámetros de enlazador:
-lyang
Tenga en cuenta que puede ser necesario llamar ldconfig(8) después de la instalación de la biblioteca y si la biblioteca se instaló en una ruta no estándar, la ruta a Libyang debe especificarse en el enlazador. Para ayudar a configurar todas las opciones del compilador, hay un archivo libyang.pc para pkg-config(1) disponible en el árbol de origen. El archivo está instalado con la biblioteca.
Si está utilizando cmake en su proyecto, también es posible utilizar el archivo FindLibYANG.cmake proporcionado para detectar la presencia de la biblioteca Libyang en el sistema.
No hay enlaces para otros idiomas directamente en este proyecto, pero están disponibles por separado.
El proyecto Libyang incluye una herramienta rica en características llamada yanglint(1) para la validación y la conversión de los esquemas y los datos modelados de Yang. Los códigos de origen se encuentran en /tools/lint y se pueden usar para explorar cómo se supone que una aplicación debe usar la biblioteca Libyang. yanglint(1) Binary y su página de Man se instalan junto con la biblioteca misma.
También hay un readme que describe algunos ejemplos de uso yanglint .
Libyang incluye varias pruebas construidas con Cmocka. Las pruebas se pueden encontrar en el subdirectorio tests y están diseñados para verificar la funcionalidad de la biblioteca después de que cambien el código. Las pruebas de regresión adicionales realizadas con un corpus de entradas confusas que previamente causaron bloqueos se realizan. Esos están disponibles en tests/fuzz y se construyen automáticamente con las pruebas unitarias de CMOCKA.
Las pruebas están construidas de forma predeterminada en el modo de construcción Debug ejecutándose
$ make
En el caso del modo Release , las pruebas no se crean de forma predeterminada (requiere dependencia adicional), pero se pueden habilitar a través de la opción CMake:
$ cmake -DENABLE_TESTS=ON ..
Tenga en cuenta que si los encabezados CMOCKA necesarios no están presentes en el sistema, incluyen rutas, las pruebas no están disponibles a pesar del modo de compilación o las opciones de CMake.
Las pruebas se pueden ejecutar mediante el objetivo test de Make's:
$ make test
Se incluye una herramienta de medición de rendimiento que imprime información sobre el tiempo requerido para ejecutar casos de uso comunes de trabajar con datos de instancia Yang.
Para habilitar esta prueba, use una opción y para obtener resultados representativos, habilite el tipo de compilación de lanzamiento:
$ cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_PERF_TESTS=ON ..
y para ejecutar la prueba con la ejecución de su salida:
$ make
$ ctest -V -R ly_perf
Según la ejecución de las pruebas, es posible generar un informe de cobertura de código. Pero debe estar habilitado y estos comandos son necesarios para generar el informe:
$ cmake -DENABLE_COVERAGE=ON ..
$ make
$ make coverage
Múltiples objetivos confusos y instrucciones de fuzzing están disponibles en el directorio tests/fuzz .
Todos los objetivos se pueden borrar con Libfuzzer y AFL de LLVM, y se pueden agregar fácilmente nuevos objetivos. Ejemplos de asciinema que describen la configuración de confuso tanto para AFL (https://asciinema.org/a/311060) como Libfuzzer (https://asciinema.org/a/311035) están disponibles.