Internet Engineering Task Force (IETF)                         L. Lhotka
Request for Comments: 8022                                        CZ.NIC
Category: Standards Track                                      A. Lindem
ISSN: 2070-1721                                            Cisco Systems
                                                           November 2016
        
Internet Engineering Task Force (IETF)                         L. Lhotka
Request for Comments: 8022                                        CZ.NIC
Category: Standards Track                                      A. Lindem
ISSN: 2070-1721                                            Cisco Systems
                                                           November 2016
        

A YANG Data Model for Routing Management

一种用于路由管理的YANG数据模型

Abstract

摘要

This document contains a specification of 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)和控制平面协议。

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 http://www.rfc-editor.org/info/rfc8022.

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

Copyright Notice

版权公告

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

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

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://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文件的法律规定的约束(http://trustee.ietf.org/license-info)自本文件出版之日起生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文件中提取的代码组件必须包括信托法律条款第4.e节中所述的简化BSD许可证文本,并提供简化BSD许可证中所述的无担保。

Table of Contents

目录

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Terminology and Notation  . . . . . . . . . . . . . . . . . .   3
     2.1.  Glossary of New Terms . . . . . . . . . . . . . . . . . .   4
     2.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   5
     2.3.  Prefixes in Data Node Names . . . . . . . . . . . . . . .   5
   3.  Objectives  . . . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  The Design of the Core Routing Data Model . . . . . . . . . .   6
     4.1.  System-Controlled and User-Controlled List Entries  . . .   8
   5.  Basic Building Blocks . . . . . . . . . . . . . . . . . . . .   9
     5.1.  Route . . . . . . . . . . . . . . . . . . . . . . . . . .   9
     5.2.  Routing Information Base (RIB)  . . . . . . . . . . . . .   9
     5.3.  Control-Plane Protocol  . . . . . . . . . . . . . . . . .  10
       5.3.1.  Routing Pseudo-Protocols  . . . . . . . . . . . . . .  10
       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"  . . . . . . . . . . . . . . . . . . . .  13
   7.  Routing Management YANG Module  . . . . . . . . . . . . . . .  14
   8.  IPv4 Unicast Routing Management YANG Module . . . . . . . . .  26
   9.  IPv6 Unicast Routing Management YANG Module . . . . . . . . .  32
     9.1.  IPv6 Router Advertisements Submodule  . . . . . . . . . .  37
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  47
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  48
   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  49
     12.1.  Normative References . . . . . . . . . . . . . . . . . .  49
     12.2.  Informative References . . . . . . . . . . . . . . . . .  50
   Appendix A.  The Complete Data Trees  . . . . . . . . . . . . . .  51
     A.1.  Configuration Data  . . . . . . . . . . . . . . . . . . .  51
     A.2.  State Data  . . . . . . . . . . . . . . . . . . . . . . .  52
   Appendix B.  Minimum Implementation . . . . . . . . . . . . . . .  53
   Appendix C.  Example: Adding a New Control-Plane Protocol . . . .  54
   Appendix D.  Data Tree Example  . . . . . . . . . . . . . . . . .  56
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  64
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  64
        
   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Terminology and Notation  . . . . . . . . . . . . . . . . . .   3
     2.1.  Glossary of New Terms . . . . . . . . . . . . . . . . . .   4
     2.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   5
     2.3.  Prefixes in Data Node Names . . . . . . . . . . . . . . .   5
   3.  Objectives  . . . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  The Design of the Core Routing Data Model . . . . . . . . . .   6
     4.1.  System-Controlled and User-Controlled List Entries  . . .   8
   5.  Basic Building Blocks . . . . . . . . . . . . . . . . . . . .   9
     5.1.  Route . . . . . . . . . . . . . . . . . . . . . . . . . .   9
     5.2.  Routing Information Base (RIB)  . . . . . . . . . . . . .   9
     5.3.  Control-Plane Protocol  . . . . . . . . . . . . . . . . .  10
       5.3.1.  Routing Pseudo-Protocols  . . . . . . . . . . . . . .  10
       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"  . . . . . . . . . . . . . . . . . . . .  13
   7.  Routing Management YANG Module  . . . . . . . . . . . . . . .  14
   8.  IPv4 Unicast Routing Management YANG Module . . . . . . . . .  26
   9.  IPv6 Unicast Routing Management YANG Module . . . . . . . . .  32
     9.1.  IPv6 Router Advertisements Submodule  . . . . . . . . . .  37
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  47
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  48
   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  49
     12.1.  Normative References . . . . . . . . . . . . . . . . . .  49
     12.2.  Informative References . . . . . . . . . . . . . . . . .  50
   Appendix A.  The Complete Data Trees  . . . . . . . . . . . . . .  51
     A.1.  Configuration Data  . . . . . . . . . . . . . . . . . . .  51
     A.2.  State Data  . . . . . . . . . . . . . . . . . . . . . . .  52
   Appendix B.  Minimum Implementation . . . . . . . . . . . . . . .  53
   Appendix C.  Example: Adding a New Control-Plane Protocol . . . .  54
   Appendix D.  Data Tree Example  . . . . . . . . . . . . . . . . .  56
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  64
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  64
        
1. Introduction
1. 介绍

This document contains a specification of 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" [RFC7223] and "ietf-ip" [RFC7277] modules with IPv6 router configuration variables required by [RFC4861].

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

These modules together define the so-called 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工作组开发的众多模块进行扩充。

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

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照[RFC2119]中所述进行解释。

The following terms are defined in [RFC6241]:

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

o client

o 客户

o message

o 消息

o protocol operation

o 协议操作

o server

o 服务器

The following terms are defined in [RFC7950]:

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

o action

o 行动

o augment

o 加强

o configuration data

o 配置数据

o container

o 容器

o container with presence

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 schema tree

o 模式树

