Internet Engineering Task Force (IETF)                         L. Lhotka
Request for Comments: 8349                                        CZ.NIC
Obsoletes: 8022                                                A. Lindem
Category: Standards Track                                  Cisco Systems
ISSN: 2070-1721                                                    Y. Qu
                                                                  Huawei
                                                              March 2018
        
Internet Engineering Task Force (IETF)                         L. Lhotka
Request for Comments: 8349                                        CZ.NIC
Obsoletes: 8022                                                A. Lindem
Category: Standards Track                                  Cisco Systems
ISSN: 2070-1721                                                    Y. Qu
                                                                  Huawei
                                                              March 2018
        

A YANG Data Model for Routing Management (NMDA Version)

路由管理的YANG数据模型(NMDA版本)

Abstract

摘要

This document specifies three YANG modules and one submodule. Together, they form the core routing data model that serves as a framework for configuring and managing a routing subsystem. It is expected that these modules will be augmented by additional YANG modules defining data models for control-plane protocols, route filters, and other functions. The core routing data model provides common building blocks for such extensions -- routes, Routing Information Bases (RIBs), and control-plane protocols.

本文档指定了三个模块和一个子模块。它们共同构成了核心路由数据模型,作为配置和管理路由子系统的框架。预计这些模块将通过定义控制平面协议、路由过滤器和其他功能的数据模型的附加模块进行扩充。核心路由数据模型为这些扩展提供了公共构建块——路由、路由信息库(RIB)和控制平面协议。

The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA). This document obsoletes RFC 8022.

本文件中的模块符合网络管理数据存储体系结构(NMDA)。本文件淘汰了RFC 8022。

Status of This Memo

关于下段备忘

This is an Internet Standards Track document.

这是一份互联网标准跟踪文件。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被互联网工程指导小组(IESG)批准出版。有关互联网标准的更多信息,请参见RFC 7841第2节。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8349.

有关本文件当前状态、任何勘误表以及如何提供反馈的信息,请访问https://www.rfc-editor.org/info/rfc8349.

Copyright Notice

版权公告

Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved.

版权所有(c)2018 IETF信托基金和确定为文件作者的人员。版权所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

本文件受BCP 78和IETF信托有关IETF文件的法律规定的约束(https://trustee.ietf.org/license-info)自本文件出版之日起生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文件中提取的代码组件必须包括信托法律条款第4.e节中所述的简化BSD许可证文本,并提供简化BSD许可证中所述的无担保。

Table of Contents

目录

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Terminology and Notation  . . . . . . . . . . . . . . . . . .   4
     2.1.  Glossary of New Terms . . . . . . . . . . . . . . . . . .   5
     2.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   6
     2.3.  Prefixes in Data Node Names . . . . . . . . . . . . . . .   6
   3.  Objectives  . . . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  The Design of the Core Routing Data Model . . . . . . . . . .   7
     4.1.  System-Controlled and User-Controlled List Entries  . . .   8
   5.  Basic Building Blocks . . . . . . . . . . . . . . . . . . . .   9
     5.1.  Routes  . . . . . . . . . . . . . . . . . . . . . . . . .   9
     5.2.  Routing Information Base (RIB)  . . . . . . . . . . . . .  10
     5.3.  Control-Plane Protocol  . . . . . . . . . . . . . . . . .  11
       5.3.1.  Routing Pseudo-Protocols  . . . . . . . . . . . . . .  11
       5.3.2.  Defining New Control-Plane Protocols  . . . . . . . .  11
     5.4.  Parameters of IPv6 Router Advertisements  . . . . . . . .  12
   6.  Interactions with Other YANG Modules  . . . . . . . . . . . .  13
     6.1.  Module "ietf-interfaces"  . . . . . . . . . . . . . . . .  13
     6.2.  Module "ietf-ip"  . . . . . . . . . . . . . . . . . . . .  14
   7.  Routing Management YANG Module  . . . . . . . . . . . . . . .  15
   8.  IPv4 Unicast Routing Management YANG Module . . . . . . . . .  29
   9.  IPv6 Unicast Routing Management YANG Module . . . . . . . . .  37
     9.1.  IPv6 Router Advertisements Submodule  . . . . . . . . . .  45
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  56
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  57
   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  58
     12.1.  Normative References . . . . . . . . . . . . . . . . . .  58
     12.2.  Informative References . . . . . . . . . . . . . . . . .  60
   Appendix A.  The Complete Schema Tree . . . . . . . . . . . . . .  61
   Appendix B.  Minimum Implementation . . . . . . . . . . . . . . .  66
   Appendix C.  Example: Adding a New Control-Plane Protocol . . . .  67
   Appendix D.  Data Tree Example  . . . . . . . . . . . . . . . . .  70
   Appendix E.  NETCONF Get Data Reply Example . . . . . . . . . . .  77
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  80
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  80
        
   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Terminology and Notation  . . . . . . . . . . . . . . . . . .   4
     2.1.  Glossary of New Terms . . . . . . . . . . . . . . . . . .   5
     2.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   6
     2.3.  Prefixes in Data Node Names . . . . . . . . . . . . . . .   6
   3.  Objectives  . . . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  The Design of the Core Routing Data Model . . . . . . . . . .   7
     4.1.  System-Controlled and User-Controlled List Entries  . . .   8
   5.  Basic Building Blocks . . . . . . . . . . . . . . . . . . . .   9
     5.1.  Routes  . . . . . . . . . . . . . . . . . . . . . . . . .   9
     5.2.  Routing Information Base (RIB)  . . . . . . . . . . . . .  10
     5.3.  Control-Plane Protocol  . . . . . . . . . . . . . . . . .  11
       5.3.1.  Routing Pseudo-Protocols  . . . . . . . . . . . . . .  11
       5.3.2.  Defining New Control-Plane Protocols  . . . . . . . .  11
     5.4.  Parameters of IPv6 Router Advertisements  . . . . . . . .  12
   6.  Interactions with Other YANG Modules  . . . . . . . . . . . .  13
     6.1.  Module "ietf-interfaces"  . . . . . . . . . . . . . . . .  13
     6.2.  Module "ietf-ip"  . . . . . . . . . . . . . . . . . . . .  14
   7.  Routing Management YANG Module  . . . . . . . . . . . . . . .  15
   8.  IPv4 Unicast Routing Management YANG Module . . . . . . . . .  29
   9.  IPv6 Unicast Routing Management YANG Module . . . . . . . . .  37
     9.1.  IPv6 Router Advertisements Submodule  . . . . . . . . . .  45
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  56
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  57
   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  58
     12.1.  Normative References . . . . . . . . . . . . . . . . . .  58
     12.2.  Informative References . . . . . . . . . . . . . . . . .  60
   Appendix A.  The Complete Schema Tree . . . . . . . . . . . . . .  61
   Appendix B.  Minimum Implementation . . . . . . . . . . . . . . .  66
   Appendix C.  Example: Adding a New Control-Plane Protocol . . . .  67
   Appendix D.  Data Tree Example  . . . . . . . . . . . . . . . . .  70
   Appendix E.  NETCONF Get Data Reply Example . . . . . . . . . . .  77
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  80
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  80
        
1. Introduction
1. 介绍

This document specifies the following YANG modules:

本文件规定了以下模块:

o The "ietf-routing" module provides generic components of a routing data model.

o “ietf路由”模块提供路由数据模型的通用组件。

o The "ietf-ipv4-unicast-routing" module augments the "ietf-routing" module with additional data specific to IPv4 unicast.

o “ietf-ipv4-unicast-routing”模块使用特定于ipv4单播的附加数据来扩充“ietf路由”模块。

o The "ietf-ipv6-unicast-routing" module augments the "ietf-routing" module with additional data specific to IPv6 unicast. Its submodule, "ietf-ipv6-router-advertisements", also augments the "ietf-interfaces" [RFC8343] and "ietf-ip" [RFC8344] modules with IPv6 router configuration variables required by [RFC4861].

o “ietf-ipv6-unicast-routing”模块使用特定于ipv6单播的附加数据来扩充“ietf路由”模块。其子模块“ietf-ipv6-router-Advertisions”还使用[RFC4861]所需的ipv6路由器配置变量扩充了“ietf接口”[RFC8343]和“ietf ip”[RFC8344]模块。

These modules together define the core routing data model, which is intended as a basis for future data model development covering more-sophisticated routing systems. While these three modules can be directly used for simple IP devices with static routing (see Appendix B), their main purpose is to provide essential building blocks for more-complicated data models involving multiple control-plane protocols, multicast routing, additional address families, and advanced functions such as route filtering or policy routing. To this end, it is expected that the core routing data model will be augmented by numerous modules developed by various IETF working groups.

这些模块共同定义了核心路由数据模型,该模型旨在作为涵盖更复杂路由系统的未来数据模型开发的基础。虽然这三个模块可直接用于具有静态路由的简单IP设备(见附录B),但它们的主要目的是为涉及多个控制平面协议、多播路由、附加地址族、,以及路由过滤或策略路由等高级功能。为此,预计核心路由数据模型将由各个IETF工作组开发的众多模块进行扩充。

The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA) [RFC8342]. This document obsoletes RFC 8022 [RFC8022].

本文件中的模块符合网络管理数据存储体系结构(NMDA)[RFC8342]。本文件淘汰了RFC 8022[RFC8022]。

2. Terminology and Notation
2. 术语和符号

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“建议”、“不建议”、“可”和“可选”在所有大写字母出现时(如图所示)应按照BCP 14[RFC2119][RFC8174]所述进行解释。

The following terms are defined in [RFC8342]:

[RFC8342]中定义了以下术语:

o client

o 客户

o server

o 服务器

o configuration

o 配置

o system state

o 系统状态

o operational state

o 运行状态

o intended configuration

o 预期配置

The following terms are defined in [RFC7950]:

[RFC7950]中定义了以下术语:

o action

o 行动

o augment

o 加强

o container

o 容器

o data model

o 数据模型

o data node

o 数据节点

o feature

o 特色

o leaf

o 叶

o list

o 列表

o mandatory node

o 强制节点

o module

o 单元

o presence container

o 存在容器

o schema tree

o 模式树

o RPC (Remote Procedure Call) operation

o RPC(远程过程调用)操作

2.1. Glossary of New Terms
2.1. 新术语表

core routing data model: YANG data model comprising "ietf-routing", "ietf-ipv4-unicast-routing", and "ietf-ipv6-unicast-routing" modules.

核心路由数据模型:YANG数据模型,包括“ietf路由”、“ietf-ipv4-单播路由”和“ietf-ipv6-单播路由”模块。

direct route: A route to a directly connected network.

直接路由:到直接连接网络的路由。

Routing Information Base (RIB): An object containing a list of routes, together with other information. See Section 5.2 for details.

路由信息库(RIB):包含路由列表和其他信息的对象。详见第5.2节。

system-controlled entry: An entry in a list in the operational state ("config false") that is created by the system independently of what has been explicitly configured. See Section 4.1 for details.

系统控制的条目:处于运行状态(“config false”)的列表中的条目,由系统独立于已明确配置的内容创建。详见第4.1节。

user-controlled entry: An entry in a list in the operational state ("config false") that is created and deleted as a direct consequence of certain configuration changes. See Section 4.1 for details.

用户控制的条目:处于操作状态(“配置错误”)的列表中的条目,它是由于某些配置更改而直接创建和删除的。详见第4.1节。

2.2. Tree Diagrams
2.2. 树形图

Tree diagrams used in this document follow the notation defined in [RFC8340].

本文档中使用的树形图遵循[RFC8340]中定义的符号。

2.3. Prefixes in Data Node Names
2.3. 数据节点名称中的前缀

In this document, names of data nodes, actions, and other data model objects are often used without a prefix, as long as it is clear from the context in which YANG module each name is defined. Otherwise, names are prefixed using the standard prefix associated with the corresponding YANG module, as shown in Table 1.

在本文档中,数据节点、动作和其他数据模型对象的名称通常不带前缀,只要定义每个名称的上下文清楚即可。否则,名称将使用与相应模块关联的标准前缀作为前缀,如表1所示。

            +--------+---------------------------+-----------+
            | Prefix | YANG module               | Reference |
            +--------+---------------------------+-----------+
            | if     | ietf-interfaces           | [RFC8343] |
            | ip     | ietf-ip                   | [RFC8344] |
            | rt     | ietf-routing              | Section 7 |
            | v4ur   | ietf-ipv4-unicast-routing | Section 8 |
            | v6ur   | ietf-ipv6-unicast-routing | Section 9 |
            | yang   | ietf-yang-types           | [RFC6991] |
            | inet   | ietf-inet-types           | [RFC6991] |
            +--------+---------------------------+-----------+
        
            +--------+---------------------------+-----------+
            | Prefix | YANG module               | Reference |
            +--------+---------------------------+-----------+
            | if     | ietf-interfaces           | [RFC8343] |
            | ip     | ietf-ip                   | [RFC8344] |
            | rt     | ietf-routing              | Section 7 |
            | v4ur   | ietf-ipv4-unicast-routing | Section 8 |
            | v6ur   | ietf-ipv6-unicast-routing | Section 9 |
            | yang   | ietf-yang-types           | [RFC6991] |
            | inet   | ietf-inet-types           | [RFC6991] |
            +--------+---------------------------+-----------+
        

Table 1: Prefixes and Corresponding YANG Modules

表1:前缀和相应的模块

3. Objectives
3. 目标

The initial design of the core routing data model was driven by the following objectives:

核心路由数据模型的初始设计由以下目标驱动:

o The data model should be suitable for the common address families -- in particular, IPv4 and IPv6 -- and for unicast and multicast routing, as well as Multiprotocol Label Switching (MPLS).

o 该数据模型应适用于公共地址系列(特别是IPv4和IPv6),也适用于单播和多播路由以及多协议标签交换(MPLS)。

o A simple IP routing system, such as one that uses only static routing, should be configurable in a simple way, ideally without any need to develop additional YANG modules.

o 一个简单的IP路由系统,比如只使用静态路由的系统,应该以简单的方式进行配置,理想情况下不需要开发额外的模块。

o On the other hand, the core routing framework must allow for complicated implementations involving multiple RIBs and multiple control-plane protocols, as well as controlled redistributions of routing information.

o 另一方面,核心路由框架必须允许涉及多个RIB和多个控制平面协议的复杂实现,以及路由信息的受控再分配。

o Because device vendors will want to map the data models built on this generic framework to their proprietary data models and configuration interfaces, the framework should be flexible enough to facilitate such mapping and accommodate data models with different logic.

o 由于设备供应商希望将基于此通用框架构建的数据模型映射到其专有数据模型和配置接口,因此该框架应足够灵活,以方便此类映射,并适应具有不同逻辑的数据模型。

4. The Design of the Core Routing Data Model
4. 核心路由数据模型的设计

The core routing data model consists of three YANG modules and one submodule. The first module, "ietf-routing", defines the generic components of a routing system. The other two modules -- "ietf-ipv4-unicast-routing" and "ietf-ipv6-unicast-routing" -- augment the "ietf-routing" module with additional data nodes that are needed for IPv4 and IPv6 unicast routing, respectively. The "ietf-ipv6-unicast-routing" module has a submodule, "ietf-ipv6-router-advertisements", that augments the "ietf-interfaces" [RFC8343] and "ietf-ip" [RFC8344] modules with configuration variables for IPv6 Router Advertisements as required by [RFC4861].

核心路由数据模型由三个YANG模块和一个子模块组成。第一个模块“ietf路由”定义路由系统的通用组件。其他两个模块——“ietf-ipv4-unicast-routing”和“ietf-ipv6-unicast-routing”分别为“ietf-routing”模块增加了ipv4和ipv6单播路由所需的额外数据节点。“ietf-ipv6-unicast-routing”模块有一个子模块“ietf-ipv6-router-Adadvisions”,该子模块使用[RFC4861]要求的ipv6路由器播发配置变量来扩充“ietf接口”[RFC8343]和“ietf ip”[RFC8344]模块。

Figure 1 shows abridged views of the hierarchies. See Appendix A for the complete data trees.

图1显示了层次结构的简略视图。完整的数据树见附录A。

   +--rw routing
      +--rw router-id?                 yang:dotted-quad
      +--ro interfaces
      |  +--ro interface*   if:interface-ref
      +--rw control-plane-protocols
      |  +--rw control-plane-protocol* [type name]
      |     +--rw type             identityref
      |     +--rw name             string
      |     +--rw description?     string
      |     +--rw static-routes
      |        +--rw v4ur:ipv4
      |        |     ...
      |        +--rw v6ur:ipv6
      |              ...
      +--rw ribs
         +--rw rib* [name]
            +--rw name              string
            +--rw address-family?   identityref
            +--ro default-rib?      boolean {multiple-ribs}?
            +--ro routes
            |  +--ro route*
            |        ...
            +---x active-route
            |  +---w input
            |  |  +---w v4ur:destination-address?   inet:ipv4-address
            |  |  +---w v6ur:destination-address?   inet:ipv6-address
            |  +--ro output
            |        ...
            +--rw description?      string
        
   +--rw routing
      +--rw router-id?                 yang:dotted-quad
      +--ro interfaces
      |  +--ro interface*   if:interface-ref
      +--rw control-plane-protocols
      |  +--rw control-plane-protocol* [type name]
      |     +--rw type             identityref
      |     +--rw name             string
      |     +--rw description?     string
      |     +--rw static-routes
      |        +--rw v4ur:ipv4
      |        |     ...
      |        +--rw v6ur:ipv6
      |              ...
      +--rw ribs
         +--rw rib* [name]
            +--rw name              string
            +--rw address-family?   identityref
            +--ro default-rib?      boolean {multiple-ribs}?
            +--ro routes
            |  +--ro route*
            |        ...
            +---x active-route
            |  +---w input
            |  |  +---w v4ur:destination-address?   inet:ipv4-address
            |  |  +---w v6ur:destination-address?   inet:ipv6-address
            |  +--ro output
            |        ...
            +--rw description?      string
        

Figure 1: Data Hierarchy

图1:数据层次结构

As can be seen from Figure 1, the core routing data model introduces several generic components of a routing framework: routes, RIBs containing lists of routes, and control-plane protocols. Section 5 describes these components in more detail.

从图1可以看出,核心路由数据模型引入了路由框架的几个通用组件:路由、包含路由列表的RIB和控制平面协议。第5节更详细地描述了这些组件。

4.1. System-Controlled and User-Controlled List Entries
4.1. 系统控制和用户控制的列表条目

The core routing data model defines several lists in the schema tree, such as "rib", that have to be populated with at least one entry in any properly functioning device, and additional entries may be configured by a client.

核心路由数据模型在模式树中定义了多个列表,如“rib”,必须在任何正常运行的设备中至少填充一个条目,并且客户端可以配置其他条目。

In such a list, the server creates the required item as a "system-controlled entry" in the operational state, i.e., inside read-only lists in the "routing" container.

在这样的列表中,服务器在操作状态下创建所需项作为“系统控制的条目”,即在“路由”容器中的只读列表中。

An example can be seen in Appendix D: the "/routing/ribs/rib" list has two system-controlled entries -- "ipv4-master" and "ipv6-master".

附录D中给出了一个示例:“/路由/ribs/rib”列表有两个系统控制的条目——“ipv4主机”和“ipv6主机”。

Additional entries called "user-controlled entries" may be created in the configuration by a client, e.g., via the Network Configuration Protocol (NETCONF). If the server accepts a configured user-controlled entry, then this entry also appears in the operational state version of the list.

客户机可以在配置中创建称为“用户控制的条目”的附加条目,例如,通过网络配置协议(NETCONF)。如果服务器接受配置的用户控制条目,则此条目也会出现在列表的操作状态版本中。

Corresponding entries in both versions of the list (in the intended configuration and the operational state) [RFC8342] have the same value of the list key.

列表的两个版本(在预期配置和操作状态下)[RFC8342]中的相应条目具有相同的列表键值。

A client may also provide supplemental configuration of system-controlled entries. To do so, the client creates a new entry in the configuration with the desired contents. In order to bind this entry to the corresponding entry in the operational state, the key of the configuration entry has to be set to the same value as the key of the operational state entry.

客户端还可以提供系统控制项的补充配置。为此,客户机在配置中创建一个包含所需内容的新条目。为了将此项绑定到运行状态下的相应项,必须将配置项的键设置为与运行状态项的键相同的值。

