draft-ietf-ospf-yang-03.txt   draft-ietf-ospf-yang-04.txt 
Internet D. Yeung Internet D. Yeung
Internet-Draft Y. Qu Internet-Draft Y. Qu
Intended status: Informational Cisco Systems Intended status: Informational Cisco Systems
Expires: April 21, 2016 J. Zhang Expires: September 22, 2016 J. Zhang
Juniper Networks Juniper Networks
D. Bogdanovic D. Bogdanovic
K. Sreenivasa K. Sreenivasa
Cisco Systems Cisco Systems
October 19, 2015 March 21, 2016
Yang Data Model for OSPF Protocol Yang Data Model for OSPF Protocol
draft-ietf-ospf-yang-03 draft-ietf-ospf-yang-04
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. and manage OSPF.
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.
skipping to change at page 1, line 37 skipping to change at page 1, line 37
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on April 21, 2016. This Internet-Draft will expire on September 22, 2016.
Copyright Notice Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the Copyright (c) 2016 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 25 skipping to change at page 2, line 25
2.3. Optional Features . . . . . . . . . . . . . . . . . . . . 5 2.3. Optional Features . . . . . . . . . . . . . . . . . . . . 5
2.4. Inheritance . . . . . . . . . . . . . . . . . . . . . . . 5 2.4. Inheritance . . . . . . . . . . . . . . . . . . . . . . . 5
2.5. OSPF Router Configuration . . . . . . . . . . . . . . . . 6 2.5. OSPF Router Configuration . . . . . . . . . . . . . . . . 6
2.6. OSPF Instance Configuration . . . . . . . . . . . . . . . 6 2.6. OSPF Instance Configuration . . . . . . . . . . . . . . . 6
2.7. OSPF Area Configuration . . . . . . . . . . . . . . . . . 7 2.7. OSPF Area Configuration . . . . . . . . . . . . . . . . . 7
2.8. OSPF Interface Configuration . . . . . . . . . . . . . . 10 2.8. OSPF Interface Configuration . . . . . . . . . . . . . . 10
2.9. OSPF notification . . . . . . . . . . . . . . . . . . . . 11 2.9. OSPF notification . . . . . . . . . . . . . . . . . . . . 11
3. OSPF Segment Routing . . . . . . . . . . . . . . . . . . . . 14 3. OSPF Segment Routing . . . . . . . . . . . . . . . . . . . . 14
4. OSPF BFD Yang Module . . . . . . . . . . . . . . . . . . . . 21 4. OSPF BFD Yang Module . . . . . . . . . . . . . . . . . . . . 21
5. OSPF Yang Module . . . . . . . . . . . . . . . . . . . . . . 22 5. OSPF Yang Module . . . . . . . . . . . . . . . . . . . . . . 22
6. OSPF Segment Routing Yang Module . . . . . . . . . . . . . . 89 6. OSPF Segment Routing Yang Module . . . . . . . . . . . . . . 93
7. OSPF BFD Yang Module . . . . . . . . . . . . . . . . . . . . 103 7. OSPF BFD Yang Module . . . . . . . . . . . . . . . . . . . . 107
8. Security Considerations . . . . . . . . . . . . . . . . . . . 106 8. Security Considerations . . . . . . . . . . . . . . . . . . . 110
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 106 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 110
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 106 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 111
10.1. Normative References . . . . . . . . . . . . . . . . . . 106 10.1. Normative References . . . . . . . . . . . . . . . . . . 111
10.2. Informative References . . . . . . . . . . . . . . . . . 108 10.2. Informative References . . . . . . . . . . . . . . . . . 112
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 108 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 113
1. Overview 1. Overview
YANG [RFC6020] is a data definition language used to define the YANG [RFC6020] is a data definition language used to define the
contents of a conceptual data store that allows networked devices to contents of a conceptual data store that allows networked devices to
be managed using NETCONF [RFC6241]. YANG is proving relevant beyond be managed using NETCONF [RFC6241]. YANG is proving relevant beyond
its initial confines, as bindings to other interfaces (e.g., ReST) its initial confines, as bindings to other interfaces (e.g., ReST)
and encodings other than XML (e.g., JSON) are being defined. and encodings other than XML (e.g., JSON) are being defined.
Furthermore, YANG data models can be used as the basis for Furthermore, YANG data models can be used as the basis for
implementation of other interfaces, such as CLI and programmatic implementation of other interfaces, such as CLI and programmatic
skipping to change at page 4, line 7 skipping to change at page 4, line 7
2.1. Overview 2.1. Overview
The OSPF YANG module defined in this document has all the common The OSPF YANG module defined in this document has all the common
building blocks for the OSPF protocol. building blocks for the OSPF protocol.
The OSPF YANG module augments the routing/routing-instance/routing- The OSPF YANG module augments the routing/routing-instance/routing-
protocols/routing-protocol path defined in the ietf-routing module. protocols/routing-protocol path defined in the ietf-routing module.
module: ospf module: ospf
+--rw routing +--rw routing
+--rw routing-instance [name] +--rw routing-protocols
+--rw routing-protocols +--rw routing-protocol [name]
+--rw routing-protocol [name] +--rw ospf
+--rw ospf .
. .
. +--rw all-instances-inherit {instance-inheritance}?
+--rw all-instances-inherit {instance-inheritance}? | .
| . | .
| . +--rw instance* [routing-instance af]
+--rw instance* [routing-instance af] .
. .
. +--rw areas
+--rw areas | +--rw area* [area-id]
| +--rw area* [area-id] | .
| . | .
| . | +--rw all-interfaces-inherit {interface-inheritance}?
| +--rw all-interfaces-inherit {interface-inheritance}? | .
| . | .
| . | +--rw virtual-links
| +--rw virtual-links | | +--rw virtual-link* [router-id]
| | +--rw virtual-link* [router-id] | | .
| | . | | .
| | . | +--rw sham-links
| +--rw sham-links | | +--rw sham-link* [local-id remote-id]
| | +--rw sham-link* [local-id remote-id] | | .
| | . | | .
| | . | +--rw interfaces
| +--rw interfaces | | +--rw interface* [interface]
| | +--rw interface* [interface] | | .
| | . | | .
| | . | .
| . | .
| . +--rw topologies
+--rw topologies +--rw topology* [name]
+--rw topology* [name]
The ospf module is intended to match to the vendor specific OSPF The ospf module is intended to match to the vendor specific OSPF
configuration construct that is identified by a local identifier configuration construct that is identified by a local identifier
'name'. The field 'version' allows support for OSPFv2 and OSPFv3. 'name'. The field 'version' allows support for OSPFv2 and OSPFv3.
The ospf container includes one or more OSPF protocol engines, each The ospf container includes one or more OSPF protocol engines, each
enclosed in a separate instance entity. Each instance includes enclosed in a separate instance entity. Each instance includes
information for the routing domain based on the [routing-instance af] information for the routing domain based on the [routing-instance af]
specification. There is no default routing domain assumed by the specification. There is no default routing domain assumed by the
data model. For example, to enable OSPF on a vendor's default IPv4 data model. For example, to enable OSPF on a vendor's default IPv4
skipping to change at page 6, line 32 skipping to change at page 6, line 32
The instance container represents an OSPF protocol engine and The instance container represents an OSPF protocol engine and
contains the router level configuration. The routing domain for each contains the router level configuration. The routing domain for each
instance is dictated through the specification of [routing-instance instance is dictated through the specification of [routing-instance
af]. af].
The all-areas-inherit container contains area configuration that may The all-areas-inherit container contains area configuration that may
be inherited by configured OSPF areas. be inherited by configured OSPF areas.
module: ospf module: ospf
+--rw ospf
+--rw ospf .
. .
. +--rw instance* [af]
+--rw instance* [af] +--rw af identityref
+--rw af identityref +--rw all-areas-inherit {area-inheritance}?
+--rw router-id? yang:dotted-quad {router-id}? | +--rw area
+--rw admin-distance | +--rw interface
| +--rw (scope)? +--rw explicit-router-id? yang:dotted-quad {explicit-router-id}?
| +--:(single-value) +--rw admin-distance
| | +--rw all? uint8 | +--rw (scope)?
| +--:(multi-values) | +--:(single-value)
| +--rw (granularity)? | | +--rw all? uint8
| | +--:(detail) | +--:(multi-values)
| | | +--rw intra-area? uint8 | +--rw (granularity)?
| | | +--rw inter-area? uint8 | | +--:(detail)
| | +--:(coarse) | | | +--rw intra-area? uint8
| | +--rw internal? uint8 | | | +--rw inter-area? uint8
| +--rw external? uint8 | | +--:(coarse)
+--rw nsr {nsr}? | | +--rw internal? uint8
| +--rw enable? boolean | +--rw external? uint8
+--rw graceful-restart {graceful-restart}? +--rw nsr {nsr}?
| +--rw enable? boolean | +--rw enable? boolean
| +--rw helper-enable? boolean +--rw graceful-restart {graceful-restart}?
| +--rw restart-interval? uint16 | +--rw enable? boolean
| +--rw helper-strict-lsa-checking? boolean | +--rw helper-enable? boolean
+--rw enable? boolean {admin-control}? | +--rw restart-interval? uint16
+--rw auto-cost {auto-cost}? | +--rw helper-strict-lsa-checking? boolean
| +--rw enable? boolean +--rw enable? boolean {admin-control}?
| +--rw reference-bandwidth? uint32 +--rw auto-cost {auto-cost}?
+--rw spf-control | +--rw enable? boolean
| +--rw paths? uint16 {max-ecmp}? | +--rw reference-bandwidth? uint32
+--rw database-control +--rw spf-control
| +--rw max-lsa? uint32 {max-lsa}? | +--rw paths? uint16 {max-ecmp}?
+--rw stub-router {stub-router}? +--rw database-control
| +--rw (trigger)? | +--rw max-lsa? uint32 {max-lsa}?
| +--:(always) +--rw stub-router {stub-router}?
| +--rw always! | +--rw (trigger)?
+--rw mpls | +--:(always)
| +--rw te-rid {te-rid}? | +--rw always!
| | +--rw (source)? +--rw mpls
| | +--:(interface) | +--rw te-rid {te-rid}?
| | | +--rw interface? if:interface-ref | | +--rw (source)?
| | +--:(explicit) | | +--:(interface)
| | +--rw router-id? inet:ipv4-address | | | +--rw interface? if:interface-ref
| +--rw ldp | | +--:(explicit)
| +--rw igp-sync? boolean {ldp-igp-sync}? | | +--rw router-id? inet:ipv4-address
| +--rw autoconfig? boolean {ldp-igp-autoconfig}? | +--rw ldp
+--rw fast-reroute {fast-reroute}? | +--rw igp-sync? boolean {ldp-igp-sync}?
| +--rw lfa {lfa}? | +--rw autoconfig? boolean {ldp-igp-autoconfig}?
+--rw all-areas-inherit {area-inheritance}? +--rw fast-reroute {fast-reroute}?
| +--rw area | +--rw lfa {lfa}?
| +--rw interface
2.7. OSPF Area Configuration 2.7. OSPF Area Configuration
The area container contains OSPF area configuration and the list of The area container contains OSPF area configuration and the list of
interface containers representing all the OSPF interfaces in the interface containers representing all the OSPF interfaces in the
area. area.
The all-interfaces-inherit contains interface configuration that may The all-interfaces-inherit contains interface configuration that may
be inherited by all OSPF area interfaces. be inherited by all OSPF area interfaces.
skipping to change at page 8, line 4 skipping to change at page 7, line 51
The all-interfaces-inherit contains interface configuration that may The all-interfaces-inherit contains interface configuration that may
be inherited by all OSPF area interfaces. be inherited by all OSPF area interfaces.
module: ospf module: ospf
+--rw ospf +--rw ospf
. .
. .
+--rw instance* [routing-instance af] +--rw instance* [routing-instance af]
. .
. .
+--rw areas +--rw areas
| +--rw area* [area-id] | +--rw area* [area-id]
| +--rw area-id area-id-type | +--rw area-id area-id-type
| +--rw all-interfaces-inherit {interface-inheritance}?
| | +--rw interface
| +--rw area-type? identityref | +--rw area-type? identityref
| +--rw summary? boolean | +--rw summary? boolean
| +--rw default-cost? uint32 | +--rw default-cost? uint32
| +--rw ranges | +--rw ranges
| | +--rw range* [prefix] | | +--rw range* [prefix]
| | +--rw prefix inet:ip-prefix | | +--rw prefix inet:ip-prefix
| | +--rw advertise? boolean | | +--rw advertise? boolean
| | +--rw cost? uint24 | | +--rw cost? uint24
| +--rw all-interfaces-inherit {interface-inheritance}?
| | +--rw interface
| +--rw virtual-links | +--rw virtual-links
| | +--rw virtual-link* [router-id] | | +--rw virtual-link* [router-id]
| | +--rw router-id yang:dotted-quad | | +--rw router-id yang:dotted-quad
| | +--rw cost? uint16 | | +--rw cost? uint16
| | +--rw hello-interval? uint16 | | +--rw hello-interval? uint16
| | +--rw dead-interval? uint16 | | +--rw dead-interval? uint16
| | +--rw retransmit-interval? uint16 | | +--rw retransmit-interval? uint16
| | +--rw transmit-delay? uint16 | | +--rw transmit-delay? uint16
| | +--rw mtu-ignore? boolean {mtu-ignore}? | | +--rw mtu-ignore? boolean {mtu-ignore}?
| | +--rw lls? boolean {lls}? | | +--rw lls? boolean {lls}?
skipping to change at page 9, line 8 skipping to change at page 9, line 7
| | | +--rw md5? empty | | | +--rw md5? empty
| | +--:(sha-1) | | +--:(sha-1)
| | | +--rw sha-1? empty | | | +--rw sha-1? empty
| | +--:(hmac-sha-1) | | +--:(hmac-sha-1)
| | | +--rw hmac-sha-1? empty | | | +--rw hmac-sha-1? empty
| | +--:(hmac-sha-256) | | +--:(hmac-sha-256)
| | | +--rw hmac-sha-256? empty | | | +--rw hmac-sha-256? empty
| | +--:(hmac-sha-384) | | +--:(hmac-sha-384)
| | | +--rw hmac-sha-384? empty | | | +--rw hmac-sha-384? empty
| | +--:(hmac-sha-512) | | +--:(hmac-sha-512)
| | +--rw hmac-sha-512? empty | | | +--rw hmac-sha-512? empty
| | +--:(clear-text) {clear-text}?
| | +--rw clear-text? empty
| +--rw sham-link | +--rw sham-link
| | +--rw sham-link* [local-id remote-id] | | +--rw sham-link* [local-id remote-id]
| | +--rw local-id inet:ip-address | | +--rw local-id inet:ip-address
| | +--rw remote-id inet:ip-address | | +--rw remote-id inet:ip-address
| | +--rw cost? uint16 | | +--rw cost? uint16
| | +--rw hello-interval? uint16 | | +--rw hello-interval? uint16
| | +--rw dead-interval? uint16 | | +--rw dead-interval? uint16
| | +--rw retransmit-interval? uint16 | | +--rw retransmit-interval? uint16
| | +--rw transmit-delay? uint16 | | +--rw transmit-delay? uint16
| | +--rw mtu-ignore? boolean {mtu-ignore}? | | +--rw mtu-ignore? boolean {mtu-ignore}?
skipping to change at page 9, line 49 skipping to change at page 9, line 50
| | | +--rw md5? empty | | | +--rw md5? empty
| | +--:(sha-1) | | +--:(sha-1)
| | | +--rw sha-1? empty | | | +--rw sha-1? empty
| | +--:(hmac-sha-1) | | +--:(hmac-sha-1)
| | | +--rw hmac-sha-1? empty | | | +--rw hmac-sha-1? empty
| | +--:(hmac-sha-256) | | +--:(hmac-sha-256)
| | | +--rw hmac-sha-256? empty | | | +--rw hmac-sha-256? empty
| | +--:(hmac-sha-384) | | +--:(hmac-sha-384)
| | | +--rw hmac-sha-384? empty | | | +--rw hmac-sha-384? empty
| | +--:(hmac-sha-512) | | +--:(hmac-sha-512)
| | +--rw hmac-sha-512? empty | | | +--rw hmac-sha-512? empty
| | +--:(clear-text) {clear-text}?
| | +--rw clear-text? empty
2.8. OSPF Interface Configuration 2.8. OSPF Interface Configuration
The interface container contains OSPF interface configuration. The interface container contains OSPF interface configuration.
module: ospf module: ospf
+--rw ospf +--rw ospf
. .
. .
+--rw instance* [routing-instance af] +--rw instance* [routing-instance af]
skipping to change at page 11, line 29 skipping to change at page 11, line 31
| | | +--rw md5? empty | | | +--rw md5? empty
| | +--:(sha-1) | | +--:(sha-1)
| | | +--rw sha-1? empty | | | +--rw sha-1? empty
| | +--:(hmac-sha-1) | | +--:(hmac-sha-1)
| | | +--rw hmac-sha-1? empty | | | +--rw hmac-sha-1? empty
| | +--:(hmac-sha-256) | | +--:(hmac-sha-256)
| | | +--rw hmac-sha-256? empty | | | +--rw hmac-sha-256? empty
| | +--:(hmac-sha-384) | | +--:(hmac-sha-384)
| | | +--rw hmac-sha-384? empty | | | +--rw hmac-sha-384? empty
| | +--:(hmac-sha-512) | | +--:(hmac-sha-512)
| | +--rw hmac-sha-512? empty | | | +--rw hmac-sha-512? empty
| | +--:(clear-text) {clear-text}?
| | +--rw clear-text? empty
| +--rw topologies | +--rw topologies
| +--rw topology* [name] | | +--rw topology* [name]
| +--rw name leafref | | +--rw name leafref
| +--rw cost? uint32 | | +--rw cost? uint32
| +--rw instance-id? uint8
2.9. OSPF notification 2.9. OSPF notification
This YANG model defines a list of notifications that inform YANG This YANG model defines a list of notifications that inform YANG
clients of important events detected during protocol operation. The clients of important events detected during protocol operation. The
defined notifications cover the common set of traps from the OSPFv2 defined notifications cover the common set of traps from the OSPFv2
MIB [RFC4750] and OSPFv3 MIB [RFC5643]. MIB [RFC4750] and OSPFv3 MIB [RFC5643].
module: ospf module: ospf
notifications: notifications:
+---n if-state-change +---n if-state-change
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro (if-link-type-selection)? | +--ro (if-link-type-selection)?
| | +--:(interface) | | +--:(interface)
| | | +--ro interface | | | +--ro interface
| | | +--ro interface? if:interface-ref | | | +--ro interface? if:interface-ref
| | +--:(virtual-link) | | +--:(virtual-link)
| | | +--ro virtual-link | | | +--ro virtual-link
| | | +--ro area-id? area-id-type | | | +--ro area-id? area-id-type
| | | +--ro neighbor-router-id? yang:dotted-quad | | | +--ro neighbor-router-id? yang:dotted-quad
skipping to change at page 12, line 16 skipping to change at page 12, line 22
| | | +--ro virtual-link | | | +--ro virtual-link
| | | +--ro area-id? area-id-type | | | +--ro area-id? area-id-type
| | | +--ro neighbor-router-id? yang:dotted-quad | | | +--ro neighbor-router-id? yang:dotted-quad
| | +--:(sham-link) | | +--:(sham-link)
| | +--ro sham-link | | +--ro sham-link
| | +--ro area-id? area-id-type | | +--ro area-id? area-id-type
| | +--ro local-ip-addr? inet:ip-address | | +--ro local-ip-addr? inet:ip-address
| | +--ro remote-ip-addr? inet:ip-address | | +--ro remote-ip-addr? inet:ip-address
| +--ro state? if-state-type | +--ro state? if-state-type
+---n if-config-error +---n if-config-error
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro (if-link-type-selection)? | +--ro (if-link-type-selection)?
| | +--:(interface) | | +--:(interface)
| | | +--ro interface | | | +--ro interface
| | | +--ro interface? if:interface-ref | | | +--ro interface? if:interface-ref
| | +--:(virtual-link) | | +--:(virtual-link)
| | | +--ro virtual-link | | | +--ro virtual-link
| | | +--ro area-id? area-id-type | | | +--ro area-id? area-id-type
| | | +--ro neighbor-router-id? yang:dotted-quad | | | +--ro neighbor-router-id? yang:dotted-quad
| | +--:(sham-link) | | +--:(sham-link)
| | +--ro sham-link | | +--ro sham-link
| | +--ro area-id? area-id-type | | +--ro area-id? area-id-type
| | +--ro local-ip-addr? inet:ip-address | | +--ro local-ip-addr? inet:ip-address
| | +--ro remote-ip-addr? inet:ip-address | | +--ro remote-ip-addr? inet:ip-address
| +--ro packet-source? yang:dotted-quad | +--ro packet-source? yang:dotted-quad
| +--ro packet-type? packet-type | +--ro packet-type? packet-type
| +--ro error? enumeration | +--ro error? enumeration
+---n nbr-state-change +---n nbr-state-change
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro (if-link-type-selection)? | +--ro (if-link-type-selection)?
| | +--:(interface) | | +--:(interface)
| | | +--ro interface | | | +--ro interface
| | | +--ro interface? if:interface-ref | | | +--ro interface? if:interface-ref
| | +--:(virtual-link) | | +--:(virtual-link)
| | | +--ro virtual-link | | | +--ro virtual-link
| | | +--ro area-id? area-id-type | | | +--ro area-id? area-id-type
| | | +--ro neighbor-router-id? yang:dotted-quad | | | +--ro neighbor-router-id? yang:dotted-quad
| | +--:(sham-link) | | +--:(sham-link)
| | +--ro sham-link | | +--ro sham-link
| | +--ro area-id? area-id-type | | +--ro area-id? area-id-type
| | +--ro local-ip-addr? inet:ip-address | | +--ro local-ip-addr? inet:ip-address
| | +--ro remote-ip-addr? inet:ip-address | | +--ro remote-ip-addr? inet:ip-address
| +--ro neighbor-router-id? yang:dotted-quad | +--ro neighbor-router-id? yang:dotted-quad
| +--ro neighbor-ip-addr? yang:dotted-quad | +--ro neighbor-ip-addr? yang:dotted-quad
| +--ro state? nbr-state-type | +--ro state? nbr-state-type
+---n nbr-restart-helper-status-change +---n nbr-restart-helper-status-change
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro (if-link-type-selection)? | +--ro (if-link-type-selection)?
| | +--:(interface) | | +--:(interface)
| | | +--ro interface | | | +--ro interface
| | | +--ro interface? if:interface-ref | | | +--ro interface? if:interface-ref
| | +--:(virtual-link) | | +--:(virtual-link)
| | | +--ro virtual-link | | | +--ro virtual-link
| | | +--ro area-id? area-id-type | | | +--ro area-id? area-id-type
skipping to change at page 13, line 33 skipping to change at page 13, line 38
| | +--ro sham-link | | +--ro sham-link
| | +--ro area-id? area-id-type | | +--ro area-id? area-id-type
| | +--ro local-ip-addr? inet:ip-address | | +--ro local-ip-addr? inet:ip-address
| | +--ro remote-ip-addr? inet:ip-address | | +--ro remote-ip-addr? inet:ip-address
| +--ro neighbor-router-id? yang:dotted-quad | +--ro neighbor-router-id? yang:dotted-quad
| +--ro neighbor-ip-addr? yang:dotted-quad | +--ro neighbor-ip-addr? yang:dotted-quad
| +--ro status? restart-helper-status-type | +--ro status? restart-helper-status-type
| +--ro age? uint32 | +--ro age? uint32
| +--ro exit-reason? restart-exit-reason-type | +--ro exit-reason? restart-exit-reason-type
+---n rx-bad-packet +---n rx-bad-packet
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro (if-link-type-selection)? | +--ro (if-link-type-selection)?
| | +--:(interface) | | +--:(interface)
| | | +--ro interface | | | +--ro interface
| | | +--ro interface? if:interface-ref | | | +--ro interface? if:interface-ref
| | +--:(virtual-link) | | +--:(virtual-link)
| | | +--ro virtual-link | | | +--ro virtual-link
| | | +--ro area-id? area-id-type | | | +--ro area-id? area-id-type
| | | +--ro neighbor-router-id? yang:dotted-quad | | | +--ro neighbor-router-id? yang:dotted-quad
| | +--:(sham-link) | | +--:(sham-link)
| | +--ro sham-link | | +--ro sham-link
| | +--ro area-id? area-id-type | | +--ro area-id? area-id-type
| | +--ro local-ip-addr? inet:ip-address | | +--ro local-ip-addr? inet:ip-address
| | +--ro remote-ip-addr? inet:ip-address | | +--ro remote-ip-addr? inet:ip-address
| +--ro packet-source? yang:dotted-quad | +--ro packet-source? yang:dotted-quad
| +--ro packet-type? packet-type | +--ro packet-type? packet-type
+---n lsdb-approaching-overflow +---n lsdb-approaching-overflow
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro ext-lsdb-limit? uint32 | +--ro ext-lsdb-limit? uint32
+---n lsdb-overflow +---n lsdb-overflow
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro ext-lsdb-limit? uint32 | +--ro ext-lsdb-limit? uint32
+---n nssa-translator-status-change +---n nssa-translator-status-change
| +--ro routing-instance? rt:routing-instance-ref | +--ro routing-instance? string
| +--ro routing-protocol-type? -> ... | +--ro routing-protocol-type? -> ...
| +--ro routing-protocol-name? -> ... | +--ro routing-protocol-name? -> ...
| +--ro af? -> ... | +--ro af? -> ...
| +--ro area-id? area-id-type | +--ro area-id? area-id-type
| +--ro status? nssa-translator-state-type | +--ro status? nssa-translator-state-type
+---n restart-status-change +---n restart-status-change
+--ro routing-instance? rt:routing-instance-ref +--ro routing-instance? string
+--ro routing-protocol-type? -> ... +--ro routing-protocol-type? -> ...
+--ro routing-protocol-name? -> ... +--ro routing-protocol-name? -> ...
+--ro af? -> ... +--ro af? -> ...
+--ro status? restart-status-type +--ro status? restart-status-type
+--ro restart-interval? uint16 +--ro restart-interval? uint16
+--ro exit-reason? restart-exit-reason-type +--ro exit-reason? restart-exit-reason-type
3. OSPF Segment Routing 3. OSPF Segment Routing
In addition to the OSPF base YANG model, this document also defines a In addition to the OSPF base YANG model, this document also defines a
model for the OSPF segment routing feature. model for the OSPF segment routing feature.
The OSPF SR YANG module requires support for the base segment routing The OSPF SR YANG module requires support for the base segment routing
module [I-D.ietf-spring-sr-yang], which defines the global segment module [I-D.ietf-spring-sr-yang], which defines the global segment
routing configuration independent of any specific routing protocol routing configuration independent of any specific routing protocol
configuration. configuration.
module: ietf-ospf-sr module: ietf-ospf-sr
augment /rt:routing/rt:routing-instance/rt:routing-protocols augment /rt:routing/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance: /rt:routing-protocol/ospf:ospf/ospf:instance:
+--rw segment-routing +--rw segment-routing
| +--rw enabled? boolean | +--rw enabled? boolean
| +--rw bindings | +--rw bindings
| +--rw advertise | +--rw advertise
| | +--rw policies* string | | +--rw policies* string
| +--rw receive? boolean | +--rw receive? boolean
+--rw protocol-srgb {sr:protocol-srgb}? +--rw protocol-srgb {sr:protocol-srgb}?
+--rw srgb* [lower-bound upper-bound] +--rw srgb* [lower-bound upper-bound]
+--rw lower-bound uint32 +--rw lower-bound uint32
+--rw upper-bound uint32 +--rw upper-bound uint32
augment /rt:routing/rt:routing-instance/rt:routing-protocols augment /rt:routing/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:areas/ospf:area/ospf:interfaces/ospf:interface: /ospf:areas/ospf:area/ospf:interfaces/ospf:interface:
+--rw segment-routing +--rw segment-routing
+--rw adjacency-sid +--rw adjacency-sid
+--rw advertise-adj-group-sid* [group-id] +--rw advertise-adj-group-sid* [group-id]
| +--rw group-id uint32 | +--rw group-id uint32
+--rw advertise-protection? enumeration +--rw advertise-protection? enumeration
augment /rt:routing/rt:routing-instance/rt:routing-protocols augment /rt:routing/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas /rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas
/ospf:area/ospf:interfaces/ospf:interface/ospf:fast-reroute: /ospf:area/ospf:interfaces/ospf:interface/ospf:fast-reroute:
+--rw ti-lfa {ti-lfa}? +--rw ti-lfa {ti-lfa}?
+--rw enable? boolean +--rw enable? boolean
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance: /rt:routing-protocol/ospf:ospf/ospf:instance:
+--ro segment-routing +--ro segment-routing
| +--ro enabled? boolean | +--ro enabled? boolean
| +--ro bindings | +--ro bindings
| +--ro advertise | +--ro advertise
| | +--ro policies* string | | +--ro policies* string
| +--ro receive? boolean | +--ro receive? boolean
+--ro protocol-srgb {sr:protocol-srgb}? +--ro protocol-srgb {sr:protocol-srgb}?
+--ro srgb* [lower-bound upper-bound] +--ro srgb* [lower-bound upper-bound]
+--ro lower-bound uint32 +--ro lower-bound uint32
+--ro upper-bound uint32 +--ro upper-bound uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:areas/ospf:area/ospf:interfaces/ospf:interface: /ospf:areas/ospf:area/ospf:interfaces/ospf:interface:
+--ro segment-routing +--ro segment-routing
+--ro adjacency-sid +--ro adjacency-sid
+--ro advertise-adj-group-sid* [group-id] +--ro advertise-adj-group-sid* [group-id]
| +--ro group-id uint32 | +--ro group-id uint32
+--ro advertise-protection? enumeration +--ro advertise-protection? enumeration
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas /rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas
/ospf:area/ospf:interfaces/ospf:interface/ospf:database /ospf:area/ospf:interfaces/ospf:interface/ospf:database
/ospf:link-scope-lsa-type/ospf:link-scope-lsas /ospf:link-scope-lsa-type/ospf:link-scope-lsas
/ospf:link-scope-lsa/ospf:version/ospf:ospfv2 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2
/ospf:ospfv2/ospf:body/ospf:opaque /ospf:ospfv2/ospf:body/ospf:opaque
/ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv: /ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv:
+--ro perfix-sid-sub-tlvs +--ro perfix-sid-sub-tlvs
| +--ro prefix-sid-sub-tlv* | +--ro prefix-sid-sub-tlv*
| +--ro flags? bits | +--ro flags? bits
| +--ro mt-id? uint8 | +--ro mt-id? uint8
| +--ro algorithm? uint8 | +--ro algorithm? uint8
| +--ro sid? uint32 | +--ro sid? uint32
+--ro sid-binding-sub-tlvs +--ro sid-binding-sub-tlvs
+--ro sid-binding-sub-tlv* +--ro sid-binding-sub-tlv*
+--ro flags? bits +--ro flags? bits
+--ro mt-id? uint8 +--ro mt-id? uint8
skipping to change at page 16, line 28 skipping to change at page 16, line 34
| +--ro flags? bits | +--ro flags? bits
| +--ro router-id? yang:dotted-quad | +--ro router-id? yang:dotted-quad
| +--ro interface-id? uint32 | +--ro interface-id? uint32
+--ro ipv4-backup-ero-sub-tlv +--ro ipv4-backup-ero-sub-tlv
| +--ro flags? bits | +--ro flags? bits
| +--ro ipv4-address? inet:ipv4-address | +--ro ipv4-address? inet:ipv4-address
+--ro unnumbered-backup-ero-sub-tlv +--ro unnumbered-backup-ero-sub-tlv
+--ro flags? bits +--ro flags? bits
+--ro router-id? yang:dotted-quad +--ro router-id? yang:dotted-quad
+--ro interface-id? uint32 +--ro interface-id? uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:areas/ospf:area/ospf:database /ospf:areas/ospf:area/ospf:database
/ospf:area-scope-lsa-type/ospf:area-scope-lsas /ospf:area-scope-lsa-type/ospf:area-scope-lsas
/ospf:area-scope-lsa/ospf:version/ospf:ospfv2 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2
/ospf:ospfv2/ospf:body/ospf:opaque /ospf:ospfv2/ospf:body/ospf:opaque
/ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv: /ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv:
+--ro perfix-sid-sub-tlvs +--ro perfix-sid-sub-tlvs
| +--ro prefix-sid-sub-tlv* | +--ro prefix-sid-sub-tlv*
| +--ro flags? bits | +--ro flags? bits
| +--ro mt-id? uint8 | +--ro mt-id? uint8
skipping to change at page 17, line 16 skipping to change at page 17, line 21
| +--ro flags? bits | +--ro flags? bits
| +--ro router-id? yang:dotted-quad | +--ro router-id? yang:dotted-quad
| +--ro interface-id? uint32 | +--ro interface-id? uint32
+--ro ipv4-backup-ero-sub-tlv +--ro ipv4-backup-ero-sub-tlv
| +--ro flags? bits | +--ro flags? bits
| +--ro ipv4-address? inet:ipv4-address | +--ro ipv4-address? inet:ipv4-address
+--ro unnumbered-backup-ero-sub-tlv +--ro unnumbered-backup-ero-sub-tlv
+--ro flags? bits +--ro flags? bits
+--ro router-id? yang:dotted-quad +--ro router-id? yang:dotted-quad
+--ro interface-id? uint32 +--ro interface-id? uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:database/ospf:as-scope-lsa-type/ospf:as-scope-lsas /ospf:database/ospf:as-scope-lsa-type/ospf:as-scope-lsas
/ospf:as-scope-lsa/ospf:version/ospf:ospfv2 /ospf:as-scope-lsa/ospf:version/ospf:ospfv2
/ospf:ospfv2/ospf:body/ospf:opaque /ospf:ospfv2/ospf:body/ospf:opaque
/ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv: /ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv:
+--ro perfix-sid-sub-tlvs +--ro perfix-sid-sub-tlvs
| +--ro prefix-sid-sub-tlv* | +--ro prefix-sid-sub-tlv*
| +--ro flags? bits | +--ro flags? bits
| +--ro mt-id? uint8 | +--ro mt-id? uint8
| +--ro algorithm? uint8 | +--ro algorithm? uint8
skipping to change at page 17, line 51 skipping to change at page 18, line 8
| +--ro flags? bits | +--ro flags? bits
| +--ro router-id? yang:dotted-quad | +--ro router-id? yang:dotted-quad
| +--ro interface-id? uint32 | +--ro interface-id? uint32
+--ro ipv4-backup-ero-sub-tlv +--ro ipv4-backup-ero-sub-tlv
| +--ro flags? bits | +--ro flags? bits
| +--ro ipv4-address? inet:ipv4-address | +--ro ipv4-address? inet:ipv4-address
+--ro unnumbered-backup-ero-sub-tlv +--ro unnumbered-backup-ero-sub-tlv
+--ro flags? bits +--ro flags? bits
+--ro router-id? yang:dotted-quad +--ro router-id? yang:dotted-quad
+--ro interface-id? uint32 +--ro interface-id? uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:areas/ospf:area/ospf:database /ospf:areas/ospf:area/ospf:database
/ospf:area-scope-lsa-type/ospf:area-scope-lsas /ospf:area-scope-lsa-type/ospf:area-scope-lsas
/ospf:area-scope-lsa/ospf:version/ospf:ospfv2 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2
/ospf:ospfv2/ospf:body/ospf:opaque /ospf:ospfv2/ospf:body/ospf:opaque
/ospf:extended-link-tlvs/ospf:extended-link-tlv: /ospf:extended-link-tlvs/ospf:extended-link-tlv:
+--ro adj-sid-sub-tlvs +--ro adj-sid-sub-tlvs
| +--ro adj-sid-sub-tlv* | +--ro adj-sid-sub-tlv*
| +--ro flags? bits | +--ro flags? bits
| +--ro mt-id? uint8 | +--ro mt-id? uint8
| +--ro weight? uint8 | +--ro weight? uint8
| +--ro sid? uint32 | +--ro sid? uint32
+--ro lan-adj-sid-sub-tlvs +--ro lan-adj-sid-sub-tlvs
+--ro lan-adj-sid-sub-tlv* +--ro lan-adj-sid-sub-tlv*
+--ro flags? bits +--ro flags? bits
+--ro mt-id? uint8 +--ro mt-id? uint8
+--ro weight? uint8 +--ro weight? uint8
+--ro neighbor-router-id? yang:dotted-quad +--ro neighbor-router-id? yang:dotted-quad
+--ro sid? uint32 +--ro sid? uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas /rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas
/ospf:area/ospf:interfaces/ospf:interface /ospf:area/ospf:interfaces/ospf:interface
/ospf:database/ospf:link-scope-lsa-type/ospf:link-scope-lsas /ospf:database/ospf:link-scope-lsa-type/ospf:link-scope-lsas
/ospf:link-scope-lsa/ospf:version/ospf:ospfv2 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2
/ospf:ospfv2/ospf:body/ospf:opaque: /ospf:ospfv2/ospf:body/ospf:opaque:
+--ro extended-prefix-range-tlvs +--ro extended-prefix-range-tlvs
| +--ro extended-prefix-range-tlv* | +--ro extended-prefix-range-tlv*
| +--ro range-size? uint16 | +--ro range-size? uint16
| +--ro flags? bits | +--ro flags? bits
| +--ro prefix? inet:ip-prefix | +--ro prefix? inet:ip-prefix
skipping to change at page 19, line 27 skipping to change at page 19, line 32
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro sr-algorithm-tlv +--ro sr-algorithm-tlv
| +--ro sr-algorithm* uint8 | +--ro sr-algorithm* uint8
+--ro sid-range-tlvs +--ro sid-range-tlvs
+--ro sid-range-tlv* +--ro sid-range-tlv*
+--ro range-size? ospf:uint24 +--ro range-size? ospf:uint24
+--ro sid-sub-tlv +--ro sid-sub-tlv
+--ro sid? uint32 +--ro sid? uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas /rt:routing-protocol/ospf:ospf/ospf:instance/ospf:areas
/ospf:area/ospf:database/ospf:area-scope-lsa-type /ospf:area/ospf:database/ospf:area-scope-lsa-type
/ospf:area-scope-lsas/ospf:area-scope-lsa /ospf:area-scope-lsas/ospf:area-scope-lsa
/ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque:
+--ro extended-prefix-range-tlvs +--ro extended-prefix-range-tlvs
| +--ro extended-prefix-range-tlv* | +--ro extended-prefix-range-tlv*
| +--ro range-size? uint16 | +--ro range-size? uint16
| +--ro flags? bits | +--ro flags? bits
| +--ro prefix? inet:ip-prefix | +--ro prefix? inet:ip-prefix
| +--ro perfix-sid-sub-tlvs | +--ro perfix-sid-sub-tlvs
skipping to change at page 20, line 30 skipping to change at page 20, line 35
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro sr-algorithm-tlv +--ro sr-algorithm-tlv
| +--ro sr-algorithm* uint8 | +--ro sr-algorithm* uint8
+--ro sid-range-tlvs +--ro sid-range-tlvs
+--ro sid-range-tlv* +--ro sid-range-tlv*
+--ro range-size? ospf:uint24 +--ro range-size? ospf:uint24
+--ro sid-sub-tlv +--ro sid-sub-tlv
+--ro sid? uint32 +--ro sid? uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols augment /rt:routing-state/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance/ospf:database /rt:routing-protocol/ospf:ospf/ospf:instance/ospf:database
/ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa
/ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque:
+--ro extended-prefix-range-tlvs +--ro extended-prefix-range-tlvs
| +--ro extended-prefix-range-tlv* | +--ro extended-prefix-range-tlv*
| +--ro range-size? uint16 | +--ro range-size? uint16
| +--ro flags? bits | +--ro flags? bits
| +--ro prefix? inet:ip-prefix | +--ro prefix? inet:ip-prefix
| +--ro perfix-sid-sub-tlvs | +--ro perfix-sid-sub-tlvs
| | +--ro prefix-sid-sub-tlv* | | +--ro prefix-sid-sub-tlv*
skipping to change at page 22, line 6 skipping to change at page 22, line 8
between systems. A YANG data model is defined in [I-D.ietf-bfd-yang] between systems. A YANG data model is defined in [I-D.ietf-bfd-yang]
that supports BFD configuration and management. that supports BFD configuration and management.
As a client of BFD, the OSPF protocol uses the services provided by As a client of BFD, the OSPF protocol uses the services provided by
BFD. The OSPF BFD YANG augments the base OSPF module and is defined BFD. The OSPF BFD YANG augments the base OSPF module and is defined
as a separate module. So any implementation that does not support as a separate module. So any implementation that does not support
BFD can still use the OSPF base model without having to import the BFD can still use the OSPF base model without having to import the
BFD module [I-D.ietf-bfd-yang]. BFD module [I-D.ietf-bfd-yang].
module: ietf-ospf-bfd module: ietf-ospf-bfd
augment /rt:routing/rt:routing-instance/rt:routing-protocols augment /rt:routing/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:areas/ospf:area/ospf:interfaces/ospf:interface: /ospf:areas/ospf:area/ospf:interfaces/ospf:interface:
+--rw bfd +--rw bfd
+--rw enabled? boolean +--rw enabled? boolean
+--rw local-multiplier? multiplier augment /rt:routing-state/rt:routing-protocols
+--rw (interval-config-type)?
+--:(tx-rx-intervals)
| +--rw desired-min-tx-interval uint32
| +--rw required-min-rx-interval uint32
+--:(single-interval)
+--rw min-interval uint32
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols
/rt:routing-protocol/ospf:ospf/ospf:instance /rt:routing-protocol/ospf:ospf/ospf:instance
/ospf:areas/ospf:area/ospf:interfaces/ospf:interface: /ospf:areas/ospf:area/ospf:interfaces/ospf:interface:
+--ro bfd +--ro bfd
+--ro enabled? boolean +--ro enabled? boolean
+--ro local-multiplier? multiplier
+--ro (interval-config-type)?
+--:(tx-rx-intervals)
| +--ro desired-min-tx-interval uint32
| +--ro required-min-rx-interval uint32
+--:(single-interval)
+--ro min-interval uint32
5. OSPF Yang Module 5. OSPF Yang Module
<CODE BEGINS> file "ietf-ospf@2015-10-19.yang" <CODE BEGINS> file "ietf-ospf@2016-03-20.yang"
module ietf-ospf { module ietf-ospf {
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";
} }
import ietf-yang-types { import ietf-yang-types {
skipping to change at page 23, line 4 skipping to change at page 22, line 41
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
import ietf-key-chain { import ietf-routing-key-chain {
prefix "key-chain"; prefix "key-chain";
} }
organization organization
"Cisco Systems "Cisco Systems
170 West Tasman Drive 170 West Tasman Drive
San Jose, CA 95134-1706 San Jose, CA 95134-1706
USA"; USA";
contact contact
skipping to change at page 24, line 4 skipping to change at page 23, line 41
"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.
Terms and Acronyms Terms and Acronyms
OSPF (ospf): Open Shortest Path First OSPF (ospf): Open Shortest Path First
IP (ip): Internet Protocol IP (ip): Internet Protocol
IPv4 (ipv4):Internet Protocol Version 4 IPv4 (ipv4):Internet Protocol Version 4
IPv6 (ipv6): Internet Protocol Version 6 IPv6 (ipv6): Internet Protocol Version 6
MTU (mtu) Maximum Transmission Unit MTU (mtu) Maximum Transmission Unit
"; ";
revision 2016-03-20 {
description
"* Reorganize *-config and *-operation groupings.
* Use *-config under state tree for applied config.
* Rename config router-id to explicit-router-id.
* Rename feature router-id to explicit-router-id.
* Add OSPFv3 instance ID.
* Add OSPFv3 interface ID.
* Add ip-address for DR and BDR.
* Remove routing-instance.
* Change import module name to ietf-routing-key-chain.";
reference
"RFC XXXX: A YANG Data Model for OSPF.";
}
revision 2015-10-19 { revision 2015-10-19 {
description description
"* Remove the abstract identity ospf. "* Remove the abstract identity ospf.
* Make area-id-type dotted-quad only. * Make area-id-type dotted-quad only.
* Use area-id-type for all area-id leafs. * Use area-id-type for all area-id leafs.
* Restructure notifications. * Restructure notifications.
* Move BFD support to the new ietf-ospf-bfd module. * Move BFD support to the new ietf-ospf-bfd module.
* Update author information. * Update author information.
* Editorial changes."; * Editorial changes.";
reference reference
skipping to change at page 31, line 40 skipping to change at page 31, line 43
feature multi-topology { feature multi-topology {
description description
"Support Multiple-Topolgy Routing (MTR)."; "Support Multiple-Topolgy Routing (MTR).";
} }
feature multi-area-adj { feature multi-area-adj {
description description
"OSPF multi-area adjacency support as in RFC 5185."; "OSPF multi-area adjacency support as in RFC 5185.";
} }
feature router-id { feature explicit-router-id {
description description
"Set Router-ID per instance."; "Set Router-ID per instance explicitly.";
} }
feature demand-circuit { feature demand-circuit {
description description
"OSPF demand circuit support as in RFC 1793."; "OSPF demand circuit support as in RFC 1793.";
} }
feature mtu-ignore { feature mtu-ignore {
description description
"Disable OSPF Database Description packet MTU "Disable OSPF Database Description packet MTU
mismatch checking."; mismatch checking.";
} }
feature lls { feature lls {
description description
"OSPF link-local signaling (LLS) as in RFC 5613."; "OSPF link-local signaling (LLS) as in RFC 5613.";
} }
skipping to change at page 34, line 18 skipping to change at page 34, line 22
feature area-inheritance { feature area-inheritance {
description description
"Support area inheritance"; "Support area inheritance";
} }
feature interface-inheritance { feature interface-inheritance {
description description
"Support interface inheritance"; "Support interface inheritance";
} }
grouping instance-stat {
description "Per-instance statistics";
leaf originate-new-lsa-count {
type yang:counter32;
description "The number of new LSAs originated.";
}
leaf rx-new-lsas-count {
type yang:counter32;
description "The number of LSAs received.";
}
leaf as-scope-lsa-count {
type yang:gauge32;
description "The number of AS Scope LSAs.";
}
leaf as-scope-lsa-chksum-sum {
type uint32;
description
"The sum of the LSA checksums for AS Scope LSAs.";
}
container database {
description "Container for per AS-scope LSA statistics.";
list as-scope-lsa-type {
description "List of AS-scope LSA statistics";
leaf lsa-type {
type uint16;
description "AS-scope LSA type.";
}
leaf lsa-count {
type yang:gauge32;
description "The number of LSAs of the LSA type.";
}
leaf lsa-cksum-sum {
type int32;
description
"The sum of the LSA checksums of the LSA type.";
}
}
}
}
grouping area-stat {
description "Per-area statistics.";
leaf spf-runs-count {
type yang:counter32;
description
"The number of times the intra-area SPF has run.";
}
leaf abr-count {
type yang:gauge32;
description
"The total number of Area Border Routers (ABRs)
reachable within this area.";
}
leaf asbr-count {
type yang:gauge32;
description
"The total number of AS Border Routers (ASBRs).";
}
leaf ar-nssa-translator-event-count {
type yang:counter32;
description
"The number of NSSA translator-state changes.";
}
leaf area-scope-lsa-count {
type yang:gauge32;
description
"The number of area scope LSAs in the area.";
}
leaf area-scope-lsa-cksum-sum {
type int32;
description "The sum of the area scope LSAs checksums.";
}
container database {
description "Container for area scope LSA type statistics.";
list area-scope-lsa-type {
description "List of area scope LSA statistics";
leaf lsa-type {
type uint16;
description "Area scope LSA type.";
}
leaf lsa-count {
type yang:gauge32;
description "The number of LSAs of the LSA type.";
}
leaf lsa-cksum-sum {
type int32;
description
"The sum of the LSA checksums of the LSA type.";
}
}
}
}
grouping interface-stat {
description "Per-interface statistics";
leaf if-event-count {
type yang:counter32;
description
"The number of times this interface has changed its
state or an error has occurred.";
}
leaf link-scope-lsa-count {
type yang:gauge32;
description "The number of link scope LSAs.";
}
leaf link-scope-lsa-cksum-sum {
type uint32;
description "The sum of link scope LSA checksums.";
}
container database {
description "Container for link scope LSA type statistics.";
list link-scope-lsa-type {
description "List of link scope LSA statistics";
leaf lsa-type {
type uint16;
description "Link scope LSA type.";
}
leaf lsa-count {
type yang:gauge32;
description "The number of LSAs of the LSA type.";
}
leaf lsa-cksum-sum {
type int32;
description
"The sum of the LSA checksums of the LSA type.";
}
}
}
}
grouping neighbor-stat {
description "Per-neighbor statistics.";
leaf nbr-event-count {
type yang:counter32;
description
"The number of times this neighbor has changed
state or an error has occurred.";
}
leaf nbr-retrans-qlen {
type yang:gauge32;
description
"The current length of the retransmission queue.";
}
}
grouping instance-fast-reroute-config {
description
"This group defines global configuration of IP-FRR.";
container fast-reroute {
if-feature fast-reroute;
description
"This container may be augmented with global
parameters for IP-FRR.";
container lfa {
if-feature lfa;
description
"This container may be augmented with
global parameters for LFA. Container creation
has no effect on LFA activation.";
}
}
}
grouping interface-fast-reroute-config {
description
"This group defines interface configuration of IP-FRR.";
container fast-reroute {
if-feature fast-reroute;
container lfa {
if-feature lfa;
leaf candidate-disabled {
type boolean;
description
"Prevent the interface to be used as backup.";
}
leaf enabled {
type boolean;
description
"Activates LFA - Per-prefix LFA computation
is assumed.";
}
container remote-lfa {
if-feature remote-lfa;
leaf enabled {
type boolean;
description
"Activates Remote LFA (R-LFA).";
}
description
"Remote LFA configuration.";
}
description
"LFA configuration.";
}
description
"IP Fast-reroute configuration.";
}
}
grouping interface-common-config {
description
"Common configuration for all types of interfaces,
including virtual links and sham links.";
leaf cost {
type uint16 {
range "1..65535";
}
description
"Interface cost.";
}
leaf hello-interval {
type uint16 {
range "1..65535";
}
units seconds;
description
"Interval between hello packets in seconds.";
}
leaf dead-interval {
type uint16 {
range "1..65535";
}
units seconds;
must "../dead-interval > ../hello-interval" {
error-message "The dead interval must be "
+ "larger than the hello interval";
description
"The value MUST be greater than 'hello-internval'.";
}
description
"Interval after which a neighbor is
declared down in seconds.";
}
leaf retransmit-interval {
type uint16 {
range "1..65535";
}
units seconds;
description
"Interval between retransmitting unacknowledged Link
State Advertisements (LSAs) in seconds.";
}
leaf transmit-delay {
type uint16 {
range "1..65535";
}
units seconds;
description
"Estimated time needed to transmit Link State Update
packets on the interface in seconds.";
}
leaf mtu-ignore {
if-feature mtu-ignore;
type boolean;
description
"Enable/Disable bypassing the MTU mismatch check in
Database Description packets.";
}
leaf lls {
if-feature lls;
type boolean;
description
"Enable/Disable link-local signaling (LLS) support.";
}
leaf prefix-suppression {
if-feature prefix-suppression;
type boolean;
description
"Suppress advertisement of the prefixes associated
with the interface.";
}
container ttl-security {
if-feature ttl-security;
description "TTL security check.";
leaf enable {
type boolean;
description
"Enable/Disable TTL security check.";
}
leaf hops {
type uint8 {
range "1..254";
}
description
"Maximum number of hops that an OSPF packet may
have traversed before reception.";
}
}
leaf enable {
if-feature admin-control;
type boolean;
default true;
description
"Enable/disable protocol on the interface.";
}
container authentication {
description "Authentication configuration.";
choice auth-type-selection {
description
"Options for expressing authentication setting.";
case auth-ipsec {
when "../../../../../../../rt:type = 'ospf:ospfv3'" {
description "Applied to OSPFv3 only.";
}
if-feature ospfv3-authentication-ipsec;
leaf sa {
type string;
description
"Security Association name.";
}
}
case auth-trailer-key-chain {
leaf key-chain {
type key-chain:key-chain-ref;
description
"key-chain name.";
}
}
case auth-trailer-key {
leaf key {
type string;
description
"Key string in ASCII format.";
}
container crypto-algorithm {
uses key-chain:crypto-algorithm-types;
description
"Cryptographic algorithm associated with key.";
}
}
}
}
} // interface-common-config
grouping interface-config {
description "Configuration for real interfaces.";
leaf network-type {
type enumeration {
enum "broadcast" {
description
"Specify OSPF broadcast multi-access network.";
}
enum "non-broadcast" {
description
"Specify OSPF Non-Broadcast Multi-Access
(NBMA) network.";
}
enum "point-to-multipoint" {
description
"Specify OSPF point-to-multipoint network.";
}
enum "point-to-point" {
description
"Specify OSPF point-to-point network.";
}
}
description
"Network type.";
}
leaf passive {
type boolean;
description
"Enable/Disable passive interface - a passive interface's
prefix will be advertised but no neighbor adjacencies
will be formed on the interface.";
}
leaf demand-circuit {
if-feature demand-circuit;
type boolean;
description
"Enable/Disable demand circuit.";
}
container multi-areas {
description "Container for multi-area config.";
list multi-area {
if-feature multi-area-adj;
key multi-area-id;
description
"Configure OSPF multi-area adjacency.";
leaf multi-area-id {
type area-id-type;
description
"Multi-area adjacency area ID.";
}
leaf cost {
type uint16;
description
"Interface cost for multi-area adjacency.";
}
}
}
container static-neighbors {
description "Statically configured neighbors.";
list neighbor {
key "address";
description
"Specify a static OSPF neighbor.";
leaf address {
type inet:ip-address;
description "Neighbor IP address.";
}
leaf cost {
type uint16 {
range "1..65535";
}
description "Neighbor cost.";
}
leaf poll-interval {
type uint16 {
range "1..65535";
}
units seconds;
description "Neighbor poll interval in seconds.";
}
leaf priority {
type uint8 {
range "1..255";
}
description "Neighbor priority for DR election.";
}
}
}
leaf node-flag {
if-feature node-flag;
type boolean;
default false;
description
"Set prefix as a segment routing (SR) node
representative prefix.";
}
uses interface-fast-reroute-config;
uses interface-common-config;
} // grouping interface-config
grouping tlv { grouping tlv {
description description
"TLV"; "TLV";
leaf type { leaf type {
type uint16; type uint16;
description "TLV type."; description "TLV type.";
} }
leaf length { leaf length {
type uint16; type uint16;
description "TLV length."; description "TLV length.";
skipping to change at page 61, line 46 skipping to change at page 52, line 31
description description
"LSA ID."; "LSA ID.";
} }
leaf adv-router { leaf adv-router {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Advertising router."; "Advertising router.";
} }
} }
grouping instance-stat {
description "Per-instance statistics";
leaf originate-new-lsa-count {
type yang:counter32;
description "The number of new LSAs originated.";
}
leaf rx-new-lsas-count {
type yang:counter32;
description "The number of LSAs received.";
}
leaf as-scope-lsa-count {
type yang:gauge32;
description "The number of AS Scope LSAs.";
}
leaf as-scope-lsa-chksum-sum {
type uint32;
description
"The sum of the LSA checksums for AS Scope LSAs.";
}
container database {
description "Container for per AS-scope LSA statistics.";
list as-scope-lsa-type {
description "List of AS-scope LSA statistics";
leaf lsa-type {
type uint16;
description "AS-scope LSA type.";
}
leaf lsa-count {
type yang:gauge32;
description "The number of LSAs of the LSA type.";
}
leaf lsa-cksum-sum {
type int32;
description
"The sum of the LSA checksums of the LSA type.";
}
}
}
}
grouping area-stat {
description "Per-area statistics.";
leaf spf-runs-count {
type yang:counter32;
description
"The number of times the intra-area SPF has run.";
}
leaf abr-count {
type yang:gauge32;
description
"The total number of Area Border Routers (ABRs)
reachable within this area.";
}
leaf asbr-count {
type yang:gauge32;
description
"The total number of AS Border Routers (ASBRs).";
}
leaf ar-nssa-translator-event-count {
type yang:counter32;
description
"The number of NSSA translator-state changes.";
}
leaf area-scope-lsa-count {
type yang:gauge32;
description
"The number of area scope LSAs in the area.";
}
leaf area-scope-lsa-cksum-sum {
type int32;
description "The sum of the area scope LSAs checksums.";
}
container database {
description "Container for area scope LSA type statistics.";
list area-scope-lsa-type {
description "List of area scope LSA statistics";
leaf lsa-type {
type uint16;
description "Area scope LSA type.";
}
leaf lsa-count {
type yang:gauge32;
description "The number of LSAs of the LSA type.";
}
leaf lsa-cksum-sum {
type int32;
description
"The sum of the LSA checksums of the LSA type.";
}
}
}
}
grouping interface-stat {
description "Per-interface statistics";
leaf if-event-count {
type yang:counter32;
description
"The number of times this interface has changed its
state or an error has occurred.";
}
leaf link-scope-lsa-count {
type yang:gauge32;
description "The number of link scope LSAs.";
}
leaf link-scope-lsa-cksum-sum {
type uint32;
description "The sum of link scope LSA checksums.";
}
container database {
description "Container for link scope LSA type statistics.";
list link-scope-lsa-type {
description "List of link scope LSA statistics";
leaf lsa-type {
type uint16;
description "Link scope LSA type.";
}
leaf lsa-count {
type yang:gauge32;
description "The number of LSAs of the LSA type.";
}
leaf lsa-cksum-sum {
type int32;
description
"The sum of the LSA checksums of the LSA type.";
}
}
}
}
grouping neighbor-stat {
description "Per-neighbor statistics.";
leaf nbr-event-count {
type yang:counter32;
description
"The number of times this neighbor has changed
state or an error has occurred.";
}
leaf nbr-retrans-qlen {
type yang:gauge32;
description
"The current length of the retransmission queue.";
}
}
grouping instance-fast-reroute-config {
description
"This group defines global configuration of IP-FRR.";
container fast-reroute {
if-feature fast-reroute;
description
"This container may be augmented with global
parameters for IP-FRR.";
container lfa {
if-feature lfa;
description
"This container may be augmented with
global parameters for LFA. Container creation
has no effect on LFA activation.";
}
}
}
grouping interface-fast-reroute-config {
description
"This group defines interface configuration of IP-FRR.";
container fast-reroute {
if-feature fast-reroute;
container lfa {
if-feature lfa;
leaf candidate-disabled {
type boolean;
description
"Prevent the interface to be used as backup.";
}
leaf enabled {
type boolean;
description
"Activates LFA - Per-prefix LFA computation
is assumed.";
}
container remote-lfa {
if-feature remote-lfa;
leaf enabled {
type boolean;
description
"Activates Remote LFA (R-LFA).";
}
description
"Remote LFA configuration.";
}
description
"LFA configuration.";
}
description
"IP Fast-reroute configuration.";
}
}
grouping interface-common-config {
description
"Common configuration for all types of interfaces,
including virtual links and sham links.";
leaf cost {
type uint16 {
range "1..65535";
}
description
"Interface cost.";
}
leaf hello-interval {
type uint16 {
range "1..65535";
}
units seconds;
description
"Interval between hello packets in seconds.";
}
leaf dead-interval {
type uint16 {
range "1..65535";
}
units seconds;
must "../dead-interval > ../hello-interval" {
error-message "The dead interval must be "
+ "larger than the hello interval";
description
"The value MUST be greater than 'hello-internval'.";
}
description
"Interval after which a neighbor is
declared down in seconds.";
}
leaf retransmit-interval {
type uint16 {
range "1..65535";
}
units seconds;
description
"Interval between retransmitting unacknowledged Link
State Advertisements (LSAs) in seconds.";
}
leaf transmit-delay {
type uint16 {
range "1..65535";
}
units seconds;
description
"Estimated time needed to transmit Link State Update
packets on the interface in seconds.";
}
leaf mtu-ignore {
if-feature mtu-ignore;
type boolean;
description
"Enable/Disable bypassing the MTU mismatch check in
Database Description packets.";
}
leaf lls {
if-feature lls;
type boolean;
description
"Enable/Disable link-local signaling (LLS) support.";
}
leaf prefix-suppression {
if-feature prefix-suppression;
type boolean;
description
"Suppress advertisement of the prefixes associated
with the interface.";
}
container ttl-security {
if-feature ttl-security;
description "TTL security check.";
leaf enable {
type boolean;
description
"Enable/Disable TTL security check.";
}
leaf hops {
type uint8 {
range "1..254";
}
description
"Maximum number of hops that an OSPF packet may
have traversed before reception.";
}
}
leaf enable {
if-feature admin-control;
type boolean;
default true;
description
"Enable/disable protocol on the interface.";
}
container authentication {
description "Authentication configuration.";
choice auth-type-selection {
description
"Options for expressing authentication setting.";
case auth-ipsec {
when "../../../../../../../rt:type = 'ospf:ospfv3'" {
description "Applied to OSPFv3 only.";
}
if-feature ospfv3-authentication-ipsec;
leaf sa {
type string;
description
"Security Association name.";
}
}
case auth-trailer-key-chain {
leaf key-chain {
type key-chain:key-chain-ref;
description
"key-chain name.";
}
}
case auth-trailer-key {
leaf key {
type string;
description
"Key string in ASCII format.";
}
container crypto-algorithm {
uses key-chain:crypto-algorithm-types;
description
"Cryptographic algorithm associated with key.";
}
}
}
}
} // interface-common-config
grouping interface-config {
description "Configuration for real interfaces.";
leaf network-type {
type enumeration {
enum "broadcast" {
description
"Specify OSPF broadcast multi-access network.";
}
enum "non-broadcast" {
description
"Specify OSPF Non-Broadcast Multi-Access
(NBMA) network.";
}
enum "point-to-multipoint" {
description
"Specify OSPF point-to-multipoint network.";
}
enum "point-to-point" {
description
"Specify OSPF point-to-point network.";
}
}
description
"Network type.";
}
leaf passive {
type boolean;
description
"Enable/Disable passive interface - a passive interface's
prefix will be advertised but no neighbor adjacencies
will be formed on the interface.";
}
leaf demand-circuit {
if-feature demand-circuit;
type boolean;
description
"Enable/Disable demand circuit.";
}
container multi-areas {
description "Container for multi-area config.";
list multi-area {
if-feature multi-area-adj;
key multi-area-id;
description
"Configure OSPF multi-area adjacency.";
leaf multi-area-id {
type area-id-type;
description
"Multi-area adjacency area ID.";
}
leaf cost {
type uint16;
description
"Interface cost for multi-area adjacency.";
}
}
}
container static-neighbors {
description "Statically configured neighbors.";
list neighbor {
key "address";
description
"Specify a static OSPF neighbor.";
leaf address {
type inet:ip-address;
description "Neighbor IP address.";
}
leaf cost {
type uint16 {
range "1..65535";
}
description "Neighbor cost.";
}
leaf poll-interval {
type uint16 {
range "1..65535";
}
units seconds;
description "Neighbor poll interval in seconds.";
}
leaf priority {
type uint8 {
range "1..255";
}
description "Neighbor priority for DR election.";
}
}
}
leaf node-flag {
if-feature node-flag;
type boolean;
default false;
description
"Set prefix as a segment routing (SR) node
representative prefix.";
}
uses interface-fast-reroute-config;
uses interface-common-config;
} // grouping interface-config
grouping neighbor-operation {
description
"OSPF neighbor operation data.";
leaf address {
type inet:ip-address;
description
"Neighbor address.";
}
leaf dr-router-id {
type yang:dotted-quad;
description "Neighbor's Designated Router (DR) router ID.";
}
leaf dr-ip-addr {
type inet:ip-address;
description "Neighbor's Designated Router (DR) IP address.";
}
leaf bdr-router-id {
type yang:dotted-quad;
description
"Neighbor's Backup Designated Router (BDR) router ID.";
}
leaf bdr-ip-addr {
type inet:ipv4-address;
description
"Neighbor's Backup Designated Router (BDR) IP Address.";
}
leaf state {
type nbr-state-type;
description
"OSPF neighbor state.";
}
container statistics {
description "Per neighbor statistics";
uses neighbor-stat;
}
}
grouping interface-common-operation {
description
"OSPF interface common operation state.";
reference "RFC2328 Section 9";
leaf state {
type if-state-type;
description "Interface state.";
}
leaf hello-timer {
type uint32;
units "milliseconds";
description "Hello timer.";
}
leaf wait-timer {
type uint32;
units "milliseconds";
description "Wait timer.";
}
leaf dr-router-id {
type yang:dotted-quad;
description "Designated Router (DR) router ID.";
}
leaf dr-ip-addr {
type inet:ip-address;
description "Designated Router (DR) IP address.";
}
leaf bdr-router-id {
type yang:dotted-quad;
description "Backup Designated Router (BDR) router ID.";
}
leaf bdr-ip-addr {
type inet:ipv4-address;
description "Backup Designated Router (BDR) IP Address.";
}
container statistics {
description "Per interface statistics";
uses interface-stat;
}
container neighbors {
description "All neighbors for the interface.";
list neighbor {
key "neighbor-router-id";
description
"List of OSPF neighbors.";
leaf neighbor-router-id {
type yang:dotted-quad;
description
"Neighbor router ID.";
}
uses neighbor-operation;
} // list of OSPF neighbors
}
} // interface-common-operation
grouping interface-operation {
description
"OSPF interface operation state.";
reference "RFC2328 Section 9";
uses interface-common-operation;
container database {
description "Link scope LSA database.";
list link-scope-lsa-type {
key "lsa-type";
description
"List OSPF link scope LSA databases.";
leaf lsa-type {
type uint16;
description "OSPF link scope LSA type.";
}
container link-scope-lsas {
description
"All link scope LSAs of this LSA type.";
list link-scope-lsa {
key "lsa-id adv-router";
description "List of OSPF link scope LSAs";
uses lsa-key;
uses lsa {
refine "version/ospfv2/ospfv2" {
must "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" {
description "OSPFv2 LSA.";
}
}
refine "version/ospfv3/ospfv3" {
must "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description "OSPFv3 LSA.";
}
}
}
}
}
} // list link-scope-lsas
}
}
grouping virtual-link-config {
description
"OSPF virtual link configuration state.";
uses interface-common-config;
}
grouping virtual-link-operation {
description
"OSPF virtual link operation state.";
uses interface-common-operation;
}
grouping sham-link-config {
description
"OSPF sham link configuration state.";
uses interface-common-config;
}
grouping sham-link-operation {
description
"OSPF sham link operation state.";
uses interface-common-operation;
}
grouping af-area-config { grouping af-area-config {
description description
"OSPF address-family specific area config state."; "OSPF address-family specific area config state.";
container ranges { container ranges {
description "Container for summary ranges"; description "Container for summary ranges";
list range { list range {
key "prefix"; key "prefix";
description description
"Summarize routes matching address/mask "Summarize routes matching address/mask
(Area Border Routers (ABRs) only)"; (Area Border Routers (ABRs) only)";
leaf prefix { leaf prefix {
type inet:ip-prefix; type inet:ip-prefix;
description description
"IPv4 or IPv6 prefix"; "IPv4 or IPv6 prefix";
} }
skipping to change at page 62, line 29 skipping to change at page 66, line 17
type uint24 { type uint24 {
range "0..16777214"; range "0..16777214";
} }
description description
"Advertised cost of summary route."; "Advertised cost of summary route.";
} }
} }
} }
} }
grouping area-config { grouping area-common-config {
description description
"OSPF area configuration state."; "OSPF area common configuration state.";
leaf area-type {
type identityref {
base area-type;
}
default normal;
description
"Area type.";
}
leaf summary { leaf summary {
when "../area-type = 'ospf:stub' or " when "../area-type = 'ospf:stub' or "
+ "../area-type = 'ospf:nssa'" { + "../area-type = 'ospf:nssa'" {
description description
"Summary advertisement into the stub/NSSA area."; "Summary advertisement into the stub/NSSA area.";
} }
type boolean; type boolean;
description description
"Enable/Disable summary advertisement into the stub or "Enable/Disable summary advertisement into the stub or
skipping to change at page 63, line 20 skipping to change at page 66, line 48
} }
type uint32 { type uint32 {
range "1..16777215"; range "1..16777215";
} }
description description
"Set the summary default route cost for a "Set the summary default route cost for a
stub or NSSA area."; stub or NSSA area.";
} }
} }
grouping area-config {
description
"OSPF area configuration state.";
container all-interfaces-inherit {
if-feature interface-inheritance;
description
"Inheritance for all interfaces";
container interface {
description
"Interface config to be inherited by all
interfaces in the area.";
}
}
leaf area-type {
type identityref {
base area-type;
}
default normal;
description
"Area type.";
}
uses area-common-config;
uses af-area-config {
when "../../operation-mode = "
+ "'ospf:ships-in-the-night'" {
description
"Ships in the night configuration.";
}
}
}
grouping area-operation {
description
"OSPF area operation state.";
container statistics {
description "Per area statistics";
uses area-stat;
}
container database {
description "Area scope LSA database.";
list area-scope-lsa-type {
key "lsa-type";
description "List OSPF area scope LSA databases.";
leaf lsa-type {
type uint16;
description "OSPF area scope LSA type.";
}
container area-scope-lsas {
description
"All area scope LSAs of an area scope
LSA type.";
list area-scope-lsa {
key "lsa-id adv-router";
description "List of OSPF area scope LSAs";
uses lsa-key;
uses lsa {
refine "version/ospfv2/ospfv2" {
must "../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" {
description "OSPFv2 LSA.";
}
}
refine "version/ospfv3/ospfv3" {
must "../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description "OSPFv3 LSA.";
}
}
}
}
}
} // list area-scope-lsas
}
}
grouping local-rib { grouping local-rib {
description "Local-rib grouping."; description "Local-rib grouping.";
container local-rib { container local-rib {
description "Local-rib."; description "Local-rib.";
list route { list route {
key "prefix"; key "prefix";
description "Routes"; description "Routes";
leaf prefix { leaf prefix {
type inet:ip-prefix; type inet:ip-prefix;
description "Destination prefix."; description "Destination prefix.";
skipping to change at page 64, line 18 skipping to change at page 69, line 31
type uint32; type uint32;
description "Route tag for this route."; description "Route tag for this route.";
} }
} }
} }
} }
grouping instance-config { grouping instance-config {
description description
"OSPF instance config state."; "OSPF instance config state.";
leaf router-id {
if-feature router-id; container all-areas-inherit {
if-feature area-inheritance;
description
"Inheritance for all areas.";
container area {
description
"Area config to be inherited by all areas.";
}
container interface {
description
"Interface config to be inherited by all interfaces
in all areas.";
}
}
leaf explicit-router-id {
if-feature explicit-router-id;
type yang:dotted-quad; type yang:dotted-quad;
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 admin-distance { container admin-distance {
description "Admin distance config state."; description "Admin distance config state.";
choice scope { choice scope {
description description
skipping to change at page 65, line 45 skipping to change at page 71, line 27
} }
} }
container graceful-restart { container graceful-restart {
if-feature graceful-restart; if-feature graceful-restart;
description description
"Graceful restart config state."; "Graceful restart config state.";
leaf enable { leaf enable {
type boolean; type boolean;
description description
"Enable/Disable graceful restart as defined in RFC 3623."; "Enable/Disable graceful restart as defined in RFC 3623
for OSPFv2 and RFC 5187 for OSPFv3.";
} }
leaf helper-enable { leaf helper-enable {
type boolean; type boolean;
description description
"Enable graceful restart helper support for restarting "Enable graceful restart helper support for restarting
routers (RFC 3623 Section B.2)."; routers (RFC 3623 Section 3).";
} }
leaf restart-interval { leaf restart-interval {
type uint16 { type uint16 {
range "1..1800"; // Range is defined in RFC 3623. range "1..1800"; // Range is defined in RFC 3623.
} }
units seconds; units seconds;
default "120"; // Default is defined in RFC 3623. default "120"; // Default is defined in RFC 3623.
description description
"Interval in seconds to attempt graceful restart prior "Interval in seconds to attempt graceful restart prior
to failing (RFC 3623 Section B.1)"; to failing (RFC 3623 Section B.1)";
skipping to change at page 68, line 50 skipping to change at page 74, line 31
if-feature ldp-igp-autoconfig; if-feature ldp-igp-autoconfig;
type boolean; type boolean;
description description
"Enable LDP IGP interface auto-configuration."; "Enable LDP IGP interface auto-configuration.";
} }
} }
} }
uses instance-fast-reroute-config; uses instance-fast-reroute-config;
} }
grouping interface-operation { grouping instance-operation {
description description
"OSPF interface operation state."; "OSPF Address Family operation state.";
reference "RFC2328 Section 9";
uses interface-config;
leaf state {
type if-state-type;
description "Interface state.";
}
leaf hello-timer {
type uint32;
units "milliseconds";
description "Hello timer.";
}
leaf wait-timer { leaf router-id {
type uint32; type yang:dotted-quad;
units "milliseconds"; description
description "Wait timer."; "Defined in RFC 2328. A 32-bit number
that uniquely identifies the router.";
} }
leaf dr { uses local-rib;
type inet:ipv4-address;
description "Designated Router (DR) IP address.";
}
leaf bdr { container statistics {
type inet:ipv4-address; description "Per instance statistics";
description "Backup Designated Router (BDR) IP Address."; uses instance-stat;
} }
container statistics { container database {
description "Per interface statistics"; description "AS scope LSA database.";
uses interface-stat; list as-scope-lsa-type {
key "lsa-type";
description "List OSPF AS scope LSA databases.";
leaf lsa-type {
type uint16;
description "OSPF AS scope LSA type.";
}
container as-scope-lsas {
description "All AS scope of LSA of this LSA type.";
list as-scope-lsa {
key "lsa-id adv-router";
description "List of OSPF area scope LSAs";
uses lsa-key;
uses lsa {
refine "version/ospfv2/ospfv2" {
must "../../../../../../../rt:type = "
+ "'ospf:ospfv2'" {
description "OSPFv2 LSA.";
}
}
refine "version/ospfv3/ospfv3" {
must "../../../../../../../rt:type = "
+ "'ospf:ospfv3'" {
description "OSPFv3 LSA.";
}
}
}
}
}
} // list as-scope-lsas
} }
} // interface-operation }
grouping neighbor-operation { grouping ospf-config {
description description
"OSPF neighbor operation data."; "OSPF top configuration state.";
leaf address { container all-instances-inherit {
type inet:ip-address; if-feature instance-inheritance;
description
"Neighbor address.";
}
leaf dr {
type yang:dotted-quad;
description description
"Designated Router."; "Inheritance support to all instances.";
container area {
description
"Area config to be inherited by all areas
in all instances.";
}
container interface {
description
"Interface config to be inherited by all
interfaces in all instances.";
}
} }
leaf bdr {
type yang:dotted-quad; leaf operation-mode {
type identityref {
base operation-mode;
}
default ospf:ships-in-the-night;
description description
"Backup Designated Router."; "OSPF operation mode.";
} }
leaf state { }
type nbr-state-type;
description grouping ospf-operation {
"OSPF neighbor state."; description
"OSPF top operation state.";
}
grouping multi-topology-area-config {
description
"OSPF multi-topology area configuration state.";
uses area-common-config;
uses af-area-config {
when "../../../../operation-mode = "
+ "'ospf:ships-in-the-night'" {
description
"Ships in the night configuration.";
}
} }
container statistics { }
description "Per neighbor statistics";
uses neighbor-stat; grouping multi-topology-area-operation {
description
"OSPF multi-topology area operation state.";
}
grouping multi-topology-config {
description
"OSPF multi-topology configuration state.";
}
grouping multi-topology-operation {
description
"OSPF multi-topology operation state.";
uses local-rib;
}
grouping multi-topology-interface-config {
description
"OSPF multi-topology configuration state.";
leaf cost {
type uint32;
description
"Interface cost for this topology.";
} }
} }
grouping instance-operation { grouping multi-topology-interface-operation {
description description
"OSPF Address Family operation state."; "OSPF multi-topology operation state.";
leaf router-id { }
type yang:dotted-quad;
grouping ospfv3-interface-config {
description
"OSPFv3 interface specific configuration state.";
leaf instance-id {
type uint8 {
range "0 .. 31";
}
description description
"Defined in RFC 2328. A 32-bit number "OSPFv3 instance ID.";
that uniquely identifies the router.";
} }
}
uses local-rib; grouping ospfv3-interface-operation {
description
"OSPFv3 interface specific operation state.";
container statistics { leaf interface-id {
description "Per instance statistics"; type uint16;
uses instance-stat; description
"OSPFv3 interface ID.";
} }
} }
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol" { + "rt:routing-protocol" {
when "rt:type = 'ospf:ospfv2' or rt:type = 'ospf:ospfv3'" { when "rt:type = 'ospf:ospfv2' or rt:type = 'ospf:ospfv3'" {
description description
"This augmentation is only valid for a routing protocol "This augmentation is only valid for a routing protocol
instance of OSPF (type 'ospfv2' or 'ospfv3')."; instance of OSPF (type 'ospfv2' or 'ospfv3').";
} }
description "OSPF augmentation."; description "OSPF augmentation.";
container ospf { container ospf {
description description
"OSPF."; "OSPF.";
container all-instances-inherit {
if-feature instance-inheritance;
description
"Inheritance support to all instances.";
container area {
description
"Area config to be inherited by all areas
in all instances.";
}
container interface {
description
"Interface config to be inherited by all
interfaces in all instances.";
}
}
leaf operation-mode { uses ospf-config;
type identityref {
base operation-mode;
}
default ospf:ships-in-the-night;
description
"OSPF operation mode.";
}
list instance { list instance {
key "af"; key "af";
description description
"An OSPF routing protocol instance."; "An OSPF routing protocol instance.";
leaf af { leaf af {
type identityref { type identityref {
base rt:address-family; base rt:address-family;
} }
description description
"Address-family of the instance."; "Address-family of the instance.";
} }
uses instance-config; uses instance-config;
container all-areas-inherit {
if-feature area-inheritance;
description
"Inheritance for all areas.";
container area {
description
"Area config to be inherited by all areas.";
}
container interface {
description
"Interface config to be inherited by all interfaces
in all areas.";
}
}
container areas { container areas {
description "All areas."; description "All areas.";
list area { list area {
key "area-id"; key "area-id";
description description
"List of OSPF areas"; "List of OSPF areas";
leaf area-id { leaf area-id {
type area-id-type; type area-id-type;
description description
"Area ID."; "Area ID.";
} }
uses area-config; uses area-config;
uses af-area-config {
when "../../operation-mode = "
+ "'ospf:ships-in-the-night'" {
description
"Ships in the night configuration.";
}
}
container all-interfaces-inherit {
if-feature interface-inheritance;
description
"Inheritance for all interfaces";
container interface {
description
"Interface config to be inherited by all
interfaces in the area.";
}
}
container virtual-links { container virtual-links {
description "All virtual links."; description "All virtual links.";
list virtual-link { list virtual-link {
when "../../area-id != '0' and " when "../../area-id != '0' and "
+ "../../area-type = 'ospf:normal'" { + "../../area-type = 'ospf:normal'" {
description description
"Transit area must be a non-backbone "Transit area must be a non-backbone
normal area."; normal area.";
} }
key "router-id"; key "router-id";
description description
"OSPF virtual link"; "OSPF virtual link";
leaf router-id { leaf router-id {
type yang:dotted-quad; type yang:dotted-quad;
description description
"Virtual Link remote endpoint router ID."; "Virtual Link remote endpoint router ID.";
} }
uses interface-common-config; uses virtual-link-config;
} }
} }
container sham-links { container sham-links {
description "All sham links."; description "All sham links.";
list sham-link { list sham-link {
key "local-id remote-id"; key "local-id remote-id";
description description
"OSPF sham link"; "OSPF sham link";
leaf local-id { leaf local-id {
type inet:ip-address; type inet:ip-address;
description description
"Address of the local Sham Link endpoint."; "Address of the local Sham Link endpoint.";
} }
leaf remote-id { leaf remote-id {
type inet:ip-address; type inet:ip-address;
description description
"Address of the remote Sham Link endpoint."; "Address of the remote Sham Link endpoint.";
} }
uses interface-common-config; uses sham-link-config;
} }
} }
container interfaces { container interfaces {
description "All interfaces."; description "All interfaces.";
list interface { list interface {
key "interface"; key "interface";
description description
"List of OSPF interfaces."; "List of OSPF interfaces.";
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
skipping to change at page 74, line 7 skipping to change at page 80, line 7
} }
uses interface-config; uses interface-config;
} // list of interfaces } // list of interfaces
} }
} // list of areas } // list of areas
} }
} // list of instance } // list of instance
} // container ospf } // container ospf
} }
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/"
augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol/ospf:ospf/ospf:instance" { + "rt:routing-protocol/ospf:ospf/ospf:instance" {
when "../../rt:type = 'ospf:ospfv2' or when "../../rt:type = 'ospf:ospfv2' or
../../rt:type = 'ospf:ospfv3'" { ../../rt:type = 'ospf:ospfv3'" {
description description
"This augmentation is only valid for OSPF "This augmentation is only valid for OSPF
(type 'ospfv2' or 'ospfv3')."; (type 'ospfv2' or 'ospfv3').";
} }
if-feature multi-topology; if-feature multi-topology;
description description
"OSPF multi-topology routing-protocol augmentation."; "OSPF multi-topology instance configuration
state augmentation.";
container topologies { container topologies {
description "All topologies."; description "All topologies.";
list topology { list topology {
// Topology must be in the same routing-instance // Topology must be in the same routing-instance
// and of same AF as the container. // and of same AF as the container.
key "name"; key "name";
description "OSPF topology."; description "OSPF topology.";
leaf name { leaf name {
type leafref { type leafref {
path "../../../../../../../rt:ribs/rt:rib/rt:name"; path "../../../../../../../rt:ribs/rt:rib/rt:name";
} }
description "RIB"; description "RIB";
} }
uses multi-topology-config;
container areas { container areas {
description "All areas in the topology."; description "All areas in the topology.";
list area { list area {
key "area-id"; key "area-id";
description description
"List of OSPF areas"; "List of OSPF areas";
leaf area-id { leaf area-id {
type area-id-type; type area-id-type;
description description
"Area ID."; "Area ID.";
} }
uses area-config; uses multi-topology-area-config;
uses af-area-config {
when "../../../../operation-mode = "
+ "'ospf:ships-in-the-night'" {
description
"Ships in the night configuration.";
}
}
} }
} }
} }
} }
} }
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol/ospf:ospf/ospf:instance/" + "rt:routing-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2'" { when "../../../../../../rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
if-feature ospf:multi-topology; if-feature ospf:multi-topology;
description "OSPF multi-topology interface augmentation."; description
"OSPF multi-topology interface configuration state
augmentation.";
container topologies { container topologies {
description "All topologies for the interface."; description "All topologies for the interface.";
list topology { list topology {
key "name"; key "name";
description "OSPF interface topology."; description "OSPF interface topology.";
leaf name { leaf name {
type leafref { type leafref {
path "../../../../../../../../../../../" path "../../../../../../../../../../../"
+ "rt:ribs/rt:rib/rt:name"; + "rt:ribs/rt:rib/rt:name";
} }
description description
"One of the topologies enabled on this interface."; "One of the topologies enabled on this interface.";
} }
leaf cost {
type uint32; uses multi-topology-interface-config;
description
"Interface cost for this topology.";
}
} }
} }
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv3'" {
description
"This augmentation is only valid for OSPFv3.";
}
description
"OSPFv3 interface specific configuration state
augmentation.";
uses ospfv3-interface-config;
}
augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol" { + "rt:routing-protocols/rt:routing-protocol" {
when "rt:type = 'ospf:ospfv2' or " when "rt:type = 'ospf:ospfv2' or "
+ "rt:type = 'ospf:ospfv3'" { + "rt:type = 'ospf:ospfv3'" {
description description
"This augmentation is only valid for a routing protocol "This augmentation is only valid for a routing protocol
instance of type 'ospfv2' or 'ospfv3'."; instance of type 'ospfv2' or 'ospfv3'.";
} }
description description
"OSPF operational state."; "OSPF operational state.";
container ospf { container ospf {
description "OSPF"; description "OSPF";
leaf operation-mode { uses ospf-config;
type identityref { uses ospf-operation;
base operation-mode;
}
description
"OSPF operation mode.";
}
list instance { list instance {
key "af"; key "af";
description description
"An OSPF routing protocol instance."; "An OSPF routing protocol instance.";
leaf af { leaf af {
type identityref { type identityref {
base rt:address-family; base rt:address-family;
} }
description description
"Address-family of the instance."; "Address-family of the instance.";
} }
uses instance-config;
uses instance-operation; uses instance-operation;
container areas { container areas {
description "All areas"; description "All areas";
list area { list area {
key "area-id"; key "area-id";
description "List of OSPF areas"; description "List of OSPF areas";
leaf area-id { leaf area-id {
type area-id-type; type area-id-type;
description "Area ID."; description "Area ID.";
} }
container statistics { uses area-config;
description "Per area statistics"; uses area-operation;
uses area-stat;
}
container virtual-links { container virtual-links {
description "All virtual links."; description "All virtual links.";
list virtual-link { list virtual-link {
description description
"OSPF virtual link"; "OSPF virtual link";
leaf router-id { leaf router-id {
type yang:dotted-quad; type yang:dotted-quad;
description description
"Virtual link router ID."; "Virtual link router ID.";
} }
uses interface-operation;
uses virtual-link-config;
uses virtual-link-operation;
} }
} }
container sham-links { container sham-links {
description "All sham links."; description "All sham links.";
list sham-link { list sham-link {
description description
"OSPF sham link"; "OSPF sham link";
leaf local-id { leaf local-id {
type inet:ip-address; type inet:ip-address;
description description
"Address of the local Sham Link endpoint."; "Address of the local Sham Link endpoint.";
} }
leaf remote-id { leaf remote-id {
type inet:ip-address; type inet:ip-address;
description description
"Address of the remote Sham Link endpoint."; "Address of the remote Sham Link endpoint.";
} }
uses interface-operation; uses sham-link-config;
uses sham-link-operation;
} }
} }
container interfaces { container interfaces {
description "All interfaces in the area."; description "All interfaces in the area.";
list interface { list interface {
key "interface"; key "interface";
description description
"List of OSPF interfaces."; "List of OSPF interfaces.";
leaf interface { leaf interface {
// Should it refer to config state leaf? // Should it refer to config state leaf?
type if:interface-ref; type if:interface-ref;
description "Interface."; description "Interface.";
} }
uses interface-config;
uses interface-operation; uses interface-operation;
container neighbors {
description "All neighbors for the interface.";
list neighbor {
key "neighbor-router-id";
description
"List of OSPF neighbors.";
leaf neighbor-router-id {
type yang:dotted-quad;
description
"Neighbor router ID.";
}
uses neighbor-operation;
} // list of OSPF neighbors
}
container database {
description "Link scope LSA database.";
list link-scope-lsa-type {
key "lsa-type";
description
"List OSPF link scope LSA databases.";
leaf lsa-type {
type uint16;
description "OSPF link scope LSA type.";
}
container link-scope-lsas {
description
"All link scope LSAs of this LSA type.";
list link-scope-lsa {
key "lsa-id adv-router";
description "List of OSPF link scope LSAs";
uses lsa-key;
uses lsa {
refine "version/ospfv2/ospfv2" {
must "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" {
description "OSPFv2 LSA.";
}
}
refine "version/ospfv3/ospfv3" {
must "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description "OSPFv3 LSA.";
}
}
}
}
}
} // list link-scope-lsas
}
} // list of OSPF interfaces } // list of OSPF interfaces
} }
container database {
description "Area scope LSA database.";
list area-scope-lsa-type {
key "lsa-type";
description "List OSPF area scope LSA databases.";
leaf lsa-type {
type uint16;
description "OSPF area scope LSA type.";
}
container area-scope-lsas {
description
"All area scope LSAs of an area scope
LSA type.";
list area-scope-lsa {
key "lsa-id adv-router";
description "List of OSPF area scope LSAs";
uses lsa-key;
uses lsa {
refine "version/ospfv2/ospfv2" {
must "../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" {
description "OSPFv2 LSA.";
}
}
refine "version/ospfv3/ospfv3" {
must "../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description "OSPFv3 LSA.";
}
}
}
}
}
} // list area-scope-lsas
}
} // list of OSPF areas } // list of OSPF areas
} }
container database {
description "AS scope LSA database.";
list as-scope-lsa-type {
key "lsa-type";
description "List OSPF AS scope LSA databases.";
leaf lsa-type {
type uint16;
description "OSPF AS scope LSA type.";
}
container as-scope-lsas {
description "All AS scope of LSA of this LSA type.";
list as-scope-lsa {
key "lsa-id adv-router";
description "List of OSPF area scope LSAs";
uses lsa-key;
uses lsa {
refine "version/ospfv2/ospfv2" {
must "../../../../../../../rt:type = "
+ "'ospf:ospfv2'" {
description "OSPFv2 LSA.";
}
}
refine "version/ospfv3/ospfv3" {
must "../../../../../../../rt:type = "
+ "'ospf:ospfv3'" {
description "OSPFv3 LSA.";
}
}
}
}
}
} // list as-scope-lsas
}
} // list of instances } // list of instances
} // container ospf } // container ospf
} }
augment "/rt:routing-state/"
augment "/rt:routing-state/rt:routing-instance/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance" { + "ospf:ospf/ospf:instance" {
when "../../rt:type = 'ospf:ospfv2'" { when "../../rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
if-feature multi-topology; if-feature multi-topology;
description description
"OSPF multi-topology routing-protocol augmentation."; "OSPF multi-topology instance operation state
augmentation.";
container topologies { container topologies {
description "All topologies."; description "All topologies.";
list topology { list topology {
// Topology must be in the same routing-instance // Topology must be in the same routing-instance
// and of same AF as the container. // and of same AF as the container.
key "name"; key "name";
description "OSPF topology."; description "OSPF topology.";
leaf name { leaf name {
type leafref { type leafref {
path "../../../../../../../" path "../../../../../../../"
+ "rt:ribs/rt:rib/rt:name"; + "rt:ribs/rt:rib/rt:name";
} }
description "RIB"; description "RIB";
} }
uses local-rib; uses multi-topology-config;
uses multi-topology-operation;
container areas { container areas {
description "All areas in the topology."; description "All areas in the topology.";
list area { list area {
key "area-id"; key "area-id";
description description
"List of OSPF areas"; "List of OSPF areas";
leaf area-id { leaf area-id {
type area-id-type; type area-id-type;
description description
"Area ID."; "Area ID.";
} }
uses multi-topology-area-config;
uses multi-topology-area-operation;
} }
} }
} }
} }
} }
augment "/rt:routing-state/"
augment "/rt:routing-state/rt:routing-instance/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface" { + "ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2'" { when "../../../../../../rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
if-feature ospf:multi-topology; if-feature ospf:multi-topology;
description "OSPF multi-topology interface augmentation."; description
"OSPF multi-topology interface operation state
augmentation.";
container topologies { container topologies {
description "All topologies."; description "All topologies.";
list topology { list topology {
key "name"; key "name";
description "OSPF interface topology."; description "OSPF interface topology.";
leaf name { leaf name {
type leafref { type leafref {
path "../../../../../../../../../../../" path "../../../../../../../../../../../"
+ "rt:ribs/rt:rib/rt:name"; + "rt:ribs/rt:rib/rt:name";
} }
description description
"One of the topologies enabled on this interface."; "One of the topologies enabled on this interface.";
} }
uses multi-topology-interface-config;
uses multi-topology-interface-operation;
} }
} }
} }
augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv3'" {
description
"This augmentation is only valid for OSPFv3.";
}
description
"OSPFv3 interface specific operation state
augmentation.";
uses ospfv3-interface-config;
uses ospfv3-interface-operation;
}
grouping route-content { grouping route-content {
description description
"This grouping defines OSPF-specific route attributes."; "This grouping defines OSPF-specific route attributes.";
leaf metric { leaf metric {
type uint32; type uint32;
description "OSPF route metric."; description "OSPF route metric.";
} }
leaf tag { leaf tag {
type uint32; type uint32;
default "0"; default "0";
description "OSPF route tag."; description "OSPF route tag.";
} }
leaf route-type { leaf route-type {
type route-type; type route-type;
description "OSPF route type"; description "OSPF route type";
} }
skipping to change at page 82, line 17 skipping to change at page 86, line 20
type uint32; type uint32;
default "0"; default "0";
description "OSPF route tag."; description "OSPF route tag.";
} }
leaf route-type { leaf route-type {
type route-type; type route-type;
description "OSPF route type"; description "OSPF route type";
} }
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:ribs/rt:rib/rt:routes/rt:route" { + "rt:ribs/rt:rib/rt:routes/rt:route" {
when "rt:source-protocol = 'ospf:ospfv2' or " when "rt:source-protocol = 'ospf:ospfv2' or "
+ "rt:source-protocol = 'ospf:ospfv3'" { + "rt:source-protocol = 'ospf:ospfv3'" {
description description
"This augmentation is only valid for a routes whose "This augmentation is only valid for a routes whose
source protocol is OSPF."; source protocol is OSPF.";
} }
description description
"OSPF-specific route attributes."; "OSPF-specific route attributes.";
uses route-content; uses route-content;
} }
grouping notification-instance-hdr { grouping notification-instance-hdr {
description description
"This group describes common instance specific "This group describes common instance specific
data for notifications."; data for notifications.";
/*
* TBD:
* Need to define a way to reference routing-instance.
*/
leaf routing-instance { leaf routing-instance {
type rt:routing-instance-ref; type string;
description description
"Describe the routing instance."; "Describe the routing instance.";
} }
leaf routing-protocol-type { leaf routing-protocol-type {
type leafref { type leafref {
path "/rt:routing/rt:routing-instance" path "/rt:routing/rt:routing-protocols/"
+ "[rt:name=current()/../routing-instance]/" + "rt:routing-protocol/rt:type";
+ "rt:routing-protocols/rt:routing-protocol/"
+ "rt:type";
} }
must ". = 'ospf:ospfv2' or . = 'ospf:ospfv3'" { must ". = 'ospf:ospfv2' or . = 'ospf:ospfv3'" {
description "Only applies to the OSPF routing protocol."; description "Only applies to the OSPF routing protocol.";
} }
description description
"OSPF routing protocol type (OSPFv2 or OSPFv3)."; "OSPF routing protocol type (OSPFv2 or OSPFv3).";
} }
leaf routing-protocol-name { leaf routing-protocol-name {
type leafref { type leafref {
path "/rt:routing/rt:routing-instance" path "/rt:routing/"
+ "[rt:name=current()/../routing-instance]/"
+ "rt:routing-protocols/rt:routing-protocol" + "rt:routing-protocols/rt:routing-protocol"
+ "[rt:type=current()/../routing-protocol-type]/" + "[rt:type=current()/../routing-protocol-type]/"
+ "rt:name"; + "rt:name";
} }
description description
"OSPF routing protocol instance name."; "OSPF routing protocol instance name.";
} }
leaf af { leaf af {
type leafref { type leafref {
path "/rt:routing/rt:routing-instance" path "/rt:routing/"
+ "[rt:name=current()/../routing-instance]/"
+ "rt:routing-protocols/rt:routing-protocol" + "rt:routing-protocols/rt:routing-protocol"
+ "[rt:name=current()/../routing-protocol-name]" + "[rt:name=current()/../routing-protocol-name]"
+ "[rt:type=current()/../routing-protocol-type]/" + "[rt:type=current()/../routing-protocol-type]/"
+ "ospf:ospf/ospf:instance/af"; + "ospf:ospf/ospf:instance/af";
} }
description description
"Address family of the OSPF instance."; "Address family of the OSPF instance.";
} }
} }
skipping to change at page 89, line 28 skipping to change at page 93, line 32
description description
"This notification is sent when the graceful restart "This notification is sent when the graceful restart
state for the router has changed."; state for the router has changed.";
} }
} }
<CODE ENDS> <CODE ENDS>
6. OSPF Segment Routing Yang Module 6. OSPF Segment Routing Yang Module
<CODE BEGINS> file "ietf-ospf-sr@2015-10-19.yang" <CODE BEGINS> file "ietf-ospf-sr@2016-03-20.yang"
module ietf-ospf-sr { module ietf-ospf-sr {
namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr";
prefix ospf-sr; prefix ospf-sr;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
skipping to change at page 90, line 48 skipping to change at page 95, line 4
common across all of the vendor implementations. It is common across all of the vendor implementations. It is
intended that the module will be extended by vendors to intended that the module will be extended by vendors to
define vendor-specific OSPF Segment Routing configuration define vendor-specific OSPF Segment Routing configuration
and operational parameters and policies. and operational parameters and policies.
Terms and Acronyms Terms and Acronyms
OSPF (ospf): Open Shortest Path First OSPF (ospf): Open Shortest Path First
IP (ip): Internet Protocol IP (ip): Internet Protocol
IPv4 (ipv4):Internet Protocol Version 4 IPv4 (ipv4):Internet Protocol Version 4
IPv6 (ipv6): Internet Protocol Version 6 IPv6 (ipv6): Internet Protocol Version 6
"; ";
revision 2016-03-20 {
description
"* Remove routing-instance.";
reference
"RFC XXXX: A YANG Data Model for OSPF Segment Routing.";
}
revision 2015-10-19 { revision 2015-10-19 {
description description
"* Add per-protocol SRGB support. "* Add per-protocol SRGB support.
* Editorial changes."; * Editorial changes.";
reference reference
"RFC XXXX: A YANG Data Model for OSPF Segment Routing."; "RFC XXXX: A YANG Data Model for OSPF Segment Routing.";
} }
revision 2015-09-02 { revision 2015-09-02 {
description description
skipping to change at page 91, line 38 skipping to change at page 95, line 47
} }
feature ti-lfa { feature ti-lfa {
description description
"Topology-Independent Loop-Free Alternate (TI-LFA) "Topology-Independent Loop-Free Alternate (TI-LFA)
computation using segment routing."; computation using segment routing.";
} }
/* Configuration */ /* Configuration */
augment "/rt:routing/rt:routing-instance/rt:routing-protocols" augment "/rt:routing/rt:routing-protocols"
+ "/rt:routing-protocol/ospf:ospf/ospf:instance" { + "/rt:routing-protocol/ospf:ospf/ospf:instance" {
when "../../rt:type = 'ospf:ospfv2' or " when "../../rt:type = 'ospf:ospfv2' or "
+ "../../rt:type = 'ospf:ospfv3'" { + "../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF routing protocol when used."; "This augments the OSPF routing protocol when used.";
} }
description description
"This augments the OSPF protocol configuration "This augments the OSPF protocol configuration
with segment routing."; with segment routing.";
uses sr:controlplane-cfg; uses sr:controlplane-cfg;
container protocol-srgb { container protocol-srgb {
if-feature sr:protocol-srgb; if-feature sr:protocol-srgb;
uses sr:srgb-cfg; uses sr:srgb-cfg;
description description
"Per-protocol SRGB."; "Per-protocol SRGB.";
} }
} }
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol/ospf:ospf/ospf:instance/" + "rt:routing-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2' or " when "../../../../../../rt:type = 'ospf:ospfv2' or "
+ "../../../../../../rt:type = 'ospf:ospfv3'" { + "../../../../../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF interface configuration "This augments the OSPF interface configuration
when used."; when used.";
} }
description description
"This augments the OSPF protocol interface "This augments the OSPF protocol interface
configuration with segment routing."; configuration with segment routing.";
uses sr:igp-interface-cfg; uses sr:igp-interface-cfg;
} }
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol/ospf:ospf/ospf:instance/" + "rt:routing-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/"
+ "ospf:fast-reroute" { + "ospf:fast-reroute" {
when "../../../../../../../rt:type = 'ospf:ospfv2' or " when "../../../../../../../rt:type = 'ospf:ospfv2' or "
+ "../../../../../../../rt:type = 'ospf:ospfv3'" { + "../../../../../../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF routing protocol when used."; "This augments the OSPF routing protocol when used.";
} }
description description
"This augments the OSPF protocol IP-FRR with TI-LFA."; "This augments the OSPF protocol IP-FRR with TI-LFA.";
skipping to change at page 92, line 42 skipping to change at page 97, line 4
} }
description description
"This augments the OSPF protocol IP-FRR with TI-LFA."; "This augments the OSPF protocol IP-FRR with TI-LFA.";
container ti-lfa { container ti-lfa {
if-feature ti-lfa; if-feature ti-lfa;
leaf enable { leaf enable {
type boolean; type boolean;
description description
"Enables TI-LFA computation."; "Enables TI-LFA computation.";
} }
description description
"Topology Independent Loop Free Alternate "Topology Independent Loop Free Alternate
(TI-LFA) support."; (TI-LFA) support.";
} }
} }
/* Operational states */ /* Operational states */
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance" { + "ospf:ospf/ospf:instance" {
when "../../rt:type = 'ospf:ospfv2' or " when "../../rt:type = 'ospf:ospfv2' or "
+ "../../rt:type = 'ospf:ospfv3'" { + "../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF routing protocol when used."; "This augments the OSPF routing protocol when used.";
} }
description description
"This augments the OSPF protocol operational state "This augments the OSPF protocol operational state
with segment routing."; with segment routing.";
uses sr:controlplane-cfg; uses sr:controlplane-cfg;
container protocol-srgb { container protocol-srgb {
if-feature sr:protocol-srgb; if-feature sr:protocol-srgb;
uses sr:srgb-cfg; uses sr:srgb-cfg;
description description
"Per-protocol SRGB."; "Per-protocol SRGB.";
} }
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface" { + "ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2' or " when "../../../../../../rt:type = 'ospf:ospfv2' or "
+ "../../../../../../rt:type = 'ospf:ospfv3'" { + "../../../../../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF routing protocol when used."; "This augments the OSPF routing protocol when used.";
} }
description description
"This augments the OSPF protocol interface "This augments the OSPF protocol interface
skipping to change at page 99, line 4 skipping to change at page 103, line 14
list sid-range-tlv { list sid-range-tlv {
description "SID range TLV."; description "SID range TLV.";
leaf range-size { leaf range-size {
type ospf:uint24; type ospf:uint24;
description "The SID range."; description "The SID range.";
} }
uses sid-sub-tlv; uses sid-sub-tlv;
} }
} }
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface/ospf:database/" + "ospf:interfaces/ospf:interface/ospf:database/"
+ "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
+ "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:ospfv2/ospf:body/ospf:opaque/"
+ "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" {
when "../../../../../../../../../../../../../../../../../" when "../../../../../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
description description
"SR specific TLVs for OSPFv2 extended prefix TLV "SR specific TLVs for OSPFv2 extended prefix TLV
in type 9 opaque LSA."; in type 9 opaque LSA.";
uses prefix-sid-sub-tlvs; uses prefix-sid-sub-tlvs;
uses sid-binding-sub-tlvs; uses sid-binding-sub-tlvs;
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/" + "ospf:ospf/ospf:instance/ospf:areas/"
+ "ospf:area/ospf:database/" + "ospf:area/ospf:database/"
+ "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
+ "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:ospfv2/ospf:body/ospf:opaque/"
+ "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" {
when "../../../../../../../../../../../../../../../" when "../../../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
skipping to change at page 99, line 42 skipping to change at page 104, line 4
when "../../../../../../../../../../../../../../../" when "../../../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
description description
"SR specific TLVs for OSPFv2 extended prefix TLV "SR specific TLVs for OSPFv2 extended prefix TLV
in type 10 opaque LSA."; in type 10 opaque LSA.";
uses prefix-sid-sub-tlvs; uses prefix-sid-sub-tlvs;
uses sid-binding-sub-tlvs; uses sid-binding-sub-tlvs;
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:database/" + "ospf:ospf/ospf:instance/ospf:database/"
+ "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
+ "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:ospfv2/ospf:body/ospf:opaque/"
+ "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" {
when "../../../../../../../../../../../../../" when "../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
description description
"SR specific TLVs for OSPFv2 extended prefix TLV "SR specific TLVs for OSPFv2 extended prefix TLV
in type 11 opaque LSA."; in type 11 opaque LSA.";
uses prefix-sid-sub-tlvs; uses prefix-sid-sub-tlvs;
uses sid-binding-sub-tlvs; uses sid-binding-sub-tlvs;
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/" + "ospf:ospf/ospf:instance/ospf:areas/"
+ "ospf:area/ospf:database/" + "ospf:area/ospf:database/"
+ "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
+ "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:ospfv2/ospf:body/ospf:opaque/"
+ "ospf:extended-link-tlvs/ospf:extended-link-tlv" { + "ospf:extended-link-tlvs/ospf:extended-link-tlv" {
when "../../../../../../../../../../../../../../../" when "../../../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
skipping to change at page 102, line 22 skipping to change at page 106, line 31
description "Neighbor router ID."; description "Neighbor router ID.";
} }
leaf sid { leaf sid {
type uint32; type uint32;
description "Segment Identifier (SID) index/label."; description "Segment Identifier (SID) index/label.";
} }
} }
} }
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface/ospf:database/" + "ospf:interfaces/ospf:interface/ospf:database/"
+ "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
+ "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque" { + "ospf:ospfv2/ospf:body/ospf:opaque" {
when "../../../../../../../../../../../../../../../" when "../../../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
description description
"SR specific TLVs for OSPFv2 type 9 opaque LSA."; "SR specific TLVs for OSPFv2 type 9 opaque LSA.";
uses extended-prefix-range-tlvs; uses extended-prefix-range-tlvs;
uses sr-algorithm-tlv; uses sr-algorithm-tlv;
uses sid-range-tlvs; uses sid-range-tlvs;
} }
augment "/rt:routing-state/"
augment "/rt:routing-state/rt:routing-instance/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/" + "ospf:ospf/ospf:instance/ospf:areas/"
+ "ospf:area/ospf:database/" + "ospf:area/ospf:database/"
+ "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
+ "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque" { + "ospf:ospfv2/ospf:body/ospf:opaque" {
when "../../../../../../../../../../../../../" when "../../../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
description description
"SR specific TLVs for OSPFv2 type 10 opaque LSA."; "SR specific TLVs for OSPFv2 type 10 opaque LSA.";
uses extended-prefix-range-tlvs; uses extended-prefix-range-tlvs;
uses sr-algorithm-tlv; uses sr-algorithm-tlv;
uses sid-range-tlvs; uses sid-range-tlvs;
} }
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:database/" + "ospf:ospf/ospf:instance/ospf:database/"
+ "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
+ "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/"
+ "ospf:ospfv2/ospf:body/ospf:opaque" { + "ospf:ospfv2/ospf:body/ospf:opaque" {
when "../../../../../../../../../../../" when "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv2'" { + "rt:type = 'ospf:ospfv2'" {
description description
"This augmentation is only valid for OSPFv2."; "This augmentation is only valid for OSPFv2.";
} }
skipping to change at page 103, line 38 skipping to change at page 107, line 48
uses extended-prefix-range-tlvs; uses extended-prefix-range-tlvs;
uses sr-algorithm-tlv; uses sr-algorithm-tlv;
uses sid-range-tlvs; uses sid-range-tlvs;
} }
} }
<CODE ENDS> <CODE ENDS>
7. OSPF BFD Yang Module 7. OSPF BFD Yang Module
<CODE BEGINS> file "ietf-ospf-bfd@2015-10-19.yang" <CODE BEGINS> file "ietf-ospf-bfd@2016-03-20.yang"
module ietf-ospf-bfd { module ietf-ospf-bfd {
namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-bfd"; namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-bfd";
prefix ospf-bfd; prefix ospf-bfd;
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
import ietf-bfd {
prefix "bfd";
}
import ietf-ospf { import ietf-ospf {
prefix "ospf"; prefix "ospf";
} }
organization organization
"Cisco Systems "Cisco Systems
170 West Tasman Drive 170 West Tasman Drive
San Jose, CA 95134-1706 San Jose, CA 95134-1706
USA"; USA";
contact contact
"WG Web: <http://tools.ietf.org/wg/ospf/> "WG Web: <http://tools.ietf.org/wg/ospf/>
skipping to change at page 105, line 4 skipping to change at page 109, line 12
define vendor-specific OSPF BFD configuration define vendor-specific OSPF BFD configuration
and operational parameters and policies. and operational parameters and policies.
Terms and Acronyms Terms and Acronyms
OSPF (ospf): Open Shortest Path First OSPF (ospf): Open Shortest Path First
IP (ip): Internet Protocol IP (ip): Internet Protocol
IPv4 (ipv4):Internet Protocol Version 4 IPv4 (ipv4):Internet Protocol Version 4
IPv6 (ipv6): Internet Protocol Version 6 IPv6 (ipv6): Internet Protocol Version 6
"; ";
revision 2015-10-19 { revision 2016-03-20 {
description description
"Initial revision."; "* Remove routing-instance.
* Remove use of bfd-protocol-parms from ietf-bfd module.
* Remove import of ietf-bfd module.";
reference reference
"RFC XXXX: A YANG Data Model for OSPF BFD."; "RFC XXXX: A YANG Data Model for OSPF BFD.";
} }
feature bfd-protocol-parms { revision 2015-10-19 {
description description
"OSPF BFD protocol specific parameters support."; "Initial revision.";
reference
"RFC XXXX: A YANG Data Model for OSPF BFD.";
} }
/* Configuration */ /* Configuration */
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" augment "/rt:routing/rt:routing-protocols/"
+ "rt:routing-protocol/ospf:ospf/ospf:instance/" + "rt:routing-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2' or " when "../../../../../../rt:type = 'ospf:ospfv2' or "
+ "../../../../../../rt:type = 'ospf:ospfv3'" { + "../../../../../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF routing protocol when used"; "This augments the OSPF routing protocol when used";
} }
description description
"This augments OSPF protocol configuration "This augments OSPF protocol configuration
with BFD."; with BFD.";
container bfd { container bfd {
description "BFD configuration."; description "BFD configuration.";
leaf enabled { leaf enabled {
type boolean; type boolean;
default false; default false;
description description
"True if BFD is enabled for the OSPF interface."; "True if BFD is enabled for the OSPF interface.";
}
uses bfd:bfd-grouping-base-cfg-parms {
if-feature bfd-protocol-parms;
} }
} }
} }
/* Operational states */ /* Operational states */
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/"
+ "rt:routing-protocols/rt:routing-protocol/" + "rt:routing-protocols/rt:routing-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface" { + "ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2' or " when "../../../../../../rt:type = 'ospf:ospfv2' or "
+ "../../../../../../rt:type = 'ospf:ospfv3'" { + "../../../../../../rt:type = 'ospf:ospfv3'" {
description description
"This augments the OSPF routing protocol when used"; "This augments the OSPF routing protocol when used";
} }
description description
"This augments OSPF protocol operation "This augments OSPF protocol operation
with BFD."; with BFD.";
container bfd { container bfd {
description "BFD operation."; description "BFD operation.";
leaf enabled { leaf enabled {
type boolean; type boolean;
description description
"True if BFD is enabled for the OSPF interface."; "True if BFD is enabled for the OSPF interface.";
} }
uses bfd:bfd-grouping-base-cfg-parms {
if-feature bfd-protocol-parms;
}
} }
} }
} }
<CODE ENDS> <CODE ENDS>
8. Security Considerations 8. Security Considerations
The data model defined does not create any security implications. The data model defined does not create any security implications.
This draft does not change any underlying security issues inherent in This draft does not change any underlying security issues inherent in
[I-D.ietf-netmod-routing-cfg]. [I-D.ietf-netmod-routing-cfg].
9. Acknowledgements 9. Acknowledgements
The authors wish to thank Acee Lindem, Yi Yang, Alexander Clemm, The authors wish to thank Acee Lindem, Yi Yang, Alexander Clemm,
Gaurav Gupta, Ing-Wher Chen, Ladislav Lhotka, Stephane Litkowski, Gaurav Gupta, Ing-Wher Chen, Ladislav Lhotka, Stephane Litkowski,
Greg Hankins and Manish Gupta for their thorough reviews and helpful Greg Hankins, Manish Gupta and Alan Davey for their thorough reviews
comments. and helpful comments.
This document was produced using Marshall Rose's xml2rfc tool. This document was produced using Marshall Rose's xml2rfc tool.
10. References 10. References
10.1. Normative References 10.1. Normative References
[RFC1793] Moy, J., "Extending OSPF to Support Demand Circuits", [RFC1793] Moy, J., "Extending OSPF to Support Demand Circuits",
RFC 1793, DOI 10.17487/RFC1793, April 1995, RFC 1793, DOI 10.17487/RFC1793, April 1995,
<http://www.rfc-editor.org/info/rfc1793>. <http://www.rfc-editor.org/info/rfc1793>.
 End of changes. 154 change blocks. 
941 lines changed or deleted 1148 lines changed or added

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