o state data

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 of a list in state data ("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 of a list in state data ("config false") that is created and deleted as a direct consequence of certain configuration changes. See Section 4.1 for details.

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

2.2. Tree Diagrams
2.2. 树形图

A simplified graphical representation of the complete data tree is presented in Appendix A, and similar diagrams of its various subtrees appear in the main text.

完整数据树的简化图形表示如附录A所示,其各子树的类似图表见正文。

o Brackets "[" and "]" enclose list keys.

o 括号“[”和“]”包含列表键。

o Curly braces "{" and "}" contain names of optional features that make the corresponding node conditional.

o 大括号“{”和“}”包含使相应节点具有条件的可选功能的名称。

o Abbreviations before data node names: "rw" means configuration (read-write), "ro" state data (read-only), "-x" RPC operations or actions, and "-n" notifications.

o 数据节点名称前的缩写:“rw”表示配置(读写)、“ro”状态数据(只读)、“-x”RPC操作或动作以及“-n”通知。

o Symbols after data node names: "?" means an optional node, "!" a container with presence, and "*" denotes a "list" or "leaf-list".

o 数据节点名称后的符号:“?”表示可选节点,“!”表示存在的容器,“*”表示“列表”或“叶列表”。

o Parentheses enclose choice and case nodes, and case nodes are also marked with a colon (":").

o 括号括住选项和事例节点,事例节点也用冒号(“:”)标记。

o Ellipsis ("...") stands for contents of subtrees that are not shown.

o 省略号(“…”)表示未显示的子树的内容。

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           | [RFC7223] |
            | ip     | ietf-ip                   | [RFC7277] |
            | 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           | [RFC7223] |
            | ip     | ietf-ip                   | [RFC7277] |
            | 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 Routing Information Bases (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 that 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" [RFC7223] and "ietf-ip" [RFC7277] modules with configuration variables for IPv6 router advertisements as required by [RFC4861]. Figures 1 and 2 show abridged views of the configuration and state data hierarchies. See Appendix A for the complete data trees.

核心路由数据模型由三个YANG模块和一个子模块组成。第一个模块“ietf路由”定义路由系统的通用组件。另外两个模块“ietf-ipv4-单播路由”和“ietf-ipv6-单播路由”分别使用ipv4和ipv6单播路由所需的额外数据节点来扩充“ietf路由”模块。“ietf-ipv6-unicast-routing”模块有一个子模块“ietf-ipv6-router-Adadvisions”,该子模块使用[RFC4861]要求的ipv6路由器播发配置变量来扩充“ietf接口”[RFC7223]和“ietf ip”[RFC7277]模块。图1和图2显示了配置和状态数据层次结构的简略视图。完整的数据树见附录A。

   +--rw routing
      +--rw router-id?
      +--rw control-plane-protocols
      |  +--rw control-plane-protocol* [type name]
      |     +--rw type
      |     +--rw name
      |     +--rw description?
      |     +--rw static-routes
      |        +--rw v6ur:ipv6
      |        |     ...
      |        +--rw v4ur:ipv4
      |              ...
      +--rw ribs
         +--rw rib* [name]
            +--rw name
            +--rw address-family?
            +--rw description?
        
   +--rw routing
      +--rw router-id?
      +--rw control-plane-protocols
      |  +--rw control-plane-protocol* [type name]
      |     +--rw type
      |     +--rw name
      |     +--rw description?
      |     +--rw static-routes
      |        +--rw v6ur:ipv6
      |        |     ...
      |        +--rw v4ur:ipv4
      |              ...
      +--rw ribs
         +--rw rib* [name]
            +--rw name
            +--rw address-family?
            +--rw description?
        

Figure 1: Configuration Data Hierarchy

图1:配置数据层次结构

   +--ro routing-state
      +--ro router-id?
      +--ro interfaces
      |  +--ro interface*
      +--ro control-plane-protocols
      |  +--ro control-plane-protocol* [type name]
      |     +--ro type
      |     +--ro name
      +--ro ribs
         +--ro rib* [name]
            +--ro name
            +--ro address-family
            +--ro default-rib?
            +--ro routes
            |  +--ro route*
            |        ...
        
   +--ro routing-state
      +--ro router-id?
      +--ro interfaces
      |  +--ro interface*
      +--ro control-plane-protocols
      |  +--ro control-plane-protocol* [type name]
      |     +--ro type
      |     +--ro name
      +--ro ribs
         +--ro rib* [name]
            +--ro name
            +--ro address-family
            +--ro default-rib?
            +--ro routes
            |  +--ro route*
            |        ...
        

Figure 2: State Data Hierarchy

图2:状态数据层次结构

As can be seen from Figures 1 and 2, 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和图2可以看出,核心路由数据模型引入了路由框架的几个通用组件:路由、包含路由列表的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 so-called system-controlled entry in state data, i.e., inside the "routing-state" container.

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

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

在附录D中可以看到一个示例:“/路由状态/ribs/rib”列表有两个系统控制的条目,分别名为“ipv4主机”和“ipv6主机”。

Additional entries may be created in the configuration by a client, e.g., via the NETCONF protocol. These are so-called user-controlled entries. If the server accepts a configured user-controlled entry, then this entry also appears in the state data version of the list.

客户端可在配置中创建其他条目,例如,通过NETCONF协议。这些是所谓的用户控制条目。如果服务器接受配置的用户控制条目,则此条目也会显示在列表的状态数据版本中。

Corresponding entries in both versions of the list (in state data and configuration) have the same value of the list key.

列表的两个版本(状态数据和配置中)中的相应条目具有相同的列表键值。

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 state data list, the key of the configuration entry has to be set to the same value as the key of the state entry.

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

Deleting a user-controlled entry from the configuration list results in the removal of the corresponding entry in the state data list. In contrast, if a system-controlled entry is deleted from the configuration list, only the extra configuration specified in that entry is removed but the corresponding state data entry remains in the list.

从配置列表中删除用户控制的条目会导致删除状态数据列表中的相应条目。相反,如果从配置列表中删除系统控制的条目,则仅删除该条目中指定的额外配置,但相应的状态数据条目仍保留在列表中。

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

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

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

5.1. Route
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 means a more preferred route.

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

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

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

Routes are primarily state data that appear as entries of 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.

路线主要是以肋骨条目的形式出现的状态数据(第5.2节),但也可以在配置数据中找到,例如,手动配置的静态路线。在后一种情况下,可配置管线属性通常是为肋骨管线定义的属性子集。

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

Every implementation of the core routing data model manages one or more Routing Information Bases (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.

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

In the core routing data model, RIBs are state data represented as entries of the list "/routing-state/ribs/rib". 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 so-called default RIB to which control-plane protocols place their routes by default.

对于每个受支持的地址族,必须将一个RIB标记为所谓的默认RIB,默认情况下,控制平面协议将其路由放置到该RIB。

Simple router implementations that do not advertise the feature "multiple-ribs" 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 a new module has to define the protocol-specific configuration and state data, and it has to integrate it 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 nodes

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

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

and

/rt:routing-state/rt:ribs/rt:rib/rt:output/rt:route,

/rt:布线状态/rt:rib/rt:rib/rt:output/rt:route,

and possibly other places in the configuration, state data, notifications, and input/output parameters of actions or RPC operations.

以及配置中的其他位置、状态数据、通知和操作或RPC操作的输入/输出参数。

o Configuration parameters and/or state data for the new protocol can be defined by augmenting the "control-plane-protocol" data node under both "/routing" and "/routing-state".

o 新协议的配置参数和/或状态数据可以通过在“/路由”和“/路由状态”下增加“控制平面协议”数据节点来定义。

By using a "when" statement, the augmented configuration parameters and state data 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) in Appendix C.

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

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

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

模块“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 [RFC7277] (leaf "ip:forwarding").

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

2. The original 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 [RFC7223]:

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

   /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 [RFC7277]:

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

   /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@2016-11-04.yang"
        
   <CODE BEGINS> file "ietf-routing@2016-11-04.yang"
        

module ietf-routing {

模块ietf路由{

yang-version "1.1";

杨版“1.1”;

     namespace "urn:ietf:params:xml:ns:yang:ietf-routing";
        
     namespace "urn:ietf:params:xml:ns:yang:ietf-routing";
        

prefix "rt";

前缀“rt”;

     import ietf-yang-types {
       prefix "yang";
     }
        
     import ietf-yang-types {
       prefix "yang";
     }
        
     import ietf-interfaces {
       prefix "if";
     }
        
     import ietf-interfaces {
       prefix "if";
     }
        

organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

组织“IETF NETMOD(NETCONF数据建模语言)工作组”;

     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        

description "This YANG module defines essential components for the management of a routing subsystem.

说明“本模块定义了路由子系统管理的基本组件。

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

版权所有(c)2016 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 (http://trustee.ietf.org/license-info).

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

The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in the module text are to be interpreted as described in RFC 2119.

模块文本中的关键词‘必须’、‘不得’、‘必需’、‘应’、‘不应’、‘建议’、‘可能’和‘可选’应按照RFC 2119中的说明进行解释。

        This version of this YANG module is part of RFC 8022;
        see the RFC itself for full legal notices.";
        
        This version of this YANG module is part of RFC 8022;
        see the RFC itself for full legal notices.";
        
     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 */
        
     /* Features */
        

feature multiple-ribs { description "This feature indicates that the server supports user-defined RIBs.

功能多条肋骨{description“此功能表示服务器支持用户定义的肋骨。

          Servers that do not advertise this feature SHOULD provide
          exactly one system-controlled RIB per supported address family
          and make it also the default RIB.  This RIB then appears as an
          entry of the list /routing-state/ribs/rib.";
     }
        
          Servers that do not advertise this feature SHOULD provide
          exactly one system-controlled RIB per supported address family
          and make it also the default RIB.  This RIB then appears as an
          entry of the list /routing-state/ribs/rib.";
     }
        

feature router-id { description "This feature indicates that the server supports configuration of 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 IPv4 address family.";
     }
        
     identity ipv4 {
       base address-family;
       description
         "This identity represents IPv4 address family.";
     }
        
     identity ipv6 {
       base address-family;
       description
         "This identity represents IPv6 address family.";
     }
        
     identity ipv6 {
       base address-family;
       description
         "This identity represents 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
        
     identity routing-protocol {
       base control-plane-protocol;
       description
         "Identity from which Layer 3 routing protocol identities are
        
          derived.";
     }
        
          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 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.";
        
     grouping router-id {
       description
         "This grouping provides 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.";
       }
     }
        
         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.";
           }
           enum receive {
             description
               "The packet will be received by the local system.";
           }
         }
         description
           "Options for special next hops.";
       }
     }
        
     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.";
       }
     }
        
     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 {
        
            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.

description“这种情况表示一个简单的下一跳,由下一跳地址和/或传出接口组成。

              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 of 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 of 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.";
               }
             }
           }
         }
       }
     }
        
                  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.";
               }
             }
           }
         }
       }
     }
        
     grouping next-hop-state-content {
       description
         "Generic parameters of next hops in state data.";
       choice next-hop-options {
         mandatory "true";
         description
           "Options for next hops in state data.
        
     grouping next-hop-state-content {
       description
         "Generic parameters of next hops in state data.";
       choice next-hop-options {
         mandatory "true";
         description
           "Options for next hops in state data.
        
            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-state-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 of 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-state-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 of 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-state-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-state-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
           "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
           "Time stamp 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
           "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
           "Time stamp 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.";
       }
     }
        
     /* State data */
        
     /* State data */
        
     container routing-state {
       config "false";
       description
         "State data of the routing subsystem.";
       uses router-id {
         description
           "Global router ID.
        
     container routing-state {
       config "false";
       description
         "State data of the routing subsystem.";
       uses router-id {
         description
           "Global router ID.
        
            It may be either configured or assigned algorithmically by
            the implementation.";
       }
       container interfaces {
         description
           "Network-layer interfaces used for routing.";
         leaf-list interface {
           type if:interface-state-ref;
        
            It may be either configured or assigned algorithmically by
            the implementation.";
       }
       container interfaces {
         description
           "Network-layer interfaces used for routing.";
         leaf-list interface {
           type if:interface-state-ref;
        
           description
             "Each entry is a reference to the name of a configured
              network-layer interface.";
         }
       }
       container control-plane-protocols {
         description
           "Container for the list of routing protocol instances.";
         list control-plane-protocol {
           key "type name";
           description
             "State data of a control-plane protocol instance.
        
           description
             "Each entry is a reference to the name of a configured
              network-layer interface.";
         }
       }
       container control-plane-protocols {
         description
           "Container for the list of routing protocol instances.";
         list control-plane-protocol {
           key "type name";
           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;
             }
             description
               "Type of the control-plane protocol.";
           }
           leaf name {
             type string;
             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;
             }
             description
               "Type of the control-plane protocol.";
           }
           leaf name {
             type string;
             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 {
         description
           "Container for RIBs.";
         list rib {
           key "name";
           min-elements "1";
           description
             "Each entry represents a RIB identified by the 'name' key.
              All routes in a RIB MUST belong to the same address
              family.
        
                For system-controlled instances this name is persistent,
                i.e., it SHOULD NOT change across reboots.";
           }
         }
       }
       container ribs {
         description
           "Container for RIBs.";
         list rib {
           key "name";
           min-elements "1";
           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 {
        
              An implementation SHOULD provide one system-controlled
              default RIB for each supported address family.";
           leaf name {
        
             type string;
             description
               "The name of the RIB.";
           }
           uses address-family;
           leaf default-rib {
             if-feature "multiple-ribs";
             type boolean;
             default "true";
             description
               "This flag has the value of 'true' if and only if the RIB
                is the default RIB for the given address family.
        
             type string;
             description
               "The name of the RIB.";
           }
           uses address-family;
           leaf default-rib {
             if-feature "multiple-ribs";
             type boolean;
             default "true";
             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 {
             description
               "Current content of the RIB.";
             list route {
               description
                 "A RIB route entry.  This data node MUST be augmented
                  with information specific for 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 means a more preferred route.";
               }
               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 {
             description
               "Current content of the RIB.";
             list route {
               description
                 "A RIB route entry.  This data node MUST be augmented
                  with information specific for 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 means a more preferred route.";
               }
               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;
               }
             }
           }
         }
       }
     }
        
                    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;
               }
             }
           }
         }
       }
     }
        
     /* Configuration Data */
        
     /* Configuration Data */
        
     container routing {
       description
         "Configuration parameters for the routing subsystem.";
       uses router-id {
         if-feature "router-id";
         description
           "Configuration of the global router ID.  Routing protocols
            that use router ID can use this parameter or override it
            with another value.";
       }
       container control-plane-protocols {
         description
           "Configuration of control-plane protocol instances.";
         list control-plane-protocol {
           key "type name";
           description
             "Each entry contains configuration of a control-plane
              protocol instance.";
           leaf type {
             type identityref {
               base control-plane-protocol;
             }
             description
               "Type of the control-plane protocol - an identity derived
        
     container routing {
       description
         "Configuration parameters for the routing subsystem.";
       uses router-id {
         if-feature "router-id";
         description
           "Configuration of the global router ID.  Routing protocols
            that use router ID can use this parameter or override it
            with another value.";
       }
       container control-plane-protocols {
         description
           "Configuration of control-plane protocol instances.";
         list control-plane-protocol {
           key "type name";
           description
             "Each entry contains configuration of 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
               "Configuration of the 'static' pseudo-protocol.
        
                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
               "Configuration of the 'static' pseudo-protocol.
        
                Address-family-specific modules augment this node with
                their lists of routes.";
           }
         }
       }
       container ribs {
         description
           "Configuration of RIBs.";
         list rib {
           key "name";
           description
             "Each entry contains configuration for a RIB identified by
              the 'name' key.
        
                Address-family-specific modules augment this node with
                their lists of routes.";
           }
         }
       }
       container ribs {
         description
           "Configuration of RIBs.";
         list rib {
           key "name";
           description
             "Each entry contains configuration for a RIB identified by
              the 'name' key.
        
              Entries having the same key as a system-controlled entry
              of the list /routing-state/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
              of the list /routing-state/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 state data.

状态数据。

                For user-controlled entries, an arbitrary name can be
                used.";
           }
           uses address-family {
             description
               "Address family of the RIB.
        
                For user-controlled entries, an arbitrary name can be
                used.";
           }
           uses address-family {
             description
               "Address family of the RIB.
        
                It is mandatory for user-controlled RIBs.  For
                system-controlled RIBs it can be omitted; otherwise, it
                must match the address family of the corresponding state
                entry.";
             refine "address-family" {
               mandatory "false";
             }
           }
           leaf description {
             type string;
             description
               "Textual description of the RIB.";
           }
         }
       }
     }
   }
        
                It is mandatory for user-controlled RIBs.  For
                system-controlled RIBs it can be omitted; otherwise, it
                must match the address family of the corresponding state
                entry.";
             refine "address-family" {
               mandatory "false";
             }
           }
           leaf description {
             type string;
             description
               "Textual description of the RIB.";
           }
         }
       }
     }
   }
        