Deleting a user-controlled entry from the intended configuration results in the removal of the corresponding entry in the operational state list. In contrast, if a client deletes a system-controlled entry from the intended configuration, only the extra configuration specified in that entry is removed; the corresponding operational state entry is not removed.

从预期配置中删除用户控制的条目将导致删除操作状态列表中的相应条目。相反,如果客户端从预期配置中删除系统控制的条目,则仅删除该条目中指定的额外配置;未删除相应的操作状态条目。

5. Basic Building Blocks
5. 基本构造块

This section describes the essential components of the core routing data model.

本节介绍核心路由数据模型的基本组件。

5.1. Routes
5.1. 路线

Routes are basic elements of information in a routing system. The core routing data model defines only the following minimal set of route attributes:

路由是路由系统中的基本信息元素。核心路由数据模型仅定义以下最小路由属性集:

o "destination-prefix": address prefix specifying the set of destination addresses for which the route may be used. This attribute is mandatory.

o “目的地前缀”:指定可使用路由的目的地地址集的地址前缀。此属性是必需的。

o "route-preference": an integer value (also known as "administrative distance") that is used for selecting a preferred route among routes with the same destination prefix. A lower value indicates a route that is more preferred.

o “路由首选项”:一个整数值(也称为“管理距离”),用于在具有相同目的地前缀的路由中选择首选路由。较低的值表示更优选的路线。

o "next-hop": determines the outgoing interface and/or next-hop address(es), or a special operation to be performed on a packet.

o “下一跳”:确定传出接口和/或下一跳地址,或对数据包执行的特殊操作。

Routes are primarily system state and appear as entries in RIBs (Section 5.2), but they may also be found in configuration data -- for example, as manually configured static routes. In the latter case, configurable route attributes are generally a subset of attributes defined for RIB routes.

路由主要是系统状态,在RIB中显示为条目(第5.2节),但它们也可以在配置数据中找到——例如,作为手动配置的静态路由。在后一种情况下,可配置管线属性通常是为肋骨管线定义的属性子集。

5.2. Routing Information Base (RIB)
5.2. 路由信息库(RIB)

Every implementation of the core routing data model manages one or more RIBs. A RIB is a list of routes complemented with administrative data. Each RIB contains only routes of one address family. An address family is represented by an identity derived from the "rt:address-family" base identity.

核心路由数据模型的每个实现都管理一个或多个RIB。RIB是由管理数据补充的路线列表。每个RIB仅包含一个地址族的路由。地址族由从“rt:address-family”基标识派生的标识表示。

In the core routing data model, RIBs are represented as entries in the list "/routing/ribs/rib" in the operational state. The contents of RIBs are controlled and manipulated by control-plane protocol operations that may result in route additions, removals, and modifications. This also includes manipulations via the "static" and/or "direct" pseudo-protocols; see Section 5.3.1.

在核心路由数据模型中,rib在运行状态下表示为列表“/路由/rib/rib”中的条目。肋骨的内容由控制平面协议操作控制和操纵,这些操作可能导致路由的添加、删除和修改。这还包括通过“静态”和/或“直接”伪协议进行的操作;见第5.3.1节。

For every supported address family, exactly one RIB MUST be marked as the "default RIB", in which control-plane protocols place their routes by default.

对于每个受支持的地址族,只有一个RIB必须标记为“默认RIB”,默认情况下,控制平面协议将其路由放置在其中。

Simple router implementations that do not advertise the "multiple-ribs" feature will typically create one system-controlled RIB per supported address family and mark it as the default RIB.

不宣传“多条肋骨”功能的简单路由器实现通常会为每个支持的地址族创建一个系统控制的肋骨,并将其标记为默认肋骨。

More-complex router implementations advertising the "multiple-ribs" feature support multiple RIBs per address family that can be used for policy routing and other purposes.

宣传“多条肋骨”功能的更复杂路由器实现支持每个地址族多条肋骨,可用于策略路由和其他目的。

The following action (see Section 7.15 of [RFC7950]) is defined for the "rib" list:

“肋骨”列表定义了以下行动(见[RFC7950]第7.15节):

o active-route -- return the active RIB route for the destination address that is specified as the action's input parameter.

o 活动路由——返回指定为操作输入参数的目标地址的活动路由。

5.3. Control-Plane Protocol
5.3. 控制平面协议

The core routing data model provides an open-ended framework for defining multiple control-plane protocol instances, e.g., for Layer 3 routing protocols. Each control-plane protocol instance MUST be assigned a type, which is an identity derived from the "rt:control-plane-protocol" base identity. The core routing data model defines two identities for the "direct" and "static" pseudo-protocols (Section 5.3.1).

核心路由数据模型为定义多个控制平面协议实例(例如,第3层路由协议)提供了一个开放式框架。必须为每个控制平面协议实例分配一个类型,该类型是从“rt:控制平面协议”基本标识派生的标识。核心路由数据模型定义了“直接”和“静态”伪协议的两个标识(第5.3.1节)。

Multiple control-plane protocol instances of the same type MAY be configured.

可以配置相同类型的多个控制平面协议实例。

5.3.1. Routing Pseudo-Protocols
5.3.1. 路由伪协议

The core routing data model defines two special routing protocol types -- "direct" and "static". Both are in fact pseudo-protocols, which means that they are confined to the local device and do not exchange any routing information with adjacent routers.

核心路由数据模型定义了两种特殊的路由协议类型——“直接”和“静态”。这两种协议实际上都是伪协议,这意味着它们仅限于本地设备,并且不与相邻路由器交换任何路由信息。

Every implementation of the core routing data model MUST provide exactly one instance of the "direct" pseudo-protocol type. It is the source of direct routes for all configured address families. Direct routes are normally supplied by the operating system kernel, based on the configuration of network interface addresses; see Section 6.2.

核心路由数据模型的每个实现都必须提供一个“直接”伪协议类型的实例。它是所有已配置地址族的直接路由源。直接路由通常由操作系统内核根据网络接口地址的配置提供;见第6.2节。

A pseudo-protocol of the type "static" allows for specifying routes manually. It MAY be configured in zero or multiple instances, although a typical configuration will have exactly one instance.

“静态”类型的伪协议允许手动指定路由。它可以在零个或多个实例中配置,尽管典型配置只有一个实例。

5.3.2. Defining New Control-Plane Protocols
5.3.2. 定义新的控制平面协议

It is expected that future YANG modules will create data models for additional control-plane protocol types. Such new modules will have to define the protocol-specific data nodes, and they will have to integrate into the core routing framework in the following way:

预计未来的YANG模块将为其他控制平面协议类型创建数据模型。这些新模块必须定义特定于协议的数据节点,并且必须以以下方式集成到核心路由框架中:

o A new identity MUST be defined for the control-plane protocol, and its base identity MUST be set to "rt:control-plane-protocol" or to an identity derived from "rt:control-plane-protocol".

o 必须为控制平面协议定义新标识,并且其基本标识必须设置为“rt:控制平面协议”或从“rt:控制平面协议”派生的标识。

o Additional route attributes MAY be defined, preferably in one place by means of defining a YANG grouping. The new attributes have to be inserted by augmenting the definitions of the node

o 可以通过定义分组来定义附加路由属性,优选地在一个地方。必须通过增加节点的定义来插入新属性

       /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route
        
       /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route
        

and possibly other places in the schema tree.

可能还有模式树中的其他位置。

o Data nodes for the new protocol can be defined by augmenting the "control-plane-protocol" data node under "/routing".

o 新协议的数据节点可以通过增加“/路由”下的“控制平面协议”数据节点来定义。

By using a "when" statement, the augmented data nodes specific to the new protocol SHOULD be made conditional and valid only if the value of "rt:type" or "rt:source-protocol" is equal to (or derived from) the new protocol's identity.

通过使用“when”语句,仅当“rt:type”或“rt:source protocol”的值等于(或派生自)新协议的标识时,新协议特定的增强数据节点才应具有条件且有效。

It is also RECOMMENDED that protocol-specific data nodes be encapsulated in an appropriately named container with presence. Such a container may contain mandatory data nodes that are otherwise forbidden at the top level of an augment.

还建议将特定于协议的数据节点封装在具有适当名称的容器中。这样的容器可能包含强制数据节点,这些节点在增强的顶层是被禁止的。

The above steps are implemented by the example YANG module for the Routing Information Protocol (RIP); see Appendix C.

上述步骤由路由信息协议(RIP)的示例模块实现;见附录C。

5.4. Parameters of IPv6 Router Advertisements
5.4. IPv6路由器广告的参数

The YANG module "ietf-ipv6-router-advertisements" (Section 9.1), which is a submodule of the "ietf-ipv6-unicast-routing" module, augments the schema tree of IPv6 interfaces with definitions of the following variables as required by Section 6.2.1 of [RFC4861]:

YANG模块“ietf-ipv6-router-Adadvisions”(第9.1节)是“ietf-ipv6-unicast-routing”模块的子模块,根据[RFC4861]第6.2.1节的要求,使用以下变量的定义扩充ipv6接口的模式树:

o send-advertisements

o 发送广告

o max-rtr-adv-interval

o 最大rtr adv间隔

o min-rtr-adv-interval

o 最小rtr adv间隔

o managed-flag

o 托管标志

o other-config-flag

o 其他配置标志

o link-mtu

o 链接mtu

o reachable-time

o 可达时间

o retrans-timer

o 重传定时器

o cur-hop-limit

o 电流跳限

o default-lifetime

o 默认生存期

o prefix-list: a list of prefixes to be advertised.

o 前缀列表:要公布的前缀列表。

The following parameters are associated with each prefix in the list:

以下参数与列表中的每个前缀关联:

* valid-lifetime

* 有效寿命

* on-link-flag

* 在链接标志上

* preferred-lifetime

* 首选寿命

* autonomous-flag

* 自治旗

NOTES:

笔记:

1. The "IsRouter" flag, which is also required by [RFC4861], is implemented in the "ietf-ip" module [RFC8344] (leaf "ip:forwarding").

1. 在“ietf ip”模块[RFC8344](叶“ip:转发”)中实现[RFC4861]也需要的“ISRUTER”标志。

2. The Neighbor Discovery specification [RFC4861] allows the implementations to decide whether the "valid-lifetime" and "preferred-lifetime" parameters remain the same in consecutive advertisements or decrement in real time. However, the latter behavior seems problematic because the values might be reset again to the (higher) configured values after a configuration is reloaded. Moreover, no implementation is known to use the decrementing behavior. The "ietf-ipv6-router-advertisements" submodule therefore stipulates the former behavior with constant values.

2. 邻居发现规范[RFC4861]允许实现决定“有效生存期”和“首选生存期”参数在连续播发中是保持不变,还是实时递减。但是,后一种行为似乎有问题,因为在重新加载配置后,这些值可能会再次重置为(更高的)配置值。此外,没有已知的实现使用递减行为。因此,“ietf-ipv6-router-Advertisions”子模块用常量值规定了前一种行为。

6. Interactions with Other YANG Modules
6. 与其他模块的交互作用

The semantics of the core routing data model also depends on several configuration parameters that are defined in other YANG modules.

核心路由数据模型的语义还取决于其他模块中定义的几个配置参数。

6.1. Module "ietf-interfaces"
6.1. 模块“ietf接口”

The following boolean switch is defined in the "ietf-interfaces" YANG module [RFC8343]:

“ietf接口”模块[RFC8343]中定义了以下布尔开关:

   /if:interfaces/if:interface/if:enabled
        
   /if:interfaces/if:interface/if:enabled
        

If this switch is set to "false" for a network-layer interface, then all routing and forwarding functions MUST be disabled on this interface.

如果此交换机对于网络层接口设置为“false”,则必须禁用此接口上的所有路由和转发功能。

6.2. Module "ietf-ip"
6.2. 模块“ietf ip”

The following boolean switches are defined in the "ietf-ip" YANG module [RFC8344]:

“ietf ip”模块[RFC8344]中定义了以下布尔开关:

   /if:interfaces/if:interface/ip:ipv4/ip:enabled
        
   /if:interfaces/if:interface/ip:ipv4/ip:enabled
        

If this switch is set to "false" for a network-layer interface, then all IPv4 routing and forwarding functions MUST be disabled on this interface.

如果此交换机对于网络层接口设置为“false”,则必须禁用此接口上的所有IPv4路由和转发功能。

   /if:interfaces/if:interface/ip:ipv4/ip:forwarding
        
   /if:interfaces/if:interface/ip:ipv4/ip:forwarding
        

If this switch is set to "false" for a network-layer interface, then the forwarding of IPv4 datagrams through this interface MUST be disabled. However, the interface MAY participate in other IPv4 routing functions, such as routing protocols.

如果此交换机对于网络层接口设置为“false”,则必须禁用通过此接口转发IPv4数据报。但是,该接口可以参与其他IPv4路由功能,例如路由协议。

   /if:interfaces/if:interface/ip:ipv6/ip:enabled
        
   /if:interfaces/if:interface/ip:ipv6/ip:enabled
        

If this switch is set to "false" for a network-layer interface, then all IPv6 routing and forwarding functions MUST be disabled on this interface.

如果此交换机对于网络层接口设置为“false”,则必须禁用此接口上的所有IPv6路由和转发功能。

   /if:interfaces/if:interface/ip:ipv6/ip:forwarding
        
   /if:interfaces/if:interface/ip:ipv6/ip:forwarding
        

If this switch is set to "false" for a network-layer interface, then the forwarding of IPv6 datagrams through this interface MUST be disabled. However, the interface MAY participate in other IPv6 routing functions, such as routing protocols.

如果此交换机对于网络层接口设置为“false”,则必须禁用通过此接口转发IPv6数据报。但是,该接口可以参与其他IPv6路由功能,例如路由协议。

In addition, the "ietf-ip" module allows for configuring IPv4 and IPv6 addresses and network prefixes or masks on network-layer interfaces. Configuration of these parameters on an enabled interface MUST result in an immediate creation of the corresponding direct route. The destination prefix of this route is set according to the configured IP address and network prefix/mask, and the interface is set as the outgoing interface for that route.

此外,“ietf ip”模块允许在网络层接口上配置IPv4和IPv6地址以及网络前缀或掩码。在启用的接口上配置这些参数必须立即创建相应的直接路由。根据配置的IP地址和网络前缀/掩码设置此路由的目标前缀,并将接口设置为该路由的传出接口。

