draft-ietf-netmod-rfc6020bis-01.txt   draft-ietf-netmod-rfc6020bis-02.txt 
Network Working Group M. Bjorklund, Ed. Network Working Group M. Bjorklund, Ed.
Internet-Draft Tail-f Systems Internet-Draft Tail-f Systems
Obsoletes: 6020 (if approved) October 2, 2014 Obsoletes: 6020 (if approved) November 14, 2014
Intended status: Standards Track Intended status: Standards Track
Expires: April 5, 2015 Expires: May 18, 2015
YANG - A Data Modeling Language for the Network Configuration Protocol YANG - A Data Modeling Language for the Network Configuration Protocol
(NETCONF) (NETCONF)
draft-ietf-netmod-rfc6020bis-01 draft-ietf-netmod-rfc6020bis-02
Abstract Abstract
YANG is a data modeling language used to model configuration and YANG is a data modeling language used to model configuration and
state data manipulated by the Network Configuration Protocol state data manipulated by the Network Configuration Protocol
(NETCONF), NETCONF remote procedure calls, and NETCONF notifications. (NETCONF), NETCONF remote procedure calls, and NETCONF notifications.
This document obsoletes RFC 6020. This document obsoletes RFC 6020.
Status of This Memo Status of This Memo
skipping to change at page 1, line 35 skipping to change at page 1, line 35
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on April 5, 2015. This Internet-Draft will expire on May 18, 2015.
Copyright Notice Copyright Notice
Copyright (c) 2014 IETF Trust and the persons identified as the Copyright (c) 2014 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 25 skipping to change at page 2, line 25
not be created outside the IETF Standards Process, except to format not be created outside the IETF Standards Process, except to format
it for publication as an RFC or to translate it into languages other it for publication as an RFC or to translate it into languages other
than English. than English.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 8 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1. Summary of Changes from RFC 6020 . . . . . . . . . . . . 8 1.1. Summary of Changes from RFC 6020 . . . . . . . . . . . . 8
2. Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2. Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 9 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1. Mandatory Nodes . . . . . . . . . . . . . . . . . . . . . 11 3.1. Mandatory Nodes . . . . . . . . . . . . . . . . . . . . . 12
4. YANG Overview . . . . . . . . . . . . . . . . . . . . . . . . 12 4. YANG Overview . . . . . . . . . . . . . . . . . . . . . . . . 12
4.1. Functional Overview . . . . . . . . . . . . . . . . . . . 12 4.1. Functional Overview . . . . . . . . . . . . . . . . . . . 12
4.2. Language Overview . . . . . . . . . . . . . . . . . . . . 13 4.2. Language Overview . . . . . . . . . . . . . . . . . . . . 14
4.2.1. Modules and Submodules . . . . . . . . . . . . . . . 14 4.2.1. Modules and Submodules . . . . . . . . . . . . . . . 14
4.2.2. Data Modeling Basics . . . . . . . . . . . . . . . . 14 4.2.2. Data Modeling Basics . . . . . . . . . . . . . . . . 14
4.2.3. State Data . . . . . . . . . . . . . . . . . . . . . 18 4.2.3. State Data . . . . . . . . . . . . . . . . . . . . . 19
4.2.4. Built-In Types . . . . . . . . . . . . . . . . . . . 18 4.2.4. Built-In Types . . . . . . . . . . . . . . . . . . . 19
4.2.5. Derived Types (typedef) . . . . . . . . . . . . . . . 19 4.2.5. Derived Types (typedef) . . . . . . . . . . . . . . . 20
4.2.6. Reusable Node Groups (grouping) . . . . . . . . . . . 20 4.2.6. Reusable Node Groups (grouping) . . . . . . . . . . . 21
4.2.7. Choices . . . . . . . . . . . . . . . . . . . . . . . 21 4.2.7. Choices . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.8. Extending Data Models (augment) . . . . . . . . . . . 22 4.2.8. Extending Data Models (augment) . . . . . . . . . . . 23
4.2.9. RPC Definitions . . . . . . . . . . . . . . . . . . . 23 4.2.9. RPC Definitions . . . . . . . . . . . . . . . . . . . 24
4.2.10. Notification Definitions . . . . . . . . . . . . . . 24 4.2.10. Notification Definitions . . . . . . . . . . . . . . 25
5. Language Concepts . . . . . . . . . . . . . . . . . . . . . . 25 5. Language Concepts . . . . . . . . . . . . . . . . . . . . . . 26
5.1. Modules and Submodules . . . . . . . . . . . . . . . . . 25 5.1. Modules and Submodules . . . . . . . . . . . . . . . . . 26
5.1.1. Import and Include by Revision . . . . . . . . . . . 26 5.1.1. Import and Include by Revision . . . . . . . . . . . 27
5.1.2. Module Hierarchies . . . . . . . . . . . . . . . . . 27 5.1.2. Module Hierarchies . . . . . . . . . . . . . . . . . 28
5.2. File Layout . . . . . . . . . . . . . . . . . . . . . . . 28 5.2. File Layout . . . . . . . . . . . . . . . . . . . . . . . 29
5.3. XML Namespaces . . . . . . . . . . . . . . . . . . . . . 28 5.3. XML Namespaces . . . . . . . . . . . . . . . . . . . . . 29
5.3.1. YANG XML Namespace . . . . . . . . . . . . . . . . . 29 5.3.1. YANG XML Namespace . . . . . . . . . . . . . . . . . 30
5.4. Resolving Grouping, Type, and Identity Names . . . . . . 29 5.4. Resolving Grouping, Type, and Identity Names . . . . . . 30
5.5. Nested Typedefs and Groupings . . . . . . . . . . . . . . 29 5.5. Nested Typedefs and Groupings . . . . . . . . . . . . . . 30
5.6. Conformance . . . . . . . . . . . . . . . . . . . . . . . 30 5.6. Conformance . . . . . . . . . . . . . . . . . . . . . . . 31
5.6.1. Basic Behavior . . . . . . . . . . . . . . . . . . . 30 5.6.1. Basic Behavior . . . . . . . . . . . . . . . . . . . 31
5.6.2. Optional Features . . . . . . . . . . . . . . . . . . 31 5.6.2. Optional Features . . . . . . . . . . . . . . . . . . 32
5.6.3. Deviations . . . . . . . . . . . . . . . . . . . . . 31 5.6.3. Deviations . . . . . . . . . . . . . . . . . . . . . 32
5.6.4. Announcing Conformance Information in the <hello> 5.6.4. Announcing Conformance Information in the <hello>
Message . . . . . . . . . . . . . . . . . . . . . . . 32 Message . . . . . . . . . . . . . . . . . . . . . . . 33
5.7. Data Store Modification . . . . . . . . . . . . . . . . . 34 5.7. Data Store Modification . . . . . . . . . . . . . . . . . 35
6. YANG Syntax . . . . . . . . . . . . . . . . . . . . . . . . . 34 6. YANG Syntax . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.1. Lexical Tokenization . . . . . . . . . . . . . . . . . . 34 6.1. Lexical Tokenization . . . . . . . . . . . . . . . . . . 35
6.1.1. Comments . . . . . . . . . . . . . . . . . . . . . . 34 6.1.1. Comments . . . . . . . . . . . . . . . . . . . . . . 36
6.1.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 35 6.1.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 36
6.1.3. Quoting . . . . . . . . . . . . . . . . . . . . . . . 35 6.1.3. Quoting . . . . . . . . . . . . . . . . . . . . . . . 36
6.2. Identifiers . . . . . . . . . . . . . . . . . . . . . . . 36 6.2. Identifiers . . . . . . . . . . . . . . . . . . . . . . . 37
6.2.1. Identifiers and Their Namespaces . . . . . . . . . . 36 6.2.1. Identifiers and Their Namespaces . . . . . . . . . . 38
6.3. Statements . . . . . . . . . . . . . . . . . . . . . . . 37 6.3. Statements . . . . . . . . . . . . . . . . . . . . . . . 39
6.3.1. Language Extensions . . . . . . . . . . . . . . . . . 38 6.3.1. Language Extensions . . . . . . . . . . . . . . . . . 39
6.4. XPath Evaluations . . . . . . . . . . . . . . . . . . . . 38 6.4. XPath Evaluations . . . . . . . . . . . . . . . . . . . . 39
6.4.1. XPath Context . . . . . . . . . . . . . . . . . . . . 38 6.4.1. XPath Context . . . . . . . . . . . . . . . . . . . . 40
6.5. Schema Node Identifier . . . . . . . . . . . . . . . . . 39 6.5. Schema Node Identifier . . . . . . . . . . . . . . . . . 41
7. YANG Statements . . . . . . . . . . . . . . . . . . . . . . . 39 7. YANG Statements . . . . . . . . . . . . . . . . . . . . . . . 41
7.1. The module Statement . . . . . . . . . . . . . . . . . . 40 7.1. The module Statement . . . . . . . . . . . . . . . . . . 42
7.1.1. The module's Substatements . . . . . . . . . . . . . 41 7.1.1. The module's Substatements . . . . . . . . . . . . . 43
7.1.2. The yang-version Statement . . . . . . . . . . . . . 41 7.1.2. The yang-version Statement . . . . . . . . . . . . . 44
7.1.3. The namespace Statement . . . . . . . . . . . . . . . 42 7.1.3. The namespace Statement . . . . . . . . . . . . . . . 45
7.1.4. The prefix Statement . . . . . . . . . . . . . . . . 42 7.1.4. The prefix Statement . . . . . . . . . . . . . . . . 45
7.1.5. The import Statement . . . . . . . . . . . . . . . . 42 7.1.5. The import Statement . . . . . . . . . . . . . . . . 45
7.1.6. The include Statement . . . . . . . . . . . . . . . . 43 7.1.6. The include Statement . . . . . . . . . . . . . . . . 46
7.1.7. The organization Statement . . . . . . . . . . . . . 44 7.1.7. The organization Statement . . . . . . . . . . . . . 47
7.1.8. The contact Statement . . . . . . . . . . . . . . . . 44 7.1.8. The contact Statement . . . . . . . . . . . . . . . . 47
7.1.9. The revision Statement . . . . . . . . . . . . . . . 44 7.1.9. The revision Statement . . . . . . . . . . . . . . . 47
7.1.10. Usage Example . . . . . . . . . . . . . . . . . . . . 45 7.1.10. Usage Example . . . . . . . . . . . . . . . . . . . . 48
7.2. The submodule Statement . . . . . . . . . . . . . . . . . 46 7.2. The submodule Statement . . . . . . . . . . . . . . . . . 49
7.2.1. The submodule's Substatements . . . . . . . . . . . . 47 7.2.1. The submodule's Substatements . . . . . . . . . . . . 50
7.2.2. The belongs-to Statement . . . . . . . . . . . . . . 48 7.2.2. The belongs-to Statement . . . . . . . . . . . . . . 51
7.2.3. Usage Example . . . . . . . . . . . . . . . . . . . . 49 7.2.3. Usage Example . . . . . . . . . . . . . . . . . . . . 52
7.3. The typedef Statement . . . . . . . . . . . . . . . . . . 49 7.3. The typedef Statement . . . . . . . . . . . . . . . . . . 52
7.3.1. The typedef's Substatements . . . . . . . . . . . . . 50 7.3.1. The typedef's Substatements . . . . . . . . . . . . . 53
7.3.2. The typedef's type Statement . . . . . . . . . . . . 50 7.3.2. The typedef's type Statement . . . . . . . . . . . . 53
7.3.3. The units Statement . . . . . . . . . . . . . . . . . 50 7.3.3. The units Statement . . . . . . . . . . . . . . . . . 53
7.3.4. The typedef's default Statement . . . . . . . . . . . 50 7.3.4. The typedef's default Statement . . . . . . . . . . . 53
7.3.5. Usage Example . . . . . . . . . . . . . . . . . . . . 51 7.3.5. Usage Example . . . . . . . . . . . . . . . . . . . . 54
7.4. The type Statement . . . . . . . . . . . . . . . . . . . 51 7.4. The type Statement . . . . . . . . . . . . . . . . . . . 54
7.4.1. The type's Substatements . . . . . . . . . . . . . . 51 7.4.1. The type's Substatements . . . . . . . . . . . . . . 54
7.5. The container Statement . . . . . . . . . . . . . . . . . 51 7.5. The container Statement . . . . . . . . . . . . . . . . . 54
7.5.1. Containers with Presence . . . . . . . . . . . . . . 52 7.5.1. Containers with Presence . . . . . . . . . . . . . . 55
7.5.2. The container's Substatements . . . . . . . . . . . . 52 7.5.2. The container's Substatements . . . . . . . . . . . . 55
7.5.3. The must Statement . . . . . . . . . . . . . . . . . 53 7.5.3. The must Statement . . . . . . . . . . . . . . . . . 56
7.5.4. The must's Substatements . . . . . . . . . . . . . . 54 7.5.4. The must's Substatements . . . . . . . . . . . . . . 57
7.5.5. The presence Statement . . . . . . . . . . . . . . . 55 7.5.5. The presence Statement . . . . . . . . . . . . . . . 58
7.5.6. The container's Child Node Statements . . . . . . . . 56 7.5.6. The container's Child Node Statements . . . . . . . . 58
7.5.7. XML Mapping Rules . . . . . . . . . . . . . . . . . . 56 7.5.7. XML Mapping Rules . . . . . . . . . . . . . . . . . . 58
7.5.8. NETCONF <edit-config> Operations . . . . . . . . . . 56 7.5.8. NETCONF <edit-config> Operations . . . . . . . . . . 59
7.5.9. Usage Example . . . . . . . . . . . . . . . . . . . . 57 7.5.9. Usage Example . . . . . . . . . . . . . . . . . . . . 59
7.6. The leaf Statement . . . . . . . . . . . . . . . . . . . 58 7.6. The leaf Statement . . . . . . . . . . . . . . . . . . . 60
7.6.1. The leaf's default value . . . . . . . . . . . . . . 58 7.6.1. The leaf's default value . . . . . . . . . . . . . . 61
7.6.2. The leaf's Substatements . . . . . . . . . . . . . . 59 7.6.2. The leaf's Substatements . . . . . . . . . . . . . . 61
7.6.3. The leaf's type Statement . . . . . . . . . . . . . . 59 7.6.3. The leaf's type Statement . . . . . . . . . . . . . . 62
7.6.4. The leaf's default Statement . . . . . . . . . . . . 59 7.6.4. The leaf's default Statement . . . . . . . . . . . . 62
7.6.5. The leaf's mandatory Statement . . . . . . . . . . . 59 7.6.5. The leaf's mandatory Statement . . . . . . . . . . . 62
7.6.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 60 7.6.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 62
7.6.7. NETCONF <edit-config> Operations . . . . . . . . . . 60 7.6.7. NETCONF <edit-config> Operations . . . . . . . . . . 63
7.6.8. Usage Example . . . . . . . . . . . . . . . . . . . . 60 7.6.8. Usage Example . . . . . . . . . . . . . . . . . . . . 63
7.7. The leaf-list Statement . . . . . . . . . . . . . . . . . 61 7.7. The leaf-list Statement . . . . . . . . . . . . . . . . . 64
7.7.1. Ordering . . . . . . . . . . . . . . . . . . . . . . 62 7.7.1. Ordering . . . . . . . . . . . . . . . . . . . . . . 64
7.7.2. The leaf-list's Substatements . . . . . . . . . . . . 62 7.7.2. The leaf-list's Substatements . . . . . . . . . . . . 65
7.7.3. The min-elements Statement . . . . . . . . . . . . . 63 7.7.3. The min-elements Statement . . . . . . . . . . . . . 65
7.7.4. The max-elements Statement . . . . . . . . . . . . . 63 7.7.4. The max-elements Statement . . . . . . . . . . . . . 66
7.7.5. The ordered-by Statement . . . . . . . . . . . . . . 64 7.7.5. The ordered-by Statement . . . . . . . . . . . . . . 66
7.7.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 64 7.7.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 67
7.7.7. NETCONF <edit-config> Operations . . . . . . . . . . 65 7.7.7. NETCONF <edit-config> Operations . . . . . . . . . . 67
7.7.8. Usage Example . . . . . . . . . . . . . . . . . . . . 66 7.7.8. Usage Example . . . . . . . . . . . . . . . . . . . . 68
7.8. The list Statement . . . . . . . . . . . . . . . . . . . 67 7.8. The list Statement . . . . . . . . . . . . . . . . . . . 70
7.8.1. The list's Substatements . . . . . . . . . . . . . . 67 7.8.1. The list's Substatements . . . . . . . . . . . . . . 70
7.8.2. The list's key Statement . . . . . . . . . . . . . . 68 7.8.2. The list's key Statement . . . . . . . . . . . . . . 71
7.8.3. The list's unique Statement . . . . . . . . . . . . . 69 7.8.3. The list's unique Statement . . . . . . . . . . . . . 72
7.8.4. The list's Child Node Statements . . . . . . . . . . 70 7.8.4. The list's Child Node Statements . . . . . . . . . . 73
7.8.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 70 7.8.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 73
7.8.6. NETCONF <edit-config> Operations . . . . . . . . . . 71 7.8.6. NETCONF <edit-config> Operations . . . . . . . . . . 74
7.8.7. Usage Example . . . . . . . . . . . . . . . . . . . . 72 7.8.7. Usage Example . . . . . . . . . . . . . . . . . . . . 75
7.9. The choice Statement . . . . . . . . . . . . . . . . . . 75 7.9. The choice Statement . . . . . . . . . . . . . . . . . . 78
7.9.1. The choice's Substatements . . . . . . . . . . . . . 75 7.9.1. The choice's Substatements . . . . . . . . . . . . . 78
7.9.2. The choice's case Statement . . . . . . . . . . . . . 76 7.9.2. The choice's case Statement . . . . . . . . . . . . . 79
7.9.3. The choice's default Statement . . . . . . . . . . . 77 7.9.3. The choice's default Statement . . . . . . . . . . . 80
7.9.4. The choice's mandatory Statement . . . . . . . . . . 79 7.9.4. The choice's mandatory Statement . . . . . . . . . . 82
7.9.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 79 7.9.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 82
7.9.6. NETCONF <edit-config> Operations . . . . . . . . . . 79 7.9.6. NETCONF <edit-config> Operations . . . . . . . . . . 82
7.9.7. Usage Example . . . . . . . . . . . . . . . . . . . . 79 7.9.7. Usage Example . . . . . . . . . . . . . . . . . . . . 82
7.10. The anyxml Statement . . . . . . . . . . . . . . . . . . 80 7.10. The anyxml Statement . . . . . . . . . . . . . . . . . . 83
7.10.1. The anyxml's Substatements . . . . . . . . . . . . . 81 7.10.1. The anyxml's Substatements . . . . . . . . . . . . . 84
7.10.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 81 7.10.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 84
7.10.3. NETCONF <edit-config> Operations . . . . . . . . . . 81 7.10.3. NETCONF <edit-config> Operations . . . . . . . . . . 84
7.10.4. Usage Example . . . . . . . . . . . . . . . . . . . 82 7.10.4. Usage Example . . . . . . . . . . . . . . . . . . . 85
7.11. The grouping Statement . . . . . . . . . . . . . . . . . 82 7.11. The grouping Statement . . . . . . . . . . . . . . . . . 85
7.11.1. The grouping's Substatements . . . . . . . . . . . . 83 7.11.1. The grouping's Substatements . . . . . . . . . . . . 86
7.11.2. Usage Example . . . . . . . . . . . . . . . . . . . 83 7.11.2. Usage Example . . . . . . . . . . . . . . . . . . . 86
7.12. The uses Statement . . . . . . . . . . . . . . . . . . . 84 7.12. The uses Statement . . . . . . . . . . . . . . . . . . . 87
7.12.1. The uses's Substatements . . . . . . . . . . . . . . 84 7.12.1. The uses's Substatements . . . . . . . . . . . . . . 87
7.12.2. The refine Statement . . . . . . . . . . . . . . . . 84 7.12.2. The refine Statement . . . . . . . . . . . . . . . . 87
7.12.3. XML Mapping Rules . . . . . . . . . . . . . . . . . 85 7.12.3. XML Mapping Rules . . . . . . . . . . . . . . . . . 88
7.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 85 7.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 88
7.13. The rpc Statement . . . . . . . . . . . . . . . . . . . . 87 7.13. The rpc Statement . . . . . . . . . . . . . . . . . . . . 90
7.13.1. The rpc's Substatements . . . . . . . . . . . . . . 87 7.13.1. The rpc's Substatements . . . . . . . . . . . . . . 90
7.13.2. The input Statement . . . . . . . . . . . . . . . . 87 7.13.2. The input Statement . . . . . . . . . . . . . . . . 90
7.13.3. The output Statement . . . . . . . . . . . . . . . . 88 7.13.3. The output Statement . . . . . . . . . . . . . . . . 91
7.13.4. XML Mapping Rules . . . . . . . . . . . . . . . . . 89 7.13.4. XML Mapping Rules . . . . . . . . . . . . . . . . . 92
7.13.5. Usage Example . . . . . . . . . . . . . . . . . . . 89 7.13.5. Usage Example . . . . . . . . . . . . . . . . . . . 92
7.14. The notification Statement . . . . . . . . . . . . . . . 90 7.14. The notification Statement . . . . . . . . . . . . . . . 93
7.14.1. The notification's Substatements . . . . . . . . . . 91 7.14.1. The notification's Substatements . . . . . . . . . . 94
7.14.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 91 7.14.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 94
7.14.3. Usage Example . . . . . . . . . . . . . . . . . . . 91 7.14.3. Usage Example . . . . . . . . . . . . . . . . . . . 94
7.15. The augment Statement . . . . . . . . . . . . . . . . . . 92 7.15. The augment Statement . . . . . . . . . . . . . . . . . . 95
7.15.1. The augment's Substatements . . . . . . . . . . . . 93 7.15.1. The augment's Substatements . . . . . . . . . . . . 96
7.15.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 93 7.15.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 96
7.15.3. Usage Example . . . . . . . . . . . . . . . . . . . 93 7.15.3. Usage Example . . . . . . . . . . . . . . . . . . . 96
7.16. The identity Statement . . . . . . . . . . . . . . . . . 95 7.16. The identity Statement . . . . . . . . . . . . . . . . . 98
7.16.1. The identity's Substatements . . . . . . . . . . . . 95 7.16.1. The identity's Substatements . . . . . . . . . . . . 98
7.16.2. The base Statement . . . . . . . . . . . . . . . . . 96 7.16.2. The base Statement . . . . . . . . . . . . . . . . . 99
7.16.3. Usage Example . . . . . . . . . . . . . . . . . . . 96 7.16.3. Usage Example . . . . . . . . . . . . . . . . . . . 99
7.17. The extension Statement . . . . . . . . . . . . . . . . . 97 7.17. The extension Statement . . . . . . . . . . . . . . . . . 100
7.17.1. The extension's Substatements . . . . . . . . . . . 98 7.17.1. The extension's Substatements . . . . . . . . . . . 101
7.17.2. The argument Statement . . . . . . . . . . . . . . . 98 7.17.2. The argument Statement . . . . . . . . . . . . . . . 101
7.17.3. Usage Example . . . . . . . . . . . . . . . . . . . 99 7.17.3. Usage Example . . . . . . . . . . . . . . . . . . . 102
7.18. Conformance-Related Statements . . . . . . . . . . . . . 99 7.18. Conformance-Related Statements . . . . . . . . . . . . . 102
7.18.1. The feature Statement . . . . . . . . . . . . . . . 99 7.18.1. The feature Statement . . . . . . . . . . . . . . . 102
7.18.2. The if-feature Statement . . . . . . . . . . . . . . 101 7.18.2. The if-feature Statement . . . . . . . . . . . . . . 104
7.18.3. The deviation Statement . . . . . . . . . . . . . . 102 7.18.3. The deviation Statement . . . . . . . . . . . . . . 105
7.19. Common Statements . . . . . . . . . . . . . . . . . . . . 104 7.19. Common Statements . . . . . . . . . . . . . . . . . . . . 107
7.19.1. The config Statement . . . . . . . . . . . . . . . . 104 7.19.1. The config Statement . . . . . . . . . . . . . . . . 107
7.19.2. The status Statement . . . . . . . . . . . . . . . . 105 7.19.2. The status Statement . . . . . . . . . . . . . . . . 108
7.19.3. The description Statement . . . . . . . . . . . . . 106 7.19.3. The description Statement . . . . . . . . . . . . . 109
7.19.4. The reference Statement . . . . . . . . . . . . . . 106 7.19.4. The reference Statement . . . . . . . . . . . . . . 109
7.19.5. The when Statement . . . . . . . . . . . . . . . . . 106 7.19.5. The when Statement . . . . . . . . . . . . . . . . . 109
8. Constraints . . . . . . . . . . . . . . . . . . . . . . . . . 108 8. Constraints . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.1. Constraints on Data . . . . . . . . . . . . . . . . . . . 108 8.1. Constraints on Data . . . . . . . . . . . . . . . . . . . 110
8.2. Hierarchy of Constraints . . . . . . . . . . . . . . . . 108 8.2. Hierarchy of Constraints . . . . . . . . . . . . . . . . 111
8.3. Constraint Enforcement Model . . . . . . . . . . . . . . 108 8.3. Constraint Enforcement Model . . . . . . . . . . . . . . 111
8.3.1. Payload Parsing . . . . . . . . . . . . . . . . . . . 109 8.3.1. Payload Parsing . . . . . . . . . . . . . . . . . . . 111
8.3.2. NETCONF <edit-config> Processing . . . . . . . . . . 109 8.3.2. NETCONF <edit-config> Processing . . . . . . . . . . 112
8.3.3. Validation . . . . . . . . . . . . . . . . . . . . . 110 8.3.3. Validation . . . . . . . . . . . . . . . . . . . . . 113
9. Built-In Types . . . . . . . . . . . . . . . . . . . . . . . 110 9. Built-In Types . . . . . . . . . . . . . . . . . . . . . . . 113
9.1. Canonical Representation . . . . . . . . . . . . . . . . 111 9.1. Canonical Representation . . . . . . . . . . . . . . . . 113
9.2. The Integer Built-In Types . . . . . . . . . . . . . . . 111 9.2. The Integer Built-In Types . . . . . . . . . . . . . . . 114
9.2.1. Lexical Representation . . . . . . . . . . . . . . . 112 9.2.1. Lexical Representation . . . . . . . . . . . . . . . 114
9.2.2. Canonical Form . . . . . . . . . . . . . . . . . . . 112 9.2.2. Canonical Form . . . . . . . . . . . . . . . . . . . 115
9.2.3. Restrictions . . . . . . . . . . . . . . . . . . . . 113 9.2.3. Restrictions . . . . . . . . . . . . . . . . . . . . 115
9.2.4. The range Statement . . . . . . . . . . . . . . . . . 113 9.2.4. The range Statement . . . . . . . . . . . . . . . . . 115
9.2.5. Usage Example . . . . . . . . . . . . . . . . . . . . 113 9.2.5. Usage Example . . . . . . . . . . . . . . . . . . . . 116
9.3. The decimal64 Built-In Type . . . . . . . . . . . . . . . 114 9.3. The decimal64 Built-In Type . . . . . . . . . . . . . . . 116
9.3.1. Lexical Representation . . . . . . . . . . . . . . . 114 9.3.1. Lexical Representation . . . . . . . . . . . . . . . 117
9.3.2. Canonical Form . . . . . . . . . . . . . . . . . . . 114 9.3.2. Canonical Form . . . . . . . . . . . . . . . . . . . 117
9.3.3. Restrictions . . . . . . . . . . . . . . . . . . . . 115 9.3.3. Restrictions . . . . . . . . . . . . . . . . . . . . 117
9.3.4. The fraction-digits Statement . . . . . . . . . . . . 115 9.3.4. The fraction-digits Statement . . . . . . . . . . . . 117
9.3.5. Usage Example . . . . . . . . . . . . . . . . . . . . 115 9.3.5. Usage Example . . . . . . . . . . . . . . . . . . . . 118
9.4. The string Built-In Type . . . . . . . . . . . . . . . . 116 9.4. The string Built-In Type . . . . . . . . . . . . . . . . 118
9.4.1. Lexical Representation . . . . . . . . . . . . . . . 116 9.4.1. Lexical Representation . . . . . . . . . . . . . . . 118
9.4.2. Canonical Form . . . . . . . . . . . . . . . . . . . 116 9.4.2. Canonical Form . . . . . . . . . . . . . . . . . . . 119
9.4.3. Restrictions . . . . . . . . . . . . . . . . . . . . 116 9.4.3. Restrictions . . . . . . . . . . . . . . . . . . . . 119
9.4.4. The length Statement . . . . . . . . . . . . . . . . 116 9.4.4. The length Statement . . . . . . . . . . . . . . . . 119
9.4.5. The pattern Statement . . . . . . . . . . . . . . . . 117 9.4.5. The pattern Statement . . . . . . . . . . . . . . . . 120
9.4.6. The modifier Statement . . . . . . . . . . . . . . . 118 9.4.6. The modifier Statement . . . . . . . . . . . . . . . 120
9.4.7. Usage Example . . . . . . . . . . . . . . . . . . . . 118 9.4.7. Usage Example . . . . . . . . . . . . . . . . . . . . 120
9.5. The boolean Built-In Type . . . . . . . . . . . . . . . . 119 9.5. The boolean Built-In Type . . . . . . . . . . . . . . . . 121
9.5.1. Lexical Representation . . . . . . . . . . . . . . . 119 9.5.1. Lexical Representation . . . . . . . . . . . . . . . 122
9.5.2. Canonical Form . . . . . . . . . . . . . . . . . . . 119 9.5.2. Canonical Form . . . . . . . . . . . . . . . . . . . 122
9.5.3. Restrictions . . . . . . . . . . . . . . . . . . . . 119 9.5.3. Restrictions . . . . . . . . . . . . . . . . . . . . 122
9.6. The enumeration Built-In Type . . . . . . . . . . . . . . 119 9.6. The enumeration Built-In Type . . . . . . . . . . . . . . 122
9.6.1. Lexical Representation . . . . . . . . . . . . . . . 119 9.6.1. Lexical Representation . . . . . . . . . . . . . . . 122
9.6.2. Canonical Form . . . . . . . . . . . . . . . . . . . 120 9.6.2. Canonical Form . . . . . . . . . . . . . . . . . . . 122
9.6.3. Restrictions . . . . . . . . . . . . . . . . . . . . 120 9.6.3. Restrictions . . . . . . . . . . . . . . . . . . . . 122
9.6.4. The enum Statement . . . . . . . . . . . . . . . . . 120 9.6.4. The enum Statement . . . . . . . . . . . . . . . . . 122
9.6.5. Usage Example . . . . . . . . . . . . . . . . . . . . 121 9.6.5. Usage Example . . . . . . . . . . . . . . . . . . . . 123
9.7. The bits Built-In Type . . . . . . . . . . . . . . . . . 121 9.7. The bits Built-In Type . . . . . . . . . . . . . . . . . 124
9.7.1. Restrictions . . . . . . . . . . . . . . . . . . . . 121 9.7.1. Restrictions . . . . . . . . . . . . . . . . . . . . 124
9.7.2. Lexical Representation . . . . . . . . . . . . . . . 121 9.7.2. Lexical Representation . . . . . . . . . . . . . . . 124
9.7.3. Canonical Form . . . . . . . . . . . . . . . . . . . 121 9.7.3. Canonical Form . . . . . . . . . . . . . . . . . . . 124
9.7.4. The bit Statement . . . . . . . . . . . . . . . . . . 121 9.7.4. The bit Statement . . . . . . . . . . . . . . . . . . 124
9.7.5. Usage Example . . . . . . . . . . . . . . . . . . . . 122 9.7.5. Usage Example . . . . . . . . . . . . . . . . . . . . 125
9.8. The binary Built-In Type . . . . . . . . . . . . . . . . 123 9.8. The binary Built-In Type . . . . . . . . . . . . . . . . 126
9.8.1. Restrictions . . . . . . . . . . . . . . . . . . . . 123 9.8.1. Restrictions . . . . . . . . . . . . . . . . . . . . 126
9.8.2. Lexical Representation . . . . . . . . . . . . . . . 123 9.8.2. Lexical Representation . . . . . . . . . . . . . . . 126
9.8.3. Canonical Form . . . . . . . . . . . . . . . . . . . 123 9.8.3. Canonical Form . . . . . . . . . . . . . . . . . . . 126
9.9. The leafref Built-In Type . . . . . . . . . . . . . . . . 123 9.9. The leafref Built-In Type . . . . . . . . . . . . . . . . 126
9.9.1. Restrictions . . . . . . . . . . . . . . . . . . . . 124 9.9.1. Restrictions . . . . . . . . . . . . . . . . . . . . 126
9.9.2. The path Statement . . . . . . . . . . . . . . . . . 124 9.9.2. The path Statement . . . . . . . . . . . . . . . . . 127
9.9.3. The require-instance Statement . . . . . . . . . . . 125 9.9.3. The require-instance Statement . . . . . . . . . . . 127
9.9.4. Lexical Representation . . . . . . . . . . . . . . . 125 9.9.4. Lexical Representation . . . . . . . . . . . . . . . 127
9.9.5. Canonical Form . . . . . . . . . . . . . . . . . . . 125 9.9.5. Canonical Form . . . . . . . . . . . . . . . . . . . 128
9.9.6. Usage Example . . . . . . . . . . . . . . . . . . . . 125 9.9.6. Usage Example . . . . . . . . . . . . . . . . . . . . 128
9.10. The identityref Built-In Type . . . . . . . . . . . . . . 129 9.10. The identityref Built-In Type . . . . . . . . . . . . . . 131
9.10.1. Restrictions . . . . . . . . . . . . . . . . . . . . 129 9.10.1. Restrictions . . . . . . . . . . . . . . . . . . . . 131
9.10.2. The identityref's base Statement . . . . . . . . . . 129 9.10.2. The identityref's base Statement . . . . . . . . . . 131
9.10.3. Lexical Representation . . . . . . . . . . . . . . . 130 9.10.3. Lexical Representation . . . . . . . . . . . . . . . 132
9.10.4. Canonical Form . . . . . . . . . . . . . . . . . . . 130 9.10.4. Canonical Form . . . . . . . . . . . . . . . . . . . 132
9.10.5. Usage Example . . . . . . . . . . . . . . . . . . . 130 9.10.5. Usage Example . . . . . . . . . . . . . . . . . . . 132
9.11. The empty Built-In Type . . . . . . . . . . . . . . . . . 132 9.11. The empty Built-In Type . . . . . . . . . . . . . . . . . 134
9.11.1. Restrictions . . . . . . . . . . . . . . . . . . . . 132 9.11.1. Restrictions . . . . . . . . . . . . . . . . . . . . 134
9.11.2. Lexical Representation . . . . . . . . . . . . . . . 132 9.11.2. Lexical Representation . . . . . . . . . . . . . . . 134
9.11.3. Canonical Form . . . . . . . . . . . . . . . . . . . 132 9.11.3. Canonical Form . . . . . . . . . . . . . . . . . . . 134
9.11.4. Usage Example . . . . . . . . . . . . . . . . . . . 132 9.11.4. Usage Example . . . . . . . . . . . . . . . . . . . 134
9.12. The union Built-In Type . . . . . . . . . . . . . . . . . 132 9.12. The union Built-In Type . . . . . . . . . . . . . . . . . 134
9.12.1. Restrictions . . . . . . . . . . . . . . . . . . . . 133 9.12.1. Restrictions . . . . . . . . . . . . . . . . . . . . 135
9.12.2. Lexical Representation . . . . . . . . . . . . . . . 133 9.12.2. Lexical Representation . . . . . . . . . . . . . . . 135
9.12.3. Canonical Form . . . . . . . . . . . . . . . . . . . 133 9.12.3. Canonical Form . . . . . . . . . . . . . . . . . . . 135
9.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 133 9.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 135
9.13. The instance-identifier Built-In Type . . . . . . . . . . 134 9.13. The instance-identifier Built-In Type . . . . . . . . . . 136
9.13.1. Restrictions . . . . . . . . . . . . . . . . . . . . 135 9.13.1. Restrictions . . . . . . . . . . . . . . . . . . . . 137
9.13.2. Lexical Representation . . . . . . . . . . . . . . . 135 9.13.2. Lexical Representation . . . . . . . . . . . . . . . 137
9.13.3. Canonical Form . . . . . . . . . . . . . . . . . . . 136 9.13.3. Canonical Form . . . . . . . . . . . . . . . . . . . 137
9.13.4. Usage Example . . . . . . . . . . . . . . . . . . . 136 9.13.4. Usage Example . . . . . . . . . . . . . . . . . . . 137
10. XPath Functions . . . . . . . . . . . . . . . . . . . . . . . 136 10. XPath Functions . . . . . . . . . . . . . . . . . . . . . . . 138
10.1. Functions for Node Sets . . . . . . . . . . . . . . . . 136 10.1. Functions for Node Sets . . . . . . . . . . . . . . . . 138
10.1.1. current() . . . . . . . . . . . . . . . . . . . . . 136 10.1.1. current() . . . . . . . . . . . . . . . . . . . . . 138
10.2. Functions for Strings . . . . . . . . . . . . . . . . . 137 10.2. Functions for Strings . . . . . . . . . . . . . . . . . 138
10.2.1. re-match() . . . . . . . . . . . . . . . . . . . . . 137 10.2.1. re-match() . . . . . . . . . . . . . . . . . . . . . 138
10.3. Functions for the YANG Types "leafref" and "instance- 10.3. Functions for the YANG Types "leafref" and "instance-
identifier" . . . . . . . . . . . . . . . . . . . . . . 137 identifier" . . . . . . . . . . . . . . . . . . . . . . 139
10.3.1. deref() . . . . . . . . . . . . . . . . . . . . . . 137 10.3.1. deref() . . . . . . . . . . . . . . . . . . . . . . 139
10.4. Functions for the YANG Type "identityref" . . . . . . . 138 10.4. Functions for the YANG Type "identityref" . . . . . . . 140
10.4.1. derived-from() . . . . . . . . . . . . . . . . . . . 138 10.4.1. derived-from() . . . . . . . . . . . . . . . . . . . 140
10.5. Functions for the YANG Type "enumeration" . . . . . . . 139 10.5. Functions for the YANG Type "enumeration" . . . . . . . 141
10.5.1. enum-value() . . . . . . . . . . . . . . . . . . . . 139 10.5.1. enum-value() . . . . . . . . . . . . . . . . . . . . 141
10.6. Functions for the YANG Type "bits" . . . . . . . . . . . 140 10.6. Functions for the YANG Type "bits" . . . . . . . . . . . 142
10.6.1. bit-is-set() . . . . . . . . . . . . . . . . . . . . 140 10.6.1. bit-is-set() . . . . . . . . . . . . . . . . . . . . 142
11. Updating a Module . . . . . . . . . . . . . . . . . . . . . . 141 11. Updating a Module . . . . . . . . . . . . . . . . . . . . . . 143
12. YIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 12. YIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
12.1. Formal YIN Definition . . . . . . . . . . . . . . . . . 143 12.1. Formal YIN Definition . . . . . . . . . . . . . . . . . 145
12.1.1. Usage Example . . . . . . . . . . . . . . . . . . . 146 12.1.1. Usage Example . . . . . . . . . . . . . . . . . . . 148
13. YANG ABNF Grammar . . . . . . . . . . . . . . . . . . . . . . 147 13. YANG ABNF Grammar . . . . . . . . . . . . . . . . . . . . . . 149
14. Error Responses for YANG Related Errors . . . . . . . . . . . 170 14. Error Responses for YANG Related Errors . . . . . . . . . . . 172
14.1. Error Message for Data That Violates a unique Statement 170 14.1. Error Message for Data That Violates a unique Statement 173
14.2. Error Message for Data That Violates a max-elements 14.2. Error Message for Data That Violates a max-elements
Statement . . . . . . . . . . . . . . . . . . . . . . . 170 Statement . . . . . . . . . . . . . . . . . . . . . . . 173
14.3. Error Message for Data That Violates a min-elements 14.3. Error Message for Data That Violates a min-elements
Statement . . . . . . . . . . . . . . . . . . . . . . . 170 Statement . . . . . . . . . . . . . . . . . . . . . . . 173
14.4. Error Message for Data That Violates a must Statement . 171 14.4. Error Message for Data That Violates a must Statement . 173
14.5. Error Message for Data That Violates a require-instance 14.5. Error Message for Data That Violates a require-instance
Statement . . . . . . . . . . . . . . . . . . . . . . . 171 Statement . . . . . . . . . . . . . . . . . . . . . . . 174
14.6. Error Message for Data That Does Not Match a leafref 14.6. Error Message for Data That Does Not Match a leafref
Type . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Type . . . . . . . . . . . . . . . . . . . . . . . . . . 174
14.7. Error Message for Data That Violates a mandatory choice 14.7. Error Message for Data That Violates a mandatory choice
Statement . . . . . . . . . . . . . . . . . . . . . . . 171 Statement . . . . . . . . . . . . . . . . . . . . . . . 174
14.8. Error Message for the "insert" Operation . . . . . . . . 172 14.8. Error Message for the "insert" Operation . . . . . . . . 174
15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 172 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 175
15.1. Media type application/yang . . . . . . . . . . . . . . 173 15.1. Media type application/yang . . . . . . . . . . . . . . 176
15.2. Media type application/yin+xml . . . . . . . . . . . . . 174 15.2. Media type application/yin+xml . . . . . . . . . . . . . 176
16. Security Considerations . . . . . . . . . . . . . . . . . . . 176 16. Security Considerations . . . . . . . . . . . . . . . . . . . 178
17. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 176 17. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 178
18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 177 18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 179
19. ChangeLog . . . . . . . . . . . . . . . . . . . . . . . . . . 177 19. ChangeLog . . . . . . . . . . . . . . . . . . . . . . . . . . 179
19.1. Version -01 . . . . . . . . . . . . . . . . . . . . . . 177 19.1. Version -02 . . . . . . . . . . . . . . . . . . . . . . 179
19.2. Version -00 . . . . . . . . . . . . . . . . . . . . . . 177 19.2. Version -01 . . . . . . . . . . . . . . . . . . . . . . 179
20. References . . . . . . . . . . . . . . . . . . . . . . . . . 177 19.3. Version -00 . . . . . . . . . . . . . . . . . . . . . . 180
20.1. Normative References . . . . . . . . . . . . . . . . . . 178 20. References . . . . . . . . . . . . . . . . . . . . . . . . . 180
20.2. Informative References . . . . . . . . . . . . . . . . . 179 20.1. Normative References . . . . . . . . . . . . . . . . . . 180
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 179 20.2. Informative References . . . . . . . . . . . . . . . . . 181
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 182
1. Introduction 1. Introduction
YANG is a data modeling language used to model configuration and YANG is a data modeling language used to model configuration and
state data manipulated by the Network Configuration Protocol state data manipulated by the Network Configuration Protocol
(NETCONF), NETCONF remote procedure calls, and NETCONF notifications. (NETCONF), NETCONF remote procedure calls, and NETCONF notifications.
YANG is used to model the operations and content layers of NETCONF YANG is used to model the operations and content layers of NETCONF
(see the NETCONF Configuration Protocol [RFC6241], Section 1.2). (see the NETCONF Configuration Protocol [RFC6241], Section 1.2).
This document describes the syntax and semantics of the YANG This document describes the syntax and semantics of the YANG
skipping to change at page 8, line 37 skipping to change at page 8, line 38
are used to manipulate the data. are used to manipulate the data.
1.1. Summary of Changes from RFC 6020 1.1. Summary of Changes from RFC 6020
This document defines version 1.1 of the YANG language. YANG version This document defines version 1.1 of the YANG language. YANG version
1.1 is a maintenance release of the YANG language, addressing 1.1 is a maintenance release of the YANG language, addressing
ambiguities and defects in the original specification [RFC6020]. ambiguities and defects in the original specification [RFC6020].
o Changed the YANG version from "1" to "1.1". o Changed the YANG version from "1" to "1.1".
o Made noncharacters illegal in the built-in type "string".
o Defined the legal characters in YANG modules.
o Made the "yang-version" statement mandatory. o Made the "yang-version" statement mandatory.
o Changed the rules for the interpretation of escaped characters in o Changed the rules for the interpretation of escaped characters in
double quoted strings. This is an backwards incompatible change double quoted strings. This is an backwards incompatible change
from YANG 1.0. A module that uses a character sequence that is from YANG 1.0. A module that uses a character sequence that is
now illegal must change the string to match the new rules. See now illegal must change the string to match the new rules. See
Section 6.1.3 for details. Section 6.1.3 for details.
o Extended the "if-feature" syntax to be a boolean expression over o Extended the "if-feature" syntax to be a boolean expression over
feature names. feature names.
o Allow "if-feature" in "bit", "enum", and "identity".
o Added a set of new XPath functions in Section 10. o Added a set of new XPath functions in Section 10.
o Clarified the XPath context's tree in Section 6.4.1.
o Allow "must" in "input", "output", and "notification".
o Added a new substatement "modifier" to pattern (see o Added a new substatement "modifier" to pattern (see
Section 9.4.6). Section 9.4.6).
o Defined the string value of an identityref in XPath expressions o Defined the string value of an identityref in XPath expressions
(see Section 9.10). (see Section 9.10).
o Allow "if-feature" in "refine". o Allow "if-feature" in "refine".
o Made "when" and "if-feature" illegal on list keys, unless the o Made "when" and "if-feature" illegal on list keys, unless the
parent is also conditional, and the condition matches the parent's parent is also conditional, and the condition matches the parent's
skipping to change at page 34, line 38 skipping to change at page 35, line 38
6. YANG Syntax 6. YANG Syntax
The YANG syntax is similar to that of SMIng [RFC3780] and programming The YANG syntax is similar to that of SMIng [RFC3780] and programming
languages like C and C++. This C-like syntax was chosen specifically languages like C and C++. This C-like syntax was chosen specifically
for its readability, since YANG values the time and effort of the for its readability, since YANG values the time and effort of the
readers of models above those of modules writers and YANG tool-chain readers of models above those of modules writers and YANG tool-chain
developers. This section introduces the YANG syntax. developers. This section introduces the YANG syntax.
YANG modules use the UTF-8 [RFC3629] character encoding. YANG modules use the UTF-8 [RFC3629] character encoding.
Legal characters in YANG modules are the Unicode and ISO/IEC 10646
[ISO.10646] characters, including tab, carriage return, and line feed
but excluding the other C0 control characters, the surrogate blocks,
and the noncharacters. The character syntax is formally defined by
the rule "yang-char" in Section 13.
6.1. Lexical Tokenization 6.1. Lexical Tokenization
YANG modules are parsed as a series of tokens. This section details YANG modules are parsed as a series of tokens. This section details
the rules for recognizing tokens from an input stream. YANG the rules for recognizing tokens from an input stream. YANG
tokenization rules are both simple and powerful. The simplicity is tokenization rules are both simple and powerful. The simplicity is
driven by a need to keep the parsers easy to implement, while the driven by a need to keep the parsers easy to implement, while the
power is driven by the fact that modelers need to express their power is driven by the fact that modelers need to express their
models in readable formats. models in readable formats.
6.1.1. Comments 6.1.1. Comments
skipping to change at page 39, line 20 skipping to change at page 40, line 30
o The function library is the core function library defined in o The function library is the core function library defined in
[XPATH], and the functions defined in Section 10. [XPATH], and the functions defined in Section 10.
o The set of variable bindings is empty. o The set of variable bindings is empty.
The mechanism for handling unprefixed names is adopted from XPath 2.0 The mechanism for handling unprefixed names is adopted from XPath 2.0
[XPATH2.0], and helps simplify XPath expressions in YANG. No [XPATH2.0], and helps simplify XPath expressions in YANG. No
ambiguity may ever arise because YANG node identifiers are always ambiguity may ever arise because YANG node identifiers are always
qualified names with a non-null namespace URI. qualified names with a non-null namespace URI.
The accessible tree depends on where the statement with the XPath
expression is defined:
o If the XPath expression is defined in substatement to a data node
that represents configuration, the accessible tree is the data in
the NETCONF datastore where the context node exists. The root
node has all top-level configuration data nodes in all modules as
children.
o If the XPath expression is defined in a substatement to a data
node that represents state data, the accessible tree is all all
state data on the device, and the "running" datastore. The root
node has all top-level data nodes in all modules as children.
o If the XPath expression is defined in a substatement to a
"notification" statement, the accessible tree is the notification
instance, all state data on the device, and the "running"
datastore. The root node has the node representing the
notification being defined and all top-level data nodes in all
modules as children.
o If the XPath expression is defined in a substatement to an "input"
statement in an "rpc" statement, the accessible tree is the RPC
operation instance, all state data on the device, and the
"running" datastore. The root node has the node representing the
operation being defined and all top-level data nodes in all
modules as children. The node representing the operation being
defined has the operation's input parameters as children.
o If the XPath expression is defined in a substatement to an
"output" statement in an "rpc" statement, the accessible tree is
the RPC operation's output, all state data on the device, and the
"running" datastore. The root node has the node representing the
operation being defined and all top-level data nodes in all
modules as children. The node representing the operation being
defined has the operation's output parameters as children.
In the accessible tree, all leafs with default values in use exist
(See Section 7.6.1).
If a node that exists in the accessible tree has a non-presence
container as a child, then the non-presence container also exists in
the tree.
The context node varies with the YANG XPath expression, and is The context node varies with the YANG XPath expression, and is
specified where the YANG statement with the XPath expression is specified where the YANG statement with the XPath expression is
defined. defined.
6.5. Schema Node Identifier 6.5. Schema Node Identifier
A schema node identifier is a string that identifies a node in the A schema node identifier is a string that identifies a node in the
schema tree. It has two forms, "absolute" and "descendant", defined schema tree. It has two forms, "absolute" and "descendant", defined
by the rules "absolute-schema-nodeid" and "descendant-schema-nodeid" by the rules "absolute-schema-nodeid" and "descendant-schema-nodeid"
in Section 13, respectively. A schema node identifier consists of a in Section 13, respectively. A schema node identifier consists of a
skipping to change at page 53, line 44 skipping to change at page 56, line 44
conceptually evaluated once for each data node in the data tree, and conceptually evaluated once for each data node in the data tree, and
for all leafs with default values in use (see Section 7.6.1). If a for all leafs with default values in use (see Section 7.6.1). If a
data node does not exist in the data tree, and it does not have a data node does not exist in the data tree, and it does not have a
default value, its "must" statements are not evaluated. default value, its "must" statements are not evaluated.
All such constraints MUST evaluate to true for the data to be valid. All such constraints MUST evaluate to true for the data to be valid.
The XPath expression is conceptually evaluated in the following The XPath expression is conceptually evaluated in the following
context, in addition to the definition in Section 6.4.1: context, in addition to the definition in Section 6.4.1:
o The context node is the node in the data tree for which the "must" o The context node is the node in the accessible tree for which the
statement is defined. "must" statement is defined.
o The accessible tree is made up of all nodes in the data tree, and
all leafs with default values in use (see Section 7.6.1).
The accessible tree depends on the context node:
o If the context node represents configuration, the tree is the data
in the NETCONF datastore where the context node exists. The XPath
root node has all top-level configuration data nodes in all
modules as children.
o If the context node represents state data, the tree is all state
data on the device, and the "running" datastore. The XPath root
node has all top-level data nodes in all modules as children.
o If the context node represents notification content, the tree is
the notification XML instance document. The XPath root node has
the element representing the notification being defined as the
only child.
o If the context node represents RPC input parameters, the tree is
the RPC XML instance document. The XPath root node has the
element representing the RPC operation being defined as the only
child.
o If the context node represents RPC output parameters, the tree is
the RPC reply instance document. The XPath root node has the
elements representing the RPC output parameters as children.
The result of the XPath expression is converted to a boolean value The result of the XPath expression is converted to a boolean value
using the standard XPath rules. using the standard XPath rules.
Note that since all leaf values in the data tree are conceptually Note that since all leaf values in the data tree are conceptually
stored in their canonical form (see Section 7.6 and Section 7.7), any stored in their canonical form (see Section 7.6 and Section 7.7), any
XPath comparisons are done on the canonical value. XPath comparisons are done on the canonical value.
Also note that the XPath expression is conceptually evaluated. This Also note that the XPath expression is conceptually evaluated. This
means that an implementation does not have to use an XPath evaluator means that an implementation does not have to use an XPath evaluator
skipping to change at page 88, line 27 skipping to change at page 91, line 27
+--------------+---------+-------------+ +--------------+---------+-------------+
| substatement | section | cardinality | | substatement | section | cardinality |
+--------------+---------+-------------+ +--------------+---------+-------------+
| anyxml | 7.10 | 0..n | | anyxml | 7.10 | 0..n |
| choice | 7.9 | 0..n | | choice | 7.9 | 0..n |
| container | 7.5 | 0..n | | container | 7.5 | 0..n |
| grouping | 7.11 | 0..n | | grouping | 7.11 | 0..n |
| leaf | 7.6 | 0..n | | leaf | 7.6 | 0..n |
| leaf-list | 7.7 | 0..n | | leaf-list | 7.7 | 0..n |
| list | 7.8 | 0..n | | list | 7.8 | 0..n |
| must | 7.5.3 | 0..n |
| typedef | 7.3 | 0..n | | typedef | 7.3 | 0..n |
| uses | 7.12 | 0..n | | uses | 7.12 | 0..n |
+--------------+---------+-------------+ +--------------+---------+-------------+
7.13.3. The output Statement 7.13.3. The output Statement
The "output" statement, which is optional, is used to define output The "output" statement, which is optional, is used to define output
parameters to the RPC operation. It does not take an argument. The parameters to the RPC operation. It does not take an argument. The
substatements to "output" define nodes under the RPC's output node. substatements to "output" define nodes under the RPC's output node.
skipping to change at page 89, line 17 skipping to change at page 92, line 17
+--------------+---------+-------------+ +--------------+---------+-------------+
| substatement | section | cardinality | | substatement | section | cardinality |
+--------------+---------+-------------+ +--------------+---------+-------------+
| anyxml | 7.10 | 0..n | | anyxml | 7.10 | 0..n |
| choice | 7.9 | 0..n | | choice | 7.9 | 0..n |
| container | 7.5 | 0..n | | container | 7.5 | 0..n |
| grouping | 7.11 | 0..n | | grouping | 7.11 | 0..n |
| leaf | 7.6 | 0..n | | leaf | 7.6 | 0..n |
| leaf-list | 7.7 | 0..n | | leaf-list | 7.7 | 0..n |
| list | 7.8 | 0..n | | list | 7.8 | 0..n |
| must | 7.5.3 | 0..n |
| typedef | 7.3 | 0..n | | typedef | 7.3 | 0..n |
| uses | 7.12 | 0..n | | uses | 7.12 | 0..n |
+--------------+---------+-------------+ +--------------+---------+-------------+
7.13.4. XML Mapping Rules 7.13.4. XML Mapping Rules
An rpc node is encoded as a child XML element to the <rpc> element An rpc node is encoded as a child XML element to the <rpc> element
defined in [RFC6241]. The element's local name is the rpc's defined in [RFC6241]. The element's local name is the rpc's
identifier, and its namespace is the module's XML namespace (see identifier, and its namespace is the module's XML namespace (see
Section 7.1.3). Section 7.1.3).
skipping to change at page 91, line 19 skipping to change at page 94, line 19
+--------------+---------+-------------+ +--------------+---------+-------------+
| anyxml | 7.10 | 0..n | | anyxml | 7.10 | 0..n |
| choice | 7.9 | 0..n | | choice | 7.9 | 0..n |
| container | 7.5 | 0..n | | container | 7.5 | 0..n |
| description | 7.19.3 | 0..1 | | description | 7.19.3 | 0..1 |
| grouping | 7.11 | 0..n | | grouping | 7.11 | 0..n |
| if-feature | 7.18.2 | 0..n | | if-feature | 7.18.2 | 0..n |
| leaf | 7.6 | 0..n | | leaf | 7.6 | 0..n |
| leaf-list | 7.7 | 0..n | | leaf-list | 7.7 | 0..n |
| list | 7.8 | 0..n | | list | 7.8 | 0..n |
| must | 7.5.3 | 0..n |
| reference | 7.19.4 | 0..1 | | reference | 7.19.4 | 0..1 |
| status | 7.19.2 | 0..1 | | status | 7.19.2 | 0..1 |
| typedef | 7.3 | 0..n | | typedef | 7.3 | 0..n |
| uses | 7.12 | 0..n | | uses | 7.12 | 0..n |
+--------------+---------+-------------+ +--------------+---------+-------------+
7.14.2. XML Mapping Rules 7.14.2. XML Mapping Rules
A notification node is encoded as a child XML element to the A notification node is encoded as a child XML element to the
<notification> element defined in NETCONF Event Notifications <notification> element defined in NETCONF Event Notifications
skipping to change at page 96, line 9 skipping to change at page 99, line 9
The built-in datatype "identityref" (see Section 9.10) can be used to The built-in datatype "identityref" (see Section 9.10) can be used to
reference identities within a data model. reference identities within a data model.
7.16.1. The identity's Substatements 7.16.1. The identity's Substatements
+--------------+---------+-------------+ +--------------+---------+-------------+
| substatement | section | cardinality | | substatement | section | cardinality |
+--------------+---------+-------------+ +--------------+---------+-------------+
| base | 7.16.2 | 0..1 | | base | 7.16.2 | 0..1 |
| description | 7.19.3 | 0..1 | | description | 7.19.3 | 0..1 |
| if-feature | 7.18.2 | 0..n |
| reference | 7.19.4 | 0..1 | | reference | 7.19.4 | 0..1 |
| status | 7.19.2 | 0..1 | | status | 7.19.2 | 0..1 |
+--------------+---------+-------------+ +--------------+---------+-------------+
7.16.2. The base Statement 7.16.2. The base Statement
The "base" statement, which is optional, takes as an argument a The "base" statement, which is optional, takes as an argument a
string that is the name of an existing identity, from which the new string that is the name of an existing identity, from which the new
identity is derived. If no "base" statement is present, the identity identity is derived. If no "base" statement is present, the identity
is defined from scratch. is defined from scratch.
skipping to change at page 107, line 14 skipping to change at page 110, line 14
the target node is a data node. Otherwise, the context node is the target node is a data node. Otherwise, the context node is
the closest ancestor node to the target node that is also a data the closest ancestor node to the target node that is also a data
node. node.
o If the "when" statement is a child of a "uses", "choice", or o If the "when" statement is a child of a "uses", "choice", or
"case" statement, then the context node is the closest ancestor "case" statement, then the context node is the closest ancestor
node to the "uses", "choice", or "case" node that is also a data node to the "uses", "choice", or "case" node that is also a data
node. node.
o If the "when" statement is a child of any other data definition o If the "when" statement is a child of any other data definition
statement, the context node is the data definition's node in the statement, the context node is the node in the accessible tree for
data tree. which the "when" statement is defined.
o The accessible tree is made up of all nodes in the data tree, and
all leafs with default values in use (see Section 7.6.1).
The accessible tree depends on the context node:
o If the context node represents configuration, the tree is the data
in the NETCONF datastore where the context node exists. The XPath
root node has all top-level configuration data nodes in all
modules as children.
o If the context node represents state data, the tree is all state
data on the device, and the "running" datastore. The XPath root
node has all top-level data nodes in all modules as children.
o If the context node represents notification content, the tree is
the notification XML instance document. The XPath root node has
the element representing the notification being defined as the
only child.
o If the context node represents RPC input parameters, the tree is
the RPC XML instance document. The XPath root node has the
element representing the RPC operation being defined as the only
child.
o If the context node represents RPC output parameters, the tree is
the RPC reply instance document. The XPath root node has the
elements representing the RPC output parameters as children.
The result of the XPath expression is converted to a boolean value The result of the XPath expression is converted to a boolean value
using the standard XPath rules. using the standard XPath rules.
Note that the XPath expression is conceptually evaluated. This means Note that the XPath expression is conceptually evaluated. This means
that an implementation does not have to use an XPath evaluator on the that an implementation does not have to use an XPath evaluator on the
device. The "when" statement can very well be implemented with device. The "when" statement can very well be implemented with
specially written code. specially written code.
8. Constraints 8. Constraints
skipping to change at page 116, line 8 skipping to change at page 118, line 40
typedef my-decimal { typedef my-decimal {
type decimal64 { type decimal64 {
fraction-digits 2; fraction-digits 2;
range "1 .. 3.14 | 10 | 20..max"; range "1 .. 3.14 | 10 | 20..max";
} }
} }
9.4. The string Built-In Type 9.4. The string Built-In Type
The string built-in type represents human-readable strings in YANG. The string built-in type represents human-readable strings in YANG.
Legal characters are tab, carriage return, line feed, and the legal Legal characters are the Unicode and ISO/IEC 10646 [ISO.10646]
characters of Unicode and ISO/IEC 10646 [ISO.10646]: characters, including tab, carriage return, and line feed but
excluding the other C0 control characters, the surrogate blocks, and
;; any Unicode character, excluding the surrogate blocks, the noncharacters. The string syntax is formally defined by the rule
;; FFFE, and FFFF. "yang-string" in Section 13.
string = *char
char = %x9 / %xA / %xD / %x20-D7FF / %xE000-FFFD /
%x10000-10FFFF
9.4.1. Lexical Representation 9.4.1. Lexical Representation
A string value is lexically represented as character data in the XML A string value is lexically represented as character data in the XML
instance documents. instance documents.
9.4.2. Canonical Form 9.4.2. Canonical Form
The canonical form is the same as the lexical representation. No The canonical form is the same as the lexical representation. No
Unicode normalization is performed of string values. Unicode normalization is performed of string values.
skipping to change at page 120, line 34 skipping to change at page 123, line 11
holds detailed enum information. holds detailed enum information.
All assigned names in an enumeration MUST be unique. All assigned names in an enumeration MUST be unique.
9.6.4.1. The enum's Substatements 9.6.4.1. The enum's Substatements
+--------------+---------+-------------+ +--------------+---------+-------------+
| substatement | section | cardinality | | substatement | section | cardinality |
+--------------+---------+-------------+ +--------------+---------+-------------+
| description | 7.19.3 | 0..1 | | description | 7.19.3 | 0..1 |
| if-feature | 7.18.2 | 0..n |
| reference | 7.19.4 | 0..1 | | reference | 7.19.4 | 0..1 |
| status | 7.19.2 | 0..1 | | status | 7.19.2 | 0..1 |
| value | 9.6.4.2 | 0..1 | | value | 9.6.4.2 | 0..1 |
+--------------+---------+-------------+ +--------------+---------+-------------+
9.6.4.2. The value Statement 9.6.4.2. The value Statement
The "value" statement, which is optional, is used to associate an The "value" statement, which is optional, is used to associate an
integer value with the assigned name for the enum. This integer integer value with the assigned name for the enum. This integer
value MUST be in the range -2147483648 to 2147483647, and it MUST be value MUST be in the range -2147483648 to 2147483647, and it MUST be
skipping to change at page 122, line 17 skipping to change at page 124, line 45
identifier (see Section 6.2). identifier (see Section 6.2).
All assigned names in a bits type MUST be unique. All assigned names in a bits type MUST be unique.
9.7.4.1. The bit's Substatements 9.7.4.1. The bit's Substatements
+--------------+---------+-------------+ +--------------+---------+-------------+
| substatement | section | cardinality | | substatement | section | cardinality |
+--------------+---------+-------------+ +--------------+---------+-------------+
| description | 7.19.3 | 0..1 | | description | 7.19.3 | 0..1 |
| if-feature | 7.18.2 | 0..n |
| reference | 7.19.4 | 0..1 | | reference | 7.19.4 | 0..1 |
| status | 7.19.2 | 0..1 | | status | 7.19.2 | 0..1 |
| position | 9.7.4.2 | 0..1 | | position | 9.7.4.2 | 0..1 |
+--------------+---------+-------------+ +--------------+---------+-------------+
9.7.4.2. The position Statement 9.7.4.2. The position Statement
The "position" statement, which is optional, takes as an argument a The "position" statement, which is optional, takes as an argument a
non-negative integer value that specifies the bit's position within a non-negative integer value that specifies the bit's position within a
hypothetical bit field. The position value MUST be in the range 0 to hypothetical bit field. The position value MUST be in the range 0 to
skipping to change at page 125, line 5 skipping to change at page 127, line 34
The "path" expression evaluates to a node set consisting of zero, The "path" expression evaluates to a node set consisting of zero,
one, or more nodes. If the leaf with the leafref type represents one, or more nodes. If the leaf with the leafref type represents
configuration data, this node set MUST be non-empty. configuration data, this node set MUST be non-empty.
The "path" XPath expression is conceptually evaluated in the The "path" XPath expression is conceptually evaluated in the
following context, in addition to the definition in Section 6.4.1: following context, in addition to the definition in Section 6.4.1:
o The context node is the node in the data tree for which the "path" o The context node is the node in the data tree for which the "path"
statement is defined. statement is defined.
The accessible tree depends on the context node:
o If the context node represents configuration data, the tree is the
data in the NETCONF datastore where the context node exists. The
XPath root node has all top-level configuration data nodes in all
modules as children.
o Otherwise, the tree is all state data on the device, and the
"running" datastore. The XPath root node has all top-level data
nodes in all modules as children.
9.9.3. The require-instance Statement 9.9.3. The require-instance Statement
The "require-instance" statement, which is a substatement to the The "require-instance" statement, which is a substatement to the
"type" statement, MAY be present if the type is "instance-identifier" "type" statement, MAY be present if the type is "instance-identifier"
or "leafref". It takes as an argument the string "true" or "false". or "leafref". It takes as an argument the string "true" or "false".
If this statement is not present, it defaults to "true". If this statement is not present, it defaults to "true".
If "require-instance" is "true", it means that the instance being If "require-instance" is "true", it means that the instance being
referred MUST exist for the data to be valid. This constraint is referred MUST exist for the data to be valid. This constraint is
enforced according to the rules in Section 8. enforced according to the rules in Section 8.
skipping to change at page 131, line 25 skipping to change at page 133, line 25
base "crypto:crypto-alg"; base "crypto:crypto-alg";
} }
leaf crypto { leaf crypto {
type identityref { type identityref {
base "crypto:crypto-alg"; base "crypto:crypto-alg";
} }
} }
container aes-parameters { container aes-parameters {
when "../crypto = 'mc:aes'; when "../crypto = 'mc:aes'";
... ...
} }
} }
the following is an example how the leaf "crypto" can be encoded, if the following is an example how the leaf "crypto" can be encoded, if
the value is the "des3" identity defined in the "des" module: the value is the "des3" identity defined in the "des" module:
<crypto xmlns:des="http://example.com/des">des:des3</crypto> <crypto xmlns:des="http://example.com/des">des:des3</crypto>
Any prefixes used in the encoding are local to each instance Any prefixes used in the encoding are local to each instance
skipping to change at page 135, line 22 skipping to change at page 137, line 22
their default value in use (see Section 7.6.1) for the data to be their default value in use (see Section 7.6.1) for the data to be
valid. This constraint is enforced according to the rules in valid. This constraint is enforced according to the rules in
Section 8. Section 8.
The "instance-identifier" XPath expression is conceptually evaluated The "instance-identifier" XPath expression is conceptually evaluated
in the following context, in addition to the definition in in the following context, in addition to the definition in
Section 6.4.1: Section 6.4.1:
o The context node is the root node in the accessible tree. o The context node is the root node in the accessible tree.
The accessible tree depends on the leaf with the instance-identifier
type:
o If this leaf represents configuration data, the tree is the data
in the NETCONF datastore where the leaf exists. The XPath root
node has all top-level configuration data nodes in all modules as
children.
o Otherwise, the tree is all state data on the device, and the
"running" datastore. The XPath root node has all top-level data
nodes in all modules as children.
9.13.1. Restrictions 9.13.1. Restrictions
An instance-identifier can be restricted with the "require-instance" An instance-identifier can be restricted with the "require-instance"
statement (Section 9.9.3). statement (Section 9.9.3).
9.13.2. Lexical Representation 9.13.2. Lexical Representation
An instance-identifier value is lexically represented as a string. An instance-identifier value is lexically represented as a string.
All node names in an instance-identifier value MUST be qualified with All node names in an instance-identifier value MUST be qualified with
explicit namespace prefixes, and these prefixes MUST be declared in explicit namespace prefixes, and these prefixes MUST be declared in
skipping to change at page 150, line 49 skipping to change at page 152, line 49
yin-element-arg-str = < a string that matches the rule yin-element-arg-str = < a string that matches the rule
yin-element-arg > yin-element-arg >
yin-element-arg = true-keyword / false-keyword yin-element-arg = true-keyword / false-keyword
identity-stmt = identity-keyword sep identifier-arg-str optsep identity-stmt = identity-keyword sep identifier-arg-str optsep
(";" / (";" /
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(if-feature-stmt stmtsep)
[base-stmt stmtsep] [base-stmt stmtsep]
[status-stmt stmtsep] [status-stmt stmtsep]
[description-stmt stmtsep] [description-stmt stmtsep]
[reference-stmt stmtsep]
[reference-stmt stmtsep]
"}") "}")
base-stmt = base-keyword sep identifier-ref-arg-str base-stmt = base-keyword sep identifier-ref-arg-str
optsep stmtend optsep stmtend
feature-stmt = feature-keyword sep identifier-arg-str optsep feature-stmt = feature-keyword sep identifier-arg-str optsep
(";" / (";" /
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(if-feature-stmt stmtsep) *(if-feature-stmt stmtsep)
skipping to change at page 151, line 26 skipping to change at page 153, line 27
[description-stmt stmtsep] [description-stmt stmtsep]
[reference-stmt stmtsep] [reference-stmt stmtsep]
"}") "}")
if-feature-stmt = if-feature-keyword sep if-feature-expr-str if-feature-stmt = if-feature-keyword sep if-feature-expr-str
optsep stmtend optsep stmtend
if-feature-expr-str = < a string that matches the rule if-feature-expr-str = < a string that matches the rule
if-feature-expr > if-feature-expr >
if-feature-expr = '(' if-fature-expr ')' / if-feature-expr = '(' if-feature-expr ')' /
if-feature-expr sep boolean-operator sep if-feature-expr sep boolean-operator sep
if-feature-expr / if-feature-expr /
'not' sep if-feature-expr / 'not' sep if-feature-expr /
identifier-ref-arg identifier-ref-arg
boolean-operator = 'and' / 'or' boolean-operator = 'and' / 'or'
typedef-stmt = typedef-keyword sep identifier-arg-str optsep typedef-stmt = typedef-keyword sep identifier-arg-str optsep
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
skipping to change at page 153, line 31 skipping to change at page 155, line 33
modifier-arg = invert-match-keyword modifier-arg = invert-match-keyword
default-stmt = default-keyword sep string stmtend default-stmt = default-keyword sep string stmtend
enum-specification = 1*(enum-stmt stmtsep) enum-specification = 1*(enum-stmt stmtsep)
enum-stmt = enum-keyword sep string optsep enum-stmt = enum-keyword sep string optsep
(";" / (";" /
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(if-feature-stmt stmtsep)
[value-stmt stmtsep] [value-stmt stmtsep]
[status-stmt stmtsep] [status-stmt stmtsep]
[description-stmt stmtsep] [description-stmt stmtsep]
[reference-stmt stmtsep] [reference-stmt stmtsep]
"}") "}")
leafref-specification = leafref-specification =
;; these stmts can appear in any order ;; these stmts can appear in any order
path-stmt stmtsep path-stmt stmtsep
[require-instance-stmt stmtsep] [require-instance-stmt stmtsep]
skipping to change at page 154, line 20 skipping to change at page 156, line 23
union-specification = 1*(type-stmt stmtsep) union-specification = 1*(type-stmt stmtsep)
binary-specification = [length-stmt stmtsep] binary-specification = [length-stmt stmtsep]
bits-specification = 1*(bit-stmt stmtsep) bits-specification = 1*(bit-stmt stmtsep)
bit-stmt = bit-keyword sep identifier-arg-str optsep bit-stmt = bit-keyword sep identifier-arg-str optsep
(";" / (";" /
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(if-feature-stmt stmtsep)
[position-stmt stmtsep] [position-stmt stmtsep]
[status-stmt stmtsep] [status-stmt stmtsep]
[description-stmt stmtsep] [description-stmt stmtsep]
[reference-stmt stmtsep] [reference-stmt stmtsep]
"}") "}")
position-stmt = position-keyword sep position-stmt = position-keyword sep
position-value-arg-str stmtend position-value-arg-str stmtend
position-value-arg-str = < a string that matches the rule position-value-arg-str = < a string that matches the rule
skipping to change at page 161, line 6 skipping to change at page 163, line 8
[reference-stmt stmtsep] [reference-stmt stmtsep]
*((typedef-stmt / *((typedef-stmt /
grouping-stmt) stmtsep) grouping-stmt) stmtsep)
[input-stmt stmtsep] [input-stmt stmtsep]
[output-stmt stmtsep] [output-stmt stmtsep]
"}") "}")
input-stmt = input-keyword optsep input-stmt = input-keyword optsep
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(must-stmt stmtsep)
*((typedef-stmt / *((typedef-stmt /
grouping-stmt) stmtsep) grouping-stmt) stmtsep)
1*(data-def-stmt stmtsep) 1*(data-def-stmt stmtsep)
"}" "}"
output-stmt = output-keyword optsep output-stmt = output-keyword optsep
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(must-stmt stmtsep)
*((typedef-stmt / *((typedef-stmt /
grouping-stmt) stmtsep) grouping-stmt) stmtsep)
1*(data-def-stmt stmtsep) 1*(data-def-stmt stmtsep)
"}" "}"
notification-stmt = notification-keyword sep notification-stmt = notification-keyword sep
identifier-arg-str optsep identifier-arg-str optsep
(";" / (";" /
"{" stmtsep "{" stmtsep
;; these stmts can appear in any order ;; these stmts can appear in any order
*(if-feature-stmt stmtsep) *(if-feature-stmt stmtsep)
*(must-stmt stmtsep)
[status-stmt stmtsep] [status-stmt stmtsep]
[description-stmt stmtsep] [description-stmt stmtsep]
[reference-stmt stmtsep] [reference-stmt stmtsep]
*((typedef-stmt / *((typedef-stmt /
grouping-stmt) stmtsep) grouping-stmt) stmtsep)
*(data-def-stmt stmtsep) *(data-def-stmt stmtsep)
"}") "}")
deviation-stmt = deviation-keyword sep deviation-stmt = deviation-keyword sep
deviation-arg-str optsep deviation-arg-str optsep
skipping to change at page 163, line 11 skipping to change at page 165, line 14
add-keyword-str = < a string that matches the rule add-keyword-str = < a string that matches the rule
add-keyword> add-keyword>
delete-keyword-str = < a string that matches the rule delete-keyword-str = < a string that matches the rule
delete-keyword> delete-keyword>
replace-keyword-str = < a string that matches the rule replace-keyword-str = < a string that matches the rule
replace-keyword> replace-keyword>
;; represents the usage of an extension statement
unknown-statement = prefix ":" identifier [sep string] optsep unknown-statement = prefix ":" identifier [sep string] optsep
(";" / "{" *(yang-stmt stmtsep) "}") (";" /
"{" optsep
*((yang-stmt / unknown-statement) optsep)
"}")
yang-stmt = (anyxml-stmt / yang-stmt = anyxml-stmt /
argument-stmt / argument-stmt /
augment-stmt / augment-stmt /
base-stmt / base-stmt /
belongs-to-stmt / belongs-to-stmt /
bit-stmt / bit-stmt /
case-stmt / case-stmt /
choice-stmt / choice-stmt /
config-stmt / config-stmt /
contact-stmt / contact-stmt /
container-stmt / container-stmt /
default-stmt / default-stmt /
description-stmt / description-stmt /
deviate-add-stmt / deviate-add-stmt /
deviate-delete-stmt / deviate-delete-stmt /
deviate-not-supported-stmt / deviate-not-supported-stmt /
deviate-replace-stmt / deviate-replace-stmt /
deviation-stmt / deviation-stmt /
enum-stmt / enum-stmt /
error-app-tag-stmt / error-app-tag-stmt /
error-message-stmt / error-message-stmt /
extension-stmt / extension-stmt /
feature-stmt / feature-stmt /
fraction-digits-stmt / fraction-digits-stmt /
grouping-stmt / grouping-stmt /
identity-stmt / identity-stmt /
if-feature-stmt / if-feature-stmt /
import-stmt / import-stmt /
include-stmt / include-stmt /
input-stmt / input-stmt /
key-stmt / key-stmt /
leaf-list-stmt / leaf-list-stmt /
leaf-stmt / leaf-stmt /
length-stmt / length-stmt /
list-stmt / list-stmt /
mandatory-stmt / mandatory-stmt /
max-elements-stmt / max-elements-stmt /
min-elements-stmt / min-elements-stmt /
module-stmt / modifier-stmt /
must-stmt / module-stmt /
namespace-stmt / must-stmt /
notification-stmt / namespace-stmt /
ordered-by-stmt / notification-stmt /
organization-stmt / ordered-by-stmt /
output-stmt / organization-stmt /
path-stmt / output-stmt /
pattern-stmt / path-stmt /
position-stmt / pattern-stmt /
prefix-stmt / position-stmt /
presence-stmt / prefix-stmt /
range-stmt / presence-stmt /
reference-stmt / range-stmt /
refine-stmt / reference-stmt /
require-instance-stmt / refine-stmt /
revision-date-stmt / require-instance-stmt /
revision-stmt / revision-date-stmt /
rpc-stmt / revision-stmt /
status-stmt / rpc-stmt /
submodule-stmt / status-stmt /
typedef-stmt / submodule-stmt /
type-stmt / typedef-stmt /
unique-stmt / type-stmt /
units-stmt / unique-stmt /
uses-augment-stmt / units-stmt /
uses-stmt / uses-augment-stmt /
value-stmt / uses-stmt /
when-stmt / value-stmt /
yang-version-stmt / when-stmt /
yin-element-stmt) yang-version-stmt /
yin-element-stmt
;; Ranges ;; Ranges
range-arg-str = < a string that matches the rule range-arg-str = < a string that matches the rule
range-arg > range-arg >
range-arg = range-part *(optsep "|" optsep range-part) range-arg = range-part *(optsep "|" optsep range-part)
range-part = range-boundary range-part = range-boundary
[optsep ".." optsep range-boundary] [optsep ".." optsep range-boundary]
skipping to change at page 168, line 16 skipping to change at page 170, line 22
not-supported-keyword = 'not-supported' not-supported-keyword = 'not-supported'
obsolete-keyword = 'obsolete' obsolete-keyword = 'obsolete'
replace-keyword = 'replace' replace-keyword = 'replace'
system-keyword = 'system' system-keyword = 'system'
true-keyword = 'true' true-keyword = 'true'
unbounded-keyword = 'unbounded' unbounded-keyword = 'unbounded'
user-keyword = 'user' user-keyword = 'user'
current-function-invocation = current-keyword *WSP "(" *WSP ")" current-function-invocation = current-keyword *WSP "(" *WSP ")"
;; Basic Rules ;;; Basic Rules
prefix-arg-str = < a string that matches the rule prefix-arg-str = < a string that matches the rule
prefix-arg > prefix-arg >
prefix-arg = prefix prefix-arg = prefix
prefix = identifier prefix = identifier
identifier-arg-str = < a string that matches the rule identifier-arg-str = < a string that matches the rule
identifier-arg > identifier-arg >
skipping to change at page 168, line 40 skipping to change at page 170, line 46
;; An identifier MUST NOT start with (('X'|'x') ('M'|'m') ('L'|'l')) ;; An identifier MUST NOT start with (('X'|'x') ('M'|'m') ('L'|'l'))
identifier = (ALPHA / "_") identifier = (ALPHA / "_")
*(ALPHA / DIGIT / "_" / "-" / ".") *(ALPHA / DIGIT / "_" / "-" / ".")
identifier-ref-arg-str = < a string that matches the rule identifier-ref-arg-str = < a string that matches the rule
identifier-ref-arg > identifier-ref-arg >
identifier-ref-arg = [prefix ":"] identifier identifier-ref-arg = [prefix ":"] identifier
string = < an unquoted string as returned by string = < an unquoted string as returned by
the scanner > the scanner, that matches the rule
yang-string >
yang-string = *yang-char
;; any Unicode character including tab, carriage return, and line
;; feed, but excluding the other C0 control characters, the surrogate
;; blocks, and the noncharacters.
yang-char = %x9 / %xA / %xD / %x20-D7FF /
; exclude surrogate blocks %xD800-DFFF
%xE000-FDCF / ; exclude noncharacters %xFDD0-FDEF
%xFDF0-FFFD / ; exclude noncharacters %xFFFE-FFFF
%x10000-1FFFD / ; exclude noncharacters %x1FFFE-1FFFF
%x20000-2FFFD / ; exclude noncharacters %x2FFFE-2FFFF
%x30000-3FFFD / ; exclude noncharacters %x3FFFE-3FFFF
%x40000-4FFFD / ; exclude noncharacters %x4FFFE-4FFFF
%x50000-5FFFD / ; exclude noncharacters %x5FFFE-5FFFF
%x60000-6FFFD / ; exclude noncharacters %x6FFFE-6FFFF
%x70000-7FFFD / ; exclude noncharacters %x7FFFE-7FFFF
%x80000-8FFFD / ; exclude noncharacters %x8FFFE-8FFFF
%x90000-9FFFD / ; exclude noncharacters %x9FFFE-9FFFF
%xA0000-AFFFD / ; exclude noncharacters %xAFFFE-AFFFF
%xB0000-BFFFD / ; exclude noncharacters %xBFFFE-BFFFF
%xC0000-CFFFD / ; exclude noncharacters %xCFFFE-CFFFF
%xD0000-DFFFD / ; exclude noncharacters %xDFFFE-DFFFF
%xE0000-EFFFD / ; exclude noncharacters %xEFFFE-EFFFF
%xF0000-FFFFD / ; exclude noncharacters %xFFFFE-FFFFF
%x100000-10FFFD ; exclude noncharacters %x10FFFE-10FFFF
integer-value = ("-" non-negative-integer-value) / integer-value = ("-" non-negative-integer-value) /
non-negative-integer-value non-negative-integer-value
non-negative-integer-value = "0" / positive-integer-value non-negative-integer-value = "0" / positive-integer-value
positive-integer-value = (non-zero-digit *DIGIT) positive-integer-value = (non-zero-digit *DIGIT)
zero-integer-value = 1*DIGIT zero-integer-value = 1*DIGIT
skipping to change at page 169, line 20 skipping to change at page 172, line 6
line-break = CRLF / LF line-break = CRLF / LF
non-zero-digit = %x31-39 non-zero-digit = %x31-39
decimal-value = integer-value ("." zero-integer-value) decimal-value = integer-value ("." zero-integer-value)
SQUOTE = %x27 SQUOTE = %x27
; ' (Single Quote) ; ' (Single Quote)
;; ;;; RFC 5234 core rules.
;; RFC 5234 core rules.
;;
ALPHA = %x41-5A / %x61-7A ALPHA = %x41-5A / %x61-7A
; A-Z / a-z ; A-Z / a-z
CR = %x0D CR = %x0D
; carriage return ; carriage return
CRLF = CR LF CRLF = CR LF
; Internet standard new line ; Internet standard new line
skipping to change at page 177, line 17 skipping to change at page 179, line 17
The editor wishes to thank the following individuals, who all The editor wishes to thank the following individuals, who all
provided helpful comments on various versions of this document: provided helpful comments on various versions of this document:
Mehmet Ersue, Washam Fan, Joel Halpern, Leif Johansson, Ladislav Mehmet Ersue, Washam Fan, Joel Halpern, Leif Johansson, Ladislav
Lhotka, Gerhard Muenz, Tom Petch, Randy Presuhn, David Reid, and Bert Lhotka, Gerhard Muenz, Tom Petch, Randy Presuhn, David Reid, and Bert
Wijnen. Wijnen.
19. ChangeLog 19. ChangeLog
RFC Editor: remove this section upon publication as an RFC. RFC Editor: remove this section upon publication as an RFC.
19.1. Version -01 19.1. Version -02
o Included solution Y02-01.
o Included solution Y04-02.
o Included solution Y11-01.
o Included solution Y41-01.
o Included solution Y56-01.
19.2. Version -01
o Included solution Y01-01. o Included solution Y01-01.
o Included solution Y03-01. o Included solution Y03-01.
o Included solution Y06-02. o Included solution Y06-02.
o Included solution Y07-01. o Included solution Y07-01.
o Included solution Y14-01. o Included solution Y14-01.
skipping to change at page 177, line 41 skipping to change at page 180, line 5
o Included solution Y23-01. o Included solution Y23-01.
o Included solution Y29-01. o Included solution Y29-01.
o Included solution Y30-01. o Included solution Y30-01.
o Included solution Y31-01. o Included solution Y31-01.
o Included solution Y35-01. o Included solution Y35-01.
19.2. Version -00 19.3. Version -00
o Applied all reported errata for RFC 6020. o Applied all reported errata for RFC 6020.
o Updated YANG version to 1.1, and made the "yang-version" statement o Updated YANG version to 1.1, and made the "yang-version" statement
mandatory. mandatory.
20. References 20. References
20.1. Normative References 20.1. Normative References
[ISO.10646] [ISO.10646]
International Organization for Standardization, International Organization for Standardization,
"Information Technology - Universal Multiple-Octet Coded "Information Technology - Universal Multiple-Octet Coded
Character Set (UCS)", ISO Standard 10646:2003, 2003. Character Set (UCS)", ISO Standard 10646:2003, 2003.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
 End of changes. 50 change blocks. 
442 lines changed or deleted 476 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/