<CODE ENDS>

<代码结束>

8. IPv4 Unicast Routing Management YANG Module
8. IPv4单播路由管理模块
   <CODE BEGINS> file "ietf-ipv4-unicast-routing@2016-11-04.yang"
        
   <CODE BEGINS> file "ietf-ipv4-unicast-routing@2016-11-04.yang"
        

module ietf-ipv4-unicast-routing {

模块ietf-ipv4-单播路由{

yang-version "1.1";

杨版“1.1”;

     namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing";
        
     namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing";
        

prefix "v4ur";

前缀“v4ur”;

     import ietf-routing {
       prefix "rt";
     }
        
     import ietf-routing {
       prefix "rt";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
        

organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

组织“IETF NETMOD(NETCONF数据建模语言)工作组”;

     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        

description "This YANG module augments the 'ietf-routing' module with basic configuration and state data for IPv4 unicast routing.

description“此模块使用IPv4单播路由的基本配置和状态数据扩充了“ietf路由”模块。

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

版权所有(c)2016 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 (http://trustee.ietf.org/license-info).

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

The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in the module text are to be interpreted as described in RFC 2119.

模块文本中的关键词‘必须’、‘不得’、‘必需’、‘应’、‘不应’、‘建议’、‘可能’和‘可选’应按照RFC 2119中的说明进行解释。

        This version of this YANG module is part of RFC 8022;
        see the RFC itself for full legal notices.";
        
        This version of this YANG module is part of RFC 8022;
        see the RFC itself for full legal notices.";
        
     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.";
     }
        
     /* State data */
        
     /* State data */
        
     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.";
       }
       description
         "This leaf augments an IPv4 unicast route.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         description
           "IPv4 destination prefix.";
       }
     }
        
     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.";
       }
       description
         "This leaf augments an IPv4 unicast route.";
       leaf destination-prefix {
         type inet:ipv4-prefix;
         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.";
       }
       description
         "Augment '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-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.";
       }
       description
         "Augment '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-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.";
        
     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.";
        
       }
       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.";
       }
     }
        
       }
       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-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.";
       }
       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-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.";
       }
       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-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.";
       }
       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-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.";
       }
       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-state/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route/rt:next-hop/rt:next-hop-options/"
           + "rt:simple-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:simple-next-hop" {
        
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augment '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.";
       }
     }
        
       when "derived-from-or-self(../../../rt:address-family, "
          + "'v4ur:ipv4-unicast')" {
         description
           "This augment is valid only for IPv4 unicast.";
       }
       description
         "Augment '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-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.";
       }
       description
         "Augment '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-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.";
       }
       description
         "Augment '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.";
       }
     }
        
     /* Configuration data */
        
     /* Configuration data */
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the configuration of the 'static'
          pseudo-protocol with data specific to IPv4 unicast.";
       container ipv4 {
         description
           "Configuration of a 'static' pseudo-protocol instance
            consists of a list of routes.";
         list route {
           key "destination-prefix";
           description
             "A list of static routes.";
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the configuration of the 'static'
          pseudo-protocol with data specific to IPv4 unicast.";
       container ipv4 {
         description
           "Configuration of 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
               "Configuration of next-hop.";
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augment '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
                   "Augment 'next-hop-list' case in IPv4 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv4-address;
                   description
                     "IPv4 address of the next hop.";
                 }
               }
             }
           }
         }
       }
     }
   }
        
           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
               "Configuration of next-hop.";
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augment '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
                   "Augment 'next-hop-list' case in IPv4 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv4-address;
                   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@2016-11-04.yang"
        
   <CODE BEGINS> file "ietf-ipv6-unicast-routing@2016-11-04.yang"
        

