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/ |