7. Routing Management YANG Module
7. 路由管理模块
   <CODE BEGINS> file "ietf-routing@2018-03-13.yang"
        
   <CODE BEGINS> file "ietf-routing@2018-03-13.yang"
        
   module ietf-routing {
     yang-version "1.1";
     namespace "urn:ietf:params:xml:ns:yang:ietf-routing";
     prefix "rt";
        
   module ietf-routing {
     yang-version "1.1";
     namespace "urn:ietf:params:xml:ns:yang:ietf-routing";
     prefix "rt";
        
     import ietf-yang-types {
       prefix "yang";
     }
        
     import ietf-yang-types {
       prefix "yang";
     }
        
     import ietf-interfaces {
       prefix "if";
       description
         "An 'ietf-interfaces' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-interfaces {
       prefix "if";
       description
         "An 'ietf-interfaces' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        

description "This YANG module defines essential components for the management of a routing subsystem. The model fully conforms to the Network Management Datastore Architecture (NMDA).

描述“该模块定义了路由子系统管理的基本组件。该模型完全符合网络管理数据存储体系结构(NMDA)。

Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved.

版权所有(c)2018 IETF信托基金和被确定为代码作者的人员。版权所有。

Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info).

根据IETF信托有关IETF文件的法律规定第4.c节规定的简化BSD许可证中包含的许可条款,允许以源代码和二进制格式重新分发和使用,无论是否修改(https://trustee.ietf.org/license-info).

This version of this YANG module is part of RFC 8349; see the RFC itself for full legal notices.";

此模块的此版本是RFC 8349的一部分;有关完整的法律通知,请参见RFC本身。“;

     revision 2018-03-13 {
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     revision 2018-03-13 {
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     /* Features */
     feature multiple-ribs {
       description
         "This feature indicates that the server supports
          user-defined RIBs.
        
     /* Features */
     feature multiple-ribs {
       description
         "This feature indicates that the server supports
          user-defined RIBs.
        
          Servers that do not advertise this feature SHOULD provide
          exactly one system-controlled RIB per supported address family
          and also make it the default RIB.  This RIB then appears as an
          entry in the list '/routing/ribs/rib'.";
     }
        
          Servers that do not advertise this feature SHOULD provide
          exactly one system-controlled RIB per supported address family
          and also make it the default RIB.  This RIB then appears as an
          entry in the list '/routing/ribs/rib'.";
     }
        

feature router-id { description "This feature indicates that the server supports an explicit 32-bit router ID that is used by some routing protocols.

feature router id{description“此功能表示服务器支持某些路由协议使用的显式32位路由器id。

          Servers that do not advertise this feature set a router ID
          algorithmically, usually to one of the configured IPv4
          addresses.  However, this algorithm is implementation
          specific.";
     }
        
          Servers that do not advertise this feature set a router ID
          algorithmically, usually to one of the configured IPv4
          addresses.  However, this algorithm is implementation
          specific.";
     }
        
     /* Identities */
        
     /* Identities */
        
     identity address-family {
       description
         "Base identity from which identities describing address
          families are derived.";
     }
        
     identity address-family {
       description
         "Base identity from which identities describing address
          families are derived.";
     }
        
     identity ipv4 {
       base address-family;
       description
         "This identity represents an IPv4 address family.";
     }
        
     identity ipv4 {
       base address-family;
       description
         "This identity represents an IPv4 address family.";
     }
        
     identity ipv6 {
       base address-family;
       description
         "This identity represents an IPv6 address family.";
     }
        
     identity ipv6 {
       base address-family;
       description
         "This identity represents an IPv6 address family.";
     }
        
     identity control-plane-protocol {
       description
         "Base identity from which control-plane protocol identities are
          derived.";
     }
        
     identity control-plane-protocol {
       description
         "Base identity from which control-plane protocol identities are
          derived.";
     }
        
     identity routing-protocol {
       base control-plane-protocol;
       description
         "Identity from which Layer 3 routing protocol identities are
          derived.";
     }
        
     identity routing-protocol {
       base control-plane-protocol;
       description
         "Identity from which Layer 3 routing protocol identities are
          derived.";
     }
        
     identity direct {
       base routing-protocol;
       description
         "Routing pseudo-protocol that provides routes to directly
          connected networks.";
     }
        
     identity direct {
       base routing-protocol;
       description
         "Routing pseudo-protocol that provides routes to directly
          connected networks.";
     }
        
     identity static {
       base routing-protocol;
       description
         "'Static' routing pseudo-protocol.";
     }
        
     identity static {
       base routing-protocol;
       description
         "'Static' routing pseudo-protocol.";
     }
        
     /* Type Definitions */
        
     /* Type Definitions */
        
     typedef route-preference {
       type uint32;
       description
         "This type is used for route preferences.";
     }
        
     typedef route-preference {
       type uint32;
       description
         "This type is used for route preferences.";
     }
        
     /* Groupings */
        
     /* Groupings */
        
     grouping address-family {
       description
         "This grouping provides a leaf identifying an address
          family.";
       leaf address-family {
         type identityref {
           base address-family;
         }
         mandatory true;
         description
           "Address family.";
       }
     }
        
     grouping address-family {
       description
         "This grouping provides a leaf identifying an address
          family.";
       leaf address-family {
         type identityref {
           base address-family;
         }
         mandatory true;
         description
           "Address family.";
       }
     }
        
     grouping router-id {
       description
         "This grouping provides a router ID.";
       leaf router-id {
         type yang:dotted-quad;
         description
           "A 32-bit number in the form of a dotted quad that is used by
            some routing protocols identifying a router.";
         reference
           "RFC 2328: OSPF Version 2";
       }
     }
        
     grouping router-id {
       description
         "This grouping provides a router ID.";
       leaf router-id {
         type yang:dotted-quad;
         description
           "A 32-bit number in the form of a dotted quad that is used by
            some routing protocols identifying a router.";
         reference
           "RFC 2328: OSPF Version 2";
       }
     }
        
     grouping special-next-hop {
       description
         "This grouping provides a leaf with an enumeration of special
          next hops.";
       leaf special-next-hop {
         type enumeration {
           enum blackhole {
             description
               "Silently discard the packet.";
           }
           enum unreachable {
             description
               "Discard the packet and notify the sender with an error
                message indicating that the destination host is
                unreachable.";
           }
           enum prohibit {
             description
               "Discard the packet and notify the sender with an error
                message indicating that the communication is
                administratively prohibited.";
        
     grouping special-next-hop {
       description
         "This grouping provides a leaf with an enumeration of special
          next hops.";
       leaf special-next-hop {
         type enumeration {
           enum blackhole {
             description
               "Silently discard the packet.";
           }
           enum unreachable {
             description
               "Discard the packet and notify the sender with an error
                message indicating that the destination host is
                unreachable.";
           }
           enum prohibit {
             description
               "Discard the packet and notify the sender with an error
                message indicating that the communication is
                administratively prohibited.";
        
           }
           enum receive {
             description
               "The packet will be received by the local system.";
           }
         }
         description
           "Options for special next hops.";
       }
     }
        
           }
           enum receive {
             description
               "The packet will be received by the local system.";
           }
         }
         description
           "Options for special next hops.";
       }
     }
        
     grouping next-hop-content {
       description
         "Generic parameters of next hops in static routes.";
       choice next-hop-options {
         mandatory true;
         description
           "Options for next hops in static routes.
        
     grouping next-hop-content {
       description
         "Generic parameters of next hops in static routes.";
       choice next-hop-options {
         mandatory true;
         description
           "Options for next hops in static routes.
        
            It is expected that further cases will be added through
            augments from other modules.";
         case simple-next-hop {
           description
             "This case represents a simple next hop consisting of the
              next-hop address and/or outgoing interface.
        
            It is expected that further cases will be added through
            augments from other modules.";
         case simple-next-hop {
           description
             "This case represents a simple next hop consisting of the
              next-hop address and/or outgoing interface.
        
              Modules for address families MUST augment this case with a
              leaf containing a next-hop address of that address
              family.";
           leaf outgoing-interface {
             type if:interface-ref;
             description
               "Name of the outgoing interface.";
           }
         }
         case special-next-hop {
           uses special-next-hop;
         }
         case next-hop-list {
           container next-hop-list {
             description
               "Container for multiple next hops.";
             list next-hop {
               key "index";
               description
                 "An entry in a next-hop list.
        
              Modules for address families MUST augment this case with a
              leaf containing a next-hop address of that address
              family.";
           leaf outgoing-interface {
             type if:interface-ref;
             description
               "Name of the outgoing interface.";
           }
         }
         case special-next-hop {
           uses special-next-hop;
         }
         case next-hop-list {
           container next-hop-list {
             description
               "Container for multiple next hops.";
             list next-hop {
               key "index";
               description
                 "An entry in a next-hop list.
        

Modules for address families MUST augment this list

地址族的模块必须扩充此列表

                  with a leaf containing a next-hop address of that
                  address family.";
               leaf index {
                 type string;
                 description
                   "A user-specified identifier utilized to uniquely
                    reference the next-hop entry in the next-hop list.
                    The value of this index has no semantic meaning
                    other than for referencing the entry.";
               }
               leaf outgoing-interface {
                 type if:interface-ref;
                 description
                   "Name of the outgoing interface.";
               }
             }
           }
         }
       }
     }
        
                  with a leaf containing a next-hop address of that
                  address family.";
               leaf index {
                 type string;
                 description
                   "A user-specified identifier utilized to uniquely
                    reference the next-hop entry in the next-hop list.
                    The value of this index has no semantic meaning
                    other than for referencing the entry.";
               }
               leaf outgoing-interface {
                 type if:interface-ref;
                 description
                   "Name of the outgoing interface.";
               }
             }
           }
         }
       }
     }
        
     grouping next-hop-state-content {
       description
         "Generic state parameters of next hops.";
       choice next-hop-options {
         mandatory true;
         description
           "Options for next hops.
        
     grouping next-hop-state-content {
       description
         "Generic state parameters of next hops.";
       choice next-hop-options {
         mandatory true;
         description
           "Options for next hops.
        
            It is expected that further cases will be added through
            augments from other modules, e.g., for recursive
            next hops.";
         case simple-next-hop {
           description
             "This case represents a simple next hop consisting of the
              next-hop address and/or outgoing interface.
        
            It is expected that further cases will be added through
            augments from other modules, e.g., for recursive
            next hops.";
         case simple-next-hop {
           description
             "This case represents a simple next hop consisting of the
              next-hop address and/or outgoing interface.
        
              Modules for address families MUST augment this case with a
              leaf containing a next-hop address of that address
              family.";
           leaf outgoing-interface {
             type if:interface-ref;
             description
               "Name of the outgoing interface.";
           }
         }
         case special-next-hop {
           uses special-next-hop;
        
              Modules for address families MUST augment this case with a
              leaf containing a next-hop address of that address
              family.";
           leaf outgoing-interface {
             type if:interface-ref;
             description
               "Name of the outgoing interface.";
           }
         }
         case special-next-hop {
           uses special-next-hop;
        
         }
         case next-hop-list {
           container next-hop-list {
             description
               "Container for multiple next hops.";
             list next-hop {
               description
                 "An entry in a next-hop list.
        
         }
         case next-hop-list {
           container next-hop-list {
             description
               "Container for multiple next hops.";
             list next-hop {
               description
                 "An entry in a next-hop list.
        
                  Modules for address families MUST augment this list
                  with a leaf containing a next-hop address of that
                  address family.";
               leaf outgoing-interface {
                 type if:interface-ref;
                 description
                   "Name of the outgoing interface.";
               }
             }
           }
         }
       }
     }
        
                  Modules for address families MUST augment this list
                  with a leaf containing a next-hop address of that
                  address family.";
               leaf outgoing-interface {
                 type if:interface-ref;
                 description
                   "Name of the outgoing interface.";
               }
             }
           }
         }
       }
     }
        
     grouping route-metadata {
       description
         "Common route metadata.";
       leaf source-protocol {
         type identityref {
           base routing-protocol;
         }
         mandatory true;
         description
           "Type of the routing protocol from which the route
            originated.";
       }
       leaf active {
         type empty;
         description
           "The presence of this leaf indicates that the route is
            preferred among all routes in the same RIB that have the
            same destination prefix.";
       }
       leaf last-updated {
         type yang:date-and-time;
         description
           "Timestamp of the last modification of the route.  If the
            route was never modified, it is the time when the route was
            inserted into the RIB.";
        
     grouping route-metadata {
       description
         "Common route metadata.";
       leaf source-protocol {
         type identityref {
           base routing-protocol;
         }
         mandatory true;
         description
           "Type of the routing protocol from which the route
            originated.";
       }
       leaf active {
         type empty;
         description
           "The presence of this leaf indicates that the route is
            preferred among all routes in the same RIB that have the
            same destination prefix.";
       }
       leaf last-updated {
         type yang:date-and-time;
         description
           "Timestamp of the last modification of the route.  If the
            route was never modified, it is the time when the route was
            inserted into the RIB.";
        
       }
     }
        
       }
     }
        
     /* Data nodes */
        
     /* Data nodes */
        
     container routing {
       description
         "Configuration parameters for the routing subsystem.";
       uses router-id {
         if-feature "router-id";
         description
           "Support for the global router ID.  Routing protocols
            that use a router ID can use this parameter or override it
            with another value.";
       }
       container interfaces {
         config false;
         description
           "Network-layer interfaces used for routing.";
         leaf-list interface {
           type if:interface-ref;
           description
             "Each entry is a reference to the name of a configured
              network-layer interface.";
         }
       }
       container control-plane-protocols {
         description
           "Support for control-plane protocol instances.";
         list control-plane-protocol {
           key "type name";
           description
             "Each entry contains a control-plane protocol instance.";
           leaf type {
             type identityref {
               base control-plane-protocol;
             }
             description
               "Type of the control-plane protocol -- an identity
                derived from the 'control-plane-protocol'
                base identity.";
           }
           leaf name {
             type string;
             description
               "An arbitrary name of the control-plane protocol
                instance.";
           }
        
     container routing {
       description
         "Configuration parameters for the routing subsystem.";
       uses router-id {
         if-feature "router-id";
         description
           "Support for the global router ID.  Routing protocols
            that use a router ID can use this parameter or override it
            with another value.";
       }
       container interfaces {
         config false;
         description
           "Network-layer interfaces used for routing.";
         leaf-list interface {
           type if:interface-ref;
           description
             "Each entry is a reference to the name of a configured
              network-layer interface.";
         }
       }
       container control-plane-protocols {
         description
           "Support for control-plane protocol instances.";
         list control-plane-protocol {
           key "type name";
           description
             "Each entry contains a control-plane protocol instance.";
           leaf type {
             type identityref {
               base control-plane-protocol;
             }
             description
               "Type of the control-plane protocol -- an identity
                derived from the 'control-plane-protocol'
                base identity.";
           }
           leaf name {
             type string;
             description
               "An arbitrary name of the control-plane protocol
                instance.";
           }
        
           leaf description {
             type string;
             description
               "Textual description of the control-plane protocol
                instance.";
           }
           container static-routes {
             when "derived-from-or-self(../type, 'rt:static')" {
               description
                 "This container is only valid for the 'static' routing
                  protocol.";
             }
             description
               "Support for the 'static' pseudo-protocol.
        
           leaf description {
             type string;
             description
               "Textual description of the control-plane protocol
                instance.";
           }
           container static-routes {
             when "derived-from-or-self(../type, 'rt:static')" {
               description
                 "This container is only valid for the 'static' routing
                  protocol.";
             }
             description
               "Support for the 'static' pseudo-protocol.
        
                Address-family-specific modules augment this node with
                their lists of routes.";
           }
         }
       }
       container ribs {
         description
           "Support for RIBs.";
         list rib {
           key "name";
           description
             "Each entry contains a configuration for a RIB identified
              by the 'name' key.
        
                Address-family-specific modules augment this node with
                their lists of routes.";
           }
         }
       }
       container ribs {
         description
           "Support for RIBs.";
         list rib {
           key "name";
           description
             "Each entry contains a configuration for a RIB identified
              by the 'name' key.
        
              Entries having the same key as a system-controlled entry
              in the list '/routing/ribs/rib' are used for
              configuring parameters of that entry.  Other entries
              define additional user-controlled RIBs.";
           leaf name {
             type string;
             description
               "The name of the RIB.
        
              Entries having the same key as a system-controlled entry
              in the list '/routing/ribs/rib' are used for
              configuring parameters of that entry.  Other entries
              define additional user-controlled RIBs.";
           leaf name {
             type string;
             description
               "The name of the RIB.
        

For system-controlled entries, the value of this leaf must be the same as the name of the corresponding entry in the operational state.

对于系统控制的条目,此叶的值必须与处于操作状态的相应条目的名称相同。

                For user-controlled entries, an arbitrary name can be
                used.";
           }
           uses address-family {
             description
               "The address family of the system-controlled RIB.";
        
                For user-controlled entries, an arbitrary name can be
                used.";
           }
           uses address-family {
             description
               "The address family of the system-controlled RIB.";
        

}

}

           leaf default-rib {
             if-feature "multiple-ribs";
             type boolean;
             default "true";
             config false;
             description
               "This flag has the value of 'true' if and only if the RIB
                is the default RIB for the given address family.
        
           leaf default-rib {
             if-feature "multiple-ribs";
             type boolean;
             default "true";
             config false;
             description
               "This flag has the value of 'true' if and only if the RIB
                is the default RIB for the given address family.
        
                By default, control-plane protocols place their routes
                in the default RIBs.";
           }
           container routes {
             config false;
             description
               "Current contents of the RIB.";
             list route {
               description
                 "A RIB route entry.  This data node MUST be augmented
                  with information specific to routes of each address
                  family.";
               leaf route-preference {
                 type route-preference;
                 description
                   "This route attribute, also known as 'administrative
                    distance', allows for selecting the preferred route
                    among routes with the same destination prefix.  A
                    smaller value indicates a route that is
                    more preferred.";
               }
               container next-hop {
                 description
                   "Route's next-hop attribute.";
                 uses next-hop-state-content;
               }
               uses route-metadata;
             }
           }
           action active-route {
             description
               "Return the active RIB route that is used for the
                destination address.
        
                By default, control-plane protocols place their routes
                in the default RIBs.";
           }
           container routes {
             config false;
             description
               "Current contents of the RIB.";
             list route {
               description
                 "A RIB route entry.  This data node MUST be augmented
                  with information specific to routes of each address
                  family.";
               leaf route-preference {
                 type route-preference;
                 description
                   "This route attribute, also known as 'administrative
                    distance', allows for selecting the preferred route
                    among routes with the same destination prefix.  A
                    smaller value indicates a route that is
                    more preferred.";
               }
               container next-hop {
                 description
                   "Route's next-hop attribute.";
                 uses next-hop-state-content;
               }
               uses route-metadata;
             }
           }
           action active-route {
             description
               "Return the active RIB route that is used for the
                destination address.
        
                Address-family-specific modules MUST augment input
                parameters with a leaf named 'destination-address'.";
             output {
        
                Address-family-specific modules MUST augment input
                parameters with a leaf named 'destination-address'.";
             output {
        

container route { description "The active RIB route for the specified destination.

集装箱路线{description“指定目的地的活动肋骨路线。

If no route exists in the RIB for the destination address, no output is returned.

如果目标地址的RIB中不存在路由,则不会返回任何输出。

                    Address-family-specific modules MUST augment this
                    container with appropriate route contents.";
                 container next-hop {
                   description
                     "Route's next-hop attribute.";
                   uses next-hop-state-content;
                 }
                 uses route-metadata;
               }
             }
           }
           leaf description {
             type string;
             description
               "Textual description of the RIB.";
           }
         }
       }
     }
        
                    Address-family-specific modules MUST augment this
                    container with appropriate route contents.";
                 container next-hop {
                   description
                     "Route's next-hop attribute.";
                   uses next-hop-state-content;
                 }
                 uses route-metadata;
               }
             }
           }
           leaf description {
             type string;
             description
               "Textual description of the RIB.";
           }
         }
       }
     }
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     container routing-state {
       config false;
       status obsolete;
       description
         "State data of the routing subsystem.";
       uses router-id {
         status obsolete;
         description
           "Global router ID.
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     container routing-state {
       config false;
       status obsolete;
       description
         "State data of the routing subsystem.";
       uses router-id {
         status obsolete;
         description
           "Global router ID.
        
            It may be either configured or assigned algorithmically by
            the implementation.";
       }
       container interfaces {
         status obsolete;
         description
        
            It may be either configured or assigned algorithmically by
            the implementation.";
       }
       container interfaces {
         status obsolete;
         description
        
           "Network-layer interfaces used for routing.";
         leaf-list interface {
           type if:interface-state-ref;
           status obsolete;
           description
             "Each entry is a reference to the name of a configured
              network-layer interface.";
         }
       }
       container control-plane-protocols {
         status obsolete;
         description
           "Container for the list of routing protocol instances.";
         list control-plane-protocol {
           key "type name";
           status obsolete;
           description
             "State data of a control-plane protocol instance.
        
           "Network-layer interfaces used for routing.";
         leaf-list interface {
           type if:interface-state-ref;
           status obsolete;
           description
             "Each entry is a reference to the name of a configured
              network-layer interface.";
         }
       }
       container control-plane-protocols {
         status obsolete;
         description
           "Container for the list of routing protocol instances.";
         list control-plane-protocol {
           key "type name";
           status obsolete;
           description
             "State data of a control-plane protocol instance.
        
              An implementation MUST provide exactly one
              system-controlled instance of the 'direct'
              pseudo-protocol.  Instances of other control-plane
              protocols MAY be created by configuration.";
           leaf type {
             type identityref {
               base control-plane-protocol;
             }
             status obsolete;
             description
               "Type of the control-plane protocol.";
           }
           leaf name {
             type string;
             status obsolete;
             description
               "The name of the control-plane protocol instance.
        
              An implementation MUST provide exactly one
              system-controlled instance of the 'direct'
              pseudo-protocol.  Instances of other control-plane
              protocols MAY be created by configuration.";
           leaf type {
             type identityref {
               base control-plane-protocol;
             }
             status obsolete;
             description
               "Type of the control-plane protocol.";
           }
           leaf name {
             type string;
             status obsolete;
             description
               "The name of the control-plane protocol instance.
        
                For system-controlled instances, this name is
                persistent, i.e., it SHOULD NOT change across
                reboots.";
           }
         }
       }
       container ribs {
         status obsolete;
         description
           "Container for RIBs.";
         list rib {
        
                For system-controlled instances, this name is
                persistent, i.e., it SHOULD NOT change across
                reboots.";
           }
         }
       }
       container ribs {
         status obsolete;
         description
           "Container for RIBs.";
         list rib {
        
           key "name";
           min-elements 1;
           status obsolete;
           description
             "Each entry represents a RIB identified by the 'name'
              key.  All routes in a RIB MUST belong to the same address
              family.
        
           key "name";
           min-elements 1;
           status obsolete;
           description
             "Each entry represents a RIB identified by the 'name'
              key.  All routes in a RIB MUST belong to the same address
              family.
        
              An implementation SHOULD provide one system-controlled
              default RIB for each supported address family.";
           leaf name {
             type string;
             status obsolete;
             description
               "The name of the RIB.";
           }
           uses address-family {
             status obsolete;
             description
               "The address family of the RIB.";
           }
           leaf default-rib {
             if-feature "multiple-ribs";
             type boolean;
             default "true";
             status obsolete;
             description
               "This flag has the value of 'true' if and only if the
                RIB is the default RIB for the given address family.
        
              An implementation SHOULD provide one system-controlled
              default RIB for each supported address family.";
           leaf name {
             type string;
             status obsolete;
             description
               "The name of the RIB.";
           }
           uses address-family {
             status obsolete;
             description
               "The address family of the RIB.";
           }
           leaf default-rib {
             if-feature "multiple-ribs";
             type boolean;
             default "true";
             status obsolete;
             description
               "This flag has the value of 'true' if and only if the
                RIB is the default RIB for the given address family.
        
                By default, control-plane protocols place their routes
                in the default RIBs.";
           }
           container routes {
             status obsolete;
             description
               "Current contents of the RIB.";
             list route {
               status obsolete;
               description
                 "A RIB route entry.  This data node MUST be augmented
                  with information specific to routes of each address
                  family.";
               leaf route-preference {
                 type route-preference;
                 status obsolete;
                 description
                   "This route attribute, also known as 'administrative
        
                By default, control-plane protocols place their routes
                in the default RIBs.";
           }
           container routes {
             status obsolete;
             description
               "Current contents of the RIB.";
             list route {
               status obsolete;
               description
                 "A RIB route entry.  This data node MUST be augmented
                  with information specific to routes of each address
                  family.";
               leaf route-preference {
                 type route-preference;
                 status obsolete;
                 description
                   "This route attribute, also known as 'administrative
        
                    distance', allows for selecting the preferred route
                    among routes with the same destination prefix.  A
                    smaller value indicates a route that is
                    more preferred.";
               }
               container next-hop {
                 status obsolete;
                 description
                   "Route's next-hop attribute.";
                 uses next-hop-state-content {
                   status obsolete;
                   description
                     "Route's next-hop attribute operational state.";
                 }
               }
               uses route-metadata {
                 status obsolete;
                 description
                   "Route metadata.";
               }
             }
           }
           action active-route {
             status obsolete;
             description
               "Return the active RIB route that is used for the
                destination address.
        
                    distance', allows for selecting the preferred route
                    among routes with the same destination prefix.  A
                    smaller value indicates a route that is
                    more preferred.";
               }
               container next-hop {
                 status obsolete;
                 description
                   "Route's next-hop attribute.";
                 uses next-hop-state-content {
                   status obsolete;
                   description
                     "Route's next-hop attribute operational state.";
                 }
               }
               uses route-metadata {
                 status obsolete;
                 description
                   "Route metadata.";
               }
             }
           }
           action active-route {
             status obsolete;
             description
               "Return the active RIB route that is used for the
                destination address.
        
                Address-family-specific modules MUST augment input
                parameters with a leaf named 'destination-address'.";
             output {
               container route {
                 status obsolete;
                 description
                   "The active RIB route for the specified
                    destination.
        
                Address-family-specific modules MUST augment input
                parameters with a leaf named 'destination-address'.";
             output {
               container route {
                 status obsolete;
                 description
                   "The active RIB route for the specified
                    destination.
        

If no route exists in the RIB for the destination address, no output is returned.

如果目标地址的RIB中不存在路由,则不会返回任何输出。

                    Address-family-specific modules MUST augment this
                    container with appropriate route contents.";
                 container next-hop {
                   status obsolete;
                   description
                     "Route's next-hop attribute.";
                   uses next-hop-state-content {
                     status obsolete;
        
                    Address-family-specific modules MUST augment this
                    container with appropriate route contents.";
                 container next-hop {
                   status obsolete;
                   description
                     "Route's next-hop attribute.";
                   uses next-hop-state-content {
                     status obsolete;
        
                     description
                       "Active route state data.";
                   }
                 }
                 uses route-metadata {
                   status obsolete;
                   description
                     "Active route metadata.";
                 }
               }
             }
           }
         }
       }
     }
   }
        
                     description
                       "Active route state data.";
                   }
                 }
                 uses route-metadata {
                   status obsolete;
                   description
                     "Active route metadata.";
                 }
               }
             }
           }
         }
       }
     }
   }
        

<CODE ENDS>

<代码结束>

8. IPv4 Unicast Routing Management YANG Module
8. IPv4单播路由管理模块
   <CODE BEGINS> file "ietf-ipv4-unicast-routing@2018-03-13.yang"
        
   <CODE BEGINS> file "ietf-ipv4-unicast-routing@2018-03-13.yang"
        
   module ietf-ipv4-unicast-routing {
     yang-version "1.1";
     namespace
       "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing";
     prefix "v4ur";
        
   module ietf-ipv4-unicast-routing {
     yang-version "1.1";
     namespace
       "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing";
     prefix "v4ur";
        
     import ietf-routing {
       prefix "rt";
       description
         "An 'ietf-routing' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-routing {
       prefix "rt";
       description
         "An 'ietf-routing' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
     import ietf-inet-types {
       prefix "inet";
     }
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        

description "This YANG module augments the 'ietf-routing' module with basic parameters for IPv4 unicast routing. The model fully conforms to the Network Management Datastore Architecture (NMDA).

description“该模块使用IPv4单播路由的基本参数对“ietf路由”模块进行了扩充。该模型完全符合网络管理数据存储体系结构(NMDA)。

Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved.

版权所有(c)2018 IETF信托基金和被确定为代码作者的人员。版权所有。

Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info).

根据IETF信托有关IETF文件的法律规定第4.c节规定的简化BSD许可证中包含的许可条款,允许以源代码和二进制格式重新分发和使用,无论是否修改(https://trustee.ietf.org/license-info).

This version of this YANG module is part of RFC 8349; see the RFC itself for full legal notices.";

此模块的此版本是RFC 8349的一部分;有关完整的法律通知,请参见RFC本身。“;

     revision 2018-03-13 {
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     revision 2018-03-13 {
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     /* Identities */
        
     /* Identities */
        
     identity ipv4-unicast {
       base rt:ipv4;
       description
         "This identity represents the IPv4 unicast address family.";
     }
        
     identity ipv4-unicast {
       base rt:ipv4;
       description
         "This identity represents the IPv4 unicast address family.";
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
        
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "This leaf augments an IPv4 unicast route.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         description
           "IPv4 destination prefix.";
       }
     }
        
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "This leaf augments an IPv4 unicast route.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         description
           "IPv4 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augments the 'simple-next-hop' case in IPv4 unicast routes.";
       leaf next-hop-address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augments the 'simple-next-hop' case in IPv4 unicast routes.";
       leaf next-hop-address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
           + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "This leaf augments the 'next-hop-list' case of IPv4 unicast
          routes.";
       leaf address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
           + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "This leaf augments the 'next-hop-list' case of IPv4 unicast
          routes.";
       leaf address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
       }
     }
        

augment

加强

       "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:input" {
       when "derived-from-or-self(../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast RIBs.";
       }
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv4-address;
         description
           "IPv4 destination address.";
       }
     }
        
       "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:input" {
       when "derived-from-or-self(../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast RIBs.";
       }
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv4-address;
         description
           "IPv4 destination address.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         description
           "IPv4 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         description
           "IPv4 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
        
       }
     }
        
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         description
           "IPv4 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the 'static' pseudo-protocol
          with data specific to IPv4 unicast.";
       container ipv4 {
         description
           "Support for a 'static' pseudo-protocol instance
            consists of a list of routes.";
         list route {
           key "destination-prefix";
           description
             "A list of static routes.";
           leaf destination-prefix {
             type inet:ipv4-prefix;
             mandatory true;
             description
               "IPv4 destination prefix.";
           }
           leaf description {
             type string;
             description
               "Textual description of the route.";
           }
           container next-hop {
             description
               "Support for next-hop.";
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the 'static' pseudo-protocol
          with data specific to IPv4 unicast.";
       container ipv4 {
         description
           "Support for a 'static' pseudo-protocol instance
            consists of a list of routes.";
         list route {
           key "destination-prefix";
           description
             "A list of static routes.";
           leaf destination-prefix {
             type inet:ipv4-prefix;
             mandatory true;
             description
               "IPv4 destination prefix.";
           }
           leaf description {
             type string;
             description
               "Textual description of the route.";
           }
           container next-hop {
             description
               "Support for next-hop.";
        
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augments the 'simple-next-hop' case in IPv4 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv4-address;
                   description
                     "IPv4 address of the next hop.";
                 }
               }
               augment "next-hop-options/next-hop-list/next-hop-list/"
                     + "next-hop" {
                 description
                   "Augments the 'next-hop-list' case in IPv4 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv4-address;
                   description
                     "IPv4 address of the next hop.";
                 }
               }
             }
           }
         }
       }
     }
        
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augments the 'simple-next-hop' case in IPv4 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv4-address;
                   description
                     "IPv4 address of the next hop.";
                 }
               }
               augment "next-hop-options/next-hop-list/next-hop-list/"
                     + "next-hop" {
                 description
                   "Augments the 'next-hop-list' case in IPv4 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv4-address;
                   description
                     "IPv4 address of the next hop.";
                 }
               }
             }
           }
         }
       }
     }
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
            + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "This leaf augments an IPv4 unicast route.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         status obsolete;
         description
           "IPv4 destination prefix.";
       }
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
            + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "This leaf augments an IPv4 unicast route.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         status obsolete;
         description
           "IPv4 destination prefix.";
       }
        
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(
               ../../../rt:address-family, 'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in IPv4 unicast routes.";
       leaf next-hop-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
             + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "This leaf augments the 'next-hop-list' case of IPv4 unicast
          routes.";
       leaf address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:input" {
       when "derived-from-or-self(../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast RIBs.";
       }
       status obsolete;
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
        
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(
               ../../../rt:address-family, 'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in IPv4 unicast routes.";
       leaf next-hop-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
             + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "This leaf augments the 'next-hop-list' case of IPv4 unicast
          routes.";
       leaf address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:input" {
       when "derived-from-or-self(../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast RIBs.";
       }
       status obsolete;
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
        
       leaf destination-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 destination address.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         status obsolete;
         description
           "IPv4 destination prefix.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
        
       leaf destination-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 destination address.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         status obsolete;
         description
           "IPv4 destination prefix.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family,
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
        
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
   }
        
               'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       status obsolete;
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv4-address;
         status obsolete;
         description
           "IPv4 address of the next hop.";
       }
     }
   }
        

