Overview
The following study describes extending YANG language statements to allow customization of models.
YANG Language
- The YANG language provides us the ability to define and model configurations and state data by defining YANG modules
- Modules contain a sequence of statements
- Statement syntax is either of the following :
- statement = keyword [argument] ;
- statement = keyword [argument] { <substatement(s)..> } ;
- Statement syntax is either of the following :
- Modules contain a sequence of statements
* argument can be zero or one depending on the statement
* argument is a string
- An XML-based equivalent version of YANG is called YIN
- YANG uses a tree to define the hierarchy of data wherein each ‘node’ has a value or/and a set of child nodes
- 4 types of nodes
- leaf nodes
- container nodes
- leaf-list nodes
- list nodes
- 4 types of nodes
Figure 1.1 Schema tree of module 'stores'
YANG extension Statement
** the YIN version and Schema trees above are generated by YANG validator 'pyang'
Expected tree diagram for example-module based on RFC8340 (https://datatracker.ietf.org/doc/html/rfc8340):
Existing YANG parser
(Please see https://wiki.onap.org/display/DW/Existing+Yang+Parser)
OpenDayLight Yang tools recognises YANG extensions
- Contains interface which has methods to access data of a YANG extension statement
package org.opendaylight.yangtools.yang.model.api;
import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement;
public interface ExtensionDefinition extends SchemaNode, EffectiveStatementEquivalent<ExtensionEffectiveStatement> {
String getArgument();
boolean isYinElement();
}- Implementing Class
- Class
- Implementing Class
References:
https://datatracker.ietf.org/doc/rfc8526/
https://www.rfc-editor.org/rfc/rfc6095.html
https://www.hjp.at/doc/rfc/rfc6020.html#sec_6.3.1
https://datatracker.ietf.org/doc/html/rfc6110#section-9.4
https://datatracker.ietf.org/doc/html/rfc8791