Understanding YANG on Devices Running Junos OS
Yet Another Next Generation (YANG) is a standards-based, extensible data modeling language used to model configuration and operational state data, remote procedure calls (RPCs), and server event notifications of network devices. The NETMOD working group in the IETF originally designed YANG to model network management data and to provide a standard for the content layer of the Network Configuration Protocol (NETCONF) model. However, YANG is protocol-independent, and YANG data models can be used independent of the transport or RPC protocol and can be converted into any encoding format supported by the network configuration protocol.
Juniper Networks publishes YANG modules that define the configuration hierarchies, operational commands, operational state data, and YANG extensions for Junos devices. You can download the YANG modules from the Juniper Networks website or the Juniper Networks GitHub repository for YANG, or you can generate the modules on a Junos device.
YANG uses a C-like syntax, a hierarchical organization of data, and provides a set of built-in types as well as the capability to define derived types. YANG emphasizes readability, modularity, and flexibility, which is achieved through the use of modules (and submodules), reusable types, and node groups.
A YANG module defines a data model and determines the encoding for that data. A YANG module defines a data model through its data, and the hierarchical organization of and constraints on that data. A module can be a complete, standalone entity, or it can reference definitions in other modules and submodules as well as augment other data models with additional nodes.
A YANG module defines not only the syntax but also the semantics of the data. It explicitly defines relationships between and constraints on the data. You can create syntactically correct configuration data that meets constraint requirements and you can validate the data against the model before uploading it and committing it on a device.
YANG uses modules to define configuration and state data, notifications, and RPCs for
network operations. This structure is similar to how the Structure of Management
Information (SMI) utilizes MIBs to model data for SNMP operations. However, YANG has the
benefit of being able to distinguish between operational and configuration data. YANG
maintains compatibility with SNMP’s SMIv2, and you can use libsmi to
translate SMIv2 MIB modules into YANG modules and vice versa. Additionally, when you
cannot use a YANG parser, you can translate YANG modules into YANG Independent Notation
(YIN), which is an equivalent XML syntax that XML parsers and XSLT scripts can read.
You can use existing YANG-based tools or develop custom network management applications to utilize YANG modules for faster and more accurate network programmability. For example, a client application could leverage YANG modules to generate vendor-specific configuration data for different devices and validate that data before uploading it to the device. The application could also handle and troubleshoot unexpected RPC responses and errors.
For information about YANG, see RFC 6020, YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF), and related RFCs.