module ietf-ipv6-unicast-routing {

模块ietf-ipv6-单播路由{

yang-version "1.1";

杨版“1.1”;

     namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
        
     namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
        

prefix "v6ur";

前缀“v6ur”;

     import ietf-routing {
       prefix "rt";
     }
        
     import ietf-routing {
       prefix "rt";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
        
     import ietf-inet-types {
       prefix "inet";
     }
        
     include ietf-ipv6-router-advertisements {
       revision-date 2016-11-04;
     }
        
     include ietf-ipv6-router-advertisements {
       revision-date 2016-11-04;
     }
        

organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

组织“IETF NETMOD(NETCONF数据建模语言)工作组”;

     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        

description "This YANG module augments the 'ietf-routing' module with basic configuration and state data for IPv6 unicast routing.

description“此模块使用IPv6单播路由的基本配置和状态数据扩充了“ietf路由”模块。

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

版权所有(c)2016 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 (http://trustee.ietf.org/license-info).

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

The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in the module text are to be interpreted as described in RFC 2119.

模块文本中的关键词‘必须’、‘不得’、‘必需’、‘应’、‘不应’、‘建议’、‘可能’和‘可选’应按照RFC 2119中的说明进行解释。

        This version of this YANG module is part of RFC 8022;
        see the RFC itself for full legal notices.";
        
        This version of this YANG module is part of RFC 8022;
        see the RFC itself for full legal notices.";
        
     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 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.";
     }
        
     /* State data */
        
     /* State data */
        
     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.";
       }
       description
         "This leaf augments an IPv6 unicast route.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         description
           "IPv6 destination prefix.";
       }
        
     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.";
       }
       description
         "This leaf augments an IPv6 unicast route.";
       leaf destination-prefix {
         type inet:ipv6-prefix;
         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.";
       }
       description
         "Augment '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-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.";
       }
       description
         "Augment '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-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.";
       }
       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.";
       }
     }
        
     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.";
       }
       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.";
       }
     }
        
     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.";
       }
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv6-address;
        
     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.";
       }
       description
         "This augment adds the input parameter of the 'active-route'
          action.";
       leaf destination-address {
         type inet:ipv6-address;
        
         description
           "IPv6 destination address.";
       }
     }
        
         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.";
       }
       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-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.";
       }
       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-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.";
       }
       description
         "Augment '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-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.";
       }
       description
         "Augment '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-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.";
       }
        
     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.";
       }
        
       description
         "Augment '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.";
       }
     }
        
       description
         "Augment '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.";
       }
     }
        
     /* Configuration data */
        
     /* Configuration data */
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the configuration of the 'static'
          pseudo-protocol with data specific to IPv6 unicast.";
       container ipv6 {
         description
           "Configuration of 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
               "Configuration of next-hop.";
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augment 'simple-next-hop' case in IPv6 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv6-address;
                   description
                     "IPv6 address of the next hop.";
        
     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/rt:static-routes" {
       description
         "This augment defines the configuration of the 'static'
          pseudo-protocol with data specific to IPv6 unicast.";
       container ipv6 {
         description
           "Configuration of 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
               "Configuration of next-hop.";
             uses rt:next-hop-content {
               augment "next-hop-options/simple-next-hop" {
                 description
                   "Augment '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
                   "Augment 'next-hop-list' 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
                   "Augment 'next-hop-list' case in IPv6 static
                    routes.";
                 leaf next-hop-address {
                   type inet:ipv6-address;
                   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@2016-11-04.yang"
        
   <CODE BEGINS> file "ietf-ipv6-router-advertisements@2016-11-04.yang"
        

submodule ietf-ipv6-router-advertisements {

子模块ietf-ipv6-router-Advertisions{

yang-version "1.1";

杨版“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";
     }
        
     import ietf-interfaces {
       prefix "if";
     }
        
     import ietf-ip {
       prefix "ip";
     }
        
     import ietf-ip {
       prefix "ip";
     }
        

organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

组织“IETF NETMOD(NETCONF数据建模语言)工作组”;

     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Ladislav Lhotka
                  <mailto:lhotka@nic.cz>
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        
        Editor:   Acee Lindem
                  <mailto:acee@cisco.com>";
        

description "This YANG module augments the 'ietf-ip' module with configuration and state data of IPv6 router advertisements.

description“此模块使用IPv6路由器广告的配置和状态数据扩充了“ietf ip”模块。

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

版权所有(c)2016 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 (http://trustee.ietf.org/license-info).

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

The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in the module text are to be interpreted as described in RFC 2119.

模块文本中的关键词‘必须’、‘不得’、‘必需’、‘应’、‘不应’、‘建议’、‘可能’和‘可选’应按照RFC 2119中的说明进行解释。

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

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

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

     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";
     }
        
     /* State data */
        
     /* State data */
        
     augment "/if:interfaces-state/if:interface/ip:ipv6" {
       description
         "Augment interface state data with parameters of IPv6 router
          advertisements.";
       container ipv6-router-advertisements {
         description
           "Parameters of IPv6 Router Advertisements.";
         leaf send-advertisements {
           type boolean;
           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";
           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";
           description
             "The minimum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
         }
         leaf managed-flag {
           type boolean;
           description
             "The value that is placed in the 'Managed address
              configuration' flag field in the Router Advertisement.";
         }
         leaf other-config-flag {
           type boolean;
           description
             "The value that is placed in the 'Other configuration' flag
              field in the Router Advertisement.";
         }
         leaf link-mtu {
           type uint32;
        
     augment "/if:interfaces-state/if:interface/ip:ipv6" {
       description
         "Augment interface state data with parameters of IPv6 router
          advertisements.";
       container ipv6-router-advertisements {
         description
           "Parameters of IPv6 Router Advertisements.";
         leaf send-advertisements {
           type boolean;
           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";
           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";
           description
             "The minimum time allowed between sending unsolicited
              multicast Router Advertisements from the interface.";
         }
         leaf managed-flag {
           type boolean;
           description
             "The value that is placed in the 'Managed address
              configuration' flag field in the Router Advertisement.";
         }
         leaf other-config-flag {
           type boolean;
           description
             "The value that is placed in the 'Other configuration' flag
              field in the Router Advertisement.";
         }
         leaf link-mtu {
           type uint32;
        
           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";
           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";
           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).";
         }
        
           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";
           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";
           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;
           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";
           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 {
           description
             "A list of prefixes that are placed in Prefix Information
              options in Router Advertisement messages sent from the
              interface.
        
         leaf cur-hop-limit {
           type uint8;
           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";
           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 {
           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";
             description
               "Advertised prefix entry and its parameters.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               description
                 "IPv6 address prefix.";
             }
             leaf valid-lifetime {
               type uint32;
               units "seconds";
               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.
        
              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";
             description
               "Advertised prefix entry and its parameters.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               description
                 "IPv6 address prefix.";
             }
             leaf valid-lifetime {
               type uint32;
               units "seconds";
               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;
               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";
               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;
               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";
               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;
               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;
               description
                 "The value that is placed in the Autonomous Flag field
                  in the Prefix Information option.";
        
             }
           }
         }
       }
     }
        
             }
           }
         }
       }
     }
        
     /* Configuration data */
        
     /* Configuration data */
        
     augment "/if:interfaces/if:interface/ip:ipv6" {
       description
         "Augment interface configuration with parameters of IPv6 router
          advertisements.";
       container ipv6-router-advertisements {
         description
           "Configuration of 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..1800";
           }
           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'.";
        
     augment "/if:interfaces/if:interface/ip:ipv6" {
       description
         "Augment interface configuration with parameters of IPv6 router
          advertisements.";
       container ipv6-router-advertisements {
         description
           "Configuration of 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..1800";
           }
           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.

}description“从接口发送未经请求的多播路由器广告之间允许的最短时间。

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 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 {
        
              - 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).
        
             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 value specified in IANA Assigned Numbers that was in effect at the time of implementation."; reference "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - AdvCurHopLimit.

如果未配置此参数,则设备应使用在实施时生效的IANA分配编号中指定的值。“参考”RFC 4861:IP版本6(IPv6)的邻居发现-AdvCurHopLimit。

              IANA: IP Parameters,
              http://www.iana.org/assignments/ip-parameters";
         }
         leaf default-lifetime {
           type uint16 {
             range "0..9000";
           }
           units "seconds";
           description
             "The value to be placed in the Router Lifetime field of
        
              IANA: IP Parameters,
              http://www.iana.org/assignments/ip-parameters";
         }
         leaf default-lifetime {
           type uint16 {
             range "0..9000";
           }
           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.

从接口发送的路由器广告,以秒为单位。它必须为零或介于最大rtr adv间隔和9000秒之间。值为零表示路由器不用作默认路由器。这些限制可能会被描述IPv6如何在不同链路层上运行的特定文档所覆盖。

              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
             "Configuration of 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
             "Configuration of 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
               "Configuration of an advertised prefix entry.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               description
                 "IPv6 address prefix.";
             }
             choice control-adv-prefixes {
               default "advertise";
               description
                 "Either the prefix is explicitly removed from the
                  set of advertised prefixes, or the parameters with
                  which it is advertised are specified (default case).";
               leaf no-advertise {
                 type empty;
                 description
                   "The prefix will not be advertised.
        
              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
               "Configuration of an advertised prefix entry.";
             leaf prefix-spec {
               type inet:ipv6-prefix;
               description
                 "IPv6 address prefix.";
             }
             choice control-adv-prefixes {
               default "advertise";
               description
                 "Either the prefix is explicitly removed from the
                  set of advertised prefixes, or the parameters with
                  which it 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.";
                   }
                   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;
        
                    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 "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.";
                 }
               }
             }
           }
         }
       }
     }
   }
        

