draft-ietf-ospf-yang-26.txt   draft-ietf-ospf-yang-27.txt 
Internet D. Yeung Internet D. Yeung
Internet-Draft Arrcus Internet-Draft Arrcus
Intended status: Standards Track Y. Qu Intended status: Standards Track Y. Qu
Expires: February 8, 2020 Futurewei Expires: February 23, 2020 Futurewei
J. Zhang J. Zhang
Juniper Networks Juniper Networks
I. Chen I. Chen
The MITRE Corporation The MITRE Corporation
A. Lindem A. Lindem
Cisco Systems Cisco Systems
August 7, 2019 August 22, 2019
YANG Data Model for OSPF Protocol YANG Data Model for OSPF Protocol
draft-ietf-ospf-yang-26 draft-ietf-ospf-yang-27
Abstract Abstract
This document defines a YANG data model that can be used to configure This document defines a YANG data model that can be used to configure
and manage OSPF. The model is based on YANG 1.1 as defined in RFC and manage OSPF. The model is based on YANG 1.1 as defined in RFC
7950 and conforms to the Network Management Datastore Architecture 7950 and conforms to the Network Management Datastore Architecture
(NDMA) as described in RFC 8342. (NMDA) as described in RFC 8342.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 https://datatracker.ietf.org/drafts/current/. Drafts is at https://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 February 8, 2020. This Internet-Draft will expire on February 23, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 27 skipping to change at page 2, line 27
2.1. OSPF Operational State . . . . . . . . . . . . . . . . . 3 2.1. OSPF Operational State . . . . . . . . . . . . . . . . . 3
2.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3. OSPFv2 and OSPFv3 . . . . . . . . . . . . . . . . . . . . 5 2.3. OSPFv2 and OSPFv3 . . . . . . . . . . . . . . . . . . . . 5
2.4. Optional Features . . . . . . . . . . . . . . . . . . . . 5 2.4. Optional Features . . . . . . . . . . . . . . . . . . . . 5
2.5. OSPF Router Configuration/Operational State . . . . . . . 7 2.5. OSPF Router Configuration/Operational State . . . . . . . 7
2.6. OSPF Area Configuration/Operational State . . . . . . . . 10 2.6. OSPF Area Configuration/Operational State . . . . . . . . 10
2.7. OSPF Interface Configuration/Operational State . . . . . 16 2.7. OSPF Interface Configuration/Operational State . . . . . 16
2.8. OSPF Notifications . . . . . . . . . . . . . . . . . . . 19 2.8. OSPF Notifications . . . . . . . . . . . . . . . . . . . 19
2.9. OSPF RPC Operations . . . . . . . . . . . . . . . . . . . 23 2.9. OSPF RPC Operations . . . . . . . . . . . . . . . . . . . 23
3. OSPF YANG Module . . . . . . . . . . . . . . . . . . . . . . 23 3. OSPF YANG Module . . . . . . . . . . . . . . . . . . . . . . 23
4. Security Considerations . . . . . . . . . . . . . . . . . . . 117 4. Security Considerations . . . . . . . . . . . . . . . . . . . 119
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 119 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 120
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 119 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 121
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 119 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 121
7.1. Normative References . . . . . . . . . . . . . . . . . . 119 7.1. Normative References . . . . . . . . . . . . . . . . . . 121
7.2. Informative References . . . . . . . . . . . . . . . . . 125 7.2. Informative References . . . . . . . . . . . . . . . . . 127
Appendix A. Contributors' Addresses . . . . . . . . . . . . . . 126 Appendix A. Contributors' Addresses . . . . . . . . . . . . . . 128
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 126 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 128
1. Overview 1. Overview
YANG [RFC6020][RFC7950] is a data definition language used to define YANG [RFC6020][RFC7950] is a data definition language used to define
the contents of a conceptual data store that allows networked devices the contents of a conceptual data store that allows networked devices
to be managed using NETCONF [RFC6241]. YANG is proving relevant to be managed using NETCONF [RFC6241], RESTCONF [RFC8040], and other
beyond its initial confines, as bindings to other interfaces (e.g., Network Management protocols. Furthermore, YANG data models can be
ReST) and encodings other than XML (e.g., JSON) are being defined. used as the basis for implementation of other interfaces, such as CLI
Furthermore, YANG data models can be used as the basis for and programmatic APIs.
implementation of other interfaces, such as CLI and programmatic
APIs.
This document defines a YANG data model that can be used to configure This document defines a YANG data model that can be used to configure
and manage OSPF and it is an augmentation to the core routing data and manage OSPF and it is an augmentation to the core routing data
model. It fully conforms to the Network Management Datastore model. It fully conforms to the Network Management Datastore
Architecture (NDMA) [RFC8342]. A core routing data model is defined Architecture (NMDA) [RFC8342]. A core routing data model is defined
in [RFC8349], and it provides the basis for the development of data in [RFC8349], and it provides the basis for the development of data
models for routing protocols. The interface data model is defined in models for routing protocols. The interface data model is defined in
[RFC8343] and is used for referencing interfaces from the routing [RFC8343] and is used for referencing interfaces from the routing
protocol. The key-chain data model used for OSPF authentication is protocol. The key-chain data model used for OSPF authentication is
defined in [RFC8177] and provides both a reference to configured key- defined in [RFC8177] and provides both a reference to configured key-
chains and an enumeration of cryptographic algorithms. chains and an enumeration of cryptographic algorithms.
Both OSPFv2 [RFC2328] and OSPFv3 [RFC5340] are supported. In Both OSPFv2 [RFC2328] and OSPFv3 [RFC5340] are supported. In
addition to the core OSPF protocol, features described in other OSPF addition to the core OSPF protocol, features described in other OSPF
RFCs are also supported. These includes demand circuit [RFC1793], RFCs are also supported. These includes demand circuit [RFC1793],
skipping to change at page 3, line 36 skipping to change at page 3, line 34
1.2. Tree Diagrams 1.2. Tree Diagrams
This document uses the graphical representation of data models This document uses the graphical representation of data models
defined in [RFC8340]. defined in [RFC8340].
2. Design of Data Model 2. Design of Data Model
Although the basis of OSPF configuration elements like routers, Although the basis of OSPF configuration elements like routers,
areas, and interfaces remains the same, the detailed configuration areas, and interfaces remains the same, the detailed configuration
model varies among router vendors. Differences are observed in terms model varies among router vendors. Differences are observed in terms
of how the protocol instance is tied to the routing domain, how of how the protocol instance is tied to the routing domain and how
multiple protocol instances are be instantiated among others. multiple protocol instances are be instantiated among others.
The goal of this document is to define a data model that provides a The goal of this document is to define a data model that provides a
common user interface to the OSPFv2 and OSPFv3 protocols. There is common user interface to the OSPFv2 and OSPFv3 protocols. There is
very little information that is designated as "mandatory", providing very little information that is designated as "mandatory", providing
freedom for vendors to adapt this data model to their respective freedom for vendors to adapt this data model to their respective
product implementations. product implementations.
2.1. OSPF Operational State 2.1. OSPF Operational State
skipping to change at page 4, line 47 skipping to change at page 4, line 47
| | . | | .
| +--rw interfaces | +--rw interfaces
| +--rw interface* [name] | +--rw interface* [name]
| . | .
| . | .
+--rw topologies {multi-topology}? +--rw topologies {multi-topology}?
+--rw topology* [name] +--rw topology* [name]
. .
. .
The ospf module is intended to match to the vendor specific OSPF
configuration construct that is identified by the local identifier
'name'.
The ospf container includes one OSPF protocol instance. The instance The ospf container includes one OSPF protocol instance. The instance
includes OSPF router level configuration and operational state. includes OSPF router level configuration and operational state. Each
OSPF instance maps to a control-plane-protcol instance as defined in
[RFC8349].
The area and area/interface containers define the OSPF configuration The area and area/interface containers define the OSPF configuration
and operational state for OSPF areas and interfaces respectively. and operational state for OSPF areas and interfaces respectively.
The topologies container defines the OSPF configuration and The topologies container defines the OSPF configuration and
operational state for OSPF topologies when the multi-topology feature operational state for OSPF topologies when the multi-topology feature
is supported. is supported.
2.3. OSPFv2 and OSPFv3 2.3. OSPFv2 and OSPFv3
skipping to change at page 5, line 38 skipping to change at page 5, line 38
1. multi-topology: Support Multi-Topology Routing (MTR) [RFC4915]. 1. multi-topology: Support Multi-Topology Routing (MTR) [RFC4915].
2. multi-area-adj: Support OSPF multi-area adjacency [RFC5185]. 2. multi-area-adj: Support OSPF multi-area adjacency [RFC5185].
3. explicit-router-id: Support explicit per-instance Router-ID 3. explicit-router-id: Support explicit per-instance Router-ID
specification. specification.
4. demand-circuit: Support OSPF demand circuits [RFC1793]. 4. demand-circuit: Support OSPF demand circuits [RFC1793].
5. mtu-ignore: Support disabling OSPF Database Description packet 5. mtu-ignore: Support disabling OSPF Database Description packet
MTU mismatch checking. MTU mismatch checking specified in section 10.6 of [RFC2328].
6. lls: Support OSPF link-local signaling (LLS) [RFC5613]. 6. lls: Support OSPF link-local signaling (LLS) [RFC5613].
7. prefix-suppression: Support OSPF prefix advertisement 7. prefix-suppression: Support OSPF prefix advertisement
suppression [RFC6860]. suppression [RFC6860].
8. ttl-security: Support OSPF Time to Live (TTL) security check 8. ttl-security: Support OSPF Time to Live (TTL) security check
support [RFC5082]. support [RFC5082].
9. nsr: Support OSPF Non-Stop Routing (NSR). The OSPF NSR feature 9. nsr: Support OSPF Non-Stop Routing (NSR). The OSPF NSR feature
skipping to change at page 13, line 44 skipping to change at page 13, line 44
| | | | {ospfv3-authentication-trailer}? | | | | {ospfv3-authentication-trailer}?
| | | +--rw (ospfv3-auth-specification)? | | | +--rw (ospfv3-auth-specification)?
| | | +--:(auth-key-chain) {key-chain}? | | | +--:(auth-key-chain) {key-chain}?
| | | | +--rw ospfv3-key-chain? | | | | +--rw ospfv3-key-chain?
| | | | key-chain:key-chain-ref | | | | key-chain:key-chain-ref
| | | +--:(auth-key-explicit) | | | +--:(auth-key-explicit)
| | | +--rw ospfv3-sa-id? uint16 | | | +--rw ospfv3-sa-id? uint16
| | | +--rw ospfv3-key? string | | | +--rw ospfv3-key? string
| | | +--rw ospfv3-crypto-algorithm? | | | +--rw ospfv3-crypto-algorithm?
| | | identityref | | | identityref
| | +--ro cost? uint16 | | +--ro cost? uint16
| | +--ro state? if-state-type | | +--ro state? if-state-type
| | +--ro hello-timer? uint32 | | +--ro hello-timer? rt-types:
| | +--ro wait-timer? uint32 | | | rtimer-value-seconds16
| | +--ro dr-router-id? rt-types:router-id | | +--ro wait-timer? rt-types:
| | +--ro dr-ip-addr? inet:ip-address | | | rtimer-value-seconds16
| | +--ro bdr-router-id? rt-types:router-id | | +--ro dr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address | | +--ro dr-ip-addr? inet:ip-address
| | +--ro bdr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address
| | +--ro statistics | | +--ro statistics
| | | +--ro if-event-count? yang:counter32 | | | +--ro if-event-count? yang:counter32
| | | +--ro link-scope-lsa-count? yang:gauge32 | | | +--ro link-scope-lsa-count? yang:gauge32
| | | +--ro link-scope-lsa-cksum-sum? | | | +--ro link-scope-lsa-cksum-sum?
| | | uint32 | | | uint32
| | | +--ro database | | | +--ro database
| | | +--ro link-scope-lsa-type* | | | +--ro link-scope-lsa-type*
| | | +--ro lsa-type? uint16 | | | +--ro lsa-type? uint16
| | | +--ro lsa-count? yang:gauge32 | | | +--ro lsa-count? yang:gauge32
| | | +--ro lsa-cksum-sum? int32 | | | +--ro lsa-cksum-sum? int32
| | +--ro neighbors | | +--ro neighbors
| | | +--ro neighbor* [neighbor-router-id] | | | +--ro neighbor* [neighbor-router-id]
| | | +--ro neighbor-router-id | | | +--ro neighbor-router-id
| | | rt-types:router-id | | | rt-types:router-id
| | | +--ro address? inet:ip-address | | | +--ro address? inet:ip-address
| | | +--ro dr-router-id? rt-types:router-id | | | +--ro dr-router-id? rt-types:router-id
| | | +--ro dr-ip-addr? inet:ip-address | | | +--ro dr-ip-addr? inet:ip-address
| | | +--ro bdr-router-id? rt-types:router-id | | | +--ro bdr-router-id? rt-types:router-id
| | | +--ro bdr-ip-addr? inet:ip-address | | | +--ro bdr-ip-addr? inet:ip-address
| | | +--ro state? nbr-state-type | | | +--ro state? nbr-state-type
| | | +--ro dead-timer? uint32 | | | +--ro dead-timer? rt-types:
| | | | rtimer-value-seconds16
| | | +--ro statistics | | | +--ro statistics
| | | +--ro nbr-event-count? | | | +--ro nbr-event-count?
| | | yang:counter32 | | | yang:counter32
| | | +--ro nbr-retrans-qlen? | | | +--ro nbr-retrans-qlen?
| | | yang:gauge32 | | | yang:gauge32
| | +--ro database | | +--ro database
| | +--ro link-scope-lsa-type* [lsa-type] | | +--ro link-scope-lsa-type* [lsa-type]
| | +--ro lsa-type uint16 | | +--ro lsa-type uint16
| | +--ro link-scope-lsas | | +--ro link-scope-lsas
. . . .
skipping to change at page 15, line 36 skipping to change at page 15, line 39
| | | +--rw ospfv3-sa-id? uint16 | | | +--rw ospfv3-sa-id? uint16
| | | +--rw ospfv3-key? string | | | +--rw ospfv3-key? string
| | | +--rw ospfv3-crypto-algorithm? | | | +--rw ospfv3-crypto-algorithm?
| | | identityref | | | identityref
| | +--rw cost? uint16 | | +--rw cost? uint16
| | +--rw mtu-ignore? boolean | | +--rw mtu-ignore? boolean
| | {mtu-ignore}? | | {mtu-ignore}?
| | +--rw prefix-suppression? boolean | | +--rw prefix-suppression? boolean
| | {prefix-suppression}? | | {prefix-suppression}?
| | +--ro state? if-state-type | | +--ro state? if-state-type
| | +--ro hello-timer? uint32 | | +--ro hello-timer? rt-types:
| | +--ro wait-timer? uint32 | | | rtimer-value-seconds16
| | +--ro wait-timer? rt-types:
| | | rtimer-value-seconds16
| | +--ro dr-router-id? rt-types:router-id | | +--ro dr-router-id? rt-types:router-id
| | +--ro dr-ip-addr? inet:ip-address | | +--ro dr-ip-addr? inet:ip-address
| | +--ro bdr-router-id? rt-types:router-id | | +--ro bdr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address | | +--ro bdr-ip-addr? inet:ip-address
| | +--ro statistics | | +--ro statistics
| | | +--ro if-event-count? yang:counter32 | | | +--ro if-event-count? yang:counter32
| | | +--ro link-scope-lsa-count? yang:gauge32 | | | +--ro link-scope-lsa-count? yang:gauge32
| | | +--ro link-scope-lsa-cksum-sum? | | | +--ro link-scope-lsa-cksum-sum?
| | | uint32 | | | uint32
| | | +--ro database | | | +--ro database
skipping to change at page 16, line 15 skipping to change at page 16, line 20
| | | +--ro neighbor* [neighbor-router-id] | | | +--ro neighbor* [neighbor-router-id]
| | | +--ro neighbor-router-id | | | +--ro neighbor-router-id
| | | rt-types:router-id | | | rt-types:router-id
| | | +--ro address? inet:ip-address | | | +--ro address? inet:ip-address
| | | +--ro dr-router-id? rt-types:router-id | | | +--ro dr-router-id? rt-types:router-id
| | | +--ro dr-ip-addr? inet:ip-address | | | +--ro dr-ip-addr? inet:ip-address
| | | +--ro bdr-router-id? rt-types:router-id | | | +--ro bdr-router-id? rt-types:router-id
| | | +--ro bdr-ip-addr? inet:ip-address | | | +--ro bdr-ip-addr? inet:ip-address
| | | +--ro state? nbr-state-type | | | +--ro state? nbr-state-type
| | | +--ro cost? uint32 | | | +--ro cost? uint32
| | | +--ro dead-timer? uint32 | | | +--ro dead-timer? rt-types:
| | | | rtimer-value-seconds16
| | | +--ro statistics | | | +--ro statistics
| | | +--ro nbr-event-count? | | | +--ro nbr-event-count?
| | | yang:counter32 | | | yang:counter32
| | | +--ro nbr-retrans-qlen? | | | +--ro nbr-retrans-qlen?
| | | yang:gauge32 | | | yang:gauge32
| | +--ro database | | +--ro database
| | +--ro link-scope-lsa-type* [lsa-type] | | +--ro link-scope-lsa-type* [lsa-type]
| | +--ro lsa-type uint16 | | +--ro lsa-type uint16
| | +--ro link-scope-lsas | | +--ro link-scope-lsas
. . . .
skipping to change at page 18, line 21 skipping to change at page 18, line 27
| | +--rw ospfv3-sa-id? uint16 | | +--rw ospfv3-sa-id? uint16
| | +--rw ospfv3-key? string | | +--rw ospfv3-key? string
| | +--rw ospfv3-crypto-algorithm? | | +--rw ospfv3-crypto-algorithm?
| | identityref | | identityref
| +--rw cost? uint16 | +--rw cost? uint16
| +--rw mtu-ignore? boolean | +--rw mtu-ignore? boolean
| | {mtu-ignore}? | | {mtu-ignore}?
| +--rw prefix-suppression? boolean | +--rw prefix-suppression? boolean
| | {prefix-suppression}? | | {prefix-suppression}?
| +--ro state? if-state-type | +--ro state? if-state-type
| +--ro hello-timer? uint32 | +--ro hello-timer? rt-types:
| +--ro wait-timer? uint32 | | rtimer-value-seconds16
| +--ro wait-timer? rt-types:
| | rtimer-value-seconds16
| +--ro dr-router-id? rt-types:router-id | +--ro dr-router-id? rt-types:router-id
| +--ro dr-ip-addr? inet:ip-address | +--ro dr-ip-addr? inet:ip-address
| +--ro bdr-router-id? rt-types:router-id | +--ro bdr-router-id? rt-types:router-id
| +--ro bdr-ip-addr? inet:ip-address | +--ro bdr-ip-addr? inet:ip-address
| +--ro statistics | +--ro statistics
| | +--ro if-event-count? yang:counter32 | | +--ro if-event-count? yang:counter32
| | +--ro link-scope-lsa-count? yang:gauge32 | | +--ro link-scope-lsa-count? yang:gauge32
| | +--ro link-scope-lsa-cksum-sum? | | +--ro link-scope-lsa-cksum-sum?
| | uint32 | | uint32
| | +--ro database | | +--ro database
skipping to change at page 18, line 47 skipping to change at page 19, line 7
| +--ro neighbors | +--ro neighbors
| | +--ro neighbor* [neighbor-router-id] | | +--ro neighbor* [neighbor-router-id]
| | +--ro neighbor-router-id | | +--ro neighbor-router-id
| | rt-types:router-id | | rt-types:router-id
| | +--ro address? inet:ip-address | | +--ro address? inet:ip-address
| | +--ro dr-router-id? rt-types:router-id | | +--ro dr-router-id? rt-types:router-id
| | +--ro dr-ip-addr? inet:ip-address | | +--ro dr-ip-addr? inet:ip-address
| | +--ro bdr-router-id? rt-types:router-id | | +--ro bdr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address | | +--ro bdr-ip-addr? inet:ip-address
| | +--ro state? nbr-state-type | | +--ro state? nbr-state-type
| | +--ro dead-timer? uint32 | | +--ro dead-timer? rt-types:
| | | rtimer-value-seconds16
| | +--ro statistics | | +--ro statistics
| | +--ro nbr-event-count? | | +--ro nbr-event-count?
| | yang:counter32 | | yang:counter32
| | +--ro nbr-retrans-qlen? | | +--ro nbr-retrans-qlen?
| | yang:gauge32 | | yang:gauge32
| +--ro database | +--ro database
| . +--ro link-scope-lsa-type* [lsa-type] | . +--ro link-scope-lsa-type* [lsa-type]
| . +--ro lsa-type uint16 | . +--ro lsa-type uint16
| . +--ro link-scope-lsas | . +--ro link-scope-lsas
. . . .
skipping to change at page 23, line 35 skipping to change at page 23, line 43
-> /rt:routing/control-plane-protocols/ -> /rt:routing/control-plane-protocols/
control-plane-protocol/name control-plane-protocol/name
3. OSPF YANG Module 3. OSPF YANG Module
The following RFCs and drafts are not referenced in the document text The following RFCs and drafts are not referenced in the document text
but are referenced in the ietf-ospf.yang module: [RFC0905], but are referenced in the ietf-ospf.yang module: [RFC0905],
[RFC4576], [RFC4973], [RFC5250], [RFC5309], [RFC5642], [RFC5881], [RFC4576], [RFC4973], [RFC5250], [RFC5309], [RFC5642], [RFC5881],
[RFC6991], [RFC7770], [RFC7884], [RFC8294], and [RFC8476]. [RFC6991], [RFC7770], [RFC7884], [RFC8294], and [RFC8476].
<CODE BEGINS> file "ietf-ospf@2019-08-07.yang" <CODE BEGINS> file "ietf-ospf@2019-08-22.yang"
module ietf-ospf { module ietf-ospf {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-ospf"; namespace "urn:ietf:params:xml:ns:yang:ietf-ospf";
prefix ospf; prefix ospf;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
reference "RFC 6991: Common YANG Data Types"; reference "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
reference "RFC 6991: Common YANG Data Types"; reference "RFC 6991: Common YANG Data Types";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
reference "RFC 8343: A YANG Data Model for Interface reference "RFC 8343: A YANG Data Model for Interface
Management (NDMA Version)"; Management (NMDA Version)";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix "rt-types";
reference "RFC 8294: Common YANG Data Types for the reference "RFC 8294: Common YANG Data Types for the
Routing Area"; Routing Area";
} }
import iana-routing-types { import iana-routing-types {
prefix "iana-rt-types"; prefix "iana-rt-types";
skipping to change at page 25, line 19 skipping to change at page 25, line 27
description description
"This YANG module defines the generic configuration and "This YANG module defines the generic configuration and
operational state for the OSPF protocol common to all operational state for the OSPF protocol common to all
vendor implementations. It is intended that the module vendor implementations. It is intended that the module
will be extended by vendors to define vendor-specific will be extended by vendors to define vendor-specific
OSPF configuration parameters and policies, OSPF configuration parameters and policies,
for example, route maps or route policies. for example, route maps or route policies.
This YANG model conforms to the Network Management This YANG model conforms to the Network Management
Datastore Architecture (NDMA) as described in RFC 8242. Datastore Architecture (NMDA) as described in RFC 8242.
Copyright (c) 2018 IETF Trust and the persons identified as Copyright (c) 2018 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
skipping to change at page 25, line 44 skipping to change at page 26, line 5
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as 'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here. they appear in all capitals, as shown here.
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices."; see the RFC itself for full legal notices.";
revision 2019-08-07 { revision 2019-08-22 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for OSPF."; "RFC XXXX: A YANG Data Model for OSPF.";
} }
feature multi-topology { feature multi-topology {
description description
"Support Multiple-Topology Routing (MTR)."; "Support Multiple-Topology Routing (MTR).";
reference "RFC 4915: Multi-Topology Routing"; reference "RFC 4915: Multi-Topology Routing";
skipping to change at page 26, line 27 skipping to change at page 26, line 37
feature demand-circuit { feature demand-circuit {
description description
"OSPF demand circuit support as in RFC 1793."; "OSPF demand circuit support as in RFC 1793.";
reference "RFC 1793: OSPF Demand Circuits"; reference "RFC 1793: OSPF Demand Circuits";
} }
feature mtu-ignore { feature mtu-ignore {
description description
"Disable OSPF Database Description packet MTU "Disable OSPF Database Description packet MTU
mismatch checking."; mismatch checking specified in the OSPF
protocol specification.";
reference "RFC 2328: OSPF Version 2, section 10.6";
} }
feature lls { feature lls {
description description
"OSPF link-local signaling (LLS) as in RFC 5613."; "OSPF link-local signaling (LLS) as in RFC 5613.";
reference "RFC 5613: OSPF Link-Local Signaling"; reference "RFC 5613: OSPF Link-Local Signaling";
} }
feature prefix-suppression { feature prefix-suppression {
description description
skipping to change at page 28, line 4 skipping to change at page 28, line 13
description description
"Support configuration of the Traffic Engineering (TE) "Support configuration of the Traffic Engineering (TE)
Router-ID, i.e., the Router Address described in Section Router-ID, i.e., the Router Address described in Section
2.4.1 of RFC3630 or the Router IPv6 Address TLV described 2.4.1 of RFC3630 or the Router IPv6 Address TLV described
in Section 3 of RFC5329."; in Section 3 of RFC5329.";
reference "RFC 3630: Traffic Engineering (TE) Extensions reference "RFC 3630: Traffic Engineering (TE) Extensions
to OSPF Version 2 to OSPF Version 2
RFC 5329: Traffic Engineering (TE) Extensions RFC 5329: Traffic Engineering (TE) Extensions
to OSPF Version 3"; to OSPF Version 3";
} }
feature ldp-igp-sync { feature ldp-igp-sync {
description description
"LDP IGP synchronization."; "LDP IGP synchronization.";
reference "RFC 5443: LDP IGP Synchronization"; reference "RFC 5443: LDP IGP Synchronization";
} }
feature ospfv2-authentication-trailer { feature ospfv2-authentication-trailer {
description description
"Use OSPFv2 authentication trailer for OSPFv2 "Support OSPFv2 authentication trailer for OSPFv2
authentication."; authentication.";
reference "RFC 5709: Supporting Authentication reference "RFC 5709: Supporting Authentication
Trailer for OSPFv2 Trailer for OSPFv2
RFC 7474: Security Extension for OSPFv2 When RFC 7474: Security Extension for OSPFv2 When
Using Manual Key Management"; Using Manual Key Management";
} }
feature ospfv3-authentication-ipsec { feature ospfv3-authentication-ipsec {
description description
"Use IPsec for OSPFv3 authentication."; "Support IPsec for OSPFv3 authentication.";
reference "RFC 4552: Authentication/Confidentiality reference "RFC 4552: Authentication/Confidentiality
for OSPFv3"; for OSPFv3";
} }
feature ospfv3-authentication-trailer { feature ospfv3-authentication-trailer {
description description
"Use OSPFv3 authentication trailer for OSPFv3 "Support OSPFv3 authentication trailer for OSPFv3
authentication."; authentication.";
reference "RFC 7166: Supporting Authentication reference "RFC 7166: Supporting Authentication
Trailer for OSPFv3"; Trailer for OSPFv3";
} }
feature fast-reroute { feature fast-reroute {
description description
"Support for IP Fast Reroute (IP-FRR)."; "Support for IP Fast Reroute (IP-FRR).";
reference "RFC 5714: IP Fast Reroute Framework"; reference "RFC 5714: IP Fast Reroute Framework";
} }
skipping to change at page 38, line 4 skipping to change at page 38, line 17
"E bit, this bit describes the way AS-external LSAs "E bit, this bit describes the way AS-external LSAs
are flooded"; are flooded";
} }
identity v6-bit { identity v6-bit {
base ospfv3-lsa-option; base ospfv3-lsa-option;
description description
"V6 bit, if clear, the router/link should be excluded "V6 bit, if clear, the router/link should be excluded
from IPv6 routing calculation"; from IPv6 routing calculation";
} }
identity ospfv3-prefix-option { identity ospfv3-prefix-option {
description description
"Base identity for OSPFv3 Prefix Options."; "Base identity for OSPFv3 Prefix Options.";
} }
identity nu-bit { identity nu-bit {
base ospfv3-prefix-option; base ospfv3-prefix-option;
description description
"When set, the prefix should be excluded "NU Bit, when set, the prefix should be excluded
from IPv6 unicast calculations."; from IPv6 unicast calculations.";
} }
identity la-bit { identity la-bit {
base ospfv3-prefix-option; base ospfv3-prefix-option;
description description
"When set, the prefix is actually an IPv6 interface "LA bit, when set, the prefix is actually an IPv6
address of the Advertising Router."; interface address of the Advertising Router.";
} }
identity p-bit { identity p-bit {
base ospfv3-prefix-option; base ospfv3-prefix-option;
description description
"When set, the NSSA area prefix should be "P bit, when set, the NSSA area prefix should be
translated to an AS External LSA and advertised translated to an AS External LSA and advertised
by the translating NSSA Border Router."; by the translating NSSA Border Router.";
} }
identity dn-bit { identity dn-bit {
base ospfv3-prefix-option; base ospfv3-prefix-option;
description description
"When set, the inter-area-prefix LSA or "DN bit, when set, the inter-area-prefix LSA or
AS-external LSA prefix has been advertised as an AS-external LSA prefix has been advertised as an
L3VPN prefix."; L3VPN prefix.";
} }
identity ospfv2-lsa-option { identity ospfv2-lsa-option {
description description
"Baes idenity for OSPFv2 LSA option flags."; "Base identity for OSPFv2 LSA option flags.";
} }
identity mt-bit { identity mt-bit {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"When set, the router supports multi-topology as "MT bit, When set, the router supports multi-topology as
in RFC 4915."; in RFC 4915.";
} }
identity v2-dc-bit { identity v2-dc-bit {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"When set, the router supports demand circuits."; "DC bit, When set, the router supports demand circuits.";
} }
identity v2-p-bit { identity v2-p-bit {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"Only used in type-7 LSA. When set, an NSSA "P bit, wnly used in type-7 LSA. When set, an NSSA
border router should translate the type-7 LSA border router should translate the type-7 LSA
to a type-5 LSA."; to a type-5 LSA.";
} }
identity mc-flag { identity mc-flag {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"When set, the router supports MOSPF."; "MC Bit, when set, the router supports MOSPF.";
} }
identity v2-e-flag { identity v2-e-flag {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"This bit describes the way AS-external LSAs "E Bit, this bit describes the way AS-external LSAs
are flooded."; are flooded.";
} }
identity o-bit { identity o-bit {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"When set, the router is opaque-capable as in "O bit, when set, the router is opaque-capable as in
RFC 5250."; RFC 5250.";
} }
identity v2-dn-bit { identity v2-dn-bit {
base ospfv2-lsa-option; base ospfv2-lsa-option;
description description
"When a type 3, 5 or 7 LSA is sent from a PE to a CE, "DN bit, when a type 3, 5 or 7 LSA is sent from a PE
the DN bit must be set. See RFC 4576."; to a CE, the DN bit must be set. See RFC 4576.";
} }
identity ospfv2-extended-prefix-flag { identity ospfv2-extended-prefix-flag {
description description
"Base identity for extended prefix TLV flag."; "Base identity for extended prefix TLV flag.";
} }
identity a-flag { identity a-flag {
base ospfv2-extended-prefix-flag; base ospfv2-extended-prefix-flag;
description description
"Attach flag."; "Attach flag, when set it indicates that the prefix
corresponds and a route what is directly connected to
the advertising router..";
} }
identity node-flag { identity node-flag {
base ospfv2-extended-prefix-flag; base ospfv2-extended-prefix-flag;
description description
"Node flag."; "Node flag, when set, it indicates that the prefix is
used to represent the advertising node, e.g., a loopback
address.";
} }
typedef ospf-metric { typedef ospf-metric {
type uint32 { type uint32 {
range "0 .. 16777215"; range "0 .. 16777215";
} }
description description
"OSPF Metric - 24-bit unsigned integer."; "OSPF Metric - 24-bit unsigned integer.";
} }
skipping to change at page 48, line 4 skipping to change at page 48, line 21
list node-tag { list node-tag {
leaf tag { leaf tag {
type uint32; type uint32;
description description
"Node admin tag value."; "Node admin tag value.";
} }
description description
"List of tags."; "List of tags.";
} }
} }
grouping router-capabilities-tlv { grouping router-capabilities-tlv {
description "OSPF Router Capabilities TLV grouping."; description "OSPF Router Capabilities TLV grouping.";
reference "RFC 7770: OSPF Router Capabilities"; reference "RFC 7770: OSPF Router Capabilities";
container router-informational-capabilities { container router-informational-capabilities {
leaf-list informational-capabilitiess { leaf-list informational-capabilities {
type identityref { type identityref {
base informational-capability; base informational-capability;
} }
description description
"Informational capability list. This list will "Informational capability list. This list will
contains the identities for the informational contains the identities for the informational
capabilities supported by router."; capabilities supported by router.";
} }
description description
"OSPF Router Informational Flag Definitions."; "OSPF Router Informational Flag Definitions.";
} }
list informational-capabilities { list informational-capabilities-flags {
leaf informational-flag { leaf informational-flag {
type uint32; type uint32;
description description
"Informational flag."; "Individual informational capability flag.";
} }
description description
"List of capabilities."; "List of informational capability flags. This will
return all the 32-bit informational flags irrespective
of whether or not they are known to the device.";
} }
list functional-capabilities { list functional-capabilities {
leaf informational-flag { leaf functional-flag {
type uint32; type uint32;
description description
"Functional flag."; "Individual informational capability flag.";
} }
description description
"List of functional capabilities."; "List of functional capability flags. This will
return all the 32-bit functional flags irrespective
of whether or not they are known to the device.";
} }
} }
grouping dynamic-hostname-tlv { grouping dynamic-hostname-tlv {
description "Dynamic Hostname TLV"; description "Dynamic Hostname TLV";
reference "RFC 5642: Dynamic Hostnames for OSPF"; reference "RFC 5642: Dynamic Hostnames for OSPF";
leaf hostname { leaf hostname {
type string { type string {
length "1..255"; length "1..255";
} }
skipping to change at page 49, line 37 skipping to change at page 50, line 10
type uint8; type uint8;
description description
"Maximum Segment Depth (MSD) value for the type"; "Maximum Segment Depth (MSD) value for the type";
} }
description description
"List of Maximum Segment Depth (MSD) tuples"; "List of Maximum Segment Depth (MSD) tuples";
} }
} }
grouping ospf-router-lsa-bits { grouping ospf-router-lsa-bits {
container rputer-bits { container router-bits {
leaf-list rtr-lsa-bits { leaf-list rtr-lsa-bits {
type identityref { type identityref {
base router-lsa-bit; base router-lsa-bit;
} }
description description
"Router LSA bits list. This list will contain "Router LSA bits list. This list will contain
identities for the bits which are set in the identities for the bits which are set in the
Router-LSA bits."; Router-LSA bits.";
} }
description "Router LSA Bits."; description "Router LSA Bits.";
skipping to change at page 51, line 29 skipping to change at page 51, line 50
} }
container network { container network {
when "derived-from-or-self(../../header/type, " when "derived-from-or-self(../../header/type, "
+ "'ospfv2-network-lsa')" { + "'ospfv2-network-lsa')" {
description description
"Only applies to Network LSAs."; "Only applies to Network LSAs.";
} }
description description
"Network LSA."; "Network LSA.";
leaf network-mask { leaf network-mask {
type inet:ipv4-address; type yang:dotted-quad;
description description
"The IP address mask for the network."; "The IP address mask for the network.";
} }
container attached-routers { container attached-routers {
description "All attached routers."; description "All attached routers.";
leaf-list attached-router { leaf-list attached-router {
type yang:dotted-quad; type inet:ipv4-address;
description description
"List of the routers attached to the network."; "List of the routers attached to the network.";
} }
} }
} }
container summary { container summary {
when "derived-from(../../header/type, " when "derived-from(../../header/type, "
+ "'ospfv2-summary-lsa-type')" { + "'ospfv2-summary-lsa-type')" {
description description
"Only applies to Summary LSAs."; "Only applies to Summary LSAs.";
skipping to change at page 54, line 42 skipping to change at page 55, line 16
description description
"Router address TLV."; "Router address TLV.";
leaf router-address { leaf router-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Router address."; "Router address.";
} }
} }
container link-tlv { container link-tlv {
description "Describes a singel link, and it is constructed description "Describes a single link, and it is constructed
of a set of Sub-TLVs."; of a set of Sub-TLVs.";
leaf link-type { leaf link-type {
type router-link-type; type router-link-type;
mandatory true; mandatory true;
description "Link type."; description "Link type.";
} }
leaf link-id { leaf link-id {
type union { type union {
type inet:ipv4-address; type inet:ipv4-address;
type yang:dotted-quad; type yang:dotted-quad;
skipping to change at page 59, line 29 skipping to change at page 59, line 49
description description
"Forwarding address."; "Forwarding address.";
} }
leaf external-route-tag { leaf external-route-tag {
type uint32; type uint32;
description description
"Route tag."; "Route tag.";
} }
leaf referenced-link-state-id { leaf referenced-link-state-id {
type yang:dotted-quad; type uint32;
description description
"Referenced Link State ID."; "Referenced Link State ID.";
} }
} }
grouping ospfv3-lsa-body { grouping ospfv3-lsa-body {
description "OSPFv3 LSA body."; description "OSPFv3 LSA body.";
container router { container router {
when "derived-from-or-self(../../header/type, " when "derived-from-or-self(../../header/type, "
+ "'ospfv3-router-lsa')" { + "'ospfv3-router-lsa')" {
description description
"Only applies to Router LSAs."; "Only applies to Router LSAs.";
skipping to change at page 60, line 42 skipping to change at page 61, line 15
description description
"Only applies to Network LSAs."; "Only applies to Network LSAs.";
} }
description "Network LSA."; description "Network LSA.";
uses ospfv3-lsa-options; uses ospfv3-lsa-options;
container attached-routers { container attached-routers {
description "All attached routers."; description "All attached routers.";
leaf-list attached-router { leaf-list attached-router {
type yang:dotted-quad; type rt-types:router-id;
description description
"List of the routers attached to the network."; "List of the routers attached to the network.";
} }
} }
} }
container inter-area-prefix { container inter-area-prefix {
when "derived-from-or-self(../../header/type, " when "derived-from-or-self(../../header/type, "
+ "'ospfv3-inter-area-prefix-lsa')" { + "'ospfv3-inter-area-prefix-lsa')" {
description description
"Only applies to Inter-Area-Prefix LSAs."; "Only applies to Inter-Area-Prefix LSAs.";
skipping to change at page 63, line 15 skipping to change at page 63, line 34
base ospfv3-lsa-type; base ospfv3-lsa-type;
} }
description "Referenced Link State type."; description "Referenced Link State type.";
} }
leaf unknown-referenced-ls-type { leaf unknown-referenced-ls-type {
type uint16; type uint16;
description description
"Value for an unknown Referenced Link State type."; "Value for an unknown Referenced Link State type.";
} }
leaf referenced-link-state-id { leaf referenced-link-state-id {
type yang:dotted-quad; type uint32;
description description
"Referenced Link State ID."; "Referenced Link State ID.";
} }
leaf referenced-adv-router { leaf referenced-adv-router {
type rt-types:router-id; type rt-types:router-id;
description description
"Referenced Advertising Router."; "Referenced Advertising Router.";
} }
leaf num-of-prefixes { leaf num-of-prefixes {
skipping to change at page 67, line 6 skipping to change at page 67, line 25
} }
grouping lsa-common { grouping lsa-common {
description description
"Common fields for OSPF LSA representation."; "Common fields for OSPF LSA representation.";
leaf decode-completed { leaf decode-completed {
type boolean; type boolean;
description description
"The OSPF LSA body was successfully decoded other than "The OSPF LSA body was successfully decoded other than
unknown TLVs. Unknown LSAs types and OSPFv2 unknown unknown TLVs. Unknown LSAs types and OSPFv2 unknown
opaque LSA types are not decoded. Additionally, opaque LSA types are not decoded. Additionally,
malformed LSAs are generally not accepted and are malformed LSAs are generally not accepted and will
not be in the Link State Database."; not be in the Link State Database.";
} }
leaf raw-data { leaf raw-data {
type yang:hex-string; type yang:hex-string;
description description
"The complete LSA in network byte "The complete LSA in network byte
order hexadecimal as received or originated."; order hexadecimal as received or originated.";
} }
} }
skipping to change at page 67, line 33 skipping to change at page 68, line 4
"OSPFv2 or OSPFv3 LSA body."; "OSPFv2 or OSPFv3 LSA body.";
container ospfv2 { container ospfv2 {
description "OSPFv2 LSA"; description "OSPFv2 LSA";
uses ospfv2-lsa; uses ospfv2-lsa;
} }
container ospfv3 { container ospfv3 {
description "OSPFv3 LSA"; description "OSPFv3 LSA";
uses ospfv3-lsa; uses ospfv3-lsa;
} }
} }
} }
grouping lsa-key { grouping lsa-key {
description description
"OSPF LSA key."; "OSPF LSA key - the database key for each LSA of a given
type in the Link State DataBase (LSDB).";
leaf lsa-id { leaf lsa-id {
type union { type union {
type yang:dotted-quad; type yang:dotted-quad;
type uint32; type uint32;
} }
description description
"Link-State ID."; "Link-State ID.";
} }
leaf adv-router { leaf adv-router {
type rt-types:router-id; type rt-types:router-id;
skipping to change at page 68, line 21 skipping to change at page 68, line 43
type yang:counter32; type yang:counter32;
description "The number of LSAs received."; description "The number of LSAs received.";
} }
leaf as-scope-lsa-count { leaf as-scope-lsa-count {
type yang:gauge32; type yang:gauge32;
description "The number of AS-scope LSAs."; description "The number of AS-scope LSAs.";
} }
leaf as-scope-lsa-chksum-sum { leaf as-scope-lsa-chksum-sum {
type uint32; type uint32;
description description
"The sum of the LSA checksums for AS-scope LSAs."; "The module 2**32 sum of the LSA checksums
for AS-scope LSAs. The value should be treated as
unsigned when comparing two sums of checksums. While
differing checksums indicate a different combination
of LSAs, equivalent checksums don't guarantee that the
LSAs are the same given that multiple combinations of
LSAs can result in the same checksum.";
} }
container database { container database {
description "Container for per AS-scope LSA statistics."; description "Container for per AS-scope LSA statistics.";
list as-scope-lsa-type { list as-scope-lsa-type {
description "List of AS-scope LSA statistics"; description "List of AS-scope LSA statistics";
leaf lsa-type { leaf lsa-type {
type uint16; type uint16;
description "AS-Scope LSA type."; description "AS-Scope LSA type.";
} }
leaf lsa-count { leaf lsa-count {
type yang:gauge32; type yang:gauge32;
description "The number of LSAs of the LSA type."; description "The number of LSAs of the LSA type.";
} }
leaf lsa-cksum-sum { leaf lsa-cksum-sum {
type uint32; type uint32;
description description
"The sum of the LSA checksums of the LSA type."; "The module 2**32 sum of the LSA checksums
for the LSAs of this type. The value should be
treated as unsigned when comparing two sums of
checksums. While differing checksums indicate a
different combination of LSAs, equivalent checksums
don't guarantee that the LSAs are the same given that
multiple combinations of LSAs can result in the same
checksum.";
} }
} }
} }
uses instance-fast-reroute-state; uses instance-fast-reroute-state;
} }
grouping area-stat { grouping area-stat {
description "Per-area statistics."; description "Per-area statistics.";
leaf spf-runs-count { leaf spf-runs-count {
type yang:counter32; type yang:counter32;
skipping to change at page 69, line 27 skipping to change at page 70, line 13
description description
"The number of NSSA translator-state changes."; "The number of NSSA translator-state changes.";
} }
leaf area-scope-lsa-count { leaf area-scope-lsa-count {
type yang:gauge32; type yang:gauge32;
description description
"The number of area-scope LSAs in the area."; "The number of area-scope LSAs in the area.";
} }
leaf area-scope-lsa-cksum-sum { leaf area-scope-lsa-cksum-sum {
type uint32; type uint32;
description "The sum of the area-scope LSAs checksums."; description
"The module 2**32 sum of the LSA checksums
for area-scope LSAs. The value should be treated as
unsigned when comparing two sums of checksums. While
differing checksums indicate a different combination
of LSAs, equivalent checksums don't guarantee that the
LSAs are the same given that multiple combinations of
LSAs can result in the same checksum.";
} }
container database { container database {
description "Container for area-scope LSA type statistics."; description "Container for area-scope LSA type statistics.";
list area-scope-lsa-type { list area-scope-lsa-type {
description "List of area-scope LSA statistics"; description "List of area-scope LSA statistics";
leaf lsa-type { leaf lsa-type {
type uint16; type uint16;
description "Area-scope LSA type."; description "Area-scope LSA type.";
} }
leaf lsa-count { leaf lsa-count {
type yang:gauge32; type yang:gauge32;
description "The number of LSAs of the LSA type."; description "The number of LSAs of the LSA type.";
} }
leaf lsa-cksum-sum { leaf lsa-cksum-sum {
type uint32; type uint32;
description description
"The sum of the LSA checksums of the LSA type."; "The module 2**32 sum of the LSA checksums
for the LSAs of this type. The value should be
treated as unsigned when comparing two sums of
checksums. While differing checksums indicate a
different combination of LSAs, equivalent checksums
don't guarantee that the LSAs are the same given that
multiple combinations of LSAs can result in the same
checksum.";
} }
} }
} }
} }
grouping interface-stat { grouping interface-stat {
description "Per-interface statistics"; description "Per-interface statistics";
leaf if-event-count { leaf if-event-count {
type yang:counter32; type yang:counter32;
description description
"The number of times this interface has changed its "The number of times this interface has changed its
state or an error has occurred."; state or an error has occurred.";
} }
leaf link-scope-lsa-count { leaf link-scope-lsa-count {
type yang:gauge32; type yang:gauge32;
description "The number of link-scope LSAs."; description "The number of link-scope LSAs.";
} }
leaf link-scope-lsa-cksum-sum { leaf link-scope-lsa-cksum-sum {
type uint32; type uint32;
description "The sum of link-scope LSA checksums."; description
"The module 2**32 sum of the LSA checksums
for link-scope LSAs. The value should be treated as
unsigned when comparing two sums of checksums. While
differing checksums indicate a different combination
of LSAs, equivalent checksums don't guarantee that the
LSAs are the same given that multiple combinations of
LSAs can result in the same checksum.";
} }
container database { container database {
description "Container for link-scope LSA type statistics."; description "Container for link-scope LSA type statistics.";
list link-scope-lsa-type { list link-scope-lsa-type {
description "List of link-scope LSA statistics"; description "List of link-scope LSA statistics";
leaf lsa-type { leaf lsa-type {
type uint16; type uint16;
description "Link scope LSA type."; description "Link scope LSA type.";
} }
leaf lsa-count { leaf lsa-count {
type yang:gauge32; type yang:gauge32;
description "The number of LSAs of the LSA type."; description "The number of LSAs of the LSA type.";
} }
leaf lsa-cksum-sum { leaf lsa-cksum-sum {
type uint32; type uint32;
description description
"The sum of the LSA checksums of the LSA type."; "The module 2**32 sum of the LSA checksums
for the LSAs of this type. The value should be
treated as unsigned when comparing two sums of
checksums. While differing checksums indicate a
different combination of LSAs, equivalent checksums
don't guarantee that the LSAs are the same given that
multiple combinations of LSAs can result in the same
checksum.";
} }
} }
} }
} }
grouping neighbor-stat { grouping neighbor-stat {
description "Per-neighbor statistics."; description "Per-neighbor statistics.";
leaf nbr-event-count { leaf nbr-event-count {
type yang:counter32; type yang:counter32;
description description
"The number of times this neighbor has changed "The number of times this neighbor has changed
state or an error has occurred."; state or an error has occurred.";
} }
leaf nbr-retrans-qlen { leaf nbr-retrans-qlen {
type yang:gauge32; type yang:gauge32;
skipping to change at page 76, line 29 skipping to change at page 77, line 41
leaf cost { leaf cost {
type ospf-link-metric; type ospf-link-metric;
description description
"Interface cost."; "Interface cost.";
} }
leaf mtu-ignore { leaf mtu-ignore {
if-feature mtu-ignore; if-feature mtu-ignore;
type boolean; type boolean;
description description
"Enable/Disable bypassing the MTU mismatch check in "Enable/Disable bypassing the MTU mismatch check in
Database Description packets."; Database Description packets specified in RFC 2328,
section 10.6.";
} }
leaf prefix-suppression { leaf prefix-suppression {
if-feature prefix-suppression; if-feature prefix-suppression;
type boolean; type boolean;
description description
"Suppress advertisement of the prefixes associated "Suppress advertisement of the prefixes associated
with the interface."; with the interface.";
} }
} }
grouping interface-common-config { grouping interface-common-config {
description description
"Common configuration for all types of interfaces, "Common configuration for all types of interfaces,
including virtual links and sham links."; including virtual links and sham links.";
leaf hello-interval { leaf hello-interval {
type uint16; type uint16;
units seconds; units seconds;
description description
"Interval between hello packets (seconds). It must "Interval between hello packets (seconds). It must
skipping to change at page 77, line 6 skipping to change at page 78, line 18
leaf hello-interval { leaf hello-interval {
type uint16; type uint16;
units seconds; units seconds;
description description
"Interval between hello packets (seconds). It must "Interval between hello packets (seconds). It must
be the same for all routers on the same network. be the same for all routers on the same network.
Different networks, implementations, and deployments Different networks, implementations, and deployments
will use different hello-intervals. A sample value will use different hello-intervals. A sample value
for a LAN network would be 10 seconds."; for a LAN network would be 10 seconds.";
reference "RFC 2328: OSPF Version 2, Appendix C.3";
} }
leaf dead-interval { leaf dead-interval {
type uint16; type uint16;
units seconds; units seconds;
must "../dead-interval > ../hello-interval" { must "../dead-interval > ../hello-interval" {
error-message "The dead interval must be " error-message "The dead interval must be "
+ "larger than the hello interval"; + "larger than the hello interval";
description description
"The value MUST be greater than 'hello-interval'."; "The value must be greater than the 'hello-interval'.";
} }
description description
"Interval after which a neighbor is declared down "Interval after which a neighbor is declared down
(seconds) if hello packets are not received. It is (seconds) if hello packets are not received. It is
typically 3 or 4 times the hello-interval. A typical typically 3 or 4 times the hello-interval. A typical
value for LAN networks is 40 seconds."; value for LAN networks is 40 seconds.";
reference "RFC 2328: OSPF Version 2, Appendix C.3";
} }
leaf retransmit-interval { leaf retransmit-interval {
type uint16 { type uint16 {
range "1..3600"; range "1..3600";
} }
units seconds; units seconds;
description description
"Interval between retransmitting unacknowledged Link "Interval between retransmitting unacknowledged Link
State Advertisements (LSAs) (seconds). This should State Advertisements (LSAs) (seconds). This should
be well over the round-trip transmit delay for be well over the round-trip transmit delay for
any two routers on the network. A sample value any two routers on the network. A sample value
would be 5 seconds."; would be 5 seconds.";
reference "RFC 2328: OSPF Version 2, Appendix C.3";
} }
leaf transmit-delay { leaf transmit-delay {
type uint16; type uint16;
units seconds; units seconds;
description description
"Estimated time needed to transmit Link State Update "Estimated time needed to transmit Link State Update
(LSU) packets on the interface (seconds). LSAs have (LSU) packets on the interface (seconds). LSAs have
their age incremented by this amount on advertised their age incremented by this amount when advertised
on the interface. A sample value would be 1 second."; on the interface. A sample value would be 1 second.";
reference "RFC 2328: OSPF Version 2, Appendix C.3";
} }
leaf lls { leaf lls {
if-feature lls; if-feature lls;
type boolean; type boolean;
description description
"Enable/Disable link-local signaling (LLS) support."; "Enable/Disable link-local signaling (LLS) support.";
} }
container ttl-security { container ttl-security {
if-feature ttl-security; if-feature ttl-security;
description "Time to Live (TTL) security check."; description "Time to Live (TTL) security check.";
leaf enable { leaf enable {
type boolean; type boolean;
description description
"Enable/Disable TTL security check."; "Enable/Disable TTL security check.";
} }
skipping to change at page 78, line 19 skipping to change at page 79, line 34
description "Time to Live (TTL) security check."; description "Time to Live (TTL) security check.";
leaf enable { leaf enable {
type boolean; type boolean;
description description
"Enable/Disable TTL security check."; "Enable/Disable TTL security check.";
} }
leaf hops { leaf hops {
type uint8 { type uint8 {
range "1..254"; range "1..254";
} }
default 1;
description description
"Maximum number of hops that an OSPF packet may "Maximum number of hops that an OSPF packet may
have traversed before reception."; have traversed before reception.";
} }
} }
leaf enable { leaf enable {
type boolean; type boolean;
default true; default true;
description description
"Enable/disable OSPF protocol on the interface."; "Enable/disable OSPF protocol on the interface.";
skipping to change at page 83, line 5 skipping to change at page 84, line 23
proportional to the interface speed. Others will proportional to the interface speed. Others will
default to 1 equating the cost to a hop count." ; default to 1 equating the cost to a hop count." ;
} }
leaf poll-interval { leaf poll-interval {
type uint16; type uint16;
units seconds; units seconds;
description description
"Neighbor poll interval (seconds) for sending OSPF "Neighbor poll interval (seconds) for sending OSPF
hello packets to discover the neighbor on NBMA hello packets to discover the neighbor on NBMA
networks. This interval dictates the granularity for networks. This interval dictates the granularity for
discovery of new neighbors. A sample would be 2 minutes discovery of new neighbors. A sample would be
for a legacy Packet Data Network (PDN) X.25 network."; 120 seconds (2 minutes) for a legacy Packet Data
Network (PDN) X.25 network.";
reference "RFC 2328: OSPF Version 2, Appendix C.5";
} }
leaf priority { leaf priority {
type uint8; type uint8;
description description
"Neighbor priority for DR election. A router with a "Neighbor priority for DR election. A router with a
higher priority will be preferred in the election higher priority will be preferred in the election
and a value of 0 indicates the router is not and a value of 0 indicates the router is not
eligible to become Designated Router or Backup eligible to become Designated Router or Backup
Designated Router (BDR)."; Designated Router (BDR).";
} }
skipping to change at page 85, line 29 skipping to change at page 86, line 49
leaf hello-timer { leaf hello-timer {
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
config false; config false;
description "This timer tracks the remaining time before description "This timer tracks the remaining time before
the next hello packet is sent on the the next hello packet is sent on the
interface."; interface.";
} }
leaf wait-timer { leaf wait-timer {
type rt-types:timer-value-seconds32; type rt-types:timer-value-seconds16;
config false; config false;
description "This timer tracks the remaining time before description "This timer tracks the remaining time before
the interface exits the Waiting state."; the interface exits the Waiting state.";
} }
leaf dr-router-id { leaf dr-router-id {
type rt-types:router-id; type rt-types:router-id;
config false; config false;
description "Designated Router (DR) Router ID."; description "Designated Router (DR) Router ID.";
} }
skipping to change at page 94, line 23 skipping to change at page 95, line 44
leaf explicit-router-id { leaf explicit-router-id {
if-feature explicit-router-id; if-feature explicit-router-id;
type rt-types:router-id; type rt-types:router-id;
description description
"Defined in RFC 2328. A 32-bit number "Defined in RFC 2328. A 32-bit number
that uniquely identifies the router."; that uniquely identifies the router.";
} }
container preference { container preference {
description description
"Route preference configuration In many "Route preference configuration. In many
implementations, preference is referred to as implementations, preference is referred to as
administrative distance."; administrative distance.";
reference reference
"RFC 8349: A YANG Data Model for Routing Management "RFC 8349: A YANG Data Model for Routing Management
(NMDA Version)"; (NMDA Version)";
choice scope { choice scope {
description description
"Options for expressing preference "Options for expressing preference
as single or multiple values."; as single or multiple values.";
case single-value { case single-value {
skipping to change at page 101, line 47 skipping to change at page 103, line 21
type area-id-type; type area-id-type;
description description
"Area ID"; "Area ID";
} }
leaf type { leaf type {
type uint16; type uint16;
description description
"LSA type."; "LSA type.";
} }
leaf lsa-id { leaf lsa-id {
type yang:dotted-quad; type union {
type inet:ipv4-address;
type yang:dotted-quad;
}
description "Link-State ID."; description "Link-State ID.";
} }
leaf adv-router { leaf adv-router {
type rt-types:router-id; type rt-types:router-id;
description description
"LSA advertising router."; "LSA advertising router.";
} }
leaf seq-num { leaf seq-num {
type uint32; type uint32;
description description
skipping to change at page 102, line 25 skipping to change at page 103, line 50
description description
"Grouping for SPF log."; "Grouping for SPF log.";
container spf-log { container spf-log {
config false; config false;
description description
"This container lists the SPF log."; "This container lists the SPF log.";
list event { list event {
key id; key id;
description description
"List of SPF log entries represented "List of SPF log entries represented
as a wrapping buffer."; as a wrapping buffer in chronological
order with the oldest entry returned
first.";
leaf id { leaf id {
type uint32; type uint32;
description description
"Event identifier - Purely internal value."; "Event identifier - Purely internal value.";
} }
leaf spf-type { leaf spf-type {
type enumeration { type enumeration {
enum full { enum full {
description description
"SPF computation was a Full SPF."; "SPF computation was a Full SPF.";
skipping to change at page 103, line 46 skipping to change at page 105, line 24
container lsa-log { container lsa-log {
config false; config false;
description description
"This container lists the LSA log. "This container lists the LSA log.
Local LSA modifications are also included Local LSA modifications are also included
in the list."; in the list.";
list event { list event {
key id; key id;
description description
"List of LSA log entries represented "List of LSA log entries represented
as a wrapping buffer."; as a wrapping buffer in chronological order
with the oldest entries returned first.";
leaf id { leaf id {
type uint32; type uint32;
description description
"Event identifier - purely internal value."; "Event identifier - purely internal value.";
} }
container lsa { container lsa {
description description
"This container describes the logged LSA."; "This container describes the logged LSA.";
uses lsa-identifiers; uses lsa-identifiers;
} }
skipping to change at page 113, line 4 skipping to change at page 114, line 31
grouping notification-neighbor { grouping notification-neighbor {
description description
"This grouping provides the neighbor information "This grouping provides the neighbor information
for neighbor specific notifications."; for neighbor specific notifications.";
leaf neighbor-router-id { leaf neighbor-router-id {
type rt-types:router-id; type rt-types:router-id;
description "Neighbor Router ID."; description "Neighbor Router ID.";
} }
leaf neighbor-ip-addr { leaf neighbor-ip-addr {
type yang:dotted-quad; type inet:ip-address;
description "Neighbor address."; description "Neighbor address.";
} }
} }
notification if-state-change { notification if-state-change {
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-interface; uses notification-interface;
leaf state { leaf state {
type if-state-type; type if-state-type;
skipping to change at page 113, line 28 skipping to change at page 115, line 8
description description
"This notification is sent when an interface "This notification is sent when an interface
state change is detected."; state change is detected.";
} }
notification if-config-error { notification if-config-error {
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-interface; uses notification-interface;
leaf packet-source { leaf packet-source {
type yang:dotted-quad; type inet:ip-address;
description "Source address."; description "Source address.";
} }
leaf packet-type { leaf packet-type {
type packet-type; type packet-type;
description "OSPF packet type."; description "OSPF packet type.";
} }
leaf error { leaf error {
type enumeration { type enumeration {
skipping to change at page 114, line 49 skipping to change at page 116, line 29
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-interface; uses notification-interface;
uses notification-neighbor; uses notification-neighbor;
leaf state { leaf state {
type nbr-state-type; type nbr-state-type;
description "Neighbor state."; description "Neighbor state.";
} }
description description
"This notification is sent when aa neighbor "This notification is sent when a neighbor
state change is detected."; state change is detected.";
} }
notification nbr-restart-helper-status-change { notification nbr-restart-helper-status-change {
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-interface; uses notification-interface;
uses notification-neighbor; uses notification-neighbor;
leaf status { leaf status {
type restart-helper-status-type; type restart-helper-status-type;
description "Restart helper status."; description "Restart helper status.";
} }
skipping to change at page 115, line 37 skipping to change at page 117, line 18
description description
"This notification is sent when a neighbor restart "This notification is sent when a neighbor restart
helper status change is detected."; helper status change is detected.";
} }
notification if-rx-bad-packet { notification if-rx-bad-packet {
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-interface; uses notification-interface;
leaf packet-source { leaf packet-source {
type yang:dotted-quad; type inet:ip-address;
description "Source address."; description "Source address.";
} }
leaf packet-type { leaf packet-type {
type packet-type; type packet-type;
description "OSPF packet type."; description "OSPF packet type.";
} }
description description
"This notification is sent when an OSPF packet that "This notification is sent when an OSPF packet that
skipping to change at page 117, line 49 skipping to change at page 119, line 30
4. Security Considerations 4. Security Considerations
The YANG modules specified in this document define a schema for data The YANG modules specified in this document define a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
is the secure transport layer, and the mandatory-to-implement secure is the secure transport layer, and the mandatory-to-implement secure
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport is TLS is HTTPS, and the mandatory-to-implement secure transport is TLS
[RFC8446]. [RFC8446].
The NETCONF access control model [RFC8341] provides the means to The NETCONF Access Control Model (NACM) [RFC8341] provides the means
restrict access for particular NETCONF or RESTCONF users to a pre- to restrict access for particular NETCONF or RESTCONF users to a pre-
configured subset of all available NETCONF or RESTCONF protocol configured subset of all available NETCONF or RESTCONF protocol
operations and content. operations and content.
There are a number of data nodes defined in ietf-ospf.yang module There are a number of data nodes defined in ietf-ospf.yang module
that are writable/creatable/deletable (i.e., config true, which is that are writable/creatable/deletable (i.e., config true, which is
the default). These data nodes may be considered sensitive or the default). These data nodes may be considered sensitive or
vulnerable in some network environments. Write operations (e.g., vulnerable in some network environments. Write operations (e.g.,
edit-config) to these data nodes without proper protection can have a edit-config) to these data nodes without proper protection can have a
negative effect on network operations. For OSPF, the ability to negative effect on network operations. For OSPF, the ability to
modify OSPF configuration will allow the entire OSPF domain to be modify OSPF configuration will allow the entire OSPF domain to be
skipping to change at page 118, line 34 skipping to change at page 120, line 15
consider their topologies to be sensitive confidential data. consider their topologies to be sensitive confidential data.
For OSPF authentication, configuration is supported via the For OSPF authentication, configuration is supported via the
specification of key-chains [RFC8177] or the direct specification of specification of key-chains [RFC8177] or the direct specification of
key and authentication algorithm. Hence, authentication key and authentication algorithm. Hence, authentication
configuration using the "auth-table-trailer" case in the configuration using the "auth-table-trailer" case in the
"authentication" container inherits the security considerations of "authentication" container inherits the security considerations of
[RFC8177]. This includes the considerations with respect to the [RFC8177]. This includes the considerations with respect to the
local storage and handling of authentication keys. local storage and handling of authentication keys.
Additionally, local specificationn of OSPF authentication keys and Additionally, local specification of OSPF authentication keys and the
the associated authentication algorithm is supported for legacy associated authentication algorithm is supported for legacy
implementations that do not support key-chains [RFC8177] for legacy implementations that do not support key-chains [RFC8177] It is
implementations that do not support key-chains. It is RECOMMENDED RECOMMENDED that implementations migrate to key-chains due the
that implementations migrate to key-chains due the seamless support seamless support of key and algorithm rollover, as well as, the
of key and algorithm rollover, as well as, the encryption of key hexadecimal key specification affording more key entropy, and
using the Advanced Encryption Standard (AES) Key Wrap Padding encryption of keys using the Advanced Encryption Standard (AES) Key
Algorithm [RFC5649]. Wrap Padding Algorithm [RFC5649].
Some of the RPC operations in this YANG module may be considered Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. The OSPF YANG important to control access to these operations. The OSPF YANG
module support the "clear-neighbor" and "clear-database" RPCs. If module supports the "clear-neighbor" and "clear-database" RPCs. If
access to either of these is compromised, they can result in access to either of these is compromised, they can result in
temporary network outages be employed to mount DoS attacks. temporary network outages be employed to mount DoS attacks.
5. IANA Considerations 5. IANA Considerations
This document registers a URI in the IETF XML registry [RFC3688]. This document registers a URI in the IETF XML registry [RFC3688].
Following the format in [RFC3688], the following registration is Following the format in [RFC3688], the following registration is
requested to be made: requested to be made:
URI: urn:ietf:params:xml:ns:yang:ietf-ospf URI: urn:ietf:params:xml:ns:yang:ietf-ospf
skipping to change at page 119, line 34 skipping to change at page 121, line 16
The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta,
Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and
Alan Davey for their thorough reviews and helpful comments. Alan Davey for their thorough reviews and helpful comments.
Thanks to Tom Petch for last call review and improvement of the Thanks to Tom Petch for last call review and improvement of the
document organization. document organization.
Thanks to Alvaro Retana for AD comments. Thanks to Alvaro Retana for AD comments.
Thanks to Benjamin Kaduk, Suresh Krishnan, and Roman Dannyliw for
IESG review comments.
This document was produced using Marshall Rose's xml2rfc tool. This document was produced using Marshall Rose's xml2rfc tool.
Author affiliation with The MITRE Corporation is provided for Author affiliation with The MITRE Corporation is provided for
identification purposes only, and is not intended to convey or imply identification purposes only, and is not intended to convey or imply
MITRE's concurrence with, or support for, the positions, opinions or MITRE's concurrence with, or support for, the positions, opinions or
viewpoints expressed. MITRE has approved this document for Public viewpoints expressed. MITRE has approved this document for Public
Release, Distribution Unlimited, with Public Release Case Number Release, Distribution Unlimited, with Public Release Case Number
18-3194. 18-3194.
7. References 7. References
 End of changes. 96 change blocks. 
119 lines changed or deleted 196 lines changed or added

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