<CODE ENDS>

<代码结束>

9. IPv6 Unicast Routing Management YANG Module
9. IPv6单播路由管理模块
   <CODE BEGINS> file "ietf-ipv6-unicast-routing@2018-03-13.yang"
        
   <CODE BEGINS> file "ietf-ipv6-unicast-routing@2018-03-13.yang"
        
   module ietf-ipv6-unicast-routing {
     yang-version "1.1";
     namespace
       "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
     prefix "v6ur";
        
   module ietf-ipv6-unicast-routing {
     yang-version "1.1";
     namespace
       "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
     prefix "v6ur";
        
     import ietf-routing {
       prefix "rt";
       description
         "An 'ietf-routing' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-routing {
       prefix "rt";
       description
         "An 'ietf-routing' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-inet-types {
       prefix "inet";
       description
         "An 'ietf-interfaces' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-inet-types {
       prefix "inet";
       description
         "An 'ietf-interfaces' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     include ietf-ipv6-router-advertisements {
       revision-date 2018-03-13;
     }
        
     include ietf-ipv6-router-advertisements {
       revision-date 2018-03-13;
     }
        
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        

description "This YANG module augments the 'ietf-routing' module with basic parameters for IPv6 unicast routing. The model fully conforms to the Network Management Datastore Architecture (NMDA).

description“该模块使用IPv6单播路由的基本参数对“ietf路由”模块进行了扩充。该模型完全符合网络管理数据存储体系结构(NMDA)。

Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved.

版权所有(c)2018 IETF信托基金和被确定为代码作者的人员。版权所有。

Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info).

根据IETF信托有关IETF文件的法律规定第4.c节规定的简化BSD许可证中包含的许可条款,允许以源代码和二进制格式重新分发和使用,无论是否修改(https://trustee.ietf.org/license-info).

This version of this YANG module is part of RFC 8349; see the RFC itself for full legal notices.";

此模块的此版本是RFC 8349的一部分;有关完整的法律通知,请参见RFC本身。“;

     revision 2018-03-13 {
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     revision 2018-03-13 {
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     /* Identities */
        
     /* Identities */
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     identity ipv6-unicast {
       base rt:ipv6;
       description
         "This identity represents the IPv6 unicast address family.";
     }
        
     identity ipv6-unicast {
       base rt:ipv6;
       description
         "This identity represents the IPv6 unicast address family.";
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "This leaf augments an IPv6 unicast route.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         description
           "IPv6 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "This leaf augments an IPv6 unicast route.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         description
           "IPv6 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "Augments the 'simple-next-hop' case in IPv6 unicast routes.";
       leaf next-hop-address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "Augments the 'simple-next-hop' case in IPv6 unicast routes.";
       leaf next-hop-address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
           + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "This leaf augments the 'next-hop-list' case of IPv6 unicast
          routes.";
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/"
           + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
           + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "This leaf augments the 'next-hop-list' case of IPv6 unicast
          routes.";
        
       leaf address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
       leaf address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
     augment
       "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:input" {
       when "derived-from-or-self(../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast RIBs.";
       }
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv6-address;
         description
           "IPv6 destination address.";
       }
     }
        
     augment
       "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:input" {
       when "derived-from-or-self(../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast RIBs.";
       }
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv6-address;
         description
           "IPv6 destination address.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         description
           "IPv6 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         description
           "IPv6 destination prefix.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
        
       }
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
       }
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family, "
          + "'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv6-address;
         description
           "IPv6 address of the next hop.";
       }
     }
        
     /* Data node augmentations */
        
     /* Data node augmentations */
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the 'static' pseudo-protocol
          with data specific to IPv6 unicast.";
       container ipv6 {
         description
           "Support for a 'static' pseudo-protocol instance
            consists of a list of routes.";
         list route {
           key "destination-prefix";
           description
             "A list of static routes.";
           leaf destination-prefix {
             type inet:ipv6-prefix;
             mandatory true;
             description
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the 'static' pseudo-protocol
          with data specific to IPv6 unicast.";
       container ipv6 {
         description
           "Support for a 'static' pseudo-protocol instance
            consists of a list of routes.";
         list route {
           key "destination-prefix";
           description
             "A list of static routes.";
           leaf destination-prefix {
             type inet:ipv6-prefix;
             mandatory true;
             description
        
               "IPv6 destination prefix.";
           }
           leaf description {
             type string;
             description
               "Textual description of the route.";
           }
           container next-hop {
             description
               "Next hop for the route.";
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augments the 'simple-next-hop' case in IPv6 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv6-address;
                   description
                     "IPv6 address of the next hop.";
                 }
               }
               augment "next-hop-options/next-hop-list/next-hop-list/"
                     + "next-hop" {
                 description
                   "Augments the 'next-hop-list' case in IPv6 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv6-address;
                   description
                     "IPv6 address of the next hop.";
                 }
               }
             }
           }
         }
       }
     }
        
               "IPv6 destination prefix.";
           }
           leaf description {
             type string;
             description
               "Textual description of the route.";
           }
           container next-hop {
             description
               "Next hop for the route.";
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augments the 'simple-next-hop' case in IPv6 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv6-address;
                   description
                     "IPv6 address of the next hop.";
                 }
               }
               augment "next-hop-options/next-hop-list/next-hop-list/"
                     + "next-hop" {
                 description
                   "Augments the 'next-hop-list' case in IPv6 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv6-address;
                   description
                     "IPv6 address of the next hop.";
                 }
               }
             }
           }
         }
       }
     }
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
        
       }
       status obsolete;
       description
         "This leaf augments an IPv6 unicast route.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         status obsolete;
         description
           "IPv6 destination prefix.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in IPv6 unicast routes.";
       leaf next-hop-address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
             + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "This leaf augments the 'next-hop-list' case of IPv6 unicast
          routes.";
       leaf address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/"
        
       }
       status obsolete;
       description
         "This leaf augments an IPv6 unicast route.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         status obsolete;
         description
           "IPv6 destination prefix.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in IPv6 unicast routes.";
       leaf next-hop-address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
             + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/"
             + "rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "This leaf augments the 'next-hop-list' case of IPv6 unicast
          routes.";
       leaf address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/"
        
             + "rt:active-route/rt:input" {
       when "derived-from-or-self(../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast RIBs.";
       }
       status obsolete;
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 destination address.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         status obsolete;
         description
           "IPv6 destination prefix.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
        
             + "rt:active-route/rt:input" {
       when "derived-from-or-self(../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast RIBs.";
       }
       status obsolete;
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 destination address.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route" {
       when "derived-from-or-self(../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "This augment adds the destination prefix to the reply of the
          'active-route' action.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         status obsolete;
         description
           "IPv6 destination prefix.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:simple-next-hop" {
       when "derived-from-or-self(../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "Augments the 'simple-next-hop' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
        
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
   }
        
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
             + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
             + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
       when "derived-from-or-self(../../../../../rt:address-family,
               'v6ur:ipv6-unicast')" {
         description
           "This augment is valid only for IPv6 unicast.";
       }
       status obsolete;
       description
         "Augments the 'next-hop-list' case in the reply to the
          'active-route' action.";
       leaf next-hop-address {
         type inet:ipv6-address;
         status obsolete;
         description
           "IPv6 address of the next hop.";
       }
     }
   }
        

<CODE ENDS>

<代码结束>