<CODE ENDS>

<代码结束>

10. IANA Considerations
10. IANA考虑

This document registers the following namespace URIs in the "IETF XML Registry" [RFC3688]:

本文档在“IETF XML注册表”[RFC3688]中注册以下命名空间URI:

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命名空间。

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

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

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

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 8022

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

11. Security Considerations
11. 安全考虑

Configuration and state data conforming to the core routing data model (defined in this document) are designed to be accessed via a management protocol with a secure transport layer, such as NETCONF [RFC6241]. The NETCONF access control model [RFC6536] provides the means to restrict access for particular NETCONF users to a preconfigured subset of all available NETCONF protocol operations and content.

符合核心路由数据模型(本文件中定义)的配置和状态数据设计为通过具有安全传输层的管理协议(如NETCONF[RFC6241])进行访问。NETCONF访问控制模型[RFC6536]提供了将特定NETCONF用户的访问限制为所有可用NETCONF协议操作和内容的预配置子集的方法。

A number of configuration data nodes defined in the YANG modules belonging to the core routing data model are writable/creatable/ deletable (i.e., "config true" in YANG terms, which is the default). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations to these data nodes, such as "edit-config" in NETCONF, can have negative effects on the network if the protocol operations are not properly protected.

在属于核心路由数据模型的YANG模块中定义的许多配置数据节点是可写/可创建/可删除的(即YANG术语中的“config true”,这是默认值)。在某些网络环境中,这些数据节点可能被视为敏感或易受攻击。如果协议操作未得到适当保护,对这些数据节点的写入操作(如NETCONF中的“编辑配置”)可能会对网络产生负面影响。

