draft-ietf-ospf-yang-07.txt   draft-ietf-ospf-yang-08.txt 
Internet D. Yeung Internet D. Yeung
Internet-Draft Arrcus Internet-Draft Arrcus
Intended status: Informational Y. Qu Intended status: Standards Track Y. Qu
Expires: September 14, 2017 Huawei Expires: January 3, 2018 Huawei
J. Zhang J. Zhang
Juniper Networks Juniper Networks
I. Chen I. Chen
Jabil Jabil
A. Lindem A. Lindem
Cisco Systems Cisco Systems
March 13, 2017 July 2, 2017
Yang Data Model for OSPF Protocol Yang Data Model for OSPF Protocol
draft-ietf-ospf-yang-07 draft-ietf-ospf-yang-08
Abstract Abstract
This document defines a YANG data model that can be used to configure This document defines a YANG data model that can be used to configure
and manage OSPF. and manage OSPF.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
skipping to change at page 1, line 38 skipping to change at page 1, line 38
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 14, 2017. This Internet-Draft will expire on January 3, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 14 skipping to change at page 2, line 14
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
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 . . . . . . . . . . . . . . . . . . 3 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3
2. Design of Data Model . . . . . . . . . . . . . . . . . . . . 3 2. Design of Data Model . . . . . . . . . . . . . . . . . . . . 3
2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1. OSPF Operational State . . . . . . . . . . . . . . . . . 3
2.2. OSPFv2 and OSPFv3 . . . . . . . . . . . . . . . . . . . . 5 2.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3. Optional Features . . . . . . . . . . . . . . . . . . . . 5 2.3. OSPFv2 and OSPFv3 . . . . . . . . . . . . . . . . . . . . 5
2.4. Inheritance . . . . . . . . . . . . . . . . . . . . . . . 5 2.4. Optional Features . . . . . . . . . . . . . . . . . . . . 5
2.5. OSPF Router Configuration . . . . . . . . . . . . . . . . 5 2.5. OSPF Router Configuration/Operational State . . . . . . . 5
2.6. OSPF Instance Configuration . . . . . . . . . . . . . . . 6 2.6. OSPF Instance Configuration/Operational State . . . . . . 5
2.7. OSPF Area Configuration . . . . . . . . . . . . . . . . . 7 2.7. OSPF Area Configuration/Operational State . . . . . . . . 8
2.8. OSPF Interface Configuration . . . . . . . . . . . . . . 9 2.8. OSPF Interface Configuration/Operational State . . . . . 13
2.9. OSPF notification . . . . . . . . . . . . . . . . . . . . 11 2.9. OSPF notification . . . . . . . . . . . . . . . . . . . . 16
2.10. OSPF RPC Operations . . . . . . . . . . . . . . . . . . . 15 2.10. OSPF RPC Operations . . . . . . . . . . . . . . . . . . . 20
3. OSPF Yang Module . . . . . . . . . . . . . . . . . . . . . . 15 3. OSPF Yang Module . . . . . . . . . . . . . . . . . . . . . . 20
4. Security Considerations . . . . . . . . . . . . . . . . . . . 95 4. Security Considerations . . . . . . . . . . . . . . . . . . . 100
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 95 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 101
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 96 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.1. Normative References . . . . . . . . . . . . . . . . . . 96 6.1. Normative References . . . . . . . . . . . . . . . . . . 101
6.2. Informative References . . . . . . . . . . . . . . . . . 97 6.2. Informative References . . . . . . . . . . . . . . . . . 103
Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 98 Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 104
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 98 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 104
1. Overview 1. Overview
YANG [RFC6020] is a data definition language used to define the YANG [RFC6020] is a data definition language used to define the
contents of a conceptual data store that allows networked devices to contents of a conceptual data store that allows networked devices to
be managed using NETCONF [RFC6241]. YANG is proving relevant beyond be managed using NETCONF [RFC6241]. YANG is proving relevant beyond
its initial confines, as bindings to other interfaces (e.g., ReST) its initial confines, as bindings to other interfaces (e.g., ReST)
and encodings other than XML (e.g., JSON) are being defined. and encodings other than XML (e.g., JSON) are being defined.
Furthermore, YANG data models can be used as the basis for Furthermore, YANG data models can be used as the basis for
implementation of other interfaces, such as CLI and programmatic implementation of other interfaces, such as CLI and programmatic
APIs. APIs.
This document defines a YANG data model that can be used to configure This document defines a YANG data model that can be used to configure
and manage OSPF and it is an augmentation to the core routing data and manage OSPF and it is an augmentation to the core routing data
model. A core routing data model is defined in [RFC8022], and it model. A core routing data model is defined in [RFC8022], and it
provides the basis for the development of data models for routing provides the basis for the development of data models for routing
protocols. The interface data model is defined in [RFC7223] and is protocols. The interface data model is defined in [RFC7223] and is
used for referencing interfaces from the routing protocol. The key- used for referencing interfaces from the routing protocol. The key-
chain data model used for OSPF authentication is defined in chain data model used for OSPF authentication is defined in [RFC8177]
and provides both a reference to configured key-chains and an
[I-D.ietf-rtgwg-yang-key-chain] and provides both a reference to enumeration of cryptographic algorithms.
configured key-chains and an enumeration of cryptographic algorithms.
Both OSPFv2 [RFC2328] and OSPFv3 [RFC5340] are supported. In Both OSPFv2 [RFC2328] and OSPFv3 [RFC5340] are supported. In
addition to the core OSPF protocol, features described in other OSPF addition to the core OSPF protocol, features described in other OSPF
RFCs are also supported. These includes demand circuit [RFC1793], RFCs are also supported. These includes demand circuit [RFC1793],
traffic engineering [RFC3630], multiple address family [RFC5838], traffic engineering [RFC3630], multiple address family [RFC5838],
graceful restart [RFC3623] [RFC5187], NSSA [RFC3101], and OSPF(v3) as graceful restart [RFC3623] [RFC5187], NSSA [RFC3101], and OSPF(v3) as
a PE-CE Protocol [RFC4577], [RFC6565]. These non-core features are a PE-CE Protocol [RFC4577], [RFC6565]. These non-core features are
optional in the OSPF data model. optional in the OSPF data model.
1.1. Requirements Language 1.1. Requirements Language
skipping to change at page 3, line 28 skipping to change at page 3, line 27
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
2. Design of Data Model 2. Design of Data Model
Although the basis of OSPF configuration elements like routers, Although the basis of OSPF configuration elements like routers,
areas, and interfaces remains the same, the detailed configuration areas, and interfaces remains the same, the detailed configuration
model varies among router vendors. Differences are observed in terms model varies among router vendors. Differences are observed in terms
of how the protocol engine is tied to the routing domain, how of how the protocol engine is tied to the routing domain, how
multiple protocol engines are be instantiated, and configuration multiple protocol engines are be instantiated among others.
inheritance, among others.
The goal of this document is to define a data model that provides a The goal of this document is to define a data model that provides a
common user interface to the OSPFv2 and OSPFv3 protocols. There is common user interface to the OSPFv2 and OSPFv3 protocols. There is
very little information that is designated as "mandatory", providing very little information that is designated as "mandatory", providing
freedom for vendors to adapt this data model to their respective freedom for vendors to adapt this data model to their respective
product implementations. product implementations.
2.1. Overview 2.1. OSPF Operational State
The OSPF operational state is included in the same tree as OSPF
configuration consistent with Network Management Datastore
Architecture [I-D.ietf-netmod-revised-datastores]. Consequently,
only the routing container in the ietf-routing model [RFC8022] is
augmented. The routing-state container is not augmented.
2.2. Overview
The OSPF YANG module defined in this document has all the common The OSPF YANG module defined in this document has all the common
building blocks for the OSPF protocol. building blocks for the OSPF protocol.
The OSPF YANG module augments the /routing/control-plane-protocols/ The OSPF YANG module augments the /routing/control-plane-protocols/
control-plane-protocol path defined in the ietf-routing module. control-plane-protocol path defined in the ietf-routing module.
module: ietf-ospf module: ietf-ospf
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw ospf +--rw ospf
+--rw all-instances-inherit {instance-inheritance}?
. .
. .
+--rw operation-mode? identityref +--rw operation-mode? identityref
+--rw instance* [af] +--rw instance* [af]
. .
. .
+--rw areas +--rw areas
| +--rw area* [area-id] | +--rw area* [area-id]
| +--rw area-id area-id-type | +--rw area-id area-id-type
| +--rw all-interfaces-inherit {interface-inheritance}?
| . | .
| . | .
| +--rw virtual-links | +--rw virtual-links
| | +--rw virtual-link* [transit-area-id router-id] | | +--rw virtual-link* [transit-area-id router-id]
| | . | | .
| | . | | .
| +--rw sham-links {pe-ce-protocol}? | +--rw sham-links {pe-ce-protocol}?
| | +--rw sham-link* [local-id remote-id] | | +--rw sham-link* [local-id remote-id]
| | . | | .
| | . | | .
skipping to change at page 4, line 50 skipping to change at page 4, line 48
configuration construct that is identified by the local identifier configuration construct that is identified by the local identifier
'name'. The field 'version' allows support for OSPFv2 and OSPFv3. 'name'. The field 'version' allows support for OSPFv2 and OSPFv3.
The ospf container includes one or more OSPF protocol engines, each The ospf container includes one or more OSPF protocol engines, each
enclosed in a separate instance entity. Each instance includes enclosed in a separate instance entity. Each instance includes
information for the routing domain based on the [routing-instance af] information for the routing domain based on the [routing-instance af]
specification. There is no default routing domain assumed by the specification. There is no default routing domain assumed by the
data model. For example, to enable OSPF on a vendor's default IPv4 data model. For example, to enable OSPF on a vendor's default IPv4
routing domain, an explicit instance entity with a specification like routing domain, an explicit instance entity with a specification like
["default" "ipv4-unicast"] is required. The instance also contains ["default" "ipv4-unicast"] is required. The instance also contains
OSPF router level configuration OSPF router level configuration and operational state.
The instance/area and instance/area/interface containers respectively The instance/area and instance/area/interface containers respectively
define the OSPF configuration for OSPF areas and interfaces. define the OSPF configuration and operational state for OSPF areas
and interfaces.
The instance/topology container defines the OSPF configuration for The instance/topology container defines the OSPF configuration and
OSPF topologies when the multi-topology feature is supported. operational state for OSPF topologies when the multi-topology feature
is supported.
2.2. OSPFv2 and OSPFv3 2.3. OSPFv2 and OSPFv3
The data model defined herein supports both OSPFv2 and OSPFv3. The data model defined herein supports both OSPFv2 and OSPFv3.
The field 'version' is used to indicate the OSPF version and is The field 'version' is used to indicate the OSPF version and is
mandatory. Based on the configured version, the data model varies to mandatory. Based on the configured version, the data model varies to
accommodate the differences between OSPFv2 and OSPFv3. accommodate the differences between OSPFv2 and OSPFv3.
2.3. Optional Features 2.4. Optional Features
Optional features are beyond the basic OSPF configuration and it is Optional features are beyond the basic OSPF configuration and it is
the responsibility of each vendor to decide whether to support a the responsibility of each vendor to decide whether to support a
given feature on a particular device. given feature on a particular device.
This model defines a number of features, such as NSR, max-LSA, etc. This model defines a number of features, such as NSR, max-LSA, etc.
It is expected that vendors will support additional features through It is expected that vendors will support additional features through
vendor specific augmentations. vendor-specific augmentations.
2.4. Inheritance
This data model supports configuration inheritance at different
levels including instance-level, area-level, and interface-level
inheritance.
The all-instances-inherit, all-areas-inherit, and all-interfaces-
inherit containers are defined to provide a consistent way to
configure inheritable configuration parameters. For example,
parameters defined in the all-instances-inherit container apply to
all OSPF instances. However, a particular instance configuration can
include leaves that override this inheritance.
Inheritance is defined as an optional feature, and vendors are
permitted to augment the inheritance containers with their own vendor
specific parameters.
2.5. OSPF Router Configuration 2.5. OSPF Router Configuration/Operational State
The ospf container is the top level container in this data model. It The ospf container is the top level container in this data model. It
contains shared information among the OSPF instances configured contains shared information among the OSPF instances configured
within the container. within the container.
module: ietf-ospf module: ietf-ospf
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw ospf +--rw ospf
+--rw all-instances-inherit {instance-inheritance}?
| +--rw area
| +--rw interface
+--rw operation-mode? identityref +--rw operation-mode? identityref
+--rw instance* [af] +--rw instance* [af]
. .
. .
2.6. OSPF Instance Configuration 2.6. OSPF Instance Configuration/Operational State
The instance container represents an OSPF protocol engine and The instance container represents an OSPF protocol engine and
contains the router level configuration. The routing domain for each contains the router level configuration and operational state. The
instance is dictated through the specification of [routing-instance routing domain for each instance is dictated through the
af]. specification of [routing-instance af]. The instance level
operational state includes the instance level statistics, IETF SPF
The all-areas-inherit container contains area configuration that may delay statistics, AS-Scoped Link State Database, local RIB, SPF Log,
be inherited by configured OSPF areas in the OSPF instance. and the LSA log.
module: ietf-ospf module: ietf-ospf
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw ospf +--rw ospf
. .
. .
+--rw instance* [af] +--rw instance* [af]
+--rw af identityref +--rw af identityref
+--rw all-areas-inherit {area-inheritance}?
| +--rw area
| +--rw interface
+--rw explicit-router-id? rt-types:router-id +--rw explicit-router-id? rt-types:router-id
| {explicit-router-id}? | {explicit-router-id}?
+--rw preference +--rw preference
| +--rw (scope)? | +--rw (scope)?
| +--:(single-value) | +--:(single-value)
| | +--rw all? uint8 | | +--rw all? uint8
| +--:(multi-values) | +--:(multi-values)
| +--rw (granularity)? | +--rw (granularity)?
| | +--:(detail) | | +--:(detail)
| | | +--rw intra-area? uint8 | | | +--rw intra-area? uint8
skipping to change at page 7, line 39 skipping to change at page 7, line 13
| +--rw te-rid {te-rid}? | +--rw te-rid {te-rid}?
| | +--rw ipv4-router-id? inet:ipv4-address | | +--rw ipv4-router-id? inet:ipv4-address
| | +--rw ipv6-router-id? inet:ipv6-address | | +--rw ipv6-router-id? inet:ipv6-address
| +--rw ldp | +--rw ldp
| +--rw igp-sync? boolean {ldp-igp-sync}? | +--rw igp-sync? boolean {ldp-igp-sync}?
+--rw fast-reroute {fast-reroute}? +--rw fast-reroute {fast-reroute}?
| +--rw lfa {lfa}? | +--rw lfa {lfa}?
+--rw node-tags {node-tag}? +--rw node-tags {node-tag}?
| +--rw node-tag* [tag] | +--rw node-tag* [tag]
| +--rw tag uint32 | +--rw tag uint32
+--ro router-id?
+--ro local-rib
| +--ro route* [prefix]
| +--ro prefix inet:ip-prefix
| +--ro next-hops
| | +--ro next-hop* [next-hop]
| | +--ro outgoing-interface? if:interface-ref
| | +--ro next-hop inet:ip-address
| +--ro metric? uint32
| +--ro route-type? route-type
| +--ro route-tag? uint32
+--ro statistics
| +--ro originate-new-lsa-count? yang:counter32
| +--ro rx-new-lsas-count? yang:counter32
| +--ro as-scope-lsa-count? yang:gauge32
| +--ro as-scope-lsa-chksum-sum? uint32
| +--ro database
| +--ro as-scope-lsa-type*
| +--ro lsa-type? uint16
| +--ro lsa-count? yang:gauge32
| +--ro lsa-cksum-sum? int32
+--ro ietf-spf-delay
| +--ro initial-delay? uint16
| +--ro short-delay? uint16
| +--ro long-delay? uint16
| +--ro hold-down? uint16
| +--ro time-to-learn? uint16
| +--ro current-state? enumeration
| +--ro remaining-time-to-learn? uint16
| +--ro remaining-hold-down? uint16
| +--ro last-event-received? yang:timestamp
| +--ro next-spf-time? yang:timestamp
| +--ro last-spf-time? yang:timestamp
+--ro database
| +--ro as-scope-lsa-type* [lsa-type]
| +--ro as-scope-lsas
| +--ro as-scope-lsa* [lsa-id adv-router]
| +--ro lsa-id union
| +--ro adv-router inet:ipv4-address
| +--ro decoded-completed? boolean
| +--ro raw-data? yang:hex-string
| +--ro (version)?
| +--:(ospfv2)
| | +--ro ospfv2
. .
. .
| +--:(ospfv3)
| +--ro ospfv3
.
.
+--ro spf-log
| +--ro event* [id]
| +--ro id uint32
| +--ro spf-type? enumeration
| +--ro schedule-timestamp? yang:timestamp
| +--ro start-timestamp? yang:timestamp
| +--ro end-timestamp? yang:timestamp
| +--ro trigger-lsa*
| +--ro area-id? area-id-type
| +--ro link-id? union
| +--ro type? uint16
| +--ro lsa-id? yang:dotted-quad
| +--ro adv-router? yang:dotted-quad
| +--ro seq-num? uint32
+--ro lsa-log
| +--ro event* [id]
| +--ro id uint32
| +--ro lsa
| | +--ro area-id? area-id-type
| | +--ro link-id? union
| | +--ro type? uint16
| | +--ro lsa-id? yang:dotted-quad
| | +--ro adv-router? yang:dotted-quad
| | +--ro seq-num? uint32
| +--ro received-timestamp? yang:timestamp
| +--ro reason? identityref
. .
. .
2.7. OSPF Area Configuration 2.7. OSPF Area Configuration/Operational State
The area container contains OSPF area configuration and the list of The area container contains OSPF area configuration and the list of
interface containers representing all the OSPF interfaces in the interface containers representing all the OSPF interfaces in the
area. area. The area operational state includes the area statistics and
the area Link State Database (LSDB).
The all-interfaces-inherit contains interface configuration that may
be inherited by all OSPF area interfaces.
module: ietf-ospf module: ietf-ospf
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw ospf +--rw ospf
. .
. .
+--rw instance* [af] +--rw instance* [af]
+--rw areas +--rw areas
| +--rw area* [area-id] | +--rw area* [area-id]
| +--rw area-id area-id-type | +--rw area-id area-id-type
| +--rw all-interfaces-inherit {interface-inheritance}?
| | +--rw interface
| +--rw area-type? identityref | +--rw area-type? identityref
| +--rw summary? boolean | +--rw summary? boolean
| +--rw default-cost? uint32 | +--rw default-cost? uint32
| +--rw ranges | +--rw ranges
| | +--rw range* [prefix] | | +--rw range* [prefix]
| | +--rw prefix inet:ip-prefix | | +--rw prefix inet:ip-prefix
| | +--rw advertise? boolean | | +--rw advertise? boolean
| | +--rw cost? uint24 | | +--rw cost? uint24
| +--ro statistics
| | +--ro spf-runs-count? yang:counter32
| | +--ro abr-count? yang:gauge32
| | +--ro asbr-count? yang:gauge32
| | +--ro ar-nssa-translator-event-count?
| | yang:counter32
| | +--ro area-scope-lsa-count? yang:gauge32
| | +--ro area-scope-lsa-cksum-sum? int32
| | +--ro database
| | +--ro area-scope-lsa-type*
| | +--ro lsa-type? uint16
| | +--ro lsa-count? yang:gauge32
| | +--ro lsa-cksum-sum? int32
| +--ro database
| | +--ro area-scope-lsa-type* [lsa-type]
| | +--ro lsa-type uint16
| | +--ro area-scope-lsas
| | +--ro area-scope-lsa* [lsa-id adv-router]
| | +--ro lsa-id union
. . .
. . .
| | +--ro (version)?
| | +--:(ospfv2)
| | | +--ro ospfv2
| | | +--ro header
. . . .
. . . .
| | | +--ro body
| | | +--ro router
. . . .
. . . .
| | | +--ro network
. . . .
. . . .
| | | +--ro summary
. . . .
. . . .
| | | +--ro external
. . . .
. . . .
| | | +--ro opaque
. . . .
. . . .
| | +--:(ospfv3)
| | +--ro ospfv3
| | +--ro header
. . .
. . .
| | +--ro body
| | +--ro router
. . .
. . .
| | +--ro network
. . .
. . .
| | +--ro inter-area-prefix
. . .
. . .
| | +--ro inter-area-router
. . .
. . .
| | +--ro as-external
. . .
. . .
| | +--ro nssa
. . .
. . .
| | +--ro link
. . .
. . .
| | +--ro intra-area-prefix
. . .
. . .
| | +--ro router-information
. . .
. . .
| +--rw virtual-links | +--rw virtual-links
| | +--rw virtual-link* [transit-area-id router-id] | | +--rw virtual-link* [transit-area-id router-id]
| | +--rw transit-area-id -> ../../../area-id | | +--rw transit-area-id -> ../../../../
| | area/area-id
| | +--rw router-id rt-types:router-id | | +--rw router-id rt-types:router-id
| | +--rw hello-interval? uint16 | | +--rw hello-interval? uint16
| | +--rw dead-interval? uint32 | | +--rw dead-interval? uint32
| | +--rw retransmit-interval? uint16 | | +--rw retransmit-interval? uint16
| | +--rw transmit-delay? uint16 | | +--rw transmit-delay? uint16
| | +--rw lls? boolean {lls}? | | +--rw lls? boolean {lls}?
| | +--rw ttl-security {ttl-security}? | | +--rw ttl-security {ttl-security}?
| | | +--rw enable? boolean | | | +--rw enable? boolean
| | | +--rw hops? uint8 | | | +--rw hops? uint8
| | +--rw enable? boolean | | +--rw enable? boolean
skipping to change at page 8, line 48 skipping to change at page 11, line 27
| | +--rw (auth-type-selection)? | | +--rw (auth-type-selection)?
| | +--:(auth-ipsec) | | +--:(auth-ipsec)
| | {ospfv3-authentication-ipsec}? | | {ospfv3-authentication-ipsec}?
| | | +--rw sa? string | | | +--rw sa? string
| | +--:(auth-trailer-key-chain) | | +--:(auth-trailer-key-chain)
| | | +--rw key-chain? | | | +--rw key-chain?
| | key-chain:key-chain-ref | | key-chain:key-chain-ref
| | +--:(auth-trailer-key) | | +--:(auth-trailer-key)
| | +--rw key? string | | +--rw key? string
| | +--rw crypto-algorithm? identityref | | +--rw crypto-algorithm? identityref
| | +--ro cost? uint16
| | +--ro state? if-state-type
| | +--ro hello-timer? uint32
| | +--ro wait-timer? uint32
| | +--ro dr-router-id? rt-types:router-id
| | +--ro dr-ip-addr? inet:ip-address
| | +--ro bdr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address
| | +--ro statistics
| | | +--ro if-event-count? yang:counter32
| | | +--ro link-scope-lsa-count? yang:gauge32
| | | +--ro link-scope-lsa-cksum-sum?
| | | uint32
| | | +--ro database
| | | +--ro link-scope-lsa-type*
| | | +--ro lsa-type? uint16
| | | +--ro lsa-count? yang:gauge32
| | | +--ro lsa-cksum-sum? int32
| | +--ro neighbors
| | | +--ro neighbor* [neighbor-router-id]
| | | +--ro neighbor-router-id
| | | rt-types:router-id
| | | +--ro address? inet:ip-address
| | | +--ro dr-router-id? rt-types:router-id
| | | +--ro dr-ip-addr? inet:ip-address
| | | +--ro bdr-router-id? rt-types:router-id
| | | +--ro bdr-ip-addr? inet:ip-address
| | | +--ro state? nbr-state-type
| | | +--ro dead-timer? uint32
| | | +--ro statistics
| | | +--ro nbr-event-count?
| | | yang:counter32
| | | +--ro nbr-retrans-qlen?
| | | yang:gauge32
| | +--ro database
| | +--ro link-scope-lsa-type* [lsa-type]
| | +--ro lsa-type uint16
| | +--ro link-scope-lsas
. .
. .
| +--rw sham-links {pe-ce-protocol}? | +--rw sham-links {pe-ce-protocol}?
| | +--rw sham-link* [local-id remote-id] | | +--rw sham-link* [local-id remote-id]
| | +--rw local-id inet:ip-address | | +--rw local-id inet:ip-address
| | +--rw remote-id inet:ip-address | | +--rw remote-id inet:ip-address
| | +--rw hello-interval? uint16 | | +--rw hello-interval? uint16
| | +--rw dead-interval? uint32 | | +--rw dead-interval? uint32
| | +--rw retransmit-interval? uint16 | | +--rw retransmit-interval? uint16
| | +--rw transmit-delay? uint16 | | +--rw transmit-delay? uint16
| | +--rw lls? boolean {lls}? | | +--rw lls? boolean {lls}?
| | +--rw ttl-security {ttl-security}? | | +--rw ttl-security {ttl-security}?
skipping to change at page 9, line 30 skipping to change at page 12, line 49
| | | | +--rw key-chain? | | | | +--rw key-chain?
| | | key-chain:key-chain-ref | | | key-chain:key-chain-ref
| | | +--:(auth-trailer-key) | | | +--:(auth-trailer-key)
| | | +--rw key? string | | | +--rw key? string
| | | +--rw crypto-algorithm? identityref | | | +--rw crypto-algorithm? identityref
| | +--rw cost? uint16 | | +--rw cost? uint16
| | +--rw mtu-ignore? boolean | | +--rw mtu-ignore? boolean
| | {mtu-ignore}? | | {mtu-ignore}?
| | +--rw prefix-suppression? boolean | | +--rw prefix-suppression? boolean
| | {prefix-suppression}? | | {prefix-suppression}?
| | +--ro state? if-state-type
| | +--ro hello-timer? uint32
| | +--ro wait-timer? uint32
| | +--ro dr-router-id? rt-types:router-id
| | +--ro dr-ip-addr? inet:ip-address
| | +--ro bdr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address
| | +--ro statistics
| | | +--ro if-event-count? yang:counter32
| | | +--ro link-scope-lsa-count? yang:gauge32
| | | +--ro link-scope-lsa-cksum-sum?
| | | uint32
| | | +--ro database
| | | +--ro link-scope-lsa-type*
| | | +--ro lsa-type? uint16
| | | +--ro lsa-count? yang:gauge32
| | | +--ro lsa-cksum-sum? int32
| | +--ro neighbors
| | | +--ro neighbor* [neighbor-router-id]
| | | +--ro neighbor-router-id
| | | rt-types:router-id
| | | +--ro address? inet:ip-address
| | | +--ro dr-router-id? rt-types:router-id
| | | +--ro dr-ip-addr? inet:ip-address
| | | +--ro bdr-router-id? rt-types:router-id
| | | +--ro bdr-ip-addr? inet:ip-address
| | | +--ro state? nbr-state-type
| | | +--ro dead-timer? uint32
| | | +--ro statistics
| | | +--ro nbr-event-count?
| | | yang:counter32
| | | +--ro nbr-retrans-qlen?
| | | yang:gauge32
| | +--ro database
| | +--ro link-scope-lsa-type* [lsa-type]
| | +--ro lsa-type uint16
| | +--ro link-scope-lsas
. . . .
. . . .
2.8. OSPF Interface Configuration 2.8. OSPF Interface Configuration/Operational State
The interface container contains OSPF interface configuration. The interface container contains OSPF interface configuration and
operational state. The interface operational state includes the
statistics, list of neighbors, and link-local Link State database
(LSDB).
module: ietf-ospf module: ietf-ospf
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw ospf +--rw ospf
. .
. .
+--rw instance* [af] +--rw instance* [af]
. .
. .
skipping to change at page 11, line 8 skipping to change at page 15, line 19
| | | +--rw key-chain? | | | +--rw key-chain?
| | | key-chain:key-chain-ref | | | key-chain:key-chain-ref
| | +--:(auth-trailer-key) | | +--:(auth-trailer-key)
| | +--rw key? string | | +--rw key? string
| | +--rw crypto-algorithm? identityref | | +--rw crypto-algorithm? identityref
| +--rw cost? uint16 | +--rw cost? uint16
| +--rw mtu-ignore? boolean | +--rw mtu-ignore? boolean
| | {mtu-ignore}? | | {mtu-ignore}?
| +--rw prefix-suppression? boolean | +--rw prefix-suppression? boolean
| | {prefix-suppression}? | | {prefix-suppression}?
| +--ro state? if-state-type
| +--ro hello-timer? uint32
| +--ro wait-timer? uint32
| +--ro dr-router-id? rt-types:router-id
| +--ro dr-ip-addr? inet:ip-address
| +--ro bdr-router-id? rt-types:router-id
| +--ro bdr-ip-addr? inet:ip-address
| +--ro statistics
| | +--ro if-event-count? yang:counter32
| | +--ro link-scope-lsa-count? yang:gauge32
| | +--ro link-scope-lsa-cksum-sum?
| | uint32
| | +--ro database
| | +--ro link-scope-lsa-type*
| | +--ro lsa-type? uint16
| | +--ro lsa-count? yang:gauge32
| | +--ro lsa-cksum-sum? int32
| +--ro neighbors
| | +--ro neighbor* [neighbor-router-id]
| | +--ro neighbor-router-id
| | rt-types:router-id
| | +--ro address? inet:ip-address
| | +--ro dr-router-id? rt-types:router-id
| | +--ro dr-ip-addr? inet:ip-address
| | +--ro bdr-router-id? rt-types:router-id
| | +--ro bdr-ip-addr? inet:ip-address
| | +--ro state? nbr-state-type
| | +--ro dead-timer? uint32
| | +--ro statistics
| | +--ro nbr-event-count?
| | yang:counter32
| | +--ro nbr-retrans-qlen?
| | yang:gauge32
| +--ro database
| . +--ro link-scope-lsa-type* [lsa-type]
| . +--ro lsa-type uint16
| . +--ro link-scope-lsas
. .
. .
| +--rw topologies {ospf:multi-topology}? | +--rw topologies {ospf:multi-topology}?
| | +--rw topology* [name] | | +--rw topology* [name]
| | +--rw name -> ../../../../../../../../ | | +--rw name -> ../../../../../../../../
| | ../../../rt:ribs/rib/name | | ../../../rt:ribs/rib/name
| | +--rw cost? uint32 | | +--rw cost? uint32
| +--rw instance-id? uint8 | +--rw instance-id? uint8
. .
. .
2.9. OSPF notification 2.9. OSPF notification
skipping to change at page 15, line 28 skipping to change at page 20, line 28
| + control-plane-protocol/name | + control-plane-protocol/name
| +---w interface? if:interface-ref | +---w interface? if:interface-ref
+---x clear-database +---x clear-database
+---w input +---w input
+---w routing-protocol-name +---w routing-protocol-name
-> /rt:routing/control-plane-protocols/ -> /rt:routing/control-plane-protocols/
control-plane-protocol/name control-plane-protocol/name
3. OSPF Yang Module 3. OSPF Yang Module
<CODE BEGINS> file "ietf-ospf@2017-03-12.yang" <CODE BEGINS> file "ietf-ospf@2017-07-01.yang"
module ietf-ospf { module ietf-ospf {
namespace "urn:ietf:params:xml:ns:yang:ietf-ospf"; namespace "urn:ietf:params:xml:ns:yang:ietf-ospf";
prefix ospf; prefix ospf;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
skipping to change at page 15, line 50 skipping to change at page 20, line 50
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix "rt-types";
} }
import iana-routing-types {
prefix "iana-rt-types";
}
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
import ietf-key-chain { import ietf-key-chain {
prefix "key-chain"; prefix "key-chain";
} }
organization organization
"Cisco Systems "IETF OSPF - OSPF Working Group";
170 West Tasman Drive
San Jose, CA 95134-1706
USA";
contact contact
"WG Web: <http://tools.ietf.org/wg/ospf/> "WG Web: <http://datatracker.ietf.org/group/ospf/>
WG List: <mailto:ospf@ietf.org> WG List: <mailto:ospf@ietf.org>
WG Chair: Acee Lindem
<mailto:acee@cisco.com>
WG Chair: Abhay Roy
<mailto:akr@cisco.com>
Editor: Derek Yeung Editor: Derek Yeung
<mailto:derek@arrcus.com> <mailto:derek@arrcus.com>
Author: Derek Yeung Author: Acee Lindem
<mailto:derek@arrcus.com> <mailto:acee@cisco.com>
Author: Yingzhen Qu Author: Yingzhen Qu
<mailto:yingzhen.qu@huawei.com> <mailto:yingzhen.qu@huawei.com>
Author: Jeffrey Zhang Author: Jeffrey Zhang
<mailto:zzhang@juniper.net> <mailto:zzhang@juniper.net>
Author: Ing-Wher Chen Author: Ing-Wher Chen
<mailto:ing-wher_chen@jabil.com> <mailto:ing-wher_chen@jabil.com>
Author: Dean Bogdanovic Author: Dean Bogdanovic
<mailto:ivandean@gmail.com> <mailto:ivandean@gmail.com>
Author: Kiran Agrahara Sreenivasa Author: Kiran Agrahara Sreenivasa
<mailto:kkoushik@cisco.com>"; <mailto:kkoushik@cisco.com>";
description description
"This YANG module defines the generic configuration and "This YANG module defines the generic configuration and
operational state for the OSPF protocol common to all operational state for the OSPF protocol common to all
vendor implementations. It is intended that the module vendor implementations. It is intended that the module
will be extended by vendors to define vendor-specific will be extended by vendors to define vendor-specific
OSPF configuration parameters and policies, OSPF configuration parameters and policies,
for example route maps or route policies. for example route maps or route policies.
Terms and Acronyms
OSPF (ospf): Open Shortest Path First Copyright (c) 2017 IETF Trust and the persons identified as
authors of the code. All rights reserved.
IP (ip): Internet Protocol Redistribution and use in source and binary forms, with or
IPv4 (ipv4):Internet Protocol Version 4 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices.";
IPv6 (ipv6): Internet Protocol Version 6 reference "RFC XXXX";
MTU (mtu) Maximum Transmission Unit revision 2017-07-01 {
"; description
"* Restructure model to conform to NMDA.
* Remove features for instance, area and interface
inheritance.
* Update static neighbor identifier description to
allow for router-id, ipv4-address, and ipv6-address.
* Added spf-log and lsa-log.
* Use dotted-quad for OSPFv2 LSA ID.
* Fix virtual-link transit-area-id leafref path and
must statement.
";
reference
"RFC XXXX: A YANG Data Model for OSPF.";
}
revision 2017-03-12 { revision 2017-03-12 {
description description
"* Update authors information. "* Update authors information.
* Rename admin distance to preference. * Rename admin distance to preference.
* Rename network type to interface type. * Rename network type to interface type.
* Add ietf-spf-delay as a feature. * Add ietf-spf-delay as a feature.
* Add node-tag as a feature and update LSA * Add node-tag as a feature and update LSA
definition accordingly. definition accordingly.
* Remove LDP IGP autoconfig. * Remove LDP IGP autoconfig.
skipping to change at page 20, line 28 skipping to change at page 25, line 42
"RFC XXXX: A YANG Data Model for OSPF."; "RFC XXXX: A YANG Data Model for OSPF.";
} }
revision 2015-03-09 { revision 2015-03-09 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for OSPF."; "RFC XXXX: A YANG Data Model for OSPF.";
} }
feature multi-topology {
description
"Support Multiple-Topolgy Routing (MTR).";
}
feature multi-area-adj {
description
"OSPF multi-area adjacency support as in RFC 5185.";
}
feature explicit-router-id {
description
"Set Router-ID per instance explicitly.";
}
feature demand-circuit {
description
"OSPF demand circuit support as in RFC 1793.";
}
feature mtu-ignore {
description
"Disable OSPF Database Description packet MTU
mismatch checking.";
}
feature lls {
description
"OSPF link-local signaling (LLS) as in RFC 5613.";
}
feature prefix-suppression {
description
"OSPF prefix suppression support as in RFC 6860.";
}
feature ttl-security {
description
"OSPF TTL security check.";
}
feature nsr {
description
"Non-Stop-Routing (NSR).";
}
feature graceful-restart {
description
"Graceful OSPF Restart as defined in RFC 3623 and
RFC 5187.";
}
feature admin-control {
description
"Administrative control of the protocol state.";
}
feature auto-cost {
description
"Calculate OSPF interface cost according to
reference bandwidth.";
}
feature max-ecmp {
description
"Setting maximum number of ECMP paths.";
}
feature max-lsa {
description
"Setting maximum number of LSAs the OSPF instance
will accept.";
}
feature te-rid {
description
"TE Router-ID.";
}
feature ldp-igp-sync {
description
"LDP IGP synchronization.";
}
feature ospfv3-authentication-ipsec {
description
"Use IPsec for OSPFv3 authentication.";
}
feature fast-reroute {
description
"Support of IP Fast Reroute (IP-FRR).";
}
feature node-flag {
description
"Support of node flag.";
}
feature node-tag {
description
"Support of node tag.";
}
feature lfa {
description
"Support of Loop Free Alternates (LFAs).";
}
feature remote-lfa {
description
"Support of Remote Loop Free Alternates (R-LFA).";
}
feature stub-router {
description
"Support of RFC 6987 OSPF Stub Router Advertisement.";
}
feature pe-ce-protocol {
description
"Support PE-CE protocol";
}
feature ietf-spf-delay {
description
"Support of IETF SPF delay algorithm.";
}
feature bfd {
description
"Support of BFD.";
}
identity ospfv2 { identity ospfv2 {
base "rt:routing-protocol"; base "rt:routing-protocol";
description "OSPFv2"; description "OSPFv2";
} }
identity ospfv3 { identity ospfv3 {
base "rt:routing-protocol"; base "rt:routing-protocol";
description "OSPFv3"; description "OSPFv3";
} }
skipping to change at page 21, line 19 skipping to change at page 29, line 22
identity stub { identity stub {
base area-type; base area-type;
description "OSPF stub area."; description "OSPF stub area.";
} }
identity nssa { identity nssa {
base area-type; base area-type;
description "OSPF NSSA area."; description "OSPF NSSA area.";
} }
identity lsa-log-reason {
description
"Base identity for an LSA log reason.";
}
identity lsa-refresh {
base lsa-log-reason;
description
"Identity used when the LSA is logged
as a result of receiving a refresh LSA.";
}
identity lsa-content-change {
base lsa-log-reason;
description
"Identity used when the LSA is logged
as a result of a change in the content
of the LSA.";
}
identity lsa-purge {
base lsa-log-reason;
description
"Identity used when the LSA is logged
as a result of being purged.";
}
typedef uint24 { typedef uint24 {
type uint32 { type uint32 {
range "0 .. 16777215"; range "0 .. 16777215";
} }
description description
"24-bit unsigned integer."; "24-bit unsigned integer.";
} }
typedef area-id-type { typedef area-id-type {
type yang:dotted-quad; type yang:dotted-quad;
description description
"Area ID type."; "Area ID type.";
} }
skipping to change at page 26, line 39 skipping to change at page 35, line 21
} }
typedef checksum16-type { typedef checksum16-type {
type string { type string {
pattern '(0x)?[0-9a-fA-F]{4}'; pattern '(0x)?[0-9a-fA-F]{4}';
} }
description description
"16-bit checksum in hex-string format 0xXXXX."; "16-bit checksum in hex-string format 0xXXXX.";
} }
feature multi-topology {
description
"Support Multiple-Topolgy Routing (MTR).";
}
feature multi-area-adj {
description
"OSPF multi-area adjacency support as in RFC 5185.";
}
feature explicit-router-id {
description
"Set Router-ID per instance explicitly.";
}
feature demand-circuit {
description
"OSPF demand circuit support as in RFC 1793.";
}
feature mtu-ignore {
description
"Disable OSPF Database Description packet MTU
mismatch checking.";
}
feature lls {
description
"OSPF link-local signaling (LLS) as in RFC 5613.";
}
feature prefix-suppression {
description
"OSPF prefix suppression support as in RFC 6860.";
}
feature ttl-security {
description
"OSPF TTL security check.";
}
feature nsr {
description
"Non-Stop-Routing (NSR).";
}
feature graceful-restart {
description
"Graceful OSPF Restart as defined in RFC 3623 and
RFC 5187.";
}
feature admin-control {
description
"Administrative control of the protocol state.";
}
feature auto-cost {
description
"Calculate OSPF interface cost according to
reference bandwidth.";
}
feature max-ecmp {
description
"Setting maximum number of ECMP paths.";
}
feature max-lsa {
description
"Setting maximum number of LSAs the OSPF instance
will accept.";
}
feature te-rid {
description
"TE Router-ID.";
}
feature ldp-igp-sync {
description
"LDP IGP synchronization.";
}
feature ospfv3-authentication-ipsec {
description
"Use IPsec for OSPFv3 authentication.";
}
feature fast-reroute {
description
"Support of IP Fast Reroute (IP-FRR).";
}
feature node-flag {
description
"Support of node flag.";
}
feature node-tag {
description
"Support of node tag.";
}
feature lfa {
description
"Support of Loop Free Alternates (LFAs).";
}
feature remote-lfa {
description
"Support of Remote Loop Free Alternates (R-LFA).";
}
feature stub-router {
description
"Support of RFC 6987 OSPF Stub Router Advertisement.";
}
feature instance-inheritance {
description
"Support instance inheritance";
}
feature area-inheritance {
description
"Support area inheritance";
}
feature interface-inheritance {
description
"Support interface inheritance";
}
feature pe-ce-protocol {
description
"Support PE-CE protocol";
}
feature ietf-spf-delay {
description
"Support of IETF SPF delay algorithm.";
}
feature bfd {
description
"Support of BFD.";
}
grouping tlv { grouping tlv {
description description
"TLV"; "TLV";
leaf type { leaf type {
type uint16; type uint16;
description "TLV type."; description "TLV type.";
} }
leaf length { leaf length {
type uint16; type uint16;
description "TLV length."; description "TLV length.";
skipping to change at page 47, line 17 skipping to change at page 52, line 44
bit DN { bit DN {
description description
"When a type 3, 5 or 7 LSA is sent from a PE to a CE, "When a type 3, 5 or 7 LSA is sent from a PE to a CE,
the DN bit must be set. See RFC 4576."; the DN bit must be set. See RFC 4576.";
} }
} }
mandatory true; mandatory true;
description "LSA options."; description "LSA options.";
} }
leaf lsa-id { leaf lsa-id {
type inet:ipv4-address; type yang:dotted-quad;
mandatory true; mandatory true;
description "LSA ID."; description "LSA ID.";
} }
leaf opaque-type { leaf opaque-type {
type uint8; type uint8;
description "Opaque type."; description "Opaque type.";
} }
leaf opaque-id { leaf opaque-id {
type uint24; type uint24;
description "Opaque ID."; description "Opaque ID.";
} }
uses lsa-header; uses lsa-header;
} }
container body { container body {
skipping to change at page 48, line 51 skipping to change at page 54, line 31
uses ospfv3-lsa; uses ospfv3-lsa;
} }
} }
} }
grouping lsa-key { grouping lsa-key {
description description
"OSPF LSA key."; "OSPF LSA key.";
leaf lsa-id { leaf lsa-id {
type union { type union {
type inet:ipv4-address; type yang:dotted-quad;
type uint32; type uint32;
} }
description description
"LSA ID."; "LSA ID.";
} }
leaf adv-router { leaf adv-router {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Advertising router."; "Advertising router.";
} }
skipping to change at page 58, line 13 skipping to change at page 63, line 40
container static-neighbors { container static-neighbors {
description "Statically configured neighbors."; description "Statically configured neighbors.";
list neighbor { list neighbor {
key "identifier"; key "identifier";
description description
"Specify a static OSPF neighbor."; "Specify a static OSPF neighbor.";
leaf identifier { leaf identifier {
type inet:ip-address; type inet:ip-address;
description "Neighbor IPv4 address or router ID."; description
"Neighbor router ID, IPv4 address, or IPv6 address.";
} }
leaf cost { leaf cost {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
} }
description "Neighbor cost."; description "Neighbor cost.";
} }
leaf poll-interval { leaf poll-interval {
type uint16 { type uint16 {
skipping to change at page 59, line 14 skipping to change at page 64, line 42
description description
"True if BFD is enabled for the OSPF interface."; "True if BFD is enabled for the OSPF interface.";
} }
} }
uses interface-fast-reroute-config; uses interface-fast-reroute-config;
uses interface-common-config; uses interface-common-config;
uses interface-physical-link-config; uses interface-physical-link-config;
} // grouping interface-config } // grouping interface-config
grouping neighbor-operation { grouping neighbor-state {
description description
"OSPF neighbor operation data."; "OSPF neighbor operational state.";
leaf address { leaf address {
type inet:ip-address; type inet:ip-address;
config false;
description description
"Neighbor address."; "Neighbor address.";
} }
leaf dr-router-id { leaf dr-router-id {
type rt-types:router-id; type rt-types:router-id;
config false;
description "Neighbor's Designated Router (DR) router ID."; description "Neighbor's Designated Router (DR) router ID.";
} }
leaf dr-ip-addr { leaf dr-ip-addr {
type inet:ip-address; type inet:ip-address;
config false;
description "Neighbor's Designated Router (DR) IP address."; description "Neighbor's Designated Router (DR) IP address.";
} }
leaf bdr-router-id { leaf bdr-router-id {
type rt-types:router-id; type rt-types:router-id;
config false;
description description
"Neighbor's Backup Designated Router (BDR) router ID."; "Neighbor's Backup Designated Router (BDR) router ID.";
} }
leaf bdr-ip-addr { leaf bdr-ip-addr {
type inet:ip-address; type inet:ip-address;
config false;
description description
"Neighbor's Backup Designated Router (BDR) IP Address."; "Neighbor's Backup Designated Router (BDR) IP Address.";
} }
leaf state { leaf state {
type nbr-state-type; type nbr-state-type;
config false;
description description
"OSPF neighbor state."; "OSPF neighbor state.";
} }
leaf dead-timer { leaf dead-timer {
type uint32; type uint32;
units "seconds"; units "seconds";
config false;
description "This timer tracks the remaining time before description "This timer tracks the remaining time before
the neighbor is declared dead."; the neighbor is declared dead.";
} }
container statistics { container statistics {
config false;
description "Per neighbor statistics"; description "Per neighbor statistics";
uses neighbor-stat; uses neighbor-stat;
} }
} }
grouping interface-common-operation { grouping interface-common-state {
description description
"OSPF interface common operation state."; "OSPF interface common operational state.";
reference "RFC2328 Section 9"; reference "RFC2328 Section 9";
leaf state { leaf state {
type if-state-type; type if-state-type;
config false;
description "Interface state."; description "Interface state.";
} }
leaf hello-timer { leaf hello-timer {
type uint32; type uint32;
units "seconds"; units "seconds";
config false;
description "This timer tracks the remaining time before description "This timer tracks the remaining time before
the next hello packet is sent."; the next hello packet is sent.";
} }
leaf wait-timer { leaf wait-timer {
type uint32; type uint32;
units "seconds"; units "seconds";
config false;
description "This timer tracks the remaining time before description "This timer tracks the remaining time before
the interface exits the Waiting state."; the interface exits the Waiting state.";
} }
leaf dr-router-id { leaf dr-router-id {
type rt-types:router-id; type rt-types:router-id;
config false;
description "Designated Router (DR) router ID."; description "Designated Router (DR) router ID.";
} }
leaf dr-ip-addr { leaf dr-ip-addr {
type inet:ip-address; type inet:ip-address;
config false;
description "Designated Router (DR) IP address."; description "Designated Router (DR) IP address.";
} }
leaf bdr-router-id { leaf bdr-router-id {
type rt-types:router-id; type rt-types:router-id;
config false;
description "Backup Designated Router (BDR) router ID."; description "Backup Designated Router (BDR) router ID.";
} }
leaf bdr-ip-addr { leaf bdr-ip-addr {
type inet:ip-address; type inet:ip-address;
config false;
description "Backup Designated Router (BDR) IP Address."; description "Backup Designated Router (BDR) IP Address.";
} }
container statistics { container statistics {
config false;
description "Per interface statistics"; description "Per interface statistics";
uses interface-stat; uses interface-stat;
} }
container neighbors { container neighbors {
config false;
description "All neighbors for the interface."; description "All neighbors for the interface.";
list neighbor { list neighbor {
key "neighbor-router-id"; key "neighbor-router-id";
description description
"List of OSPF neighbors."; "List of OSPF neighbors.";
leaf neighbor-router-id { leaf neighbor-router-id {
type rt-types:router-id; type rt-types:router-id;
description description
"Neighbor router ID."; "Neighbor router ID.";
} }
uses neighbor-operation; uses neighbor-state;
} // list of OSPF neighbors } // list of OSPF neighbors
} }
} // interface-common-operation
grouping interface-operation {
description
"OSPF interface operation state.";
reference "RFC2328 Section 9";
uses interface-common-operation;
container database { container database {
config false;
description "Link scope LSA database."; description "Link scope LSA database.";
list link-scope-lsa-type { list link-scope-lsa-type {
key "lsa-type"; key "lsa-type";
description description
"List OSPF link scope LSA databases."; "List OSPF link scope LSA databases.";
leaf lsa-type { leaf lsa-type {
type uint16; type uint16;
description "OSPF link scope LSA type."; description "OSPF link scope LSA type.";
} }
container link-scope-lsas { container link-scope-lsas {
skipping to change at page 62, line 24 skipping to change at page 68, line 13
must "../../../../../../../../../../../" must "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" { + "rt:type = 'ospf:ospfv3'" {
description "OSPFv3 LSA."; description "OSPFv3 LSA.";
} }
} }
} }
} }
} }
} // list link-scope-lsas } // list link-scope-lsas
} }
} // interface-common-state
grouping interface-state {
description
"OSPF interface operational state.";
reference "RFC2328 Section 9";
uses interface-common-state;
} }
grouping virtual-link-config { grouping virtual-link-config {
description description
"OSPF virtual link configuration state."; "OSPF virtual link configuration state.";
uses interface-common-config; uses interface-common-config;
} }
grouping virtual-link-operation { grouping virtual-link-state {
description description
"OSPF virtual link operation state."; "OSPF virtual link operational state.";
leaf cost { leaf cost {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
} }
config false;
description description
"Virtual link interface cost."; "Virtual link interface cost.";
} }
uses interface-common-operation; uses interface-common-state;
} }
grouping sham-link-config { grouping sham-link-config {
description description
"OSPF sham link configuration state."; "OSPF sham link configuration state.";
uses interface-common-config; uses interface-common-config;
uses interface-physical-link-config; uses interface-physical-link-config;
} }
grouping sham-link-state {
grouping sham-link-operation {
description description
"OSPF sham link operation state."; "OSPF sham link operational state.";
/* All container/leaf should be config false. */
uses interface-common-operation; uses interface-common-state;
} }
grouping af-area-config { grouping af-area-config {
description description
"OSPF address-family specific area config state."; "OSPF address-family specific area config state.";
container ranges { container ranges {
description "Container for summary ranges"; description "Container for summary ranges";
list range { list range {
skipping to change at page 64, line 34 skipping to change at page 70, line 31
description description
"Set the summary default route cost for a "Set the summary default route cost for a
stub or NSSA area."; stub or NSSA area.";
} }
} }
grouping area-config { grouping area-config {
description description
"OSPF area configuration state."; "OSPF area configuration state.";
container all-interfaces-inherit {
if-feature interface-inheritance;
description
"Inheritance for all interfaces";
container interface {
description
"Interface config to be inherited by all
interfaces in the area.";
}
}
leaf area-type { leaf area-type {
type identityref { type identityref {
base area-type; base area-type;
} }
default normal; default normal;
description description
"Area type."; "Area type.";
} }
uses area-common-config; uses area-common-config;
uses af-area-config { uses af-area-config {
when "../../../operation-mode = " when "../../../operation-mode = "
+ "'ospf:ships-in-the-night'" { + "'ospf:ships-in-the-night'" {
description description
"Ships in the night configuration."; "Ships in the night configuration.";
} }
skipping to change at page 65, line 18 skipping to change at page 70, line 51
uses af-area-config { uses af-area-config {
when "../../../operation-mode = " when "../../../operation-mode = "
+ "'ospf:ships-in-the-night'" { + "'ospf:ships-in-the-night'" {
description description
"Ships in the night configuration."; "Ships in the night configuration.";
} }
} }
} }
grouping area-operation { grouping area-state {
description description
"OSPF area operation state."; "OSPF area operational state.";
container statistics { container statistics {
config false;
description "Per area statistics"; description "Per area statistics";
uses area-stat; uses area-stat;
} }
container database { container database {
config false;
description "Area scope LSA database."; description "Area scope LSA database.";
list area-scope-lsa-type { list area-scope-lsa-type {
key "lsa-type"; key "lsa-type";
description "List OSPF area scope LSA databases."; description "List OSPF area scope LSA databases.";
leaf lsa-type { leaf lsa-type {
type uint16; type uint16;
description "OSPF area scope LSA type."; description "OSPF area scope LSA type.";
} }
container area-scope-lsas { container area-scope-lsas {
description description
skipping to change at page 66, line 18 skipping to change at page 72, line 6
} }
} }
} }
} // list area-scope-lsas } // list area-scope-lsas
} }
} }
grouping local-rib { grouping local-rib {
description "Local-rib grouping."; description "Local-rib grouping.";
container local-rib { container local-rib {
config false;
description "Local-rib."; description "Local-rib.";
list route { list route {
key "prefix"; key "prefix";
description "Routes"; description "Routes";
leaf prefix { leaf prefix {
type inet:ip-prefix; type inet:ip-prefix;
description "Destination prefix."; description "Destination prefix.";
} }
container next-hops { container next-hops {
description "All next hops for the route."; description "All next hops for the route.";
skipping to change at page 67, line 46 skipping to change at page 73, line 35
type uint16; type uint16;
units msec; units msec;
description description
"Duration used to learn all the IGP events "Duration used to learn all the IGP events
related to a single component failure."; related to a single component failure.";
} }
description description
"Grouping for IETF SPF delay configuration."; "Grouping for IETF SPF delay configuration.";
} }
grouping ietf-spf-delay-operation { grouping ietf-spf-delay-state {
leaf current-state { leaf current-state {
type enumeration { type enumeration {
enum "QUIET" { enum "QUIET" {
description "QUIET state"; description "QUIET state";
} }
enum "SHORT_WAIT" { enum "SHORT_WAIT" {
description "SHORT_WAIT state"; description "SHORT_WAIT state";
} }
enum "LONG_WAIT" { enum "LONG_WAIT" {
description "LONG_WAIT state"; description "LONG_WAIT state";
} }
} }
description config false;
"Current state of the algorithm."; description
"Current state of the algorithm.";
} }
leaf remaining-time-to-learn { leaf remaining-time-to-learn {
type uint16; type uint16;
units "seconds"; units "seconds";
config false;
description description
"Remaining time until time-to-learn timer fires."; "Remaining time until time-to-learn timer fires.";
} }
leaf remaining-hold-down { leaf remaining-hold-down {
type uint16; type uint16;
units "seconds"; units "seconds";
config false;
description description
"Remaining time until hold-down timer fires."; "Remaining time until hold-down timer fires.";
} }
leaf last-event-received { leaf last-event-received {
type yang:timestamp; type yang:timestamp;
config false;
description description
"Time of last IGP event received"; "Time of last IGP event received";
} }
leaf next-spf-time { leaf next-spf-time {
type yang:timestamp; type yang:timestamp;
config false;
description description
"Time when next SPF has been scheduled."; "Time when next SPF has been scheduled.";
} }
leaf last-spf-time { leaf last-spf-time {
type yang:timestamp; type yang:timestamp;
config false;
description description
"Time of last SPF computation."; "Time of last SPF computation.";
} }
description description
"Grouping for IETF SPF delay operational states."; "Grouping for IETF SPF delay operational states.";
} }
grouping node-tag-config { grouping node-tag-config {
description description
"OSPF node tag config state."; "OSPF node tag config state.";
skipping to change at page 69, line 21 skipping to change at page 75, line 16
} }
description description
"Container for node tags."; "Container for node tags.";
} }
} }
grouping instance-config { grouping instance-config {
description description
"OSPF instance config state."; "OSPF instance config state.";
container all-areas-inherit {
if-feature area-inheritance;
description
"Inheritance for all areas.";
container area {
description
"Area config to be inherited by all areas.";
}
container interface {
description
"Interface config to be inherited by all interfaces
in all areas.";
}
}
leaf explicit-router-id { leaf explicit-router-id {
if-feature explicit-router-id; if-feature explicit-router-id;
type rt-types:router-id; type rt-types:router-id;
description description
"Defined in RFC 2328. A 32-bit number "Defined in RFC 2328. A 32-bit number
that uniquely identifies the router."; that uniquely identifies the router.";
} }
container preference { container preference {
description "Route preference config state."; description "Route preference config state.";
skipping to change at page 74, line 13 skipping to change at page 79, line 42
type boolean; type boolean;
description description
"Enable LDP IGP synchronization."; "Enable LDP IGP synchronization.";
} }
} }
} }
uses instance-fast-reroute-config; uses instance-fast-reroute-config;
uses node-tag-config; uses node-tag-config;
} }
grouping instance-operation { grouping instance-state {
description description
"OSPF Address Family operation state."; "OSPF instance operational state.";
leaf router-id { leaf router-id {
type rt-types:router-id; type rt-types:router-id;
config false;
description description
"Defined in RFC 2328. A 32-bit number "Defined in RFC 2328. A 32-bit number
that uniquely identifies the router."; that uniquely identifies the router.";
} }
uses local-rib; uses local-rib;
container statistics { container statistics {
config false;
description "Per instance statistics"; description "Per instance statistics";
uses instance-stat; uses instance-stat;
} }
container ietf-spf-delay { container ietf-spf-delay {
if-feature ietf-spf-delay; if-feature ietf-spf-delay;
config false;
uses ietf-spf-delay-config; uses ietf-spf-delay-config;
uses ietf-spf-delay-operation; uses ietf-spf-delay-state;
description description
"IETF SPF delay operational states."; "IETF SPF delay operational states.";
} }
container database { container database {
config false;
description "AS scope LSA database."; description "AS scope LSA database.";
list as-scope-lsa-type { list as-scope-lsa-type {
key "lsa-type"; key "lsa-type";
description "List OSPF AS scope LSA databases."; description "List OSPF AS scope LSA databases.";
leaf lsa-type { leaf lsa-type {
type uint16; type uint16;
description "OSPF AS scope LSA type."; description "OSPF AS scope LSA type.";
} }
container as-scope-lsas { container as-scope-lsas {
description "All AS scope of LSA of this LSA type."; description "All AS scope of LSA of this LSA type.";
skipping to change at page 75, line 21 skipping to change at page 81, line 4
} }
} }
refine "version/ospfv3/ospfv3" { refine "version/ospfv3/ospfv3" {
must "../../../../../../../rt:type = " must "../../../../../../../rt:type = "
+ "'ospf:ospfv3'" { + "'ospf:ospfv3'" {
description "OSPFv3 LSA."; description "OSPFv3 LSA.";
} }
} }
} }
} }
} }
} // list as-scope-lsas } // list as-scope-lsas
} }
uses spf-log;
uses lsa-log;
} }
grouping ospf-config { grouping ospf-config {
description description
"OSPF top configuration state."; "OSPF top configuration state.";
container all-instances-inherit {
if-feature instance-inheritance;
description
"Inheritance support to all instances.";
container area {
description
"Area config to be inherited by all areas
in all instances.";
}
container interface {
description
"Interface config to be inherited by all
interfaces in all instances.";
}
}
leaf operation-mode { leaf operation-mode {
type identityref { type identityref {
base operation-mode; base operation-mode;
} }
default ospf:ships-in-the-night; default ospf:ships-in-the-night;
description description
"OSPF operation mode."; "OSPF operation mode.";
} }
} }
grouping ospf-operation { grouping ospf-state {
/* All leaf/container must be config false. */
description description
"OSPF top operation state."; "OSPF top operational state.";
} }
grouping multi-topology-area-common-config { grouping multi-topology-area-common-config {
description description
"OSPF multi-topology area common configuration state."; "OSPF multi-topology area common configuration state.";
leaf summary { leaf summary {
when "../../../../../areas/area[area-id=current()/../area-id]/" when "../../../../../areas/area[area-id=current()/../area-id]/"
+ "area-type = 'ospf:stub' or " + "area-type = 'ospf:stub' or "
+ "../../../../../areas/area[area-id=current()/../area-id]/" + "../../../../../areas/area[area-id=current()/../area-id]/"
+ "area-type = 'ospf:nssa'" { + "area-type = 'ospf:nssa'" {
skipping to change at page 77, line 4 skipping to change at page 82, line 23
"Set the summary default route cost for a "Set the summary default route cost for a
stub or NSSA area."; stub or NSSA area.";
} }
} }
grouping multi-topology-area-config { grouping multi-topology-area-config {
description description
"OSPF multi-topology area configuration state."; "OSPF multi-topology area configuration state.";
uses multi-topology-area-common-config; uses multi-topology-area-common-config;
uses af-area-config { uses af-area-config {
when "../../../../../operation-mode = " when "../../../../../operation-mode = "
+ "'ospf:ships-in-the-night'" { + "'ospf:ships-in-the-night'" {
description description
"Ships in the night configuration."; "Ships in the night configuration.";
} }
} }
} }
grouping multi-topology-area-operation { grouping multi-topology-area-state {
/* All leaf/container must be config false. */
description description
"OSPF multi-topology area operation state."; "OSPF multi-topology area operational state.";
} }
grouping multi-topology-config { grouping multi-topology-config {
description description
"OSPF multi-topology configuration state."; "OSPF multi-topology configuration state.";
} }
grouping multi-topology-operation { grouping multi-topology-state {
/* All leaf/container must be config false. */
description description
"OSPF multi-topology operation state."; "OSPF multi-topology operational state.";
uses local-rib; uses local-rib;
} }
grouping multi-topology-interface-config { grouping multi-topology-interface-config {
description description
"OSPF multi-topology configuration state."; "OSPF multi-topology configuration state.";
leaf cost { leaf cost {
type uint32; type uint32;
description description
"Interface cost for this topology."; "Interface cost for this topology.";
} }
} }
grouping multi-topology-interface-operation { grouping multi-topology-interface-state {
/* All leaf/container must be config false. */
description description
"OSPF multi-topology operation state."; "OSPF multi-topology operational state.";
} }
grouping ospfv3-interface-config { grouping ospfv3-interface-config {
description description
"OSPFv3 interface specific configuration state."; "OSPFv3 interface specific configuration state.";
leaf instance-id { leaf instance-id {
type uint8 { type uint8 {
range "0 .. 31"; range "0 .. 31";
} }
description description
"OSPFv3 instance ID."; "OSPFv3 instance ID.";
} }
} }
grouping ospfv3-interface-operation { grouping ospfv3-interface-state {
description description
"OSPFv3 interface specific operation state."; "OSPFv3 interface specific operational state.";
leaf interface-id { leaf interface-id {
type uint16; type uint16;
config false;
description description
"OSPFv3 interface ID."; "OSPFv3 interface ID.";
} }
} }
grouping lsa-identifiers {
description
"The parameters that uniquely identify an LSA.";
leaf area-id {
type area-id-type;
description
"Area ID";
}
leaf link-id {
type union {
type inet:ipv4-address;
type yang:dotted-quad;
}
description "Link ID.";
}
leaf type {
type uint16;
description
"LSA type.";
}
leaf lsa-id {
type yang:dotted-quad;
description "LSA ID.";
}
leaf adv-router {
type yang:dotted-quad;
description
"LSA advertising router.";
}
leaf seq-num {
type uint32;
description
"LSA sequence number.";
}
}
grouping spf-log {
description
"Grouping for SPF log.";
container spf-log {
config false;
description
"This container lists the SPF log.";
list event {
key id;
description
"List of SPF logs.
It is used as a wrapping buffer.";
leaf id {
type uint32;
description
"This leaf defines the event identifier.
This is a purely internal value.";
}
leaf spf-type {
type enumeration {
enum full {
description
"Computation done is a Full SPF.";
}
enum intra {
description
"Computation done is only for intra-area routes.";
}
enum inter {
description
"Computation done is only for inter-area
summary routes.";
}
enum external {
description
"Computation done is only for AS external routes.";
}
}
description
"The SPF computation type.";
}
leaf schedule-timestamp {
type yang:timestamp;
description
"This leaf describes the timestamp
when the computation was scheduled.";
}
leaf start-timestamp {
type yang:timestamp;
description
"This leaf describes the timestamp
when the computation was started.";
}
leaf end-timestamp {
type yang:timestamp;
description
"This leaf describes the timestamp
when the computation was completed.";
}
list trigger-lsa {
description
"The list of LSAs that triggered the computation.";
uses lsa-identifiers;
}
}
}
}
grouping lsa-log {
description
"Grouping for LSA log.";
container lsa-log {
config false;
description
"This conatiner lists the LSA log.
Local LSA modifications are also included
in the list.";
list event {
key id;
description
"List of LSA logs.
It is used as a wrapping buffer.";
leaf id {
type uint32;
description
"This leaf defines the event identifier.
This is a purely internal value.";
}
container lsa {
description
"This container describes the logged LSA.";
uses lsa-identifiers;
}
leaf received-timestamp {
type yang:timestamp;
description
"This leaf describes the timestamp
when the LSA was received. In case of
local LSA update, the timestamp refers
to the local LSA update time.";
}
leaf reason {
type identityref {
base lsa-log-reason;
}
description
"This leaf describes the reason
that resulted in this LSA log.";
}
}
}
}
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol" { + "rt:control-plane-protocol" {
when "rt:type = 'ospf:ospfv2' or rt:type = 'ospf:ospfv3'" { when "rt:type = 'ospf:ospfv2' or rt:type = 'ospf:ospfv3'" {
description description
"This augmentation is only valid for a routing protocol "This augmentation is only valid for a routing protocol
instance of OSPF (type 'ospfv2' or 'ospfv3')."; instance of OSPF (type 'ospfv2' or 'ospfv3').";
} }
description "OSPF augmentation."; description "OSPF augmentation.";
container ospf { container ospf {
description description
"OSPF."; "OSPF.";
uses ospf-config; uses ospf-config;
uses ospf-state;
list instance { list instance {
key "af"; key "af";
description description
"An OSPF routing protocol instance."; "An OSPF routing protocol instance.";
leaf af { leaf af {
type identityref { type identityref {
base rt-types:address-family; base iana-rt-types:address-family;
} }
description description
"Address-family of the instance."; "Address-family of the instance.";
} }
uses instance-config; uses instance-config;
uses instance-state;
container areas { container areas {
description "All areas."; description "All areas.";
list area { list area {
key "area-id"; key "area-id";
description description
"List of OSPF areas"; "List of OSPF areas";
leaf area-id { leaf area-id {
type area-id-type; type area-id-type;
description description
"Area ID."; "Area ID.";
} }
uses area-config; uses area-config;
uses area-state;
container virtual-links { container virtual-links {
when "../area-id = '0.0.0.0' and " when "../area-id = '0.0.0.0' and "
+ "../area-type = 'ospf:normal'" { + "../area-type = 'ospf:normal'" {
description description
"Virutal links must be in backbone area."; "Virtual links must be in backbone area.";
} }
description "All virtual links."; description "All virtual links.";
list virtual-link { list virtual-link {
key "transit-area-id router-id"; key "transit-area-id router-id";
description description
"OSPF virtual link"; "OSPF virtual link";
leaf transit-area-id { leaf transit-area-id {
type leafref { type leafref {
path "../../../area-id"; path "../../../../area/area-id";
} }
must "current() != '0.0.0.0'" { must "../../../../area[area-id=current()]/"
+ "area-id != '0.0.0.0' and "
+ "../../../../area[area-id=current()]/"
+ "area-type = 'ospf:normal'" {
error-message "Virtual link transit area must " error-message "Virtual link transit area must "
+ "be non-zero."; + "be non-zero.";
description description
"Virtual-link trasit area must be "Virtual-link trasit area must be
non-zero area."; non-zero area.";
} }
description description
"Virtual link tranist area ID."; "Virtual link tranist area ID.";
} }
leaf router-id { leaf router-id {
type rt-types:router-id; type rt-types:router-id;
description description
"Virtual Link remote endpoint router ID."; "Virtual Link remote endpoint router ID.";
} }
uses virtual-link-config; uses virtual-link-config;
uses virtual-link-state;
} }
} }
container sham-links { container sham-links {
if-feature pe-ce-protocol; if-feature pe-ce-protocol;
description "All sham links."; description "All sham links.";
list sham-link { list sham-link {
key "local-id remote-id"; key "local-id remote-id";
description description
"OSPF sham link"; "OSPF sham link";
leaf local-id { leaf local-id {
type inet:ip-address; type inet:ip-address;
description description
"Address of the local Sham Link endpoint."; "Address of the local Sham Link endpoint.";
} }
leaf remote-id { leaf remote-id {
type inet:ip-address; type inet:ip-address;
description description
"Address of the remote Sham Link endpoint."; "Address of the remote Sham Link endpoint.";
} }
uses sham-link-config; uses sham-link-config;
uses sham-link-state;
} }
} }
container interfaces { container interfaces {
description "All interfaces."; description "All interfaces.";
list interface { list interface {
key "name"; key "name";
description description
"List of OSPF interfaces."; "List of OSPF interfaces.";
leaf name { leaf name {
type if:interface-ref; type if:interface-ref;
description description
"Interface name."; "Interface name.";
} }
uses interface-config; uses interface-config;
uses interface-state;
} // list of interfaces } // list of interfaces
} }
} // list of areas } // list of areas
} }
} // list of instance } // list of instance
} // container ospf } // container ospf
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/ospf:ospf/ospf:instance" { + "rt:control-plane-protocol/ospf:ospf/ospf:instance" {
skipping to change at page 81, line 23 skipping to change at page 90, line 11
key "name"; key "name";
description "OSPF topology."; description "OSPF topology.";
leaf name { leaf name {
type leafref { type leafref {
path "../../../../../../../rt:ribs/rt:rib/rt:name"; path "../../../../../../../rt:ribs/rt:rib/rt:name";
} }
description "RIB"; description "RIB";
} }
uses multi-topology-config; uses multi-topology-config;
uses multi-topology-state;
container areas { container areas {
description "All areas in the topology."; description "All areas in the topology.";
list area { list area {
key "area-id"; key "area-id";
description description
"List of OSPF areas"; "List of OSPF areas";
leaf area-id { leaf area-id {
type area-id-type; type area-id-type;
description description
"Area ID."; "Area ID.";
} }
uses multi-topology-area-config; uses multi-topology-area-config;
uses multi-topology-area-state;
} }
} }
} }
} }
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/ospf:ospf/ospf:instance/" + "rt:control-plane-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2'" { when "../../../../../../rt:type = 'ospf:ospfv2'" {
skipping to change at page 82, line 14 skipping to change at page 91, line 4
augmentation."; augmentation.";
container topologies { container topologies {
description "All topologies for the interface."; description "All topologies for the interface.";
list topology { list topology {
key "name"; key "name";
description "OSPF interface topology."; description "OSPF interface topology.";
leaf name { leaf name {
type leafref { type leafref {
path "../../../../../../../../../../../" path "../../../../../../../../../../../"
+ "rt:ribs/rt:rib/rt:name"; + "rt:ribs/rt:rib/rt:name";
} }
description description
"One of the topologies enabled on this interface."; "One of the topologies enabled on this interface.";
} }
uses multi-topology-interface-config; uses multi-topology-interface-config;
uses multi-topology-interface-state;
} }
} }
} }
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/ospf:ospf/ospf:instance/" + "rt:control-plane-protocol/ospf:ospf/ospf:instance/"
+ "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv3'" { when "../../../../../../rt:type = 'ospf:ospfv3'" {
description description
"This augmentation is only valid for OSPFv3."; "This augmentation is only valid for OSPFv3.";
} }
description description
"OSPFv3 interface specific configuration state "OSPFv3 interface specific configuration state
augmentation."; augmentation.";
uses ospfv3-interface-config; uses ospfv3-interface-config;
} uses ospfv3-interface-state;
augment "/rt:routing-state/"
+ "rt:control-plane-protocols/rt:control-plane-protocol" {
when "rt:type = 'ospf:ospfv2' or "
+ "rt:type = 'ospf:ospfv3'" {
description
"This augmentation is only valid for a routing protocol
instance of type 'ospfv2' or 'ospfv3'.";
}
description
"OSPF operational state.";
container ospf {
description "OSPF";
uses ospf-config;
uses ospf-operation;
list instance {
key "af";
description
"An OSPF routing protocol instance.";
leaf af {
type identityref {
base rt-types:address-family;
}
description
"Address-family of the instance.";
}
uses instance-config;
uses instance-operation;
container areas {
description "All areas";
list area {
key "area-id";
description "List of OSPF areas";
leaf area-id {
type area-id-type;
description "Area ID.";
}
uses area-config;
uses area-operation;
container virtual-links {
description "All virtual links.";
list virtual-link {
description
"OSPF virtual link";
leaf transit-area-id {
type leafref {
path "../../../area-id";
}
description
"Virutal link transit area ID.";
}
leaf router-id {
type rt-types:router-id;
description
"Virtual link router ID.";
}
uses virtual-link-config;
uses virtual-link-operation;
}
}
container sham-links {
description "All sham links.";
list sham-link {
description
"OSPF sham link";
leaf local-id {
type inet:ip-address;
description
"Address of the local Sham Link endpoint.";
}
leaf remote-id {
type inet:ip-address;
description
"Address of the remote Sham Link endpoint.";
}
uses sham-link-config;
uses sham-link-operation;
}
}
container interfaces {
description "All interfaces in the area.";
list interface {
key "name";
description
"List of OSPF interfaces.";
leaf name {
// Should it refer to config state leaf?
type if:interface-ref;
description "Interface name.";
}
uses interface-config;
uses interface-operation;
} // list of OSPF interfaces
}
} // list of OSPF areas
}
} // list of instances
} // container ospf
}
augment "/rt:routing-state/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:instance" {
when "../../rt:type = 'ospf:ospfv2'" {
description
"This augmentation is only valid for OSPFv2.";
}
if-feature multi-topology;
description
"OSPF multi-topology instance operation state
augmentation.";
container topologies {
description "All topologies.";
list topology {
// Topology must be in the same routing-instance
// and of same AF as the container.
key "name";
description "OSPF topology.";
leaf name {
type leafref {
path "../../../../../../../"
+ "rt:ribs/rt:rib/rt:name";
}
description "RIB";
}
uses multi-topology-config;
uses multi-topology-operation;
container areas {
description "All areas in the topology.";
list area {
key "area-id";
description
"List of OSPF areas";
leaf area-id {
type area-id-type;
description
"Area ID.";
}
uses multi-topology-area-config;
uses multi-topology-area-operation;
}
}
}
}
}
augment "/rt:routing-state/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv2'" {
description
"This augmentation is only valid for OSPFv2.";
}
if-feature ospf:multi-topology;
description
"OSPF multi-topology interface operation state
augmentation.";
container topologies {
description "All topologies.";
list topology {
key "name";
description "OSPF interface topology.";
leaf name {
type leafref {
path "../../../../../../../../../../../"
+ "rt:ribs/rt:rib/rt:name";
}
description
"One of the topologies enabled on this interface.";
}
uses multi-topology-interface-config;
uses multi-topology-interface-operation;
}
}
}
augment "/rt:routing-state/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:instance/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface" {
when "../../../../../../rt:type = 'ospf:ospfv3'" {
description
"This augmentation is only valid for OSPFv3.";
}
description
"OSPFv3 interface specific operation state
augmentation.";
uses ospfv3-interface-config;
uses ospfv3-interface-operation;
} }
grouping route-content { grouping route-content {
description description
"This grouping defines OSPF-specific route attributes."; "This grouping defines OSPF-specific route attributes.";
leaf metric { leaf metric {
type uint32; type uint32;
description "OSPF route metric."; description "OSPF route metric.";
} }
leaf tag { leaf tag {
skipping to change at page 95, line 37 skipping to change at page 100, line 19
description description
"This notification is sent when the graceful restart "This notification is sent when the graceful restart
state for the router has changed."; state for the router has changed.";
} }
} }
<CODE ENDS> <CODE ENDS>
4. Security Considerations 4. Security Considerations
The data model defined does not create any security implications. The YANG module defined in this document 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 [RFC5246].
This draft does not change any underlying security issues inherent in The NETCONF access control model [RFC6536] provides the means to
[RFC8022]. restrict access for particular NETCONF or RESTCONF users to a pre-
configured subset of all available NETCONF or RESTCONF protocol
operations and content.
There are a number of data nodes defined in this YANG module that are
writable/creatable/deletable (i.e., config true, which is the
default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., edit-config)
to these data nodes without proper protection can have a negative
effect on network operations. For OSPF, the ability to modify OSPF
configuration will allow the entire OSPF domain to be compromised
including peering with unauthorized routers to misroute traffic or
mount a massive Denial-of-Service (DoS) attack. The security
considerations of OSPFv2 [RFC2328] and [RFC5340].
Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. The exposure of the Link State
Database (LSDB) will expose the detailed topology of the network.
This may be undesirable since both due to the fact that exposure may
facilitate other attacks. Additionally, network operators may
consider their topologies to be propritary.
For OSPF authentication, configuration is supported via the
specification of key-chains [RFC8177] or the direct specification of
key and authentication algorithm. Hence, authentification
configuration using the "auth-table-trailer" case in the
"authentication" container inherits the security considerations of
[RFC8177]. This includes the considerations with respect to the
local storage and handling of authentication keys.
Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. The OSPF Yang
module support the "clear-neighbor" and "clear-database" RPCs. If
access too either of these is compromised, they can result in
temporary network outages be employed to mount DoS attacks.
5. Acknowledgements 5. Acknowledgements
The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta,
Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and
Alan Davey for their thorough reviews and helpful comments. Alan Davey for their thorough reviews and helpful comments.
This document was produced using Marshall Rose's xml2rfc tool. This document was produced using Marshall Rose's xml2rfc tool.
6. References 6. References
skipping to change at page 96, line 49 skipping to change at page 102, line 24
[RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., [RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed.,
Coltun, R., and F. Baker, "OSPF Version 2 Management Coltun, R., and F. Baker, "OSPF Version 2 Management
Information Base", RFC 4750, DOI 10.17487/RFC4750, Information Base", RFC 4750, DOI 10.17487/RFC4750,
December 2006, <http://www.rfc-editor.org/info/rfc4750>. December 2006, <http://www.rfc-editor.org/info/rfc4750>.
[RFC5187] Pillay-Esnault, P. and A. Lindem, "OSPFv3 Graceful [RFC5187] Pillay-Esnault, P. and A. Lindem, "OSPFv3 Graceful
Restart", RFC 5187, DOI 10.17487/RFC5187, June 2008, Restart", RFC 5187, DOI 10.17487/RFC5187, June 2008,
<http://www.rfc-editor.org/info/rfc5187>. <http://www.rfc-editor.org/info/rfc5187>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008,
<http://www.rfc-editor.org/info/rfc5246>.
[RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF
for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008,
<http://www.rfc-editor.org/info/rfc5340>. <http://www.rfc-editor.org/info/rfc5340>.
[RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information [RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information
Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August
2009, <http://www.rfc-editor.org/info/rfc5643>. 2009, <http://www.rfc-editor.org/info/rfc5643>.
[RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and [RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and
R. Aggarwal, "Support of Address Families in OSPFv3", R. Aggarwal, "Support of Address Families in OSPFv3",
skipping to change at page 97, line 24 skipping to change at page 103, line 5
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010, DOI 10.17487/RFC6020, October 2010,
<http://www.rfc-editor.org/info/rfc6020>. <http://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<http://www.rfc-editor.org/info/rfc6241>. <http://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<http://www.rfc-editor.org/info/rfc6242>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>.
[RFC6565] Pillay-Esnault, P., Moyer, P., Doyle, J., Ertekin, E., and [RFC6565] Pillay-Esnault, P., Moyer, P., Doyle, J., Ertekin, E., and
M. Lundberg, "OSPFv3 as a Provider Edge to Customer Edge M. Lundberg, "OSPFv3 as a Provider Edge to Customer Edge
(PE-CE) Routing Protocol", RFC 6565, DOI 10.17487/RFC6565, (PE-CE) Routing Protocol", RFC 6565, DOI 10.17487/RFC6565,
June 2012, <http://www.rfc-editor.org/info/rfc6565>. June 2012, <http://www.rfc-editor.org/info/rfc6565>.
[RFC7223] Bjorklund, M., "A YANG Data Model for Interface [RFC7223] Bjorklund, M., "A YANG Data Model for Interface
Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
<http://www.rfc-editor.org/info/rfc7223>. <http://www.rfc-editor.org/info/rfc7223>.
[RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing
Management", RFC 8022, DOI 10.17487/RFC8022, November Management", RFC 8022, DOI 10.17487/RFC8022, November
2016, <http://www.rfc-editor.org/info/rfc8022>. 2016, <http://www.rfc-editor.org/info/rfc8022>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<http://www.rfc-editor.org/info/rfc8040>.
[RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J.
Zhang, "YANG Data Model for Key Chains", RFC 8177,
DOI 10.17487/RFC8177, June 2017,
<http://www.rfc-editor.org/info/rfc8177>.
6.2. Informative References 6.2. Informative References
[I-D.ietf-rtgwg-yang-key-chain] [I-D.ietf-netmod-revised-datastores]
Lindem, A., Qu, Y., Yeung, D., Chen, I., Zhang, Z., and Y. Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
Yang, "Routing Key Chain YANG Data Model", draft-ietf- and R. Wilton, "Network Management Datastore
rtgwg-yang-key-chain-15 (work in progress), February 2017. Architecture", draft-ietf-netmod-revised-datastores-02
(work in progress), May 2017.
Appendix A. Contributors' Addreses Appendix A. Contributors' Addreses
Dean Bogdanovic Dean Bogdanovic
Volta Networks, Inc. Volta Networks, Inc.
EMail: dean@voltanet.io EMail: dean@voltanet.io
Kiran Koushik Agrahara Sreenivasa Kiran Koushik Agrahara Sreenivasa
Cisco Systems Cisco Systems
 End of changes. 144 change blocks. 
570 lines changed or deleted 875 lines changed or added

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