Yet Another Next Generation [1] [2] ( YANG , / jæŋ /, que rima con "hang") [3] es un lenguaje de modelado de datos para la definición de datos enviados a través de protocolos de administración de red como NETCONF [4] y RESTCONF. [5] El lenguaje de modelado de datos YANG lo mantiene el grupo de trabajo NETMOD [6] en el Grupo de trabajo de ingeniería de Internet (IETF) y se publicó inicialmente como RFC 6020 en octubre de 2010, con una actualización en agosto de 2016 ( RFC 7950 ). El lenguaje de modelado de datos se puede utilizar para modelar tanto los datos de configuración como los datos de estado de los elementos de la red. Además, YANG se puede utilizar para definir el formato de las notificaciones de eventos emitidas por los elementos de la red y permite a los modeladores de datos definir la firma de las llamadas a procedimientos remotos que se pueden invocar en los elementos de la red a través del protocolo NETCONF. El lenguaje, que es independiente del protocolo, se puede convertir a cualquier formato de codificación, por ejemplo, XML o JSON , que admita el protocolo de configuración de red.
YANG es un lenguaje modular que representa estructuras de datos en un formato de árbol XML . El lenguaje de modelado de datos viene con varios tipos de datos integrados. Se pueden derivar tipos de datos adicionales específicos de la aplicación a partir de los tipos de datos integrados. Las estructuras de datos reutilizables más complejas se pueden representar como agrupaciones. Los modelos de datos YANG pueden usar expresiones XPATH para definir restricciones en los elementos de un modelo de datos YANG.
Historia
Muchos protocolos de administración de redes tienen lenguajes de modelado de datos asociados. El primer estándar de Internet ampliamente implementado para la administración de redes fue el Protocolo simple de administración de redes (SNMP). El lenguaje de modelado de datos asociado con SNMP se denominó Estructura de información de gestión (SMI). El lenguaje SMI en sí se basó en la versión de 1988 de Abstract Syntax Notation One (ASN.1). La versión actual del lenguaje SMI, SMIv2 definido en RFC 2578 , 2579 y 2580 , se ha convertido en un subconjunto extendido de ASN.1.
A fines de la década de 1990, se inició un proyecto para crear un reemplazo para SMIv2, que se llamó SMIng. Una motivación fue desacoplar SMIng del protocolo de administración SNMP y darle a SMIng una estructura sintáctica que sea fácil de analizar para programas de computadora y fácil de aprender para personas familiarizadas con lenguajes de programación que usan una notación similar a C. Si bien el proyecto SMIng no tuvo éxito en el IETF, las especificaciones SMIng se publicaron como documentos experimentales en mayo de 2004 ( RFC 3780 , 3781 ).
Poco después del desarrollo del protocolo NETCONF en el IETF, quedó claro que se necesitaba un lenguaje de modelado de datos para definir modelos de datos manipulados por el protocolo NETCONF. Un equipo de diseño creó una propuesta que se convirtió en la base del lenguaje YANG. [7] La estructura sintáctica y el sistema de tipos base fueron esencialmente tomados de SMIng. Sin embargo, sobre la base de las lecciones aprendidas del proyecto SMIng, no se intentó hacer que el protocolo YANG fuera neutral. En cambio, YANG se relaciona con conceptos del protocolo NETCONF, como la suposición de que las instancias del modelo de datos se pueden serializar en XML . La estandarización de YANG comenzó con la formación del grupo de trabajo NETMOD en abril de 2008. La especificación YANG 1.0 se publicó como RFC 6020 en octubre de 2010. Recientemente, el grupo de trabajo NETMOD ha estado trabajando en YANG 1.1, que se publicó en agosto de 2016 en RFC 7950 . [2]
Ejemplo
El siguiente módulo YANG example-sports
muestra un modelo de datos para deportes de equipo. El módulo declara un espacio de nombres y un prefijo e importa el módulo de biblioteca de tipos ietf-yang-types
antes de definir el tipo season
. Luego define un contenedor sports
que incluye una lista de person
correos electrónicos y una lista de team
correos electrónicos. Un equipo tiene una lista de jugadores que hacen referencia a personas a través del leafref
tipo y su path
restricción.
module example-sports { espacio de nombres "http://example.com/example-sports" ; prefijo deportivo ; import ietf-yang-types { prefijo yang ; } typedef season { tipo cadena ; descripción "El nombre de una temporada deportiva, incluido el tipo y el año, por ejemplo, 'Champions League 2014/2015'". ; } deportes de contenedor { config true ; listar persona { nombre de la clave ; nombre de la hoja { tipo cadena ; } hoja de cumpleaños { tipo yang : fecha y hora ; obligatorio verdadero ; } } listar equipo { nombre de la clave ; nombre de la hoja { tipo cadena ; } list player { clave "nombre de la temporada" ; número único ; nombre de la hoja { type leafref { ruta "/ deportes / persona / nombre" ; } } temporada de hojas { tipo temporada ; } número de hoja { tipo uint16 ; obligatorio verdadero ; } puntuaciones de hojas { tipo uint16 ; predeterminado 0 ; } } } }}
Codificación XML
El bloque de código siguiente muestra la representación XML de una instanciación del example-sports
modelo de datos.
xmlns = "urn: ietf: params: xml: ns: netconf: base: 1.0" > xmlns = "http://example.com/example-sports" > Lionel Andrés Messi 1987-06-24T00: 00: 00-00: 00 Cristiano Ronaldo ños> 1985-02-05T00: 00: 00-00: 00 FC Barcelona < / name> Lionel Andrés Messi Champions League 2014/2015 10 43 Real Madrid Cristiano Ronaldo Champions League 2014/2015 7 48
Codificación JSON
El siguiente bloque de código muestra la representación JSON de una instanciación del example-sports
modelo de datos.
{ "example-sports: sports" : { "person" : [ { "name" : "Lionel Andrés Messi" , "birthday" : "1987-06-24T00: 00: 00-00: 00" }, { "name " : " Cristiano Ronaldo " , " cumpleaños " : " 1985-02-05T00: 00: 00-00: 00 " } ], " equipo " : [ { " nombre " : " FC Barcelona " , " jugador " : [ { "nombre" : "Lionel Andrés Messi" , "temporada" : "Liga de Campeones 2014/2015" , "número" : 10 , "puntuaciones" : 43 } ] }, { "nombre" : "Real Madrid" , "jugador" : [ { "name" : "Cristiano Ronaldo" , "temporada" : "Champions League 2014/2015" , "número" : 7 , "puntuaciones" : 48 } ] } ] } }
Documentación
Especificaciones de idioma y documentos arquitectónicos
Las siguientes solicitudes de comentarios (RFC) definen el lenguaje YANG y algunas extensiones básicas:
- RFC 6020 : YANG - Un lenguaje de modelado de datos para el protocolo de configuración de red (NETCONF)
- RFC 6110 : Asignación de YANG a lenguajes de definición de esquemas de documentos y validación de contenido NETCONF
- RFC 7950 : El lenguaje de modelado de datos YANG 1.1 [no reemplaza RFC 6020 ]
- RFC 7951 : Codificación JSON de datos modelados con YANG
- RFC 7952 : Definición y uso de metadatos con YANG
- RFC 8342 : Arquitectura de almacén de datos de administración de red (NMDA)
- RFC 8525 : Biblioteca YANG [obsoletos RFC 7895 ]
- RFC 8528 : Montaje de esquema YANG
- RFC 8791 : Extensiones de estructura de datos YANG
Pautas y documentación de respaldo
Las siguientes solicitudes de comentarios proporcionan pautas y documentación de respaldo:
- RFC 8407 : Directrices para autores y revisores de documentos que contienen modelos de datos YANG [obsoletes RFC 6087 ]
- RFC 8199 : Clasificación del módulo YANG
- RFC 8340 : Diagramas de árbol YANG
- RFC 8969 : Marco para automatizar la gestión de redes y servicios con YANG
Uso de IETF
Especificaciones del protocolo de seguimiento de estándares
Las siguientes solicitudes de comentarios definen protocolos de seguimiento de estándares que se definen (parcialmente) utilizando módulos YANG:
- RFC 6241 : Protocolo de configuración de red (NETCONF)
- RFC 6243 : Capacidad con valores predeterminados para NETCONF
- RFC 6470 : Notificaciones base del Protocolo de configuración de red (NETCONF)
- RFC 8040 : Protocolo RESTCONF
- RFC 8071 : NETCONF Call Home y RESTCONF Call Home
- RFC 8072 : Tipo de medio de parche YANG
- RFC 8341 : Modelo de control de acceso a la configuración de red [obsoletos RFC 6536 ]
- RFC 8526 : Extensiones NETCONF para admitir la arquitectura del almacén de datos de administración de red
- RFC 8527 : Extensiones RESTCONF para admitir la arquitectura del almacén de datos de administración de red
- RFC 8572 : Aprovisionamiento seguro Zero Touch (SZTP)
- RFC 8639 : Suscripción a notificaciones YANG
- RFC 8640 : suscripción dinámica a eventos YANG y almacenes de datos a través de NETCONF
- RFC 8641 : Suscripción a notificaciones YANG para actualizaciones del almacén de datos
- RFC 8650 : suscripción dinámica a eventos YANG y almacenes de datos a través de RESTCONF
Modelos de datos de seguimiento de estándares
La siguiente solicitud de comentarios define los modelos de datos YANG de seguimiento de estándares:
- RFC 6022 : Módulo YANG para monitoreo NETCONF
- RFC 6991 : Tipos de datos YANG comunes [obsoletos RFC 6021 ]
- RFC 6643 : Traducción de la estructura de la información de gestión Versión 2 (SMIv2) Módulos MIB a módulos YANG
- RFC 6728 : Modelo de datos de configuración para los protocolos de exportación de información de flujo de IP (IPFIX) y muestreo de paquetes (PSAMP)
- RFC 7224 : Módulo YANG de tipo de interfaz IANA
- RFC 7317 : Un modelo de datos YANG para la gestión del sistema
- RFC 7407 : Un modelo de datos YANG para la configuración SNMP
- RFC 8177 : Modelo de datos YANG para llaveros
- RFC 8194 : Un modelo de datos YANG para agentes de medición LMAP
- RFC 8294 : Tipos de datos YANG comunes para el área de enrutamiento
- RFC 8299 : Modelo de datos YANG para la prestación de servicios L3VPN
- RFC 8343 : Un modelo de datos YANG para la gestión de interfaces [obsoletes RFC 7223 ]
- RFC 8344 : A YANG Data Model for IP Management [obsoletes RFC 7277 ]
- RFC 8345 : Un modelo de datos YANG para topologías de red
- RFC 8346 : Un modelo de datos YANG para topologías de capa 3
- RFC 8347 : Un modelo de datos YANG para el protocolo de redundancia de enrutador virtual (VRRP)
- RFC 8348 : Un modelo de datos YANG para la gestión de hardware
- RFC 8349 : Un modelo de datos YANG para la gestión de enrutamiento (versión NMDA) [obsoletes RFC 8022 ]
- RFC 8366 : Un artefacto de cupón para protocolos de arranque
- RFC 8431 : Un modelo de datos YANG para la base de información de enrutamiento (RIB)
- RFC 8466 : Un modelo de datos YANG para la prestación de servicios de red privada virtual de capa 2 (L2VPN)
- RFC 8512 : un módulo YANG para traducción de direcciones de red (NAT) y traducción de prefijos de red (NPT)
- RFC 8513 : Un modelo de datos YANG para Dual-Stack Lite (DS-Lite)
- RFC 8519 : Modelo de datos YANG para listas de control de acceso a la red (ACL)
- RFC 8520 : Especificación de descripción de uso del fabricante
- RFC 8529 : Modelo de datos YANG para instancias de red
- RFC 8530 : Modelo YANG para elementos de red lógica
- RFC 8531 : Modelo de datos genérico YANG para protocolos de operaciones, administración y mantenimiento orientados a la conexión (OAM)
- RFC 8532 : Modelo de datos genérico YANG para la gestión de protocolos de operaciones, administración y mantenimiento (OAM) que utilizan comunicaciones sin conexión
- RFC 8533 : Un modelo de datos YANG para métodos de recuperación para la gestión de protocolos de operaciones, administración y mantenimiento (OAM) que utilizan comunicaciones sin conexión
- RFC 8542 : Un modelo de datos YANG para topología de tejido en redes de centros de datos
- RFC 8561 : Un modelo de datos YANG para enlace de radio por microondas
- RFC 8575 : Modelo de datos YANG para el Protocolo de tiempo de precisión (PTP)
- RFC 8632 : Un modelo de datos YANG para la gestión de alarmas
- RFC 8652 : Un modelo de datos YANG para el protocolo de administración de grupos de Internet (IGMP) y el descubrimiento de escucha de multidifusión (MLD)
- RFC 8675 : Un modelo de datos YANG para tipos de interfaz de túnel
- RFC 8676 : Módulos YANG para softwires de dirección IPv4-in-IPv6 más puerto (A + P)
- RFC 8695 : Un modelo de datos YANG para el protocolo de información de enrutamiento (RIP)
- RFC 8776 : Tipos de datos YANG comunes para ingeniería de tráfico
- RFC 8795 : Modelo de datos YANG para topologías de ingeniería de tráfico (TE)
- RFC 8808 : Un modelo de datos YANG para la configuración predeterminada de fábrica
- RFC 8916 : Un modelo de datos YANG para el protocolo de descubrimiento de origen de multidifusión (MSDP)
- RFC 8944 : Un modelo de datos YANG para topologías de red de capa 2
- RFC 8960 : Un modelo de datos YANG para base MPLS
- RFC 8819 : Etiquetas de módulo YANG
- RFC 9020 : Modelo de datos YANG para enrutamiento de segmentos
- RFC 9061 : Un modelo de datos YANG para protección de flujo IPsec basado en redes definidas por software (SDN)
Especificaciones experimentales
Las siguientes solicitudes de comentarios son especificaciones experimentales que utilizan o amplían YANG:
- RFC 6095 : Ampliación de YANG con abstracciones de lenguaje
- RFC 7758 : Capacidad de tiempo en NETCONF
Implementaciones
Implementaciones de código abierto (ordenadas por nombre):
- clixon es una cadena de herramientas basada en YANG que incluye interfaces CLI interactivas, NETCONF y RESTCONF escritas en C.
- goyang es un analizador y compilador YANG escrito en Go para producir objetos de lenguaje Go
- jnc es un compilador de API de YANG a Java basado en pyang
- libyang es un analizador y kit de herramientas YANG escrito en C y que proporciona API en C
- pyang es un validador y convertidor YANG extensible escrito en Python
- pyangbind es un generador de enlaces Python basado en pyang
- Sysrepo es un almacén de datos operativo y de configuración basado en YANG para aplicaciones Unix / Linux.
- yangbuilder es un constructor para YANG, implementado en Apache Groovy (genera modelos de datos yang con Apache Groovy , mantiene modelos similares con una base de código fuente)
- yang-ide es un complemento de Eclipse para editar y visualizar modelos YANG
- yang-js es un analizador y evaluador YANG escrito en CoffeeScript / JavaScript para Node.js y el navegador web
- yang-express es un generador de framework web Express.js basado en yang-js
- yang-swagger es un generador de especificaciones Swagger / OpenAPI basado en yang-js
- yangson es una biblioteca de Python 3 para trabajar con configuración codificada JSON y datos de estado modelados utilizando el lenguaje de modelado de datos YANG.
- YANG Tools es un conjunto de herramientas OpenDaylight escrito en Java
- Yang-Explorer : es un navegador Yang basado en pyang y una aplicación RPC Builder
- ydk-gen es un compilador de YANG a API que genera API en varios idiomas (por ejemplo, Python, C ++)
- yuma123 es una cadena de herramientas netconf / YANG escrita en C que proporciona: libyuma - API para el desarrollo de aplicaciones que admiten la compilación en tiempo de ejecución de módulos YANG, netconfd - servidor modular, yangcli - herramienta de línea de comandos interactiva
Implementaciones de código cerrado (ordenadas por nombre):
- confd es un conjunto de herramientas para agentes de gestión comercial que incluye un compilador YANG
- MasterYANG es un diseñador, visualizador y editor de modelos YANG para Windows
- Visual YANG Designer es un creador / editor / modelador / constructor / diseñador de archivos de definición YANG y un compilador YANG implementado en Java
- yumapro es un conjunto de herramientas para agentes de gestión comercial que incluye un compilador YANG
Referencias
- ^ Björklund, Martin (2010). YANG -Un lenguaje de modelado de datos para el protocolo de configuración de red (NETCONF) (informe técnico). IETF. doi : 10.17487 / RFC6020 . RFC6020.
- ^ a b Björklund, Martin (2016). El lenguaje de modelado de datos YANG 1.1 (informe técnico). IETF. doi : 10.17487 / RFC7950 . RFC7950.
- ^ RFC 8328 : Marco de gestión basado en políticas para el uso simplificado de abstracciones de políticas (SUPA)
- ^ Enns, Rob; Björklund, Martin; Schönwälder, Jürgen; Bierman, Andy (2011). Protocolo de configuración de red (NETCONF) (Informe técnico). IETF. doi : 10.17487 / RFC6241 . RFC6241.
- ^ Bierman, Andy; Björklund, Martin; Watsen, Kent (2017). Protocolo RESTCONF (Informe técnico). IETF. doi : 10.17487 / RFC8040 . RFC8040.
- ^ "Grupo de trabajo de modelado de redes" . IETF.
- ^ Schönwälder, Jürgen; Björklund, Martin; Shafer, Phil (2010). "Gestión de la configuración de red mediante NETCONF y YANG". doi : 10.1109 / MCOM.2010.5560601 . La revista Cite requiere
|magazine=
( ayuda )
enlaces externos
- Carl Moberg (5 de noviembre de 2015). YANG por ejemplo (YouTube). Yokohama: Equipo IETF EDU.
- Stefan Wallin (18 de octubre de 2014). Tutorial de YANG (YouTube). Estocolmo: tail-f.
- Catálogo de modelos YANG : catálogo en línea con una API REST
- YANG central - información y tutoriales de YANG
- Foro de discusión de YANG - Foro de la comunidad de usuarios de ConfD para discutir preguntas relacionadas con YANG.
- Para obtener una lista de clientes y servidores basados en YANG, consulte la página NETCONF .
- ISBN 978-0135180396 - "Programabilidad de red con YANG: la estructura de la automatización de red con YANG, NETCONF, RESTCONF y gNMI"