9.1. IPv6 Router Advertisements Submodule
9.1. IPv6路由器广告子模块
   <CODE BEGINS> file "ietf-ipv6-router-advertisements@2018-03-13.yang"
        
   <CODE BEGINS> file "ietf-ipv6-router-advertisements@2018-03-13.yang"
        
   submodule ietf-ipv6-router-advertisements {
     yang-version "1.1";
        
   submodule ietf-ipv6-router-advertisements {
     yang-version "1.1";
        
     belongs-to ietf-ipv6-unicast-routing {
       prefix "v6ur";
     }
        
     belongs-to ietf-ipv6-unicast-routing {
       prefix "v6ur";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
        
     import ietf-interfaces {
       prefix "if";
       description
         "An 'ietf-interfaces' module version that is compatible with
        
     import ietf-interfaces {
       prefix "if";
       description
         "An 'ietf-interfaces' module version that is compatible with
        
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-ip {
       prefix "ip";
       description
         "An 'ietf-ip' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     import ietf-ip {
       prefix "ip";
       description
         "An 'ietf-ip' module version that is compatible with
          the Network Management Datastore Architecture (NMDA)
          is required.";
     }
        
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
     organization
       "IETF NETMOD (Network Modeling) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:rtgwg@ietf.org>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
                  Acee Lindem
                  <mailto:acee@cisco.com>
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com>";
        

description "This YANG module augments the 'ietf-ip' module with parameters for IPv6 Router Advertisements. The model fully conforms to the Network Management Datastore Architecture (NMDA).

description“该模块使用IPv6路由器广告的参数对“ietf ip”模块进行了扩充。该模型完全符合网络管理数据存储体系结构(NMDA)。

Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved.

版权所有(c)2018 IETF信托基金和被确定为代码作者的人员。版权所有。

Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info).

根据IETF信托有关IETF文件的法律规定第4.c节规定的简化BSD许可证中包含的许可条款,允许以源代码和二进制格式重新分发和使用,无论是否修改(https://trustee.ietf.org/license-info).

This version of this YANG module is part of RFC 8349; see the RFC itself for full legal notices.";

此模块的此版本是RFC 8349的一部分;有关完整的法律通知,请参见RFC本身。“;

reference "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";

参考“RFC 4861:IP版本6(IPv6)的邻居发现”;

revision 2018-03-13 {

修订版2018-03-13{

       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
       description
         "Network Management Datastore Architecture (NMDA) revision.";
       reference
         "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     revision 2016-11-04 {
          description
            "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
     }
        
     augment "/if:interfaces/if:interface/ip:ipv6" {
       description
         "Augments interface configuration with parameters of IPv6
          Router Advertisements.";
       container ipv6-router-advertisements {
         description
           "Support for IPv6 Router Advertisements.";
         leaf send-advertisements {
           type boolean;
           default "false";
           description
             "A flag indicating whether or not the router sends
              periodic Router Advertisements and responds to
              Router Solicitations.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvSendAdvertisements";
         }
         leaf max-rtr-adv-interval {
           type uint16 {
             range "4..65535";
           }
           units "seconds";
           default "600";
           description
             "The maximum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - MaxRtrAdvInterval";
         }
         leaf min-rtr-adv-interval {
           type uint16 {
             range "3..1350";
        
     augment "/if:interfaces/if:interface/ip:ipv6" {
       description
         "Augments interface configuration with parameters of IPv6
          Router Advertisements.";
       container ipv6-router-advertisements {
         description
           "Support for IPv6 Router Advertisements.";
         leaf send-advertisements {
           type boolean;
           default "false";
           description
             "A flag indicating whether or not the router sends
              periodic Router Advertisements and responds to
              Router Solicitations.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvSendAdvertisements";
         }
         leaf max-rtr-adv-interval {
           type uint16 {
             range "4..65535";
           }
           units "seconds";
           default "600";
           description
             "The maximum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - MaxRtrAdvInterval";
         }
         leaf min-rtr-adv-interval {
           type uint16 {
             range "3..1350";
        
           }
           units "seconds";
           must ". <= 0.75 * ../max-rtr-adv-interval" {
             description
               "The value MUST NOT be greater than 75% of
                'max-rtr-adv-interval'.";
           }
           description
             "The minimum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.
        
           }
           units "seconds";
           must ". <= 0.75 * ../max-rtr-adv-interval" {
             description
               "The value MUST NOT be greater than 75% of
                'max-rtr-adv-interval'.";
           }
           description
             "The minimum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.
        

The default value to be used operationally if this leaf is not configured is determined as follows:

如果未配置此叶,则操作上使用的默认值确定如下:

- if max-rtr-adv-interval >= 9 seconds, the default value is 0.33 * max-rtr-adv-interval;

- 如果最大rtr adv间隔>=9秒,默认值为0.33*最大rtr adv间隔;

              - otherwise, it is 0.75 * max-rtr-adv-interval.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - MinRtrAdvInterval";
         }
         leaf managed-flag {
           type boolean;
           default "false";
           description
             "The value to be placed in the 'Managed address
              configuration' flag field in the Router
              Advertisement.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvManagedFlag";
         }
         leaf other-config-flag {
           type boolean;
           default "false";
           description
             "The value to be placed in the 'Other configuration'
              flag field in the Router Advertisement.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvOtherConfigFlag";
         }
         leaf link-mtu {
           type uint32;
           default "0";
           description
             "The value to be placed in MTU options sent by the
        
              - otherwise, it is 0.75 * max-rtr-adv-interval.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - MinRtrAdvInterval";
         }
         leaf managed-flag {
           type boolean;
           default "false";
           description
             "The value to be placed in the 'Managed address
              configuration' flag field in the Router
              Advertisement.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvManagedFlag";
         }
         leaf other-config-flag {
           type boolean;
           default "false";
           description
             "The value to be placed in the 'Other configuration'
              flag field in the Router Advertisement.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvOtherConfigFlag";
         }
         leaf link-mtu {
           type uint32;
           default "0";
           description
             "The value to be placed in MTU options sent by the
        
              router.  A value of zero indicates that no MTU options
              are sent.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvLinkMTU";
         }
         leaf reachable-time {
           type uint32 {
             range "0..3600000";
           }
           units "milliseconds";
           default "0";
           description
             "The value to be placed in the Reachable Time field in
              the Router Advertisement messages sent by the router.
              A value of zero means unspecified (by this router).";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvReachableTime";
         }
         leaf retrans-timer {
           type uint32;
           units "milliseconds";
           default "0";
           description
             "The value to be placed in the Retrans Timer field in
              the Router Advertisement messages sent by the router.
              A value of zero means unspecified (by this router).";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvRetransTimer";
         }
         leaf cur-hop-limit {
           type uint8;
           description
             "The value to be placed in the Cur Hop Limit field in
              the Router Advertisement messages sent by the router.
              A value of zero means unspecified (by this router).
        
              router.  A value of zero indicates that no MTU options
              are sent.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvLinkMTU";
         }
         leaf reachable-time {
           type uint32 {
             range "0..3600000";
           }
           units "milliseconds";
           default "0";
           description
             "The value to be placed in the Reachable Time field in
              the Router Advertisement messages sent by the router.
              A value of zero means unspecified (by this router).";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvReachableTime";
         }
         leaf retrans-timer {
           type uint32;
           units "milliseconds";
           default "0";
           description
             "The value to be placed in the Retrans Timer field in
              the Router Advertisement messages sent by the router.
              A value of zero means unspecified (by this router).";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvRetransTimer";
         }
         leaf cur-hop-limit {
           type uint8;
           description
             "The value to be placed in the Cur Hop Limit field in
              the Router Advertisement messages sent by the router.
              A value of zero means unspecified (by this router).
        

If this parameter is not configured, the device SHOULD use the IANA-specified value for the default IPv4 Time to Live (TTL) parameter that was in effect at the time of implementation."; reference "RFC 3232: Assigned Numbers: RFC 1700 is Replaced by an On-line Database RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - AdvCurHopLimit

如果未配置此参数,设备应使用IANA指定的值作为默认IPv4生存时间(TTL)参数,该参数在实施时有效。“参考”RFC 3232:分配的号码:RFC 1700被在线数据库RFC 4861:IP版本6(IPv6)的邻居发现-AdvCurHopLimit替换

              IANA: IP Parameters
                    (https://www.iana.org/assignments/ip-parameters)";
         }
         leaf default-lifetime {
           type uint16 {
             range "0..65535";
           }
           units "seconds";
           description
             "The value to be placed in the Router Lifetime field of
              Router Advertisements sent from the interface, in
              seconds.  It MUST be either zero or between
              max-rtr-adv-interval and 9000 seconds.  A value of zero
              indicates that the router is not to be used as a
              default router.  These limits may be overridden by
              specific documents that describe how IPv6 operates over
              different link layers.
        
              IANA: IP Parameters
                    (https://www.iana.org/assignments/ip-parameters)";
         }
         leaf default-lifetime {
           type uint16 {
             range "0..65535";
           }
           units "seconds";
           description
             "The value to be placed in the Router Lifetime field of
              Router Advertisements sent from the interface, in
              seconds.  It MUST be either zero or between
              max-rtr-adv-interval and 9000 seconds.  A value of zero
              indicates that the router is not to be used as a
              default router.  These limits may be overridden by
              specific documents that describe how IPv6 operates over
              different link layers.
        
              If this parameter is not configured, the device SHOULD
              use a value of 3 * max-rtr-adv-interval.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvDefaultLifetime";
         }
         container prefix-list {
           description
             "Support for prefixes to be placed in Prefix
              Information options in Router Advertisement messages
              sent from the interface.
        
              If this parameter is not configured, the device SHOULD
              use a value of 3 * max-rtr-adv-interval.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvDefaultLifetime";
         }
         container prefix-list {
           description
             "Support for prefixes to be placed in Prefix
              Information options in Router Advertisement messages
              sent from the interface.
        

Prefixes that are advertised by default but do not have their entries in the child 'prefix' list are advertised with the default values of all parameters.

默认情况下播发但在子“prefix”列表中没有其条目的前缀将使用所有参数的默认值播发。

              The link-local prefix SHOULD NOT be included in the
              list of advertised prefixes.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvPrefixList";
           list prefix {
             key "prefix-spec";
             description
               "Support for an advertised prefix entry.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               description
                 "IPv6 address prefix.";
             }
        
              The link-local prefix SHOULD NOT be included in the
              list of advertised prefixes.";
           reference
             "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                        - AdvPrefixList";
           list prefix {
             key "prefix-spec";
             description
               "Support for an advertised prefix entry.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               description
                 "IPv6 address prefix.";
             }
        
             choice control-adv-prefixes {
               default "advertise";
               description
                 "Either (1) the prefix is explicitly removed from the
                  set of advertised prefixes or (2) the parameters with
                  which the prefix is advertised are specified (default
                  case).";
               leaf no-advertise {
                 type empty;
                 description
                   "The prefix will not be advertised.
        
             choice control-adv-prefixes {
               default "advertise";
               description
                 "Either (1) the prefix is explicitly removed from the
                  set of advertised prefixes or (2) the parameters with
                  which the prefix is advertised are specified (default
                  case).";
               leaf no-advertise {
                 type empty;
                 description
                   "The prefix will not be advertised.
        
                    This can be used for removing the prefix from
                    the default set of advertised prefixes.";
               }
               case advertise {
                 leaf valid-lifetime {
                   type uint32;
                   units "seconds";
                   default "2592000";
                   description
                     "The value to be placed in the Valid Lifetime
                      in the Prefix Information option.  The
                      designated value of all 1's (0xffffffff)
                       represents infinity.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvValidLifetime";
                 }
                 leaf on-link-flag {
                   type boolean;
                   default "true";
                   description
                     "The value to be placed in the on-link flag
                      ('L-bit') field in the Prefix Information
                      option.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvOnLinkFlag";
                 }
                 leaf preferred-lifetime {
                   type uint32;
                   units "seconds";
                   must ". <= ../valid-lifetime" {
                     description
                       "This value MUST NOT be greater than
                        valid-lifetime.";
                   }
        
                    This can be used for removing the prefix from
                    the default set of advertised prefixes.";
               }
               case advertise {
                 leaf valid-lifetime {
                   type uint32;
                   units "seconds";
                   default "2592000";
                   description
                     "The value to be placed in the Valid Lifetime
                      in the Prefix Information option.  The
                      designated value of all 1's (0xffffffff)
                       represents infinity.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvValidLifetime";
                 }
                 leaf on-link-flag {
                   type boolean;
                   default "true";
                   description
                     "The value to be placed in the on-link flag
                      ('L-bit') field in the Prefix Information
                      option.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvOnLinkFlag";
                 }
                 leaf preferred-lifetime {
                   type uint32;
                   units "seconds";
                   must ". <= ../valid-lifetime" {
                     description
                       "This value MUST NOT be greater than
                        valid-lifetime.";
                   }
        
                   default "604800";
                   description
                     "The value to be placed in the Preferred
                      Lifetime in the Prefix Information option.
                      The designated value of all 1's (0xffffffff)
                      represents infinity.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvPreferredLifetime";
                 }
                 leaf autonomous-flag {
                   type boolean;
                   default "true";
                   description
                     "The value to be placed in the Autonomous Flag
                      field in the Prefix Information option.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvAutonomousFlag";
                 }
               }
             }
           }
         }
       }
     }
        
                   default "604800";
                   description
                     "The value to be placed in the Preferred
                      Lifetime in the Prefix Information option.
                      The designated value of all 1's (0xffffffff)
                      represents infinity.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvPreferredLifetime";
                 }
                 leaf autonomous-flag {
                   type boolean;
                   default "true";
                   description
                     "The value to be placed in the Autonomous Flag
                      field in the Prefix Information option.";
                   reference
                     "RFC 4861: Neighbor Discovery for IP version 6
                                (IPv6) - AdvAutonomousFlag";
                 }
               }
             }
           }
         }
       }
     }
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     augment "/if:interfaces-state/if:interface/ip:ipv6" {
       status obsolete;
       description
         "Augments interface state data with parameters of IPv6
          Router Advertisements.";
       container ipv6-router-advertisements {
         status obsolete;
         description
           "Parameters of IPv6 Router Advertisements.";
         leaf send-advertisements {
           type boolean;
           status obsolete;
           description
             "A flag indicating whether or not the router sends
              periodic Router Advertisements and responds to
              Router Solicitations.";
        
     /*
      * The subsequent data nodes are obviated and obsoleted
      * by the Network Management Datastore Architecture
      * as described in RFC 8342.
      */
     augment "/if:interfaces-state/if:interface/ip:ipv6" {
       status obsolete;
       description
         "Augments interface state data with parameters of IPv6
          Router Advertisements.";
       container ipv6-router-advertisements {
         status obsolete;
         description
           "Parameters of IPv6 Router Advertisements.";
         leaf send-advertisements {
           type boolean;
           status obsolete;
           description
             "A flag indicating whether or not the router sends
              periodic Router Advertisements and responds to
              Router Solicitations.";
        
         }
         leaf max-rtr-adv-interval {
           type uint16 {
             range "4..1800";
           }
           units "seconds";
           status obsolete;
           description
             "The maximum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
         }
         leaf min-rtr-adv-interval {
           type uint16 {
             range "3..1350";
           }
           units "seconds";
           status obsolete;
           description
             "The minimum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
         }
         leaf managed-flag {
           type boolean;
           status obsolete;
           description
             "The value that is placed in the 'Managed address
              configuration' flag field in the Router Advertisement.";
         }
         leaf other-config-flag {
           type boolean;
           status obsolete;
           description
             "The value that is placed in the 'Other configuration' flag
              field in the Router Advertisement.";
         }
         leaf link-mtu {
           type uint32;
           status obsolete;
           description
             "The value that is placed in MTU options sent by the
              router.  A value of zero indicates that no MTU options
              are sent.";
         }
         leaf reachable-time {
           type uint32 {
             range "0..3600000";
           }
           units "milliseconds";
        
         }
         leaf max-rtr-adv-interval {
           type uint16 {
             range "4..1800";
           }
           units "seconds";
           status obsolete;
           description
             "The maximum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
         }
         leaf min-rtr-adv-interval {
           type uint16 {
             range "3..1350";
           }
           units "seconds";
           status obsolete;
           description
             "The minimum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
         }
         leaf managed-flag {
           type boolean;
           status obsolete;
           description
             "The value that is placed in the 'Managed address
              configuration' flag field in the Router Advertisement.";
         }
         leaf other-config-flag {
           type boolean;
           status obsolete;
           description
             "The value that is placed in the 'Other configuration' flag
              field in the Router Advertisement.";
         }
         leaf link-mtu {
           type uint32;
           status obsolete;
           description
             "The value that is placed in MTU options sent by the
              router.  A value of zero indicates that no MTU options
              are sent.";
         }
         leaf reachable-time {
           type uint32 {
             range "0..3600000";
           }
           units "milliseconds";
        
           status obsolete;
           description
             "The value that is placed in the Reachable Time field in
              the Router Advertisement messages sent by the router.  A
              value of zero means unspecified (by this router).";
         }
         leaf retrans-timer {
           type uint32;
           units "milliseconds";
           status obsolete;
           description
             "The value that is placed in the Retrans Timer field in the
              Router Advertisement messages sent by the router.  A value
              of zero means unspecified (by this router).";
         }
         leaf cur-hop-limit {
           type uint8;
           status obsolete;
           description
             "The value that is placed in the Cur Hop Limit field in the
              Router Advertisement messages sent by the router.  A value
              of zero means unspecified (by this router).";
         }
         leaf default-lifetime {
           type uint16 {
             range "0..9000";
           }
           units "seconds";
           status obsolete;
           description
             "The value that is placed in the Router Lifetime field of
              Router Advertisements sent from the interface, in seconds.
              A value of zero indicates that the router is not to be
              used as a default router.";
         }
         container prefix-list {
           status obsolete;
           description
             "A list of prefixes that are placed in Prefix Information
              options in Router Advertisement messages sent from the
              interface.
        
           status obsolete;
           description
             "The value that is placed in the Reachable Time field in
              the Router Advertisement messages sent by the router.  A
              value of zero means unspecified (by this router).";
         }
         leaf retrans-timer {
           type uint32;
           units "milliseconds";
           status obsolete;
           description
             "The value that is placed in the Retrans Timer field in the
              Router Advertisement messages sent by the router.  A value
              of zero means unspecified (by this router).";
         }
         leaf cur-hop-limit {
           type uint8;
           status obsolete;
           description
             "The value that is placed in the Cur Hop Limit field in the
              Router Advertisement messages sent by the router.  A value
              of zero means unspecified (by this router).";
         }
         leaf default-lifetime {
           type uint16 {
             range "0..9000";
           }
           units "seconds";
           status obsolete;
           description
             "The value that is placed in the Router Lifetime field of
              Router Advertisements sent from the interface, in seconds.
              A value of zero indicates that the router is not to be
              used as a default router.";
         }
         container prefix-list {
           status obsolete;
           description
             "A list of prefixes that are placed in Prefix Information
              options in Router Advertisement messages sent from the
              interface.
        
              By default, these are all prefixes that the router
              advertises via routing protocols as being on-link for the
              interface from which the advertisement is sent.";
           list prefix {
             key "prefix-spec";
             status obsolete;
        
              By default, these are all prefixes that the router
              advertises via routing protocols as being on-link for the
              interface from which the advertisement is sent.";
           list prefix {
             key "prefix-spec";
             status obsolete;
        
             description
               "Advertised prefix entry and its parameters.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               status obsolete;
               description
                 "IPv6 address prefix.";
             }
             leaf valid-lifetime {
               type uint32;
               units "seconds";
               status obsolete;
               description
                 "The value that is placed in the Valid Lifetime in the
                  Prefix Information option.  The designated value of
                  all 1's (0xffffffff) represents infinity.
        
             description
               "Advertised prefix entry and its parameters.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               status obsolete;
               description
                 "IPv6 address prefix.";
             }
             leaf valid-lifetime {
               type uint32;
               units "seconds";
               status obsolete;
               description
                 "The value that is placed in the Valid Lifetime in the
                  Prefix Information option.  The designated value of
                  all 1's (0xffffffff) represents infinity.
        
                  An implementation SHOULD keep this value constant in
                  consecutive advertisements, except when it is
                  explicitly changed in configuration.";
             }
             leaf on-link-flag {
               type boolean;
               status obsolete;
               description
                 "The value that is placed in the on-link flag ('L-bit')
                  field in the Prefix Information option.";
             }
             leaf preferred-lifetime {
               type uint32;
               units "seconds";
               status obsolete;
               description
                 "The value that is placed in the Preferred Lifetime in
                  the Prefix Information option, in seconds.  The
                  designated value of all 1's (0xffffffff) represents
                  infinity.
        
                  An implementation SHOULD keep this value constant in
                  consecutive advertisements, except when it is
                  explicitly changed in configuration.";
             }
             leaf on-link-flag {
               type boolean;
               status obsolete;
               description
                 "The value that is placed in the on-link flag ('L-bit')
                  field in the Prefix Information option.";
             }
             leaf preferred-lifetime {
               type uint32;
               units "seconds";
               status obsolete;
               description
                 "The value that is placed in the Preferred Lifetime in
                  the Prefix Information option, in seconds.  The
                  designated value of all 1's (0xffffffff) represents
                  infinity.
        
                  An implementation SHOULD keep this value constant in
                  consecutive advertisements, except when it is
                  explicitly changed in configuration.";
             }
             leaf autonomous-flag {
               type boolean;
               status obsolete;
               description
                 "The value that is placed in the Autonomous Flag field
                  in the Prefix Information option.";
        
                  An implementation SHOULD keep this value constant in
                  consecutive advertisements, except when it is
                  explicitly changed in configuration.";
             }
             leaf autonomous-flag {
               type boolean;
               status obsolete;
               description
                 "The value that is placed in the Autonomous Flag field
                  in the Prefix Information option.";
        
             }
           }
         }
       }
     }
   }
        
             }
           }
         }
       }
     }
   }
        

<CODE ENDS>

<代码结束>

10. IANA Considerations
10. IANA考虑

[RFC8022] registered the following namespace URIs in the "IETF XML Registry" [RFC3688]. IANA has updated the references to refer to this document.

[RFC8022]在“IETF XML注册表”[RFC3688]中注册了以下命名空间URI。IANA已更新参考文献以参考本文件。

URI: urn:ietf:params:xml:ns:yang:ietf-routing Registrant Contact: The IESG. XML: N/A; the requested URI is an XML namespace.

URI:urn:ietf:params:xml:ns:yang:ietf路由注册人联系人:IESG。XML:不适用;请求的URI是一个XML命名空间。

URI: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing Registrant Contact: The IESG. XML: N/A; the requested URI is an XML namespace.

URI:urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing注册人联系人:IESG。XML:不适用;请求的URI是一个XML命名空间。

URI: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing Registrant Contact: The IESG. XML: N/A; the requested URI is an XML namespace.

URI:urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing注册人联系人:IESG。XML:不适用;请求的URI是一个XML命名空间。

[RFC8022] registered the following YANG modules in the "YANG Module Names" registry [RFC6020]. IANA has updated (1) the modules per this document and (2) the references to refer to this document.

[RFC8022]在“YANG模块名称”注册表[RFC6020]中注册了以下YANG模块。IANA已更新了(1)本文件规定的模块和(2)参考本文件的参考文件。

   Name:      ietf-routing
   Namespace: urn:ietf:params:xml:ns:yang:ietf-routing
   Prefix:    rt
   Reference: RFC 8349
        
   Name:      ietf-routing
   Namespace: urn:ietf:params:xml:ns:yang:ietf-routing
   Prefix:    rt
   Reference: RFC 8349
        
   Name:      ietf-ipv4-unicast-routing
   Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing
   Prefix:    v4ur
   Reference: RFC 8349
        
   Name:      ietf-ipv4-unicast-routing
   Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing
   Prefix:    v4ur
   Reference: RFC 8349
        
   Name:      ietf-ipv6-unicast-routing
   Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing
   Prefix:    v6ur
   Reference: RFC 8349
        
   Name:      ietf-ipv6-unicast-routing
   Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing
   Prefix:    v6ur
   Reference: RFC 8349
        

This document registers the following YANG submodule in the "YANG Module Names" registry [RFC6020]:

本文件在“YANG模块名称”注册表[RFC6020]中注册以下YANG子模块:

Name: ietf-ipv6-router-advertisements Module: ietf-ipv6-unicast-routing Reference: RFC 8349

名称:ietf-ipv6-router-Advertisions模块:ietf-ipv6-unicast-routing参考:RFC 8349

11. Security Considerations
11. 安全考虑

The YANG modules specified in this document define a schema for data that is designed to be accessed via network management protocols such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS [RFC5246].

本文档中指定的模块为数据定义了一个模式,该模式旨在通过网络管理协议(如NETCONF[RFC6241]或restcconf[RFC8040])进行访问。最低的NETCONF层是安全传输层,实现安全传输的强制要求是安全Shell(SSH)[RFC6242]。最低的RESTCONF层是HTTPS,实现安全传输的强制层是TLS[RFC5246]。

The NETCONF access control model [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.

NETCONF访问控制模型[RFC8341]提供了将特定NETCONF或RESTCONF用户的访问限制为所有可用NETCONF或RESTCONF协议操作和内容的预配置子集的方法。

There are a number of data nodes defined in these YANG modules that are writable/creatable/deletable (i.e., config true, which is the default). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations. These are the subtrees and data nodes and their sensitivity/vulnerability:

这些模块中定义了许多数据节点,这些节点是可写/可创建/可删除的(即config true,这是默认值)。在某些网络环境中,这些数据节点可能被视为敏感或易受攻击。对这些数据节点的写入操作(如编辑配置)如果没有适当的保护,可能会对网络操作产生负面影响。这些是子树和数据节点及其敏感性/漏洞:

/routing/control-plane-protocols/control-plane-protocol: This list specifies the control-plane protocols configured on a device.

/路由/控制平面协议/控制平面协议:此列表指定设备上配置的控制平面协议。

/routing/ribs/rib: This list specifies the RIBs configured for the device.

/布线/加强筋/加强筋:此列表指定为设备配置的加强筋。

Some of the readable data nodes in these YANG modules may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:

在某些网络环境中,这些模块中的一些可读数据节点可能被视为敏感或易受攻击。因此,控制对这些数据节点的读取访问(例如,通过get、get config或通知)非常重要。这些是子树和数据节点及其敏感性/漏洞:

/routing/control-plane-protocols/control-plane-protocol: This list specifies the control-plane protocols configured on a device. Refer to the control-plane models for a list of sensitive information.

/路由/控制平面协议/控制平面协议:此列表指定设备上配置的控制平面协议。有关敏感信息的列表,请参阅控制平面模型。

/routing/ribs/rib: This list specifies the RIBs and their contents for the device. Access to this information may disclose the network topology and/or other information.

/布线/加强筋/加强筋:此列表指定设备的加强筋及其内容。访问此信息可能会泄露网络拓扑和/或其他信息。

Some of the RPC operations in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control access to these operations. These are the operations and their sensitivity/vulnerability:

在某些网络环境中,此模块中的某些RPC操作可能被视为敏感或易受攻击。因此,控制对这些操作的访问非常重要。这些是操作及其敏感性/脆弱性:

/routing/ribs/rib/active-route: The output from this RPC operation returns the route that is being used for a specified destination. Access to this information may disclose the network topology or relationship (e.g., client/provider). Additionally, the routes used by a network device may be used to mount a subsequent attack on traffic traversing the network device.

/路由/肋骨/肋骨/活动路由:此RPC操作的输出返回用于指定目的地的路由。访问此信息可能会泄露网络拓扑或关系(例如,客户/提供商)。此外,网络设备使用的路由可用于对通过网络设备的流量发起后续攻击。

12. References
12. 工具书类
12.1. Normative References
12.1. 规范性引用文件

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,DOI 10.17487/RFC2119,1997年3月<https://www.rfc-editor.org/info/rfc2119>.

[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.

[RFC3688]Mealling,M.,“IETF XML注册表”,BCP 81,RFC 3688,DOI 10.17487/RFC3688,2004年1月<https://www.rfc-editor.org/info/rfc3688>.

[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, DOI 10.17487/RFC4861, September 2007, <https://www.rfc-editor.org/info/rfc4861>.

[RFC4861]Narten,T.,Nordmark,E.,Simpson,W.,和H.Soliman,“IP版本6(IPv6)的邻居发现”,RFC 4861,DOI 10.17487/RFC48612007年9月<https://www.rfc-editor.org/info/rfc4861>.

[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/RFC5246, August 2008, <https://www.rfc-editor.org/info/rfc5246>.

[RFC5246]Dierks,T.和E.Rescorla,“传输层安全(TLS)协议版本1.2”,RFC 5246,DOI 10.17487/RFC5246,2008年8月<https://www.rfc-editor.org/info/rfc5246>.

[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.

[RFC6020]Bjorklund,M.,Ed.“YANG-网络配置协议的数据建模语言(NETCONF)”,RFC 6020,DOI 10.17487/RFC6020,2010年10月<https://www.rfc-editor.org/info/rfc6020>.

[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, <https://www.rfc-editor.org/info/rfc6241>.

[RFC6241]Enns,R.,Ed.,Bjorklund,M.,Ed.,Schoenwaeld,J.,Ed.,和A.Bierman,Ed.,“网络配置协议(NETCONF)”,RFC 6241,DOI 10.17487/RFC6241,2011年6月<https://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, <https://www.rfc-editor.org/info/rfc6242>.

[RFC6242]Wasserman,M.“在安全外壳上使用NETCONF协议(SSH)”,RFC 6242,DOI 10.17487/RFC6242,2011年6月<https://www.rfc-editor.org/info/rfc6242>.

[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.

[RFC6991]Schoenwaeld,J.,Ed.,“常见杨数据类型”,RFC 6991,DOI 10.17487/RFC69911913年7月<https://www.rfc-editor.org/info/rfc6991>.

[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.

[RFC7950]Bjorklund,M.,Ed.“YANG 1.1数据建模语言”,RFC 7950,DOI 10.17487/RFC7950,2016年8月<https://www.rfc-editor.org/info/rfc7950>.

[RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing Management", RFC 8022, DOI 10.17487/RFC8022, November 2016, <https://www.rfc-editor.org/info/rfc8022>.

[RFC8022]Lhotka,L.和A.Lindem,“路由管理的YANG数据模型”,RFC 8022,DOI 10.17487/RFC8022,2016年11月<https://www.rfc-editor.org/info/rfc8022>.

[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, <https://www.rfc-editor.org/info/rfc8040>.

[RFC8040]Bierman,A.,Bjorklund,M.,和K.Watsen,“RESTCONF协议”,RFC 8040,DOI 10.17487/RFC8040,2017年1月<https://www.rfc-editor.org/info/rfc8040>.

[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8174]Leiba,B.,“RFC 2119关键词中大写与小写的歧义”,BCP 14,RFC 8174,DOI 10.17487/RFC8174,2017年5月<https://www.rfc-editor.org/info/rfc8174>.

[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10.17487/RFC8341, March 2018, <https://www.rfc-editor.org/info/rfc8341>.

[RFC8341]Bierman,A.和M.Bjorklund,“网络配置访问控制模型”,STD 91,RFC 8341,DOI 10.17487/RFC8341,2018年3月<https://www.rfc-editor.org/info/rfc8341>.

[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, <https://www.rfc-editor.org/info/rfc8342>.

[RFC8342]Bjorklund,M.,Schoenwaeld,J.,Shafer,P.,Watsen,K.,和R.Wilton,“网络管理数据存储体系结构(NMDA)”,RFC 8342,DOI 10.17487/RFC8342,2018年3月<https://www.rfc-editor.org/info/rfc8342>.

[RFC8343] Bjorklund, M., "A YANG Data Model for Interface Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, <https://www.rfc-editor.org/info/rfc8343>.

[RFC8343]Bjorklund,M.,“用于接口管理的YANG数据模型”,RFC 8343,DOI 10.17487/RFC8343,2018年3月<https://www.rfc-editor.org/info/rfc8343>.

[RFC8344] Bjorklund, M., "A YANG Data Model for IP Management", RFC 8344, DOI 10.17487/RFC8344, March 2018, <https://www.rfc-editor.org/info/rfc8344>.

[RFC8344]Bjorklund,M.,“知识产权管理的杨氏数据模型”,RFC 8344,DOI 10.17487/RFC8344,2018年3月<https://www.rfc-editor.org/info/rfc8344>.

[W3C.REC-xml-20081126] Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", World Wide Web Consortium Recommendation REC-xml-20081126, November 2008, <https://www.w3.org/TR/2008/REC-xml-20081126>.

[W3C.REC-xml-20081126]Bray,T.,Paoli,J.,Sperberg McQueen,M.,Maler,E.,和F.Yergeau,“可扩展标记语言(xml)1.0(第五版)”,万维网联盟建议REC-xml-20081126,2008年11月<https://www.w3.org/TR/2008/REC-xml-20081126>.

12.2. Informative References
12.2. 资料性引用

[RFC7224] Bjorklund, M., "IANA Interface Type YANG Module", RFC 7224, DOI 10.17487/RFC7224, May 2014, <https://www.rfc-editor.org/info/rfc7224>.

[RFC7224]Bjorklund,M.,“IANA接口类型YANG模块”,RFC 7224,DOI 10.17487/RFC72242014年5月<https://www.rfc-editor.org/info/rfc7224>.

[RFC7895] Bierman, A., Bjorklund, M., and K. Watsen, "YANG Module Library", RFC 7895, DOI 10.17487/RFC7895, June 2016, <https://www.rfc-editor.org/info/rfc7895>.

[RFC7895]Bierman,A.,Bjorklund,M.,和K.Watsen,“阳模块库”,RFC 7895,DOI 10.17487/RFC78952016年6月<https://www.rfc-editor.org/info/rfc7895>.

[RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", RFC 7951, DOI 10.17487/RFC7951, August 2016, <https://www.rfc-editor.org/info/rfc7951>.

[RFC7951]Lhotka,L.,“用YANG建模的数据的JSON编码”,RFC 7951,DOI 10.17487/RFC7951,2016年8月<https://www.rfc-editor.org/info/rfc7951>.

[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, <https://www.rfc-editor.org/info/rfc8340>.

[RFC8340]Bjorklund,M.和L.Berger,编辑,“杨树图”,BCP 215,RFC 8340,DOI 10.17487/RFC8340,2018年3月<https://www.rfc-editor.org/info/rfc8340>.

[YANG-Guidelines] Bierman, A., "Guidelines for Authors and Reviewers of YANG Data Model Documents", Work in Progress, draft-ietf-netmod-rfc6087bis-20, March 2018.

[YANG指南]Bierman,A.,“YANG数据模型文件的作者和评审者指南”,正在进行的工作,草稿-ietf-netmod-rfc6087bis-20,2018年3月。

Appendix A. The Complete Schema Tree
附录A.完整的模式树

This appendix presents the complete tree of the core routing data model. See [RFC8340] for an explanation of the symbols used. The data type of every leaf node is shown near the right end of the corresponding line.

本附录给出了核心路由数据模型的完整树。有关所用符号的说明,请参见[RFC8340]。每个叶节点的数据类型显示在相应行的右端附近。

   module: ietf-routing
     +--rw routing
     |  +--rw router-id?                 yang:dotted-quad
     |  +--ro interfaces
     |  |  +--ro interface*   if:interface-ref
     |  +--rw control-plane-protocols
     |  |  +--rw control-plane-protocol* [type name]
     |  |     +--rw type             identityref
     |  |     +--rw name             string
     |  |     +--rw description?     string
     |  |     +--rw static-routes
     |  |        +--rw v4ur:ipv4
     |  |        |  +--rw v4ur:route* [destination-prefix]
     |  |        |     +--rw v4ur:destination-prefix
     |  |        |     |       inet:ipv4-prefix
     |  |        |     +--rw v4ur:description?          string
     |  |        |     +--rw v4ur:next-hop
     |  |        |        +--rw (v4ur:next-hop-options)
     |  |        |           +--:(v4ur:simple-next-hop)
     |  |        |           |  +--rw v4ur:outgoing-interface?
     |  |        |           |  |       if:interface-ref
     |  |        |           |  +--rw v4ur:next-hop-address?
     |  |        |           |          inet:ipv4-address
     |  |        |           +--:(v4ur:special-next-hop)
     |  |        |           |  +--rw v4ur:special-next-hop?
     |  |        |           |          enumeration
     |  |        |           +--:(v4ur:next-hop-list)
     |  |        |              +--rw v4ur:next-hop-list
     |  |        |                 +--rw v4ur:next-hop* [index]
     |  |        |                    +--rw v4ur:index
     |  |        |                    |       string
     |  |        |                    +--rw v4ur:outgoing-interface?
     |  |        |                    |       if:interface-ref
     |  |        |                    +--rw v4ur:next-hop-address?
     |  |        |                            inet:ipv4-address
     |  |        +--rw v6ur:ipv6
     |  |           +--rw v6ur:route* [destination-prefix]
     |  |              +--rw v6ur:destination-prefix
     |  |              |       inet:ipv6-prefix
     |  |              +--rw v6ur:description?          string
        
   module: ietf-routing
     +--rw routing
     |  +--rw router-id?                 yang:dotted-quad
     |  +--ro interfaces
     |  |  +--ro interface*   if:interface-ref
     |  +--rw control-plane-protocols
     |  |  +--rw control-plane-protocol* [type name]
     |  |     +--rw type             identityref
     |  |     +--rw name             string
     |  |     +--rw description?     string
     |  |     +--rw static-routes
     |  |        +--rw v4ur:ipv4
     |  |        |  +--rw v4ur:route* [destination-prefix]
     |  |        |     +--rw v4ur:destination-prefix
     |  |        |     |       inet:ipv4-prefix
     |  |        |     +--rw v4ur:description?          string
     |  |        |     +--rw v4ur:next-hop
     |  |        |        +--rw (v4ur:next-hop-options)
     |  |        |           +--:(v4ur:simple-next-hop)
     |  |        |           |  +--rw v4ur:outgoing-interface?
     |  |        |           |  |       if:interface-ref
     |  |        |           |  +--rw v4ur:next-hop-address?
     |  |        |           |          inet:ipv4-address
     |  |        |           +--:(v4ur:special-next-hop)
     |  |        |           |  +--rw v4ur:special-next-hop?
     |  |        |           |          enumeration
     |  |        |           +--:(v4ur:next-hop-list)
     |  |        |              +--rw v4ur:next-hop-list
     |  |        |                 +--rw v4ur:next-hop* [index]
     |  |        |                    +--rw v4ur:index
     |  |        |                    |       string
     |  |        |                    +--rw v4ur:outgoing-interface?
     |  |        |                    |       if:interface-ref
     |  |        |                    +--rw v4ur:next-hop-address?
     |  |        |                            inet:ipv4-address
     |  |        +--rw v6ur:ipv6
     |  |           +--rw v6ur:route* [destination-prefix]
     |  |              +--rw v6ur:destination-prefix
     |  |              |       inet:ipv6-prefix
     |  |              +--rw v6ur:description?          string
        
     |  |              +--rw v6ur:next-hop
     |  |                 +--rw (v6ur:next-hop-options)
     |  |                    +--:(v6ur:simple-next-hop)
     |  |                    |  +--rw v6ur:outgoing-interface?
     |  |                    |  |       if:interface-ref
     |  |                    |  +--rw v6ur:next-hop-address?
     |  |                    |          inet:ipv6-address
     |  |                    +--:(v6ur:special-next-hop)
     |  |                    |  +--rw v6ur:special-next-hop?
     |  |                    |          enumeration
     |  |                    +--:(v6ur:next-hop-list)
     |  |                       +--rw v6ur:next-hop-list
     |  |                          +--rw v6ur:next-hop* [index]
     |  |                             +--rw v6ur:index
     |  |                             |       string
     |  |                             +--rw v6ur:outgoing-interface?
     |  |                             |       if:interface-ref
     |  |                             +--rw v6ur:next-hop-address?
     |  |                                     inet:ipv6-address
     |  +--rw ribs
     |     +--rw rib* [name]
     |        +--rw name              string
     |        +--rw address-family    identityref
     |        +--ro default-rib?      boolean {multiple-ribs}?
     |        +--ro routes
     |        |  +--ro route*
     |        |     +--ro route-preference?          route-preference
     |        |     +--ro next-hop
     |        |     |  +--ro (next-hop-options)
     |        |     |     +--:(simple-next-hop)
     |        |     |     |  +--ro outgoing-interface?
     |        |     |     |  |       if:interface-ref
     |        |     |     |  +--ro v4ur:next-hop-address?
     |        |     |     |  |       inet:ipv4-address
     |        |     |     |  +--ro v6ur:next-hop-address?
     |        |     |     |          inet:ipv6-address
     |        |     |     +--:(special-next-hop)
     |        |     |     |  +--ro special-next-hop?        enumeration
     |        |     |     +--:(next-hop-list)
     |        |     |        +--ro next-hop-list
     |        |     |           +--ro next-hop*
     |        |     |              +--ro outgoing-interface?
     |        |     |              |       if:interface-ref
     |        |     |              +--ro v4ur:address?
     |        |     |              |       inet:ipv4-address
     |        |     |              +--ro v6ur:address?
     |        |     |                      inet:ipv6-address
        
     |  |              +--rw v6ur:next-hop
     |  |                 +--rw (v6ur:next-hop-options)
     |  |                    +--:(v6ur:simple-next-hop)
     |  |                    |  +--rw v6ur:outgoing-interface?
     |  |                    |  |       if:interface-ref
     |  |                    |  +--rw v6ur:next-hop-address?
     |  |                    |          inet:ipv6-address
     |  |                    +--:(v6ur:special-next-hop)
     |  |                    |  +--rw v6ur:special-next-hop?
     |  |                    |          enumeration
     |  |                    +--:(v6ur:next-hop-list)
     |  |                       +--rw v6ur:next-hop-list
     |  |                          +--rw v6ur:next-hop* [index]
     |  |                             +--rw v6ur:index
     |  |                             |       string
     |  |                             +--rw v6ur:outgoing-interface?
     |  |                             |       if:interface-ref
     |  |                             +--rw v6ur:next-hop-address?
     |  |                                     inet:ipv6-address
     |  +--rw ribs
     |     +--rw rib* [name]
     |        +--rw name              string
     |        +--rw address-family    identityref
     |        +--ro default-rib?      boolean {multiple-ribs}?
     |        +--ro routes
     |        |  +--ro route*
     |        |     +--ro route-preference?          route-preference
     |        |     +--ro next-hop
     |        |     |  +--ro (next-hop-options)
     |        |     |     +--:(simple-next-hop)
     |        |     |     |  +--ro outgoing-interface?
     |        |     |     |  |       if:interface-ref
     |        |     |     |  +--ro v4ur:next-hop-address?
     |        |     |     |  |       inet:ipv4-address
     |        |     |     |  +--ro v6ur:next-hop-address?
     |        |     |     |          inet:ipv6-address
     |        |     |     +--:(special-next-hop)
     |        |     |     |  +--ro special-next-hop?        enumeration
     |        |     |     +--:(next-hop-list)
     |        |     |        +--ro next-hop-list
     |        |     |           +--ro next-hop*
     |        |     |              +--ro outgoing-interface?
     |        |     |              |       if:interface-ref
     |        |     |              +--ro v4ur:address?
     |        |     |              |       inet:ipv4-address
     |        |     |              +--ro v6ur:address?
     |        |     |                      inet:ipv6-address
        
     |        |     +--ro source-protocol            identityref
     |        |     +--ro active?                    empty
     |        |     +--ro last-updated?              yang:date-and-time
     |        |     +--ro v4ur:destination-prefix?   inet:ipv4-prefix
     |        |     +--ro v6ur:destination-prefix?   inet:ipv6-prefix
     |        +---x active-route
     |        |  +---w input
     |        |  |  +---w v4ur:destination-address?   inet:ipv4-address
     |        |  |  +---w v6ur:destination-address?   inet:ipv6-address
     |        |  +--ro output
     |        |     +--ro route
     |        |        +--ro next-hop
     |        |        |  +--ro (next-hop-options)
     |        |        |     +--:(simple-next-hop)
     |        |        |     |  +--ro outgoing-interface?
     |        |        |     |  |       if:interface-ref
     |        |        |     |  +--ro v4ur:next-hop-address?
     |        |        |     |  |       inet:ipv4-address
     |        |        |     |  +--ro v6ur:next-hop-address?
     |        |        |     |          inet:ipv6-address
     |        |        |     +--:(special-next-hop)
     |        |        |     |  +--ro special-next-hop?
     |        |        |     |          enumeration
     |        |        |     +--:(next-hop-list)
     |        |        |        +--ro next-hop-list
     |        |        |           +--ro next-hop*
     |        |        |              +--ro outgoing-interface?
     |        |        |              |       if:interface-ref
     |        |        |              +--ro v4ur:next-hop-address?
     |        |        |              |       inet:ipv4-address
     |        |        |              +--ro v6ur:next-hop-address?
     |        |        |                      inet:ipv6-address
     |        |        +--ro source-protocol            identityref
     |        |        +--ro active?                    empty
     |        |        +--ro last-updated?
     |        |        |       yang:date-and-time
     |        |        +--ro v4ur:destination-prefix?
     |        |        |       inet:ipv4-prefix
     |        |        +--ro v6ur:destination-prefix?
     |        |                inet:ipv6-prefix
     |        +--rw description?      string
     o--ro routing-state
        o--ro router-id?                 yang:dotted-quad
        o--ro interfaces
        |  o--ro interface*   if:interface-state-ref
        
     |        |     +--ro source-protocol            identityref
     |        |     +--ro active?                    empty
     |        |     +--ro last-updated?              yang:date-and-time
     |        |     +--ro v4ur:destination-prefix?   inet:ipv4-prefix
     |        |     +--ro v6ur:destination-prefix?   inet:ipv6-prefix
     |        +---x active-route
     |        |  +---w input
     |        |  |  +---w v4ur:destination-address?   inet:ipv4-address
     |        |  |  +---w v6ur:destination-address?   inet:ipv6-address
     |        |  +--ro output
     |        |     +--ro route
     |        |        +--ro next-hop
     |        |        |  +--ro (next-hop-options)
     |        |        |     +--:(simple-next-hop)
     |        |        |     |  +--ro outgoing-interface?
     |        |        |     |  |       if:interface-ref
     |        |        |     |  +--ro v4ur:next-hop-address?
     |        |        |     |  |       inet:ipv4-address
     |        |        |     |  +--ro v6ur:next-hop-address?
     |        |        |     |          inet:ipv6-address
     |        |        |     +--:(special-next-hop)
     |        |        |     |  +--ro special-next-hop?
     |        |        |     |          enumeration
     |        |        |     +--:(next-hop-list)
     |        |        |        +--ro next-hop-list
     |        |        |           +--ro next-hop*
     |        |        |              +--ro outgoing-interface?
     |        |        |              |       if:interface-ref
     |        |        |              +--ro v4ur:next-hop-address?
     |        |        |              |       inet:ipv4-address
     |        |        |              +--ro v6ur:next-hop-address?
     |        |        |                      inet:ipv6-address
     |        |        +--ro source-protocol            identityref
     |        |        +--ro active?                    empty
     |        |        +--ro last-updated?
     |        |        |       yang:date-and-time
     |        |        +--ro v4ur:destination-prefix?
     |        |        |       inet:ipv4-prefix
     |        |        +--ro v6ur:destination-prefix?
     |        |                inet:ipv6-prefix
     |        +--rw description?      string
     o--ro routing-state
        o--ro router-id?                 yang:dotted-quad
        o--ro interfaces
        |  o--ro interface*   if:interface-state-ref
        
        o--ro control-plane-protocols
        |  o--ro control-plane-protocol* [type name]
        |     o--ro type    identityref
        |     o--ro name    string
        o--ro ribs
           o--ro rib* [name]
              o--ro name              string
              o--ro address-family    identityref
              o--ro default-rib?      boolean {multiple-ribs}?
              o--ro routes
              |  o--ro route*
              |     o--ro route-preference?          route-preference
              |     o--ro next-hop
              |     |  o--ro (next-hop-options)
              |     |     o--:(simple-next-hop)
              |     |     |  o--ro outgoing-interface?
              |     |     |  |       if:interface-ref
              |     |     |  o--ro v4ur:next-hop-address?
              |     |     |  |       inet:ipv4-address
              |     |     |  o--ro v6ur:next-hop-address?
              |     |     |          inet:ipv6-address
              |     |     o--:(special-next-hop)
              |     |     |  o--ro special-next-hop?        enumeration
              |     |     o--:(next-hop-list)
              |     |        o--ro next-hop-list
              |     |           o--ro next-hop*
              |     |              o--ro outgoing-interface?
              |     |              |       if:interface-ref
              |     |              o--ro v4ur:address?
              |     |              |       inet:ipv4-address
              |     |              o--ro v6ur:address?
              |     |                      inet:ipv6-address
              |     o--ro source-protocol            identityref
              |     o--ro active?                    empty
              |     o--ro last-updated?              yang:date-and-time
              |     o--ro v4ur:destination-prefix?   inet:ipv4-prefix
              |     o--ro v6ur:destination-prefix?   inet:ipv6-prefix
              o---x active-route
                 o---w input
                 |  o---w v4ur:destination-address?   inet:ipv4-address
                 |  o---w v6ur:destination-address?   inet:ipv6-address
                 o--ro output
        
        o--ro control-plane-protocols
        |  o--ro control-plane-protocol* [type name]
        |     o--ro type    identityref
        |     o--ro name    string
        o--ro ribs
           o--ro rib* [name]
              o--ro name              string
              o--ro address-family    identityref
              o--ro default-rib?      boolean {multiple-ribs}?
              o--ro routes
              |  o--ro route*
              |     o--ro route-preference?          route-preference
              |     o--ro next-hop
              |     |  o--ro (next-hop-options)
              |     |     o--:(simple-next-hop)
              |     |     |  o--ro outgoing-interface?
              |     |     |  |       if:interface-ref
              |     |     |  o--ro v4ur:next-hop-address?
              |     |     |  |       inet:ipv4-address
              |     |     |  o--ro v6ur:next-hop-address?
              |     |     |          inet:ipv6-address
              |     |     o--:(special-next-hop)
              |     |     |  o--ro special-next-hop?        enumeration
              |     |     o--:(next-hop-list)
              |     |        o--ro next-hop-list
              |     |           o--ro next-hop*
              |     |              o--ro outgoing-interface?
              |     |              |       if:interface-ref
              |     |              o--ro v4ur:address?
              |     |              |       inet:ipv4-address
              |     |              o--ro v6ur:address?
              |     |                      inet:ipv6-address
              |     o--ro source-protocol            identityref
              |     o--ro active?                    empty
              |     o--ro last-updated?              yang:date-and-time
              |     o--ro v4ur:destination-prefix?   inet:ipv4-prefix
              |     o--ro v6ur:destination-prefix?   inet:ipv6-prefix
              o---x active-route
                 o---w input
                 |  o---w v4ur:destination-address?   inet:ipv4-address
                 |  o---w v6ur:destination-address?   inet:ipv6-address
                 o--ro output
        
                    o--ro route
                       o--ro next-hop
                       |  o--ro (next-hop-options)
                       |     o--:(simple-next-hop)
                       |     |  o--ro outgoing-interface?
                       |     |  |       if:interface-ref
                       |     |  o--ro v4ur:next-hop-address?
                       |     |  |       inet:ipv4-address
                       |     |  o--ro v6ur:next-hop-address?
                       |     |          inet:ipv6-address
                       |     o--:(special-next-hop)
                       |     |  o--ro special-next-hop?
                       |     |          enumeration
                       |     o--:(next-hop-list)
                       |        o--ro next-hop-list
                       |           o--ro next-hop*
                       |              o--ro outgoing-interface?
                       |              |       if:interface-ref
                       |              o--ro v4ur:next-hop-address?
                       |              |       inet:ipv4-address
                       |              o--ro v6ur:next-hop-address?
                       |                      inet:ipv6-address
                       o--ro source-protocol            identityref
                       o--ro active?                    empty
                       o--ro last-updated?
                       |       yang:date-and-time
                       o--ro v4ur:destination-prefix?
                       |       inet:ipv4-prefix
                       o--ro v6ur:destination-prefix?
                               inet:ipv6-prefix
   module: ietf-ipv6-unicast-routing
     augment /if:interfaces/if:interface/ip:ipv6:
       +--rw ipv6-router-advertisements
          +--rw send-advertisements?    boolean
          +--rw max-rtr-adv-interval?   uint16
          +--rw min-rtr-adv-interval?   uint16
          +--rw managed-flag?           boolean
          +--rw other-config-flag?      boolean
          +--rw link-mtu?               uint32
          +--rw reachable-time?         uint32
          +--rw retrans-timer?          uint32
          +--rw cur-hop-limit?          uint8
          +--rw default-lifetime?       uint16
          +--rw prefix-list
             +--rw prefix* [prefix-spec]
                +--rw prefix-spec           inet:ipv6-prefix
        
                    o--ro route
                       o--ro next-hop
                       |  o--ro (next-hop-options)
                       |     o--:(simple-next-hop)
                       |     |  o--ro outgoing-interface?
                       |     |  |       if:interface-ref
                       |     |  o--ro v4ur:next-hop-address?
                       |     |  |       inet:ipv4-address
                       |     |  o--ro v6ur:next-hop-address?
                       |     |          inet:ipv6-address
                       |     o--:(special-next-hop)
                       |     |  o--ro special-next-hop?
                       |     |          enumeration
                       |     o--:(next-hop-list)
                       |        o--ro next-hop-list
                       |           o--ro next-hop*
                       |              o--ro outgoing-interface?
                       |              |       if:interface-ref
                       |              o--ro v4ur:next-hop-address?
                       |              |       inet:ipv4-address
                       |              o--ro v6ur:next-hop-address?
                       |                      inet:ipv6-address
                       o--ro source-protocol            identityref
                       o--ro active?                    empty
                       o--ro last-updated?
                       |       yang:date-and-time
                       o--ro v4ur:destination-prefix?
                       |       inet:ipv4-prefix
                       o--ro v6ur:destination-prefix?
                               inet:ipv6-prefix
   module: ietf-ipv6-unicast-routing
     augment /if:interfaces/if:interface/ip:ipv6:
       +--rw ipv6-router-advertisements
          +--rw send-advertisements?    boolean
          +--rw max-rtr-adv-interval?   uint16
          +--rw min-rtr-adv-interval?   uint16
          +--rw managed-flag?           boolean
          +--rw other-config-flag?      boolean
          +--rw link-mtu?               uint32
          +--rw reachable-time?         uint32
          +--rw retrans-timer?          uint32
          +--rw cur-hop-limit?          uint8
          +--rw default-lifetime?       uint16
          +--rw prefix-list
             +--rw prefix* [prefix-spec]
                +--rw prefix-spec           inet:ipv6-prefix
        
                +--rw (control-adv-prefixes)?
                   +--:(no-advertise)
                   |  +--rw no-advertise?         empty
                   +--:(advertise)
                      +--rw valid-lifetime?       uint32
                      +--rw on-link-flag?         boolean
                      +--rw preferred-lifetime?   uint32
                      +--rw autonomous-flag?      boolean
     augment /if:interfaces-state/if:interface/ip:ipv6:
       o--ro ipv6-router-advertisements
          o--ro send-advertisements?    boolean
          o--ro max-rtr-adv-interval?   uint16
          o--ro min-rtr-adv-interval?   uint16
          o--ro managed-flag?           boolean
          o--ro other-config-flag?      boolean
          o--ro link-mtu?               uint32
          o--ro reachable-time?         uint32
          o--ro retrans-timer?          uint32
          o--ro cur-hop-limit?          uint8
          o--ro default-lifetime?       uint16
          o--ro prefix-list
             o--ro prefix* [prefix-spec]
                o--ro prefix-spec           inet:ipv6-prefix
                o--ro valid-lifetime?       uint32
                o--ro on-link-flag?         boolean
                o--ro preferred-lifetime?   uint32
                o--ro autonomous-flag?      boolean
        
                +--rw (control-adv-prefixes)?
                   +--:(no-advertise)
                   |  +--rw no-advertise?         empty
                   +--:(advertise)
                      +--rw valid-lifetime?       uint32
                      +--rw on-link-flag?         boolean
                      +--rw preferred-lifetime?   uint32
                      +--rw autonomous-flag?      boolean
     augment /if:interfaces-state/if:interface/ip:ipv6:
       o--ro ipv6-router-advertisements
          o--ro send-advertisements?    boolean
          o--ro max-rtr-adv-interval?   uint16
          o--ro min-rtr-adv-interval?   uint16
          o--ro managed-flag?           boolean
          o--ro other-config-flag?      boolean
          o--ro link-mtu?               uint32
          o--ro reachable-time?         uint32
          o--ro retrans-timer?          uint32
          o--ro cur-hop-limit?          uint8
          o--ro default-lifetime?       uint16
          o--ro prefix-list
             o--ro prefix* [prefix-spec]
                o--ro prefix-spec           inet:ipv6-prefix
                o--ro valid-lifetime?       uint32
                o--ro on-link-flag?         boolean
                o--ro preferred-lifetime?   uint32
                o--ro autonomous-flag?      boolean
        
Appendix B. Minimum Implementation
附录B.最低限度执行

Some parts and options of the core routing model, such as user-defined RIBs, are intended only for advanced routers. This appendix gives basic non-normative guidelines for implementing a bare minimum of available functions. Such an implementation may be used for hosts or very simple routers.

核心路由模型的某些部分和选项(如用户定义的肋骨)仅适用于高级路由器。本附录给出了实现最低限度可用功能的基本非规范性指南。这种实现可用于主机或非常简单的路由器。

A minimum implementation does not support the "multiple-ribs" feature. This means that a single system-controlled RIB is available for each supported address family -- IPv4, IPv6, or both. These RIBs are also the default RIBs. No user-controlled RIBs are allowed.

最低限度的实现不支持“多肋”功能。这意味着单个系统控制的RIB可用于每个受支持的地址系列——IPv4、IPv6或两者。这些加强筋也是默认的加强筋。不允许用户控制肋骨。

In addition to the mandatory instance of the "direct" pseudo-protocol, a minimum implementation should support configuring instance(s) of the "static" pseudo-protocol.

除了“直接”伪协议的强制实例外,最低限度的实现应支持配置“静态”伪协议的实例。

For hosts that are never intended to act as routers, the ability to turn on sending IPv6 Router Advertisements (Section 5.4) should be removed.

对于从未打算用作路由器的主机,应删除打开发送IPv6路由器播发(第5.4节)的功能。

Platforms with severely constrained resources may use deviations for restricting the data model, e.g., limiting the number of "static" control-plane protocol instances.

资源严重受限的平台可能会使用偏差来限制数据模型,例如,限制“静态”控制平面协议实例的数量。

Appendix C. Example: Adding a New Control-Plane Protocol

附录C.示例:添加新的控制平面协议

This appendix demonstrates how the core routing data model can be extended to support a new control-plane protocol. The YANG module "example-rip" shown below is intended as an illustration rather than a real definition of a data model for the Routing Information Protocol (RIP). For the sake of brevity, this module does not obey all the guidelines specified in [YANG-Guidelines]. See also Section 5.3.2.

本附录演示了如何扩展核心路由数据模型以支持新的控制平面协议。下面显示的模块“示例rip”旨在作为路由信息协议(rip)数据模型的说明,而不是实际定义。为简洁起见,本模块不遵守[指南]中规定的所有指南。另见第5.3.2节。

module example-rip {

模块示例rip{

     yang-version "1.1";
     namespace "http://example.com/rip";
     prefix "rip";
        
     yang-version "1.1";
     namespace "http://example.com/rip";
     prefix "rip";
        
     import ietf-interfaces {
       prefix "if";
     }
        
     import ietf-interfaces {
       prefix "if";
     }
        
     import ietf-routing {
       prefix "rt";
     }
        
     import ietf-routing {
       prefix "rt";
     }
        
     identity rip {
       base rt:routing-protocol;
       description
         "Identity for the Routing Information Protocol (RIP).";
     }
        
     identity rip {
       base rt:routing-protocol;
       description
         "Identity for the Routing Information Protocol (RIP).";
     }
        
     typedef rip-metric {
       type uint8 {
         range "0..16";
       }
     }
        
     typedef rip-metric {
       type uint8 {
         range "0..16";
       }
     }
        
     grouping route-content {
       description
         "This grouping defines RIP-specific route attributes.";
       leaf metric {
         type rip-metric;
       }
       leaf tag {
         type uint16;
         default "0";
         description
           "This leaf may be used to carry additional information,
            e.g., an autonomous system (AS) number.";
       }
     }
        
     grouping route-content {
       description
         "This grouping defines RIP-specific route attributes.";
       leaf metric {
         type rip-metric;
       }
       leaf tag {
         type uint16;
         default "0";
         description
           "This leaf may be used to carry additional information,
            e.g., an autonomous system (AS) number.";
       }
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(rt:source-protocol, 'rip:rip')" {
         description
           "This augment is only valid for a route whose source
            protocol is RIP.";
       }
       description
         "RIP-specific route attributes.";
       uses route-content;
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from-or-self(rt:source-protocol, 'rip:rip')" {
         description
           "This augment is only valid for a route whose source
            protocol is RIP.";
       }
       description
         "RIP-specific route attributes.";
       uses route-content;
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       description
         "RIP-specific route attributes in the output of an
          'active-route' RPC.";
       uses route-content;
     }
        
     augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       description
         "RIP-specific route attributes in the output of an
          'active-route' RPC.";
       uses route-content;
     }
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol" {
       when "derived-from-or-self(rt:type,'rip:rip')" {
         description
           "This augment is only valid for a routing protocol instance
            of type 'rip'.";
       }
       container rip {
         presence
           "RIP configuration";
         description
           "RIP instance configuration.";
         container interfaces {
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol" {
       when "derived-from-or-self(rt:type,'rip:rip')" {
         description
           "This augment is only valid for a routing protocol instance
            of type 'rip'.";
       }
       container rip {
         presence
           "RIP configuration";
         description
           "RIP instance configuration.";
         container interfaces {
        
           description
             "Per-interface RIP configuration.";
           list interface {
             key "name";
             description
               "RIP is enabled on interfaces that have an entry in this
                list, unless 'enabled' is set to 'false' for that
                entry.";
             leaf name {
               type if:interface-ref;
             }
             leaf enabled {
               type boolean;
               default "true";
             }
             leaf metric {
               type rip-metric;
               default "1";
             }
           }
         }
         leaf update-interval {
           type uint8 {
             range "10..60";
           }
           units "seconds";
           default "30";
           description
             "Time interval between periodic updates.";
         }
       }
     }
   }
        
           description
             "Per-interface RIP configuration.";
           list interface {
             key "name";
             description
               "RIP is enabled on interfaces that have an entry in this
                list, unless 'enabled' is set to 'false' for that
                entry.";
             leaf name {
               type if:interface-ref;
             }
             leaf enabled {
               type boolean;
               default "true";
             }
             leaf metric {
               type rip-metric;
               default "1";
             }
           }
         }
         leaf update-interval {
           type uint8 {
             range "10..60";
           }
           units "seconds";
           default "30";
           description
             "Time interval between periodic updates.";
         }
       }
     }
   }
        
Appendix D. Data Tree Example
附录D.数据树示例

This section contains an example of an instance data tree from the operational state, in JSON encoding [RFC7951]. (This example includes "iana-if-type", which is defined in [RFC7224].)

本节包含一个来自操作状态的实例数据树示例,采用JSON编码[RFC7951]。(此示例包括[RFC7224]中定义的“iana if类型”。)

The data conforms to a data model that is defined by the following YANG library specification [RFC7895]:

数据符合以下库规范[RFC7895]定义的数据模型:

    {
      "ietf-yang-library:modules-state": {
        "module-set-id": "c2e1f54169aa7f36e1a6e8d0865d441d3600f9c4",
        "module": [
          {
            "name": "ietf-routing",
            "revision": "2018-03-13",
            "feature": [
              "multiple-ribs",
              "router-id"
            ],
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing",
            "conformance-type": "implement"
          },
          {
            "name": "ietf-ipv4-unicast-routing",
            "revision": "2018-03-13",
            "namespace":
              "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing",
            "conformance-type": "implement"
          },
          {
            "name": "ietf-ipv6-unicast-routing",
            "revision": "2018-03-13",
            "namespace":
              "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing",
            "conformance-type": "implement",
            "submodule": [
              {
                "name": "ietf-ipv6-router-advertisements",
                "revision": "2018-03-13"
              }
            ]
          },
          {
            "name": "ietf-interfaces",
            "revision": "2018-02-20",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces",
            "conformance-type": "implement"
        
    {
      "ietf-yang-library:modules-state": {
        "module-set-id": "c2e1f54169aa7f36e1a6e8d0865d441d3600f9c4",
        "module": [
          {
            "name": "ietf-routing",
            "revision": "2018-03-13",
            "feature": [
              "multiple-ribs",
              "router-id"
            ],
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing",
            "conformance-type": "implement"
          },
          {
            "name": "ietf-ipv4-unicast-routing",
            "revision": "2018-03-13",
            "namespace":
              "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing",
            "conformance-type": "implement"
          },
          {
            "name": "ietf-ipv6-unicast-routing",
            "revision": "2018-03-13",
            "namespace":
              "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing",
            "conformance-type": "implement",
            "submodule": [
              {
                "name": "ietf-ipv6-router-advertisements",
                "revision": "2018-03-13"
              }
            ]
          },
          {
            "name": "ietf-interfaces",
            "revision": "2018-02-20",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces",
            "conformance-type": "implement"
        
          },
          {
            "name": "ietf-inet-types",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types",
            "revision": "2013-07-15",
            "conformance-type": "import"
          },
          {
            "name": "ietf-yang-types",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types",
            "revision": "2013-07-15",
            "conformance-type": "import"
          },
          {
            "name": "iana-if-type",
            "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type",
            "revision": "2014-05-08",
            "conformance-type": "implement"
          },
          {
            "name": "ietf-ip",
            "revision": "2018-02-22",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip",
            "conformance-type": "implement"
          }
        ]
      }
    }
        
          },
          {
            "name": "ietf-inet-types",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types",
            "revision": "2013-07-15",
            "conformance-type": "import"
          },
          {
            "name": "ietf-yang-types",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types",
            "revision": "2013-07-15",
            "conformance-type": "import"
          },
          {
            "name": "iana-if-type",
            "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type",
            "revision": "2014-05-08",
            "conformance-type": "implement"
          },
          {
            "name": "ietf-ip",
            "revision": "2018-02-22",
            "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip",
            "conformance-type": "implement"
          }
        ]
      }
    }
        

A simple network setup as shown in Figure 2 is assumed: router "A" uses static default routes with the "ISP" router as the next hop. IPv6 Router Advertisements are configured only on the "eth1" interface and disabled on the upstream "eth0" interface.

假设一个如图2所示的简单网络设置:路由器“A”使用静态默认路由,“ISP”路由器作为下一跳。IPv6路由器播发仅在“eth1”接口上配置,在上游“eth0”接口上禁用。

                   +-----------------+
                   |                 |
                   |    Router ISP   |
                   |                 |
                   +--------+--------+
                            |2001:db8:0:1::2
                            |192.0.2.2
                            |
                            |
                            |2001:db8:0:1::1
                        eth0|192.0.2.1
                   +--------+--------+
                   |                 |
                   |     Router A    |
                   |                 |
                   +--------+--------+
                        eth1|198.51.100.1
                            |2001:db8:0:2::1
                            |
        
                   +-----------------+
                   |                 |
                   |    Router ISP   |
                   |                 |
                   +--------+--------+
                            |2001:db8:0:1::2
                            |192.0.2.2
                            |
                            |
                            |2001:db8:0:1::1
                        eth0|192.0.2.1
                   +--------+--------+
                   |                 |
                   |     Router A    |
                   |                 |
                   +--------+--------+
                        eth1|198.51.100.1
                            |2001:db8:0:2::1
                            |
        

Figure 2: Example of Network Configuration

图2:网络配置示例

The instance data tree could then be as follows:

实例数据树可以如下所示:

   {
     "ietf-interfaces:interfaces": {
       "interface": [
         {
           "name": "eth0",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Uplink to ISP.",
           "phys-address": "00:0C:42:E5:B1:E9",
           "oper-status": "up",
           "statistics": {
             "discontinuity-time": "2015-10-24T17:11:27+02:00"
           },
           "ietf-ip:ipv4": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "192.0.2.1",
                 "prefix-length": 24
        
   {
     "ietf-interfaces:interfaces": {
       "interface": [
         {
           "name": "eth0",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Uplink to ISP.",
           "phys-address": "00:0C:42:E5:B1:E9",
           "oper-status": "up",
           "statistics": {
             "discontinuity-time": "2015-10-24T17:11:27+02:00"
           },
           "ietf-ip:ipv4": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "192.0.2.1",
                 "prefix-length": 24
        
               }
             ]
           },
           "ietf-ip:ipv6": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "2001:0db8:0:1::1",
                 "prefix-length": 64
               }
             ],
             "autoconf": {
               "create-global-addresses": false
             },
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": false
             }
           }
         },
         {
           "name": "eth1",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Interface to the internal network.",
           "phys-address": "00:0C:42:E5:B1:EA",
           "oper-status": "up",
           "statistics": {
             "discontinuity-time": "2015-10-24T17:11:29+02:00"
           },
           "ietf-ip:ipv4": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "198.51.100.1",
                 "prefix-length": 24
               }
             ]
           },
           "ietf-ip:ipv6": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "2001:0db8:0:2::1",
                 "prefix-length": 64
               }
             ],
        
               }
             ]
           },
           "ietf-ip:ipv6": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "2001:0db8:0:1::1",
                 "prefix-length": 64
               }
             ],
             "autoconf": {
               "create-global-addresses": false
             },
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": false
             }
           }
         },
         {
           "name": "eth1",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Interface to the internal network.",
           "phys-address": "00:0C:42:E5:B1:EA",
           "oper-status": "up",
           "statistics": {
             "discontinuity-time": "2015-10-24T17:11:29+02:00"
           },
           "ietf-ip:ipv4": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "198.51.100.1",
                 "prefix-length": 24
               }
             ]
           },
           "ietf-ip:ipv6": {
             "forwarding": true,
             "mtu": 1500,
             "address": [
               {
                 "ip": "2001:0db8:0:2::1",
                 "prefix-length": 64
               }
             ],
        
             "autoconf": {
               "create-global-addresses": false
             },
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": true,
               "prefix-list": {
                 "prefix": [
                   {
                     "prefix-spec": "2001:db8:0:2::/64"
                   }
                 ]
               }
             }
           }
         }
       ]
     },
        
             "autoconf": {
               "create-global-addresses": false
             },
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": true,
               "prefix-list": {
                 "prefix": [
                   {
                     "prefix-spec": "2001:db8:0:2::/64"
                   }
                 ]
               }
             }
           }
         }
       ]
     },
        
     "ietf-routing:routing": {
       "router-id": "192.0.2.1",
       "control-plane-protocols": {
         "control-plane-protocol": [
           {
             "type": "ietf-routing:static",
             "name": "st0",
             "description":
               "Static routing is used for the internal network.",
             "static-routes": {
               "ietf-ipv4-unicast-routing:ipv4": {
                 "route": [
                   {
                     "destination-prefix": "0.0.0.0/0",
                     "next-hop": {
                       "next-hop-address": "192.0.2.2"
                     }
                   }
                 ]
               },
               "ietf-ipv6-unicast-routing:ipv6": {
                 "route": [
                   {
                     "destination-prefix": "::/0",
                     "next-hop": {
                       "next-hop-address": "2001:db8:0:1::2"
                     }
                   }
                 ]
               }
        
     "ietf-routing:routing": {
       "router-id": "192.0.2.1",
       "control-plane-protocols": {
         "control-plane-protocol": [
           {
             "type": "ietf-routing:static",
             "name": "st0",
             "description":
               "Static routing is used for the internal network.",
             "static-routes": {
               "ietf-ipv4-unicast-routing:ipv4": {
                 "route": [
                   {
                     "destination-prefix": "0.0.0.0/0",
                     "next-hop": {
                       "next-hop-address": "192.0.2.2"
                     }
                   }
                 ]
               },
               "ietf-ipv6-unicast-routing:ipv6": {
                 "route": [
                   {
                     "destination-prefix": "::/0",
                     "next-hop": {
                       "next-hop-address": "2001:db8:0:1::2"
                     }
                   }
                 ]
               }
        
             }
           }
         ]
       },
       "ribs": {
         "rib": [
           {
             "name": "ipv4-master",
             "address-family":
               "ietf-ipv4-unicast-routing:ipv4-unicast",
             "default-rib": true,
             "routes": {
               "route": [
                 {
                   "ietf-ipv4-unicast-routing:destination-prefix":
                     "192.0.2.1/24",
                   "next-hop": {
                     "outgoing-interface": "eth0"
                   },
                   "route-preference": 0,
                   "source-protocol": "ietf-routing:direct",
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv4-unicast-routing:destination-prefix":
                     "198.51.100.0/24",
                   "next-hop": {
                     "outgoing-interface": "eth1"
                   },
                   "source-protocol": "ietf-routing:direct",
                   "route-preference": 0,
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv4-unicast-routing:destination-prefix":
                     "0.0.0.0/0",
                   "source-protocol": "ietf-routing:static",
                   "route-preference": 5,
                   "next-hop": {
                     "ietf-ipv4-unicast-routing:next-hop-address":
                       "192.0.2.2"
                   },
                   "last-updated": "2015-10-24T18:02:45+02:00"
                 }
               ]
             }
           },
           {
        
             }
           }
         ]
       },
       "ribs": {
         "rib": [
           {
             "name": "ipv4-master",
             "address-family":
               "ietf-ipv4-unicast-routing:ipv4-unicast",
             "default-rib": true,
             "routes": {
               "route": [
                 {
                   "ietf-ipv4-unicast-routing:destination-prefix":
                     "192.0.2.1/24",
                   "next-hop": {
                     "outgoing-interface": "eth0"
                   },
                   "route-preference": 0,
                   "source-protocol": "ietf-routing:direct",
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv4-unicast-routing:destination-prefix":
                     "198.51.100.0/24",
                   "next-hop": {
                     "outgoing-interface": "eth1"
                   },
                   "source-protocol": "ietf-routing:direct",
                   "route-preference": 0,
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv4-unicast-routing:destination-prefix":
                     "0.0.0.0/0",
                   "source-protocol": "ietf-routing:static",
                   "route-preference": 5,
                   "next-hop": {
                     "ietf-ipv4-unicast-routing:next-hop-address":
                       "192.0.2.2"
                   },
                   "last-updated": "2015-10-24T18:02:45+02:00"
                 }
               ]
             }
           },
           {
        
             "name": "ipv6-master",
             "address-family":
               "ietf-ipv6-unicast-routing:ipv6-unicast",
             "default-rib": true,
             "routes": {
               "route": [
                 {
                   "ietf-ipv6-unicast-routing:destination-prefix":
                     "2001:db8:0:1::/64",
                   "next-hop": {
                     "outgoing-interface": "eth0"
                   },
                   "source-protocol": "ietf-routing:direct",
                   "route-preference": 0,
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv6-unicast-routing:destination-prefix":
                     "2001:db8:0:2::/64",
                   "next-hop": {
                     "outgoing-interface": "eth1"
                   },
                   "source-protocol": "ietf-routing:direct",
                   "route-preference": 0,
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv6-unicast-routing:destination-prefix":
                     "::/0",
                   "next-hop": {
                     "ietf-ipv6-unicast-routing:next-hop-address":
                       "2001:db8:0:1::2"
                   },
                   "source-protocol": "ietf-routing:static",
                   "route-preference": 5,
                   "last-updated": "2015-10-24T18:02:45+02:00"
                 }
               ]
             }
           }
         ]
       }
     }
   }
        
             "name": "ipv6-master",
             "address-family":
               "ietf-ipv6-unicast-routing:ipv6-unicast",
             "default-rib": true,
             "routes": {
               "route": [
                 {
                   "ietf-ipv6-unicast-routing:destination-prefix":
                     "2001:db8:0:1::/64",
                   "next-hop": {
                     "outgoing-interface": "eth0"
                   },
                   "source-protocol": "ietf-routing:direct",
                   "route-preference": 0,
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv6-unicast-routing:destination-prefix":
                     "2001:db8:0:2::/64",
                   "next-hop": {
                     "outgoing-interface": "eth1"
                   },
                   "source-protocol": "ietf-routing:direct",
                   "route-preference": 0,
                   "last-updated": "2015-10-24T17:11:27+02:00"
                 },
                 {
                   "ietf-ipv6-unicast-routing:destination-prefix":
                     "::/0",
                   "next-hop": {
                     "ietf-ipv6-unicast-routing:next-hop-address":
                       "2001:db8:0:1::2"
                   },
                   "source-protocol": "ietf-routing:static",
                   "route-preference": 5,
                   "last-updated": "2015-10-24T18:02:45+02:00"
                 }
               ]
             }
           }
         ]
       }
     }
   }
        
