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/rfc9587.txt | 1387 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1387 insertions(+) create mode 100644 doc/rfc/rfc9587.txt (limited to 'doc/rfc/rfc9587.txt') diff --git a/doc/rfc/rfc9587.txt b/doc/rfc/rfc9587.txt new file mode 100644 index 0000000..b590615 --- /dev/null +++ b/doc/rfc/rfc9587.txt @@ -0,0 +1,1387 @@ + + + + +Internet Engineering Task Force (IETF) A. Lindem +Request for Comments: 9587 LabN Consulting, L.L.C. +Category: Standards Track S. Palani +ISSN: 2070-1721 Microsoft + Y. Qu + Futurewei Technologies + June 2024 + + + YANG Data Model for OSPFv3 Extended Link State Advertisements (LSAs) + +Abstract + + This document defines a YANG data model augmenting the IETF OSPF YANG + data model (RFC 9129) to provide support for OSPFv3 Link State + Advertisement (LSA) Extensibility as defined in RFC 8362. OSPFv3 + Extended LSAs provide extensible TLV-based LSAs for the base LSA + types defined in RFC 5340. + +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/rfc9587. + +Copyright Notice + + Copyright (c) 2024 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. Overview + 2. Tree Diagrams + 3. OSPFv3 Extended LSAs + 4. OSPFv3 Extended LSA YANG Module + 5. Security Considerations + 6. IANA Considerations + 7. References + 7.1. Normative References + 7.2. Informative References + Appendix A. Configuration Example + Acknowledgements + Authors' Addresses + +1. Overview + + YANG [RFC7950] is a data definition language used to define the + contents of a conceptual datastore that allows networked devices to + be managed using NETCONF [RFC6241]. YANG is proving relevant beyond + its initial confines as bindings to other interfaces (e.g., RESTCONF + [RFC8040]) and encodings other than XML (e.g., JSON) are being + defined. 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 augmenting the IETF OSPF YANG + data model [RFC9129], which itself augments [RFC8349], to provide + support for configuration and operational state for OSPFv3 Extended + Link State Advertisements (LSAs) as defined in [RFC8362]. + + The YANG module specified in this document conforms to the Network + Management Datastore Architecture (NMDA) [RFC8342]. + +2. Tree Diagrams + + This document uses the graphical representation of data models + defined in [RFC8340]. + +3. OSPFv3 Extended LSAs + + This document defines a YANG data model for the OSPFv3 Extended LSA + feature. It is an augmentation of the OSPF base model [RFC9129] to + provide support for OSPFv3 LSA Extensibility [RFC8362]. OSPFv3 + Extended LSAs provide extensible TLV-based LSAs for the base LSA + types defined in [RFC5340]. + + The OSPFv3 Extended LSA YANG module requires support for the OSPF + base model, which defines basic OSPF configuration and state. The + OSPF YANG data model augments the "ietf-routing" YANG data model + defined in [RFC8349]. The augmentations defined in the "ietf-ospfv3- + extended-lsa" YANG module provide global configuration, area + configuration, and the addition of OSPFv3 Extended LSAs to the Link + State Database (LSDB) operational state. + + module: ietf-ospfv3-extended-lsa + + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/ospf:ospf: + +--rw extended-lsa-support? boolean + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/ospf:ospf/ospf:areas + /ospf:area: + +--rw extended-lsa-support? boolean + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area + /ospf:interfaces/ospf:interface/ospf:database + /ospf:link-scope-lsa-type/ospf:link-scope-lsas + /ospf:link-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3 + /ospf:body: + +--ro e-link + +--ro rtr-priority? uint8 + +--ro lsa-options + | +--ro lsa-options* identityref + +--ro e-link-tlvs* [] + +--ro unknown-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro intra-prefix-tlv + | +--ro metric? ospf:ospf-metric + | +--ro prefix? inet:ip-prefix + | +--ro prefix-options + | | +--ro prefix-options* identityref + | +--ro sub-tlvs* [] + | +--ro unknown-sub-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro ipv6-link-local-addr-tlv + | +--ro link-local-address? inet:ipv6-address + | +--ro sub-tlvs* [] + | +--ro unknown-sub-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro ipv4-link-local-addr-tlv + +--ro link-local-address? inet:ipv4-address + +--ro sub-tlvs* [] + +--ro unknown-sub-tlv + +--ro type? uint16 + +--ro length? uint16 + +--ro value? yang:hex-string + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area + /ospf:database/ospf:area-scope-lsa-type + /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version + /ospf:ospfv3/ospf:ospfv3/ospf:body: + +--ro e-router + | +--ro router-bits + | | +--ro rtr-lsa-bits* identityref + | +--ro lsa-options + | | +--ro lsa-options* identityref + | +--ro e-router-tlvs* [] + | +--ro unknown-tlv + | | +--ro type? uint16 + | | +--ro length? uint16 + | | +--ro value? yang:hex-string + | +--ro link-tlv + | +--ro interface-id? uint32 + | +--ro neighbor-interface-id? uint32 + | +--ro neighbor-router-id? rt-types:router-id + | +--ro type? ospf:router-link-type + | +--ro metric? ospf:ospf-link-metric + | +--ro sub-tlvs* [] + | +--ro unknown-sub-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro e-network + | +--ro lsa-options + | | +--ro lsa-options* identityref + | +--ro e-network-tlvs* [] + | +--ro unknown-tlv + | | +--ro type? uint16 + | | +--ro length? uint16 + | | +--ro value? yang:hex-string + | +--ro attached-router-tlv + | +--ro adjacent-neighbor-router-id* rt-types:router-id + +--ro e-nssa + | +--ro e-external-tlvs* [] + | +--ro unknown-tlv + | | +--ro type? uint16 + | | +--ro length? uint16 + | | +--ro value? yang:hex-string + | +--ro external-prefix-tlv + | +--ro flags + | | +--ro ospfv3-e-external-prefix-bits* identityref + | +--ro metric? ospf:ospf-metric + | +--ro prefix? inet:ip-prefix + | +--ro prefix-options + | | +--ro prefix-options* identityref + | +--ro sub-tlvs* [] + | +--ro ipv6-fwd-addr-sub-tlv + | | +--ro forwarding-address? inet:ipv6-address + | +--ro ipv4-fwd-addr-sub-tlv + | | +--ro forwarding-address? inet:ipv4-address + | +--ro route-tag-sub-tlv + | | +--ro route-tag? uint32 + | +--ro unknown-sub-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro e-inter-area-prefix + | +--ro e-inter-prefix-tlvs* [] + | +--ro unknown-tlv + | | +--ro type? uint16 + | | +--ro length? uint16 + | | +--ro value? yang:hex-string + | +--ro inter-prefix-tlv + | +--ro metric? ospf:ospf-metric + | +--ro prefix? inet:ip-prefix + | +--ro prefix-options + | | +--ro prefix-options* identityref + | +--ro sub-tlvs* [] + | +--ro unknown-sub-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro e-inter-area-router + | +--ro e-inter-router-tlvs* [] + | +--ro unknown-tlv + | | +--ro type? uint16 + | | +--ro length? uint16 + | | +--ro value? yang:hex-string + | +--ro inter-router-tlv + | +--ro lsa-options + | | +--ro lsa-options* identityref + | +--ro metric? ospf:ospf-metric + | +--ro destination-router-id? rt-types:router-id + | +--ro sub-tlvs* [] + | +--ro unknown-sub-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro e-intra-area-prefix + +--ro referenced-ls-type? uint16 + +--ro referenced-link-state-id? uint32 + +--ro referenced-adv-router? rt-types:router-id + +--ro e-intra-prefix-tlvs* [] + +--ro unknown-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro intra-prefix-tlv + +--ro metric? ospf:ospf-metric + +--ro prefix? inet:ip-prefix + +--ro prefix-options + | +--ro prefix-options* identityref + +--ro sub-tlvs* [] + +--ro unknown-sub-tlv + +--ro type? uint16 + +--ro length? uint16 + +--ro value? yang:hex-string + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/ospf:ospf/ospf:database + /ospf:as-scope-lsa-type/ospf:as-scope-lsas + /ospf:as-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3 + /ospf:body: + +--ro e-as-external + +--ro e-external-tlvs* [] + +--ro unknown-tlv + | +--ro type? uint16 + | +--ro length? uint16 + | +--ro value? yang:hex-string + +--ro external-prefix-tlv + +--ro flags + | +--ro ospfv3-e-external-prefix-bits* identityref + +--ro metric? ospf:ospf-metric + +--ro prefix? inet:ip-prefix + +--ro prefix-options + | +--ro prefix-options* identityref + +--ro sub-tlvs* [] + +--ro ipv6-fwd-addr-sub-tlv + | +--ro forwarding-address? inet:ipv6-address + +--ro ipv4-fwd-addr-sub-tlv + | +--ro forwarding-address? inet:ipv4-address + +--ro route-tag-sub-tlv + | +--ro route-tag? uint32 + +--ro unknown-sub-tlv + +--ro type? uint16 + +--ro length? uint16 + +--ro value? yang:hex-string + +4. OSPFv3 Extended LSA YANG Module + + The following RFCs are not referenced in the document text but are + referenced in the "ietf-ospfv3-extended-lsa.yang" module: [RFC6991] + and [RFC8294]. + + file "ietf-ospfv3-extended-lsa@2024-06-07.yang" + module ietf-ospfv3-extended-lsa { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ospfv3-extended-lsa"; + prefix ospfv3-e-lsa; + + import ietf-routing-types { + prefix rt-types; + reference + "RFC 8294: Common YANG Data Types for the Routing Area"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-routing { + prefix rt; + reference + "RFC 8349: A YANG Data Model for Routing + Management (NMDA Version)"; + } + import ietf-ospf { + prefix ospf; + reference + "RFC 9129: YANG Data Model for the OSPF Protocol"; + } + + organization + "IETF LSR - Link State Routing Working Group"; + contact + "WG Web: + WG List: + + Author: Acee Lindem + + Author: Sharmila Palani + + Author: Yingzhen Qu + "; + description + "This YANG module defines the configuration and operational + state for OSPFv3 Extended LSAs, which is common across all + vendor implementations. The semantics and encodings for + OSPFv3 Extended LSAs are described in RFC 8362. OSPFv3 + Extended LSAs provide extensible TLV-based LSAs for the base + LSA types defined in RFC 5340. + + This YANG data model conforms to the Network Management + Datastore Architecture (NMDA) as described in RFC 8342. + + Copyright (c) 2024 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 9587; see the + RFC itself for full legal notices."; + + reference + "RFC 9587: YANG Data Model for OSPFv3 Extended Link State + Advertisements (LSAs)"; + + revision 2024-06-07 { + description + "Initial revision."; + reference + "RFC 9587: YANG Data Model for OSPFv3 Extended Link State + Advertisements (LSAs)"; + } + + /* + * OSPFv3 Extended LSA Type Identities + */ + + identity ospfv3-e-router-lsa { + base ospf:ospfv3-lsa-type; + description + "OSPFv3 E-Router-LSA - Type 0xA021."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.1"; + } + + identity ospfv3-e-network-lsa { + base ospf:ospfv3-lsa-type; + description + "OSPFv3 E-Network-LSA - Type 0xA022."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.2"; + } + + identity ospfv3-e-summary-lsa-type { + base ospf:ospfv3-lsa-type; + description + "OSPFv3 Extended Summary LSA types: + E-Inter-Area-Prefix-LSA and E-Inter-Area-Router-LSA."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Sections 4.3 and 4.4"; + } + + identity ospfv3-e-inter-area-prefix-lsa { + base ospfv3-e-summary-lsa-type; + description + "OSPFv3 E-Inter-Area-Prefix-LSA - Type 0xA023."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.3"; + } + + identity ospfv3-e-inter-area-router-lsa { + base ospfv3-e-summary-lsa-type; + description + "OSPFv3 E-Inter-Area-Router-LSA - Type 0xA024."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.4"; + } + + identity ospfv3-e-external-lsa-type { + base ospf:ospfv3-lsa-type; + description + "OSPFv3 Extended External LSA types: + E-AS-External-LSA and E-NSSA-LSA (where + NSSA expands to Not-So-Stubby-Area)."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Sections 4.5 and 4.6"; + } + + identity ospfv3-e-as-external-lsa { + base ospfv3-e-external-lsa-type; + description + "OSPFv3 E-AS-External-LSA - Type 0xC025."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.5"; + } + + identity ospfv3-e-nssa-lsa { + base ospfv3-e-external-lsa-type; + description + "OSPFv3 E-NSSA-LSA - Type 0xA027."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.6"; + } + + identity ospfv3-e-link-lsa { + base ospf:ospfv3-lsa-type; + description + "OSPFv3 E-Link-LSA - Type 0x8028."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.7"; + } + + identity ospfv3-e-intra-area-prefix-lsa { + base ospf:ospfv3-lsa-type; + description + "OSPFv3 E-Intra-Area-Prefix-LSA - Type 0xA029."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.8"; + } + + identity ospfv3-e-prefix-option { + description + "Base identity for OSPFv3 prefix options."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1"; + } + + identity nu-bit { + base ospfv3-e-prefix-option; + description + "When set, the prefix should be excluded + from IPv6 unicast calculations."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1 + RFC 5340: OSPF for IPv6, Appendix A.4.1.1"; + } + + identity la-bit { + base ospfv3-e-prefix-option; + description + "When set, the prefix is actually an IPv6 interface + address of the advertising router."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1 + RFC 5340: OSPF for IPv6, Appendix A.4.1.1"; + } + + identity p-bit { + base ospfv3-e-prefix-option; + description + "When set, the NSSA prefix should be translated to an + E-AS-External-LSA and advertised by the translating + NSSA Border Router."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1 + RFC 5340: OSPF for IPv6, Appendix A.4.1.1"; + } + + identity dn-bit { + base ospfv3-e-prefix-option; + description + "When set, the E-Inter-Area-Prefix-LSA or + E-AS-External-LSA prefix has been advertised as an + L3VPN prefix."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1 + RFC 5340: OSPF for IPv6, Appendix A.4.1.1"; + } + + identity n-bit { + base ospfv3-e-prefix-option; + description + "When set, the prefix is a host address that identifies + the advertising router."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1 + RFC 5340: OSPF for IPv6, Appendix A.4.1.1"; + } + + identity ospfv3-e-external-prefix-option { + description + "Base identity for OSPFv3 external prefix options."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.6"; + } + + identity e-bit { + base ospfv3-e-external-prefix-option; + description + "When the E-bit is set, the metric specified is a Type 2 + external metric. This means the metric is considered larger + than any intra-AS path. When the E-bit is clear, the + specified metric is a Type 1 external metric. This means + that it is expressed in the same units as other LSAs (i.e., + the same units as the interface costs in Router-LSAs)."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.6"; + } + + grouping unknown-sub-tlv { + description + "Unknown TLV grouping."; + container unknown-sub-tlv { + uses ospf:tlv; + description + "Unknown External TLV sub-TLV."; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 6.3"; + } + + 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-e-prefix-option; + } + description + "OSPFv3 prefix options flag list. This list will + contain the identities for the OSPFv3 options + that are set for the OSPFv3 prefix."; + } + description + "Prefix options."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.1"; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3"; + } + + grouping external-prefix-tlv { + container external-prefix-tlv { + description + "External-Prefix TLV."; + container flags { + leaf-list ospfv3-e-external-prefix-bits { + type identityref { + base ospfv3-e-external-prefix-option; + } + description + "OSPFv3 External-Prefix TLV bits list."; + } + description + "External prefix flags."; + } + leaf metric { + type ospf:ospf-metric; + description + "External prefix metric."; + } + uses ospfv3-lsa-prefix; + list sub-tlvs { + description + "External-Prefix TLV sub-TLVs."; + container ipv6-fwd-addr-sub-tlv { + description + "IPv6-Forwarding-Address sub-TLV for + E-AS-External-LSAs and E-NSSA-LSAs for the IPv6 + address family."; + leaf forwarding-address { + type inet:ipv6-address; + description + "IPv6 forwarding address."; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.10"; + } + container ipv4-fwd-addr-sub-tlv { + description + "IPv4-Forwarding-Address sub-TLV for + E-AS-External-LSAs and E-NSSA-LSAs for the IPv4 + address family."; + leaf forwarding-address { + type inet:ipv4-address; + description + "IPv4 forwarding address."; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.11"; + } + container route-tag-sub-tlv { + description + "Route-Tag sub-TLV."; + leaf route-tag { + type uint32; + description + "Route tag."; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.12"; + } + uses unknown-sub-tlv; + } + } + description + "External-Prefix TLV grouping."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.6"; + } + + grouping intra-area-prefix-tlv { + container intra-prefix-tlv { + description + "Intra-Area-Prefix-LSA TLV."; + leaf metric { + type ospf:ospf-metric; + description + "Intra-Area Prefix metric."; + } + uses ospfv3-lsa-prefix; + list sub-tlvs { + description + "Intra-Area-Prefix TLV sub-TLVs."; + uses unknown-sub-tlv; + } + } + description + "Intra-Area-Prefix TLV grouping."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.7"; + } + + grouping ipv6-link-local-addr-tlv { + container ipv6-link-local-addr-tlv { + description + "IPv6 Link-Local Address TLV."; + leaf link-local-address { + type inet:ipv6-address; + description + "IPv6 Link-Local address."; + } + list sub-tlvs { + description + "IPv6 Link-Local Address TLV sub-TLVs."; + uses unknown-sub-tlv; + } + } + description + "IPv6 Link-Local Address TLV grouping."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.8"; + } + + grouping ipv4-link-local-addr-tlv { + container ipv4-link-local-addr-tlv { + description + "IPv4 Link-Local Address TLV."; + leaf link-local-address { + type inet:ipv4-address; + description + "IPv4 Link-Local address."; + } + list sub-tlvs { + description + "IPv4 Link-Local Address TLV sub-TLVs."; + uses unknown-sub-tlv; + } + } + description + "IPv4 Link-Local Address TLV grouping."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 3.9"; + } + + /* Configuration */ + + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/ospf:ospf" { + when "../rt:type = 'ospf:ospfv3'" { + description + "This augments the OSPFv3 routing protocol when used."; + } + description + "This augments the OSPFv3 protocol instance-level + configuration with Extended LSA support. When enabled, + OSPFv3 Extended LSAs will be advertised and OSPFv3 Legacy + LSAs will not be advertised. When disabled, OSPFv3 Legacy + LSAs will be advertised. However, OSPFv3 Extended LSAs + could still be advertised in Extended LSA Sparse Mode to + support incrementally deployed features as described in + Section 6.2 of RFC 8362."; + leaf extended-lsa-support { + type boolean; + default "false"; + description + "Enable OSPFv3 Extended LSA support for the OSPFv3 + domain."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Appendix A - Global Configuration Support"; + } + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/ospf:ospf/ospf:" + + "areas/ospf:area" { + when "../../../rt:type = 'ospf:ospfv3'" { + description + "This augments the OSPFv3 protocol area-level + configuration when used."; + } + description + "This augments the OSPFv3 protocol area-level + configuration with Extended LSA support."; + leaf extended-lsa-support { + type boolean; + must "derived-from(../ospf:area-type,'stub-nssa-area') or " + + "(current() = 'true') or " + + "(../../../extended-lsa-support = 'false')" { + description + "For regular areas, i.e., areas where AS-scoped LSAs + are flooded, disabling AreaExtendedLSASupport at the + area level is prohibited when ExtendedLSASupport is + enabled at the instance level. E-AS-External-LSAs + are flooded into all OSPFv3 regular areas (i.e., not + a stub or an NSSA), and disabling support at the + area level is not possible."; + } + description + "This augments the OSPFv3 protocol area-level + configuration with Extended LSA support. When enabled, + OSPFv3 Extended LSAs will be advertised and OSPFv3 Legacy + LSAs will not be advertised. When disabled, OSPFv3 + Legacy LSAs will be advertised. However, OSPFv3 Extended + LSAs could still be advertised in Extended LSA Sparse + Mode to support incrementally deployed features as + described in Section 6.2 of RFC 8362. If not specified, + Extended LSA support status is inherited from the + instance-level configuration."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Appendix B - Area Configuration Support"; + } + } + + /* + * Link State Database (LSDB) Augmentations + */ + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/" + + "ospf:interfaces/ospf:interface/ospf:database/" + + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" + + "ospf:link-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body" { + when "../../../../../../../../../../../" + + "rt:type = 'ospf:ospfv3'" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "This augmentation adds OSPFv3 Link-scoped Extended LSAs + to the operational state for an interface Link State + Database (LSDB)."; + container e-link { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-link-lsa'" { + description + "Only applies to E-Link-LSAs."; + } + description + "E-Link-LSA contents."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.7"; + leaf rtr-priority { + type uint8; + description + "Router priority for the interface."; + } + uses ospf:ospfv3-lsa-options; + list e-link-tlvs { + description + "E-Link-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-Link TLV."; + } + uses intra-area-prefix-tlv; + uses ipv6-link-local-addr-tlv; + uses ipv4-link-local-addr-tlv; + } + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" + + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body" { + when "../../../../../../../../../" + + "rt:type = 'ospf:ospfv3'" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "This augmentation adds OSPFv3 Area-scoped Extended LSAs + to the operational state for an area LSDB."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4"; + container e-router { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-router-lsa'" { + description + "Only valid for OSPFv3 E-Router-LSAs."; + } + description + "OSPFv3 E-Router-LSA contents."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.1"; + uses ospf:ospf-router-lsa-bits; + uses ospf:ospfv3-lsa-options; + list e-router-tlvs { + description + "E-Router-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-Router TLV."; + } + container link-tlv { + description + "E-Router-LSA TLV."; + leaf interface-id { + type uint32; + description + "Interface ID for link."; + } + leaf neighbor-interface-id { + type uint32; + description + "Neighbor's Interface ID for link."; + } + leaf neighbor-router-id { + type rt-types:router-id; + description + "Neighbor's Router ID for link."; + } + leaf type { + type ospf:router-link-type; + description + "Link type: 1 - Point-to-Point Link + 2 - Transit Network Link + 3 - Stub Network Link + 4 - Virtual Link."; + } + leaf metric { + type ospf:ospf-link-metric; + description + "Link metric."; + } + list sub-tlvs { + description + "Link TLV sub-TLVs."; + uses unknown-sub-tlv; + } + } + } + } + container e-network { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-network-lsa'" { + description + "Only applies to E-Network-LSAs."; + } + description + "E-Network-LSA contents."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.2"; + uses ospf:ospfv3-lsa-options; + list e-network-tlvs { + description + "E-Network-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-Network TLV."; + } + container attached-router-tlv { + description + "Attached-Routers TLV."; + leaf-list adjacent-neighbor-router-id { + type rt-types:router-id; + description + "Adjacent neighbor's Router ID."; + } + } + } + } + container e-nssa { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-nssa-lsa'" { + description + "Only applies to E-NSSA-LSAs."; + } + description + "E-NSSA-LSA contents."; + list e-external-tlvs { + description + "E-NSSA-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-External TLV."; + } + uses external-prefix-tlv; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.6"; + } + container e-inter-area-prefix { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-inter-area-prefix-lsa'" { + description + "Only applies to E-Inter-Area-Prefix-LSAs."; + } + description + "E-Inter-Area-Prefix-LSA contents."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.3"; + list e-inter-prefix-tlvs { + description + "E-Inter-Area-Prefix-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-Inter-Area-Prefix TLV."; + } + container inter-prefix-tlv { + description + "Unknown E-Inter-Area-Prefix-LSA TLV."; + leaf metric { + type ospf:ospf-metric; + description + "Inter-Area Prefix metric."; + } + uses ospfv3-lsa-prefix; + list sub-tlvs { + description + "Inter-Area-Prefix TLV sub-TLVs."; + uses unknown-sub-tlv; + } + } + } + } + container e-inter-area-router { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-inter-area-router-lsa'" { + description + "Only applies to E-Inter-Area-Router-LSAs."; + } + description + "E-Inter-Area-Router-LSA contents."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.4"; + list e-inter-router-tlvs { + description + "E-Inter-Area-Router-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-Inter-Area-Router TLV."; + } + container inter-router-tlv { + description + "Unknown E-Inter-Area-Router-LSA TLV."; + uses ospf:ospfv3-lsa-options; + leaf metric { + type ospf:ospf-metric; + description + "Inter-Area Router metric."; + } + leaf destination-router-id { + type rt-types:router-id; + description + "Destination Router ID."; + } + list sub-tlvs { + description + "Inter-Area-Router TLV sub-TLVs."; + uses unknown-sub-tlv; + } + } + } + } + container e-intra-area-prefix { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-intra-area-prefix-lsa'" { + description + "Only applies to E-Intra-Area-Prefix-LSAs."; + } + description + "E-Intra-Area-Prefix-LSA contents."; + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.8"; + leaf referenced-ls-type { + type uint16; + description + "Referenced Link State 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."; + } + list e-intra-prefix-tlvs { + description + "E-Intra-Area-Prefix-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-Intra-Area-Prefix TLV."; + } + uses intra-area-prefix-tlv; + } + } + } + + augment "/rt:routing/" + + "rt:control-plane-protocols/rt:control-plane-protocol/" + + "ospf:ospf/ospf:database/" + + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/" + + "ospf:ospfv3/ospf:body" { + when "../../../../../../../" + + "rt:type = 'ospf:ospfv3'" { + description + "This augmentation is only valid for OSPFv3."; + } + description + "This augmentation adds OSPFv3 AS-scoped Extended LSAs to + the operational state for an AS instance-level LSDB."; + container e-as-external { + when "../../ospf:header/ospf:type = " + + "'ospfv3-e-lsa:ospfv3-e-as-external-lsa'" { + description + "Only applies to E-AS-External-LSAs."; + } + description + "E-AS-External-LSA contents."; + list e-external-tlvs { + description + "E-AS-External-LSA TLVs."; + container unknown-tlv { + uses ospf:tlv; + description + "Unknown E-External TLV."; + } + uses external-prefix-tlv; + } + reference + "RFC 8362: OSPFv3 Link State Advertisement (LSA) + Extensibility, Section 4.5"; + } + } + } + + +5. 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 the "ietf-ospfv3- + extended-lsa.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/extended-lsa-support + + /ospf:ospf/ospf:areas/ospf:area/extended-lsa-support + + The ability to disable or enable OSPFv3 Extended LSA support can + result in a Denial-of-Service (DoS) attack, since OSPFv3 routers will + use solely OSPFv3 Extended LSAs or OSPFv3 Legacy LSAs for the OSPFv3 + SPF computation. OSPFv3 routers using different types of LSAs will + result in incomplete reachability and possible partitioning of the + OSPFv3 routing domain. Refer to Section 6 of [RFC8362] for more + information on OSPFv3 Extended LSA compatibility. + + Some of the readable data nodes in the "ietf-ospfv3-extended- + lsa.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. + + Exposing the Link State Database (LSDB) will in turn expose the + detailed topology of the network. This includes topological + information from other routers. This may be undesirable due to the + fact that exposure may facilitate other attacks. Additionally, + network operators may consider their topologies to be sensitive + confidential data. + +6. IANA Considerations + + Per this document, IANA has registered the following URI in the "IETF + XML Registry" [RFC3688]: + + URI: urn:ietf:params:xml:ns:yang:ietf-ospfv3-extended-lsa + Registrant Contact: The IESG. + XML: N/A; the requested URI is an XML namespace. + + Per this document, IANA has registered the following YANG module in + the "YANG Module Names" registry [RFC6020]: + + Name: ietf-ospfv3-extended-lsa + Maintained by IANA: N + Namespace: urn:ietf:params:xml:ns:yang:ietf-ospfv3-extended-lsa + Prefix: ospfv3-e-lsa + Reference: RFC 9587 + +7. References + +7.1. Normative References + + [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, + DOI 10.17487/RFC3688, January 2004, + . + + [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF + for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, + . + + [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, + . + + [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", + RFC 6991, DOI 10.17487/RFC6991, July 2013, + . + + [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, + . + + [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, + . + + [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, + . + + [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, + . + + [RFC8362] Lindem, A., Roy, A., Goethals, D., Reddy Vallem, V., and + F. Baker, "OSPFv3 Link State Advertisement (LSA) + Extensibility", RFC 8362, DOI 10.17487/RFC8362, April + 2018, . + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + . + + [RFC9129] Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, + "YANG Data Model for the OSPF Protocol", RFC 9129, + DOI 10.17487/RFC9129, October 2022, + . + + [W3C.REC-xml-20081126] + Bray, T., Paoli, J., Sperberg-McQueen, C. M., Maler, E., + and F. Yergeau, "Extensible Markup Language (XML) 1.0 + (Fifth Edition)", W3C Recommendation REC-xml-20081126, + November 2008, . + +7.2. Informative References + + [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", + RFC 7951, DOI 10.17487/RFC7951, August 2016, + . + + [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", + BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, + . + + [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, + "Handling Long Lines in Content of Internet-Drafts and + RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, + . + +Appendix A. Configuration Example + + The following is an XML example (per [W3C.REC-xml-20081126]) using + the YANG data model for OSPFv3 Extended LSAs. (Line breaks are used + per [RFC8792] and are for display purposes only.) + + Note: '\' line wrapping per RFC 8792. + + + + 192.0.2.1 + + + \ + ospf:ospfv3 + "OSPFv3" + + true + + + + + + The following is the same example using JSON format [RFC7951]. + + { + "routing": { + "router-id": "192.0.2.1", + "control-plane-protocols": { + "control-plane-protocol": { + "type": "ospf:ospfv3", + "name": "\"OSPFv3\"", + "ospf": { + "extended-lsa-support": true + } + } + } + } + } + +Acknowledgements + + The YANG data model defined in this document was developed using the + suite of YANG tools written and maintained by numerous authors. + + Thanks much to Tom Petch, Mahesh Jethanandani, Renato Westphal, + Victoria Pritchard, Reshad Rahman, and Chris Hopps for their review + and comments. + +Authors' Addresses + + Acee Lindem + LabN Consulting, L.L.C. + 301 Midenhall Way + Cary, NC 27513 + United States of America + Email: acee.ietf@gmail.com + + + Sharmila Palani + Microsoft + 1 Microsoft Way + Redmond, WA 98052 + United States of America + Email: sharmila.palani@microsoft.com + + + Yingzhen Qu + Futurewei Technologies + 2330 Central Expressway + Santa Clara, CA 95050 + United States of America + Email: yingzhen.ietf@gmail.com -- cgit v1.2.3