From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc9129.txt | 6640 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6640 insertions(+) create mode 100644 doc/rfc/rfc9129.txt (limited to 'doc/rfc/rfc9129.txt') diff --git a/doc/rfc/rfc9129.txt b/doc/rfc/rfc9129.txt new file mode 100644 index 0000000..436d79b --- /dev/null +++ b/doc/rfc/rfc9129.txt @@ -0,0 +1,6640 @@ + + + + +Internet Engineering Task Force (IETF) D. Yeung +Request for Comments: 9129 Arrcus, Inc. +Category: Standards Track Y. Qu +ISSN: 2070-1721 Futurewei + J. Zhang + Juniper Networks + I. Chen + The MITRE Corporation + A. Lindem + Cisco Systems + October 2022 + + + YANG Data Model for the OSPF Protocol + +Abstract + + This document defines a YANG data model that can be used to configure + and manage OSPF. The model is based on YANG 1.1 as defined in RFC + 7950 and conforms to the Network Management Datastore Architecture + (NMDA) as described in RFC 8342. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc9129. + +Copyright Notice + + Copyright (c) 2022 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Revised BSD License text as described in Section 4.e of the + Trust Legal Provisions and are provided without warranty as described + in the Revised BSD License. + +Table of Contents + + 1. Introduction + 1.1. Requirements Language + 1.2. Tree Diagrams + 2. Design of Data Model + 2.1. OSPF Operational State + 2.2. Overview + 2.3. OSPFv2 and OSPFv3 + 2.4. Optional Features + 2.5. OSPF Router Configuration / Operational State + 2.6. OSPF Area Configuration / Operational State + 2.7. OSPF Interface Configuration / Operational State + 2.8. OSPF Notifications + 2.9. OSPF RPC Operations + 3. OSPF YANG Module + 4. Security Considerations + 5. IANA Considerations + 6. References + 6.1. Normative References + 6.2. Informative References + Acknowledgments + Contributors + Authors' Addresses + +1. Introduction + + YANG [RFC7950] is a data definition language used to define the + contents of a conceptual datastore that allows networked devices to + be managed using the Network Configuration Protocol (NETCONF) + [RFC6241], RESTCONF [RFC8040], and other network management + protocols. Furthermore, YANG data models can be used as the basis + for implementation of other interfaces, such as Command-Line + Interfaces (CLIs) and programmatic APIs. + + This document defines a YANG data model that can be used to configure + and manage OSPF. It is an augmentation to the core routing data + model, which is defined in [RFC8349] and provides the basis for the + development of data models for routing protocols. This document + fully conforms to the Network Management Datastore Architecture + (NMDA) [RFC8342]. The interface data model is defined in [RFC8343] + and is used for referencing interfaces from the routing protocol. + The data model for key chains [RFC8177] is used for OSPF + authentication and provides both a reference to configured key chains + and an enumeration of cryptographic algorithms. + + Both OSPFv2 [RFC2328] and OSPFv3 [RFC5340] are supported. In + addition to the core OSPF protocol, features described in other OSPF + RFCs are also supported. These include demand circuits [RFC1793], + Traffic Engineering (TE) [RFC3630], multiple address families + [RFC5838], graceful restart [RFC3623] [RFC5187], the Not-So-Stubby + Area (NSSA) option [RFC3101], and OSPFv2 or OSPFv3 as a Provider Edge + to Customer Edge (PE-CE) protocol [RFC4577] [RFC6565]. These non- + core features are optional in the OSPF data model. + +1.1. Requirements Language + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +1.2. Tree Diagrams + + This document uses the graphical representation of data models per + [RFC8340]. + +2. Design of Data Model + + Although the basis of OSPF configuration elements like routers, + areas, and interfaces remains the same, the detailed configuration + model varies among router vendors. Differences are observed in + various aspects, including in terms of how the protocol instance is + tied to the routing domain and how multiple protocol instances are + instantiated. + + The goal of this document is to define a data model that provides a + user interface that is common to both OSPFv2 and OSPFv3. There is + very little information that is designated as "mandatory", providing + freedom for vendors to adapt this data model to their respective + product implementations. + +2.1. OSPF Operational State + + The OSPF operational state is included in the same tree as OSPF + configuration, consistent with the Network Management Datastore + Architecture [RFC8342]. Consequently, only the "routing" container + in the "ietf-routing" model [RFC8349] is augmented; the "routing- + state" container is not augmented. + +2.2. Overview + + The OSPF YANG module defined in this document has all the common + building blocks for the OSPF protocol. + + The OSPF YANG module augments the "/routing/control-plane-protocols/ + control-plane-protocol" path defined in the "ietf-routing" module. + The "ietf-ospf" model defines a single instance of OSPF that may be + instantiated as an OSPFv2 or OSPFv3 instance. Multiple instances are + instantiated as multiple control-plane protocol instances. + + module: ietf-ospf + augment /rt:routing/rt:control-plane-protocols/ + rt:control-plane-protocol: + +--rw ospf + . + . + +--rw address-family? iana-rt-types:address-family + . + . + +--rw areas + | +--rw area* [area-id] + | +--rw area-id area-id-type + | . + | . + | +--rw virtual-links + | | +--rw virtual-link* [transit-area-id router-id] + | | . + | | . + | +--rw sham-links {pe-ce-protocol}? + | | +--rw sham-link* [local-id remote-id] + | | . + | | . + | +--rw interfaces + | +--rw interface* [name] + | . + | . + +--rw topologies {multi-topology}? + +--rw topology* [name] + . + . + + The "ospf" container includes one OSPF protocol instance. The + instance includes OSPF router-level configuration and operational + state. Each OSPF instance maps to a control-plane protocol instance + as defined in [RFC8349]. + + The "areas" and "area/interfaces" containers define the OSPF + configuration and operational state for OSPF areas and interfaces, + respectively. + + The "topologies" container defines the OSPF configuration and + operational state for OSPF topologies when the "multi-topology" + feature is supported. + +2.3. OSPFv2 and OSPFv3 + + The data model defined herein supports both OSPFv2 and OSPFv3. + + The "version" field is used to indicate the OSPF version and is + mandatory. Based on the configured version, the data model varies to + accommodate the differences between OSPFv2 and OSPFv3. + +2.4. Optional Features + + Optional features go beyond the basic OSPF configuration. It is the + responsibility of each vendor to decide whether to support a given + feature on a particular device. + + This model defines the following optional features: + + multi-topology: Support for Multi-Topology (MT) routing [RFC4915]. + + multi-area-adj: Support for OSPF multi-area adjacencies [RFC5185]. + + explicit-router-id: Support for the specification of an explicit + per-instance Router ID. + + demand-circuit: Support for OSPF demand circuits [RFC1793]. + + mtu-ignore: Support for the disabling of OSPF Database Description + packet MTU mismatch checking as specified in Section 10.6 of + [RFC2328]. + + lls: Support for OSPF Link-Local Signaling (LLS) [RFC5613]. + + prefix-suppression: Support for OSPF prefix advertisement + suppression [RFC6860]. + + ttl-security: Support for OSPF Time to Live (TTL) security checking + [RFC5082]. + + nsr: Support for OSPF Non-Stop Routing (NSR). The OSPF NSR feature + allows a router with redundant control-plane capability (e.g., + dual Route Processor (RP) cards) to maintain its state and + adjacencies during planned and unplanned control-plane processing + restarts. It differs from graceful restart or Non-Stop Forwarding + (NSF) in that no protocol signaling or assistance from adjacent + OSPF neighbors is required to recover control-plane state. + + graceful-restart: Support for graceful OSPF restart [RFC3623] + [RFC5187]. + + auto-cost: Support for OSPF interface cost calculations according to + reference bandwidth [RFC2328]. + + max-ecmp: Support for configuration of the maximum number of Equal- + Cost Multi-Path (ECMP) paths. + + max-lsa: Support for configuration of the maximum number of Link + State Advertisements (LSAs) the OSPF instance will accept + [RFC1765]. + + te-rid: Support for configuration of the Traffic Engineering (TE) + Router ID, i.e., the Router Address TLV as described in + Section 2.4.1 of [RFC3630] or the Router IPv6 Address TLV as + described in Section 3 of [RFC5329]. + + ldp-igp-sync: Support for LDP IGP synchronization [RFC5443]. + + ospfv2-authentication-trailer: Support for the OSPFv2 authentication + trailer [RFC5709] [RFC7474]. + + ospfv3-authentication-ipsec: Support for IPsec for OSPFv3 + authentication [RFC4552]. + + ospfv3-authentication-trailer: Support for the OSPFv3 authentication + trailer [RFC7166]. + + fast-reroute: Support for IP Fast Reroute (IP-FRR) [RFC5714]. + + node-flag: Support for node flags for OSPF prefixes [RFC7684]. + + node-tag: Support for node administrative tags for OSPF instances + [RFC7777]. + + lfa: Support for Loop-Free Alternates (LFAs) [RFC5286]. + + remote-lfa: Support for Remote LFAs (R-LFAs) [RFC7490]. + + stub-router: Support for OSPF stub router advertisements [RFC6987]. + + pe-ce-protocol: Support for OSPF as a PE-CE protocol [RFC4577] + [RFC6565]. + + ietf-spf-delay: Support for the IETF Shortest Path First (SPF) delay + algorithm [RFC8405]. + + bfd: Support for Bidirectional Forwarding Detection (BFD) to detect + OSPF neighbor reachability [RFC5880] [RFC5881]. + + hybrid-interface: Support for OSPF hybrid broadcast and point-to- + multipoint interfaces [RFC6845]. + + It is expected that vendors will support additional features through + vendor-specific augmentations. + +2.5. OSPF Router Configuration / Operational State + + The "ospf" container is the top-level container in this data model. + It represents an OSPF protocol instance and contains the router-level + configuration and operational state. The operational state includes + instance statistics, IETF SPF delay statistics, the AS-Scope Link + State Database (LSDB), the local RIB, the SPF log, and the LSA log. + ("AS" stands for "Autonomous System".) + + module: ietf-ospf + augment /rt:routing/rt:control-plane-protocols/ + rt:control-plane-protocol: + +--rw ospf + . + . + +--rw address-family? iana-rt-types:address-family + +--rw enabled? boolean + +--rw explicit-router-id? rt-types:router-id + | {explicit-router-id}? + +--rw preference + | +--rw (scope)? + | +--:(single-value) + | | +--rw all? uint8 + | +--:(multi-values) + | +--rw (granularity)? + | | +--:(detail) + | | | +--rw intra-area? uint8 + | | | +--rw inter-area? uint8 + | | +--:(coarse) + | | +--rw internal? uint8 + | +--rw external? uint8 + +--rw nsr {nsr}? + | +--rw enabled? boolean + +--rw graceful-restart {graceful-restart}? + | +--rw enabled? boolean + | +--rw helper-enabled? boolean + | +--rw restart-interval? uint16 + | +--rw helper-strict-lsa-checking? boolean + +--rw auto-cost {auto-cost}? + | +--rw enabled? boolean + | +--rw reference-bandwidth? uint32 + +--rw spf-control + | +--rw paths? uint16 {max-ecmp}? + | +--rw ietf-spf-delay {ietf-spf-delay}? + | +--rw initial-delay? uint32 + | +--rw short-delay? uint32 + | +--rw long-delay? uint32 + | +--rw hold-down? uint32 + | +--rw time-to-learn? uint32 + | +--ro current-state? enumeration + | +--ro remaining-time-to-learn? + | rt-types:timer-value-milliseconds + | +--ro remaining-hold-down? + | rt-types:timer-value-milliseconds + | +--ro last-event-received? yang:timestamp + | +--ro next-spf-time? yang:timestamp + | +--ro last-spf-time? yang:timestamp + +--rw database-control + | +--rw max-lsa? uint32 {max-lsa}? + +--rw stub-router {stub-router}? + | +--rw (trigger)? + | +--:(always) + | +--rw always! + +--rw mpls + | +--rw te-rid {te-rid}? + | | +--rw ipv4-router-id? inet:ipv4-address + | | +--rw ipv6-router-id? inet:ipv6-address + | +--rw ldp + | +--rw igp-sync? boolean {ldp-igp-sync}? + +--rw fast-reroute {fast-reroute}? + | +--rw lfa {lfa}? + +--rw node-tags {node-tag}? + | +--rw node-tag* [tag] + | +--rw tag uint32 + +--ro router-id? rt-types:router-id + +--ro local-rib + | +--ro route* [prefix] + | +--ro prefix inet:ip-prefix + | +--ro next-hops + | | +--ro next-hop* [] + | | +--ro outgoing-interface? if:interface-ref + | | +--ro next-hop inet:ip-address + | +--ro metric? uint32 + | +--ro route-type? route-type + | +--ro route-tag? uint32 + +--ro statistics + | +--ro discontinuity-time yang:date-and-time + | +--ro originate-new-lsa-count? yang:counter32 + | +--ro rx-new-lsas-count? yang:counter32 + | +--ro as-scope-lsa-count? yang:gauge32 + | +--ro as-scope-lsa-chksum-sum? uint32 + | +--ro database + | | +--ro as-scope-lsa-type* + | | +--ro lsa-type? uint16 + | | +--ro lsa-count? yang:gauge32 + | | +--ro lsa-cksum-sum? uint32 + | +--ro protected-routes {fast-reroute}? + | | +--ro address-family-stats* + | | [address-family prefix alternate] + | | +--ro address-family + | | iana-rt-types:address-family + | | +--ro prefix inet:ip-prefix + | | +--ro alternate inet:ip-address + | | +--ro alternate-type? enumeration + | | +--ro best? boolean + | | +--ro non-best-reason? string + | | +--ro protection-available? bits + | | +--ro alternate-metric-1? uint32 + | | +--ro alternate-metric-2? uint32 + | | +--ro alternate-metric-3? uint32 + | +--ro unprotected-routes {fast-reroute}? + | | +--ro address-family-stats* [address-family prefix] + | | +--ro address-family iana-rt-types:address-family + | | +--ro prefix inet:ip-prefix + | +--ro protection-statistics* [frr-protection-method] + | +--ro frr-protection-method string + | +--ro address-family-stats* [address-family] + | +--ro address-family + | iana-rt-types:address-family + | +--ro total-routes? uint32 + | +--ro unprotected-routes? uint32 + | +--ro protected-routes? uint32 + | +--ro linkprotected-routes? uint32 + | +--ro nodeprotected-routes? uint32 + +--ro database + | +--ro as-scope-lsa-type* [lsa-type] + | +--ro as-scope-lsas + | +--ro as-scope-lsa* [lsa-id adv-router] + | +--ro lsa-id union + | +--ro adv-router inet:ipv4-address + | +--ro decoded-completed? boolean + | +--ro raw-data? yang:hex-string + | +--ro (version)? + | +--:(ospfv2) + | | +--ro ospfv2 + . . + . . + | +--:(ospfv3) + | +--ro ospfv3 + . + . + +--ro spf-log + | +--ro event* [id] + | +--ro id uint32 + | +--ro spf-type? enumeration + | +--ro schedule-timestamp? yang:timestamp + | +--ro start-timestamp? yang:timestamp + | +--ro end-timestamp? yang:timestamp + | +--ro trigger-lsa* + | +--ro area-id? area-id-type + | +--ro type? uint16 + | +--ro lsa-id? union + | +--ro adv-router? rt-types:router-id + | +--ro seq-num? uint32 + +--ro lsa-log + | +--ro event* [id] + | +--ro id uint32 + | +--ro lsa + | | +--ro area-id? area-id-type + | | +--ro type? uint16 + | | +--ro lsa-id? union + | | +--ro adv-router? rt-types:router-id + | | +--ro seq-num? uint32 + | +--ro received-timestamp? yang:timestamp + | +--ro reason? identityref + . + . + +2.6. OSPF Area Configuration / Operational State + + The "area" container contains OSPF area configuration and the list of + interface containers representing all the OSPF interfaces in the + area. The area operational state includes area statistics and the + area LSDB. + + module: ietf-ospf + augment /rt:routing/rt:control-plane-protocols/ + rt:control-plane-protocol: + +--rw ospf + . + . + +--rw areas + | +--rw area* [area-id] + | +--rw area-id area-id-type + | +--rw area-type? identityref + | +--rw summary? boolean + | +--rw default-cost? ospf-metric + | +--rw ranges + | | +--rw range* [prefix] + | | +--rw prefix inet:ip-prefix + | | +--rw advertise? boolean + | | +--rw cost? ospf-metric + | +--rw topologies {ospf:multi-topology}? + | | +--rw topology* [name] + | | +--rw name -> ../../../../../../../../ + | | ../../../rt:ribs/rib/name + | | +--rw summary? boolean + | | +--rw default-cost? ospf-metric + | | +--rw ranges + | | +--rw range* [prefix] + | | +--rw prefix inet:ip-prefix + | | +--rw advertise? boolean + | | +--rw cost? ospf-metric + | +--ro statistics + | | +--ro discontinuity-time yang:date-and-time + | | +--ro spf-runs-count? yang:counter32 + | | +--ro abr-count? yang:gauge32 + | | +--ro asbr-count? yang:gauge32 + | | +--ro ar-nssa-translator-event-count? + | | yang:counter32 + | | +--ro area-scope-lsa-count? yang:gauge32 + | | +--ro area-scope-lsa-cksum-sum? uint32 + | | +--ro database + | | +--ro area-scope-lsa-type* + | | +--ro lsa-type? uint16 + | | +--ro lsa-count? yang:gauge32 + | | +--ro lsa-cksum-sum? uint32 + | +--ro database + | | +--ro area-scope-lsa-type* [lsa-type] + | | +--ro lsa-type uint16 + | | +--ro area-scope-lsas + | | +--ro area-scope-lsa* [lsa-id adv-router] + | | +--ro lsa-id union + . . . + . . . + | | +--ro (version)? + | | +--:(ospfv2) + | | | +--ro ospfv2 + | | | +--ro header + . . . . + . . . . + | | | +--ro body + | | | +--ro router + . . . . + . . . . + | | | +--ro network + . . . . + . . . . + | | | +--ro summary + . . . . + . . . . + | | | +--ro external + . . . . + . . . . + | | | +--ro opaque + . . . . + . . . . + | | +--:(ospfv3) + | | +--ro ospfv3 + | | +--ro header + . . . + . . . + | | +--ro body + | | +--ro router + . . . + . . . + | | +--ro network + . . . + . . . + | | +--ro inter-area-prefix + . . . + . . . + | | +--ro inter-area-router + . . . + . . . + | | +--ro as-external + . . . + . . . + | | +--ro nssa + . . . + . . . + | | +--ro link + . . . + . . . + | | +--ro intra-area-prefix + . . . + . . . + | | +--ro router-information + . . . + . . . + | +--rw virtual-links + | | +--rw virtual-link* [transit-area-id router-id] + | | +--rw transit-area-id -> ../../../../ + | | area/area-id + | | +--rw router-id rt-types:router-id + | | +--rw hello-interval? uint16 + | | +--rw dead-interval? uint32 + | | +--rw retransmit-interval? uint16 + | | +--rw transmit-delay? uint16 + | | +--rw lls? boolean {lls}? + | | +--rw ttl-security {ttl-security}? + | | | +--rw enabled? boolean + | | | +--rw hops? uint8 + | | +--rw enabled? boolean + | | +--rw authentication + | | | +--rw (auth-type-selection)? + | | | +--:(ospfv2-auth) + | | | | +--rw ospfv2-auth-trailer-rfc? + | | | | | ospfv2-auth-trailer-rfc-version + | | | | | {ospfv2-authentication-trailer}? + | | | | +--rw (ospfv2-auth-specification)? + | | | | +--:(auth-key-chain) {key-chain}? + | | | | | +--rw ospfv2-key-chain? + | | | | | key-chain:key-chain-ref + | | | | +--:(auth-key-explicit) + | | | | +--rw ospfv2-key-id? uint32 + | | | | +--rw ospfv2-key? string + | | | | +--rw ospfv2-crypto-algorithm? + | | | | identityref + | | | +--:(ospfv3-auth-ipsec) + | | | | {ospfv3-authentication-ipsec}? + | | | | +--rw sa? string + | | | +--:(ospfv3-auth-trailer) + | | | | {ospfv3-authentication-trailer}? + | | | +--rw (ospfv3-auth-specification)? + | | | +--:(auth-key-chain) {key-chain}? + | | | | +--rw ospfv3-key-chain? + | | | | key-chain:key-chain-ref + | | | +--:(auth-key-explicit) + | | | +--rw ospfv3-sa-id? uint16 + | | | +--rw ospfv3-key? string + | | | +--rw ospfv3-crypto-algorithm? + | | | identityref + | | +--ro cost? ospf-link-metric + | | +--ro state? if-state-type + | | +--ro hello-timer? rt-types: + | | | rtimer-value-seconds16 + | | +--ro wait-timer? rt-types: + | | | rtimer-value-seconds16 + | | +--ro dr-router-id? rt-types:router-id + | | +--ro dr-ip-addr? inet:ip-address + | | +--ro bdr-router-id? rt-types:router-id + | | +--ro bdr-ip-addr? inet:ip-address + | | +--ro statistics + | | | +--ro discontinuity-time yang:date-and-time + | | | +--ro if-event-count? yang:counter32 + | | | +--ro link-scope-lsa-count? yang:gauge32 + | | | +--ro link-scope-lsa-cksum-sum? + | | | uint32 + | | | +--ro database + | | | +--ro link-scope-lsa-type* + | | | +--ro lsa-type? uint16 + | | | +--ro lsa-count? yang:gauge32 + | | | +--ro lsa-cksum-sum? int32 + | | +--ro neighbors + | | | +--ro neighbor* [neighbor-router-id] + | | | +--ro neighbor-router-id + | | | rt-types:router-id + | | | +--ro address? inet:ip-address + | | | +--ro dr-router-id? rt-types:router-id + | | | +--ro dr-ip-addr? inet:ip-address + | | | +--ro bdr-router-id? rt-types:router-id + | | | +--ro bdr-ip-addr? inet:ip-address + | | | +--ro state? nbr-state-type + | | | +--ro dead-timer? rt-types: + | | | | rtimer-value-seconds16 + | | | +--ro statistics + | | | +--ro discontinuity-time + | | | yang:date-and-time + | | | +--ro nbr-event-count? + | | | yang:counter32 + | | | +--ro nbr-retrans-qlen? + | | | yang:gauge32 + | | +--ro database + | | +--ro link-scope-lsa-type* [lsa-type] + | | +--ro lsa-type uint16 + | | +--ro link-scope-lsas + . . + . . + | +--rw sham-links {pe-ce-protocol}? + | | +--rw sham-link* [local-id remote-id] + | | +--rw local-id inet:ip-address + | | +--rw remote-id inet:ip-address + | | +--rw hello-interval? uint16 + | | +--rw dead-interval? uint32 + | | +--rw retransmit-interval? uint16 + | | +--rw transmit-delay? uint16 + | | +--rw lls? boolean {lls}? + | | +--rw ttl-security {ttl-security}? + | | | +--rw enabled? boolean + | | | +--rw hops? uint8 + | | +--rw enabled? boolean + | | +--rw authentication + | | | +--rw (auth-type-selection)? + | | | +--:(ospfv2-auth) + | | | | +--rw ospfv2-auth-trailer-rfc? + | | | | | ospfv2-auth-trailer-rfc-version + | | | | | {ospfv2-authentication-trailer}? + | | | | +--rw (ospfv2-auth-specification)? + | | | | +--:(auth-key-chain) {key-chain}? + | | | | | +--rw ospfv2-key-chain? + | | | | | key-chain:key-chain-ref + | | | | +--:(auth-key-explicit) + | | | | +--rw ospfv2-key-id? uint32 + | | | | +--rw ospfv2-key? string + | | | | +--rw ospfv2-crypto-algorithm? + | | | | identityref + | | | +--:(ospfv3-auth-ipsec) + | | | | {ospfv3-authentication-ipsec}? + | | | | +--rw sa? string + | | | +--:(ospfv3-auth-trailer) + | | | | {ospfv3-authentication-trailer}? + | | | +--rw (ospfv3-auth-specification)? + | | | +--:(auth-key-chain) {key-chain}? + | | | | +--rw ospfv3-key-chain? + | | | | key-chain:key-chain-ref + | | | +--:(auth-key-explicit) + | | | +--rw ospfv3-sa-id? uint16 + | | | +--rw ospfv3-key? string + | | | +--rw ospfv3-crypto-algorithm? + | | | identityref + | | +--rw cost? ospf-link-metric + | | +--rw mtu-ignore? boolean + | | {mtu-ignore}? + | | +--rw prefix-suppression? boolean + | | {prefix-suppression}? + | | +--ro state? if-state-type + | | +--ro hello-timer? rt-types: + | | | rtimer-value-seconds16 + | | +--ro wait-timer? rt-types: + | | | rtimer-value-seconds16 + | | +--ro dr-router-id? rt-types:router-id + | | +--ro dr-ip-addr? inet:ip-address + | | +--ro bdr-router-id? rt-types:router-id + | | +--ro bdr-ip-addr? inet:ip-address + | | +--ro statistics + | | | +--ro discontinuity-time yang:date-and-time + | | | +--ro if-event-count? yang:counter32 + | | | +--ro link-scope-lsa-count? yang:gauge32 + | | | +--ro link-scope-lsa-cksum-sum? + | | | uint32 + | | | +--ro database + | | | +--ro link-scope-lsa-type* + | | | +--ro lsa-type? uint16 + | | | +--ro lsa-count? yang:gauge32 + | | | +--ro lsa-cksum-sum? uint32 + | | +--ro neighbors + | | | +--ro neighbor* [neighbor-router-id] + | | | +--ro neighbor-router-id + | | | rt-types:router-id + | | | +--ro address? inet:ip-address + | | | +--ro dr-router-id? rt-types:router-id + | | | +--ro dr-ip-addr? inet:ip-address + | | | +--ro bdr-router-id? rt-types:router-id + | | | +--ro bdr-ip-addr? inet:ip-address + | | | +--ro state? nbr-state-type + | | | +--ro cost? ospf-link-metric + | | | +--ro dead-timer? rt-types: + | | | | rtimer-value-seconds16 + | | | +--ro statistics + | | | +--ro discontinuity-time? + | | | yang:date-and-time + | | | +--ro nbr-event-count? + | | | yang:counter32 + | | | +--ro nbr-retrans-qlen? + | | | yang:gauge32 + | | +--ro database + | | +--ro link-scope-lsa-type* [lsa-type] + | | +--ro lsa-type uint16 + | | +--ro link-scope-lsas + . . + . . + +2.7. OSPF Interface Configuration / Operational State + + The "interface" container contains OSPF interface configuration and + operational state. The interface operational state includes the + interface statistics, the list of neighbors, and the link-local LSDB. + + module: ietf-ospf + augment /rt:routing/rt:control-plane-protocols/ + rt:control-plane-protocol: + +--rw ospf + . + . + +--rw areas + | +--rw area* [area-id] + | . + | . + | +--rw interfaces + | +--rw interface* [name] + | +--rw name if:interface-ref + | +--rw interface-type? enumeration + | +--rw passive? boolean + | +--rw demand-circuit? boolean + | {demand-circuit}? + | +--rw priority? uint8 + | +--rw multi-areas {multi-area-adj}? + | | +--rw multi-area* [multi-area-id] + | | +--rw multi-area-id area-id-type + | | +--rw cost? ospf-link-metric + | +--rw static-neighbors + | | +--rw neighbor* [identifier] + | | +--rw identifier inet:ip-address + | | +--rw cost? ospf-link-metric + | | +--rw poll-interval? uint16 + | | +--rw priority? uint8 + | +--rw node-flag? boolean + | {node-flag}? + | +--rw bfd {bfd}? + | | +--rw enabled? boolean + | | +--rw local-multiplier? multiplier + | | | {client-base-cfg-parms}? + | | +--rw (interval-config-type)? + | | | {client-base-cfg-parms}? + | | +--:(tx-rx-intervals) + | | | +--rw desired-min-tx-interval? uint32 + | | | +--rw required-min-rx-interval? uint32 + | | +--:(single-interval) + | | | {single-minimum-interval}? + | | +--rw min-interval? uint32 + | +--rw fast-reroute {fast-reroute}? + | | +--rw lfa {lfa}? + | | +--rw candidate-enabled? boolean + | | +--rw enabled? boolean + | | +--rw remote-lfa {remote-lfa}? + | | +--rw enabled? boolean + | +--rw hello-interval? uint16 + | +--rw dead-interval? uint32 + | +--rw retransmit-interval? uint16 + | +--rw transmit-delay? uint16 + | +--rw lls? boolean {lls}? + | +--rw ttl-security {ttl-security}? + | | +--rw enabled? boolean + | | +--rw hops? uint8 + | +--rw enabled? boolean + | +--rw authentication + | | +--rw (auth-type-selection)? + | | +--:(ospfv2-auth) + | | | +--rw ospfv2-auth-trailer-rfc? + | | | | ospfv2-auth-trailer-rfc-version + | | | | {ospfv2-authentication-trailer}? + | | | +--rw (ospfv2-auth-specification)? + | | | +--:(auth-key-chain) {key-chain}? + | | | | +--rw ospfv2-key-chain? + | | | | key-chain:key-chain-ref + | | | +--:(auth-key-explicit) + | | | +--rw ospfv2-key-id? uint32 + | | | +--rw ospfv2-key? string + | | | +--rw ospfv2-crypto-algorithm? + | | | identityref + | | +--:(ospfv3-auth-ipsec) + | | | {ospfv3-authentication-ipsec}? + | | | +--rw sa? string + | | +--:(ospfv3-auth-trailer) + | | | {ospfv3-authentication-trailer}? + | | +--rw (ospfv3-auth-specification)? + | | +--:(auth-key-chain) {key-chain}? + | | | +--rw ospfv3-key-chain? + | | | key-chain:key-chain-ref + | | +--:(auth-key-explicit) + | | +--rw ospfv3-sa-id? uint16 + | | +--rw ospfv3-key? string + | | +--rw ospfv3-crypto-algorithm? + | | identityref + | +--rw cost? ospf-link-metric + | +--rw mtu-ignore? boolean + | | {mtu-ignore}? + | +--rw prefix-suppression? boolean + | | {prefix-suppression}? + | +--ro state? if-state-type + | +--ro hello-timer? rt-types: + | | rtimer-value-seconds16 + | +--ro wait-timer? rt-types: + | | rtimer-value-seconds16 + | +--ro dr-router-id? rt-types:router-id + | +--ro dr-ip-addr? inet:ip-address + | +--ro bdr-router-id? rt-types:router-id + | +--ro bdr-ip-addr? inet:ip-address + | +--ro statistics + | | +--ro discontinuity-time? yang:date-and-time + | | +--ro if-event-count? yang:counter32 + | | +--ro link-scope-lsa-count? yang:gauge32 + | | +--ro link-scope-lsa-cksum-sum? + | | uint32 + | | +--ro database + | | +--ro link-scope-lsa-type* + | | +--ro lsa-type? uint16 + | | +--ro lsa-count? yang:gauge32 + | | +--ro lsa-cksum-sum? int32 + | +--ro neighbors + | | +--ro neighbor* [neighbor-router-id] + | | +--ro neighbor-router-id + | | rt-types:router-id + | | +--ro address? inet:ip-address + | | +--ro dr-router-id? rt-types:router-id + | | +--ro dr-ip-addr? inet:ip-address + | | +--ro bdr-router-id? rt-types:router-id + | | +--ro bdr-ip-addr? inet:ip-address + | | +--ro state? nbr-state-type + | | +--ro dead-timer? rt-types: + | | | rtimer-value-seconds16 + | | +--ro statistics + | | +--ro discontinuity-time? + | | yang:date-and-time + | | +--ro nbr-event-count? + | | yang:counter32 + | | +--ro nbr-retrans-qlen? + | | yang:gauge32 + | +--ro database + | . +--ro link-scope-lsa-type* [lsa-type] + | . +--ro lsa-type uint16 + | . +--ro link-scope-lsas + . . + . . + | +--rw topologies {ospf:multi-topology}? + | | +--rw topology* [name] + | | +--rw name -> ../../../../../../../../ + | | ../../../rt:ribs/rib/name + | | +--rw cost? ospf-link-metric + | +--rw instance-id? uint8 + . + . + +2.8. OSPF Notifications + + This YANG data model defines a list of notifications that inform YANG + clients of important events detected during protocol operation. The + defined notifications cover the common set of traps from the OSPFv2 + MIB [RFC4750] and OSPFv3 MIB [RFC5643]. + + notifications: + +---n if-state-change + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro (if-link-type-selection)? + | | +--:(interface) + | | | +--ro interface + | | | +--ro interface? if:interface-ref + | | +--:(virtual-link) + | | | +--ro virtual-link + | | | +--ro transit-area-id? area-id-type + | | | +--ro neighbor-router-id? rt-types:router-id + | | +--:(sham-link) + | | +--ro sham-link + | | +--ro area-id? area-id-type + | | +--ro local-ip-addr? inet:ip-address + | | +--ro remote-ip-addr? inet:ip-address + | +--ro state? if-state-type + +---n if-config-error + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro (if-link-type-selection)? + | | +--:(interface) + | | | +--ro interface + | | | +--ro interface? if:interface-ref + | | +--:(virtual-link) + | | | +--ro virtual-link + | | | +--ro transit-area-id? area-id-type + | | | +--ro neighbor-router-id? rt-types:router-id + | | +--:(sham-link) + | | +--ro sham-link + | | +--ro area-id? area-id-type + | | +--ro local-ip-addr? inet:ip-address + | | +--ro remote-ip-addr? inet:ip-address + | +--ro packet-source? yang:dotted-quad + | +--ro packet-type? packet-type + | +--ro error? enumeration + +---n nbr-state-change + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro (if-link-type-selection)? + | | +--:(interface) + | | | +--ro interface + | | | +--ro interface? if:interface-ref + | | +--:(virtual-link) + | | | +--ro virtual-link + | | | +--ro transit-area-id? area-id-type + | | | +--ro neighbor-router-id? rt-types:router-id + | | +--:(sham-link) + | | +--ro sham-link + | | +--ro area-id? area-id-type + | | +--ro local-ip-addr? inet:ip-address + | | +--ro remote-ip-addr? inet:ip-address + | +--ro neighbor-router-id? rt-types:router-id + | +--ro neighbor-ip-addr? yang:dotted-quad + | +--ro state? nbr-state-type + +---n nbr-restart-helper-status-change + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro (if-link-type-selection)? + | | +--:(interface) + | | | +--ro interface + | | | +--ro interface? if:interface-ref + | | +--:(virtual-link) + | | | +--ro virtual-link + | | | +--ro transit-area-id? area-id-type + | | | +--ro neighbor-router-id? rt-types:router-id + | | +--:(sham-link) + | | +--ro sham-link + | | +--ro area-id? area-id-type + | | +--ro local-ip-addr? inet:ip-address + | | +--ro remote-ip-addr? inet:ip-address + | +--ro neighbor-router-id? rt-types:router-id + | +--ro neighbor-ip-addr? yang:dotted-quad + | +--ro status? restart-helper-status-type + | +--ro age? rt-types:timer-value-seconds16 + | +--ro exit-reason? restart-exit-reason-type + +---n if-rx-bad-packet + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro (if-link-type-selection)? + | | +--:(interface) + | | | +--ro interface + | | | +--ro interface? if:interface-ref + | | +--:(virtual-link) + | | | +--ro virtual-link + | | | +--ro transit-area-id? area-id-type + | | | +--ro neighbor-router-id? rt-types:router-id + | | +--:(sham-link) + | | +--ro sham-link + | | +--ro area-id? area-id-type + | | +--ro local-ip-addr? inet:ip-address + | | +--ro remote-ip-addr? inet:ip-address + | +--ro packet-source? yang:dotted-quad + | +--ro packet-type? packet-type + +---n lsdb-approaching-overflow + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro ext-lsdb-limit? uint32 + +---n lsdb-overflow + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro ext-lsdb-limit? uint32 + +---n nssa-translator-status-change + | +--ro routing-protocol-name? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +--ro address-family? + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol[rt:name=current()/../ + | + routing-protocol-name]/ospf/address-family + | +--ro area-id? area-id-type + | +--ro status? nssa-translator-state-type + +---n restart-status-change + +--ro routing-protocol-name? + + -> /rt:routing/control-plane-protocols/ + + control-plane-protocol/name + +--ro address-family? + + -> /rt:routing/control-plane-protocols/ + + control-plane-protocol[rt:name=current()/../ + + routing-protocol-name]/ospf/address-family + +--ro status? restart-status-type + +--ro restart-interval? uint16 + +--ro exit-reason? restart-exit-reason-type + +2.9. OSPF RPC Operations + + The "ietf-ospf" module defines two RPC operations: + + clear-database: Resets the contents of a particular OSPF LSDB, + forces neighbor adjacencies to the 'DOWN' state, and reoriginates + self-originated LSAs. + + clear-neighbor: Resets a particular OSPF neighbor or group of + neighbors associated with an OSPF interface. + + rpcs: + +---x clear-neighbor + | +---w input + | +---w routing-protocol-name + | + -> /rt:routing/control-plane-protocols/ + | + control-plane-protocol/name + | +---w interface? if:interface-ref + +---x clear-database + +---w input + +---w routing-protocol-name + -> /rt:routing/control-plane-protocols/ + control-plane-protocol/name + +3. OSPF YANG Module + + The following RFCs are referenced in the "ietf-ospf" YANG module: + [RFC0905], [RFC1765], [RFC1793], [RFC2328], [RFC3101], [RFC3623], + [RFC3630], [RFC4552], [RFC4576], [RFC4577], [RFC4915], [RFC4973], + [RFC5082], [RFC5185], [RFC5187], [RFC5250], [RFC5286], [RFC5309], + [RFC5329], [RFC5340], [RFC5443], [RFC5613], [RFC5642], [RFC5709], + [RFC5714], [RFC5838], [RFC5880], [RFC5881], [RFC6565], [RFC6845], + [RFC6860], [RFC6987], [RFC6991], [RFC7166], [RFC7474], [RFC7490], + [RFC7684], [RFC7770], [RFC7777], [RFC7884], [RFC8177], [RFC8294], + [RFC8343], [RFC8349], [RFC8405], [RFC8476], and [RFC9314]. + + file "ietf-ospf@2022-10-19.yang" + module ietf-ospf { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ospf"; + + prefix ospf; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + + import ietf-routing-types { + prefix rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + + import iana-routing-types { + prefix iana-rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + + import ietf-routing { + prefix rt; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)"; + } + + import ietf-key-chain { + prefix key-chain; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + + import ietf-bfd-types { + prefix bfd-types; + reference + "RFC 9314: YANG Data Model for Bidirectional Forwarding + Detection (BFD)"; + } + + organization + "IETF Link State Routing (lsr) Working Group"; + + contact + "WG Web: + WG List: + + Editor: Derek Yeung + + Author: Acee Lindem + + Author: Yingzhen Qu + + Author: Jeffrey Zhang + + Author: Ing-Wher Chen + "; + + description + "This YANG module defines the generic configuration and + operational state for the OSPF protocol common to all + vendor implementations. It is intended that the module + will be extended by vendors to define vendor-specific + OSPF configuration parameters and policies -- + for example, route maps or route policies. + + This YANG data model conforms to the Network Management + Datastore Architecture (NMDA) as described in RFC 8342. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here. + + Copyright (c) 2022 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 9129; see the + RFC itself for full legal notices."; + + revision 2022-10-19 { + description + "Initial revision."; + reference + "RFC 9129: YANG Data Model for the OSPF Protocol"; + } + + feature multi-topology { + description + "Support for Multi-Topology (MT) routing."; + reference + "RFC 4915: Multi-Topology (MT) Routing in OSPF"; + } + + feature multi-area-adj { + description + "Support for OSPF multi-area adjacencies as described in + RFC 5185."; + reference + "RFC 5185: OSPF Multi-Area Adjacency"; + } + + feature explicit-router-id { + description + "Sets the Router ID per instance explicitly."; + } + + feature demand-circuit { + description + "Support for OSPF demand circuits as defined in RFC 1793."; + reference + "RFC 1793: Extending OSPF to Support Demand Circuits"; + } + + feature mtu-ignore { + description + "Disable OSPF Database Description packet MTU + mismatch checking as specified in the OSPFv2 + protocol specification (RFC 2328). This mismatch checking + also applies to OSPFv3 (RFC 5340)."; + reference + "RFC 2328: OSPF Version 2, Section 10.6 + RFC 5340: OSPF for IPv6"; + } + + feature lls { + description + "OSPF link-local signaling (LLS) as defined in RFC 5613."; + reference + "RFC 5613: OSPF Link-Local Signaling"; + } + + feature prefix-suppression { + description + "OSPF prefix suppression support as described in RFC 6860."; + reference + "RFC 6860: Hiding Transit-Only Networks in OSPF"; + } + + feature ttl-security { + description + "Support for OSPF Time to Live (TTL) security checking."; + reference + "RFC 5082: The Generalized TTL Security Mechanism (GTSM)"; + } + + feature nsr { + description + "Non-Stop-Routing (NSR) support. The OSPF NSR feature + allows a router with redundant control-plane capability + (e.g., dual Route Processor (RP) cards) to maintain its + state and adjacencies during planned and unplanned + OSPF instance restarts. It differs from graceful restart + or Non-Stop Forwarding (NSF) in that no protocol signaling + or assistance from adjacent OSPF neighbors is required to + recover control-plane state."; + } + + feature graceful-restart { + description + "Graceful OSPF restart as defined in RFCs 3623 and 5187."; + reference + "RFC 3623: Graceful OSPF Restart + RFC 5187: OSPFv3 Graceful Restart"; + } + + feature auto-cost { + description + "Calculates the OSPF interface cost according to + reference bandwidth."; + reference + "RFC 2328: OSPF Version 2"; + } + + feature max-ecmp { + description + "Sets the maximum number of ECMP paths."; + } + + feature max-lsa { + description + "Sets the maximum number of Link State Advertisements (LSAs) + the OSPF instance will accept."; + reference + "RFC 1765: OSPF Database Overflow"; + } + + feature te-rid { + description + "Support for configuration of the Traffic Engineering (TE) + Router ID, i.e., the Router Address TLV as described in + Section 2.4.1 of RFC 3630 or the Router IPv6 Address TLV + as described in Section 3 of RFC 5329."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to + OSPF Version 2, Section 2.4.1 + RFC 5329: Traffic Engineering Extensions to OSPF Version 3, + Section 3"; + } + + feature ldp-igp-sync { + description + "LDP IGP synchronization."; + reference + "RFC 5443: LDP IGP Synchronization"; + } + + feature ospfv2-authentication-trailer { + description + "Support for the OSPFv2 authentication trailer."; + reference + "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication + RFC 7474: Security Extension for OSPFv2 When + Using Manual Key Management"; + } + + feature ospfv3-authentication-ipsec { + description + "Support for IPsec for OSPFv3 authentication."; + reference + "RFC 4552: Authentication/Confidentiality for OSPFv3"; + } + + feature ospfv3-authentication-trailer { + description + "Support for the OSPFv3 authentication trailer."; + reference + "RFC 7166: Supporting Authentication Trailer for OSPFv3"; + } + + feature fast-reroute { + description + "Support for IP Fast Reroute (IP-FRR)."; + reference + "RFC 5714: IP Fast Reroute Framework"; + } + + feature key-chain { + description + "Support of key chains for authentication."; + reference + "RFC 8177: YANG Data Model for Key Chains"; + } + + feature node-flag { + description + "Support for node flags for OSPF prefixes."; + reference + "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; + } + + feature node-tag { + description + "Support for node administrative tags for OSPF routing + instances."; + reference + "RFC 7777: Advertising Node Administrative Tags in OSPF"; + } + + feature lfa { + description + "Support for Loop-Free Alternates (LFAs)."; + reference + "RFC 5286: Basic Specification for IP Fast Reroute: + Loop-Free Alternates"; + } + + feature remote-lfa { + description + "Support for Remote LFAs (R-LFAs)."; + reference + "RFC 7490: Remote Loop-Free Alternate (LFA) Fast Reroute + (FRR)"; + } + + feature stub-router { + description + "Support for OSPF stub router advertisement as defined in + RFC 6987."; + reference + "RFC 6987: OSPF Stub Router Advertisement"; + } + + feature pe-ce-protocol { + description + "Support for OSPF as a Provider Edge to Customer Edge (PE-CE) + protocol."; + reference + "RFC 4577: OSPF as the Provider/Customer Edge Protocol + for BGP/MPLS IP Virtual Private Networks (VPNs) + RFC 6565: OSPFv3 as a Provider Edge to Customer Edge (PE-CE) + Routing Protocol"; + } + + feature ietf-spf-delay { + description + "Support for the IETF Shortest Path First (SPF) delay + algorithm."; + reference + "RFC 8405: Shortest Path First (SPF) Back-Off Delay Algorithm + for Link-State IGPs"; + } + + feature bfd { + description + "Support for BFD to detect OSPF neighbor reachability."; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD) + RFC 5881: Bidirectional Forwarding Detection + (BFD) for IPv4 and IPv6 (Single Hop)"; + } + + feature hybrid-interface { + description + "Support for the OSPF hybrid interface type."; + reference + "RFC 6845: OSPF Hybrid Broadcast and + Point-to-Multipoint Interface Type"; + } + + identity ospf { + base rt:routing-protocol; + description + "Any OSPF protocol version."; + } + + identity ospfv2 { + base ospf; + description + "OSPFv2 protocol."; + } + + identity ospfv3 { + base ospf; + description + "OSPFv3 protocol."; + } + + identity area-type { + description + "Base identity for an OSPF area type."; + } + + identity normal-area { + base area-type; + description + "OSPF normal area."; + } + + identity stub-nssa-area { + base area-type; + description + "OSPF stub area or Not-So-Stubby Area (NSSA)."; + } + + identity stub-area { + base stub-nssa-area; + description + "OSPF stub area."; + } + + identity nssa-area { + base stub-nssa-area; + description + "OSPF NSSA."; + reference + "RFC 3101: The OSPF Not-So-Stubby Area (NSSA) Option"; + } + + identity ospf-lsa-type { + description + "Base identity for OSPFv2 and OSPFv3 + Link State Advertisement (LSA) types."; + } + + identity ospfv2-lsa-type { + base ospf-lsa-type; + description + "OSPFv2 LSA types."; + } + + identity ospfv2-router-lsa { + base ospfv2-lsa-type; + description + "OSPFv2 Router-LSA - Type 1."; + } + + identity ospfv2-network-lsa { + base ospfv2-lsa-type; + description + "OSPFv2 Network-LSA - Type 2."; + } + + identity ospfv2-summary-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 summary LSA types."; + } + + identity ospfv2-network-summary-lsa { + base ospfv2-summary-lsa-type; + description + "OSPFv2 Network summary LSA - Type 3."; + } + + identity ospfv2-asbr-summary-lsa { + base ospfv2-summary-lsa-type; + description + "OSPFv2 Autonomous System Boundary Router (ASBR) summary LSA - + Type 4."; + } + + identity ospfv2-external-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 External-LSA types."; + } + + identity ospfv2-as-external-lsa { + base ospfv2-external-lsa-type; + description + "OSPFv2 AS-External-LSA - Type 5."; + } + + identity ospfv2-nssa-lsa { + base ospfv2-external-lsa-type; + description + "OSPFv2 NSSA-LSA - Type 7."; + } + + identity ospfv2-opaque-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 Opaque-LSA types."; + reference + "RFC 5250: The OSPF Opaque LSA Option"; + } + + identity ospfv2-link-scope-opaque-lsa { + base ospfv2-opaque-lsa-type; + description + "OSPFv2 Link-Scope Opaque-LSA - Type 9."; + } + + identity ospfv2-area-scope-opaque-lsa { + base ospfv2-opaque-lsa-type; + description + "OSPFv2 Area-Scope Opaque-LSA - Type 10."; + } + + identity ospfv2-as-scope-opaque-lsa { + base ospfv2-opaque-lsa-type; + description + "OSPFv2 AS-Scope Opaque-LSA - Type 11."; + } + + identity ospfv2-unknown-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 unknown LSA type."; + } + + identity ospfv3-lsa-type { + base ospf-lsa-type; + description + "OSPFv3 LSA types."; + reference + "RFC 5340: OSPF for IPv6"; + } + + identity ospfv3-router-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Router-LSA - Type 0x2001."; + } + + identity ospfv3-network-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Network-LSA - Type 0x2002."; + } + + identity ospfv3-summary-lsa-type { + base ospfv3-lsa-type; + description + "OSPFv3 summary LSA types."; + } + + identity ospfv3-inter-area-prefix-lsa { + base ospfv3-summary-lsa-type; + description + "OSPFv3 Inter-Area-Prefix-LSA - Type 0x2003."; + } + + identity ospfv3-inter-area-router-lsa { + base ospfv3-summary-lsa-type; + description + "OSPFv3 Inter-Area-Router-LSA - Type 0x2004."; + } + + identity ospfv3-external-lsa-type { + base ospfv3-lsa-type; + description + "OSPFv3 External-LSA types."; + } + + identity ospfv3-as-external-lsa { + base ospfv3-external-lsa-type; + description + "OSPFv3 AS-External-LSA - Type 0x4005."; + } + + identity ospfv3-nssa-lsa { + base ospfv3-external-lsa-type; + description + "OSPFv3 NSSA-LSA - Type 0x2007."; + } + + identity ospfv3-link-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Link-LSA - Type 0x0008."; + } + + identity ospfv3-intra-area-prefix-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Intra-Area-Prefix-LSA - Type 0x2009."; + } + + identity ospfv3-router-information-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Router-Information-LSA - Types 0x800C, + 0xA00C, and 0xC00C."; + } + + identity ospfv3-unknown-lsa-type { + base ospfv3-lsa-type; + description + "OSPFv3 unknown LSA type."; + } + + identity lsa-log-reason { + description + "Base identity for an LSA log reason."; + } + + identity lsa-refresh { + base lsa-log-reason; + description + "Identity used when an LSA is logged + as a result of receiving a refresh LSA."; + } + + identity lsa-content-change { + base lsa-log-reason; + description + "Identity used when an LSA is logged + as a result of a change in the contents + of the LSA."; + } + + identity lsa-purge { + base lsa-log-reason; + description + "Identity used when an LSA is logged + as a result of being purged."; + } + + identity informational-capability { + description + "Base identity for router informational capabilities."; + } + + identity graceful-restart { + base informational-capability; + description + "When set, the router is capable of restarting + gracefully."; + reference + "RFC 3623: Graceful OSPF Restart + RFC 5187: OSPFv3 Graceful Restart"; + } + + identity graceful-restart-helper { + base informational-capability; + description + "When set, the router is capable of acting as + a graceful restart helper."; + reference + "RFC 3623: Graceful OSPF Restart + RFC 5187: OSPFv3 Graceful Restart"; + } + + identity stub-router { + base informational-capability; + description + "When set, the router is capable of acting as + an OSPF stub router."; + reference + "RFC 6987: OSPF Stub Router Advertisement"; + } + + identity traffic-engineering { + base informational-capability; + description + "When set, the router is capable of OSPF TE."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to + OSPF Version 2 + RFC 5329: Traffic Engineering Extensions to OSPF Version 3"; + } + + identity p2p-over-lan { + base informational-capability; + description + "When set, the router is capable of OSPF point-to-point + over a LAN."; + reference + "RFC 5309: Point-to-Point Operation over LAN in Link State + Routing Protocols"; + } + + identity experimental-te { + base informational-capability; + description + "When set, the router is capable of OSPF experimental TE."; + reference + "RFC 4973: OSPF-xTE: Experimental Extension to OSPF for + Traffic Engineering"; + } + + identity router-lsa-bit { + description + "Base identity for Router-LSA bits."; + } + + identity vlink-end-bit { + base router-lsa-bit; + description + "V-bit. When set, the router is an endpoint of one or + more virtual links."; + } + + identity asbr-bit { + base router-lsa-bit; + description + "E-bit. When set, the router is an Autonomous System + Boundary Router (ASBR)."; + } + + identity abr-bit { + base router-lsa-bit; + description + "B-bit. When set, the router is an Area Border + Router (ABR)."; + } + + identity nssa-bit { + base router-lsa-bit; + description + "Nt-bit. When set, the router is an NSSA border router + that is unconditionally translating NSSA-LSAs into + AS-External-LSAs."; + } + + identity ospfv3-lsa-option { + description + "Base identity for OSPF LSA Options."; + } + + identity af-bit { + base ospfv3-lsa-option; + description + "AF-bit. When set, the router supports OSPFv3 Address + Families (AFs) as described in RFC 5838."; + reference + "RFC 5838: Support of Address Families in OSPFv3"; + } + + identity dc-bit { + base ospfv3-lsa-option; + description + "DC-bit. When set, the router supports demand circuits."; + } + + identity r-bit { + base ospfv3-lsa-option; + description + "R-bit. When set, the originator is an active router."; + } + + identity n-bit { + base ospfv3-lsa-option; + description + "N-bit. When set, the router is attached to an NSSA."; + } + + identity e-bit { + base ospfv3-lsa-option; + description + "E-bit. This bit describes the way AS-External-LSAs + are flooded."; + } + + identity v6-bit { + base ospfv3-lsa-option; + description + "V6-bit. If clear, the router/link should be excluded + from IPv6 routing calculations."; + } + + identity ospfv3-prefix-option { + description + "Base identity for OSPFv3 prefix options."; + } + + identity nu-bit { + base ospfv3-prefix-option; + description + "NU-bit. When set, the prefix should be excluded + from IPv6 unicast calculations."; + } + + identity la-bit { + base ospfv3-prefix-option; + description + "LA-bit. When set, the prefix is actually an IPv6 + interface address of the advertising router."; + } + + identity p-bit { + base ospfv3-prefix-option; + description + "P-bit. When set, the NSSA prefix should be + translated to an AS-External-LSA and advertised + by the translating NSSA border router."; + } + + identity dn-bit { + base ospfv3-prefix-option; + description + "DN-bit. When set, the Inter-Area-Prefix-LSA or + AS-External-LSA prefix has been advertised as an + L3VPN prefix."; + } + + identity ospfv2-lsa-option { + description + "Base identity for OSPFv2 LSA Options."; + } + + identity mt-bit { + base ospfv2-lsa-option; + description + "MT-bit. When set, the router supports multi-topology as + described in RFC 4915."; + reference + "RFC 4915: Multi-Topology (MT) Routing in OSPF"; + } + + identity v2-dc-bit { + base ospfv2-lsa-option; + description + "DC-bit. When set, the router supports demand circuits."; + } + + identity v2-p-bit { + base ospfv2-lsa-option; + description + "P-bit. Only used in type-7 LSAs. When set, an NSSA + border router should translate the type-7 LSA + to a type-5 LSA."; + } + + identity mc-bit { + base ospfv2-lsa-option; + description + "MC-bit. When set, the router supports + Multicast Extensions to OSPF (MOSPF)."; + } + + identity v2-e-bit { + base ospfv2-lsa-option; + description + "E-bit. This bit describes the way AS-External-LSAs + are flooded."; + } + + identity o-bit { + base ospfv2-lsa-option; + description + "O-bit. When set, the router is opaque capable as described + in RFC 5250."; + reference + "RFC 5250: The OSPF Opaque LSA Option"; + } + + identity v2-dn-bit { + base ospfv2-lsa-option; + description + "DN-bit. When a type 3, type 5, or type 7 LSA is sent from a + PE to a CE, the DN-bit must be set. See RFC 4576."; + reference + "RFC 4576: Using a Link State Advertisement (LSA) Options Bit + to Prevent Looping in BGP/MPLS IP Virtual Private Networks + (VPNs)"; + } + + identity ospfv2-extended-prefix-flag { + description + "Base identity for the Extended Prefix TLV flag."; + } + + identity a-flag { + base ospfv2-extended-prefix-flag; + description + "Attach flag. When set, it indicates that the prefix + corresponds to a route that is directly connected to + the advertising router."; + } + + identity node-flag { + base ospfv2-extended-prefix-flag; + description + "Node flag. When set, it indicates that the prefix is + used to represent the advertising node, e.g., a loopback + address."; + } + + typedef ospf-metric { + type uint32 { + range "0 .. 16777215"; + } + description + "OSPF metric. 24-bit unsigned integer."; + } + + typedef ospf-link-metric { + type uint16 { + range "0 .. 65535"; + } + description + "OSPF link metric. 16-bit unsigned integer."; + } + + typedef opaque-id { + type uint32 { + range "0 .. 16777215"; + } + description + "Opaque-LSA ID. 24-bit unsigned integer."; + } + + typedef area-id-type { + type yang:dotted-quad; + description + "Area ID type."; + } + + typedef route-type { + type enumeration { + enum intra-area { + description + "OSPF intra-area route."; + } + enum inter-area { + description + "OSPF inter-area route."; + } + enum external-1 { + description + "OSPF type 1 external route."; + } + enum external-2 { + description + "OSPF type 2 external route."; + } + enum nssa-1 { + description + "OSPF type 1 NSSA route."; + } + enum nssa-2 { + description + "OSPF type 2 NSSA route."; + } + } + description + "OSPF route type."; + } + + typedef if-state-type { + type enumeration { + enum down { + value 1; + description + "Interface is in the 'Down' state."; + } + enum loopback { + value 2; + description + "Interface is in the 'Loopback' state."; + } + enum waiting { + value 3; + description + "Interface is in the 'Waiting' state."; + } + enum point-to-point { + value 4; + description + "Interface is in the 'Point-to-point' state."; + } + enum dr { + value 5; + description + "Interface is in the 'DR' (Designated Router) state."; + } + enum bdr { + value 6; + description + "Interface is in the 'Backup' (Backup Designated Router + (BDR)) state."; + } + enum dr-other { + value 7; + description + "Interface is in the 'DR Other' state."; + } + } + description + "OSPF interface state type."; + reference + "RFC 2328: OSPF Version 2"; + } + + typedef router-link-type { + type enumeration { + enum point-to-point-link { + value 1; + description + "Point-to-point link to another router."; + } + enum transit-network-link { + value 2; + description + "Link to a transit network, identified by the DR."; + } + enum stub-network-link { + value 3; + description + "Link to a stub network, identified by the subnet."; + } + enum virtual-link { + value 4; + description + "Virtual link across a transit area."; + } + } + description + "OSPF router link type."; + } + + typedef nbr-state-type { + type enumeration { + enum down { + value 1; + description + "Neighbor is in the 'Down' state."; + } + enum attempt { + value 2; + description + "Neighbor is in the 'Attempt' state."; + } + enum init { + value 3; + description + "Neighbor is in the 'Init' state."; + } + enum 2-way { + value 4; + description + "Neighbor is in the '2-Way' state."; + } + enum exstart { + value 5; + description + "Neighbor is in the 'ExStart' (exchange start) state."; + } + enum exchange { + value 6; + description + "Neighbor is in the 'Exchange' state."; + } + enum loading { + value 7; + description + "Neighbor is in the 'Loading' state."; + } + enum full { + value 8; + description + "Neighbor is in the 'Full' state."; + } + } + description + "OSPF neighbor state type."; + reference + "RFC 2328: OSPF Version 2"; + } + + typedef restart-helper-status-type { + type enumeration { + enum not-helping { + value 1; + description + "Restart helper status of 'not-helping'."; + } + enum helping { + value 2; + description + "Restart helper status of 'helping'."; + } + } + description + "Restart helper status type."; + } + + typedef restart-exit-reason-type { + type enumeration { + enum none { + value 1; + description + "Restart not attempted."; + } + enum in-progress { + value 2; + description + "Restart in progress."; + } + enum completed { + value 3; + description + "Restart successfully completed."; + } + enum timed-out { + value 4; + description + "Restart timed out."; + } + enum topology-changed { + value 5; + description + "Restart aborted due to a topology change."; + } + } + description + "Describes the outcome of the last graceful restart attempt. + The local router is being restarted or acting as a helper."; + } + + typedef packet-type { + type enumeration { + enum hello { + value 1; + description + "OSPF Hello packet."; + } + enum database-description { + value 2; + description + "OSPF Database Description packet."; + } + enum link-state-request { + value 3; + description + "OSPF Link State Request packet."; + } + enum link-state-update { + value 4; + description + "OSPF Link State Update packet."; + } + enum link-state-ack { + value 5; + description + "OSPF Link State Acknowledgment packet."; + } + } + description + "OSPF packet type."; + } + + typedef nssa-translator-state-type { + type enumeration { + enum enabled { + value 1; + description + "NSSATranslatorState is 'enabled'."; + } + enum elected { + value 2; + description + "NSSATranslatorState is 'elected'."; + } + enum disabled { + value 3; + description + "NSSATranslatorState is 'disabled'."; + } + } + description + "OSPF NSSA translator state type."; + reference + "RFC 3101: The OSPF Not-So-Stubby Area (NSSA) Option"; + } + + typedef restart-status-type { + type enumeration { + enum not-restarting { + value 1; + description + "The router is not restarting."; + } + enum planned-restart { + value 2; + description + "The router is going through a planned restart."; + } + enum unplanned-restart { + value 3; + description + "The router is going through an unplanned restart."; + } + } + description + "OSPF graceful restart status type."; + } + + typedef fletcher-checksum16-type { + type string { + pattern '(0x)?[0-9a-fA-F]{4}'; + } + description + "Fletcher 16-bit checksum in hex-string format 0xXXXX."; + reference + "RFC 905: ISO Transport Protocol Specification ISO DP 8073"; + } + + typedef ospfv2-auth-trailer-rfc-version { + type enumeration { + enum rfc5709 { + description + "Support for the OSPF authentication trailer as + described in RFC 5709."; + reference + "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication"; + } + enum rfc7474 { + description + "Support for the OSPF authentication trailer as + described in RFC 7474."; + reference + "RFC 7474: Security Extension for OSPFv2 + When Using Manual Key Management"; + } + } + description + "OSPFv2 authentication trailer support."; + } + + grouping tlv { + description + "Type-Length-Value (TLV)."; + leaf type { + type uint16; + description + "TLV type."; + } + leaf length { + type uint16; + description + "TLV length (octets)."; + } + leaf value { + type yang:hex-string; + description + "TLV value."; + } + } + + grouping unknown-tlvs { + description + "Grouping used for unknown TLVs or unknown sub-TLVs."; + container unknown-tlvs { + description + "All unknown TLVs."; + list unknown-tlv { + description + "Unknown TLV."; + uses tlv; + } + } + } + + grouping node-tag-tlv { + description + "OSPF Node Admin Tag TLV grouping."; + list node-tag { + leaf tag { + type uint32; + description + "Value of the node administrative tag."; + } + description + "List of tags."; + } + } + + grouping router-capabilities-tlv { + description + "Grouping for OSPF router capabilities TLV types."; + reference + "RFC 7770: Extensions to OSPF for Advertising Optional + Router Capabilities"; + container router-informational-capabilities { + leaf-list informational-capabilities { + type identityref { + base informational-capability; + } + description + "List of informational capabilities. This list will + contain the identities for the informational + capabilities supported by the router."; + } + description + "OSPF Router Informational Flag definitions."; + } + list informational-capabilities-flags { + leaf informational-flag { + type uint32; + description + "Individual informational capability flag."; + } + description + "List of informational capability flags. This will + return all the 32-bit informational flags, irrespective + of whether or not they are known to the device."; + } + list functional-capabilities { + leaf functional-flag { + type uint32; + description + "Individual functional capability flag."; + } + description + "List of functional capability flags. This will + return all the 32-bit functional flags, irrespective + of whether or not they are known to the device."; + } + } + + grouping dynamic-hostname-tlv { + description + "Dynamic Hostname TLV."; + reference + "RFC 5642: Dynamic Hostname Exchange Mechanism for OSPF"; + leaf hostname { + type string { + length "1..255"; + } + description + "Dynamic hostname."; + } + } + + grouping sbfd-discriminator-tlv { + description + "S-BFD Discriminator TLV."; + reference + "RFC 7884: OSPF Extensions to Advertise Seamless Bidirectional + Forwarding Detection (S-BFD) Target Discriminators"; + list sbfd-discriminators { + leaf sbfd-discriminator { + type uint32; + description + "Individual S-BFD Discriminator."; + } + description + "List of S-BFD Discriminators."; + } + } + + grouping maximum-sid-depth-tlv { + description + "Node MSD TLV (TLV for Maximum SID Depth)."; + reference + "RFC 8476: Signaling Maximum SID Depth (MSD) Using OSPF"; + list msd-type { + leaf msd-type { + type uint8; + description + "Maximum SID Depth (MSD) type."; + } + leaf msd-value { + type uint8; + description + "MSD value for the type."; + } + description + "List of MSD tuples."; + } + } + + grouping ospf-router-lsa-bits { + container router-bits { + leaf-list rtr-lsa-bits { + type identityref { + base router-lsa-bit; + } + description + "List of Router-LSA bits. This list will contain + identities for the bits; these identities are set + in the Router-LSA bits."; + } + description + "Router-LSA bits."; + } + description + "Router-LSA bits. Currently common to both OSPFv2 and + OSPFv3 but may diverge with future augmentations."; + } + + grouping ospfv2-router-link { + description + "OSPFv2 router link."; + leaf link-id { + type union { + type inet:ipv4-address; + type yang:dotted-quad; + } + description + "Router-LSA Link ID."; + } + leaf link-data { + type union { + type inet:ipv4-address; + type uint32; + } + description + "Router-LSA link data."; + } + leaf type { + type router-link-type; + description + "Router-LSA link type."; + } + } + + grouping ospfv2-lsa-body { + description + "OSPFv2 LSA body."; + container router { + when "derived-from-or-self(../../header/type, " + + "'ospfv2-router-lsa')" { + description + "Only applies to Router-LSAs."; + } + description + "Router-LSA."; + uses ospf-router-lsa-bits; + leaf num-of-links { + type uint16; + description + "Number of links in the Router-LSA."; + } + container links { + description + "All router links."; + list link { + description + "Router-LSA link."; + uses ospfv2-router-link; + container topologies { + description + "All topologies for the link."; + list topology { + description + "Topology-specific information."; + leaf mt-id { + type uint8; + description + "The MT-ID for the topology enabled on the link."; + } + leaf metric { + type uint16; + description + "Metric for the topology."; + } + } + } + } + } + } + container network { + when "derived-from-or-self(../../header/type, " + + "'ospfv2-network-lsa')" { + description + "Only applies to Network-LSAs."; + } + description + "Network-LSA."; + leaf network-mask { + type yang:dotted-quad; + description + "The IP address mask for the network."; + } + container attached-routers { + description + "All attached routers."; + leaf-list attached-router { + type inet:ipv4-address; + description + "List of the routers attached to the network."; + } + } + } + container summary { + when "derived-from(../../header/type, " + + "'ospfv2-summary-lsa-type')" { + description + "Only applies to summary LSAs."; + } + description + "Summary LSA."; + leaf network-mask { + type inet:ipv4-address; + description + "The IP address mask for the network."; + } + container topologies { + description + "All topologies for the summary LSA."; + list topology { + description + "Topology-specific information."; + leaf mt-id { + type uint8; + description + "The MT-ID for the topology enabled for the summary."; + } + leaf metric { + type ospf-metric; + description + "Metric for the topology."; + } + } + } + } + container external { + when "derived-from(../../header/type, " + + "'ospfv2-external-lsa-type')" { + description + "Only applies to AS-External-LSAs and NSSA-LSAs."; + } + description + "External-LSA."; + leaf network-mask { + type inet:ipv4-address; + description + "The IP address mask for the network."; + } + container topologies { + description + "All topologies for the External-LSA."; + list topology { + description + "Topology-specific information."; + leaf mt-id { + type uint8; + description + "The MT-ID for the topology enabled for the + external or NSSA prefix."; + } + leaf flags { + type bits { + bit E { + description + "When set, the metric specified is a Type 2 + external metric."; + } + } + description + "Topology flags."; + } + leaf metric { + type ospf-metric; + description + "Metric for the topology."; + } + leaf forwarding-address { + type inet:ipv4-address; + description + "IPv4 Forwarding address."; + } + leaf external-route-tag { + type uint32; + description + "Route tag for the topology."; + } + } + } + } + container opaque { + when "derived-from(../../header/type, " + + "'ospfv2-opaque-lsa-type')" { + description + "Only applies to Opaque-LSAs."; + } + description + "Opaque-LSA."; + + container ri-opaque { + description + "OSPF Router-Information-Opaque-LSA."; + reference + "RFC 7770: Extensions to OSPF for Advertising Optional + Router Capabilities"; + + container router-capabilities-tlv { + description + "Informational and functional router capabilities."; + uses router-capabilities-tlv; + } + + container node-tag-tlvs { + description + "All Node Admin Tag TLVs."; + list node-tag-tlv { + description + "Node Admin Tag TLV."; + uses node-tag-tlv; + } + } + + container dynamic-hostname-tlv { + description + "OSPF Dynamic Hostname TLV."; + uses dynamic-hostname-tlv; + } + + container sbfd-discriminator-tlv { + description + "OSPF S-BFD Discriminator TLV."; + uses sbfd-discriminator-tlv; + } + + container maximum-sid-depth-tlv { + description + "OSPF Node MSD TLV."; + uses maximum-sid-depth-tlv; + } + uses unknown-tlvs; + } + + container te-opaque { + description + "OSPFv2 TE Opaque-LSA."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to + OSPF Version 2"; + + container router-address-tlv { + description + "Router address TLV."; + leaf router-address { + type inet:ipv4-address; + description + "Router address."; + } + } + + container link-tlv { + description + "Describes a single link. It is constructed + from a set of sub-TLVs."; + leaf link-type { + type router-link-type; + mandatory true; + description + "Link type."; + } + leaf link-id { + type union { + type inet:ipv4-address; + type yang:dotted-quad; + } + mandatory true; + description + "Link ID."; + } + container local-if-ipv4-addrs { + description + "All local interface IPv4 addresses."; + leaf-list local-if-ipv4-addr { + type inet:ipv4-address; + description + "List of local interface IPv4 addresses."; + } + } + container remote-if-ipv4-addrs { + description + "All remote interface IPv4 addresses."; + leaf-list remote-if-ipv4-addr { + type inet:ipv4-address; + description + "List of remote interface IPv4 addresses."; + } + } + leaf te-metric { + type uint32; + description + "TE metric."; + } + leaf max-bandwidth { + type rt-types:bandwidth-ieee-float32; + description + "Maximum bandwidth."; + } + leaf max-reservable-bandwidth { + type rt-types:bandwidth-ieee-float32; + description + "Maximum reservable bandwidth."; + } + container unreserved-bandwidths { + description + "All unreserved bandwidths."; + list unreserved-bandwidth { + leaf priority { + type uint8 { + range "0 .. 7"; + } + description + "Priority from 0 to 7."; + } + leaf unreserved-bandwidth { + type rt-types:bandwidth-ieee-float32; + description + "Unreserved bandwidth."; + } + description + "List of unreserved bandwidths for different + priorities."; + } + } + leaf admin-group { + type uint32; + description + "Administrative Group / Resource Class/Color."; + } + uses unknown-tlvs; + } + } + + container extended-prefix-opaque { + description + "All Extended Prefix TLVs in the LSA."; + list extended-prefix-tlv { + description + "Extended Prefix TLV."; + leaf route-type { + type enumeration { + enum unspecified { + value 0; + description + "Unspecified."; + } + enum intra-area { + value 1; + description + "OSPF intra-area route."; + } + enum inter-area { + value 3; + description + "OSPF inter-area route."; + } + enum external { + value 5; + description + "OSPF external route."; + } + enum nssa { + value 7; + description + "OSPF NSSA external route."; + } + } + description + "Route type."; + } + container flags { + leaf-list extended-prefix-flags { + type identityref { + base ospfv2-extended-prefix-flag; + } + description + "List of Extended Prefix TLV flags. This list will + contain identities for the prefix flags; these + identities are set in the extended prefix flags."; + } + description + "Prefix flags."; + } + leaf prefix { + type inet:ip-prefix; + description + "Address prefix."; + } + uses unknown-tlvs; + } + } + + container extended-link-opaque { + description + "All Extended Link TLVs in the LSA."; + reference + "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; + container extended-link-tlv { + description + "Extended Link TLV."; + uses ospfv2-router-link; + container maximum-sid-depth-tlv { + description + "OSPF Node MSD TLV."; + uses maximum-sid-depth-tlv; + } + uses unknown-tlvs; + } + } + } + } + + grouping ospfv3-lsa-options { + description + "OSPFv3 LSA Options."; + container lsa-options { + leaf-list lsa-options { + type identityref { + base ospfv3-lsa-option; + } + description + "List of OSPFv3 LSA Options. This list will contain + the identities for the OSPFv3 LSA Options that are + set for the LSA."; + } + description + "OSPFv3 LSA Options."; + } + } + + grouping ospfv3-lsa-prefix { + description + "OSPFv3 LSA prefix."; + + leaf prefix { + type inet:ip-prefix; + description + "LSA prefix."; + } + container prefix-options { + leaf-list prefix-options { + type identityref { + base ospfv3-prefix-option; + } + description + "List of OSPFv3 prefix Options. This list will + contain the identities for the OSPFv3 options + that are set for the OSPFv3 prefix."; + } + description + "Prefix options."; + } + } + + grouping ospfv3-lsa-external { + description + "AS-External-LSA or NSSA-LSA."; + leaf metric { + type ospf-metric; + description + "AS-External-LSA or NSSA-LSA Metric."; + } + leaf flags { + type bits { + bit E { + description + "When set, the metric specified is a Type 2 + external metric."; + } + bit F { + description + "When set, a forwarding address is included + in the LSA."; + } + bit T { + description + "When set, an external route tag is included + in the LSA."; + } + } + description + "AS-External-LSA or NSSA-LSA flags."; + } + + leaf referenced-ls-type { + type identityref { + base ospfv3-lsa-type; + } + description + "Referenced Link State (LS) Type."; + reference + "RFC 5340: OSPF for IPv6"; + } + leaf unknown-referenced-ls-type { + type uint16; + description + "Value for an unknown Referenced LS Type."; + } + + uses ospfv3-lsa-prefix; + + leaf forwarding-address { + type inet:ipv6-address; + description + "IPv6 Forwarding address."; + } + + leaf external-route-tag { + type uint32; + description + "Route tag."; + } + leaf referenced-link-state-id { + type uint32; + description + "Referenced Link State ID."; + reference + "RFC 5340: OSPF for IPv6"; + } + } + + grouping ospfv3-lsa-body { + description + "OSPFv3 LSA body."; + container router { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-router-lsa')" { + description + "Only applies to Router-LSAs."; + } + description + "Router-LSA."; + uses ospf-router-lsa-bits; + uses ospfv3-lsa-options; + + container links { + description + "All router links."; + list link { + description + "Router-LSA link."; + leaf interface-id { + type uint32; + description + "Interface ID for the link."; + } + leaf neighbor-interface-id { + type uint32; + description + "Neighbor's Interface ID for the link."; + } + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor's Router ID for the link."; + } + leaf type { + type router-link-type; + description + "Link type: 1 - Point-to-Point Link + 2 - Transit Network Link + 3 - Reserved for OSPFv3 Links + 4 - Virtual Link."; + } + leaf metric { + type uint16; + description + "Link metric."; + } + } + } + } + container network { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-network-lsa')" { + description + "Only applies to Network-LSAs."; + } + description + "Network-LSA."; + + uses ospfv3-lsa-options; + + container attached-routers { + description + "All attached routers."; + leaf-list attached-router { + type rt-types:router-id; + description + "List of the routers attached to the network."; + } + } + } + container inter-area-prefix { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-inter-area-prefix-lsa')" { + description + "Only applies to Inter-Area-Prefix-LSAs."; + } + leaf metric { + type ospf-metric; + description + "Inter-Area Prefix metric."; + } + uses ospfv3-lsa-prefix; + description + "Prefix-LSA."; + } + container inter-area-router { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-inter-area-router-lsa')" { + description + "Only applies to Inter-Area-Router-LSAs."; + } + uses ospfv3-lsa-options; + leaf metric { + type ospf-metric; + description + "Autonomous System Boundary Router (ASBR) metric."; + } + leaf destination-router-id { + type rt-types:router-id; + description + "The Router ID of the ASBR described by the LSA."; + } + description + "Inter-Area-Router-LSA."; + } + container as-external { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-as-external-lsa')" { + description + "Only applies to AS-External-LSAs."; + } + + uses ospfv3-lsa-external; + + description + "AS-External-LSA."; + } + container nssa { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-nssa-lsa')" { + description + "Only applies to NSSA-LSAs."; + } + uses ospfv3-lsa-external; + + description + "NSSA-LSA."; + } + container link { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-link-lsa')" { + description + "Only applies to Link-LSAs."; + } + leaf rtr-priority { + type uint8; + description + "Router priority for DR election. A router with a + higher priority will be preferred in the election. + A value of 0 indicates that the router is not eligible + to become the DR or BDR."; + } + uses ospfv3-lsa-options; + + leaf link-local-interface-address { + type inet:ipv6-address; + description + "The originating router's link-local + interface address for the link."; + } + + leaf num-of-prefixes { + type uint32; + description + "Number of prefixes."; + } + + container prefixes { + description + "All prefixes for the link."; + list prefix { + description + "List of prefixes associated with the link."; + uses ospfv3-lsa-prefix; + } + } + description + "Link-LSA."; + } + container intra-area-prefix { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-intra-area-prefix-lsa')" { + description + "Only applies to Intra-Area-Prefix-LSAs."; + } + description + "Intra-Area-Prefix-LSA."; + + leaf referenced-ls-type { + type identityref { + base ospfv3-lsa-type; + } + description + "Referenced LS Type."; + } + leaf unknown-referenced-ls-type { + type uint16; + description + "Value for an unknown Referenced LS Type."; + } + leaf referenced-link-state-id { + type uint32; + description + "Referenced Link State ID."; + } + leaf referenced-adv-router { + type rt-types:router-id; + description + "Referenced Advertising Router."; + reference + "RFC 5340: OSPF for IPv6"; + } + + leaf num-of-prefixes { + type uint16; + description + "Number of prefixes."; + } + container prefixes { + description + "All prefixes in this LSA."; + list prefix { + description + "List of prefixes in this LSA."; + uses ospfv3-lsa-prefix; + leaf metric { + type uint16; + description + "Prefix metric."; + } + } + } + } + container router-information { + when "derived-from-or-self(../../header/type, " + + "'ospfv3-router-information-lsa')" { + description + "Only applies to Router-Information-LSAs (RFC 7770)."; + reference + "RFC 7770: Extensions to OSPF for Advertising Optional + Router Capabilities"; + } + container router-capabilities-tlv { + description + "Informational and functional router capabilities."; + uses router-capabilities-tlv; + } + container node-tag-tlvs { + description + "All Node Admin Tag TLVs."; + list node-tag-tlv { + description + "Node Admin Tag TLV."; + uses node-tag-tlv; + } + } + container dynamic-hostname-tlv { + description + "OSPF Dynamic Hostname TLV."; + uses dynamic-hostname-tlv; + } + + container sbfd-discriminator-tlv { + description + "OSPF S-BFD Discriminator TLV."; + uses sbfd-discriminator-tlv; + } + + description + "Router-Information-LSA."; + reference + "RFC 7770: Extensions to OSPF for Advertising Optional + Router Capabilities"; + } + } + + grouping lsa-header { + description + "Common LSA for OSPFv2 and OSPFv3."; + leaf age { + type uint16; + mandatory true; + description + "LSA age."; + } + leaf type { + type identityref { + base ospf-lsa-type; + } + mandatory true; + description + "LSA type."; + } + leaf adv-router { + type rt-types:router-id; + mandatory true; + description + "LSA advertising router."; + } + leaf seq-num { + type uint32; + mandatory true; + description + "LSA sequence number."; + } + leaf checksum { + type fletcher-checksum16-type; + mandatory true; + description + "LSA checksum."; + } + leaf length { + type uint16; + mandatory true; + description + "LSA length, including the header."; + } + } + + grouping ospfv2-lsa { + description + "OSPFv2 LSA. LSAs are uniquely identified by + the + tuple, with the sequence number differentiating the + LSA instances."; + container header { + must "(derived-from(type, " + + "'ospfv2-opaque-lsa-type') and " + + "opaque-id and opaque-type) or " + + "(not(derived-from(type, " + + "'ospfv2-opaque-lsa-type')) " + + "and not(opaque-id) and not(opaque-type))" { + description + "The opaque-type and the opaque-id only apply to + Opaque-LSAs."; + } + description + "Decoded OSPFv2 LSA header data."; + + container lsa-options { + leaf-list lsa-options { + type identityref { + base ospfv2-lsa-option; + } + description + "List of LSA Options. This list will contain the + identities for the OSPFv2 LSA Options that are set."; + } + description + "LSA Options."; + } + + leaf lsa-id { + type yang:dotted-quad; + mandatory true; + description + "Link State ID."; + } + + leaf opaque-type { + type uint8; + description + "Opaque-LSA type."; + } + + leaf opaque-id { + type opaque-id; + description + "Opaque-LSA ID."; + } + + uses lsa-header; + } + container body { + description + "Decoded OSPFv2 LSA body data."; + uses ospfv2-lsa-body; + } + } + + grouping ospfv3-lsa { + description + "Decoded OSPFv3 LSA."; + container header { + description + "Decoded OSPFv3 LSA header data."; + leaf lsa-id { + type uint32; + mandatory true; + description + "OSPFv3 LSA ID."; + } + uses lsa-header; + } + container body { + description + "Decoded OSPF LSA body data."; + uses ospfv3-lsa-body; + } + } + grouping lsa-common { + description + "Common fields for OSPF LSA representation."; + leaf decode-completed { + type boolean; + description + "The OSPF LSA body was successfully decoded, except for + unknown TLVs. Unknown LSA types and OSPFv2 unknown + Opaque-LSA types are not decoded. Additionally, + malformed LSAs are generally not accepted and will + not be in the Link State Database (LSDB)."; + } + leaf raw-data { + type yang:hex-string; + description + "The hexadecimal representation of the complete LSA as + received or originated, in network byte order."; + } + } + + grouping lsa { + description + "OSPF LSA."; + uses lsa-common; + choice version { + description + "OSPFv2 or OSPFv3 LSA body."; + container ospfv2 { + description + "OSPFv2 LSA."; + uses ospfv2-lsa; + } + container ospfv3 { + description + "OSPFv3 LSA."; + uses ospfv3-lsa; + } + } + } + + grouping lsa-key { + description + "OSPF LSA key. The database key for each LSA of a given + type in the LSDB."; + leaf lsa-id { + type union { + type yang:dotted-quad; + type uint32; + } + description + "Link State ID."; + } + leaf adv-router { + type rt-types:router-id; + description + "Advertising router."; + } + } + + grouping instance-stat { + description + "Per-instance statistics."; + leaf discontinuity-time { + type yang:date-and-time; + description + "The time of the most recent occasion at which any one or + more of this OSPF instance's counters suffered a + discontinuity. If no such discontinuities have occurred + since the OSPF instance was last reinitialized, then + this node contains the time the OSPF instance was + reinitialized, which normally occurs when it was + created."; + } + leaf originate-new-lsa-count { + type yang:counter32; + description + "The number of new LSAs originated. Discontinuities in the + value of this counter can occur when the OSPF instance is + reinitialized."; + } + leaf rx-new-lsas-count { + type yang:counter32; + description + "The number of new LSAs received. Discontinuities in the + value of this counter can occur when the OSPF instance is + reinitialized."; + } + 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 modulo 2^32 sum of the LSA checksums + for AS-Scope LSAs. The value should be treated as + unsigned when comparing two sums of checksums. While + differing checksums indicate a different combination + of LSAs, equivalent checksums don't guarantee that the + LSAs are the same, given that multiple combinations of + LSAs can result in the same checksum."; + } + container database { + 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 this LSA type."; + } + leaf lsa-cksum-sum { + type uint32; + description + "The modulo 2^32 sum of the LSA checksums + for LSAs of this type. The value should be + treated as unsigned when comparing two sums of + checksums. While differing checksums indicate a + different combination of LSAs, equivalent checksums + don't guarantee that the LSAs are the same, given that + multiple combinations of LSAs can result in the same + checksum."; + } + } + } + uses instance-fast-reroute-state; + } + + grouping area-stat { + description + "Per-area statistics."; + leaf discontinuity-time { + type yang:date-and-time; + description + "The time of the most recent occasion at which any one or + more of this OSPF area's counters suffered a + discontinuity. If no such discontinuities have occurred + since the OSPF area was last reinitialized, then + this node contains the time the OSPF area was + reinitialized, which normally occurs when it was + created."; + } + leaf spf-runs-count { + type yang:counter32; + description + "The number of times the intra-area SPF has run. + Discontinuities in the value of this counter can occur + when the OSPF area is reinitialized."; + } + 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 Boundary Routers (ASBRs) + reachable within this area."; + } + leaf ar-nssa-translator-event-count { + type yang:counter32; + description + "The number of NSSA translator-state changes. + Discontinuities in the value of this counter can occur + when the OSPF area is reinitialized."; + } + 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 uint32; + description + "The modulo 2^32 sum of the LSA checksums + for area-scope LSAs. The value should be treated as + unsigned when comparing two sums of checksums. While + differing checksums indicate a different combination + of LSAs, equivalent checksums don't guarantee that the + LSAs are the same, given that multiple combinations of + LSAs can result in the same checksum."; + } + container database { + 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 this LSA type."; + } + leaf lsa-cksum-sum { + type uint32; + description + "The modulo 2^32 sum of the LSA checksums + for LSAs of this type. The value should be + treated as unsigned when comparing two sums of + checksums. While differing checksums indicate a + different combination of LSAs, equivalent checksums + don't guarantee that the LSAs are the same, given that + multiple combinations of LSAs can result in the same + checksum."; + } + } + } + } + + grouping interface-stat { + description + "Per-interface statistics."; + leaf discontinuity-time { + type yang:date-and-time; + description + "The time of the most recent occasion at which any one or + more of this OSPF interface's counters suffered a + discontinuity. If no such discontinuities have occurred + since the OSPF interface was last reinitialized, then + this node contains the time the OSPF interface was + reinitialized, which normally occurs when it was + created."; + } + leaf if-event-count { + type yang:counter32; + description + "The number of times this interface has changed its + state or an error has occurred. Discontinuities in the + value of this counter can occur when the OSPF interface + is reinitialized."; + } + 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 modulo 2^32 sum of the LSA checksums + for link-scope LSAs. The value should be treated as + unsigned when comparing two sums of checksums. While + differing checksums indicate a different combination + of LSAs, equivalent checksums don't guarantee that the + LSAs are the same, given that multiple combinations of + LSAs can result in the same checksum."; + } + container database { + 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 this LSA type."; + } + leaf lsa-cksum-sum { + type uint32; + description + "The modulo 2^32 sum of the LSA checksums + for LSAs of this type. The value should be + treated as unsigned when comparing two sums of + checksums. While differing checksums indicate a + different combination of LSAs, equivalent checksums + don't guarantee that the LSAs are the same, given that + multiple combinations of LSAs can result in the same + checksum."; + } + } + } + } + + grouping neighbor-stat { + description + "Per-neighbor statistics."; + leaf discontinuity-time { + type yang:date-and-time; + description + "The time of the most recent occasion at which any one or + more of this OSPF neighbor's counters suffered a + discontinuity. If no such discontinuities have occurred + since the OSPF neighbor was last reinitialized, then + this node contains the time the OSPF neighbor was + reinitialized, which normally occurs when the neighbor + is dynamically discovered and created."; + } + leaf nbr-event-count { + type yang:counter32; + description + "The number of times this neighbor has changed + state or an error has occurred. Discontinuities in the + value of this counter can occur when the OSPF neighbor + is reinitialized."; + } + leaf nbr-retrans-qlen { + type yang:gauge32; + description + "The current length of the retransmission queue."; + } + } + + grouping instance-fast-reroute-config { + description + "This group defines the global configuration of + IP Fast Reroute (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 Loop-Free Alternates (LFAs). + Container creation has no effect on LFA activation."; + } + } + } + + grouping instance-fast-reroute-state { + description + "IP-FRR state data grouping."; + + container protected-routes { + if-feature "fast-reroute"; + config false; + description + "Instance protection statistics."; + + list address-family-stats { + key "address-family prefix alternate"; + description + "Per-Address-Family (AF) protected prefix information."; + + leaf address-family { + type iana-rt-types:address-family; + description + "Address family."; + } + leaf prefix { + type inet:ip-prefix; + description + "Protected prefix."; + } + leaf alternate { + type inet:ip-address; + description + "Alternate next hop for the prefix."; + } + leaf alternate-type { + type enumeration { + enum equal-cost { + description + "ECMP-based alternate."; + } + enum lfa { + description + "LFA-based alternate."; + } + enum remote-lfa { + description + "Remote-LFA-based alternate."; + } + enum tunnel { + description + "Tunnel-based alternate (like RSVP-TE or GRE)."; + } + enum ti-lfa { + description + "An alternate based on Topology-Independent + Loop-Free Alternate (TI-LFA)."; + } + enum mrt { + description + "An alternate based on Maximally Redundant Trees + (MRTs)."; + } + enum other { + description + "Unknown alternate type."; + } + } + description + "Type of alternate."; + } + leaf best { + type boolean; + description + "Indicates that this alternate is preferred."; + } + leaf non-best-reason { + type string { + length "1..255"; + } + description + "Information field used to describe why the alternate + is not the best choice."; + } + leaf protection-available { + type bits { + bit node-protect { + position 0; + description + "Node protection available."; + } + bit link-protect { + position 1; + description + "Link protection available."; + } + bit srlg-protect { + position 2; + description + "Shared Risk Link Group (SRLG) protection + available."; + } + bit downstream-protect { + position 3; + description + "Downstream protection available."; + } + bit other { + position 4; + description + "Other protection available."; + } + } + description + "Protection provided by the alternate."; + } + leaf alternate-metric-1 { + type uint32; + description + "Metric from the Point of Local Repair (PLR) to + the destination through the alternate path."; + } + leaf alternate-metric-2 { + type uint32; + description + "Metric from the PLR to the alternate node."; + } + leaf alternate-metric-3 { + type uint32; + description + "Metric from the alternate node to the destination."; + } + } + } + + container unprotected-routes { + if-feature "fast-reroute"; + config false; + description + "List of prefixes that are not protected."; + + list address-family-stats { + key "address-family prefix"; + description + "Per-AF unprotected prefix statistics."; + + leaf address-family { + type iana-rt-types:address-family; + description + "Address family."; + } + leaf prefix { + type inet:ip-prefix; + description + "Unprotected prefix."; + } + } + } + + list protection-statistics { + key "frr-protection-method"; + config false; + description + "List of protection method statistics."; + + leaf frr-protection-method { + type string; + description + "Protection method used."; + } + list address-family-stats { + key "address-family"; + description + "Per-AF protection statistics."; + + leaf address-family { + type iana-rt-types:address-family; + description + "Address family."; + } + leaf total-routes { + type uint32; + description + "Total prefixes."; + } + leaf unprotected-routes { + type uint32; + description + "Total prefixes that are not protected."; + } + leaf protected-routes { + type uint32; + description + "Total prefixes that are protected."; + } + leaf linkprotected-routes { + type uint32; + description + "Total prefixes that are link protected."; + } + leaf nodeprotected-routes { + type uint32; + description + "Total prefixes that are node protected."; + } + } + } + } + + 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-enabled { + type boolean; + default "true"; + description + "Enables the interface to be used as a backup."; + } + leaf enabled { + type boolean; + default "false"; + description + "Activates an LFA. Per-prefix LFA computation + is assumed."; + } + container remote-lfa { + if-feature "remote-lfa"; + leaf enabled { + type boolean; + default "false"; + description + "Activates a Remote LFA (R-LFA)."; + } + description + "R-LFA configuration."; + } + description + "LFA configuration."; + } + description + "Interface IP-FRR configuration."; + } + } + + grouping interface-physical-link-config { + description + "Interface cost configuration that only applies to + physical interfaces (non-virtual) and sham links."; + leaf cost { + type ospf-link-metric; + description + "Interface's cost."; + } + leaf mtu-ignore { + if-feature "mtu-ignore"; + type boolean; + description + "Enables/disables bypassing the MTU mismatch check in + Database Description packets as specified in Section 10.6 + of RFC 2328."; + reference + "RFC 2328: OSPF Version 2, Section 10.6"; + } + leaf prefix-suppression { + if-feature "prefix-suppression"; + type boolean; + description + "Suppresses advertisement of the prefixes associated + with the interface."; + } + } + + grouping interface-common-config { + description + "Common configuration for all types of interfaces, + including virtual links and sham links."; + + leaf hello-interval { + type uint16; + units "seconds"; + description + "Interval between Hello packets (seconds). It must + be the same for all routers on the same network. + Different networks, implementations, and deployments + will use different Hello intervals. A sample value + for a LAN network would be 10 seconds."; + reference + "RFC 2328: OSPF Version 2, Appendix C.3"; + } + + leaf dead-interval { + type uint16; + 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-interval'."; + } + description + "Interval after which a neighbor is declared down + (seconds) if Hello packets are not received. It is + typically 3 or 4 times the 'hello-interval' period. + A typical value for LAN networks is 40 seconds."; + reference + "RFC 2328: OSPF Version 2, Appendix C.3"; + } + + leaf retransmit-interval { + type uint16 { + range "1..3600"; + } + units "seconds"; + description + "Interval between retransmitting unacknowledged Link + State Advertisements (LSAs) (seconds). This should + be well over the round-trip transmit delay for + any two routers on the network. A sample value + would be 5 seconds."; + reference + "RFC 2328: OSPF Version 2, Appendix C.3"; + } + + leaf transmit-delay { + type uint16; + units "seconds"; + description + "Estimated time needed to transmit Link State Update + (LSU) packets on the interface (seconds). LSAs have + their age incremented by this amount when advertised + on the interface. A sample value would be 1 second."; + reference + "RFC 2328: OSPF Version 2, Appendix C.3"; + } + + leaf lls { + if-feature "lls"; + type boolean; + description + "Enables/disables link-local signaling (LLS) support."; + } + + container ttl-security { + if-feature "ttl-security"; + description + "Time to Live (TTL) security checking."; + leaf enabled { + type boolean; + description + "Enables/disables TTL security checking."; + } + leaf hops { + type uint8 { + range "1..254"; + } + default "1"; + description + "Maximum number of hops that an OSPF packet may + have traversed before reception."; + } + } + leaf enabled { + type boolean; + default "true"; + description + "Enables/disables the OSPF protocol on the interface."; + } + + container authentication { + description + "Authentication configuration."; + choice auth-type-selection { + description + "Options for OSPFv2/OSPFv3 authentication + configuration."; + case ospfv2-auth { + when "derived-from-or-self(../../../../../../rt:type, " + + "'ospfv2')" { + description + "Applied to OSPFv2 only."; + } + leaf ospfv2-auth-trailer-rfc { + if-feature "ospfv2-authentication-trailer"; + type ospfv2-auth-trailer-rfc-version; + description + "Version of OSPFv2 authentication trailer support. + See RFCs 5709 and 7474."; + reference + "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication + RFC 7474: Security Extension for OSPFv2 When Using + Manual Key Management"; + } + choice ospfv2-auth-specification { + description + "Key chain or explicit key parameter specification."; + case auth-key-chain { + if-feature "key-chain"; + leaf ospfv2-key-chain { + type key-chain:key-chain-ref; + description + "Name of the key chain."; + } + } + case auth-key-explicit { + leaf ospfv2-key-id { + type uint32; + description + "Key identifier."; + } + leaf ospfv2-key { + type string; + description + "OSPFv2 authentication key. The + length of the key may be dependent on the + cryptographic algorithm."; + } + leaf ospfv2-crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + description + "Cryptographic algorithm associated with the key."; + } + } + } + } + case ospfv3-auth-ipsec { + when "derived-from-or-self(../../../../../../rt:type, " + + "'ospfv3')" { + description + "Applied to OSPFv3 only."; + } + if-feature "ospfv3-authentication-ipsec"; + leaf sa { + type string; + description + "Name of the Security Association (SA)."; + } + } + case ospfv3-auth-trailer { + when "derived-from-or-self(../../../../../../rt:type, " + + "'ospfv3')" { + description + "Applied to OSPFv3 only."; + } + if-feature "ospfv3-authentication-trailer"; + choice ospfv3-auth-specification { + description + "Key chain or explicit key parameter specification."; + case auth-key-chain { + if-feature "key-chain"; + leaf ospfv3-key-chain { + type key-chain:key-chain-ref; + description + "Name of the key chain."; + } + } + case auth-key-explicit { + leaf ospfv3-sa-id { + type uint16; + description + "Security Association (SA) Identifier."; + } + leaf ospfv3-key { + type string; + description + "OSPFv3 authentication key. The + length of the key may be dependent on the + cryptographic algorithm."; + } + leaf ospfv3-crypto-algorithm { + type identityref { + base key-chain:crypto-algorithm; + } + description + "Cryptographic algorithm associated with the key."; + } + } + } + } + } + } + } + + grouping interface-config { + description + "Configuration for normal OSPF interfaces (not virtual + or sham interfaces)."; + + leaf interface-type { + type enumeration { + enum broadcast { + description + "Specifies an OSPF broadcast multi-access network."; + } + enum non-broadcast { + description + "Specifies an OSPF Non-Broadcast Multi-Access + (NBMA) network."; + } + enum point-to-multipoint { + description + "Specifies an OSPF point-to-multipoint network."; + } + enum point-to-point { + description + "Specifies an OSPF point-to-point network."; + } + enum hybrid { + if-feature "hybrid-interface"; + description + "Specifies an OSPF hybrid broadcast / + point-to-multipoint network."; + } + } + description + "Interface type."; + } + + leaf passive { + type boolean; + description + "Enables/disables a 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 + "Enables/disables a demand circuit."; + } + + leaf priority { + type uint8; + description + "Configures OSPF router priority. In a multi-access + network, this value is for Designated Router (DR) election. + The priority is ignored on other interface types. A router + with a higher priority will be preferred in the election. + A value of 0 indicates that the router is not eligible to + become the DR or Backup DR (BDR)."; + } + + container multi-areas { + if-feature "multi-area-adj"; + description + "Container for multi-area configuration."; + list multi-area { + key "multi-area-id"; + description + "Configures an OSPF multi-area adjacency."; + leaf multi-area-id { + type area-id-type; + description + "Multi-area adjacency area ID."; + } + leaf cost { + type ospf-link-metric; + description + "Interface cost for a multi-area adjacency."; + } + } + } + + container static-neighbors { + description + "Statically configured neighbors."; + + list neighbor { + key "identifier"; + description + "Specifies a static OSPF neighbor."; + + leaf identifier { + type inet:ip-address; + description + "Neighbor's Router ID, IPv4 address, or IPv6 address."; + } + + leaf cost { + type ospf-link-metric; + description + "Interface cost. Different implementations have + different default costs, with some defaulting to a + cost inversely proportional to the interface speed. + Others will default to 1, equating the cost to a + hop count."; + } + leaf poll-interval { + type uint16; + units "seconds"; + description + "Neighbor's poll interval (seconds) for sending OSPF + Hello packets to discover the neighbor on NBMA + networks. This interval dictates the granularity for + discovery of new neighbors. A sample would be + 120 seconds (2 minutes) for a legacy Packet Data + Network (PDN) X.25 network."; + reference + "RFC 2328: OSPF Version 2, Appendix C.5"; + } + leaf priority { + type uint8; + description + "Neighbor's priority for DR election. A router with a + higher priority will be preferred in the election. + A value of 0 indicates that the router is not + eligible to become the DR or BDR."; + } + } + } + + leaf node-flag { + if-feature "node-flag"; + type boolean; + default "false"; + description + "Sets the prefix as identifying the advertising router."; + reference + "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; + } + + container bfd { + if-feature "bfd"; + description + "BFD interface configuration."; + uses bfd-types:client-cfg-parms; + reference + "RFC 5880: Bidirectional Forwarding Detection (BFD) + RFC 5881: Bidirectional Forwarding Detection + (BFD) for IPv4 and IPv6 (Single Hop) + RFC 9314: YANG Data Model for Bidirectional Forwarding + Detection (BFD)"; + } + + uses interface-fast-reroute-config; + uses interface-common-config; + uses interface-physical-link-config; + } + + grouping neighbor-state { + description + "OSPF neighbor operational state."; + + leaf address { + type inet:ip-address; + config false; + description + "Neighbor's address."; + } + leaf dr-router-id { + type rt-types:router-id; + config false; + description + "Neighbor's DR Router ID."; + } + + leaf dr-ip-addr { + type inet:ip-address; + config false; + description + "Neighbor's DR IP address."; + } + + leaf bdr-router-id { + type rt-types:router-id; + config false; + description + "Neighbor's BDR Router ID."; + } + + leaf bdr-ip-addr { + type inet:ip-address; + config false; + description + "Neighbor's BDR IP address."; + } + leaf state { + type nbr-state-type; + config false; + description + "OSPF neighbor state."; + } + leaf cost { + type ospf-link-metric; + config false; + description + "Cost to reach the neighbor for point-to-multipoint + and Hybrid networks."; + } + leaf dead-timer { + type rt-types:timer-value-seconds16; + config false; + description + "This timer tracks the remaining time before + the neighbor is declared dead."; + } + container statistics { + config false; + description + "Per-neighbor statistics."; + uses neighbor-stat; + } + } + + grouping interface-common-state { + description + "OSPF interface common operational state."; + reference + "RFC 2328: OSPF Version 2, Section 9"; + + leaf state { + type if-state-type; + config false; + description + "Interface state."; + } + + leaf hello-timer { + type rt-types:timer-value-seconds16; + config false; + description + "This timer tracks the remaining time before the + next Hello packet is sent on the interface."; + } + + leaf wait-timer { + type rt-types:timer-value-seconds16; + config false; + description + "This timer tracks the remaining time before + the interface exits the 'Waiting' state."; + } + + leaf dr-router-id { + type rt-types:router-id; + config false; + description + "DR Router ID."; + } + + leaf dr-ip-addr { + type inet:ip-address; + config false; + description + "DR IP address."; + } + + leaf bdr-router-id { + type rt-types:router-id; + config false; + description + "BDR Router ID."; + } + + leaf bdr-ip-addr { + type inet:ip-address; + config false; + description + "BDR IP address."; + } + + container statistics { + config false; + description + "Per-interface statistics."; + uses interface-stat; + } + + container neighbors { + config false; + description + "All neighbors for the interface."; + list neighbor { + key "neighbor-router-id"; + description + "List of interface OSPF neighbors."; + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor's Router ID."; + } + uses neighbor-state; + } + } + container database { + config false; + description + "Link-scope LSDB."; + list link-scope-lsa-type { + key "lsa-type"; + description + "List of OSPF link-scope LSAs."; + 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 "derived-from-or-self( " + + "../../../../../../../../../../" + + "rt:type, 'ospfv2')" { + description + "OSPFv2 LSA."; + } + } + refine "version/ospfv3/ospfv3" { + must "derived-from-or-self( " + + "../../../../../../../../../../" + + "rt:type, 'ospfv3')" { + description + "OSPFv3 LSA."; + } + } + } + } + } + } + } + } + + grouping interface-state { + description + "OSPF interface operational state."; + reference + "RFC 2328: OSPF Version 2, Section 9"; + + uses interface-common-state; + } + + grouping virtual-link-config { + description + "OSPF virtual link configuration state."; + + uses interface-common-config; + } + + grouping virtual-link-state { + description + "OSPF virtual link operational state."; + + leaf cost { + type ospf-link-metric; + config false; + description + "Virtual link interface's cost."; + } + uses interface-common-state; + } + + grouping sham-link-config { + description + "OSPF sham link configuration state."; + + uses interface-common-config; + uses interface-physical-link-config; + } + + grouping sham-link-state { + description + "OSPF sham link operational state."; + uses interface-common-state; + } + + grouping address-family-area-config { + description + "OSPF address-family-specific area configuration state."; + + container ranges { + description + "Container for summary ranges."; + + list range { + key "prefix"; + description + "Summarizes routes matching the address/mask. + Applicable to Area Border Routers (ABRs) only."; + leaf prefix { + type inet:ip-prefix; + description + "IPv4 or IPv6 prefix."; + } + leaf advertise { + type boolean; + description + "Advertise or hide."; + } + leaf cost { + type ospf-metric; + description + "Advertised cost of a summary route."; + } + } + } + } + + grouping area-common-config { + description + "OSPF area common configuration state."; + + leaf summary { + when "derived-from(../area-type,'stub-nssa-area')" { + description + "Summary advertisement into the stub area or NSSA."; + } + type boolean; + description + "Enables/disables summary advertisement into the stub + area or NSSA."; + } + leaf default-cost { + when "derived-from(../area-type,'stub-nssa-area')" { + description + "Cost for the LSA default route advertised into the + stub area or NSSA."; + } + type ospf-metric; + description + "Sets the summary default route cost for a stub area + or NSSA."; + } + } + + grouping area-config { + description + "OSPF area configuration state."; + + leaf area-type { + type identityref { + base area-type; + } + default "normal-area"; + description + "Area type."; + } + + uses area-common-config; + uses address-family-area-config; + } + + grouping area-state { + description + "OSPF area operational state."; + + container statistics { + config false; + description + "Per-area statistics."; + uses area-stat; + } + + container database { + config false; + description + "Area-scope LSDB."; + list area-scope-lsa-type { + key "lsa-type"; + description + "List of OSPF area-scope LSAs."; + leaf lsa-type { + type uint16; + description + "OSPF area-scope LSA type."; + } + container area-scope-lsas { + description + "All area-scope LSAs."; + 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 "derived-from-or-self( " + + "../../../../../../../../" + + "rt:type, 'ospfv2')" { + description + "OSPFv2 LSA."; + } + } + refine "version/ospfv3/ospfv3" { + must "derived-from-or-self( " + + "../../../../../../../../" + + "rt:type, 'ospfv3')" { + description + "OSPFv3 LSA."; + } + } + } + } + } + } + } + } + + grouping local-rib { + description + "Local RIB. RIB for routes computed by the local + OSPF routing instance."; + container local-rib { + config false; + description + "Local RIB."; + list route { + key "prefix"; + description + "OSPF instance's Local Routes."; + leaf prefix { + type inet:ip-prefix; + description + "Destination prefix."; + } + container next-hops { + description + "Next hops for the route."; + list next-hop { + description + "List of next hops for the route."; + leaf outgoing-interface { + type if:interface-ref; + description + "Name of the outgoing interface."; + } + leaf next-hop { + type inet:ip-address; + description + "Address of the next hop."; + } + } + } + leaf metric { + type uint32; + description + "Metric for this route."; + } + leaf route-type { + type route-type; + description + "Route type for this route."; + } + leaf route-tag { + type uint32; + description + "Route tag for this route."; + } + } + } + } + + grouping ietf-spf-delay { + leaf initial-delay { + type uint32; + units "milliseconds"; + default "50"; + description + "Delay used while in the 'QUIET' state (milliseconds)."; + } + leaf short-delay { + type uint32; + units "milliseconds"; + default "200"; + description + "Delay used while in the 'SHORT_WAIT' state (milliseconds)."; + } + leaf long-delay { + type uint32; + units "milliseconds"; + default "5000"; + description + "Delay used while in the 'LONG_WAIT' state (milliseconds)."; + } + leaf hold-down { + type uint32; + units "milliseconds"; + default "10000"; + description + "This timer value defines the period without any changes + for the IGP to be considered stable (milliseconds)."; + } + leaf time-to-learn { + type uint32; + units "milliseconds"; + default "500"; + description + "Duration used to learn all the IGP events + related to a single network event (milliseconds)."; + } + leaf current-state { + type enumeration { + enum quiet { + description + "'QUIET' state."; + } + enum short-wait { + description + "'SHORT_WAIT' state."; + } + enum long-wait { + description + "'LONG_WAIT' state."; + } + } + config false; + description + "Current SPF back-off algorithm state."; + } + leaf remaining-time-to-learn { + type rt-types:timer-value-milliseconds; + config false; + description + "Remaining time until the time-to-learn timer fires."; + } + leaf remaining-hold-down { + type rt-types:timer-value-milliseconds; + config false; + description + "Remaining time until the hold-down timer fires."; + } + leaf last-event-received { + type yang:timestamp; + config false; + description + "Time of the last SPF triggering event."; + } + leaf next-spf-time { + type yang:timestamp; + config false; + description + "Time when the next SPF has been scheduled."; + } + leaf last-spf-time { + type yang:timestamp; + config false; + description + "Time of the last SPF computation."; + } + description + "Grouping for IETF SPF delay configuration and state."; + reference + "RFC 8405: Shortest Path First (SPF) Back-Off Delay Algorithm + for Link-State IGPs"; + } + + grouping node-tag-config { + description + "OSPF node tag configuration state."; + container node-tags { + if-feature "node-tag"; + list node-tag { + key "tag"; + leaf tag { + type uint32; + description + "Node tag value."; + } + description + "List of node tags."; + } + description + "Container for node administrative tags."; + } + } + + grouping instance-config { + description + "OSPF instance configuration state."; + + leaf enabled { + type boolean; + default "true"; + description + "Enables/disables the protocol."; + } + + leaf explicit-router-id { + if-feature "explicit-router-id"; + type rt-types:router-id; + description + "Defined in RFC 2328. A 32-bit number + that uniquely identifies the router."; + reference + "RFC 2328: OSPF Version 2"; + } + + container preference { + description + "Route preference configuration. In many + implementations, preference is referred to as + administrative distance."; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA Version)"; + choice scope { + description + "Options for expressing preference + as single or multiple values."; + case single-value { + leaf all { + type uint8; + description + "Preference for intra-area, inter-area, and + external routes."; + } + } + case multi-values { + choice granularity { + description + "Options for expressing preference + for intra-area and inter-area routes."; + case detail { + leaf intra-area { + type uint8; + description + "Preference for intra-area routes."; + } + leaf inter-area { + type uint8; + description + "Preference for inter-area routes."; + } + } + case coarse { + leaf internal { + type uint8; + description + "Preference for both intra-area and + inter-area routes."; + } + } + } + leaf external { + type uint8; + description + "Preference for AS external and NSSA routes."; + } + } + } + } + + container nsr { + if-feature "nsr"; + description + "Non-Stop Routing (NSR) configuration state."; + leaf enabled { + type boolean; + description + "Enables/disables NSR."; + } + } + + container graceful-restart { + if-feature "graceful-restart"; + description + "Graceful restart configuration state."; + reference + "RFC 3623: Graceful OSPF Restart + RFC 5187: OSPFv3 Graceful Restart"; + leaf enabled { + type boolean; + description + "Enables/disables graceful restart as defined in RFC 3623 + for OSPFv2 and RFC 5187 for OSPFv3."; + } + leaf helper-enabled { + type boolean; + description + "Enables graceful restart helper support for restarting + routers (Section 3 of RFC 3623)."; + reference + "RFC 3623: Graceful OSPF Restart, Section 3"; + } + leaf restart-interval { + type uint16 { + range "1..1800"; + } + units "seconds"; + default "120"; + description + "Interval during which to attempt graceful restart prior + to failing (seconds) (Appendix B.1 of RFC 3623)."; + reference + "RFC 3623: Graceful OSPF Restart, Appendix B.1"; + } + leaf helper-strict-lsa-checking { + type boolean; + description + "Terminates graceful restart when an LSA topology change + is detected (Appendix B.2 of RFC 3623)."; + reference + "RFC 3623: Graceful OSPF Restart, Appendix B.2"; + } + } + + container auto-cost { + if-feature "auto-cost"; + description + "Interface auto-cost configuration state."; + leaf enabled { + type boolean; + description + "Enables/disables interface auto-cost."; + } + leaf reference-bandwidth { + when "../enabled = 'true'" { + description + "Only when auto-cost is enabled."; + } + type uint32 { + range "1..4294967"; + } + units "Mbits"; + description + "Configures reference bandwidth used to automatically + determine interface cost (Mbits). The cost is the + reference bandwidth divided by the interface speed, + with 1 being the minimum cost."; + } + } + + container spf-control { + leaf paths { + if-feature "max-ecmp"; + type uint16 { + range "1..65535"; + } + description + "Maximum number of Equal-Cost Multi-Path (ECMP) paths."; + } + container ietf-spf-delay { + if-feature "ietf-spf-delay"; + uses ietf-spf-delay; + description + "IETF SPF delay algorithm configuration."; + } + description + "SPF calculation control."; + } + + container database-control { + leaf max-lsa { + if-feature "max-lsa"; + type uint32 { + range "1..4294967294"; + } + description + "Maximum number of OSPF LSAs the router will accept."; + } + description + "Database maintenance control."; + } + + container stub-router { + if-feature "stub-router"; + description + "Sets the maximum metric configuration."; + + choice trigger { + description + "Specific triggers that will enable stub router state."; + container always { + presence "Enables unconditional stub router support"; + description + "Unconditional stub router state (advertises + transit links with 'MaxLinkMetric')."; + reference + "RFC 6987: OSPF Stub Router Advertisement"; + } + } + } + + container mpls { + description + "OSPF MPLS configuration state."; + container te-rid { + if-feature "te-rid"; + description + "Stable OSPF Router IP address used for TE."; + leaf ipv4-router-id { + type inet:ipv4-address; + description + "Explicitly configures a TE IPv4 Router ID."; + } + leaf ipv6-router-id { + type inet:ipv6-address; + description + "Explicitly configures a TE IPv6 Router ID."; + } + } + container ldp { + description + "OSPF MPLS LDP configuration state."; + leaf igp-sync { + if-feature "ldp-igp-sync"; + type boolean; + description + "Enables LDP IGP synchronization."; + } + } + } + uses instance-fast-reroute-config; + uses node-tag-config; + } + + grouping instance-state { + description + "OSPF instance operational state."; + + leaf router-id { + type rt-types:router-id; + config false; + description + "Defined in RFC 2328. A 32-bit number + that uniquely identifies the router."; + reference + "RFC 2328: OSPF Version 2"; + } + + uses local-rib; + + container statistics { + config false; + description + "Per-instance statistics."; + uses instance-stat; + } + + container database { + config false; + description + "AS-Scope LSDB."; + list as-scope-lsa-type { + key "lsa-type"; + description + "List of OSPF AS-Scope LSAs."; + leaf lsa-type { + type uint16; + description + "OSPF AS-Scope LSA type."; + } + container as-scope-lsas { + description + "All AS-Scope LSAs of this LSA type."; + list as-scope-lsa { + key "lsa-id adv-router"; + description + "List of OSPF AS-Scope LSAs."; + uses lsa-key; + uses lsa { + refine "version/ospfv2/ospfv2" { + must "derived-from-or-self( " + + "../../../../../../" + + "rt:type, 'ospfv2')" { + description + "OSPFv2 LSA."; + } + } + refine "version/ospfv3/ospfv3" { + must "derived-from-or-self( " + + "../../../../../../" + + "rt:type, 'ospfv3')" { + description + "OSPFv3 LSA."; + } + } + } + } + } + } + } + uses spf-log; + uses lsa-log; + } + + grouping multi-topology-area-common-config { + description + "OSPF multi-topology area common configuration state."; + leaf summary { + when "derived-from(../../../area-type, 'stub-nssa-area')" { + description + "Summary advertisement into the stub area or NSSA."; + } + type boolean; + description + "Enables/disables a summary advertisement into the + topology in the stub area or NSSA."; + } + leaf default-cost { + when "derived-from(../../../area-type, 'stub-nssa-area')" { + description + "Cost for the LSA default route advertised into the + topology in the stub area or NSSA."; + } + type ospf-metric; + description + "Sets the summary default route cost for a + stub area or NSSA."; + } + } + + grouping multi-topology-area-config { + description + "OSPF multi-topology area configuration state."; + + uses multi-topology-area-common-config; + uses address-family-area-config; + } + + grouping multi-topology-state { + description + "OSPF multi-topology operational state."; + + uses local-rib; + } + + grouping multi-topology-interface-config { + description + "OSPF multi-topology configuration state."; + + leaf cost { + type ospf-link-metric; + description + "Interface cost for this topology."; + } + } + + grouping ospfv3-interface-config { + description + "OSPFv3 interface-specific configuration state."; + + leaf instance-id { + type uint8; + default "0"; + description + "OSPFv3 instance ID."; + } + } + + grouping ospfv3-interface-state { + description + "OSPFv3 interface-specific operational state."; + + leaf interface-id { + type uint32; + config false; + description + "OSPFv3 interface ID."; + } + } + + grouping lsa-identifiers { + description + "The parameters that uniquely identify an LSA."; + leaf area-id { + type area-id-type; + description + "Area ID."; + } + leaf type { + type uint16; + description + "LSA type."; + } + leaf lsa-id { + type union { + type inet:ipv4-address; + type yang:dotted-quad; + } + description + "Link State ID."; + } + leaf adv-router { + type rt-types:router-id; + description + "LSA advertising router."; + } + leaf seq-num { + type uint32; + description + "LSA sequence number."; + } + } + + grouping spf-log { + description + "Grouping for the SPF log."; + container spf-log { + config false; + description + "This container lists the SPF log entries."; + list event { + key "id"; + description + "List of SPF log entries represented + as a wrapping buffer in chronological + order, with the oldest entry returned + first."; + leaf id { + type uint32; + description + "Event identifier. A purely internal value."; + } + leaf spf-type { + type enumeration { + enum full { + description + "The SPF computation was for a full SPF."; + } + enum intra { + description + "The SPF computation was only for intra-area + routes."; + } + enum inter { + description + "The SPF computation was only for inter-area + summary routes."; + } + enum external { + description + "The SPF computation was only for AS external + and NSSA routes."; + } + } + description + "The SPF computation type for the SPF log entry."; + } + leaf schedule-timestamp { + type yang:timestamp; + description + "This is the timestamp when the computation was + scheduled."; + } + leaf start-timestamp { + type yang:timestamp; + description + "This is the timestamp when the computation was + started."; + } + leaf end-timestamp { + type yang:timestamp; + description + "This is the timestamp when the computation was + completed."; + } + list trigger-lsa { + description + "The list of LSAs that triggered the computation."; + uses lsa-identifiers; + } + } + } + } + + grouping lsa-log { + description + "Grouping for the LSA log."; + container lsa-log { + config false; + description + "This container lists the LSA log entries. + Local LSA modifications are also included + in the list."; + list event { + key "id"; + description + "List of LSA log entries represented + as a wrapping buffer in chronological order, + with the oldest entry returned first."; + leaf id { + type uint32; + description + "Event identifier. A purely internal value."; + } + container lsa { + description + "This container describes the LSA that was logged."; + uses lsa-identifiers; + } + leaf received-timestamp { + type yang:timestamp; + description + "This is the timestamp when the LSA was received. + In the case of a local LSA update, the timestamp + refers to the LSA origination time."; + } + leaf reason { + type identityref { + base lsa-log-reason; + } + description + "Reason for the LSA log entry."; + } + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol" { + when "derived-from(rt:type, 'ospf')" { + description + "This augmentation is only valid for a routing protocol + instance of OSPF (type 'ospfv2' or 'ospfv3')."; + } + description + "OSPF protocol 'ietf-routing' module 'control-plane-protocol' + augmentation."; + + container ospf { + description + "OSPF protocol instance."; + + leaf address-family { + when "derived-from-or-self(../../rt:type, 'ospfv3')" { + description + "Only applicable to OSPFv3."; + } + type iana-rt-types:address-family; + description + "Address family of the instance."; + } + + uses instance-config; + uses instance-state; + + container areas { + description + "All OSPF areas."; + list area { + key "area-id"; + description + "List of OSPF areas."; + leaf area-id { + type area-id-type; + description + "Area ID."; + } + + uses area-config; + uses area-state; + + container virtual-links { + when "derived-from-or-self(../area-type, 'normal-area') " + + "and ../area-id = '0.0.0.0'" { + description + "Virtual links must be in a backbone area."; + } + description + "All virtual links."; + list virtual-link { + key "transit-area-id router-id"; + description + "OSPF virtual link."; + leaf transit-area-id { + type leafref { + path "../../../../area/area-id"; + } + must "derived-from-or-self(" + + "../../../../area[area-id=current()]" + + "/area-type, 'normal-area') and " + + "../../../../area[area-id=current()]" + + "/area-id != '0.0.0.0'" { + error-message "The virtual link transit area must " + + "not be the backbone area."; + description + "The virtual link transit area must not be the + backbone area (0.0.0.0)."; + } + description + "Virtual link transit area ID."; + } + leaf router-id { + type rt-types:router-id; + description + "Virtual link remote endpoint Router ID."; + } + + uses virtual-link-config; + uses virtual-link-state; + } + } + container sham-links { + if-feature "pe-ce-protocol"; + description + "All sham links."; + list sham-link { + key "local-id remote-id"; + description + "OSPF sham link."; + leaf local-id { + type inet:ip-address; + description + "Address of the local sham link endpoint."; + } + leaf remote-id { + type inet:ip-address; + description + "Address of the remote sham link endpoint."; + } + uses sham-link-config; + uses sham-link-state; + } + } + container interfaces { + description + "All OSPF interfaces."; + list interface { + key "name"; + description + "List of OSPF interfaces."; + leaf name { + type if:interface-ref; + description + "Interface name reference."; + } + uses interface-config; + uses interface-state; + } + } + } + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf" { + when "derived-from(../rt:type, 'ospf')" { + description + "This augmentation is only valid for OSPF + (type 'ospfv2' or 'ospfv3')."; + } + if-feature "multi-topology"; + description + "OSPF multi-topology instance configuration + state augmentation."; + container topologies { + description + "All topologies."; + list topology { + key "name"; + description + "OSPF topology. The OSPF topology address family + must coincide with the routing instance's + address family."; + leaf name { + type leafref { + path "../../../../../../rt:ribs/rt:rib/rt:name"; + } + description + "RIB name corresponding to the OSPF topology."; + } + + uses multi-topology-state; + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf/" + + "areas/area" { + when "derived-from-or-self(../../../rt:type, " + + "'ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + if-feature "multi-topology"; + description + "OSPF multi-topology area configuration state + augmentation."; + container topologies { + description + "All topologies for the area."; + list topology { + key "name"; + description + "OSPF area topology."; + leaf name { + type leafref { + path "../../../../../../../../" + + "rt:ribs/rt:rib/rt:name"; + } + description + "Single topology enabled for this area."; + } + + uses multi-topology-area-config; + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf/" + + "areas/area/interfaces/interface" { + when "derived-from-or-self(../../../../../rt:type, " + + "'ospfv2')" { + description + "This augmentation is only valid for OSPFv2."; + } + if-feature "multi-topology"; + description + "OSPF multi-topology interface configuration state + augmentation."; + container topologies { + description + "All topologies for the interface."; + list topology { + key "name"; + description + "OSPF interface topology."; + leaf name { + type leafref { + path "../../../../../../../../../../" + + "rt:ribs/rt:rib/rt:name"; + } + description + "Single topology enabled on this interface."; + } + + uses multi-topology-interface-config; + } + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf/" + + "areas/area/interfaces/interface" { + when "derived-from-or-self(../../../../../rt:type, " + + "'ospfv3')" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "OSPFv3 interface-specific configuration state + augmentation."; + uses ospfv3-interface-config; + uses ospfv3-interface-state; + } + + grouping route-content { + description + "This grouping defines OSPF-specific route attributes."; + leaf metric { + type uint32; + description + "OSPF route metric."; + } + leaf tag { + type uint32; + default "0"; + description + "OSPF route tag."; + } + leaf route-type { + type route-type; + description + "OSPF route type."; + } + } + + augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" { + when "derived-from(rt:source-protocol, 'ospf')" { + description + "This augmentation is only valid for routes whose + source protocol is OSPF."; + } + description + "OSPF-specific route attributes."; + uses route-content; + } + + /* + * RPCs + */ + + rpc clear-neighbor { + description + "This RPC request clears a particular set of OSPF neighbors. + If the operation fails for an OSPF-internal reason, then + 'error-tag' and 'error-app-tag' should be set to values + indicating the error."; + input { + leaf routing-protocol-name { + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:name"; + } + mandatory true; + description + "OSPF protocol instance for which information for neighbors + is to be cleared. + + If the referenced OSPF instance doesn't exist, then + this operation SHALL fail with an 'error-tag' setting of + 'data-missing' and an 'error-app-tag' setting of + 'routing-protocol-instance-not-found'."; + } + + leaf interface { + type if:interface-ref; + description + "Name of the OSPF interface for which neighbors are to + be cleared. + + If the referenced OSPF interface doesn't exist, then + this operation SHALL fail with an 'error-tag' setting + of 'data-missing' and an 'error-app-tag' setting of + 'ospf-interface-not-found'."; + } + } + } + + rpc clear-database { + description + "This RPC request clears a particular OSPF Link State + Database. Additionally, all neighbor adjacencies will + be forced to the DOWN state and self-originated LSAs + will be reoriginated. If the operation fails for an + OSPF-internal reason, then 'error-tag' and 'error-app-tag' + should be set to values indicating the error."; + input { + leaf routing-protocol-name { + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:name"; + } + mandatory true; + description + "OSPF protocol instance whose LSDB is to be cleared. + + If the referenced OSPF instance doesn't exist, then + this operation SHALL fail with an 'error-tag' setting of + 'data-missing' and an 'error-app-tag' setting of + 'routing-protocol-instance-not-found'."; + } + } + } + + /* + * Notifications + */ + + grouping notification-instance-hdr { + description + "This grouping describes common instance-specific + data for OSPF notifications."; + + leaf routing-protocol-name { + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/rt:name"; + } + must "derived-from( " + + "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol[rt:name=current()]/" + + "rt:type, 'ospf')"; + description + "Name of the OSPF routing protocol instance."; + } + + leaf address-family { + type leafref { + path "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol" + + "[rt:name=current()/../routing-protocol-name]/" + + "ospf/address-family"; + } + description + "Address family of the OSPF instance."; + } + } + + grouping notification-interface { + description + "This grouping provides interface information + for OSPF interface-specific notifications."; + + choice if-link-type-selection { + description + "Options for link types."; + container interface { + description + "Normal interface."; + leaf interface { + type if:interface-ref; + description + "Interface."; + } + } + container virtual-link { + description + "Virtual link."; + leaf transit-area-id { + type area-id-type; + description + "Area ID."; + } + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor's Router ID."; + } + } + container sham-link { + description + "Sham link."; + leaf area-id { + type area-id-type; + description + "Area ID."; + } + leaf local-ip-addr { + type inet:ip-address; + description + "Sham link's local address."; + } + leaf remote-ip-addr { + type inet:ip-address; + description + "Sham link's remote address."; + } + } + } + } + + grouping notification-neighbor { + description + "This grouping provides the neighbor information + for neighbor-specific notifications."; + + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor's Router ID."; + } + + leaf neighbor-ip-addr { + type inet:ip-address; + description + "Neighbor's address."; + } + } + + notification if-state-change { + uses notification-instance-hdr; + uses notification-interface; + + leaf state { + type if-state-type; + description + "Interface state."; + } + description + "This notification is sent when an interface + state change is detected."; + } + + notification if-config-error { + uses notification-instance-hdr; + uses notification-interface; + + leaf packet-source { + type inet:ip-address; + description + "Source address."; + } + + leaf packet-type { + type packet-type; + description + "OSPF packet type."; + } + + leaf error { + type enumeration { + enum bad-version { + description + "Bad version."; + } + enum area-mismatch { + description + "Area mismatch."; + } + enum unknown-nbma-nbr { + description + "Unknown NBMA neighbor."; + } + enum unknown-virtual-nbr { + description + "Unknown virtual link neighbor."; + } + enum auth-type-mismatch { + description + "Authentication type mismatch."; + } + enum auth-failure { + description + "Authentication failure."; + } + enum net-mask-mismatch { + description + "Network mask mismatch."; + } + enum hello-interval-mismatch { + description + "Hello interval mismatch."; + } + enum dead-interval-mismatch { + description + "Dead interval mismatch."; + } + enum option-mismatch { + description + "Option mismatch."; + } + enum mtu-mismatch { + description + "MTU mismatch."; + } + enum duplicate-router-id { + description + "Duplicate Router ID."; + } + enum no-error { + description + "No error."; + } + } + description + "Error codes."; + } + description + "This notification is sent when a packet is received indicating + an interface configuration error on the sending OSPF router."; + } + + notification nbr-state-change { + uses notification-instance-hdr; + uses notification-interface; + uses notification-neighbor; + + leaf state { + type nbr-state-type; + description + "Neighbor state."; + } + + description + "This notification is sent when a neighbor + state change is detected."; + } + + notification nbr-restart-helper-status-change { + uses notification-instance-hdr; + uses notification-interface; + uses notification-neighbor; + + leaf status { + type restart-helper-status-type; + description + "Restart helper status."; + } + + leaf age { + type rt-types:timer-value-seconds16; + description + "Remaining time in the current OSPF graceful restart + interval when the router is acting as a restart + helper for the neighbor."; + } + + leaf exit-reason { + type restart-exit-reason-type; + description + "Restart helper exit reason."; + } + description + "This notification is sent when a neighbor restart + helper status change is detected."; + } + + notification if-rx-bad-packet { + uses notification-instance-hdr; + uses notification-interface; + + leaf packet-source { + type inet:ip-address; + description + "Source address."; + } + + leaf packet-type { + type packet-type; + description + "OSPF packet type."; + } + + description + "This notification is sent when an OSPF packet that + cannot be parsed is received on an OSPF interface."; + } + + notification lsdb-approaching-overflow { + uses notification-instance-hdr; + + leaf ext-lsdb-limit { + type uint32; + description + "The maximum number of non-default AS-External-LSA + entries that can be stored in the LSDB."; + } + + description + "This notification is sent when the number of LSAs + in the router's LSDB has exceeded ninety percent of the + AS-External-LSA limit ('ext-lsdb-limit')."; + } + + notification lsdb-overflow { + uses notification-instance-hdr; + + leaf ext-lsdb-limit { + type uint32; + description + "The maximum number of non-default AS-External-LSA + entries that can be stored in the LSDB."; + } + + description + "This notification is sent when the number of LSAs + in the router's LSDB has exceeded the AS-External-LSA limit + ('ext-lsdb-limit')."; + } + + notification nssa-translator-status-change { + uses notification-instance-hdr; + + leaf area-id { + type area-id-type; + description + "Area ID."; + } + + leaf status { + type nssa-translator-state-type; + description + "NSSA translator status."; + } + + description + "This notification is sent when there is a change + in the router's role in translating OSPF NSSA-LSAs + to OSPF AS-External-LSAs."; + } + + notification restart-status-change { + uses notification-instance-hdr; + + leaf status { + type restart-status-type; + description + "Restart status."; + } + + leaf restart-interval { + type uint16 { + range "1..1800"; + } + units "seconds"; + default "120"; + description + "Restart interval."; + } + + leaf exit-reason { + type restart-exit-reason-type; + description + "Restart exit reason."; + } + + description + "This notification is sent when the graceful restart + state for the router has changed."; + } + } + + +4. Security Considerations + + The YANG module specified in this document defines a schema for data + that is designed to be accessed via network management protocols such + as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer + is the secure transport layer, and the mandatory-to-implement secure + transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer + is HTTPS, and the mandatory-to-implement secure transport is TLS + [RFC8446]. + + The Network Configuration Access Control Model (NACM) [RFC8341] + provides the means to restrict access for particular NETCONF or + RESTCONF users to a preconfigured subset of all available NETCONF or + RESTCONF protocol operations and content. + + There are a number of data nodes defined in this YANG module that are + writable/creatable/deletable (i.e., config true, which is the + default). These data nodes may be considered sensitive or vulnerable + in some network environments. Write operations (e.g., edit-config) + to these data nodes without proper protection can have a negative + effect on network operations. These are the subtrees and data nodes + and their sensitivity/vulnerability: + + /ospf + + /ospf/areas/ + + /ospf/areas/area[area-id] + + /ospf/virtual-links/ + + /ospf/virtual-links/virtual-link[transit-area-id router-id] + + /ospf/areas/area[area-id]/interfaces + + /ospf/areas/area[area-id]/interfaces/interface[name] + + /ospf/area/area[area-id]/sham-links + + /ospf/area/area[area-id]/sham-links/sham-link[local-id remote-id] + + Writable data nodes represent the configuration of each instance, + area, virtual link, sham link, and interface, and they correspond to + the schema nodes listed above. + + For OSPF, the ability to modify OSPF configuration will allow the + entire OSPF domain to be compromised, including peering with + unauthorized routers to misroute traffic or mount a massive Denial- + of-Service (DoS) attack. For example, adding OSPF on any unprotected + interface could allow an OSPF adjacency to be formed with an + unauthorized and malicious neighbor. Once an adjacency is formed, + traffic could be hijacked. As a simpler example, a DoS attack could + be mounted by changing the cost of an OSPF interface to be asymmetric + such that a hard routing loop ensues. In general, unauthorized + modification of most OSPF features will pose their own set of + security risks. The Security Considerations sections in the + respective reference RFCs should be consulted. + + Some of the readable data nodes in this YANG module may be considered + sensitive or vulnerable in some network environments. It is thus + important to control read access (e.g., via get, get-config, or + notification) to these data nodes. These are the subtrees and data + nodes and their sensitivity/vulnerability: + + /ospf/database + + /ospf/areas/area[area-id]/database + + /ospf/virtual-links/virtual-link[transit-area-id router- + id]/database + + /ospf/areas/area[area-id]/interfaces/interface[name]/database + + /ospf/area/area[area-id]/sham-links/sham-link[local-id remote- + id]/database + + Exposure of the Link State Database (LSDB) will in turn expose the + detailed topology of the network. There is a separate LSDB for each + instance, area, virtual link, sham link, and interface. These + correspond to the schema nodes listed above. + + Exposure of the LSDB includes information beyond the scope of the + OSPF router. This may be undesirable, since exposure may facilitate + other attacks. Additionally, in the case of an area LSDB, the + complete IP network topology and, if deployed, the TE topology of the + OSPF area can be reconstructed. Network operators may consider their + topologies to be sensitive confidential data. + + For OSPF authentication, configuration is supported via the + specification of key chains [RFC8177] or the direct specification of + a key and an authentication algorithm. Hence, authentication + configuration using the "auth-key-chain" case in the "ospfv2-auth- + specification" or "ospfv3-auth-specification" container inherits the + security considerations of [RFC8177]. This includes considerations + with respect to the local storage and handling of authentication + keys. + + Additionally, local specification of OSPF authentication keys and the + associated authentication algorithm is supported for legacy + implementations that do not support key chains [RFC8177]. It is + RECOMMENDED that implementations migrate to key chains because of + (1) seamless support of key and algorithm rollover, (2) specification + of a hexadecimal key, which affords more key entropy, and + (3) encryption of keys using the Advanced Encryption Standard (AES) + Key Wrap with Padding algorithm [RFC5649]. + + Some of the RPC operations in this YANG module may be considered + sensitive or vulnerable in some network environments. It is thus + important to control access to these operations. These are the + operations and their sensitivity/vulnerability: + + * The OSPF YANG module supports the "clear-neighbor" and "clear- + database" RPCs. If access to either of these RPCs is compromised, + temporary network outages can be employed to mount DoS attacks as + a result. + + The actual authentication key data (whether locally specified or part + of a key chain) is sensitive and needs to be kept secret from + unauthorized parties; compromise of the key data would allow an + attacker to forge OSPF traffic that would be accepted as authentic, + potentially compromising the entire OSPF domain. + +5. IANA Considerations + + This document registers a URI in the "IETF XML Registry" [RFC3688]. + Following the format in [RFC3688], the following registration has + been made: + + URI: urn:ietf:params:xml:ns:yang:ietf-ospf + Registrant Contact: The IESG. + XML: N/A; the requested URI is an XML namespace. + + This document registers a YANG module in the "YANG Module Names" + registry [RFC6020]. + + Name: ietf-ospf + Namespace: urn:ietf:params:xml:ns:yang:ietf-ospf + Prefix: ospf + Reference: RFC 9129 + +6. References + +6.1. Normative References + + [RFC1765] Moy, J., "OSPF Database Overflow", RFC 1765, + DOI 10.17487/RFC1765, March 1995, + . + + [RFC1793] Moy, J., "Extending OSPF to Support Demand Circuits", + RFC 1793, DOI 10.17487/RFC1793, April 1995, + . + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + . + + [RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, + DOI 10.17487/RFC2328, April 1998, + . + + [RFC3101] Murphy, P., "The OSPF Not-So-Stubby Area (NSSA) Option", + RFC 3101, DOI 10.17487/RFC3101, January 2003, + . + + [RFC3623] Moy, J., Pillay-Esnault, P., and A. Lindem, "Graceful OSPF + Restart", RFC 3623, DOI 10.17487/RFC3623, November 2003, + . + + [RFC3630] Katz, D., Kompella, K., and D. Yeung, "Traffic Engineering + (TE) Extensions to OSPF Version 2", RFC 3630, + DOI 10.17487/RFC3630, September 2003, + . + + [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, + DOI 10.17487/RFC3688, January 2004, + . + + [RFC4552] Gupta, M. and N. Melam, "Authentication/Confidentiality + for OSPFv3", RFC 4552, DOI 10.17487/RFC4552, June 2006, + . + + [RFC4576] Rosen, E., Psenak, P., and P. Pillay-Esnault, "Using a + Link State Advertisement (LSA) Options Bit to Prevent + Looping in BGP/MPLS IP Virtual Private Networks (VPNs)", + RFC 4576, DOI 10.17487/RFC4576, June 2006, + . + + [RFC4577] Rosen, E., Psenak, P., and P. Pillay-Esnault, "OSPF as the + Provider/Customer Edge Protocol for BGP/MPLS IP Virtual + Private Networks (VPNs)", RFC 4577, DOI 10.17487/RFC4577, + June 2006, . + + [RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. + Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", + RFC 4915, DOI 10.17487/RFC4915, June 2007, + . + + [RFC4973] Srisuresh, P. and P. Joseph, "OSPF-xTE: Experimental + Extension to OSPF for Traffic Engineering", RFC 4973, + DOI 10.17487/RFC4973, July 2007, + . + + [RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C. + Pignataro, "The Generalized TTL Security Mechanism + (GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007, + . + + [RFC5185] Mirtorabi, S., Psenak, P., Lindem, A., Ed., and A. Oswal, + "OSPF Multi-Area Adjacency", RFC 5185, + DOI 10.17487/RFC5185, May 2008, + . + + [RFC5187] Pillay-Esnault, P. and A. Lindem, "OSPFv3 Graceful + Restart", RFC 5187, DOI 10.17487/RFC5187, June 2008, + . + + [RFC5250] Berger, L., Bryskin, I., Zinin, A., and R. Coltun, "The + OSPF Opaque LSA Option", RFC 5250, DOI 10.17487/RFC5250, + July 2008, . + + [RFC5286] Atlas, A., Ed. and A. Zinin, Ed., "Basic Specification for + IP Fast Reroute: Loop-Free Alternates", RFC 5286, + DOI 10.17487/RFC5286, September 2008, + . + + [RFC5309] Shen, N., Ed. and A. Zinin, Ed., "Point-to-Point Operation + over LAN in Link State Routing Protocols", RFC 5309, + DOI 10.17487/RFC5309, October 2008, + . + + [RFC5329] Ishiguro, K., Manral, V., Davey, A., and A. Lindem, Ed., + "Traffic Engineering Extensions to OSPF Version 3", + RFC 5329, DOI 10.17487/RFC5329, September 2008, + . + + [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF + for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, + . + + [RFC5613] Zinin, A., Roy, A., Nguyen, L., Friedman, B., and D. + Yeung, "OSPF Link-Local Signaling", RFC 5613, + DOI 10.17487/RFC5613, August 2009, + . + + [RFC5642] Venkata, S., Harwani, S., Pignataro, C., and D. McPherson, + "Dynamic Hostname Exchange Mechanism for OSPF", RFC 5642, + DOI 10.17487/RFC5642, August 2009, + . + + [RFC5709] Bhatia, M., Manral, V., Fanto, M., White, R., Barnes, M., + Li, T., and R. Atkinson, "OSPFv2 HMAC-SHA Cryptographic + Authentication", RFC 5709, DOI 10.17487/RFC5709, October + 2009, . + + [RFC5714] Shand, M. and S. Bryant, "IP Fast Reroute Framework", + RFC 5714, DOI 10.17487/RFC5714, January 2010, + . + + [RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and + R. Aggarwal, "Support of Address Families in OSPFv3", + RFC 5838, DOI 10.17487/RFC5838, April 2010, + . + + [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for + the Network Configuration Protocol (NETCONF)", RFC 6020, + DOI 10.17487/RFC6020, October 2010, + . + + [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., + and A. Bierman, Ed., "Network Configuration Protocol + (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, + . + + [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure + Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, + . + + [RFC6565] Pillay-Esnault, P., Moyer, P., Doyle, J., Ertekin, E., and + M. Lundberg, "OSPFv3 as a Provider Edge to Customer Edge + (PE-CE) Routing Protocol", RFC 6565, DOI 10.17487/RFC6565, + June 2012, . + + [RFC6845] Sheth, N., Wang, L., and J. Zhang, "OSPF Hybrid Broadcast + and Point-to-Multipoint Interface Type", RFC 6845, + DOI 10.17487/RFC6845, January 2013, + . + + [RFC6860] Yang, Y., Retana, A., and A. Roy, "Hiding Transit-Only + Networks in OSPF", RFC 6860, DOI 10.17487/RFC6860, January + 2013, . + + [RFC6987] Retana, A., Nguyen, L., Zinin, A., White, R., and D. + McPherson, "OSPF Stub Router Advertisement", RFC 6987, + DOI 10.17487/RFC6987, September 2013, + . + + [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", + RFC 6991, DOI 10.17487/RFC6991, July 2013, + . + + [RFC7166] Bhatia, M., Manral, V., and A. Lindem, "Supporting + Authentication Trailer for OSPFv3", RFC 7166, + DOI 10.17487/RFC7166, March 2014, + . + + [RFC7474] Bhatia, M., Hartman, S., Zhang, D., and A. Lindem, Ed., + "Security Extension for OSPFv2 When Using Manual Key + Management", RFC 7474, DOI 10.17487/RFC7474, April 2015, + . + + [RFC7490] Bryant, S., Filsfils, C., Previdi, S., Shand, M., and N. + So, "Remote Loop-Free Alternate (LFA) Fast Reroute (FRR)", + RFC 7490, DOI 10.17487/RFC7490, April 2015, + . + + [RFC7684] Psenak, P., Gredler, H., Shakir, R., Henderickx, W., + Tantsura, J., and A. Lindem, "OSPFv2 Prefix/Link Attribute + Advertisement", RFC 7684, DOI 10.17487/RFC7684, November + 2015, . + + [RFC7770] Lindem, A., Ed., Shen, N., Vasseur, JP., Aggarwal, R., and + S. Shaffer, "Extensions to OSPF for Advertising Optional + Router Capabilities", RFC 7770, DOI 10.17487/RFC7770, + February 2016, . + + [RFC7777] Hegde, S., Shakir, R., Smirnov, A., Li, Z., and B. + Decraene, "Advertising Node Administrative Tags in OSPF", + RFC 7777, DOI 10.17487/RFC7777, March 2016, + . + + [RFC7884] Pignataro, C., Bhatia, M., Aldrin, S., and T. Ranganath, + "OSPF Extensions to Advertise Seamless Bidirectional + Forwarding Detection (S-BFD) Target Discriminators", + RFC 7884, DOI 10.17487/RFC7884, July 2016, + . + + [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", + RFC 7950, DOI 10.17487/RFC7950, August 2016, + . + + [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF + Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, + . + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, . + + [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. + Zhang, "YANG Data Model for Key Chains", RFC 8177, + DOI 10.17487/RFC8177, June 2017, + . + + [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, + "Common YANG Data Types for the Routing Area", RFC 8294, + DOI 10.17487/RFC8294, December 2017, + . + + [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", + BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, + . + + [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration + Access Control Model", STD 91, RFC 8341, + DOI 10.17487/RFC8341, March 2018, + . + + [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., + and R. Wilton, "Network Management Datastore Architecture + (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, + . + + [RFC8343] Bjorklund, M., "A YANG Data Model for Interface + Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, + . + + [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for + Routing Management (NMDA Version)", RFC 8349, + DOI 10.17487/RFC8349, March 2018, + . + + [RFC8405] Decraene, B., Litkowski, S., Gredler, H., Lindem, A., + Francois, P., and C. Bowers, "Shortest Path First (SPF) + Back-Off Delay Algorithm for Link-State IGPs", RFC 8405, + DOI 10.17487/RFC8405, June 2018, + . + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + . + + [RFC8476] Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, + "Signaling Maximum SID Depth (MSD) Using OSPF", RFC 8476, + DOI 10.17487/RFC8476, December 2018, + . + + [RFC9314] Jethanandani, M., Ed., Rahman, R., Ed., Zheng, L., Ed., + Pallagatti, S., and G. Mirsky, "YANG Data Model for + Bidirectional Forwarding Detection (BFD)", RFC 9314, + DOI 10.17487/RFC9314, September 2022, + . + +6.2. Informative References + + [RFC0905] International Organization for Standardization, "ISO + Transport Protocol specification ISO DP 8073", RFC 905, + DOI 10.17487/RFC0905, April 1984, + . + + [RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., + Coltun, R., and F. Baker, "OSPF Version 2 Management + Information Base", RFC 4750, DOI 10.17487/RFC4750, + December 2006, . + + [RFC5443] Jork, M., Atlas, A., and L. Fang, "LDP IGP + Synchronization", RFC 5443, DOI 10.17487/RFC5443, March + 2009, . + + [RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information + Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August + 2009, . + + [RFC5649] Housley, R. and M. Dworkin, "Advanced Encryption Standard + (AES) Key Wrap with Padding Algorithm", RFC 5649, + DOI 10.17487/RFC5649, September 2009, + . + + [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection + (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, + . + + [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection + (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, + DOI 10.17487/RFC5881, June 2010, + . + +Acknowledgments + + The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, + Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta, + Michael Darwish, Alan Davey, and Renato Westphal for their thorough + reviews and helpful comments. + + Thanks to Tom Petch for Last Call review and improvements to the + organization of the document. + + Thanks to Alvaro Retana for AD comments. + + Thanks to Benjamin Kaduk, Suresh Krishnan, and Roman Danyliw for IESG + review comments. + + Author affiliation with The MITRE Corporation is provided for + identification purposes only and is not intended to convey or imply + MITRE's concurrence with, or support for, the positions, opinions, or + viewpoints expressed. MITRE has approved this document for Public + Release, Distribution Unlimited, with Public Release Case Number + 18-3194. + +Contributors + + Dean Bogdanovic + Volta Networks, Inc. + Email: dean@voltanet.io + + + Kiran Koushik Agrahara Sreenivasa + Verizon + 500 W Dove Rd + Southlake, TX 76092 + United States of America + Email: kk@employees.org + + +Authors' Addresses + + Derek Yeung + Arrcus, Inc. + 2077 Gateway Place, Suite 400 + San Jose, CA 95110 + United States of America + Email: derek@arrcus.com + + + Yingzhen Qu + Futurewei + 2330 Central Expressway + Santa Clara, CA 95050 + United States of America + Email: yingzhen.qu@futurewei.com + + + Jeffrey Zhang + Juniper Networks + 10 Technology Park Drive + Westford, MA 01886 + United States of America + Email: zzhang@juniper.net + + + Ing-Wher Chen + The MITRE Corporation + Email: ingwherchen@mitre.org + + + Acee Lindem + Cisco Systems + 301 Midenhall Way + Cary, NC 27513 + United States of America + Email: acee@cisco.com -- cgit v1.2.3