Appendix E. NETCONF Get Data Reply Example
附录E.NETCONF获取数据回复示例

This section gives an example of an XML [W3C.REC-xml-20081126] reply to the NETCONF <get-data> request for <operational> for a device that implements the example data models above.

本节给出了一个XML[W3C.REC-XML-20081126]对实现上述示例数据模型的设备的NETCONF<get data>请求的回复示例。

   <rpc-reply
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    message-id="101">
    <data>
      <routing
        xmlns="urn:ietf:params:xml:ns:yang:ietf-routing"
        xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin">
        
   <rpc-reply
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    message-id="101">
    <data>
      <routing
        xmlns="urn:ietf:params:xml:ns:yang:ietf-routing"
        xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin">
        
        <router-id or:origin="or:intended">192.0.2.1</router-id>
        <control-plane-protocols or:origin="or:intended">
          <control-plane-protocol>
            <type>ietf-routing:static</type>
            <name>static-routing-protocol</name>
            <static-routes>
              <ietf-ipv4-unicast-routing:ipv4>
                <route>
                  <destination-prefix>0.0.0.0/0</destination-prefix>
                  <next-hop>
                    <next-hop-address>192.0.2.2</next-hop-address>
                  </next-hop>
                </route>
              </ietf-ipv4-unicast-routing:ipv4>
              <ietf-ipv6-unicast-routing:ipv6>
                <route>
                  <destination-prefix>::/0</destination-prefix>
                  <next-hop>
                    <next-hop-address>2001:db8:0:1::2</next-hop-address>
                  </next-hop>
                </route>
              </ietf-ipv6-unicast-routing:ipv6>
            </static-routes>
          </control-plane-protocol>
        </control-plane-protocols>
        
        <router-id or:origin="or:intended">192.0.2.1</router-id>
        <control-plane-protocols or:origin="or:intended">
          <control-plane-protocol>
            <type>ietf-routing:static</type>
            <name>static-routing-protocol</name>
            <static-routes>
              <ietf-ipv4-unicast-routing:ipv4>
                <route>
                  <destination-prefix>0.0.0.0/0</destination-prefix>
                  <next-hop>
                    <next-hop-address>192.0.2.2</next-hop-address>
                  </next-hop>
                </route>
              </ietf-ipv4-unicast-routing:ipv4>
              <ietf-ipv6-unicast-routing:ipv6>
                <route>
                  <destination-prefix>::/0</destination-prefix>
                  <next-hop>
                    <next-hop-address>2001:db8:0:1::2</next-hop-address>
                  </next-hop>
                </route>
              </ietf-ipv6-unicast-routing:ipv6>
            </static-routes>
          </control-plane-protocol>
        </control-plane-protocols>
        
        <ribs>
          <rib or:origin="or:intended">
            <name>ipv4-master</name>
            <address-family>
              ietf-ipv4-unicast-routing:ipv4-unicast
            </address-family>
            <default-rib>true</default-rib>
            <routes>
        
        <ribs>
          <rib or:origin="or:intended">
            <name>ipv4-master</name>
            <address-family>
              ietf-ipv4-unicast-routing:ipv4-unicast
            </address-family>
            <default-rib>true</default-rib>
            <routes>
        
              <route>
                <ietf-ipv4-unicast-routing:destination-prefix>
                  192.0.2.1/24
                </ietf-ipv4-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth0</outgoing-interface>
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv4-unicast-routing:destination-prefix>
                  198.51.100.0/24
                </ietf-ipv4-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth1</outgoing-interface>
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv4-unicast-routing:destination-prefix>0.0.0.0/0
                </ietf-ipv4-unicast-routing:destination-prefix>
                <next-hop>
                  <ietf-ipv4-unicast-routing:next-hop-address>192.0.2.2
                  </ietf-ipv4-unicast-routing:next-hop-address>
                </next-hop>
                <route-preference>5</route-preference>
                <source-protocol>ietf-routing:static</source-protocol>
                <last-updated>2015-10-24T18:02:45+02:00</last-updated>
              </route>
            </routes>
          </rib>
          <rib or:origin="or:intended">
            <name>ipv6-master</name>
            <address-family>
              ietf-ipv6-unicast-routing:ipv6-unicast
            </address-family>
            <default-rib>true</default-rib>
            <routes>
              <route>
                <ietf-ipv6-unicast-routing:destination-prefix>
                  2001:db8:0:1::/64
                </ietf-ipv6-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth0</outgoing-interface>
        
              <route>
                <ietf-ipv4-unicast-routing:destination-prefix>
                  192.0.2.1/24
                </ietf-ipv4-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth0</outgoing-interface>
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv4-unicast-routing:destination-prefix>
                  198.51.100.0/24
                </ietf-ipv4-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth1</outgoing-interface>
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv4-unicast-routing:destination-prefix>0.0.0.0/0
                </ietf-ipv4-unicast-routing:destination-prefix>
                <next-hop>
                  <ietf-ipv4-unicast-routing:next-hop-address>192.0.2.2
                  </ietf-ipv4-unicast-routing:next-hop-address>
                </next-hop>
                <route-preference>5</route-preference>
                <source-protocol>ietf-routing:static</source-protocol>
                <last-updated>2015-10-24T18:02:45+02:00</last-updated>
              </route>
            </routes>
          </rib>
          <rib or:origin="or:intended">
            <name>ipv6-master</name>
            <address-family>
              ietf-ipv6-unicast-routing:ipv6-unicast
            </address-family>
            <default-rib>true</default-rib>
            <routes>
              <route>
                <ietf-ipv6-unicast-routing:destination-prefix>
                  2001:db8:0:1::/64
                </ietf-ipv6-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth0</outgoing-interface>
        
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv6-unicast-routing:destination-prefix>
                  2001:db8:0:2::/64
                </ietf-ipv6-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth1</outgoing-interface>
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv6-unicast-routing:destination-prefix>::/0
                </ietf-ipv6-unicast-routing:destination-prefix>
                <next-hop>
                  <ietf-ipv6-unicast-routing:next-hop-address>
                    2001:db8:0:1::2
                  </ietf-ipv6-unicast-routing:next-hop-address>
                </next-hop>
                <route-preference>5</route-preference>
                <source-protocol>ietf-routing:static</source-protocol>
                <last-updated>2015-10-24T18:02:45+02:00</last-updated>
              </route>
            </routes>
          </rib>
        </ribs>
      </routing>
    </data>
   </rpc-reply>
        
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv6-unicast-routing:destination-prefix>
                  2001:db8:0:2::/64
                </ietf-ipv6-unicast-routing:destination-prefix>
                <next-hop>
                  <outgoing-interface>eth1</outgoing-interface>
                </next-hop>
                <route-preference>0</route-preference>
                <source-protocol>ietf-routing:direct</source-protocol>
                <last-updated>2015-10-24T17:11:27+02:00</last-updated>
              </route>
              <route>
                <ietf-ipv6-unicast-routing:destination-prefix>::/0
                </ietf-ipv6-unicast-routing:destination-prefix>
                <next-hop>
                  <ietf-ipv6-unicast-routing:next-hop-address>
                    2001:db8:0:1::2
                  </ietf-ipv6-unicast-routing:next-hop-address>
                </next-hop>
                <route-preference>5</route-preference>
                <source-protocol>ietf-routing:static</source-protocol>
                <last-updated>2015-10-24T18:02:45+02:00</last-updated>
              </route>
            </routes>
          </rib>
        </ribs>
      </routing>
    </data>
   </rpc-reply>
        