The vulnerable "config true" parameters and subtrees are the following:

易受攻击的“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.

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

Unauthorized access to any of these lists can adversely affect the routing subsystem of both the local device and the network. This may lead to network malfunctions, delivery of packets to inappropriate destinations, and other problems.

未经授权访问这些列表可能会对本地设备和网络的路由子系统产生不利影响。这可能导致网络故障、将数据包传送到不适当的目的地以及其他问题。

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, <http://www.rfc-editor.org/info/rfc2119>.

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

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

[RFC3688]Mealling,M.,“IETF XML注册表”,BCP 81,RFC 3688,DOI 10.17487/RFC3688,2004年1月<http://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, <http://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月<http://www.rfc-editor.org/info/rfc4861>.

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

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

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

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

[RFC7223] Bjorklund, M., "A YANG Data Model for Interface Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, <http://www.rfc-editor.org/info/rfc7223>.

[RFC7223]Bjorklund,M.,“用于接口管理的YANG数据模型”,RFC 7223,DOI 10.17487/RFC7223,2014年5月<http://www.rfc-editor.org/info/rfc7223>.

[RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", RFC 7277, DOI 10.17487/RFC7277, June 2014, <http://www.rfc-editor.org/info/rfc7277>.

[RFC7277]Bjorklund,M.,“IP管理的杨氏数据模型”,RFC 7277,DOI 10.17487/RFC7277,2014年6月<http://www.rfc-editor.org/info/rfc7277>.

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

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

12.2. Informative References
12.2. 资料性引用

[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, January 2011, <http://www.rfc-editor.org/info/rfc6087>.

[RFC6087]Bierman,A.,“YANG数据模型文件的作者和评审者指南”,RFC 6087,DOI 10.17487/RFC6087,2011年1月<http://www.rfc-editor.org/info/rfc6087>.

[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10.17487/RFC6536, March 2012, <http://www.rfc-editor.org/info/rfc6536>.

[RFC6536]Bierman,A.和M.Bjorklund,“网络配置协议(NETCONF)访问控制模型”,RFC 6536,DOI 10.17487/RFC6536,2012年3月<http://www.rfc-editor.org/info/rfc6536>.

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

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

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

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

Appendix A. The Complete Data Trees
附录A.完整的数据树

This appendix presents the complete configuration and state data trees of the core routing data model. See Section 2.2 for an explanation of the symbols used. The data type of every leaf node is shown near the right end of the corresponding line.

本附录介绍了核心路由数据模型的完整配置和状态数据树。有关所用符号的说明,请参见第2.2节。每个叶节点的数据类型显示在相应行的右端附近。

A.1. Configuration Data
A.1. 配置数据
   +--rw routing
      +--rw router-id?                 yang:dotted-quad
      +--rw control-plane-protocols
      |  +--rw control-plane-protocol* [type name]
      |     +--rw type             identityref
      |     +--rw name             string
      |     +--rw description?     string
      |     +--rw static-routes
      |        +--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?
      |        |           |  +--rw v6ur:next-hop-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?
      |        |                    +--rw v6ur:next-hop-address?
      |        +--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?
      |                    |  +--rw v4ur:next-hop-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 routing
      +--rw router-id?                 yang:dotted-quad
      +--rw control-plane-protocols
      |  +--rw control-plane-protocol* [type name]
      |     +--rw type             identityref
      |     +--rw name             string
      |     +--rw description?     string
      |     +--rw static-routes
      |        +--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?
      |        |           |  +--rw v6ur:next-hop-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?
      |        |                    +--rw v6ur:next-hop-address?
      |        +--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?
      |                    |  +--rw v4ur:next-hop-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?
      |                             +--rw v4ur:next-hop-address?
      +--rw ribs
         +--rw rib* [name]
            +--rw name              string
            +--rw address-family?   identityref
            +--rw description?      string
        
      |                             +--rw v4ur:index              string
      |                             +--rw v4ur:outgoing-interface?
      |                             +--rw v4ur:next-hop-address?
      +--rw ribs
         +--rw rib* [name]
            +--rw name              string
            +--rw address-family?   identityref
            +--rw description?      string
        
A.2. State Data
A.2. 状态数据
      +--ro routing-state
      |  +--ro router-id?                 yang:dotted-quad
      |  +--ro interfaces
      |  |  +--ro interface*   if:interface-state-ref
      |  +--ro control-plane-protocols
      |  |  +--ro control-plane-protocol* [type name]
      |  |     +--ro type    identityref
      |  |     +--ro name    string
      |  +--ro ribs
      |     +--ro rib* [name]
      |        +--ro name              string
      |        +--ro 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?
      |        |     |     |  +--ro v6ur:next-hop-address?
      |        |     |     |  +--ro v4ur:next-hop-address?
      |        |     |     +--:(special-next-hop)
      |        |     |     |  +--ro special-next-hop?        enumeration
      |        |     |     +--:(next-hop-list)
      |        |     |        +--ro next-hop-list
      |        |     |           +--ro next-hop*
      |        |     |              +--ro outgoing-interface?
      |        |     |              +--ro v6ur:address?
      |        |     |              +--ro v4ur:address?
      |        |     +--ro source-protocol            identityref
      |        |     +--ro active?                    empty
      |        |     +--ro last-updated?              yang:date-and-time
      |        |     +--ro v6ur:destination-prefix?   inet:ipv6-prefix
      |        |     +--ro v4ur:destination-prefix?   inet:ipv4-prefix
      |        +---x active-route
      |           +---w input
        
      +--ro routing-state
      |  +--ro router-id?                 yang:dotted-quad
      |  +--ro interfaces
      |  |  +--ro interface*   if:interface-state-ref
      |  +--ro control-plane-protocols
      |  |  +--ro control-plane-protocol* [type name]
      |  |     +--ro type    identityref
      |  |     +--ro name    string
      |  +--ro ribs
      |     +--ro rib* [name]
      |        +--ro name              string
      |        +--ro 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?
      |        |     |     |  +--ro v6ur:next-hop-address?
      |        |     |     |  +--ro v4ur:next-hop-address?
      |        |     |     +--:(special-next-hop)
      |        |     |     |  +--ro special-next-hop?        enumeration
      |        |     |     +--:(next-hop-list)
      |        |     |        +--ro next-hop-list
      |        |     |           +--ro next-hop*
      |        |     |              +--ro outgoing-interface?
      |        |     |              +--ro v6ur:address?
      |        |     |              +--ro v4ur:address?
      |        |     +--ro source-protocol            identityref
      |        |     +--ro active?                    empty
      |        |     +--ro last-updated?              yang:date-and-time
      |        |     +--ro v6ur:destination-prefix?   inet:ipv6-prefix
      |        |     +--ro v4ur:destination-prefix?   inet:ipv4-prefix
      |        +---x active-route
      |           +---w input
        
      |           |  +---w v6ur:destination-address?   inet:ipv6-address
      |           |  +---w v4ur:destination-address?   inet:ipv4-address
      |           +--ro output
      |              +--ro route
      |                 +--ro next-hop
      |                 |  +--ro (next-hop-options)
      |                 |     +--:(simple-next-hop)
      |                 |     |  +--ro outgoing-interface?
      |                 |     |  +--ro v6ur:next-hop-address?
      |                 |     |  +--ro v4ur:next-hop-address?
      |                 |     +--:(special-next-hop)
      |                 |     |  +--ro special-next-hop?     enumeration
      |                 |     +--:(next-hop-list)
      |                 |        +--ro next-hop-list
      |                 |           +--ro next-hop*
      |                 |              +--ro outgoing-interface?
      |                 |              +--ro v6ur:next-hop-address?
      |                 |              +--ro v4ur:next-hop-address?
      |                 +--ro source-protocol            identityref
      |                 +--ro active?                    empty
      |                 +--ro last-updated?           yang:date-and-time
      |                 +--ro v6ur:destination-prefix?  inet:ipv6-prefix
      |                 +--ro v4ur:destination-prefix?  inet:ipv4-prefix
        
      |           |  +---w v6ur:destination-address?   inet:ipv6-address
      |           |  +---w v4ur:destination-address?   inet:ipv4-address
      |           +--ro output
      |              +--ro route
      |                 +--ro next-hop
      |                 |  +--ro (next-hop-options)
      |                 |     +--:(simple-next-hop)
      |                 |     |  +--ro outgoing-interface?
      |                 |     |  +--ro v6ur:next-hop-address?
      |                 |     |  +--ro v4ur:next-hop-address?
      |                 |     +--:(special-next-hop)
      |                 |     |  +--ro special-next-hop?     enumeration
      |                 |     +--:(next-hop-list)
      |                 |        +--ro next-hop-list
      |                 |           +--ro next-hop*
      |                 |              +--ro outgoing-interface?
      |                 |              +--ro v6ur:next-hop-address?
      |                 |              +--ro v4ur:next-hop-address?
      |                 +--ro source-protocol            identityref
      |                 +--ro active?                    empty
      |                 +--ro last-updated?           yang:date-and-time
      |                 +--ro v6ur:destination-prefix?  inet:ipv6-prefix
      |                 +--ro v4ur:destination-prefix?  inet:ipv4-prefix
        
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 feature "multiple-ribs". 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 [RFC6087]. See also Section 5.3.2.

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

module example-rip {

模块示例rip{

yang-version "1.1";

杨版“1.1”;

     namespace "http://example.com/rip";
        
     namespace "http://example.com/rip";
        

prefix "rip";

前缀为“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 {
        
     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 info, e.g.,
            autonomous system (AS) number.";
       }
     }
        
         type uint16;
         default "0";
         description
           "This leaf may be used to carry additional info, e.g.,
            autonomous system (AS) number.";
       }
     }
        
     augment "/rt:routing-state/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-state/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-state/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       description
         "RIP-specific route attributes in the output of 'active-route'
          RPC.";
       uses route-content;
     }
        
     augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/"
           + "rt:output/rt:route" {
       description
         "RIP-specific route attributes in the output of '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 {
           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 {
        
     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.";
         }
       }
     }
   }
        
               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 in the JSON encoding [RFC7951], containing both configuration and state data. The data conforms to a data model that is defined by the following YANG library specification [RFC7895]:

