draft-ietf-netmod-rfc6020bis-02.txt | draft-ietf-netmod-rfc6020bis-03.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) November 14, 2014 | Obsoletes: 6020 (if approved) January 5, 2015 | |||
Intended status: Standards Track | Intended status: Standards Track | |||
Expires: May 18, 2015 | Expires: July 9, 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-02 | draft-ietf-netmod-rfc6020bis-03 | |||
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 May 18, 2015. | This Internet-Draft will expire on July 9, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2015 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 | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
skipping to change at page 2, line 24 | skipping to change at page 2, line 24 | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
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 . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
3.1. Mandatory Nodes . . . . . . . . . . . . . . . . . . . . . 12 | 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 . . . . . . . . . . . . . . . . . . . . 14 | 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 . . . . . . . . . . . . . . . . 15 | |||
4.2.3. State Data . . . . . . . . . . . . . . . . . . . . . 19 | 4.2.3. State Data . . . . . . . . . . . . . . . . . . . . . 19 | |||
4.2.4. Built-In Types . . . . . . . . . . . . . . . . . . . 19 | 4.2.4. Built-In Types . . . . . . . . . . . . . . . . . . . 19 | |||
4.2.5. Derived Types (typedef) . . . . . . . . . . . . . . . 20 | 4.2.5. Derived Types (typedef) . . . . . . . . . . . . . . . 20 | |||
4.2.6. Reusable Node Groups (grouping) . . . . . . . . . . . 21 | 4.2.6. Reusable Node Groups (grouping) . . . . . . . . . . . 21 | |||
4.2.7. Choices . . . . . . . . . . . . . . . . . . . . . . . 22 | 4.2.7. Choices . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
4.2.8. Extending Data Models (augment) . . . . . . . . . . . 23 | 4.2.8. Extending Data Models (augment) . . . . . . . . . . . 23 | |||
4.2.9. RPC Definitions . . . . . . . . . . . . . . . . . . . 24 | 4.2.9. RPC Definitions . . . . . . . . . . . . . . . . . . . 24 | |||
4.2.10. Notification Definitions . . . . . . . . . . . . . . 25 | 4.2.10. Notification Definitions . . . . . . . . . . . . . . 25 | |||
5. Language Concepts . . . . . . . . . . . . . . . . . . . . . . 26 | 5. Language Concepts . . . . . . . . . . . . . . . . . . . . . . 26 | |||
5.1. Modules and Submodules . . . . . . . . . . . . . . . . . 26 | 5.1. Modules and Submodules . . . . . . . . . . . . . . . . . 26 | |||
skipping to change at page 3, line 19 | skipping to change at page 3, line 19 | |||
6.1.1. Comments . . . . . . . . . . . . . . . . . . . . . . 36 | 6.1.1. Comments . . . . . . . . . . . . . . . . . . . . . . 36 | |||
6.1.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 36 | 6.1.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
6.1.3. Quoting . . . . . . . . . . . . . . . . . . . . . . . 36 | 6.1.3. Quoting . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
6.2. Identifiers . . . . . . . . . . . . . . . . . . . . . . . 37 | 6.2. Identifiers . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
6.2.1. Identifiers and Their Namespaces . . . . . . . . . . 38 | 6.2.1. Identifiers and Their Namespaces . . . . . . . . . . 38 | |||
6.3. Statements . . . . . . . . . . . . . . . . . . . . . . . 39 | 6.3. Statements . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
6.3.1. Language Extensions . . . . . . . . . . . . . . . . . 39 | 6.3.1. Language Extensions . . . . . . . . . . . . . . . . . 39 | |||
6.4. XPath Evaluations . . . . . . . . . . . . . . . . . . . . 39 | 6.4. XPath Evaluations . . . . . . . . . . . . . . . . . . . . 39 | |||
6.4.1. XPath Context . . . . . . . . . . . . . . . . . . . . 40 | 6.4.1. XPath Context . . . . . . . . . . . . . . . . . . . . 40 | |||
6.5. Schema Node Identifier . . . . . . . . . . . . . . . . . 41 | 6.5. Schema Node Identifier . . . . . . . . . . . . . . . . . 41 | |||
7. YANG Statements . . . . . . . . . . . . . . . . . . . . . . . 41 | 7. YANG Statements . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
7.1. The module Statement . . . . . . . . . . . . . . . . . . 42 | 7.1. The module Statement . . . . . . . . . . . . . . . . . . 42 | |||
7.1.1. The module's Substatements . . . . . . . . . . . . . 43 | 7.1.1. The module's Substatements . . . . . . . . . . . . . 43 | |||
7.1.2. The yang-version Statement . . . . . . . . . . . . . 44 | 7.1.2. The yang-version Statement . . . . . . . . . . . . . 44 | |||
7.1.3. The namespace Statement . . . . . . . . . . . . . . . 45 | 7.1.3. The namespace Statement . . . . . . . . . . . . . . . 45 | |||
7.1.4. The prefix Statement . . . . . . . . . . . . . . . . 45 | 7.1.4. The prefix Statement . . . . . . . . . . . . . . . . 45 | |||
7.1.5. The import Statement . . . . . . . . . . . . . . . . 45 | 7.1.5. The import Statement . . . . . . . . . . . . . . . . 45 | |||
7.1.6. The include Statement . . . . . . . . . . . . . . . . 46 | 7.1.6. The include Statement . . . . . . . . . . . . . . . . 46 | |||
7.1.7. The organization Statement . . . . . . . . . . . . . 47 | 7.1.7. The organization Statement . . . . . . . . . . . . . 47 | |||
7.1.8. The contact Statement . . . . . . . . . . . . . . . . 47 | 7.1.8. The contact Statement . . . . . . . . . . . . . . . . 47 | |||
7.1.9. The revision Statement . . . . . . . . . . . . . . . 47 | 7.1.9. The revision Statement . . . . . . . . . . . . . . . 47 | |||
skipping to change at page 4, line 16 | skipping to change at page 4, line 16 | |||
7.6.1. The leaf's default value . . . . . . . . . . . . . . 61 | 7.6.1. The leaf's default value . . . . . . . . . . . . . . 61 | |||
7.6.2. The leaf's Substatements . . . . . . . . . . . . . . 61 | 7.6.2. The leaf's Substatements . . . . . . . . . . . . . . 61 | |||
7.6.3. The leaf's type Statement . . . . . . . . . . . . . . 62 | 7.6.3. The leaf's type Statement . . . . . . . . . . . . . . 62 | |||
7.6.4. The leaf's default Statement . . . . . . . . . . . . 62 | 7.6.4. The leaf's default Statement . . . . . . . . . . . . 62 | |||
7.6.5. The leaf's mandatory Statement . . . . . . . . . . . 62 | 7.6.5. The leaf's mandatory Statement . . . . . . . . . . . 62 | |||
7.6.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 62 | 7.6.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 62 | |||
7.6.7. NETCONF <edit-config> Operations . . . . . . . . . . 63 | 7.6.7. NETCONF <edit-config> Operations . . . . . . . . . . 63 | |||
7.6.8. Usage Example . . . . . . . . . . . . . . . . . . . . 63 | 7.6.8. Usage Example . . . . . . . . . . . . . . . . . . . . 63 | |||
7.7. The leaf-list Statement . . . . . . . . . . . . . . . . . 64 | 7.7. The leaf-list Statement . . . . . . . . . . . . . . . . . 64 | |||
7.7.1. Ordering . . . . . . . . . . . . . . . . . . . . . . 64 | 7.7.1. Ordering . . . . . . . . . . . . . . . . . . . . . . 64 | |||
7.7.2. The leaf-list's Substatements . . . . . . . . . . . . 65 | 7.7.2. The leaf-list's default values . . . . . . . . . . . 65 | |||
7.7.3. The min-elements Statement . . . . . . . . . . . . . 65 | 7.7.3. The leaf-list's Substatements . . . . . . . . . . . . 66 | |||
7.7.4. The max-elements Statement . . . . . . . . . . . . . 66 | 7.7.4. The leaf-list's default Statement . . . . . . . . . . 66 | |||
7.7.5. The ordered-by Statement . . . . . . . . . . . . . . 66 | 7.7.5. The min-elements Statement . . . . . . . . . . . . . 66 | |||
7.7.6. XML Mapping Rules . . . . . . . . . . . . . . . . . . 67 | 7.7.6. The max-elements Statement . . . . . . . . . . . . . 67 | |||
7.7.7. NETCONF <edit-config> Operations . . . . . . . . . . 67 | 7.7.7. The ordered-by Statement . . . . . . . . . . . . . . 67 | |||
7.7.8. Usage Example . . . . . . . . . . . . . . . . . . . . 68 | 7.7.8. XML Mapping Rules . . . . . . . . . . . . . . . . . . 68 | |||
7.8. The list Statement . . . . . . . . . . . . . . . . . . . 70 | 7.7.9. NETCONF <edit-config> Operations . . . . . . . . . . 68 | |||
7.8.1. The list's Substatements . . . . . . . . . . . . . . 70 | 7.7.10. Usage Example . . . . . . . . . . . . . . . . . . . . 69 | |||
7.8.2. The list's key Statement . . . . . . . . . . . . . . 71 | 7.8. The list Statement . . . . . . . . . . . . . . . . . . . 71 | |||
7.8.3. The list's unique Statement . . . . . . . . . . . . . 72 | 7.8.1. The list's Substatements . . . . . . . . . . . . . . 71 | |||
7.8.4. The list's Child Node Statements . . . . . . . . . . 73 | 7.8.2. The list's key Statement . . . . . . . . . . . . . . 72 | |||
7.8.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 73 | 7.8.3. The list's unique Statement . . . . . . . . . . . . . 73 | |||
7.8.6. NETCONF <edit-config> Operations . . . . . . . . . . 74 | 7.8.4. The list's Child Node Statements . . . . . . . . . . 74 | |||
7.8.7. Usage Example . . . . . . . . . . . . . . . . . . . . 75 | 7.8.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 74 | |||
7.9. The choice Statement . . . . . . . . . . . . . . . . . . 78 | 7.8.6. NETCONF <edit-config> Operations . . . . . . . . . . 75 | |||
7.9.1. The choice's Substatements . . . . . . . . . . . . . 78 | 7.8.7. Usage Example . . . . . . . . . . . . . . . . . . . . 76 | |||
7.9.2. The choice's case Statement . . . . . . . . . . . . . 79 | 7.9. The choice Statement . . . . . . . . . . . . . . . . . . 79 | |||
7.9.3. The choice's default Statement . . . . . . . . . . . 80 | 7.9.1. The choice's Substatements . . . . . . . . . . . . . 79 | |||
7.9.4. The choice's mandatory Statement . . . . . . . . . . 82 | 7.9.2. The choice's case Statement . . . . . . . . . . . . . 80 | |||
7.9.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 82 | 7.9.3. The choice's default Statement . . . . . . . . . . . 81 | |||
7.9.6. NETCONF <edit-config> Operations . . . . . . . . . . 82 | 7.9.4. The choice's mandatory Statement . . . . . . . . . . 83 | |||
7.9.7. Usage Example . . . . . . . . . . . . . . . . . . . . 82 | 7.9.5. XML Mapping Rules . . . . . . . . . . . . . . . . . . 83 | |||
7.10. The anyxml Statement . . . . . . . . . . . . . . . . . . 83 | 7.9.6. NETCONF <edit-config> Operations . . . . . . . . . . 83 | |||
7.10.1. The anyxml's Substatements . . . . . . . . . . . . . 84 | 7.9.7. Usage Example . . . . . . . . . . . . . . . . . . . . 83 | |||
7.10.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 84 | 7.10. The anyxml Statement . . . . . . . . . . . . . . . . . . 84 | |||
7.10.3. NETCONF <edit-config> Operations . . . . . . . . . . 84 | 7.10.1. The anyxml's Substatements . . . . . . . . . . . . . 85 | |||
7.10.4. Usage Example . . . . . . . . . . . . . . . . . . . 85 | 7.10.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 85 | |||
7.11. The grouping Statement . . . . . . . . . . . . . . . . . 85 | 7.10.3. NETCONF <edit-config> Operations . . . . . . . . . . 85 | |||
7.11.1. The grouping's Substatements . . . . . . . . . . . . 86 | 7.10.4. Usage Example . . . . . . . . . . . . . . . . . . . 86 | |||
7.11.2. Usage Example . . . . . . . . . . . . . . . . . . . 86 | 7.11. The grouping Statement . . . . . . . . . . . . . . . . . 86 | |||
7.12. The uses Statement . . . . . . . . . . . . . . . . . . . 87 | 7.11.1. The grouping's Substatements . . . . . . . . . . . . 87 | |||
7.12.1. The uses's Substatements . . . . . . . . . . . . . . 87 | 7.11.2. Usage Example . . . . . . . . . . . . . . . . . . . 87 | |||
7.12.2. The refine Statement . . . . . . . . . . . . . . . . 87 | 7.12. The uses Statement . . . . . . . . . . . . . . . . . . . 88 | |||
7.12.3. XML Mapping Rules . . . . . . . . . . . . . . . . . 88 | 7.12.1. The uses's Substatements . . . . . . . . . . . . . . 88 | |||
7.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 88 | 7.12.2. The refine Statement . . . . . . . . . . . . . . . . 88 | |||
7.12.3. XML Mapping Rules . . . . . . . . . . . . . . . . . 89 | ||||
7.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 89 | ||||
7.13. The rpc Statement . . . . . . . . . . . . . . . . . . . . 91 | ||||
7.13.1. The rpc's Substatements . . . . . . . . . . . . . . 91 | ||||
7.13.2. The input Statement . . . . . . . . . . . . . . . . 91 | ||||
7.13.3. The output Statement . . . . . . . . . . . . . . . . 92 | ||||
7.13.4. XML Mapping Rules . . . . . . . . . . . . . . . . . 93 | ||||
7.13.5. Usage Example . . . . . . . . . . . . . . . . . . . 94 | ||||
7.14. The notification Statement . . . . . . . . . . . . . . . 94 | ||||
7.14.1. The notification's Substatements . . . . . . . . . . 95 | ||||
7.14.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 95 | ||||
7.14.3. Usage Example . . . . . . . . . . . . . . . . . . . 95 | ||||
7.15. The augment Statement . . . . . . . . . . . . . . . . . . 96 | ||||
7.15.1. The augment's Substatements . . . . . . . . . . . . 97 | ||||
7.15.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 97 | ||||
7.15.3. Usage Example . . . . . . . . . . . . . . . . . . . 98 | ||||
7.16. The identity Statement . . . . . . . . . . . . . . . . . 100 | ||||
7.16.1. The identity's Substatements . . . . . . . . . . . . 100 | ||||
7.16.2. The base Statement . . . . . . . . . . . . . . . . . 100 | ||||
7.16.3. Usage Example . . . . . . . . . . . . . . . . . . . 101 | ||||
7.17. The extension Statement . . . . . . . . . . . . . . . . . 101 | ||||
7.17.1. The extension's Substatements . . . . . . . . . . . 102 | ||||
7.17.2. The argument Statement . . . . . . . . . . . . . . . 102 | ||||
7.17.3. Usage Example . . . . . . . . . . . . . . . . . . . 103 | ||||
7.18. Conformance-Related Statements . . . . . . . . . . . . . 103 | ||||
7.18.1. The feature Statement . . . . . . . . . . . . . . . 104 | ||||
7.18.2. The if-feature Statement . . . . . . . . . . . . . . 105 | ||||
7.18.3. The deviation Statement . . . . . . . . . . . . . . 106 | ||||
7.19. Common Statements . . . . . . . . . . . . . . . . . . . . 109 | ||||
7.19.1. The config Statement . . . . . . . . . . . . . . . . 109 | ||||
7.19.2. The status Statement . . . . . . . . . . . . . . . . 109 | ||||
7.19.3. The description Statement . . . . . . . . . . . . . 110 | ||||
7.19.4. The reference Statement . . . . . . . . . . . . . . 110 | ||||
7.19.5. The when Statement . . . . . . . . . . . . . . . . . 111 | ||||
8. Constraints . . . . . . . . . . . . . . . . . . . . . . . . . 111 | ||||
8.1. Constraints on Data . . . . . . . . . . . . . . . . . . . 112 | ||||
8.2. Hierarchy of Constraints . . . . . . . . . . . . . . . . 112 | ||||
8.3. Constraint Enforcement Model . . . . . . . . . . . . . . 112 | ||||
8.3.1. Payload Parsing . . . . . . . . . . . . . . . . . . . 113 | ||||
8.3.2. NETCONF <edit-config> Processing . . . . . . . . . . 113 | ||||
8.3.3. Validation . . . . . . . . . . . . . . . . . . . . . 114 | ||||
9. Built-In Types . . . . . . . . . . . . . . . . . . . . . . . 114 | ||||
9.1. Canonical Representation . . . . . . . . . . . . . . . . 115 | ||||
9.2. The Integer Built-In Types . . . . . . . . . . . . . . . 115 | ||||
9.2.1. Lexical Representation . . . . . . . . . . . . . . . 116 | ||||
9.2.2. Canonical Form . . . . . . . . . . . . . . . . . . . 116 | ||||
9.2.3. Restrictions . . . . . . . . . . . . . . . . . . . . 116 | ||||
9.2.4. The range Statement . . . . . . . . . . . . . . . . . 117 | ||||
9.2.5. Usage Example . . . . . . . . . . . . . . . . . . . . 117 | ||||
9.3. The decimal64 Built-In Type . . . . . . . . . . . . . . . 118 | ||||
9.3.1. Lexical Representation . . . . . . . . . . . . . . . 118 | ||||
9.3.2. Canonical Form . . . . . . . . . . . . . . . . . . . 118 | ||||
9.3.3. Restrictions . . . . . . . . . . . . . . . . . . . . 119 | ||||
9.3.4. The fraction-digits Statement . . . . . . . . . . . . 119 | ||||
9.3.5. Usage Example . . . . . . . . . . . . . . . . . . . . 119 | ||||
9.4. The string Built-In Type . . . . . . . . . . . . . . . . 120 | ||||
9.4.1. Lexical Representation . . . . . . . . . . . . . . . 120 | ||||
9.4.2. Canonical Form . . . . . . . . . . . . . . . . . . . 120 | ||||
9.4.3. Restrictions . . . . . . . . . . . . . . . . . . . . 120 | ||||
9.4.4. The length Statement . . . . . . . . . . . . . . . . 120 | ||||
9.4.5. The pattern Statement . . . . . . . . . . . . . . . . 121 | ||||
9.4.6. The modifier Statement . . . . . . . . . . . . . . . 121 | ||||
9.4.7. Usage Example . . . . . . . . . . . . . . . . . . . . 121 | ||||
9.5. The boolean Built-In Type . . . . . . . . . . . . . . . . 123 | ||||
9.5.1. Lexical Representation . . . . . . . . . . . . . . . 123 | ||||
9.5.2. Canonical Form . . . . . . . . . . . . . . . . . . . 123 | ||||
9.5.3. Restrictions . . . . . . . . . . . . . . . . . . . . 123 | ||||
9.6. The enumeration Built-In Type . . . . . . . . . . . . . . 123 | ||||
9.6.1. Lexical Representation . . . . . . . . . . . . . . . 123 | ||||
9.6.2. Canonical Form . . . . . . . . . . . . . . . . . . . 123 | ||||
9.6.3. Restrictions . . . . . . . . . . . . . . . . . . . . 123 | ||||
9.6.4. The enum Statement . . . . . . . . . . . . . . . . . 124 | ||||
9.6.5. Usage Example . . . . . . . . . . . . . . . . . . . . 125 | ||||
9.7. The bits Built-In Type . . . . . . . . . . . . . . . . . 126 | ||||
9.7.1. Restrictions . . . . . . . . . . . . . . . . . . . . 126 | ||||
9.7.2. Lexical Representation . . . . . . . . . . . . . . . 126 | ||||
9.7.3. Canonical Form . . . . . . . . . . . . . . . . . . . 126 | ||||
9.7.4. The bit Statement . . . . . . . . . . . . . . . . . . 126 | ||||
9.7.5. Usage Example . . . . . . . . . . . . . . . . . . . . 127 | ||||
9.8. The binary Built-In Type . . . . . . . . . . . . . . . . 128 | ||||
9.8.1. Restrictions . . . . . . . . . . . . . . . . . . . . 128 | ||||
9.8.2. Lexical Representation . . . . . . . . . . . . . . . 128 | ||||
9.8.3. Canonical Form . . . . . . . . . . . . . . . . . . . 128 | ||||
9.9. The leafref Built-In Type . . . . . . . . . . . . . . . . 128 | ||||
9.9.1. Restrictions . . . . . . . . . . . . . . . . . . . . 129 | ||||
9.9.2. The path Statement . . . . . . . . . . . . . . . . . 129 | ||||
9.9.3. The require-instance Statement . . . . . . . . . . . 130 | ||||
9.9.4. Lexical Representation . . . . . . . . . . . . . . . 130 | ||||
9.9.5. Canonical Form . . . . . . . . . . . . . . . . . . . 130 | ||||
9.9.6. Usage Example . . . . . . . . . . . . . . . . . . . . 130 | ||||
9.10. The identityref Built-In Type . . . . . . . . . . . . . . 134 | ||||
9.10.1. Restrictions . . . . . . . . . . . . . . . . . . . . 134 | ||||
9.10.2. The identityref's base Statement . . . . . . . . . . 134 | ||||
9.10.3. Lexical Representation . . . . . . . . . . . . . . . 135 | ||||
9.10.4. Canonical Form . . . . . . . . . . . . . . . . . . . 135 | ||||
9.10.5. Usage Example . . . . . . . . . . . . . . . . . . . 135 | ||||
7.13. The rpc Statement . . . . . . . . . . . . . . . . . . . . 90 | 9.11. The empty Built-In Type . . . . . . . . . . . . . . . . . 137 | |||
7.13.1. The rpc's Substatements . . . . . . . . . . . . . . 90 | 9.11.1. Restrictions . . . . . . . . . . . . . . . . . . . . 137 | |||
7.13.2. The input Statement . . . . . . . . . . . . . . . . 90 | 9.11.2. Lexical Representation . . . . . . . . . . . . . . . 137 | |||
7.13.3. The output Statement . . . . . . . . . . . . . . . . 91 | 9.11.3. Canonical Form . . . . . . . . . . . . . . . . . . . 137 | |||
7.13.4. XML Mapping Rules . . . . . . . . . . . . . . . . . 92 | 9.11.4. Usage Example . . . . . . . . . . . . . . . . . . . 137 | |||
7.13.5. Usage Example . . . . . . . . . . . . . . . . . . . 92 | 9.12. The union Built-In Type . . . . . . . . . . . . . . . . . 137 | |||
7.14. The notification Statement . . . . . . . . . . . . . . . 93 | 9.12.1. Restrictions . . . . . . . . . . . . . . . . . . . . 138 | |||
7.14.1. The notification's Substatements . . . . . . . . . . 94 | 9.12.2. Lexical Representation . . . . . . . . . . . . . . . 138 | |||
7.14.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 94 | 9.12.3. Canonical Form . . . . . . . . . . . . . . . . . . . 138 | |||
7.14.3. Usage Example . . . . . . . . . . . . . . . . . . . 94 | 9.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 138 | |||
7.15. The augment Statement . . . . . . . . . . . . . . . . . . 95 | 9.13. The instance-identifier Built-In Type . . . . . . . . . . 139 | |||
7.15.1. The augment's Substatements . . . . . . . . . . . . 96 | 9.13.1. Restrictions . . . . . . . . . . . . . . . . . . . . 140 | |||
7.15.2. XML Mapping Rules . . . . . . . . . . . . . . . . . 96 | 9.13.2. Lexical Representation . . . . . . . . . . . . . . . 140 | |||
7.15.3. Usage Example . . . . . . . . . . . . . . . . . . . 96 | 9.13.3. Canonical Form . . . . . . . . . . . . . . . . . . . 140 | |||
7.16. The identity Statement . . . . . . . . . . . . . . . . . 98 | 9.13.4. Usage Example . . . . . . . . . . . . . . . . . . . 140 | |||
7.16.1. The identity's Substatements . . . . . . . . . . . . 98 | 10. XPath Functions . . . . . . . . . . . . . . . . . . . . . . . 141 | |||
7.16.2. The base Statement . . . . . . . . . . . . . . . . . 99 | 10.1. Functions for Node Sets . . . . . . . . . . . . . . . . 141 | |||
7.16.3. Usage Example . . . . . . . . . . . . . . . . . . . 99 | 10.1.1. current() . . . . . . . . . . . . . . . . . . . . . 141 | |||
7.17. The extension Statement . . . . . . . . . . . . . . . . . 100 | 10.2. Functions for Strings . . . . . . . . . . . . . . . . . 141 | |||
7.17.1. The extension's Substatements . . . . . . . . . . . 101 | 10.2.1. re-match() . . . . . . . . . . . . . . . . . . . . . 141 | |||
7.17.2. The argument Statement . . . . . . . . . . . . . . . 101 | ||||
7.17.3. Usage Example . . . . . . . . . . . . . . . . . . . 102 | ||||
7.18. Conformance-Related Statements . . . . . . . . . . . . . 102 | ||||
7.18.1. The feature Statement . . . . . . . . . . . . . . . 102 | ||||
7.18.2. The if-feature Statement . . . . . . . . . . . . . . 104 | ||||
7.18.3. The deviation Statement . . . . . . . . . . . . . . 105 | ||||
7.19. Common Statements . . . . . . . . . . . . . . . . . . . . 107 | ||||
7.19.1. The config Statement . . . . . . . . . . . . . . . . 107 | ||||
7.19.2. The status Statement . . . . . . . . . . . . . . . . 108 | ||||
7.19.3. The description Statement . . . . . . . . . . . . . 109 | ||||
7.19.4. The reference Statement . . . . . . . . . . . . . . 109 | ||||
7.19.5. The when Statement . . . . . . . . . . . . . . . . . 109 | ||||
8. Constraints . . . . . . . . . . . . . . . . . . . . . . . . . 110 | ||||
8.1. Constraints on Data . . . . . . . . . . . . . . . . . . . 110 | ||||
8.2. Hierarchy of Constraints . . . . . . . . . . . . . . . . 111 | ||||
8.3. Constraint Enforcement Model . . . . . . . . . . . . . . 111 | ||||
8.3.1. Payload Parsing . . . . . . . . . . . . . . . . . . . 111 | ||||
8.3.2. NETCONF <edit-config> Processing . . . . . . . . . . 112 | ||||
8.3.3. Validation . . . . . . . . . . . . . . . . . . . . . 113 | ||||
9. Built-In Types . . . . . . . . . . . . . . . . . . . . . . . 113 | ||||
9.1. Canonical Representation . . . . . . . . . . . . . . . . 113 | ||||
9.2. The Integer Built-In Types . . . . . . . . . . . . . . . 114 | ||||
9.2.1. Lexical Representation . . . . . . . . . . . . . . . 114 | ||||
9.2.2. Canonical Form . . . . . . . . . . . . . . . . . . . 115 | ||||
9.2.3. Restrictions . . . . . . . . . . . . . . . . . . . . 115 | ||||
9.2.4. The range Statement . . . . . . . . . . . . . . . . . 115 | ||||
9.2.5. Usage Example . . . . . . . . . . . . . . . . . . . . 116 | ||||
9.3. The decimal64 Built-In Type . . . . . . . . . . . . . . . 116 | ||||
9.3.1. Lexical Representation . . . . . . . . . . . . . . . 117 | ||||
9.3.2. Canonical Form . . . . . . . . . . . . . . . . . . . 117 | ||||
9.3.3. Restrictions . . . . . . . . . . . . . . . . . . . . 117 | ||||
9.3.4. The fraction-digits Statement . . . . . . . . . . . . 117 | ||||
9.3.5. Usage Example . . . . . . . . . . . . . . . . . . . . 118 | ||||
9.4. The string Built-In Type . . . . . . . . . . . . . . . . 118 | ||||
9.4.1. Lexical Representation . . . . . . . . . . . . . . . 118 | ||||
9.4.2. Canonical Form . . . . . . . . . . . . . . . . . . . 119 | ||||
9.4.3. Restrictions . . . . . . . . . . . . . . . . . . . . 119 | ||||
9.4.4. The length Statement . . . . . . . . . . . . . . . . 119 | ||||
9.4.5. The pattern Statement . . . . . . . . . . . . . . . . 120 | ||||
9.4.6. The modifier Statement . . . . . . . . . . . . . . . 120 | ||||
9.4.7. Usage Example . . . . . . . . . . . . . . . . . . . . 120 | ||||
9.5. The boolean Built-In Type . . . . . . . . . . . . . . . . 121 | ||||
9.5.1. Lexical Representation . . . . . . . . . . . . . . . 122 | ||||
9.5.2. Canonical Form . . . . . . . . . . . . . . . . . . . 122 | ||||
9.5.3. Restrictions . . . . . . . . . . . . . . . . . . . . 122 | ||||
9.6. The enumeration Built-In Type . . . . . . . . . . . . . . 122 | ||||
9.6.1. Lexical Representation . . . . . . . . . . . . . . . 122 | ||||
9.6.2. Canonical Form . . . . . . . . . . . . . . . . . . . 122 | ||||
9.6.3. Restrictions . . . . . . . . . . . . . . . . . . . . 122 | ||||
9.6.4. The enum Statement . . . . . . . . . . . . . . . . . 122 | ||||
9.6.5. Usage Example . . . . . . . . . . . . . . . . . . . . 123 | ||||
9.7. The bits Built-In Type . . . . . . . . . . . . . . . . . 124 | ||||
9.7.1. Restrictions . . . . . . . . . . . . . . . . . . . . 124 | ||||
9.7.2. Lexical Representation . . . . . . . . . . . . . . . 124 | ||||
9.7.3. Canonical Form . . . . . . . . . . . . . . . . . . . 124 | ||||
9.7.4. The bit Statement . . . . . . . . . . . . . . . . . . 124 | ||||
9.7.5. Usage Example . . . . . . . . . . . . . . . . . . . . 125 | ||||
9.8. The binary Built-In Type . . . . . . . . . . . . . . . . 126 | ||||
9.8.1. Restrictions . . . . . . . . . . . . . . . . . . . . 126 | ||||
9.8.2. Lexical Representation . . . . . . . . . . . . . . . 126 | ||||
9.8.3. Canonical Form . . . . . . . . . . . . . . . . . . . 126 | ||||
9.9. The leafref Built-In Type . . . . . . . . . . . . . . . . 126 | ||||
9.9.1. Restrictions . . . . . . . . . . . . . . . . . . . . 126 | ||||
9.9.2. The path Statement . . . . . . . . . . . . . . . . . 127 | ||||
9.9.3. The require-instance Statement . . . . . . . . . . . 127 | ||||
9.9.4. Lexical Representation . . . . . . . . . . . . . . . 127 | ||||
9.9.5. Canonical Form . . . . . . . . . . . . . . . . . . . 128 | ||||
9.9.6. Usage Example . . . . . . . . . . . . . . . . . . . . 128 | ||||
9.10. The identityref Built-In Type . . . . . . . . . . . . . . 131 | ||||
9.10.1. Restrictions . . . . . . . . . . . . . . . . . . . . 131 | ||||
9.10.2. The identityref's base Statement . . . . . . . . . . 131 | ||||
9.10.3. Lexical Representation . . . . . . . . . . . . . . . 132 | ||||
9.10.4. Canonical Form . . . . . . . . . . . . . . . . . . . 132 | ||||
9.10.5. Usage Example . . . . . . . . . . . . . . . . . . . 132 | ||||
9.11. The empty Built-In Type . . . . . . . . . . . . . . . . . 134 | ||||
9.11.1. Restrictions . . . . . . . . . . . . . . . . . . . . 134 | ||||
9.11.2. Lexical Representation . . . . . . . . . . . . . . . 134 | ||||
9.11.3. Canonical Form . . . . . . . . . . . . . . . . . . . 134 | ||||
9.11.4. Usage Example . . . . . . . . . . . . . . . . . . . 134 | ||||
9.12. The union Built-In Type . . . . . . . . . . . . . . . . . 134 | ||||
9.12.1. Restrictions . . . . . . . . . . . . . . . . . . . . 135 | ||||
9.12.2. Lexical Representation . . . . . . . . . . . . . . . 135 | ||||
9.12.3. Canonical Form . . . . . . . . . . . . . . . . . . . 135 | ||||
9.12.4. Usage Example . . . . . . . . . . . . . . . . . . . 135 | ||||
9.13. The instance-identifier Built-In Type . . . . . . . . . . 136 | ||||
9.13.1. Restrictions . . . . . . . . . . . . . . . . . . . . 137 | ||||
9.13.2. Lexical Representation . . . . . . . . . . . . . . . 137 | ||||
9.13.3. Canonical Form . . . . . . . . . . . . . . . . . . . 137 | ||||
9.13.4. Usage Example . . . . . . . . . . . . . . . . . . . 137 | ||||
10. XPath Functions . . . . . . . . . . . . . . . . . . . . . . . 138 | ||||
10.1. Functions for Node Sets . . . . . . . . . . . . . . . . 138 | ||||
10.1.1. current() . . . . . . . . . . . . . . . . . . . . . 138 | ||||
10.2. Functions for Strings . . . . . . . . . . . . . . . . . 138 | ||||
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" . . . . . . . . . . . . . . . . . . . . . . 139 | identifier" . . . . . . . . . . . . . . . . . . . . . . 142 | |||
10.3.1. deref() . . . . . . . . . . . . . . . . . . . . . . 139 | 10.3.1. deref() . . . . . . . . . . . . . . . . . . . . . . 142 | |||
10.4. Functions for the YANG Type "identityref" . . . . . . . 140 | 10.4. Functions for the YANG Type "identityref" . . . . . . . 143 | |||
10.4.1. derived-from() . . . . . . . . . . . . . . . . . . . 140 | 10.4.1. derived-from() . . . . . . . . . . . . . . . . . . . 143 | |||
10.5. Functions for the YANG Type "enumeration" . . . . . . . 141 | 10.4.2. derived-from-or-self() . . . . . . . . . . . . . . . 143 | |||
10.5.1. enum-value() . . . . . . . . . . . . . . . . . . . . 141 | 10.5. Functions for the YANG Type "enumeration" . . . . . . . 144 | |||
10.6. Functions for the YANG Type "bits" . . . . . . . . . . . 142 | 10.5.1. enum-value() . . . . . . . . . . . . . . . . . . . . 144 | |||
10.6.1. bit-is-set() . . . . . . . . . . . . . . . . . . . . 142 | 10.6. Functions for the YANG Type "bits" . . . . . . . . . . . 145 | |||
11. Updating a Module . . . . . . . . . . . . . . . . . . . . . . 143 | 10.6.1. bit-is-set() . . . . . . . . . . . . . . . . . . . . 145 | |||
12. YIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 | 11. Updating a Module . . . . . . . . . . . . . . . . . . . . . . 146 | |||
12.1. Formal YIN Definition . . . . . . . . . . . . . . . . . 145 | 12. YIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 | |||
12.1.1. Usage Example . . . . . . . . . . . . . . . . . . . 148 | 12.1. Formal YIN Definition . . . . . . . . . . . . . . . . . 149 | |||
13. YANG ABNF Grammar . . . . . . . . . . . . . . . . . . . . . . 149 | 12.1.1. Usage Example . . . . . . . . . . . . . . . . . . . 151 | |||
14. Error Responses for YANG Related Errors . . . . . . . . . . . 172 | 13. YANG ABNF Grammar . . . . . . . . . . . . . . . . . . . . . . 152 | |||
14.1. Error Message for Data That Violates a unique Statement 173 | 14. Error Responses for YANG Related Errors . . . . . . . . . . . 176 | |||
14.1. Error Message for Data That Violates a unique Statement 176 | ||||
14.2. Error Message for Data That Violates a max-elements | 14.2. Error Message for Data That Violates a max-elements | |||
Statement . . . . . . . . . . . . . . . . . . . . . . . 173 | Statement . . . . . . . . . . . . . . . . . . . . . . . 176 | |||
14.3. Error Message for Data That Violates a min-elements | 14.3. Error Message for Data That Violates a min-elements | |||
Statement . . . . . . . . . . . . . . . . . . . . . . . 173 | Statement . . . . . . . . . . . . . . . . . . . . . . . 176 | |||
14.4. Error Message for Data That Violates a must Statement . 173 | 14.4. Error Message for Data That Violates a must Statement . 177 | |||
14.5. Error Message for Data That Violates a require-instance | 14.5. Error Message for Data That Violates a require-instance | |||
Statement . . . . . . . . . . . . . . . . . . . . . . . 174 | Statement . . . . . . . . . . . . . . . . . . . . . . . 177 | |||
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 . . . . . . . . . . . . . . . . . . . . . . . . . . 174 | Type . . . . . . . . . . . . . . . . . . . . . . . . . . 177 | |||
14.7. Error Message for Data That Violates a mandatory choice | 14.7. Error Message for Data That Violates a mandatory choice | |||
Statement . . . . . . . . . . . . . . . . . . . . . . . 174 | Statement . . . . . . . . . . . . . . . . . . . . . . . 177 | |||
14.8. Error Message for the "insert" Operation . . . . . . . . 174 | ||||
15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 175 | 14.8. Error Message for the "insert" Operation . . . . . . . . 178 | |||
15.1. Media type application/yang . . . . . . . . . . . . . . 176 | 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 178 | |||
15.2. Media type application/yin+xml . . . . . . . . . . . . . 176 | 15.1. Media type application/yang . . . . . . . . . . . . . . 179 | |||
16. Security Considerations . . . . . . . . . . . . . . . . . . . 178 | 15.2. Media type application/yin+xml . . . . . . . . . . . . . 180 | |||
17. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 178 | 16. Security Considerations . . . . . . . . . . . . . . . . . . . 182 | |||
18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 179 | 17. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 182 | |||
19. ChangeLog . . . . . . . . . . . . . . . . . . . . . . . . . . 179 | 18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 183 | |||
19.1. Version -02 . . . . . . . . . . . . . . . . . . . . . . 179 | 19. ChangeLog . . . . . . . . . . . . . . . . . . . . . . . . . . 183 | |||
19.2. Version -01 . . . . . . . . . . . . . . . . . . . . . . 179 | 19.1. Version -03 . . . . . . . . . . . . . . . . . . . . . . 183 | |||
19.3. Version -00 . . . . . . . . . . . . . . . . . . . . . . 180 | 19.2. Version -02 . . . . . . . . . . . . . . . . . . . . . . 183 | |||
20. References . . . . . . . . . . . . . . . . . . . . . . . . . 180 | 19.3. Version -01 . . . . . . . . . . . . . . . . . . . . . . 183 | |||
20.1. Normative References . . . . . . . . . . . . . . . . . . 180 | 19.4. Version -00 . . . . . . . . . . . . . . . . . . . . . . 184 | |||
20.2. Informative References . . . . . . . . . . . . . . . . . 181 | 20. References . . . . . . . . . . . . . . . . . . . . . . . . . 184 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 182 | 20.1. Normative References . . . . . . . . . . . . . . . . . . 184 | |||
20.2. Informative References . . . . . . . . . . . . . . . . . 185 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 186 | ||||
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 9, line 7 | skipping to change at page 9, line 12 | |||
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 Allow "if-feature" in "bit", "enum", and "identity". | |||
o Added a set of new XPath functions in Section 10. | o Allow "if-feature" in "refine". | |||
o Clarified the XPath context's tree in Section 6.4.1. | o Made "when" and "if-feature" illegal on list keys, unless the | |||
parent is also conditional, and the condition matches the parent's | ||||
condition. | ||||
o Allow "must" in "input", "output", and "notification". | o Allow "choice" as a shorthand case statement (see Section 7.9). | |||
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 Allow "must" in "input", "output", and "notification". | ||||
o Added a set of new XPath functions in Section 10. | ||||
o Clarified the XPath context's tree in Section 6.4.1. | ||||
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 Clarified what unprefixed names means in leafrefs in typedefs (see | |||
Section 9.9.2). | ||||
o Made "when" and "if-feature" illegal on list keys, unless the | o Allow identities to be derived from multiple base identities (see | |||
parent is also conditional, and the condition matches the parent's | Section 7.16 and Section 9.10). | |||
condition. | ||||
o Allow "choice" as a shorthand case statement (see Section 7.9). | o Allow enumerations to be subtyped (see Section 9.6). | |||
o Allow leaf-lists to have default values (see Section 7.7.2). | ||||
o Use [RFC7405] syntax for case-sensitive strings in the grammar. | ||||
2. Keywords | 2. Keywords | |||
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14, [RFC2119]. | 14, [RFC2119]. | |||
3. Terminology | 3. Terminology | |||
skipping to change at page 15, line 13 | skipping to change at page 15, line 35 | |||
} | } | |||
NETCONF XML Example: | NETCONF XML Example: | |||
<host-name>my.example.com</host-name> | <host-name>my.example.com</host-name> | |||
The "leaf" statement is covered in Section 7.6. | The "leaf" statement is covered in Section 7.6. | |||
4.2.2.2. Leaf-List Nodes | 4.2.2.2. Leaf-List Nodes | |||
A leaf-list is a sequence of leaf nodes with exactly one value of a | A leaf-list defines a sequence of values of a particular type. | |||
particular type per leaf. | ||||
YANG Example: | YANG Example: | |||
leaf-list domain-search { | leaf-list domain-search { | |||
type string; | type string; | |||
description "List of domain names to search"; | description "List of domain names to search"; | |||
} | } | |||
NETCONF XML Example: | NETCONF XML Example: | |||
skipping to change at page 22, line 39 | skipping to change at page 22, line 39 | |||
4.2.7. Choices | 4.2.7. Choices | |||
YANG allows the data model to segregate incompatible nodes into | YANG allows the data model to segregate incompatible nodes into | |||
distinct choices using the "choice" and "case" statements. The | distinct choices using the "choice" and "case" statements. The | |||
"choice" statement contains a set of "case" statements that define | "choice" statement contains a set of "case" statements that define | |||
sets of schema nodes that cannot appear together. Each "case" may | sets of schema nodes that cannot appear together. Each "case" may | |||
contain multiple nodes, but each node may appear in only one "case" | contain multiple nodes, but each node may appear in only one "case" | |||
under a "choice". | under a "choice". | |||
When a node from one case is created, all nodes from all other cases | When a node from one case is created in the data tree, all nodes from | |||
are implicitly deleted. The device handles the enforcement of the | all other cases are implicitly deleted. The device handles the | |||
constraint, preventing incompatibilities from existing in the | enforcement of the constraint, preventing incompatibilities from | |||
configuration. | existing in the configuration. | |||
The choice and case nodes appear only in the schema tree, not in the | The choice and case nodes appear only in the schema tree, not in the | |||
data tree or NETCONF messages. The additional levels of hierarchy | data tree or NETCONF messages. The additional levels of hierarchy | |||
are not needed beyond the conceptual schema. | are not needed beyond the conceptual schema. | |||
YANG Example: | YANG Example: | |||
container food { | container food { | |||
choice snack { | choice snack { | |||
case sports-arena { | case sports-arena { | |||
skipping to change at page 40, line 18 | skipping to change at page 40, line 18 | |||
definition: | definition: | |||
o The set of namespace declarations is the set of all "import" | o The set of namespace declarations is the set of all "import" | |||
statements' prefix and namespace pairs in the module where the | statements' prefix and namespace pairs in the module where the | |||
XPath expression is specified, and the "prefix" statement's prefix | XPath expression is specified, and the "prefix" statement's prefix | |||
for the "namespace" statement's URI. | for the "namespace" statement's URI. | |||
o Names without a namespace prefix belong to the same namespace as | o Names without a namespace prefix belong to the same namespace as | |||
the identifier of the current node. Inside a grouping, that | the identifier of the current node. Inside a grouping, that | |||
namespace is affected by where the grouping is used (see | namespace is affected by where the grouping is used (see | |||
Section 7.12). | Section 7.12). Inside a typedef, that namespace is affected by | |||
where the typedef is referenced. If a typedef is defined and | ||||
referenced within a grouping, the namespace is affected by where | ||||
the grouping is used (see Section 7.12). | ||||
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. | |||
skipping to change at page 41, line 18 | skipping to change at page 41, line 21 | |||
defined has the operation's input parameters as children. | defined has the operation's input parameters as children. | |||
o If the XPath expression is defined in a substatement to an | o If the XPath expression is defined in a substatement to an | |||
"output" statement in an "rpc" statement, the accessible tree is | "output" statement in an "rpc" statement, the accessible tree is | |||
the RPC operation's output, all state data on the device, and the | the RPC operation's output, all state data on the device, and the | |||
"running" datastore. The root node has the node representing the | "running" datastore. The root node has the node representing the | |||
operation being defined and all top-level data nodes in all | operation being defined and all top-level data nodes in all | |||
modules as children. The node representing the operation being | modules as children. The node representing the operation being | |||
defined has the operation's output parameters as children. | defined has the operation's output parameters as children. | |||
In the accessible tree, all leafs with default values in use exist | In the accessible tree, all leafs and leaf-lists with default values | |||
(See Section 7.6.1). | in use exist (See Section 7.6.1 and Section 7.7.2). | |||
If a node that exists in the accessible tree has a non-presence | 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 | container as a child, then the non-presence container also exists in | |||
the tree. | 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 | |||
skipping to change at page 54, line 33 | skipping to change at page 54, line 33 | |||
The restrictions that can be applied depend on the type being | The restrictions that can be applied depend on the type being | |||
restricted. The restriction statements for all built-in types are | restricted. The restriction statements for all built-in types are | |||
described in the subsections of Section 9. | described in the subsections of Section 9. | |||
7.4.1. The type's Substatements | 7.4.1. The type's Substatements | |||
+------------------+---------+-------------+ | +------------------+---------+-------------+ | |||
| substatement | section | cardinality | | | substatement | section | cardinality | | |||
+------------------+---------+-------------+ | +------------------+---------+-------------+ | |||
| base | 7.16.2 | 0..1 | | | base | 7.16.2 | 0..n | | |||
| bit | 9.7.4 | 0..n | | | bit | 9.7.4 | 0..n | | |||
| enum | 9.6.4 | 0..n | | | enum | 9.6.4 | 0..n | | |||
| fraction-digits | 9.3.4 | 0..1 | | | fraction-digits | 9.3.4 | 0..1 | | |||
| length | 9.4.4 | 0..1 | | | length | 9.4.4 | 0..1 | | |||
| path | 9.9.2 | 0..1 | | | path | 9.9.2 | 0..1 | | |||
| pattern | 9.4.5 | 0..n | | | pattern | 9.4.5 | 0..n | | |||
| range | 9.2.4 | 0..1 | | | range | 9.2.4 | 0..1 | | |||
| require-instance | 9.9.3 | 0..1 | | | require-instance | 9.9.3 | 0..1 | | |||
| type | 7.4 | 0..n | | | type | 7.4 | 0..n | | |||
+------------------+---------+-------------+ | +------------------+---------+-------------+ | |||
skipping to change at page 56, line 34 | skipping to change at page 56, line 34 | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
7.5.3. The must Statement | 7.5.3. The must Statement | |||
The "must" statement, which is optional, takes as an argument a | The "must" statement, which is optional, takes as an argument a | |||
string that contains an XPath expression (see Section 6.4). It is | string that contains an XPath expression (see Section 6.4). It is | |||
used to formally declare a constraint on valid data. The constraint | used to formally declare a constraint on valid data. The constraint | |||
is enforced according to the rules in Section 8. | is enforced according to the rules in Section 8. | |||
When a datastore is validated, all "must" constraints are | When a datastore is validated, all "must" constraints are | |||
conceptually evaluated once for each data node in the data tree, and | conceptually evaluated once for each data node in the accessible tree | |||
for all leafs with default values in use (see Section 7.6.1). If a | (see Section 6.4.1). | |||
data node does not exist in the data tree, and it does not have a | ||||
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 accessible tree for which the | o The context node is the node in the accessible tree for which the | |||
"must" statement is defined. | "must" statement is defined. | |||
The result of the XPath expression is converted to a boolean value | The result of the XPath expression is converted to a boolean value | |||
skipping to change at page 64, line 37 | skipping to change at page 64, line 37 | |||
of a particular type, the "leaf-list" statement is used to define an | of a particular type, the "leaf-list" statement is used to define an | |||
array of a particular type. The "leaf-list" statement takes one | array of a particular type. The "leaf-list" statement takes one | |||
argument, which is an identifier, followed by a block of | argument, which is an identifier, followed by a block of | |||
substatements that holds detailed leaf-list information. | substatements that holds detailed leaf-list information. | |||
The values in a leaf-list MUST be unique. | The values in a leaf-list MUST be unique. | |||
Conceptually, the values in the data tree are always in the canonical | Conceptually, the values in the data tree are always in the canonical | |||
form (see Section 9.1). | form (see Section 9.1). | |||
If the type referenced by the leaf-list has a default value, it has | ||||
no effect in the leaf-list. | ||||
7.7.1. Ordering | 7.7.1. Ordering | |||
YANG supports two styles for ordering the entries within lists and | YANG supports two styles for ordering the entries within lists and | |||
leaf-lists. In many lists, the order of list entries does not impact | leaf-lists. In many lists, the order of list entries does not impact | |||
the implementation of the list's configuration, and the device is | the implementation of the list's configuration, and the device is | |||
free to sort the list entries in any reasonable order. The | free to sort the list entries in any reasonable order. The | |||
"description" string for the list may suggest an order to the device | "description" string for the list may suggest an order to the device | |||
implementor. YANG calls this style of list "system ordered" and they | implementor. YANG calls this style of list "system ordered" and they | |||
are indicated with the statement "ordered-by system". | are indicated with the statement "ordered-by system". | |||
skipping to change at page 65, line 24 | skipping to change at page 65, line 21 | |||
traffic should be applied before or after the filter entry that | traffic should be applied before or after the filter entry that | |||
allows all traffic from trusted interfaces. The choice of order | allows all traffic from trusted interfaces. The choice of order | |||
would be crucial. | would be crucial. | |||
YANG provides a rich set of facilities within NETCONF's <edit-config> | YANG provides a rich set of facilities within NETCONF's <edit-config> | |||
operation that allows the order of list entries in user-ordered lists | operation that allows the order of list entries in user-ordered lists | |||
to be controlled. List entries may be inserted or rearranged, | to be controlled. List entries may be inserted or rearranged, | |||
positioned as the first or last entry in the list, or positioned | positioned as the first or last entry in the list, or positioned | |||
before or after another specific entry. | before or after another specific entry. | |||
The "ordered-by" statement is covered in Section 7.7.5. | The "ordered-by" statement is covered in Section 7.7.7. | |||
7.7.2. The leaf-list's Substatements | 7.7.2. The leaf-list's default values | |||
The default values of a leaf-list are the values that the server uses | ||||
if the leaf-list does not exist in the data tree. The usage of the | ||||
default values depends on the leaf-list's closest ancestor node in | ||||
the schema tree that is not a non-presence container: | ||||
o If no such ancestor exists in the schema tree, the default values | ||||
MUST be used. | ||||
o Otherwise, if this ancestor is a case node, the default values | ||||
MUST be used if any node from the case exists in the data tree, or | ||||
if the case node is the choice's default case, and no nodes from | ||||
any other case exist in the data tree. | ||||
o Otherwise, the default values MUST be used if the ancestor node | ||||
exists in the data tree. | ||||
In these cases, the default values are said to be in use. | ||||
When the default values are in use, the server MUST operationally | ||||
behave as if the leaf-list was present in the data tree with the | ||||
default values as its values. | ||||
If a leaf-list has one or more "default" statement, the leaf-list's | ||||
default value are the values of the "default" statements, and if the | ||||
leaf-list is user-ordered, the default values are used in the order | ||||
of the "default" statements. Otherwise, if the leaf-list's type has | ||||
a default value, and the leaf-list does not have a "min-elements" | ||||
statement with a value greater than or equal to one, then the leaf- | ||||
list's default value is the type's default value. In all other | ||||
cases, the leaf-list does not have any default values. | ||||
7.7.3. The leaf-list's Substatements | ||||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
| substatement | section | cardinality | | | substatement | section | cardinality | | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
| config | 7.19.1 | 0..1 | | | config | 7.19.1 | 0..1 | | |||
| default | 7.7.4 | 0..n | | ||||
| description | 7.19.3 | 0..1 | | | description | 7.19.3 | 0..1 | | |||
| if-feature | 7.18.2 | 0..n | | | if-feature | 7.18.2 | 0..n | | |||
| max-elements | 7.7.4 | 0..1 | | | max-elements | 7.7.6 | 0..1 | | |||
| min-elements | 7.7.3 | 0..1 | | | min-elements | 7.7.5 | 0..1 | | |||
| must | 7.5.3 | 0..n | | | must | 7.5.3 | 0..n | | |||
| ordered-by | 7.7.5 | 0..1 | | | ordered-by | 7.7.7 | 0..1 | | |||
| reference | 7.19.4 | 0..1 | | | reference | 7.19.4 | 0..1 | | |||
| status | 7.19.2 | 0..1 | | | status | 7.19.2 | 0..1 | | |||
| type | 7.4 | 1 | | | type | 7.4 | 1 | | |||
| units | 7.3.3 | 0..1 | | | units | 7.3.3 | 0..1 | | |||
| when | 7.19.5 | 0..1 | | | when | 7.19.5 | 0..1 | | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
7.7.3. The min-elements Statement | 7.7.4. The leaf-list's default Statement | |||
The "default" statement, which is optional, takes as an argument a | ||||
string that contains a default value for the leaf-list. | ||||
The value of the "default" statement MUST be valid according to the | ||||
type specified in the leaf-list's "type" statement. | ||||
The "default" statement MUST NOT be present on nodes where | ||||
"min-elements" has a value greater than or equal to one. | ||||
7.7.5. The min-elements Statement | ||||
The "min-elements" statement, which is optional, takes as an argument | The "min-elements" statement, which is optional, takes as an argument | |||
a non-negative integer that puts a constraint on valid list entries. | a non-negative integer that puts a constraint on valid list entries. | |||
A valid leaf-list or list MUST have at least min-elements entries. | A valid leaf-list or list MUST have at least min-elements entries. | |||
If no "min-elements" statement is present, it defaults to zero. | If no "min-elements" statement is present, it defaults to zero. | |||
The behavior of the constraint depends on the type of the leaf-list's | The behavior of the constraint depends on the type of the leaf-list's | |||
or list's closest ancestor node in the schema tree that is not a non- | or list's closest ancestor node in the schema tree that is not a non- | |||
presence container (see Section 7.5.1): | presence container (see Section 7.5.1): | |||
o If this ancestor is a case node, the constraint is enforced if any | o If this ancestor is a case node, the constraint is enforced if any | |||
other node from the case exists. | other node from the case exists. | |||
o Otherwise, it is enforced if the ancestor node exists. | o Otherwise, it is enforced if the ancestor node exists. | |||
The constraint is further enforced according to the rules in | The constraint is further enforced according to the rules in | |||
Section 8. | Section 8. | |||
7.7.4. The max-elements Statement | 7.7.6. The max-elements Statement | |||
The "max-elements" statement, which is optional, takes as an argument | The "max-elements" statement, which is optional, takes as an argument | |||
a positive integer or the string "unbounded", which puts a constraint | a positive integer or the string "unbounded", which puts a constraint | |||
on valid list entries. A valid leaf-list or list always has at most | on valid list entries. A valid leaf-list or list always has at most | |||
max-elements entries. | max-elements entries. | |||
If no "max-elements" statement is present, it defaults to | If no "max-elements" statement is present, it defaults to | |||
"unbounded". | "unbounded". | |||
The "max-elements" constraint is enforced according to the rules in | The "max-elements" constraint is enforced according to the rules in | |||
Section 8. | Section 8. | |||
7.7.5. The ordered-by Statement | 7.7.7. The ordered-by Statement | |||
The "ordered-by" statement defines whether the order of entries | The "ordered-by" statement defines whether the order of entries | |||
within a list are determined by the user or the system. The argument | within a list are determined by the user or the system. The argument | |||
is one of the strings "system" or "user". If not present, order | is one of the strings "system" or "user". If not present, order | |||
defaults to "system". | defaults to "system". | |||
This statement is ignored if the list represents state data, RPC | This statement is ignored if the list represents state data, RPC | |||
output parameters, or notification content. | output parameters, or notification content. | |||
See Section 7.7.1 for additional information. | See Section 7.7.1 for additional information. | |||
7.7.5.1. ordered-by system | 7.7.7.1. ordered-by system | |||
The entries in the list are sorted according to an unspecified order. | The entries in the list are sorted according to an unspecified order. | |||
Thus, an implementation is free to sort the entries in the most | Thus, an implementation is free to sort the entries in the most | |||
appropriate order. An implementation SHOULD use the same order for | appropriate order. An implementation SHOULD use the same order for | |||
the same data, regardless of how the data were created. Using a | the same data, regardless of how the data were created. Using a | |||
deterministic order will make comparisons possible using simple tools | deterministic order will make comparisons possible using simple tools | |||
like "diff". | like "diff". | |||
This is the default order. | This is the default order. | |||
7.7.5.2. ordered-by user | 7.7.7.2. ordered-by user | |||
The entries in the list are sorted according to an order defined by | The entries in the list are sorted according to an order defined by | |||
the user. This order is controlled by using special XML attributes | the user. This order is controlled by using special XML attributes | |||
in the <edit-config> request. See Section 7.7.7 for details. | in the <edit-config> request. See Section 7.7.9 for details. | |||
7.7.6. XML Mapping Rules | 7.7.8. XML Mapping Rules | |||
A leaf-list node is encoded as a series of XML elements. Each | A leaf-list node is encoded as a series of XML elements. Each | |||
element's local name is the leaf-list's identifier, and its namespace | element's local name is the leaf-list's identifier, and its namespace | |||
is the module's XML namespace (see Section 7.1.3). | is the module's XML namespace (see Section 7.1.3). | |||
The value of each leaf-list entry is encoded to XML according to the | The value of each leaf-list entry is encoded to XML according to the | |||
type, and sent as character data in the element. | type, and sent as character data in the element. | |||
The XML elements representing leaf-list entries MUST appear in the | The XML elements representing leaf-list entries MUST appear in the | |||
order specified by the user if the leaf-list is "ordered-by user"; | order specified by the user if the leaf-list is "ordered-by user"; | |||
otherwise, the order is implementation-dependent. The XML elements | otherwise, the order is implementation-dependent. The XML elements | |||
representing leaf-list entries MAY be interleaved with other sibling | representing leaf-list entries MAY be interleaved with other sibling | |||
elements, unless the leaf-list defines RPC input or output | elements, unless the leaf-list defines RPC input or output | |||
parameters. | parameters. | |||
See Section 7.7.8 for an example. | See Section 7.7.10 for an example. | |||
7.7.7. NETCONF <edit-config> Operations | 7.7.9. NETCONF <edit-config> Operations | |||
Leaf-list entries can be created and deleted, but not modified, | Leaf-list entries can be created and deleted, but not modified, | |||
through <edit-config>, by using the "operation" attribute in the | through <edit-config>, by using the "operation" attribute in the | |||
leaf-list entry's XML element. | leaf-list entry's XML element. | |||
In an "ordered-by user" leaf-list, the attributes "insert" and | In an "ordered-by user" leaf-list, the attributes "insert" and | |||
"value" in the YANG XML namespace (Section 5.3.1) can be used to | "value" in the YANG XML namespace (Section 5.3.1) can be used to | |||
control where in the leaf-list the entry is inserted. These can be | control where in the leaf-list the entry is inserted. These can be | |||
used during "create" operations to insert a new leaf-list entry, or | used during "create" operations to insert a new leaf-list entry, or | |||
during "merge" or "replace" operations to insert a new leaf-list | during "merge" or "replace" operations to insert a new leaf-list | |||
skipping to change at page 68, line 23 | skipping to change at page 69, line 23 | |||
created if it does not exist. | created if it does not exist. | |||
If the operation is "create", the leaf-list entry is created if it | If the operation is "create", the leaf-list entry is created if it | |||
does not exist. If the leaf-list entry already exists, a | does not exist. If the leaf-list entry already exists, a | |||
"data-exists" error is returned. | "data-exists" error is returned. | |||
If the operation is "delete", the entry is deleted from the leaf- | If the operation is "delete", the entry is deleted from the leaf- | |||
list if it exists. If the leaf-list entry does not exist, a | list if it exists. If the leaf-list entry does not exist, a | |||
"data-missing" error is returned. | "data-missing" error is returned. | |||
7.7.8. Usage Example | 7.7.10. Usage Example | |||
leaf-list allow-user { | leaf-list allow-user { | |||
type string; | type string; | |||
description "A list of user name patterns to allow"; | description "A list of user name patterns to allow"; | |||
} | } | |||
A corresponding XML instance example: | A corresponding XML instance example: | |||
<allow-user>alice</allow-user> | <allow-user>alice</allow-user> | |||
<allow-user>bob</allow-user> | <allow-user>bob</allow-user> | |||
skipping to change at page 71, line 18 | skipping to change at page 72, line 18 | |||
| choice | 7.9 | 0..n | | | choice | 7.9 | 0..n | | |||
| config | 7.19.1 | 0..1 | | | config | 7.19.1 | 0..1 | | |||
| 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 | | |||
| key | 7.8.2 | 0..1 | | | key | 7.8.2 | 0..1 | | |||
| 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 | | |||
| max-elements | 7.7.4 | 0..1 | | | max-elements | 7.7.6 | 0..1 | | |||
| min-elements | 7.7.3 | 0..1 | | | min-elements | 7.7.5 | 0..1 | | |||
| must | 7.5.3 | 0..n | | | must | 7.5.3 | 0..n | | |||
| ordered-by | 7.7.5 | 0..1 | | | ordered-by | 7.7.7 | 0..1 | | |||
| 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 | | |||
| unique | 7.8.3 | 0..n | | | unique | 7.8.3 | 0..n | | |||
| uses | 7.12 | 0..n | | | uses | 7.12 | 0..n | | |||
| when | 7.19.5 | 0..1 | | | when | 7.19.5 | 0..1 | | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
7.8.2. The list's key Statement | 7.8.2. The list's key Statement | |||
skipping to change at page 91, line 9 | skipping to change at page 92, line 9 | |||
value "true", the leaf MUST be present in a NETCONF RPC invocation. | value "true", the leaf MUST be present in a NETCONF RPC invocation. | |||
Otherwise, the server MUST return a "missing-element" error. | Otherwise, the server MUST return a "missing-element" error. | |||
If a leaf in the input tree has a default value, the NETCONF server | If a leaf in the input tree has a default value, the NETCONF server | |||
MUST use this value in the same cases as described in Section 7.6.1. | MUST use this value in the same cases as described in Section 7.6.1. | |||
In these cases, the server MUST operationally behave as if the leaf | In these cases, the server MUST operationally behave as if the leaf | |||
was present in the NETCONF RPC invocation with the default value as | was present in the NETCONF RPC invocation with the default value as | |||
its value. | its value. | |||
If a leaf-list in the input tree has one or more default values, the | ||||
NETCONF server MUST use these values in the same cases as described | ||||
in Section 7.7.2. In these cases, the server MUST operationally | ||||
behave as if the leaf-list was present in the NETCONF RPC invocation | ||||
with the default values as its values. | ||||
If a "config" statement is present for any node in the input tree, | If a "config" statement is present for any node in the input tree, | |||
the "config" statement is ignored. | the "config" statement is ignored. | |||
If any node has a "when" statement that would evaluate to false, then | If any node has a "when" statement that would evaluate to false, then | |||
this node MUST NOT be present in the input tree. | this node MUST NOT be present in the input tree. | |||
7.13.2.1. The input's Substatements | 7.13.2.1. The input's Substatements | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
| substatement | section | cardinality | | | substatement | section | cardinality | | |||
skipping to change at page 91, line 47 | skipping to change at page 93, line 5 | |||
If a leaf in the output tree has a "mandatory" statement with the | If a leaf in the output tree has a "mandatory" statement with the | |||
value "true", the leaf MUST be present in a NETCONF RPC reply. | value "true", the leaf MUST be present in a NETCONF RPC reply. | |||
If a leaf in the output tree has a default value, the NETCONF client | If a leaf in the output tree has a default value, the NETCONF client | |||
MUST use this value in the same cases as described in Section 7.6.1. | MUST use this value in the same cases as described in Section 7.6.1. | |||
In these cases, the client MUST operationally behave as if the leaf | In these cases, the client MUST operationally behave as if the leaf | |||
was present in the NETCONF RPC reply with the default value as its | was present in the NETCONF RPC reply with the default value as its | |||
value. | value. | |||
If a leaf-list in the output tree has one or more default values, the | ||||
NETCONF client MUST use these values in the same cases as described | ||||
in Section 7.7.2. In these cases, the client MUST operationally | ||||
behave as if the leaf-list was present in the NETCONF RPC reply with | ||||
the default values as its values. | ||||
If a "config" statement is present for any node in the output tree, | If a "config" statement is present for any node in the output tree, | |||
the "config" statement is ignored. | the "config" statement is ignored. | |||
If any node has a "when" statement that would evaluate to false, then | If any node has a "when" statement that would evaluate to false, then | |||
this node MUST NOT be present in the output tree. | this node MUST NOT be present in the output tree. | |||
7.13.3.1. The output's Substatements | 7.13.3.1. The output's Substatements | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
| substatement | section | cardinality | | | substatement | section | cardinality | | |||
skipping to change at page 93, line 51 | skipping to change at page 95, line 7 | |||
If a leaf in the notification tree has a "mandatory" statement with | If a leaf in the notification tree has a "mandatory" statement with | |||
the value "true", the leaf MUST be present in a NETCONF notification. | the value "true", the leaf MUST be present in a NETCONF notification. | |||
If a leaf in the notification tree has a default value, the NETCONF | If a leaf in the notification tree has a default value, the NETCONF | |||
client MUST use this value in the same cases as described in | client MUST use this value in the same cases as described in | |||
Section 7.6.1. In these cases, the client MUST operationally behave | Section 7.6.1. In these cases, the client MUST operationally behave | |||
as if the leaf was present in the NETCONF notification with the | as if the leaf was present in the NETCONF notification with the | |||
default value as its value. | default value as its value. | |||
If a leaf-list in the notification tree has one or more default | ||||
values, the NETCONF client MUST use these values in the same cases as | ||||
described in Section 7.7.2. In these cases, the client MUST | ||||
operationally behave as if the leaf-list was present in the NETCONF | ||||
notification with the default values as its values. | ||||
If a "config" statement is present for any node in the notification | If a "config" statement is present for any node in the notification | |||
tree, the "config" statement is ignored. | tree, the "config" statement is ignored. | |||
7.14.1. The notification's Substatements | 7.14.1. The notification's Substatements | |||
+--------------+---------+-------------+ | +--------------+---------+-------------+ | |||
| 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 | | |||
skipping to change at page 98, line 38 | skipping to change at page 100, line 10 | |||
<ex:protocol> | <ex:protocol> | |||
<other:smtp/> | <other:smtp/> | |||
</ex:protocol> | </ex:protocol> | |||
</ex:system> | </ex:system> | |||
7.16. The identity Statement | 7.16. The identity Statement | |||
The "identity" statement is used to define a new globally unique, | The "identity" statement is used to define a new globally unique, | |||
abstract, and untyped identity. Its only purpose is to denote its | abstract, and untyped identity. Its only purpose is to denote its | |||
name, semantics, and existence. An identity can either be defined | name, semantics, and existence. An identity can either be defined | |||
from scratch or derived from a base identity. The identity's | from scratch or derived from one or more base identities. The | |||
argument is an identifier that is the name of the identity. It is | identity's argument is an identifier that is the name of the | |||
followed by a block of substatements that holds detailed identity | identity. It is followed by a block of substatements that holds | |||
information. | detailed identity information. | |||
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..n | | |||
| description | 7.19.3 | 0..1 | | | description | 7.19.3 | 0..1 | | |||
| if-feature | 7.18.2 | 0..n | | | 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. If multiple "base" statements are present, | |||
the identity is derived from all of them. | ||||
If a prefix is present on the base name, it refers to an identity | If a prefix is present on the base name, it refers to an identity | |||
defined in the module that was imported with that prefix, or the | defined in the module that was imported with that prefix, or the | |||
local module if the prefix matches the local module's prefix. | local module if the prefix matches the local module's prefix. | |||
Otherwise, an identity with the matching name MUST be defined in the | Otherwise, an identity with the matching name MUST be defined in the | |||
current module or an included submodule. | current module or an included submodule. | |||
Since submodules cannot include the parent module, any identities in | Since submodules cannot include the parent module, any identities in | |||
the module that need to be exposed to submodules MUST be defined in a | the module that need to be exposed to submodules MUST be defined in a | |||
submodule. Submodules can then include this submodule to find the | submodule. Submodules can then include this submodule to find the | |||
skipping to change at page 106, line 30 | skipping to change at page 108, line 5 | |||
properties to replace are identified by substatements to the | properties to replace are identified by substatements to the | |||
"deviate" statement. The properties to replace MUST exist in the | "deviate" statement. The properties to replace MUST exist in the | |||
target node. | target node. | |||
The argument "delete" deletes properties from the target node. The | The argument "delete" deletes properties from the target node. The | |||
properties to delete are identified by substatements to the "delete" | properties to delete are identified by substatements to the "delete" | |||
statement. The substatement's keyword MUST match a corresponding | statement. The substatement's keyword MUST match a corresponding | |||
keyword in the target node, and the argument's string MUST be equal | keyword in the target node, and the argument's string MUST be equal | |||
to the corresponding keyword's argument string in the target node. | to the corresponding keyword's argument string in the target node. | |||
+--------------+---------+-------------+ | +--------------+-------------+-------------+ | |||
| substatement | section | cardinality | | | substatement | section | cardinality | | |||
+--------------+---------+-------------+ | +--------------+-------------+-------------+ | |||
| config | 7.19.1 | 0..1 | | | config | 7.19.1 | 0..1 | | |||
| default | 7.6.4 | 0..1 | | | default | 7.6.4 7.7.4 | 0..n | | |||
| mandatory | 7.6.5 | 0..1 | | | mandatory | 7.6.5 | 0..1 | | |||
| max-elements | 7.7.4 | 0..1 | | | max-elements | 7.7.6 | 0..1 | | |||
| min-elements | 7.7.3 | 0..1 | | | min-elements | 7.7.5 | 0..1 | | |||
| must | 7.5.3 | 0..n | | | must | 7.5.3 | 0..n | | |||
| type | 7.4 | 0..1 | | | type | 7.4 | 0..1 | | |||
| unique | 7.8.3 | 0..n | | | unique | 7.8.3 | 0..n | | |||
| units | 7.3.3 | 0..1 | | | units | 7.3.3 | 0..1 | | |||
+--------------+---------+-------------+ | +--------------+-------------+-------------+ | |||
The deviate's Substatements | The deviate's Substatements | |||
7.18.3.3. Usage Example | 7.18.3.3. Usage Example | |||
In this example, the device is informing client applications that it | In this example, the device is informing client applications that it | |||
does not support the "daytime" service in the style of RFC 867. | does not support the "daytime" service in the style of RFC 867. | |||
deviation /base:system/base:daytime { | deviation /base:system/base:daytime { | |||
deviate not-supported; | deviate not-supported; | |||
skipping to change at page 116, line 46 | skipping to change at page 118, line 29 | |||
// illegal range restriction | // illegal range restriction | |||
range "11..100"; | range "11..100"; | |||
} | } | |||
} | } | |||
9.3. The decimal64 Built-In Type | 9.3. The decimal64 Built-In Type | |||
The decimal64 type represents a subset of the real numbers, which can | The decimal64 type represents a subset of the real numbers, which can | |||
be represented by decimal numerals. The value space of decimal64 is | be represented by decimal numerals. The value space of decimal64 is | |||
the set of numbers that can be obtained by multiplying a 64-bit | the set of numbers that can be obtained by multiplying a 64-bit | |||
signed integer by a negative power of ten, i.e., expressible as | signed integer by a negative power of ten, i.e., expressible as "i x | |||
"i x 10^-n" where i is an integer64 and n is an integer between 1 and | 10^-n" where i is an integer64 and n is an integer between 1 and 18, | |||
18, inclusively. | inclusively. | |||
9.3.1. Lexical Representation | 9.3.1. Lexical Representation | |||
A decimal64 value is lexically represented as an optional sign ("+" | A decimal64 value is lexically represented as an optional sign ("+" | |||
or "-"), followed by a sequence of decimal digits, optionally | or "-"), followed by a sequence of decimal digits, optionally | |||
followed by a period ('.') as a decimal indicator and a sequence of | followed by a period ('.') as a decimal indicator and a sequence of | |||
decimal digits. If no sign is specified, "+" is assumed. | decimal digits. If no sign is specified, "+" is assumed. | |||
9.3.2. Canonical Form | 9.3.2. Canonical Form | |||
skipping to change at page 122, line 34 | skipping to change at page 123, line 47 | |||
The lexical representation of an enumeration value is the assigned | The lexical representation of an enumeration value is the assigned | |||
name string. | name string. | |||
9.6.2. Canonical Form | 9.6.2. Canonical Form | |||
The canonical form is the assigned name string. | The canonical form is the assigned name string. | |||
9.6.3. Restrictions | 9.6.3. Restrictions | |||
An enumeration cannot be restricted. | An enumeration can be restricted with the "enum" (Section 9.6.4) | |||
statement. | ||||
9.6.4. The enum Statement | 9.6.4. The enum Statement | |||
The "enum" statement, which is a substatement to the "type" | The "enum" statement, which is a substatement to the "type" | |||
statement, MUST be present if the type is "enumeration". It is | statement, MUST be present if the type is "enumeration". It is | |||
repeatedly used to specify each assigned name of an enumeration type. | repeatedly used to specify each assigned name of an enumeration type. | |||
It takes as an argument a string which is the assigned name. The | It takes as an argument a string which is the assigned name. The | |||
string MUST NOT be empty and MUST NOT have any leading or trailing | string MUST NOT be empty and MUST NOT have any leading or trailing | |||
whitespace characters. The use of Unicode control codes SHOULD be | whitespace characters. The use of Unicode control codes SHOULD be | |||
avoided. | avoided. | |||
The statement is optionally followed by a block of substatements that | The statement is optionally followed by a block of substatements that | |||
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. | |||
When an existing enumeration type is restricted, the set of assigned | ||||
names in the new type MUST be a subset of the base type's set of | ||||
assigned names. The value of such an assigned name MUST not be | ||||
changed. | ||||
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 | | | 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 | | |||
skipping to change at page 123, line 36 | skipping to change at page 125, line 9 | |||
If the "enum" substatement is the first one defined, the assigned | If the "enum" substatement is the first one defined, the assigned | |||
value is zero (0); otherwise, the assigned value is one greater than | value is zero (0); otherwise, the assigned value is one greater than | |||
the current highest enum value (i.e., the highest enum value, | the current highest enum value (i.e., the highest enum value, | |||
implicit or explicit, prior to the current "enum" substatement in the | implicit or explicit, prior to the current "enum" substatement in the | |||
parent "type" statement). | parent "type" statement). | |||
If the current highest value is equal to 2147483647, then an enum | If the current highest value is equal to 2147483647, then an enum | |||
value MUST be specified for "enum" substatements following the one | value MUST be specified for "enum" substatements following the one | |||
with the current highest value. | with the current highest value. | |||
When an existing enumeration type is restricted, the "value" | ||||
statement MUST either have the same value as the in the base type or | ||||
not be present, in which case the value is the same as in the base | ||||
type. | ||||
9.6.5. Usage Example | 9.6.5. Usage Example | |||
leaf myenum { | leaf myenum { | |||
type enumeration { | type enumeration { | |||
enum zero; | enum zero; | |||
enum one; | enum one; | |||
enum seven { | enum seven { | |||
value 7; | value 7; | |||
} | } | |||
} | } | |||
} | } | |||
The lexical representation of the leaf "myenum" with value "seven" | The lexical representation of the leaf "myenum" with value "seven" | |||
is: | is: | |||
<myenum>seven</myenum> | <myenum>seven</myenum> | |||
With the following typedef: | ||||
typedef my-base-enumeration-type { | ||||
type enumeration { | ||||
enum white { | ||||
value 1; | ||||
} | ||||
enum yellow { | ||||
value 2; | ||||
} | ||||
enum red { | ||||
value 3; | ||||
} | ||||
} | ||||
} | ||||
the following refinement is legal: | ||||
type my-base-enumeration-type { | ||||
// legal enum refinement | ||||
enum yellow; | ||||
enum red { | ||||
value 3; | ||||
} | ||||
} | ||||
and the following refinement is illegal: | ||||
type my-base-enumeration-type { | ||||
// illegal enum refinement | ||||
enum yellow { | ||||
value 4; // illegal value change | ||||
} | ||||
enum black; // illegal addition of new name | ||||
} | ||||
9.7. The bits Built-In Type | 9.7. The bits Built-In Type | |||
The bits built-in type represents a bit set. That is, a bits value | The bits built-in type represents a bit set. That is, a bits value | |||
is a set of flags identified by small integer position numbers | is a set of flags identified by small integer position numbers | |||
starting at 0. Each bit number has an assigned name. | starting at 0. Each bit number has an assigned name. | |||
9.7.1. Restrictions | 9.7.1. Restrictions | |||
A bits type cannot be restricted. | A bits type cannot be restricted. | |||
skipping to change at page 126, line 37 | skipping to change at page 129, line 9 | |||
The leafref type is used to declare a constraint on the value space | The leafref type is used to declare a constraint on the value space | |||
of a leaf, based on a reference to a set of leaf instances in the | of a leaf, based on a reference to a set of leaf instances in the | |||
data tree. The "path" substatement (Section 9.9.2) selects a set of | data tree. The "path" substatement (Section 9.9.2) selects a set of | |||
leaf instances, and the leafref value space is the set of values of | leaf instances, and the leafref value space is the set of values of | |||
these leaf instances. | these leaf instances. | |||
If the leaf with the leafref type represents configuration data, and | If the leaf with the leafref type represents configuration data, and | |||
the "require-instance" property (Section 9.9.3) is "true", the leaf | the "require-instance" property (Section 9.9.3) is "true", the leaf | |||
it refers to MUST also represent configuration. Such a leaf puts a | it refers to MUST also represent configuration. Such a leaf puts a | |||
constraint on valid data. All such nodes MUST reference existing | constraint on valid data. All such nodes MUST reference existing | |||
leaf instances or leafs with default values in use (see | leaf instances or leafs with default values in use (see Section 7.6.1 | |||
Section 7.6.1) for the data to be valid. This constraint is enforced | and Section 7.7.2) for the data to be valid. This constraint is | |||
according to the rules in Section 8. | enforced according to the rules in Section 8. | |||
There MUST NOT be any circular chains of leafrefs. | There MUST NOT be any circular chains of leafrefs. | |||
If the leaf that the leafref refers to is conditional based on one or | If the leaf that the leafref refers to is conditional based on one or | |||
more features (see Section 7.18.2), then the leaf with the leafref | more features (see Section 7.18.2), then the leaf with the leafref | |||
type MUST also be conditional based on at least the same set of | type MUST also be conditional based on at least the same set of | |||
features. | features. | |||
9.9.1. Restrictions | 9.9.1. Restrictions | |||
skipping to change at page 127, line 31 | skipping to change at page 130, line 5 | |||
list is needed. In these cases, multiple leafrefs are typically | list is needed. In these cases, multiple leafrefs are typically | |||
specified, and predicates are used to tie them together. | specified, and predicates are used to tie them together. | |||
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 If the "path" statement is defined within a typedef, the context | |||
statement is defined. | node is the leaf or leaf-list node in the data tree that | |||
references the typedef. | ||||
o Otherwise, the context node is the node in the data tree for which | ||||
the "path" statement is defined. | ||||
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 | |||
skipping to change at page 131, line 43 | skipping to change at page 134, line 43 | |||
The identityref type is used to reference an existing identity (see | The identityref type is used to reference an existing identity (see | |||
Section 7.16). | Section 7.16). | |||
9.10.1. Restrictions | 9.10.1. Restrictions | |||
An identityref cannot be restricted. | An identityref cannot be restricted. | |||
9.10.2. The identityref's base Statement | 9.10.2. The identityref's base Statement | |||
The "base" statement, which is a substatement to the "type" | The "base" statement, which is a substatement to the "type" | |||
statement, MUST be present if the type is "identityref". The | statement, MUST be present at least once if the type is | |||
argument is the name of an identity, as defined by an "identity" | "identityref". The argument is the name of an identity, as defined | |||
statement. If a prefix is present on the identity name, it refers to | by an "identity" statement. If a prefix is present on the identity | |||
an identity defined in the module that was imported with that prefix. | name, it refers to an identity defined in the module that was | |||
Otherwise, an identity with the matching name MUST be defined in the | imported with that prefix. Otherwise, an identity with the matching | |||
current module or an included submodule. | name MUST be defined in the current module or an included submodule. | |||
Valid values for an identityref are any identities derived from the | Valid values for an identityref are any identities derived from all | |||
identityref's base identity. On a particular server, the valid | the identityref's base identities. On a particular server, the valid | |||
values are further restricted to the set of identities defined in the | values are further restricted to the set of identities defined in the | |||
modules supported by the server. | modules supported by the server. | |||
9.10.3. Lexical Representation | 9.10.3. Lexical Representation | |||
An identityref is encoded as the referred identity's qualified name | An identityref is encoded as the referred identity's qualified name | |||
as defined in [XML-NAMES]. If the prefix is not present, the | as defined in [XML-NAMES]. If the prefix is not present, the | |||
namespace of the identityref is the default namespace in effect on | namespace of the identityref is the default namespace in effect on | |||
the element that contains the identityref value. | the element that contains the identityref value. | |||
When an identityref is given a default value using the "default" | When an identityref is given a default value using the "default" | |||
statement, the identity name in the default value MAY have a prefix. | statement, the identity name in the default value MAY have a prefix. | |||
If a prefix is present on the identity name, it refers to an identity | If a prefix is present on the identity name, it refers to an identity | |||
defined in the module that was imported with that prefix. Otherwise, | defined in the module that was imported with that prefix, or the | |||
an identity with the matching name MUST be defined in the current | prefix for the current module if the identity is defined in the | |||
module or an included submodule. | current module or one of its submodules. Otherwise, an identity with | |||
the matching name MUST be defined in the current module or one of its | ||||
submodules. | ||||
The string value of a node of type identityref in a "must" or "when" | The string value of a node of type identityref in a "must" or "when" | |||
XPath expression is the referred identity's qualified name with the | XPath expression is the referred identity's qualified name with the | |||
prefix always present. | prefix present. If the referred identity is defined in an imported | |||
module, the prefix in the string value is the prefix defined in the | ||||
corresponding "import" statement. Otherwise, the prefix in the | ||||
string value is the prefix for the current module. | ||||
9.10.4. Canonical Form | 9.10.4. Canonical Form | |||
Since the lexical form depends on the XML context in which the value | Since the lexical form depends on the XML context in which the value | |||
occurs, this type does not have a canonical form. | occurs, this type does not have a canonical form. | |||
9.10.5. Usage Example | 9.10.5. Usage Example | |||
With the identity definitions in Section 7.16.3 and the following | With the identity definitions in Section 7.16.3 and the following | |||
module: | module: | |||
skipping to change at page 134, line 50 | skipping to change at page 137, line 50 | |||
The union built-in type represents a value that corresponds to one of | The union built-in type represents a value that corresponds to one of | |||
its member types. | its member types. | |||
When the type is "union", the "type" statement (Section 7.4) MUST be | When the type is "union", the "type" statement (Section 7.4) MUST be | |||
present. It is used to repeatedly specify each member type of the | present. It is used to repeatedly specify each member type of the | |||
union. It takes as an argument a string that is the name of a member | union. It takes as an argument a string that is the name of a member | |||
type. | type. | |||
A member type can be of any built-in or derived type. | A member type can be of any built-in or derived type. | |||
When a string representing a union data type is validated, the string | A value representing a union data type is validated consecutively | |||
is validated against each member type, in the order they are | against each member type, in the order they are specified in the | |||
specified in the "type" statement, until a match is found. The type | "type" statement, until a match is found. The type that matched will | |||
that matched will be the type of the value for the node that was | be the type of the value for the node that was validated. | |||
validated. | ||||
Any default value or "units" property defined in the member types is | Any default value or "units" property defined in the member types is | |||
not inherited by the union type. | not inherited by the union type. | |||
9.12.1. Restrictions | 9.12.1. Restrictions | |||
A union cannot be restricted. However, each member type can be | A union cannot be restricted. However, each member type can be | |||
restricted, based on the rules defined in Section 9. | restricted, based on the rules defined in Section 9. | |||
9.12.2. Lexical Representation | 9.12.2. Lexical Representation | |||
skipping to change at page 137, line 11 | skipping to change at page 140, line 11 | |||
values for the key nodes for list entries, a value of a leaf-list | values for the key nodes for list entries, a value of a leaf-list | |||
entry, or a positional index for a list without keys. For | entry, or a positional index for a list without keys. For | |||
identifying list entries with keys, each predicate consists of one | identifying list entries with keys, each predicate consists of one | |||
equality test per key, and each key MUST have a corresponding | equality test per key, and each key MUST have a corresponding | |||
predicate. | predicate. | |||
If the leaf with the instance-identifier type represents | If the leaf with the instance-identifier type represents | |||
configuration data, and the "require-instance" property | configuration data, and the "require-instance" property | |||
(Section 9.9.3) is "true", the node it refers to MUST also represent | (Section 9.9.3) is "true", the node it refers to MUST also represent | |||
configuration. Such a leaf puts a constraint on valid data. All | configuration. Such a leaf puts a constraint on valid data. All | |||
such leaf nodes MUST reference existing nodes or leaf nodes with | such leaf nodes MUST reference existing nodes or leaf or leaf-list | |||
their default value in use (see Section 7.6.1) for the data to be | nodes with their default value in use (see Section 7.6.1 and | |||
valid. This constraint is enforced according to the rules in | Section 7.7.2) for the data to be valid. This constraint is enforced | |||
Section 8. | according to the rules in 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. | |||
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" | |||
skipping to change at page 138, line 29 | skipping to change at page 141, line 29 | |||
/* instance-identifier for a leaf-list entry */ | /* instance-identifier for a leaf-list entry */ | |||
/ex:system/ex:services/ex:ssh/ex:cipher[.='blowfish-cbc'] | /ex:system/ex:services/ex:ssh/ex:cipher[.='blowfish-cbc'] | |||
/* instance-identifier for a list entry without keys */ | /* instance-identifier for a list entry without keys */ | |||
/ex:stats/ex:port[3] | /ex:stats/ex:port[3] | |||
10. XPath Functions | 10. XPath Functions | |||
This document defines two generic XPath functions and four YANG type- | This document defines two generic XPath functions and four YANG type- | |||
specific XPath functions. | specific XPath functions. The function signatures are specified with | |||
the syntax used in [XPATH]. | ||||
10.1. Functions for Node Sets | 10.1. Functions for Node Sets | |||
10.1.1. current() | 10.1.1. current() | |||
node-set current() | node-set current() | |||
The function current() takes no input parameters, and returns a node | The function current() takes no input parameters, and returns a node | |||
set with the initial context node. | set with the initial context node as its only member. | |||
10.2. Functions for Strings | 10.2. Functions for Strings | |||
10.2.1. re-match() | 10.2.1. re-match() | |||
boolean re-match(string subject, string pattern) | boolean re-match(string subject, string pattern) | |||
The re-match() function returns true if the "subject" string matches | The re-match() function returns true if the "subject" string matches | |||
the regular expression "pattern"; otherwise it returns false. | the regular expression "pattern"; otherwise it returns false. | |||
skipping to change at page 140, line 37 | skipping to change at page 143, line 37 | |||
boolean derived-from(node-set nodes, | boolean derived-from(node-set nodes, | |||
string module-name, | string module-name, | |||
string identity-name) | string identity-name) | |||
The derived-from() function returns true if the first node in | The derived-from() function returns true if the first node in | |||
document order in the argument "nodes" is a node of type identityref, | document order in the argument "nodes" is a node of type identityref, | |||
and its value is an identity that is derived from the identity | and its value is an identity that is derived from the identity | |||
"identity-name" defined in the YANG module "module-name"; otherwise | "identity-name" defined in the YANG module "module-name"; otherwise | |||
it returns false. | it returns false. | |||
10.4.1.1. Usage Example | 10.4.2. derived-from-or-self() | |||
boolean derived-from-or-self(node-set nodes, | ||||
string module-name, | ||||
string identity-name) | ||||
The derived-from-or-self() function returns true if the first node in | ||||
document order in the argument "nodes" is a node of type identityref, | ||||
and its value is an identity that is equal to or derived from the | ||||
identity "identity-name" defined in the YANG module "module-name"; | ||||
otherwise it returns false. | ||||
10.4.2.1. Usage Example | ||||
module example-interface { | module example-interface { | |||
... | ... | |||
identity interface-type; | identity interface-type; | |||
identity ethernet { | identity ethernet { | |||
base interface-type; | base interface-type; | |||
} | } | |||
identity fast-ethernet { | identity fast-ethernet { | |||
skipping to change at page 144, line 32 | skipping to change at page 147, line 32 | |||
o A "min-elements" statement may be removed, or changed to require | o A "min-elements" statement may be removed, or changed to require | |||
fewer elements. | fewer elements. | |||
o A "max-elements" statement may be removed, or changed to allow | o A "max-elements" statement may be removed, or changed to allow | |||
more elements. | more elements. | |||
o A "description" statement may be added or clarified without | o A "description" statement may be added or clarified without | |||
changing the semantics of the definition. | changing the semantics of the definition. | |||
o A "base" statement may be added to an "identity" statement. | ||||
o A "base" statement may be removed from an "identityref" type, | ||||
provided there is at least one "base" statement left. | ||||
o New typedefs, groupings, rpcs, notifications, extensions, | o New typedefs, groupings, rpcs, notifications, extensions, | |||
features, and identities may be added. | features, and identities may be added. | |||
o New data definition statements may be added if they do not add | o New data definition statements may be added if they do not add | |||
mandatory nodes (Section 3.1) to existing nodes or at the top | mandatory nodes (Section 3.1) to existing nodes or at the top | |||
level in a module or submodule, or if they are conditionally | level in a module or submodule, or if they are conditionally | |||
dependent on a new feature (i.e., have an "if-feature" statement | dependent on a new feature (i.e., have an "if-feature" statement | |||
that refers to a new feature). | that refers to a new feature). | |||
o A new "case" statement may be added. | o A new "case" statement may be added. | |||
skipping to change at page 149, line 35 | skipping to change at page 152, line 35 | |||
<text>The MTU of the interface.</text> | <text>The MTU of the interface.</text> | |||
</description> | </description> | |||
<myext:c-define name="MY_MTU"/> | <myext:c-define name="MY_MTU"/> | |||
</leaf> | </leaf> | |||
</list> | </list> | |||
</module> | </module> | |||
13. YANG ABNF Grammar | 13. YANG ABNF Grammar | |||
In YANG, almost all statements are unordered. The ABNF grammar | In YANG, almost all statements are unordered. The ABNF grammar | |||
[RFC5234] defines the canonical order. To improve module | [RFC5234] [RFC7405] defines the canonical order. To improve module | |||
readability, it is RECOMMENDED that clauses be entered in this order. | readability, it is RECOMMENDED that clauses be entered in this order. | |||
Within the ABNF grammar, unordered statements are marked with | Within the ABNF grammar, unordered statements are marked with | |||
comments. | comments. | |||
This grammar assumes that the scanner replaces YANG comments with a | This grammar assumes that the scanner replaces YANG comments with a | |||
single space character. | single space character. | |||
<CODE BEGINS> file "yang.abnf" | <CODE BEGINS> file "yang.abnf" | |||
skipping to change at page 151, line 13 | skipping to change at page 154, line 13 | |||
leaf-stmt / | leaf-stmt / | |||
leaf-list-stmt / | leaf-list-stmt / | |||
list-stmt / | list-stmt / | |||
choice-stmt / | choice-stmt / | |||
anyxml-stmt / | anyxml-stmt / | |||
uses-stmt | uses-stmt | |||
yang-version-stmt = yang-version-keyword sep yang-version-arg-str | yang-version-stmt = yang-version-keyword sep yang-version-arg-str | |||
optsep stmtend | optsep stmtend | |||
yang-version-arg-str = < a string that matches the rule | yang-version-arg-str = < a string that matches the rule > | |||
yang-version-arg > | < yang-version-arg > | |||
yang-version-arg = "1.1" | yang-version-arg = "1.1" | |||
import-stmt = import-keyword sep identifier-arg-str optsep | import-stmt = import-keyword sep identifier-arg-str optsep | |||
"{" stmtsep | "{" stmtsep | |||
prefix-stmt stmtsep | prefix-stmt stmtsep | |||
[revision-date-stmt stmtsep] | [revision-date-stmt stmtsep] | |||
"}" | "}" | |||
include-stmt = include-keyword sep identifier-arg-str optsep | include-stmt = include-keyword sep identifier-arg-str optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
[revision-date-stmt stmtsep] | [revision-date-stmt stmtsep] | |||
"}") | "}") | |||
namespace-stmt = namespace-keyword sep uri-str optsep stmtend | namespace-stmt = namespace-keyword sep uri-str optsep stmtend | |||
uri-str = < a string that matches the rule | uri-str = < a string that matches the rule > | |||
URI in RFC 3986 > | < URI in RFC 3986 > | |||
prefix-stmt = prefix-keyword sep prefix-arg-str | prefix-stmt = prefix-keyword sep prefix-arg-str | |||
optsep stmtend | optsep stmtend | |||
belongs-to-stmt = belongs-to-keyword sep identifier-arg-str | belongs-to-stmt = belongs-to-keyword sep identifier-arg-str | |||
optsep | optsep | |||
"{" stmtsep | "{" stmtsep | |||
prefix-stmt stmtsep | prefix-stmt stmtsep | |||
"}" | "}" | |||
skipping to change at page 152, line 40 | skipping to change at page 155, line 40 | |||
argument-stmt = argument-keyword sep identifier-arg-str optsep | argument-stmt = argument-keyword sep identifier-arg-str optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
[yin-element-stmt stmtsep] | [yin-element-stmt stmtsep] | |||
"}") | "}") | |||
yin-element-stmt = yin-element-keyword sep yin-element-arg-str | yin-element-stmt = yin-element-keyword sep yin-element-arg-str | |||
stmtend | stmtend | |||
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) | *(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 | |||
skipping to change at page 153, line 24 | skipping to change at page 156, line 24 | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
*(if-feature-stmt stmtsep) | *(if-feature-stmt stmtsep) | |||
[status-stmt stmtsep] | [status-stmt stmtsep] | |||
[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-feature-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-keyword sep if-feature-expr / | |||
identifier-ref-arg | identifier-ref-arg | |||
boolean-operator = 'and' / 'or' | boolean-operator = and-keyword / or-keyword | |||
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 | |||
type-stmt stmtsep | type-stmt stmtsep | |||
[units-stmt stmtsep] | [units-stmt stmtsep] | |||
[default-stmt stmtsep] | [default-stmt stmtsep] | |||
[status-stmt stmtsep] | [status-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
skipping to change at page 154, line 33 | skipping to change at page 157, line 33 | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
"}") | "}") | |||
decimal64-specification = ;; these stmts can appear in any order | decimal64-specification = ;; these stmts can appear in any order | |||
fraction-digits-stmt | fraction-digits-stmt | |||
[range-stmt stmtsep] | [range-stmt stmtsep] | |||
fraction-digits-stmt = fraction-digits-keyword sep | fraction-digits-stmt = fraction-digits-keyword sep | |||
fraction-digits-arg-str stmtend | fraction-digits-arg-str stmtend | |||
fraction-digits-arg-str = < a string that matches the rule | fraction-digits-arg-str = < a string that matches the rule > | |||
fraction-digits-arg > | < fraction-digits-arg > | |||
fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" / | fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" / | |||
"5" / "6" / "7" / "8"]) | "5" / "6" / "7" / "8"]) | |||
/ "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" | / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" | |||
string-restrictions = ;; these stmts can appear in any order | string-restrictions = ;; these stmts can appear in any order | |||
[length-stmt stmtsep] | [length-stmt stmtsep] | |||
*(pattern-stmt stmtsep) | *(pattern-stmt stmtsep) | |||
length-stmt = length-keyword sep length-arg-str optsep | length-stmt = length-keyword sep length-arg-str optsep | |||
skipping to change at page 155, line 20 | skipping to change at page 158, line 20 | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[modifier-stmt stmtsep] | [modifier-stmt stmtsep] | |||
[error-message-stmt stmtsep] | [error-message-stmt stmtsep] | |||
[error-app-tag-stmt stmtsep] | [error-app-tag-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
"}") | "}") | |||
modifier-stmt = modifier-keyword sep modifier-arg-str stmtend | modifier-stmt = modifier-keyword sep modifier-arg-str stmtend | |||
modifier-arg-str = < a string that matches the rule | modifier-arg-str = < a string that matches the rule > | |||
modifier-arg > | < modifier-arg > | |||
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 | |||
skipping to change at page 155, line 50 | skipping to change at page 158, line 50 | |||
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] | |||
path-stmt = path-keyword sep path-arg-str stmtend | path-stmt = path-keyword sep path-arg-str stmtend | |||
require-instance-stmt = require-instance-keyword sep | require-instance-stmt = require-instance-keyword sep | |||
require-instance-arg-str stmtend | require-instance-arg-str stmtend | |||
require-instance-arg-str = < a string that matches the rule | require-instance-arg-str = < a string that matches the rule > | |||
require-instance-arg > | < require-instance-arg > | |||
require-instance-arg = true-keyword / false-keyword | require-instance-arg = true-keyword / false-keyword | |||
instance-identifier-specification = | instance-identifier-specification = | |||
[require-instance-stmt stmtsep] | [require-instance-stmt stmtsep] | |||
identityref-specification = | identityref-specification = | |||
base-stmt stmtsep | 1*(base-stmt stmtsep) | |||
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 | |||
skipping to change at page 156, line 33 | skipping to change at page 159, line 33 | |||
*(if-feature-stmt stmtsep) | *(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 > | |||
position-value-arg > | < position-value-arg > | |||
position-value-arg = non-negative-integer-value | position-value-arg = non-negative-integer-value | |||
status-stmt = status-keyword sep status-arg-str stmtend | status-stmt = status-keyword sep status-arg-str stmtend | |||
status-arg-str = < a string that matches the rule | status-arg-str = < a string that matches the rule > | |||
status-arg > | < status-arg > | |||
status-arg = current-keyword / | status-arg = current-keyword / | |||
obsolete-keyword / | obsolete-keyword / | |||
deprecated-keyword | deprecated-keyword | |||
config-stmt = config-keyword sep | config-stmt = config-keyword sep | |||
config-arg-str stmtend | config-arg-str stmtend | |||
config-arg-str = < a string that matches the rule | config-arg-str = < a string that matches the rule > | |||
config-arg > | < config-arg > | |||
config-arg = true-keyword / false-keyword | config-arg = true-keyword / false-keyword | |||
mandatory-stmt = mandatory-keyword sep | mandatory-stmt = mandatory-keyword sep | |||
mandatory-arg-str stmtend | mandatory-arg-str stmtend | |||
mandatory-arg-str = < a string that matches the rule | mandatory-arg-str = < a string that matches the rule > | |||
mandatory-arg > | < mandatory-arg > | |||
mandatory-arg = true-keyword / false-keyword | mandatory-arg = true-keyword / false-keyword | |||
presence-stmt = presence-keyword sep string stmtend | presence-stmt = presence-keyword sep string stmtend | |||
ordered-by-stmt = ordered-by-keyword sep | ordered-by-stmt = ordered-by-keyword sep | |||
ordered-by-arg-str stmtend | ordered-by-arg-str stmtend | |||
ordered-by-arg-str = < a string that matches the rule | ordered-by-arg-str = < a string that matches the rule > | |||
ordered-by-arg > | < ordered-by-arg > | |||
ordered-by-arg = user-keyword / system-keyword | ordered-by-arg = user-keyword / system-keyword | |||
must-stmt = must-keyword sep string optsep | must-stmt = must-keyword sep string optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[error-message-stmt stmtsep] | [error-message-stmt stmtsep] | |||
[error-app-tag-stmt stmtsep] | [error-app-tag-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
"}") | "}") | |||
error-message-stmt = error-message-keyword sep string stmtend | error-message-stmt = error-message-keyword sep string stmtend | |||
error-app-tag-stmt = error-app-tag-keyword sep string stmtend | error-app-tag-stmt = error-app-tag-keyword sep string stmtend | |||
min-elements-stmt = min-elements-keyword sep | min-elements-stmt = min-elements-keyword sep | |||
min-value-arg-str stmtend | min-value-arg-str stmtend | |||
min-value-arg-str = < a string that matches the rule | min-value-arg-str = < a string that matches the rule > | |||
min-value-arg > | < min-value-arg > | |||
min-value-arg = non-negative-integer-value | min-value-arg = non-negative-integer-value | |||
max-elements-stmt = max-elements-keyword sep | max-elements-stmt = max-elements-keyword sep | |||
max-value-arg-str stmtend | max-value-arg-str stmtend | |||
max-value-arg-str = < a string that matches the rule | max-value-arg-str = < a string that matches the rule > | |||
max-value-arg > | < max-value-arg > | |||
max-value-arg = unbounded-keyword / | max-value-arg = unbounded-keyword / | |||
positive-integer-value | positive-integer-value | |||
value-stmt = value-keyword sep integer-value-str stmtend | value-stmt = value-keyword sep integer-value-str stmtend | |||
integer-value-str = < a string that matches the rule | integer-value-str = < a string that matches the rule > | |||
integer-value > | < integer-value > | |||
grouping-stmt = grouping-keyword sep identifier-arg-str optsep | grouping-stmt = grouping-keyword sep identifier-arg-str optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[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) | |||
skipping to change at page 159, line 18 | skipping to change at page 162, line 18 | |||
"}" | "}" | |||
leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep | leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[when-stmt stmtsep] | [when-stmt stmtsep] | |||
*(if-feature-stmt stmtsep) | *(if-feature-stmt stmtsep) | |||
type-stmt stmtsep | type-stmt stmtsep | |||
[units-stmt stmtsep] | [units-stmt stmtsep] | |||
*(must-stmt stmtsep) | *(must-stmt stmtsep) | |||
*(default-stmt stmtsep) | ||||
[config-stmt stmtsep] | [config-stmt stmtsep] | |||
[min-elements-stmt stmtsep] | [min-elements-stmt stmtsep] | |||
[max-elements-stmt stmtsep] | [max-elements-stmt stmtsep] | |||
[ordered-by-stmt stmtsep] | [ordered-by-stmt stmtsep] | |||
[status-stmt stmtsep] | [status-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
"}" | "}" | |||
list-stmt = list-keyword sep identifier-arg-str optsep | list-stmt = list-keyword sep identifier-arg-str optsep | |||
skipping to change at page 159, line 49 | skipping to change at page 162, line 50 | |||
[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) | |||
1*(data-def-stmt stmtsep) | 1*(data-def-stmt stmtsep) | |||
"}" | "}" | |||
key-stmt = key-keyword sep key-arg-str stmtend | key-stmt = key-keyword sep key-arg-str stmtend | |||
key-arg-str = < a string that matches the rule | key-arg-str = < a string that matches the rule > | |||
key-arg > | < key-arg > | |||
key-arg = node-identifier *(sep node-identifier) | key-arg = node-identifier *(sep node-identifier) | |||
unique-stmt = unique-keyword sep unique-arg-str stmtend | unique-stmt = unique-keyword sep unique-arg-str stmtend | |||
unique-arg-str = < a string that matches the rule | unique-arg-str = < a string that matches the rule > | |||
unique-arg > | < unique-arg > | |||
unique-arg = descendant-schema-nodeid | unique-arg = descendant-schema-nodeid | |||
*(sep descendant-schema-nodeid) | *(sep descendant-schema-nodeid) | |||
choice-stmt = choice-keyword sep identifier-arg-str optsep | choice-stmt = choice-keyword sep identifier-arg-str optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[when-stmt stmtsep] | [when-stmt stmtsep] | |||
*(if-feature-stmt stmtsep) | *(if-feature-stmt stmtsep) | |||
skipping to change at page 161, line 40 | skipping to change at page 164, line 43 | |||
[presence-stmt stmtsep] | [presence-stmt stmtsep] | |||
[default-stmt stmtsep] | [default-stmt stmtsep] | |||
[config-stmt stmtsep] | [config-stmt stmtsep] | |||
[mandatory-stmt stmtsep] | [mandatory-stmt stmtsep] | |||
[min-elements-stmt stmtsep] | [min-elements-stmt stmtsep] | |||
[max-elements-stmt stmtsep] | [max-elements-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
"}" | "}" | |||
refine-arg-str = < a string that matches the rule | refine-arg-str = < a string that matches the rule > | |||
refine-arg > | < refine-arg > | |||
refine-arg = descendant-schema-nodeid | refine-arg = descendant-schema-nodeid | |||
uses-augment-stmt = augment-keyword sep uses-augment-arg-str optsep | uses-augment-stmt = augment-keyword sep uses-augment-arg-str optsep | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[when-stmt stmtsep] | [when-stmt stmtsep] | |||
*(if-feature-stmt stmtsep) | *(if-feature-stmt stmtsep) | |||
[status-stmt stmtsep] | [status-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
1*((data-def-stmt stmtsep) / | 1*((data-def-stmt stmtsep) / | |||
(case-stmt stmtsep)) | (case-stmt stmtsep)) | |||
"}" | "}" | |||
uses-augment-arg-str = < a string that matches the rule | uses-augment-arg-str = < a string that matches the rule > | |||
uses-augment-arg > | < uses-augment-arg > | |||
uses-augment-arg = descendant-schema-nodeid | uses-augment-arg = descendant-schema-nodeid | |||
augment-stmt = augment-keyword sep augment-arg-str optsep | augment-stmt = augment-keyword sep augment-arg-str optsep | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[when-stmt stmtsep] | [when-stmt stmtsep] | |||
*(if-feature-stmt stmtsep) | *(if-feature-stmt stmtsep) | |||
[status-stmt stmtsep] | [status-stmt stmtsep] | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
1*((data-def-stmt stmtsep) / | 1*((data-def-stmt stmtsep) / | |||
(case-stmt stmtsep)) | (case-stmt stmtsep)) | |||
"}" | "}" | |||
augment-arg-str = < a string that matches the rule | augment-arg-str = < a string that matches the rule > | |||
augment-arg > | < augment-arg > | |||
augment-arg = absolute-schema-nodeid | augment-arg = absolute-schema-nodeid | |||
when-stmt = when-keyword sep string optsep | when-stmt = when-keyword sep string optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
"}") | "}") | |||
skipping to change at page 163, line 50 | skipping to change at page 167, line 5 | |||
"{" stmtsep | "{" stmtsep | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[description-stmt stmtsep] | [description-stmt stmtsep] | |||
[reference-stmt stmtsep] | [reference-stmt stmtsep] | |||
(deviate-not-supported-stmt / | (deviate-not-supported-stmt / | |||
1*(deviate-add-stmt / | 1*(deviate-add-stmt / | |||
deviate-replace-stmt / | deviate-replace-stmt / | |||
deviate-delete-stmt)) | deviate-delete-stmt)) | |||
"}" | "}" | |||
deviation-arg-str = < a string that matches the rule | deviation-arg-str = < a string that matches the rule > | |||
deviation-arg > | < deviation-arg > | |||
deviation-arg = absolute-schema-nodeid | deviation-arg = absolute-schema-nodeid | |||
deviate-not-supported-stmt = | deviate-not-supported-stmt = | |||
deviate-keyword sep | deviate-keyword sep | |||
not-supported-keyword-str optsep | not-supported-keyword-str optsep | |||
(";" / | (";" / | |||
"{" stmtsep | "{" stmtsep | |||
"}") | "}") | |||
skipping to change at page 164, line 51 | skipping to change at page 168, line 5 | |||
;; these stmts can appear in any order | ;; these stmts can appear in any order | |||
[type-stmt stmtsep] | [type-stmt stmtsep] | |||
[units-stmt stmtsep] | [units-stmt stmtsep] | |||
[default-stmt stmtsep] | [default-stmt stmtsep] | |||
[config-stmt stmtsep] | [config-stmt stmtsep] | |||
[mandatory-stmt stmtsep] | [mandatory-stmt stmtsep] | |||
[min-elements-stmt stmtsep] | [min-elements-stmt stmtsep] | |||
[max-elements-stmt stmtsep] | [max-elements-stmt stmtsep] | |||
"}") | "}") | |||
not-supported-keyword-str = < a string that matches the rule | not-supported-keyword-str = < a string that matches the rule > | |||
not-supported-keyword> | < not-supported-keyword> | |||
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 | ;; represents the usage of an extension statement | |||
unknown-statement = prefix ":" identifier [sep string] optsep | unknown-statement = prefix ":" identifier [sep string] optsep | |||
(";" / | (";" / | |||
"{" optsep | "{" optsep | |||
*((yang-stmt / unknown-statement) optsep) | *((yang-stmt / unknown-statement) optsep) | |||
"}") | "}") | |||
yang-stmt = anyxml-stmt / | yang-stmt = anyxml-stmt / | |||
argument-stmt / | argument-stmt / | |||
skipping to change at page 166, line 45 | skipping to change at page 169, line 48 | |||
units-stmt / | units-stmt / | |||
uses-augment-stmt / | uses-augment-stmt / | |||
uses-stmt / | uses-stmt / | |||
value-stmt / | value-stmt / | |||
when-stmt / | when-stmt / | |||
yang-version-stmt / | yang-version-stmt / | |||
yin-element-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] | |||
range-boundary = min-keyword / max-keyword / | range-boundary = min-keyword / max-keyword / | |||
integer-value / decimal-value | integer-value / decimal-value | |||
;; Lengths | ;; Lengths | |||
length-arg-str = < a string that matches the rule | length-arg-str = < a string that matches the rule > | |||
length-arg > | < length-arg > | |||
length-arg = length-part *(optsep "|" optsep length-part) | length-arg = length-part *(optsep "|" optsep length-part) | |||
length-part = length-boundary | length-part = length-boundary | |||
[optsep ".." optsep length-boundary] | [optsep ".." optsep length-boundary] | |||
length-boundary = min-keyword / max-keyword / | length-boundary = min-keyword / max-keyword / | |||
non-negative-integer-value | non-negative-integer-value | |||
;; Date | ;; Date | |||
date-arg-str = < a string that matches the rule | date-arg-str = < a string that matches the rule > | |||
date-arg > | < date-arg > | |||
date-arg = 4DIGIT "-" 2DIGIT "-" 2DIGIT | date-arg = 4DIGIT "-" 2DIGIT "-" 2DIGIT | |||
;; Schema Node Identifiers | ;; Schema Node Identifiers | |||
schema-nodeid = absolute-schema-nodeid / | schema-nodeid = absolute-schema-nodeid / | |||
descendant-schema-nodeid | descendant-schema-nodeid | |||
absolute-schema-nodeid = 1*("/" node-identifier) | absolute-schema-nodeid = 1*("/" node-identifier) | |||
skipping to change at page 168, line 4 | skipping to change at page 171, line 7 | |||
instance-identifier = 1*("/" (node-identifier *predicate)) | instance-identifier = 1*("/" (node-identifier *predicate)) | |||
predicate = "[" *WSP (predicate-expr / pos) *WSP "]" | predicate = "[" *WSP (predicate-expr / pos) *WSP "]" | |||
predicate-expr = (node-identifier / ".") *WSP "=" *WSP | predicate-expr = (node-identifier / ".") *WSP "=" *WSP | |||
((DQUOTE string DQUOTE) / | ((DQUOTE string DQUOTE) / | |||
(SQUOTE string SQUOTE)) | (SQUOTE string SQUOTE)) | |||
pos = non-negative-integer-value | pos = non-negative-integer-value | |||
;; leafref path | ;; leafref path | |||
path-arg-str = < a string that matches the rule | path-arg-str = < a string that matches the rule > | |||
path-arg > | < path-arg > | |||
path-arg = absolute-path / relative-path | path-arg = absolute-path / relative-path | |||
absolute-path = 1*("/" (node-identifier *path-predicate)) | absolute-path = 1*("/" (node-identifier *path-predicate)) | |||
relative-path = 1*(".." "/") descendant-path | relative-path = 1*(".." "/") descendant-path | |||
descendant-path = node-identifier | descendant-path = node-identifier | |||
[*path-predicate absolute-path] | [*path-predicate absolute-path] | |||
skipping to change at page 168, line 29 | skipping to change at page 171, line 33 | |||
path-equality-expr = node-identifier *WSP "=" *WSP path-key-expr | path-equality-expr = node-identifier *WSP "=" *WSP path-key-expr | |||
path-key-expr = current-function-invocation *WSP "/" *WSP | path-key-expr = current-function-invocation *WSP "/" *WSP | |||
rel-path-keyexpr | rel-path-keyexpr | |||
rel-path-keyexpr = 1*(".." *WSP "/" *WSP) | rel-path-keyexpr = 1*(".." *WSP "/" *WSP) | |||
*(node-identifier *WSP "/" *WSP) | *(node-identifier *WSP "/" *WSP) | |||
node-identifier | node-identifier | |||
;;; Keywords, using abnfgen's syntax for case-sensitive strings | ;;; Keywords, using RFC 7405 syntax for case-sensitive strings | |||
;; statement keywords | ;; statement keywords | |||
anyxml-keyword = 'anyxml' | anyxml-keyword = %s"anyxml" | |||
argument-keyword = 'argument' | argument-keyword = %s"argument" | |||
augment-keyword = 'augment' | augment-keyword = %s"augment" | |||
base-keyword = 'base' | base-keyword = %s"base" | |||
belongs-to-keyword = 'belongs-to' | belongs-to-keyword = %s"belongs-to" | |||
bit-keyword = 'bit' | bit-keyword = %s"bit" | |||
case-keyword = 'case' | case-keyword = %s"case" | |||
choice-keyword = 'choice' | choice-keyword = %s"choice" | |||
config-keyword = 'config' | config-keyword = %s"config" | |||
contact-keyword = 'contact' | contact-keyword = %s"contact" | |||
container-keyword = 'container' | container-keyword = %s"container" | |||
default-keyword = 'default' | default-keyword = %s"default" | |||
description-keyword = 'description' | description-keyword = %s"description" | |||
enum-keyword = 'enum' | enum-keyword = %s"enum" | |||
error-app-tag-keyword = 'error-app-tag' | error-app-tag-keyword = %s"error-app-tag" | |||
error-message-keyword = 'error-message' | error-message-keyword = %s"error-message" | |||
extension-keyword = 'extension' | extension-keyword = %s"extension" | |||
deviation-keyword = 'deviation' | deviation-keyword = %s"deviation" | |||
deviate-keyword = 'deviate' | deviate-keyword = %s"deviate" | |||
feature-keyword = 'feature' | feature-keyword = %s"feature" | |||
fraction-digits-keyword = 'fraction-digits' | fraction-digits-keyword = %s"fraction-digits" | |||
grouping-keyword = 'grouping' | grouping-keyword = %s"grouping" | |||
identity-keyword = 'identity' | identity-keyword = %s"identity" | |||
if-feature-keyword = 'if-feature' | if-feature-keyword = %s"if-feature" | |||
import-keyword = 'import' | import-keyword = %s"import" | |||
include-keyword = 'include' | include-keyword = %s"include" | |||
input-keyword = 'input' | input-keyword = %s"input" | |||
key-keyword = 'key' | key-keyword = %s"key" | |||
leaf-keyword = 'leaf' | leaf-keyword = %s"leaf" | |||
leaf-list-keyword = 'leaf-list' | leaf-list-keyword = %s"leaf-list" | |||
length-keyword = 'length' | length-keyword = %s"length" | |||
list-keyword = 'list' | list-keyword = %s"list" | |||
mandatory-keyword = 'mandatory' | mandatory-keyword = %s"mandatory" | |||
max-elements-keyword = 'max-elements' | max-elements-keyword = %s"max-elements" | |||
min-elements-keyword = 'min-elements' | min-elements-keyword = %s"min-elements" | |||
modifier-keyword = 'modifier' | modifier-keyword = %s"modifier" | |||
module-keyword = 'module' | module-keyword = %s"module" | |||
must-keyword = 'must' | must-keyword = %s"must" | |||
namespace-keyword = 'namespace' | namespace-keyword = %s"namespace" | |||
notification-keyword= 'notification' | notification-keyword= %s"notification" | |||
ordered-by-keyword = 'ordered-by' | ordered-by-keyword = %s"ordered-by" | |||
organization-keyword= 'organization' | organization-keyword= %s"organization" | |||
output-keyword = 'output' | output-keyword = %s"output" | |||
path-keyword = 'path' | path-keyword = %s"path" | |||
pattern-keyword = 'pattern' | pattern-keyword = %s"pattern" | |||
position-keyword = 'position' | position-keyword = %s"position" | |||
prefix-keyword = 'prefix' | prefix-keyword = %s"prefix" | |||
presence-keyword = 'presence' | presence-keyword = %s"presence" | |||
range-keyword = 'range' | range-keyword = %s"range" | |||
reference-keyword = 'reference' | reference-keyword = %s"reference" | |||
refine-keyword = 'refine' | refine-keyword = %s"refine" | |||
require-instance-keyword = 'require-instance' | require-instance-keyword = %s"require-instance" | |||
revision-keyword = 'revision' | revision-keyword = %s"revision" | |||
revision-date-keyword = 'revision-date' | revision-date-keyword = %s"revision-date" | |||
rpc-keyword = 'rpc' | rpc-keyword = %s"rpc" | |||
status-keyword = 'status' | status-keyword = %s"status" | |||
submodule-keyword = 'submodule' | submodule-keyword = %s"submodule" | |||
type-keyword = 'type' | type-keyword = %s"type" | |||
typedef-keyword = 'typedef' | typedef-keyword = %s"typedef" | |||
unique-keyword = 'unique' | unique-keyword = %s"unique" | |||
units-keyword = 'units' | units-keyword = %s"units" | |||
uses-keyword = 'uses' | uses-keyword = %s"uses" | |||
value-keyword = 'value' | value-keyword = %s"value" | |||
when-keyword = 'when' | when-keyword = %s"when" | |||
yang-version-keyword= 'yang-version' | yang-version-keyword= %s"yang-version" | |||
yin-element-keyword = 'yin-element' | yin-element-keyword = %s"yin-element" | |||
;; other keywords | ;; other keywords | |||
add-keyword = 'add' | ||||
current-keyword = 'current' | add-keyword = %s"add" | |||
delete-keyword = 'delete' | current-keyword = %s"current" | |||
deprecated-keyword = 'deprecated' | delete-keyword = %s"delete" | |||
false-keyword = 'false' | deprecated-keyword = %s"deprecated" | |||
invert-match-keyword = 'invert-match' | false-keyword = %s"false" | |||
max-keyword = 'max' | invert-match-keyword = %s"invert-match" | |||
min-keyword = 'min' | max-keyword = %s"max" | |||
not-supported-keyword = 'not-supported' | min-keyword = %s"min" | |||
obsolete-keyword = 'obsolete' | not-supported-keyword = %s"not-supported" | |||
replace-keyword = 'replace' | obsolete-keyword = %s"obsolete" | |||
system-keyword = 'system' | replace-keyword = %s"replace" | |||
true-keyword = 'true' | system-keyword = %s"system" | |||
unbounded-keyword = 'unbounded' | true-keyword = %s"true" | |||
user-keyword = 'user' | unbounded-keyword = %s"unbounded" | |||
user-keyword = %s"user" | ||||
and-keyword = %s"and" | ||||
or-keyword = %s"or" | ||||
not-keyword = %s"not" | ||||
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 > | |||
identifier-arg = identifier | identifier-arg = identifier | |||
;; 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, that matches the rule | < the scanner, that matches the rule > | |||
yang-string > | < yang-string > | |||
yang-string = *yang-char | yang-string = *yang-char | |||
;; any Unicode character including tab, carriage return, and line | ;; any Unicode character including tab, carriage return, and line | |||
;; feed, but excluding the other C0 control characters, the surrogate | ;; feed, but excluding the other C0 control characters, the surrogate | |||
;; blocks, and the noncharacters. | ;; blocks, and the noncharacters. | |||
yang-char = %x9 / %xA / %xD / %x20-D7FF / | yang-char = %x9 / %xA / %xD / %x20-D7FF / | |||
; exclude surrogate blocks %xD800-DFFF | ; exclude surrogate blocks %xD800-DFFF | |||
%xE000-FDCF / ; exclude noncharacters %xFDD0-FDEF | %xE000-FDCF / ; exclude noncharacters %xFDD0-FDEF | |||
%xFDF0-FFFD / ; exclude noncharacters %xFFFE-FFFF | %xFDF0-FFFD / ; exclude noncharacters %xFFFE-FFFF | |||
skipping to change at page 179, line 17 | skipping to change at page 183, 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 -02 | 19.1. Version -03 | |||
o Incorporated changes from WG reviews. | ||||
o Included solution Y05-01. | ||||
o Included solution Y10-01. | ||||
o Included solution Y13-01. | ||||
o Included solution Y28-02. | ||||
o Included solution Y55-01 (parts of it was included in -01). | ||||
19.2. Version -02 | ||||
o Included solution Y02-01. | o Included solution Y02-01. | |||
o Included solution Y04-02. | o Included solution Y04-02. | |||
o Included solution Y11-01. | o Included solution Y11-01. | |||
o Included solution Y41-01. | o Included solution Y41-01. | |||
o Included solution Y56-01. | o Included solution Y56-01. | |||
19.2. Version -01 | 19.3. 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 180, line 5 | skipping to change at page 184, line 19 | |||
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.3. Version -00 | 19.4. 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 | |||
skipping to change at page 181, line 5 | skipping to change at page 185, line 19 | |||
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
[RFC5277] Chisholm, S. and H. Trevino, "NETCONF Event | [RFC5277] Chisholm, S. and H. Trevino, "NETCONF Event | |||
Notifications", RFC 5277, July 2008. | Notifications", RFC 5277, July 2008. | |||
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | |||
Bierman, "Network Configuration Protocol (NETCONF)", RFC | Bierman, "Network Configuration Protocol (NETCONF)", RFC | |||
6241, June 2011. | 6241, June 2011. | |||
[RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", RFC | ||||
7405, December 2014. | ||||
[XML-NAMES] | [XML-NAMES] | |||
Hollander, D., Tobin, R., Thompson, H., Bray, T., and A. | Hollander, D., Tobin, R., Thompson, H., Bray, T., and A. | |||
Layman, "Namespaces in XML 1.0 (Third Edition)", World | Layman, "Namespaces in XML 1.0 (Third Edition)", World | |||
Wide Web Consortium Recommendation REC-xml-names-20091208, | Wide Web Consortium Recommendation REC-xml-names-20091208, | |||
December 2009, | December 2009, | |||
<http://www.w3.org/TR/2009/REC-xml-names-20091208>. | <http://www.w3.org/TR/2009/REC-xml-names-20091208>. | |||
[XPATH] Clark, J. and S. DeRose, "XML Path Language (XPath) | [XPATH] Clark, J. and S. DeRose, "XML Path Language (XPath) | |||
Version 1.0", World Wide Web Consortium Recommendation | Version 1.0", World Wide Web Consortium Recommendation | |||
REC-xpath-19991116, November 1999, | REC-xpath-19991116, November 1999, | |||
End of changes. 124 change blocks. | ||||
449 lines changed or deleted | 626 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/ |