| < draft-ietf-ospf-sr-yang-09.txt | draft-ietf-ospf-sr-yang-10.txt > | |||
|---|---|---|---|---|
| Internet D. Yeung | Internet D. Yeung | |||
| Internet-Draft Arrcus | Internet-Draft Arrcus | |||
| Intended status: Standards Track Y. Qu | Intended status: Standards Track Y. Qu | |||
| Expires: February 8, 2020 Futurewei | Expires: February 14, 2020 Futurewei | |||
| J. Zhang | J. Zhang | |||
| Juniper Networks | Juniper Networks | |||
| I. Chen | I. Chen | |||
| The MITRE Corporation | The MITRE Corporation | |||
| A. Lindem | A. Lindem | |||
| Cisco Systems | Cisco Systems | |||
| August 7, 2019 | August 13, 2019 | |||
| YANG Data Model for OSPF SR (Segment Routing) Protocol | YANG Data Model for OSPF SR (Segment Routing) Protocol | |||
| draft-ietf-ospf-sr-yang-09 | draft-ietf-ospf-sr-yang-10 | |||
| Abstract | Abstract | |||
| This document defines a YANG data model that can be used to configure | This document defines a YANG data model that can be used to configure | |||
| and manage OSPF Segment Routing. The model is based on YANG 1.1 as | and manage OSPF Segment Routing. The model is based on YANG 1.1 as | |||
| defined in RFC 7950 and conforms to the Network Management Datastore | defined in RFC 7950 and conforms to the Network Management Datastore | |||
| Architecture (NDMA) as described in RFC 8342. | Architecture (NDMA) as described in RFC 8342. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on February 8, 2020. | This Internet-Draft will expire on February 14, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 18 ¶ | skipping to change at page 2, line 18 ¶ | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 2 | 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. OSPF Segment Routing . . . . . . . . . . . . . . . . . . . . 3 | 3. OSPF Segment Routing . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. OSPF Segment Routing YANG Module . . . . . . . . . . . . . . 7 | 4. OSPF Segment Routing YANG Module . . . . . . . . . . . . . . 7 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | |||
| 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 21 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 21 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 22 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 23 | 7.2. Informative References . . . . . . . . . . . . . . . . . 24 | |||
| Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 24 | Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 25 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 1. Overview | 1. Overview | |||
| YANG [RFC6020] [RFC7950] is a data definition language used to define | YANG [RFC6020] [RFC7950] is a data definition language used to define | |||
| the contents of a conceptual data store that allows networked devices | the contents of a conceptual data store that allows networked devices | |||
| to be managed using NETCONF [RFC6241]. YANG is proving relevant | to be managed using NETCONF [RFC6241]. YANG is proving relevant | |||
| beyond its initial confines, as bindings to other interfaces (e.g., | beyond its initial confines, as bindings to other interfaces (e.g., | |||
| ReST) and encodings other than XML (e.g., JSON) are being defined. | ReST) and encodings other than XML (e.g., JSON) are being defined. | |||
| Furthermore, YANG data models can be used as the basis for | Furthermore, YANG data models can be used as the basis for | |||
| implementation of other interfaces, such as CLI and programmatic | implementation of other interfaces, such as CLI and programmatic | |||
| skipping to change at page 3, line 23 ¶ | skipping to change at page 3, line 23 ¶ | |||
| etf-ospf-segment-routing-extensions][I-D.ietf-ospf-ospfv3-segment-rou | etf-ospf-segment-routing-extensions][I-D.ietf-ospf-ospfv3-segment-rou | |||
| ting-extensions]. It is an augmentation of the OSPF base model. | ting-extensions]. It is an augmentation of the OSPF base model. | |||
| The OSPF SR YANG module requires support for the base segment routing | The OSPF SR YANG module requires support for the base segment routing | |||
| module [I-D.ietf-spring-sr-yang], which defines the global segment | module [I-D.ietf-spring-sr-yang], which defines the global segment | |||
| routing configuration independent of any specific routing protocol | routing configuration independent of any specific routing protocol | |||
| configuration, and support of OSPF base model[I-D.ietf-ospf-yang] | configuration, and support of OSPF base model[I-D.ietf-ospf-yang] | |||
| which defines basic OSPF configuration and state. | which defines basic OSPF configuration and state. | |||
| module: ietf-ospf-sr | module: ietf-ospf-sr | |||
| module: ietf-ospf-sr | ||||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf: | /rt:control-plane-protocol/ospf:ospf: | |||
| +--rw segment-routing | +--rw segment-routing | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| | +--rw bindings | | +--rw bindings | |||
| | +--rw advertise | | +--rw advertise | |||
| | | +--rw policies* string | | | +--rw policies* string | |||
| | +--rw receive? boolean | | +--rw receive? boolean | |||
| +--rw protocol-srgb {sr:protocol-srgb}? | +--rw protocol-srgb {sr:protocol-srgb}? | |||
| +--rw srgb* [lower-bound upper-bound] | +--rw srgb* [lower-bound upper-bound] | |||
| skipping to change at page 4, line 4 ¶ | skipping to change at page 3, line 52 ¶ | |||
| | +--rw value uint32 | | +--rw value uint32 | |||
| | +--rw protected? boolean | | +--rw protected? boolean | |||
| +--rw advertise-adj-group-sid* [group-id] | +--rw advertise-adj-group-sid* [group-id] | |||
| | +--rw group-id uint32 | | +--rw group-id uint32 | |||
| +--rw advertise-protection? enumeration | +--rw advertise-protection? enumeration | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:areas | /rt:control-plane-protocol/ospf:ospf/ospf:areas | |||
| /ospf:area/ospf:interfaces/ospf:interface/ospf:fast-reroute: | /ospf:area/ospf:interfaces/ospf:interface/ospf:fast-reroute: | |||
| +--rw ti-lfa {ti-lfa}? | +--rw ti-lfa {ti-lfa}? | |||
| +--rw enable? boolean | +--rw enable? boolean | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:areas | /rt:control-plane-protocol/ospf:ospf/ospf:areas | |||
| /ospf:area/ospf:interfaces/ospf:interface/ospf:database | /ospf:area/ospf:interfaces/ospf:interface/ospf:database | |||
| /ospf:link-scope-lsa-type/ospf:link-scope-lsas | /ospf:link-scope-lsa-type/ospf:link-scope-lsas | |||
| /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 | /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 | |||
| /ospf:body/ospf:opaque/ospf:extended-prefix-opaque | /ospf:body/ospf:opaque/ospf:extended-prefix-opaque | |||
| /ospf:extended-prefix-tlv: | /ospf:extended-prefix-tlv: | |||
| +--ro perfix-sid-sub-tlvs | +--ro perfix-sid-sub-tlvs | |||
| +--ro prefix-sid-sub-tlv* | +--ro prefix-sid-sub-tlv* | |||
| +--ro flags? bits | +--ro prefix-sid-flags | |||
| +--ro mt-id? uint8 | | +--ro bits* identityref | |||
| +--ro algorithm? uint8 | +--ro mt-id? uint8 | |||
| +--ro sid? uint32 | +--ro algorithm? uint8 | |||
| +--ro sid? uint32 | ||||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:areas | /rt:control-plane-protocol/ospf:ospf/ospf:areas | |||
| /ospf:area/ospf:database/ospf:area-scope-lsa-type | /ospf:area/ospf:database/ospf:area-scope-lsa-type | |||
| /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version | /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version | |||
| /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque | /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque | |||
| /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: | /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: | |||
| +--ro perfix-sid-sub-tlvs | +--ro perfix-sid-sub-tlvs | |||
| +--ro prefix-sid-sub-tlv* | +--ro prefix-sid-sub-tlv* | |||
| +--ro flags? bits | +--ro prefix-sid-flags | |||
| +--ro mt-id? uint8 | | +--ro bits* identityref | |||
| +--ro algorithm? uint8 | +--ro mt-id? uint8 | |||
| +--ro sid? uint32 | +--ro algorithm? uint8 | |||
| +--ro sid? uint32 | ||||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:database | /rt:control-plane-protocol/ospf:ospf/ospf:database | |||
| /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa | /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa | |||
| /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque | /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque | |||
| /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: | /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: | |||
| +--ro perfix-sid-sub-tlvs | +--ro perfix-sid-sub-tlvs | |||
| +--ro prefix-sid-sub-tlv* | +--ro prefix-sid-sub-tlv* | |||
| +--ro flags? bits | +--ro prefix-sid-flags | |||
| +--ro mt-id? uint8 | | +--ro bits* identityref | |||
| +--ro algorithm? uint8 | +--ro mt-id? uint8 | |||
| +--ro sid? uint32 | +--ro algorithm? uint8 | |||
| +--ro sid? uint32 | ||||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:areas | /rt:control-plane-protocol/ospf:ospf/ospf:areas | |||
| /ospf:area/ospf:database/ospf:area-scope-lsa-type | /ospf:area/ospf:database/ospf:area-scope-lsa-type | |||
| /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version | /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version | |||
| /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque | /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque | |||
| /ospf:extended-link-opaque/ospf:extended-link-tlv: | /ospf:extended-link-opaque/ospf:extended-link-tlv: | |||
| +--ro adj-sid-sub-tlvs | +--ro adj-sid-sub-tlvs | |||
| | +--ro adj-sid-sub-tlv* | | +--ro adj-sid-sub-tlv* | |||
| | +--ro flags? bits | | +--ro adj-sid-flags | |||
| | +--ro mt-id? uint8 | | | +--ro bits* identityref | |||
| | +--ro weight? uint8 | | +--ro mt-id? uint8 | |||
| | +--ro sid? uint32 | | +--ro weight? uint8 | |||
| | +--ro sid? uint32 | ||||
| +--ro lan-adj-sid-sub-tlvs | +--ro lan-adj-sid-sub-tlvs | |||
| +--ro lan-adj-sid-sub-tlv* | +--ro lan-adj-sid-sub-tlv* | |||
| +--ro flags? bits | +--ro lan-adj-sid-flags | |||
| | +--ro bits* identityref | ||||
| +--ro mt-id? uint8 | +--ro mt-id? uint8 | |||
| +--ro weight? uint8 | +--ro weight? uint8 | |||
| +--ro neighbor-router-id? yang:dotted-quad | +--ro neighbor-router-id? yang:dotted-quad | |||
| +--ro sid? uint32 | +--ro sid? uint32 | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:areas | /rt:control-plane-protocol/ospf:ospf/ospf:areas | |||
| /ospf:area/ospf:interfaces/ospf:interface/ospf:database | /ospf:area/ospf:interfaces/ospf:interface/ospf:database | |||
| /ospf:link-scope-lsa-type/ospf:link-scope-lsas | /ospf:link-scope-lsa-type/ospf:link-scope-lsas | |||
| /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 | /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 | |||
| /ospf:body/ospf:opaque: | /ospf:body/ospf:opaque: | |||
| +--ro extended-prefix-range-tlvs | +--ro extended-prefix-range-tlvs | |||
| | +--ro extended-prefix-range-tlv* | | +--ro extended-prefix-range-tlv* | |||
| | +--ro prefix-length? uint8 | | +--ro prefix-length? uint8 | |||
| | +--ro af? uint8 | | +--ro af? uint8 | |||
| | +--ro range-size? uint16 | | +--ro range-size? uint16 | |||
| | +--ro flags? bits | | +--ro extended-prefix-range-flags | |||
| | +--ro prefix? inet:ip-prefix | | | +--ro bits* identityref | |||
| | +--ro prefix? inet:ip-prefix | ||||
| | +--ro perfix-sid-sub-tlvs | | +--ro perfix-sid-sub-tlvs | |||
| | | +--ro prefix-sid-sub-tlv* | | | +--ro prefix-sid-sub-tlv* | |||
| | | +--ro flags? bits | | | +--ro prefix-sid-flags | |||
| | | +--ro mt-id? uint8 | | | | +--ro bits* identityref | |||
| | | +--ro algorithm? uint8 | | | +--ro mt-id? uint8 | |||
| | | +--ro sid? uint32 | | | +--ro algorithm? uint8 | |||
| | | +--ro sid? uint32 | ||||
| | +--ro unknown-tlvs | | +--ro unknown-tlvs | |||
| | +--ro unknown-tlv* | | +--ro unknown-tlv* | |||
| | +--ro type? uint16 | | +--ro type? uint16 | |||
| | +--ro length? uint16 | | +--ro length? uint16 | |||
| | +--ro value? yang:hex-string | | +--ro value? yang:hex-string | |||
| +--ro sr-algorithm-tlv | +--ro sr-algorithm-tlv | |||
| | +--ro sr-algorithm* uint8 | | +--ro sr-algorithm* uint8 | |||
| +--ro sid-range-tlvs | +--ro sid-range-tlvs | |||
| | +--ro sid-range-tlv* | | +--ro sid-range-tlv* | |||
| | +--ro range-size? uint24 | | +--ro range-size? uint24 | |||
| skipping to change at page 6, line 8 ¶ | skipping to change at page 6, line 14 ¶ | |||
| | +--ro sid? uint32 | | +--ro sid? uint32 | |||
| +--ro srms-preference-tlv | +--ro srms-preference-tlv | |||
| +--ro preference? uint8 | +--ro preference? uint8 | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:areas | /rt:control-plane-protocol/ospf:ospf/ospf:areas | |||
| /ospf:area/ospf:database/ospf:area-scope-lsa-type | /ospf:area/ospf:database/ospf:area-scope-lsa-type | |||
| /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version | /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version | |||
| /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: | /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: | |||
| +--ro extended-prefix-range-tlvs | +--ro extended-prefix-range-tlvs | |||
| | +--ro extended-prefix-range-tlv* | | +--ro extended-prefix-range-tlv* | |||
| | +--ro prefix-length? uint8 | | +--ro prefix-length? uint8 | |||
| | +--ro af? uint8 | | +--ro af? uint8 | |||
| | +--ro range-size? uint16 | | +--ro range-size? uint16 | |||
| | +--ro flags? bits | | +--ro extended-prefix-range-flags | |||
| | +--ro prefix? inet:ip-prefix | | | +--ro bits* identityref | |||
| | +--ro prefix? inet:ip-prefix | ||||
| | +--ro perfix-sid-sub-tlvs | | +--ro perfix-sid-sub-tlvs | |||
| | | +--ro prefix-sid-sub-tlv* | | | +--ro prefix-sid-sub-tlv* | |||
| | | +--ro flags? bits | | | +--ro prefix-sid-flags | |||
| | | +--ro mt-id? uint8 | | | | +--ro bits* identityref | |||
| | | +--ro algorithm? uint8 | | | +--ro mt-id? uint8 | |||
| | | +--ro sid? uint32 | | | +--ro algorithm? uint8 | |||
| | | +--ro sid? uint32 | ||||
| | +--ro unknown-tlvs | | +--ro unknown-tlvs | |||
| | +--ro unknown-tlv* | | +--ro unknown-tlv* | |||
| | +--ro type? uint16 | | +--ro type? uint16 | |||
| | +--ro length? uint16 | | +--ro length? uint16 | |||
| | +--ro value? yang:hex-string | | +--ro value? yang:hex-string | |||
| +--ro sr-algorithm-tlv | +--ro sr-algorithm-tlv | |||
| | +--ro sr-algorithm* uint8 | | +--ro sr-algorithm* uint8 | |||
| +--ro sid-range-tlvs | +--ro sid-range-tlvs | |||
| | +--ro sid-range-tlv* | | +--ro sid-range-tlv* | |||
| | +--ro range-size? uint24 | | +--ro range-size? uint24 | |||
| skipping to change at page 6, line 40 ¶ | skipping to change at page 6, line 48 ¶ | |||
| | +--ro sid? uint32 | | +--ro sid? uint32 | |||
| +--ro local-block-tlvs | +--ro local-block-tlvs | |||
| | +--ro local-block-tlv* | | +--ro local-block-tlv* | |||
| | +--ro range-size? uint24 | | +--ro range-size? uint24 | |||
| | +--ro sid-sub-tlv | | +--ro sid-sub-tlv | |||
| | +--ro sid? uint32 | | +--ro sid? uint32 | |||
| +--ro srms-preference-tlv | +--ro srms-preference-tlv | |||
| +--ro preference? uint8 | +--ro preference? uint8 | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol/ospf:ospf/ospf:database | /rt:control-plane-protocol/ospf:ospf/ospf:database | |||
| /ospf:as-scope-lsa-type/ospf:as-scope-lsas | /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa | |||
| /ospf:as-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 | /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: | |||
| /ospf:body/ospf:opaque: | ||||
| +--ro extended-prefix-range-tlvs | +--ro extended-prefix-range-tlvs | |||
| | +--ro extended-prefix-range-tlv* | | +--ro extended-prefix-range-tlv* | |||
| | +--ro prefix-length? uint8 | | +--ro prefix-length? uint8 | |||
| | +--ro af? uint8 | | +--ro af? uint8 | |||
| | +--ro range-size? uint16 | | +--ro range-size? uint16 | |||
| | +--ro flags? bits | | +--ro extended-prefix-range-flags | |||
| | +--ro prefix? inet:ip-prefix | | | +--ro bits* identityref | |||
| | +--ro prefix? inet:ip-prefix | ||||
| | +--ro perfix-sid-sub-tlvs | | +--ro perfix-sid-sub-tlvs | |||
| | | +--ro prefix-sid-sub-tlv* | | | +--ro prefix-sid-sub-tlv* | |||
| | | +--ro flags? bits | | | +--ro prefix-sid-flags | |||
| | | +--ro mt-id? uint8 | | | | +--ro bits* identityref | |||
| | | +--ro algorithm? uint8 | | | +--ro mt-id? uint8 | |||
| | | +--ro sid? uint32 | | | +--ro algorithm? uint8 | |||
| | | +--ro sid? uint32 | ||||
| | +--ro unknown-tlvs | | +--ro unknown-tlvs | |||
| | +--ro unknown-tlv* | | +--ro unknown-tlv* | |||
| | +--ro type? uint16 | | +--ro type? uint16 | |||
| | +--ro length? uint16 | | +--ro length? uint16 | |||
| | +--ro value? yang:hex-string | | +--ro value? yang:hex-string | |||
| +--ro sr-algorithm-tlv | +--ro sr-algorithm-tlv | |||
| | +--ro sr-algorithm* uint8 | | +--ro sr-algorithm* uint8 | |||
| +--ro sid-range-tlvs | +--ro sid-range-tlvs | |||
| | +--ro sid-range-tlv* | | +--ro sid-range-tlv* | |||
| | +--ro range-size? uint24 | | +--ro range-size? uint24 | |||
| skipping to change at page 7, line 30 ¶ | skipping to change at page 7, line 39 ¶ | |||
| +--ro local-block-tlvs | +--ro local-block-tlvs | |||
| | +--ro local-block-tlv* | | +--ro local-block-tlv* | |||
| | +--ro range-size? uint24 | | +--ro range-size? uint24 | |||
| | +--ro sid-sub-tlv | | +--ro sid-sub-tlv | |||
| | +--ro sid? uint32 | | +--ro sid? uint32 | |||
| +--ro srms-preference-tlv | +--ro srms-preference-tlv | |||
| +--ro preference? uint8 | +--ro preference? uint8 | |||
| 4. OSPF Segment Routing YANG Module | 4. OSPF Segment Routing YANG Module | |||
| <CODE BEGINS> file "ietf-ospf-sr@2019-08-07.yang" | <CODE BEGINS> file "ietf-ospf-sr@2019-08-13.yang" | |||
| module ietf-ospf-sr { | module ietf-ospf-sr { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; | |||
| prefix ospf-sr; | prefix ospf-sr; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | ||||
| import ietf-routing { | } | |||
| prefix "rt"; | ||||
| } | ||||
| import ietf-segment-routing-common { | ||||
| prefix "sr-cmn"; | ||||
| } | ||||
| import ietf-segment-routing { | ||||
| prefix "sr"; | ||||
| } | import ietf-routing { | |||
| import ietf-ospf { | prefix "rt"; | |||
| prefix "ospf"; | } | |||
| } | import ietf-segment-routing-common { | |||
| prefix "sr-cmn"; | ||||
| } | ||||
| import ietf-segment-routing { | ||||
| prefix "sr"; | ||||
| } | ||||
| import ietf-ospf { | ||||
| prefix "ospf"; | ||||
| } | ||||
| organization | organization | |||
| "IETF LSR - Link State Routing Working Group"; | "IETF LSR - Link State Routing Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/lsr/> | "WG Web: <http://tools.ietf.org/wg/lsr/> | |||
| WG List: <mailto:lsr@ietf.org> | WG List: <mailto:lsr@ietf.org> | |||
| Editor: Derek Yeung | Editor: Derek Yeung | |||
| <mailto:derek@arrcus.com> | <mailto:derek@arrcus.com> | |||
| Author: Derek Yeung | Author: Derek Yeung | |||
| <mailto:derek@arrcus.com> | <mailto:derek@arrcus.com> | |||
| Author: Yingzhen Qu | Author: Yingzhen Qu | |||
| <mailto:yingzhen.qu@futurewei.com> | <mailto:yingzhen.qu@futurewei.com> | |||
| Author: Acee Lindem | Author: Acee Lindem | |||
| <mailto:acee@cisco.com> | <mailto:acee@cisco.com> | |||
| Author: Jeffrey Zhang | Author: Jeffrey Zhang | |||
| <mailto:zzhang@juniper.net> | <mailto:zzhang@juniper.net> | |||
| Author: Ing-Wher Chen | Author: Ing-Wher Chen | |||
| <mailto:ingwherchen@mitre.org> | <mailto:ingwherchen@mitre.org> | |||
| Author: Greg Hankins | Author: Greg Hankins | |||
| <mailto:greg.hankins@alcatel-lucent.com>"; | <mailto:greg.hankins@alcatel-lucent.com>"; | |||
| description | description | |||
| "This YANG module defines the generic configuration | "This YANG module defines the generic configuration | |||
| and operational state for OSPF Segment Routing, which is | and operational state for OSPF Segment Routing, which is | |||
| common across all of the vendor implementations. It is | common across all of the vendor implementations. It is | |||
| intended that the module will be extended by vendors to | intended that the module will be extended by vendors to | |||
| define vendor-specific OSPF Segment Routing configuration | define vendor-specific OSPF Segment Routing configuration | |||
| and operational parameters and policies. | and operational parameters and policies. | |||
| Copyright (c) 2017 IETF Trust and the persons identified as | Copyright (c) 2017 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
| to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; | This version of this YANG module is part of RFC XXXX; | |||
| see the RFC itself for full legal notices."; | see the RFC itself for full legal notices."; | |||
| reference "RFC XXXX"; | reference "RFC XXXX"; | |||
| revision 2019-08-07 { | revision 2019-08-13 { | |||
| description | description | |||
| ""; | ""; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2019-07-07 { | revision 2019-08-07 { | |||
| description | description | |||
| ""; | ""; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2019-03-05 { | revision 2019-07-07 { | |||
| description | description | |||
| ""; | ""; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2018-06-25 { | revision 2019-03-05 { | |||
| description | description | |||
| ""; | ""; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2018-03-03 { | revision 2018-06-25 { | |||
| description | description | |||
| "* Remove OSPF instance."; | ""; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2017-12-28 { | revision 2018-03-03 { | |||
| description | description | |||
| ""; | "* Remove OSPF instance."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2017-07-02 { | revision 2017-12-28 { | |||
| description | description | |||
| "* Implement NMDA model. | ""; | |||
| * Add local-block-tlvs and srms-preference-tlv. | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | ||||
| } | ||||
| * Remove sid-binding-sub-tlvs."; | revision 2017-07-02 { | |||
| reference | description | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "* Implement NMDA model. | |||
| } | * Add local-block-tlvs and srms-preference-tlv. | |||
| * Remove sid-binding-sub-tlvs."; | ||||
| reference | ||||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | ||||
| } | ||||
| revision 2017-03-12 { | revision 2017-03-12 { | |||
| description | description | |||
| "* Add p-flag in adj-sid sub-tlv."; | "* Add p-flag in adj-sid sub-tlv."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2016-10-31 { | revision 2016-10-31 { | |||
| description | description | |||
| "* Update authors information. | "* Update authors information. | |||
| * Add import of ietf-segment-routing-common module."; | * Add import of ietf-segment-routing-common module."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2016-07-07 { | revision 2016-07-07 { | |||
| description | description | |||
| "* Change routing-protocol to control-plane-protocol."; | "* Change routing-protocol to control-plane-protocol."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2016-03-20 { | revision 2016-03-20 { | |||
| description | description | |||
| "* Remove routing-instance."; | "* Remove routing-instance."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | ||||
| revision 2015-10-19 { | } | |||
| description | ||||
| "* Add per-protocol SRGB support. | ||||
| * Editorial changes."; | ||||
| reference | ||||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | ||||
| } | ||||
| revision 2015-09-02 { | revision 2015-10-19 { | |||
| description | description | |||
| "* Author list update. | "* Add per-protocol SRGB support. | |||
| * Editorial changes."; | * Editorial changes."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| } | } | |||
| revision 2015-07-06 { | ||||
| description | ||||
| "Initial revision."; | ||||
| reference | ||||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | ||||
| } | ||||
| feature ti-lfa { | revision 2015-09-02 { | |||
| description | description | |||
| "Topology-Independent Loop-Free Alternate (TI-LFA) | "* Author list update. | |||
| computation using segment routing."; | * Editorial changes."; | |||
| } | reference | |||
| "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | ||||
| } | ||||
| typedef uint24 { | revision 2015-07-06 { | |||
| type uint32 { | description | |||
| range "0 .. 16777215"; | "Initial revision."; | |||
| } | reference | |||
| description | "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; | |||
| "24-bit unsigned integer."; | } | |||
| } | ||||
| /* Groupings */ | feature ti-lfa { | |||
| grouping sid-sub-tlv { | description | |||
| description "SID/Label sub-TLV grouping."; | "Topology-Independent Loop-Free Alternate (TI-LFA) | |||
| container sid-sub-tlv { | computation using segment routing."; | |||
| description | } | |||
| "Used to advertise the SID/Label associated with a | ||||
| prefix or adjacency."; | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description | ||||
| "Segment Identifier (SID) - A 20 bit label or | ||||
| 32 bit SID."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping prefix-sid-sub-tlvs { | identity prefix-sid-bit { | |||
| description "Prefix Segment ID (SID) sub-TLVs."; | description | |||
| container perfix-sid-sub-tlvs{ | "Base identity for prefix sid sub-tlv bits."; | |||
| description "Prefix SID sub-TLV."; | } | |||
| list prefix-sid-sub-tlv { | ||||
| description "Prefix SID sub-TLV."; | ||||
| leaf flags { | ||||
| type bits { | ||||
| bit NP { | ||||
| position 1; | ||||
| description | ||||
| "No-PHP flag."; | ||||
| } | ||||
| bit M { | ||||
| position 2; | ||||
| description | ||||
| "Mapping server flag."; | ||||
| } | ||||
| bit E { | ||||
| position 3; | ||||
| description | ||||
| "Explicit-NULL flag."; | ||||
| } | ||||
| bit V { | ||||
| position 4; | ||||
| description | ||||
| "Value/Index flag."; | ||||
| } | ||||
| bit L { | ||||
| position 5; | ||||
| description | ||||
| "Local flag."; | ||||
| } | ||||
| } | ||||
| description "Segment Identifier (SID) Flags."; | ||||
| } | ||||
| leaf mt-id { | ||||
| type uint8; | ||||
| description "Multi-topology ID."; | ||||
| } | ||||
| leaf algorithm { | ||||
| type uint8; | ||||
| description | ||||
| "The algorithm associated with the prefix-SID."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description "An index or label."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping extended-prefix-range-tlvs { | identity np-bit { | |||
| description "Extended prefix range TLV grouping."; | base prefix-sid-bit; | |||
| description | ||||
| "No-PHP flag."; | ||||
| } | ||||
| container extended-prefix-range-tlvs { | identity m-bit { | |||
| description "The list of range of prefixes."; | base prefix-sid-bit; | |||
| list extended-prefix-range-tlv { //type=2? | description | |||
| description "The range of prefixes."; | "Mapping server flag."; | |||
| leaf prefix-length { | } | |||
| type uint8; | identity e-bit { | |||
| description "Length of prefix in bits."; | base prefix-sid-bit; | |||
| } | description | |||
| leaf af { | "Explicit-NULL flag."; | |||
| type uint8; | } | |||
| description "Address family for the prefix."; | ||||
| } | ||||
| leaf range-size { | ||||
| type uint16; | ||||
| description "The number of prefixes covered by the | ||||
| advertisement."; | ||||
| } | ||||
| leaf flags { | ||||
| type bits { | ||||
| bit IA { | ||||
| position 0; | ||||
| description | ||||
| "Inter-Area flag."; | ||||
| } | ||||
| } | ||||
| description "Flags."; | ||||
| } | ||||
| leaf prefix { | ||||
| type inet:ip-prefix; | ||||
| description "Address prefix."; | ||||
| } | ||||
| uses prefix-sid-sub-tlvs; | ||||
| uses ospf:unknown-tlvs; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping sr-algorithm-tlv { | identity v-bit { | |||
| description "SR algorithm TLV grouping."; | base prefix-sid-bit; | |||
| container sr-algorithm-tlv { | description | |||
| description "All SR algorithm TLVs."; | "Value/Index flag."; | |||
| leaf-list sr-algorithm { | } | |||
| type uint8; | ||||
| description | ||||
| "The Segment Routing (SR) algorithms that the router is | ||||
| currently using."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping sid-range-tlvs { | identity l-bit { | |||
| description "SID Range TLV grouping."; | base prefix-sid-bit; | |||
| container sid-range-tlvs { | description | |||
| description "List of SID range TLVs."; | "Local flag."; | |||
| list sid-range-tlv { | } | |||
| description "SID range TLV."; | ||||
| leaf range-size { | ||||
| type uint24; | ||||
| description "The SID range."; | ||||
| } | ||||
| uses sid-sub-tlv; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping local-block-tlvs { | identity extended-prefix-range-bit { | |||
| description "The SR local block TLV contains the | description | |||
| range of labels reserved for local SIDs."; | "Base identity for extended prefix range TLV bits."; | |||
| container local-block-tlvs { | } | |||
| description "List of SRLB TLVs."; | ||||
| list local-block-tlv { | ||||
| description "SRLB TLV."; | ||||
| leaf range-size { | ||||
| type uint24; | ||||
| description "The SID range."; | ||||
| } | ||||
| uses sid-sub-tlv; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping srms-preference-tlv { | identity ia-bit { | |||
| description "The SRMS preference TLV is used to advertise | base extended-prefix-range-bit; | |||
| a preference associated with the node that acts | description | |||
| as an SR Mapping Server."; | "Inter-Area flag. If set, advertisement is of inter-area type."; | |||
| container srms-preference-tlv { | } | |||
| description "SRMS Preference TLV."; | ||||
| leaf preference { | ||||
| type uint8 { | ||||
| range "0 .. 255"; | ||||
| } | ||||
| description "SRMS preference TLV, vlaue from 0 to 255."; | ||||
| } | ||||
| } | ||||
| } | ||||
| /* Configuration */ | identity adj-sid-bit { | |||
| augment "/rt:routing/rt:control-plane-protocols" | description | |||
| + "/rt:control-plane-protocol/ospf:ospf" { | "Base identity for adj sid sub-tlv bits."; | |||
| } | ||||
| when "../rt:type = 'ospf:ospfv2' or " | identity b-bit { | |||
| + "../rt:type = 'ospf:ospfv3'" { | base adj-sid-bit; | |||
| description | description | |||
| "This augments the OSPF routing protocol when used."; | "Backup flag."; | |||
| } | } | |||
| description | ||||
| "This augments the OSPF protocol configuration | ||||
| with segment routing."; | ||||
| uses sr:sr-controlplane; | ||||
| container protocol-srgb { | ||||
| if-feature sr:protocol-srgb; | ||||
| uses sr-cmn:srgb; | ||||
| description | ||||
| "Per-protocol SRGB."; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/rt:control-plane-protocols/" | identity vi-bit { | |||
| + "rt:control-plane-protocol/ospf:ospf/" | base adj-sid-bit; | |||
| + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { | description | |||
| when "../../../../../rt:type = 'ospf:ospfv2' or " | "Value/Index flag."; | |||
| + "../../../../../rt:type = 'ospf:ospfv3'" { | } | |||
| description | ||||
| "This augments the OSPF interface configuration | ||||
| when used."; | ||||
| } | ||||
| description | ||||
| "This augments the OSPF protocol interface | ||||
| configuration with segment routing."; | ||||
| uses sr:igp-interface; | identity lo-bit { | |||
| } | base adj-sid-bit; | |||
| description | ||||
| "Local/Global flag."; | ||||
| } | ||||
| augment "/rt:routing/rt:control-plane-protocols/" | identity g-bit { | |||
| + "rt:control-plane-protocol/ospf:ospf/" | base adj-sid-bit; | |||
| + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" | description | |||
| + "ospf:fast-reroute" { | "Group flag."; | |||
| when "../../../../../../rt:type = 'ospf:ospfv2' or " | } | |||
| + "../../../../../../rt:type = 'ospf:ospfv3'" { | ||||
| description | ||||
| "This augments the OSPF routing protocol when used."; | ||||
| } | ||||
| description | ||||
| "This augments the OSPF protocol IP-FRR with TI-LFA."; | ||||
| container ti-lfa { | identity p-bit { | |||
| if-feature ti-lfa; | base adj-sid-bit; | |||
| leaf enable { | description | |||
| type boolean; | "Persistent flag."; | |||
| description | } | |||
| "Enables TI-LFA computation."; | ||||
| } | ||||
| description | ||||
| "Topology Independent Loop Free Alternate | ||||
| (TI-LFA) support."; | ||||
| } | ||||
| } | ||||
| /* Database */ | typedef uint24 { | |||
| augment "/rt:routing/" | type uint32 { | |||
| + "rt:control-plane-protocols/rt:control-plane-protocol/" | range "0 .. 16777215"; | |||
| + "ospf:ospf/ospf:areas/ospf:area/" | } | |||
| + "ospf:interfaces/ospf:interface/ospf:database/" | description | |||
| + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" | "24-bit unsigned integer."; | |||
| + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" | } | |||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | ||||
| + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { | ||||
| when "../../../../../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 extended prefix TLV | ||||
| in type 9 opaque LSA."; | ||||
| uses prefix-sid-sub-tlvs; | ||||
| } | ||||
| augment "/rt:routing/" | /* Groupings */ | |||
| + "rt:control-plane-protocols/rt:control-plane-protocol/" | grouping sid-sub-tlv { | |||
| + "ospf:ospf/ospf:areas/" | description "SID/Label sub-TLV grouping."; | |||
| + "ospf:area/ospf:database/" | container sid-sub-tlv { | |||
| + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" | description | |||
| + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" | "Used to advertise the SID/Label associated with a | |||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | prefix or adjacency."; | |||
| + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { | leaf sid { | |||
| when "../../../../../../../../../../../../" | type uint32; | |||
| + "rt:type = 'ospf:ospfv2'" { | description | |||
| description | "Segment Identifier (SID) - A 20 bit label or | |||
| "This augmentation is only valid for OSPFv2."; | 32 bit SID."; | |||
| } | } | |||
| description | } | |||
| "SR specific TLVs for OSPFv2 extended prefix TLV | } | |||
| in type 10 opaque LSA."; | ||||
| uses prefix-sid-sub-tlvs; | ||||
| } | ||||
| 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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | ||||
| + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { | ||||
| when "../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 extended prefix TLV | ||||
| in type 11 opaque LSA."; | ||||
| uses prefix-sid-sub-tlvs; | ||||
| } | ||||
| augment "/rt:routing/" | grouping prefix-sid-sub-tlvs { | |||
| + "rt:control-plane-protocols/rt:control-plane-protocol/" | description "Prefix Segment ID (SID) sub-TLVs."; | |||
| + "ospf:ospf/ospf:areas/" | container perfix-sid-sub-tlvs{ | |||
| + "ospf:area/ospf:database/" | description "Prefix SID sub-TLV."; | |||
| + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" | list prefix-sid-sub-tlv { | |||
| + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" | description "Prefix SID sub-TLV."; | |||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | container prefix-sid-flags { | |||
| + "ospf:extended-link-opaque/ospf:extended-link-tlv" { | leaf-list bits { | |||
| when "../../../../../../../../../../../../" | type identityref { | |||
| + "rt:type = 'ospf:ospfv2'" { | base prefix-sid-bit; | |||
| description | } | |||
| "This augmentation is only valid for OSPFv2."; | description | |||
| } | "Prefix SID Sub-TLV flag bits list."; | |||
| description | } | |||
| "SR specific TLVs for OSPFv2 extended link TLV | description "Segment Identifier (SID) Flags."; | |||
| in type 10 opaque LSA."; | } | |||
| leaf mt-id { | ||||
| type uint8; | ||||
| description "Multi-topology ID."; | ||||
| } | ||||
| leaf algorithm { | ||||
| type uint8; | ||||
| description | ||||
| "The algorithm associated with the prefix-SID."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description "An index or label."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container adj-sid-sub-tlvs { | grouping extended-prefix-range-tlvs { | |||
| description "Adjacency SID optional sub-TLVs."; | description "Extended prefix range TLV grouping."; | |||
| list adj-sid-sub-tlv { | ||||
| description "List of Adjacency SID sub-TLVs."; | ||||
| leaf flags { | ||||
| type bits { | ||||
| bit B { | ||||
| position 0; | ||||
| description | ||||
| "Backup flag."; | ||||
| } | ||||
| bit V { | ||||
| position 1; | ||||
| description | ||||
| "Value/Index flag."; | ||||
| } | ||||
| bit L { | ||||
| position 2; | ||||
| description | ||||
| "Local/Global flag."; | ||||
| } | ||||
| bit G { | ||||
| position 3; | ||||
| description | ||||
| "Group flag."; | ||||
| } | ||||
| bit P { | ||||
| position 4; | ||||
| description | ||||
| "Persistent flag."; | ||||
| } | ||||
| } | ||||
| description "Flags."; | ||||
| } | ||||
| leaf mt-id { | ||||
| type uint8; | ||||
| description "Multi-topology ID."; | ||||
| } | ||||
| leaf weight { | ||||
| type uint8; | ||||
| description "Weight used for load-balancing."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description "Segment Identifier (SID) index/label."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container lan-adj-sid-sub-tlvs { | container extended-prefix-range-tlvs { | |||
| description "LAN Adjacency SID optional sub-TLVs."; | description "The list of range of prefixes."; | |||
| list lan-adj-sid-sub-tlv { | list extended-prefix-range-tlv { //type=2? | |||
| description "List of LAN adjacency SID sub-TLVs."; | description "The range of prefixes."; | |||
| leaf flags { | leaf prefix-length { | |||
| type bits { | type uint8; | |||
| bit B { | description "Length of prefix in bits."; | |||
| position 0; | } | |||
| description | leaf af { | |||
| "Backup flag."; | type uint8; | |||
| } | description "Address family for the prefix."; | |||
| bit V { | } | |||
| position 1; | leaf range-size { | |||
| description | type uint16; | |||
| "Value/Index flag."; | description "The number of prefixes covered by the | |||
| } | advertisement."; | |||
| bit L { | } | |||
| position 2; | container extended-prefix-range-flags { | |||
| description | leaf-list bits { | |||
| "Local/Global flag."; | type identityref { | |||
| } | base extended-prefix-range-bit; | |||
| bit G { | } | |||
| position 3; | description "Extended prefix range TLV flags list."; | |||
| description | } | |||
| "Group flag."; | description "Extended Prefix Range TLV flags."; | |||
| } | } | |||
| bit P { | leaf prefix { | |||
| position 4; | type inet:ip-prefix; | |||
| description | description "Address prefix."; | |||
| "Persistent flag."; | } | |||
| } | uses prefix-sid-sub-tlvs; | |||
| } | uses ospf:unknown-tlvs; | |||
| description "Flags."; | } | |||
| } | } | |||
| leaf mt-id { | } | |||
| type uint8; | ||||
| description "Multi-topology ID."; | ||||
| } | ||||
| leaf weight { | ||||
| type uint8; | ||||
| description "Weight used for load-balancing."; | ||||
| } | ||||
| leaf neighbor-router-id { | ||||
| type yang:dotted-quad; | ||||
| description "Neighbor router ID."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description "Segment Identifier (SID) index/label."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/" | grouping sr-algorithm-tlv { | |||
| + "rt:control-plane-protocols/rt:control-plane-protocol/" | description "SR algorithm TLV grouping."; | |||
| + "ospf:ospf/ospf:areas/ospf:area/" | container sr-algorithm-tlv { | |||
| + "ospf:interfaces/ospf:interface/ospf:database/" | description "All SR algorithm TLVs."; | |||
| + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" | leaf-list sr-algorithm { | |||
| + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" | type uint8; | |||
| + "ospf:ospfv2/ospf:body/ospf:opaque" { | description | |||
| when "../../../../../../../../../../../../" | "The Segment Routing (SR) algorithms that the router is | |||
| + "rt:type = 'ospf:ospfv2'" { | currently using."; | |||
| description | } | |||
| "This augmentation is only valid for OSPFv2."; | } | |||
| } | } | |||
| description | grouping sid-range-tlvs { | |||
| "SR specific TLVs for OSPFv2 type 9 opaque LSA."; | description "SID Range TLV grouping."; | |||
| container sid-range-tlvs { | ||||
| description "List of SID range TLVs."; | ||||
| list sid-range-tlv { | ||||
| description "SID range TLV."; | ||||
| leaf range-size { | ||||
| type uint24; | ||||
| description "The SID range."; | ||||
| } | ||||
| uses sid-sub-tlv; | ||||
| } | ||||
| } | ||||
| } | ||||
| uses extended-prefix-range-tlvs; | grouping local-block-tlvs { | |||
| uses sr-algorithm-tlv; | description "The SR local block TLV contains the | |||
| uses sid-range-tlvs; | range of labels reserved for local SIDs."; | |||
| uses local-block-tlvs; | container local-block-tlvs { | |||
| uses srms-preference-tlv; | description "List of SRLB TLVs."; | |||
| } | list local-block-tlv { | |||
| description "SRLB TLV."; | ||||
| leaf range-size { | ||||
| type uint24; | ||||
| description "The SID range."; | ||||
| } | ||||
| uses sid-sub-tlv; | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/" | grouping srms-preference-tlv { | |||
| + "rt:control-plane-protocols/rt:control-plane-protocol/" | description "The SRMS preference TLV is used to advertise | |||
| + "ospf:ospf/ospf:areas/" | a preference associated with the node that acts | |||
| + "ospf:area/ospf:database/" | as an SR Mapping Server."; | |||
| + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" | container srms-preference-tlv { | |||
| + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" | description "SRMS Preference TLV."; | |||
| + "ospf:ospfv2/ospf:body/ospf:opaque" { | leaf preference { | |||
| when "../../../../../../../../../../" | type uint8 { | |||
| + "rt:type = 'ospf:ospfv2'" { | range "0 .. 255"; | |||
| description | } | |||
| "This augmentation is only valid for OSPFv2."; | description "SRMS preference TLV, vlaue from 0 to 255."; | |||
| } | } | |||
| } | ||||
| } | ||||
| description | /* Configuration */ | |||
| "SR specific TLVs for OSPFv2 type 10 opaque LSA."; | augment "/rt:routing/rt:control-plane-protocols" | |||
| + "/rt:control-plane-protocol/ospf:ospf" { | ||||
| when "../rt:type = 'ospf:ospfv2' or " | ||||
| + "../rt:type = 'ospf:ospfv3'" { | ||||
| description | ||||
| "This augments the OSPF routing protocol when used."; | ||||
| } | ||||
| description | ||||
| "This augments the OSPF protocol configuration | ||||
| with segment routing."; | ||||
| uses sr:sr-controlplane; | ||||
| container protocol-srgb { | ||||
| if-feature sr:protocol-srgb; | ||||
| uses sr-cmn:srgb; | ||||
| description | ||||
| "Per-protocol SRGB."; | ||||
| } | ||||
| } | ||||
| uses extended-prefix-range-tlvs; | augment "/rt:routing/rt:control-plane-protocols/" | |||
| uses sr-algorithm-tlv; | + "rt:control-plane-protocol/ospf:ospf/" | |||
| uses sid-range-tlvs; | + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { | |||
| uses local-block-tlvs; | when "../../../../../rt:type = 'ospf:ospfv2' or " | |||
| uses srms-preference-tlv; | + "../../../../../rt:type = 'ospf:ospfv3'" { | |||
| } | description | |||
| "This augments the OSPF interface configuration | ||||
| when used."; | ||||
| } | ||||
| description | ||||
| "This augments the OSPF protocol interface | ||||
| configuration with segment routing."; | ||||
| augment "/rt:routing/" | uses sr:igp-interface; | |||
| + "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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque" { | ||||
| when "../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | augment "/rt:routing/rt:control-plane-protocols/" | |||
| "This augmentation is only valid for OSPFv2."; | + "rt:control-plane-protocol/ospf:ospf/" | |||
| } | + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" | |||
| description | + "ospf:fast-reroute" { | |||
| "SR specific TLVs for OSPFv2 type 11 opaque LSA."; | when "../../../../../../rt:type = 'ospf:ospfv2' or " | |||
| + "../../../../../../rt:type = 'ospf:ospfv3'" { | ||||
| description | ||||
| "This augments the OSPF routing protocol when used."; | ||||
| } | ||||
| description | ||||
| "This augments the OSPF protocol IP-FRR with TI-LFA."; | ||||
| uses extended-prefix-range-tlvs; | container ti-lfa { | |||
| uses sr-algorithm-tlv; | if-feature ti-lfa; | |||
| uses sid-range-tlvs; | leaf enable { | |||
| uses local-block-tlvs; | type boolean; | |||
| uses srms-preference-tlv; | description | |||
| } | "Enables TI-LFA computation."; | |||
| } | } | |||
| <CODE ENDS> | description | |||
| "Topology Independent Loop Free Alternate | ||||
| (TI-LFA) support."; | ||||
| } | ||||
| } | ||||
| /* Database */ | ||||
| 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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | ||||
| + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { | ||||
| when "../../../../../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 extended prefix TLV | ||||
| in type 9 opaque LSA."; | ||||
| uses prefix-sid-sub-tlvs; | ||||
| } | ||||
| 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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | ||||
| + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { | ||||
| when "../../../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 extended prefix TLV | ||||
| in type 10 opaque LSA."; | ||||
| uses prefix-sid-sub-tlvs; | ||||
| } | ||||
| 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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | ||||
| + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { | ||||
| when "../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 extended prefix TLV | ||||
| in type 11 opaque LSA."; | ||||
| uses prefix-sid-sub-tlvs; | ||||
| } | ||||
| 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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque/" | ||||
| + "ospf:extended-link-opaque/ospf:extended-link-tlv" { | ||||
| when "../../../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 extended link TLV | ||||
| in type 10 opaque LSA."; | ||||
| container adj-sid-sub-tlvs { | ||||
| description "Adjacency SID optional sub-TLVs."; | ||||
| list adj-sid-sub-tlv { | ||||
| description "List of Adjacency SID sub-TLVs."; | ||||
| container adj-sid-flags { | ||||
| leaf-list bits { | ||||
| type identityref { | ||||
| base adj-sid-bit; | ||||
| } | ||||
| description "Adj sid sub-tlv flags list."; | ||||
| } | ||||
| description "Adj-sid sub-tlv flags."; | ||||
| } | ||||
| leaf mt-id { | ||||
| type uint8; | ||||
| description "Multi-topology ID."; | ||||
| } | ||||
| leaf weight { | ||||
| type uint8; | ||||
| description "Weight used for load-balancing."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description "Segment Identifier (SID) index/label."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container lan-adj-sid-sub-tlvs { | ||||
| description "LAN Adjacency SID optional sub-TLVs."; | ||||
| list lan-adj-sid-sub-tlv { | ||||
| description "List of LAN adjacency SID sub-TLVs."; | ||||
| container lan-adj-sid-flags { | ||||
| leaf-list bits { | ||||
| type identityref { | ||||
| base adj-sid-bit; | ||||
| } | ||||
| description "LAN adj sid sub-tlv flags list."; | ||||
| } | ||||
| description "LAN adj-sid sub-tlv flags."; | ||||
| } | ||||
| leaf mt-id { | ||||
| type uint8; | ||||
| description "Multi-topology ID."; | ||||
| } | ||||
| leaf weight { | ||||
| type uint8; | ||||
| description "Weight used for load-balancing."; | ||||
| } | ||||
| leaf neighbor-router-id { | ||||
| type yang:dotted-quad; | ||||
| description "Neighbor router ID."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description "Segment Identifier (SID) index/label."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| 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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque" { | ||||
| when "../../../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 type 9 opaque LSA."; | ||||
| uses extended-prefix-range-tlvs; | ||||
| uses sr-algorithm-tlv; | ||||
| uses sid-range-tlvs; | ||||
| uses local-block-tlvs; | ||||
| uses srms-preference-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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque" { | ||||
| when "../../../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 type 10 opaque LSA."; | ||||
| uses extended-prefix-range-tlvs; | ||||
| uses sr-algorithm-tlv; | ||||
| uses sid-range-tlvs; | ||||
| uses local-block-tlvs; | ||||
| uses srms-preference-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:ospfv2/" | ||||
| + "ospf:ospfv2/ospf:body/ospf:opaque" { | ||||
| when "../../../../../../../../" | ||||
| + "rt:type = 'ospf:ospfv2'" { | ||||
| description | ||||
| "This augmentation is only valid for OSPFv2."; | ||||
| } | ||||
| description | ||||
| "SR specific TLVs for OSPFv2 type 11 opaque LSA."; | ||||
| uses extended-prefix-range-tlvs; | ||||
| uses sr-algorithm-tlv; | ||||
| uses sid-range-tlvs; | ||||
| uses local-block-tlvs; | ||||
| uses srms-preference-tlv; | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 5. Security Considerations | 5. Security Considerations | |||
| The data model defined does not create any security implications. | The data model defined does not create any security implications. | |||
| This draft does not change any underlying security issues inherent in | This draft does not change any underlying security issues inherent in | |||
| [I-D.ietf-netmod-routing-cfg]. | [I-D.ietf-netmod-routing-cfg]. | |||
| 6. Acknowledgements | 6. Acknowledgements | |||
| skipping to change at page 22, line 14 ¶ | skipping to change at page 22, line 48 ¶ | |||
| [I-D.ietf-ospf-segment-routing-extensions] | [I-D.ietf-ospf-segment-routing-extensions] | |||
| Psenak, P., Previdi, S., Filsfils, C., Gredler, H., | Psenak, P., Previdi, S., Filsfils, C., Gredler, H., | |||
| Shakir, R., Henderickx, W., and J. Tantsura, "OSPF | Shakir, R., Henderickx, W., and J. Tantsura, "OSPF | |||
| Extensions for Segment Routing", draft-ietf-ospf-segment- | Extensions for Segment Routing", draft-ietf-ospf-segment- | |||
| routing-extensions-27 (work in progress), December 2018. | routing-extensions-27 (work in progress), December 2018. | |||
| [I-D.ietf-ospf-yang] | [I-D.ietf-ospf-yang] | |||
| Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, | Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, | |||
| "YANG Data Model for OSPF Protocol", draft-ietf-ospf- | "YANG Data Model for OSPF Protocol", draft-ietf-ospf- | |||
| yang-25 (work in progress), August 2019. | yang-26 (work in progress), August 2019. | |||
| [I-D.ietf-spring-sr-yang] | [I-D.ietf-spring-sr-yang] | |||
| Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. | Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. | |||
| Tantsura, "YANG Data Model for Segment Routing", draft- | Tantsura, "YANG Data Model for Segment Routing", draft- | |||
| ietf-spring-sr-yang-13 (work in progress), July 2019. | ietf-spring-sr-yang-13 (work in progress), July 2019. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| End of changes. 77 change blocks. | ||||
| 669 lines changed or deleted | 701 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||