本节包含JSON编码[RFC7951]中的实例数据树示例,其中包含配置和状态数据。数据符合以下库规范[RFC7895]定义的数据模型:

   {
     "ietf-yang-library:modules-state": {
       "module-set-id": "c2e1f54169aa7f36e1a6e8d0865d441d3600f9c4",
       "module": [
         {
           "name": "ietf-routing",
           "revision": "2016-11-04",
           "feature": [
             "multiple-ribs",
             "router-id"
           ],
           "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-ipv4-unicast-routing",
        
   {
     "ietf-yang-library:modules-state": {
       "module-set-id": "c2e1f54169aa7f36e1a6e8d0865d441d3600f9c4",
       "module": [
         {
           "name": "ietf-routing",
           "revision": "2016-11-04",
           "feature": [
             "multiple-ribs",
             "router-id"
           ],
           "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-ipv4-unicast-routing",
        
           "revision": "2016-11-04",
           "namespace":
             "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-ipv6-unicast-routing",
           "revision": "2016-11-04",
           "namespace":
             "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-interfaces",
           "revision": "2014-05-08",
           "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": "",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-ip",
           "revision": "2014-06-16",
           "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip",
           "conformance-type": "implement"
         }
       ]
     }
   }
        
           "revision": "2016-11-04",
           "namespace":
             "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-ipv6-unicast-routing",
           "revision": "2016-11-04",
           "namespace":
             "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-interfaces",
           "revision": "2014-05-08",
           "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": "",
           "conformance-type": "implement"
         },
         {
           "name": "ietf-ip",
           "revision": "2014-06-16",
           "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip",
           "conformance-type": "implement"
         }
       ]
     }
   }
        