Acknowledgments

致谢

The authors wish to thank Nitin Bahadur, Martin Bjorklund, Dean Bogdanovic, Joe Clarke, Francis Dupont, Jeff Haas, Joel Halpern, Wes Hardaker, Jia He, Sriganesh Kini, Suresh Krishnan, David Lamparter, Xiang Li, Stephane Litkowski, Andrew McGregor, Jan Medved, Thomas Morin, Tom Petch, Bruno Rijsman, Juergen Schoenwaelder, Phil Shafer, Dave Thaler, Vladimir Vassilev, Rob Wilton, Yi Yang, Derek Man-Kit Yeung, and Jeffrey Zhang for their helpful comments and suggestions.

作者希望感谢尼廷·巴哈杜尔、马丁·比约克隆德、迪安·博格达诺维奇、乔·克拉克、弗朗西斯·杜邦、杰夫·哈斯、乔尔·哈尔佩恩、韦斯·哈达克、贾赫、斯里加内什·基尼、苏雷什·克里希南、大卫·兰帕特、向丽、斯蒂芬·利特考斯基、安德鲁·麦格雷戈、简·梅德维德、托马斯·莫林、汤姆·佩奇、布鲁诺·里斯曼、于尔根·舍恩瓦埃尔德、菲尔·沙弗、戴夫·泰勒、,Vladimir Vassilev、Rob Wilton、杨毅、杨文杰和张杰弗里感谢他们的有益评论和建议。

Authors' Addresses

作者地址

Ladislav Lhotka CZ.NIC

拉迪斯拉夫·洛特卡CZ.NIC

   Email: lhotka@nic.cz
        
   Email: lhotka@nic.cz
        

Acee Lindem Cisco Systems

思科系统公司

   Email: acee@cisco.com
        
   Email: acee@cisco.com
        

Yingzhen Qu Huawei 2330 Central Expressway Santa Clara, CA 95050 United States of America

美国加利福尼亚州圣克拉拉市英镇区华为2330中央高速公路95050

   Email: yingzhen.qu@huawei.com
        
   Email: yingzhen.qu@huawei.com