A simple network setup as shown in Figure 3 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.

假设一个如图3所示的简单网络设置:路由器“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 3: Example of Network Configuration

图3:网络配置示例

The instance data tree could then be as follows:

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

   {
     "ietf-interfaces:interfaces": {
       "interface": [
         {
           "name": "eth0",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Uplink to ISP.",
           "ietf-ip:ipv4": {
             "address": [
               {
                 "ip": "192.0.2.1",
                 "prefix-length": 24
               }
             ],
             "forwarding": true
           },
           "ietf-ip:ipv6": {
             "address": [
               {
        
   {
     "ietf-interfaces:interfaces": {
       "interface": [
         {
           "name": "eth0",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Uplink to ISP.",
           "ietf-ip:ipv4": {
             "address": [
               {
                 "ip": "192.0.2.1",
                 "prefix-length": 24
               }
             ],
             "forwarding": true
           },
           "ietf-ip:ipv6": {
             "address": [
               {
        
                 "ip": "2001:0db8:0:1::1",
                 "prefix-length": 64
               }
             ],
             "forwarding": true,
             "autoconf": {
               "create-global-addresses": false
             }
           }
         },
         {
           "name": "eth1",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Interface to the internal network.",
           "ietf-ip:ipv4": {
             "address": [
               {
                 "ip": "198.51.100.1",
                 "prefix-length": 24
               }
             ],
             "forwarding": true
           },
           "ietf-ip:ipv6": {
             "address": [
               {
                 "ip": "2001:0db8:0:2::1",
                 "prefix-length": 64
               }
             ],
             "forwarding": true,
             "autoconf": {
               "create-global-addresses": false
             },
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": true
             }
           }
         }
       ]
     },
     "ietf-interfaces:interfaces-state": {
       "interface": [
         {
           "name": "eth0",
           "type": "iana-if-type:ethernetCsmacd",
           "phys-address": "00:0C:42:E5:B1:E9",
           "oper-status": "up",
        
                 "ip": "2001:0db8:0:1::1",
                 "prefix-length": 64
               }
             ],
             "forwarding": true,
             "autoconf": {
               "create-global-addresses": false
             }
           }
         },
         {
           "name": "eth1",
           "type": "iana-if-type:ethernetCsmacd",
           "description": "Interface to the internal network.",
           "ietf-ip:ipv4": {
             "address": [
               {
                 "ip": "198.51.100.1",
                 "prefix-length": 24
               }
             ],
             "forwarding": true
           },
           "ietf-ip:ipv6": {
             "address": [
               {
                 "ip": "2001:0db8:0:2::1",
                 "prefix-length": 64
               }
             ],
             "forwarding": true,
             "autoconf": {
               "create-global-addresses": false
             },
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": true
             }
           }
         }
       ]
     },
     "ietf-interfaces:interfaces-state": {
       "interface": [
         {
           "name": "eth0",
           "type": "iana-if-type:ethernetCsmacd",
           "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
               }
             ],
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": false
             }
           }
         },
         {
           "name": "eth1",
           "type": "iana-if-type:ethernetCsmacd",
           "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,
        
           "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
               }
             ],
             "ietf-ipv6-unicast-routing:ipv6-router-advertisements": {
               "send-advertisements": false
             }
           }
         },
         {
           "name": "eth1",
           "type": "iana-if-type:ethernetCsmacd",
           "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-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"
                     }
                   }
        
             "address": [
               {
                 "ip": "2001:0db8:0:2::1",
                 "prefix-length": 64
               }
             ],
             "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-state": {
       "interfaces": {
         "interface": [
           "eth0",
           "eth1"
         ]
       },
       "control-plane-protocols": {
         "control-plane-protocol": [
           {
             "type": "ietf-routing:static",
             "name": "st0"
           }
         ]
       },
       "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",
        
                 ]
               }
             }
           }
         ]
       }
     },
     "ietf-routing:routing-state": {
       "interfaces": {
         "interface": [
           "eth0",
           "eth1"
         ]
       },
       "control-plane-protocols": {
         "control-plane-protocol": [
           {
             "type": "ietf-routing:static",
             "name": "st0"
           }
         ]
       },
       "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": {
        
                   "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"
                 }
               ]
             }
           }
         ]
       }
     }
   }
        
                     "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"
                 }
               ]
             }
           }
         ]
       }
     }
   }
        

Acknowledgments

致谢

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

作者要感谢尼廷·巴哈杜尔、马丁·比约克隆德、迪安·博格达诺维奇、杰夫·哈斯、乔尔·哈尔彭、韦斯·哈达克、斯里格内斯·基尼、大卫·兰帕特、安德鲁·麦格雷戈、扬·梅德维德、李翔、斯蒂芬·利特考斯基、托马斯·莫林、汤姆·佩奇、瞿英珍、布鲁诺·里斯曼、于尔根·舍恩瓦尔德、菲尔·沙弗、戴夫·泰勒、杨毅、德里克·曼杰、,以及Jeffrey Zhang,感谢他们的有益评论和建议。

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