Internet Engineering Task Force (IETF)                      M. Bjorklund
Request for Comments: 8343                                Tail-f Systems
Obsoletes: 7223                                               March 2018
Category: Standards Track
ISSN: 2070-1721
        
Internet Engineering Task Force (IETF)                      M. Bjorklund
Request for Comments: 8343                                Tail-f Systems
Obsoletes: 7223                                               March 2018
Category: Standards Track
ISSN: 2070-1721
        

A YANG Data Model for Interface Management

面向接口管理的YANG数据模型

Abstract

摘要

This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).

本文件定义了网络接口管理的数据模型。预计接口类型特定的数据模型将扩展本文档中定义的通用接口数据模型。数据模型包括配置和系统状态的定义(用于收集统计信息的状态信息和计数器)。

The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.

本文件中的YANG数据模型符合RFC 8342中定义的网络管理数据存储体系结构(NMDA)。

This document obsoletes RFC 7223.

本文件淘汰了RFC 7223。

Status of This Memo

关于下段备忘

This is an Internet Standards Track document.

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

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

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

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

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

Copyright Notice

版权公告

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

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

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

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

Table of Contents

目录

   1. Introduction ....................................................3
      1.1. Summary of Changes from RFC 7223 ...........................3
      1.2. Terminology ................................................3
      1.3. Tree Diagrams ..............................................4
   2. Objectives ......................................................5
   3. Interfaces Data Model ...........................................5
      3.1. The Interface List .........................................6
      3.2. Interface References .......................................8
      3.3. Interface Layering .........................................8
   4. Relationship to the IF-MIB ......................................9
   5. Interfaces YANG Module .........................................10
   6. IANA Considerations ............................................34
   7. Security Considerations ........................................35
   8. References .....................................................36
      8.1. Normative References ......................................36
      8.2. Informative References ....................................37
   Appendix A.  Example: Ethernet Interface Module ...................38
   Appendix B.  Example: Ethernet Bonding Interface Module ...........39
   Appendix C.  Example: VLAN Interface Module .......................40
   Appendix D.  Example: NETCONF <get-config> Reply ..................41
   Appendix E.  Example: NETCONF <get-data> Reply ....................42
   Appendix F.  Examples: Interface Naming Schemes ...................44
     F.1.  Router with Restricted Interface Names ....................44
     F.2.  Router with Arbitrary Interface Names .....................45
     F.3.  Ethernet Switch with Restricted Interface Names ...........46
     F.4.  Generic Host with Restricted Interface Names ..............47
     F.5.  Generic Host with Arbitrary Interface Names ...............48
   Acknowledgments ...................................................49
   Author's Address ..................................................49
        
   1. Introduction ....................................................3
      1.1. Summary of Changes from RFC 7223 ...........................3
      1.2. Terminology ................................................3
      1.3. Tree Diagrams ..............................................4
   2. Objectives ......................................................5
   3. Interfaces Data Model ...........................................5
      3.1. The Interface List .........................................6
      3.2. Interface References .......................................8
      3.3. Interface Layering .........................................8
   4. Relationship to the IF-MIB ......................................9
   5. Interfaces YANG Module .........................................10
   6. IANA Considerations ............................................34
   7. Security Considerations ........................................35
   8. References .....................................................36
      8.1. Normative References ......................................36
      8.2. Informative References ....................................37
   Appendix A.  Example: Ethernet Interface Module ...................38
   Appendix B.  Example: Ethernet Bonding Interface Module ...........39
   Appendix C.  Example: VLAN Interface Module .......................40
   Appendix D.  Example: NETCONF <get-config> Reply ..................41
   Appendix E.  Example: NETCONF <get-data> Reply ....................42
   Appendix F.  Examples: Interface Naming Schemes ...................44
     F.1.  Router with Restricted Interface Names ....................44
     F.2.  Router with Arbitrary Interface Names .....................45
     F.3.  Ethernet Switch with Restricted Interface Names ...........46
     F.4.  Generic Host with Restricted Interface Names ..............47
     F.5.  Generic Host with Arbitrary Interface Names ...............48
   Acknowledgments ...................................................49
   Author's Address ..................................................49
        
1. Introduction
1. 介绍

This document defines a YANG data model [RFC7950] for the management of network interfaces. It is expected that interface-type-specific data models will augment the generic interfaces data model defined in this document.

本文件定义了用于管理网络接口的数据模型[RFC7950]。预计特定于接口类型的数据模型将扩展本文档中定义的通用接口数据模型。

Network interfaces are central to the management of many Internet protocols. Thus, it is important to establish a common data model for how interfaces are identified, configured, and monitored.

网络接口是许多互联网协议管理的核心。因此,为如何识别、配置和监控接口建立通用数据模型非常重要。

The data model includes configuration data and state data (status information and counters for the collection of statistics).

数据模型包括配置数据和状态数据(用于收集统计数据的状态信息和计数器)。

This version of the interfaces data model supports the Network Management Datastore Architecture (NMDA) [RFC8342].

此版本的接口数据模型支持网络管理数据存储体系结构(NMDA)[RFC8342]。

1.1. Summary of Changes from RFC 7223
1.1. RFC 7223变更汇总表

The "/interfaces-state" subtree with "config false" data nodes is deprecated. All "config false" data nodes are now present in the "/interfaces" subtree.

不推荐使用带有“config false”数据节点的“/interfaces state”子树。所有“config false”数据节点现在都存在于“/interfaces”子树中。

Servers that do not implement NMDA, or that wish to support clients that do not implement NMDA, MAY implement the deprecated "/interfaces-state" tree.

未实现NMDA的服务器或希望支持未实现NMDA的客户端的服务器可能会实现不推荐的“/接口状态”树。

1.2. Terminology
1.2. 术语

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

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

The following terms are used within this document:

本文件中使用了以下术语:

o system-controlled interface: An interface is said to be system-controlled if the system creates and deletes the interface independently of what has been explicitly configured. Examples are interfaces representing physical hardware that appear and disappear when hardware (e.g., a line card or hot-pluggable wireless interface) is added or removed. System-controlled interfaces may also appear if a certain functionality is enabled (e.g., a loopback interface might appear if the IP protocol stack is enabled).

o 系统控制接口:如果系统独立于显式配置创建和删除接口,则称该接口为系统控制接口。例如,接口表示在添加或删除硬件(如线路卡或热插拔无线接口)时出现和消失的物理硬件。如果启用了特定功能,系统控制的接口也可能出现(例如,如果启用了IP协议栈,则可能出现环回接口)。

o user-controlled interface: An interface is said to be user-controlled if the creation of the interface is controlled by adding explicit interface configuration to the intended configuration and the removal of the interface is controlled by removing explicit interface configuration from the intended configuration. Examples are VLAN interfaces configured on a system-controlled Ethernet interface.

o 用户控制界面:如果通过向预期配置添加显式界面配置来控制界面的创建,并且通过从预期配置中删除显式界面配置来控制界面的删除,则称界面为用户控制界面。例如,在系统控制的以太网接口上配置VLAN接口。

The following terms are defined in [RFC8342] and are not redefined here:

[RFC8342]中定义了以下术语,此处未重新定义:

o client

o 客户

o server

o 服务器

o configuration

o 配置

o system state

o 系统状态

o operational state

o 运行状态

o intended configuration

o 预期配置

o running configuration datastore

o 运行配置数据存储

o operational state datastore

o 操作状态数据存储

The following terms are defined in [RFC7950] and are not redefined here:

[RFC7950]中定义了以下术语,此处未重新定义:

o augment

o 加强

o data model

o 数据模型

o data node

o 数据节点

1.3. Tree Diagrams
1.3. 树形图

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

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

2. Objectives
2. 目标

This section describes some of the design objectives for the model presented in Section 5.

本节介绍了第5节中介绍的模型的一些设计目标。

o It is recognized that existing implementations will have to map the interface data model defined in this memo to their proprietary native data model. To facilitate such mappings, the data model should be simple.

o 我们认识到,现有实现必须将本备忘录中定义的接口数据模型映射到其专有的本机数据模型。为了促进这种映射,数据模型应该简单。

o The data model should be suitable for new implementations to use as is, without requiring a mapping to a different native model.

o 数据模型应该适合新的实现按原样使用,而不需要映射到不同的本机模型。

o References to interfaces should be as simple as possible, preferably by using a single leafref.

o 对接口的引用应尽可能简单,最好使用单个leafref。

o The mapping to ifIndex [RFC2863] used by the Simple Network Management Protocol (SNMP) to identify interfaces must be clear.

o 简单网络管理协议(SNMP)用于标识接口的ifIndex[RFC2863]映射必须清晰。

o The model must support interface layering: both (1) simple layering, where one interface is layered on top of exactly one other interface, and (2) more complex scenarios, where one interface results from the aggregation of N other interfaces or when N interfaces are multiplexed over one other interface.

o 该模型必须支持接口分层:(1)简单分层,其中一个接口分层在另一个接口之上;(2)更复杂的场景,其中一个接口由N个其他接口聚合而成,或者N个接口在另一个接口上多路复用。

o The data model should support the pre-provisioning of interface configuration; that is, it should be possible to configure an interface whose physical interface hardware is not present on the device. It is recommended that devices that support dynamic addition and removal of physical interfaces also support pre-provisioning.

o 数据模型应支持预先提供接口配置;也就是说,应该可以配置物理接口硬件不在设备上的接口。建议支持动态添加和删除物理接口的设备也支持预配置。

o The data model should support physical interfaces as well as logical interfaces.

o 数据模型应支持物理接口和逻辑接口。

o The data model should include read-only counters in order to gather statistics for sent and received octets and packets, received packets with errors, and packets that could not be sent due to errors.

o 数据模型应包括只读计数器,以便收集发送和接收的八位字节和数据包、有错误的接收数据包以及由于错误而无法发送的数据包的统计信息。

3. Interfaces Data Model
3. 接口数据模型

This document defines the YANG module "ietf-interfaces", which has the following structure, excluding the deprecated "/interfaces-state" subtree:

本文档定义了模块“ietf接口”,其结构如下,不包括不推荐的“/接口状态”子树:

   module: ietf-interfaces
     +--rw interfaces
        +--rw interface* [name]
           +--rw name                        string
           +--rw description?                string
           +--rw type                        identityref
           +--rw enabled?                    boolean
           +--rw link-up-down-trap-enable?   enumeration {if-mib}?
           +--ro admin-status                enumeration {if-mib}?
           +--ro oper-status                 enumeration
           +--ro last-change?                yang:date-and-time
           +--ro if-index                    int32 {if-mib}?
           +--ro phys-address?               yang:phys-address
           +--ro higher-layer-if*            interface-ref
           +--ro lower-layer-if*             interface-ref
           +--ro speed?                      yang:gauge64
           +--ro statistics
              +--ro discontinuity-time    yang:date-and-time
              +--ro in-octets?            yang:counter64
              +--ro in-unicast-pkts?      yang:counter64
              +--ro in-broadcast-pkts?    yang:counter64
              +--ro in-multicast-pkts?    yang:counter64
              +--ro in-discards?          yang:counter32
              +--ro in-errors?            yang:counter32
              +--ro in-unknown-protos?    yang:counter32
              +--ro out-octets?           yang:counter64
              +--ro out-unicast-pkts?     yang:counter64
              +--ro out-broadcast-pkts?   yang:counter64
              +--ro out-multicast-pkts?   yang:counter64
              +--ro out-discards?         yang:counter32
              +--ro out-errors?           yang:counter32
        
   module: ietf-interfaces
     +--rw interfaces
        +--rw interface* [name]
           +--rw name                        string
           +--rw description?                string
           +--rw type                        identityref
           +--rw enabled?                    boolean
           +--rw link-up-down-trap-enable?   enumeration {if-mib}?
           +--ro admin-status                enumeration {if-mib}?
           +--ro oper-status                 enumeration
           +--ro last-change?                yang:date-and-time
           +--ro if-index                    int32 {if-mib}?
           +--ro phys-address?               yang:phys-address
           +--ro higher-layer-if*            interface-ref
           +--ro lower-layer-if*             interface-ref
           +--ro speed?                      yang:gauge64
           +--ro statistics
              +--ro discontinuity-time    yang:date-and-time
              +--ro in-octets?            yang:counter64
              +--ro in-unicast-pkts?      yang:counter64
              +--ro in-broadcast-pkts?    yang:counter64
              +--ro in-multicast-pkts?    yang:counter64
              +--ro in-discards?          yang:counter32
              +--ro in-errors?            yang:counter32
              +--ro in-unknown-protos?    yang:counter32
              +--ro out-octets?           yang:counter64
              +--ro out-unicast-pkts?     yang:counter64
              +--ro out-broadcast-pkts?   yang:counter64
              +--ro out-multicast-pkts?   yang:counter64
              +--ro out-discards?         yang:counter32
              +--ro out-errors?           yang:counter32
        
3.1. The Interface List
3.1. 接口列表

The data model for interfaces presented in this document uses a flat list of interfaces ("/interfaces/interface"). Each interface in the list is identified by its name. Furthermore, each interface has a mandatory "type" leaf.

本文档中提供的接口数据模型使用接口的平面列表(“/interfaces/interface”)。列表中的每个接口都由其名称标识。此外,每个接口都有一个强制的“类型”叶。

The "iana-if-type" module [RFC7224] defines YANG identities for the interface types in the IANA-maintained "ifType definitions" registry.

“iana if type”模块[RFC7224]在iana维护的“ifType定义”注册表中定义接口类型的标识。

It is expected that interface-type-specific data models augment the interface list and possibly use the "type" leaf to make the augmentation conditional.

预计特定于接口类型的数据模型会增加接口列表,并可能使用“类型”叶来使增加有条件。

As an example of such an interface-type-specific augmentation, consider this YANG snippet. For a more complete example, see Appendix A.

作为这种接口类型特定增强的一个例子,请考虑这个杨氏片段。有关更完整的示例,请参见附录a。

     import interfaces {
         prefix "if";
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     import interfaces {
         prefix "if";
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     augment "/if:interfaces/if:interface" {
         when "if:type = 'ianaift:ethernetCsmacd'";
        
     augment "/if:interfaces/if:interface" {
         when "if:type = 'ianaift:ethernetCsmacd'";
        
         container ethernet {
             leaf duplex {
                 ...
             }
         }
     }
        
         container ethernet {
             leaf duplex {
                 ...
             }
         }
     }
        

For system-controlled interfaces, the "name" is the device-specific name of the interface.

对于系统控制接口,“名称”是接口的设备特定名称。

If the device supports arbitrarily named user-controlled interfaces, then the server will advertise the "arbitrary-names" feature. If the server does not advertise this feature, the names of user-controlled interfaces MUST match the device's naming scheme. How a client can learn the naming scheme of such devices is outside the scope of this document. See Appendices F.1 and F.2 for examples.

如果设备支持任意命名的用户控制接口,则服务器将公布“任意名称”功能。如果服务器未公布此功能,则用户控制接口的名称必须与设备的命名方案匹配。客户如何了解此类设备的命名方案超出了本文档的范围。示例见附录F.1和F.2。

When a system-controlled interface is created in the operational state by the system, the system tries to apply the interface configuration in the intended configuration with the same name as the new interface. If no such interface configuration is found, or if the configured type does not match the real interface type, the system creates the interface without applying explicit configuration.

当系统在运行状态下创建系统控制的接口时,系统会尝试在预期配置中应用与新接口同名的接口配置。如果未找到此类接口配置,或者如果配置的类型与实际接口类型不匹配,则系统将在不应用显式配置的情况下创建接口。

When a user-controlled interface is created, the configuration determines the name of the interface.

创建用户控制的界面时,配置将确定界面的名称。

Depending on the operating system and the physical attachment point to which a network interface may be attached or removed, it may be impossible for an implementation to provide predictable and consistent names for system-controlled interfaces across insertion/ removal cycles as well as in anticipation of initial insertion. The ability to provide configurations for such interfaces is therefore dependent on the implementation and cannot be assumed in all cases.

根据操作系统和可连接或移除网络接口的物理连接点,实现可能不可能在插入/移除周期以及预期初始插入时为系统控制接口提供可预测和一致的名称。因此,为此类接口提供配置的能力取决于实现,不能在所有情况下都假定。

3.2. Interface References
3.2. 接口引用

An interface is identified by its name, which is unique within the server. This property is captured in the "interface-ref" typedef, which other YANG modules SHOULD use when they need to reference an interface.

接口由其名称标识,该名称在服务器中是唯一的。此属性在“interface ref”typedef中捕获,其他模块在需要引用接口时应使用该属性。

3.3. Interface Layering
3.3. 界面分层

There is no generic mechanism for how an interface is configured to be layered on top of some other interface. It is expected that interface-type-specific models define their own data nodes for interface layering by using "interface-ref" types to reference lower layers.

对于如何将接口配置为在其他接口之上分层,没有通用机制。预期特定于接口类型的模型通过使用“interface ref”类型引用较低的层来定义自己的接口分层数据节点。

Below is an example of a model with such nodes. For a more complete example, see Appendix B.

下面是具有此类节点的模型示例。有关更完整的示例,请参见附录B。

     import interfaces {
         prefix "if";
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     import interfaces {
         prefix "if";
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     augment "/if:interfaces/if:interface" {
         when "if:type = 'ianaift:ieee8023adLag'";
        
     augment "/if:interfaces/if:interface" {
         when "if:type = 'ianaift:ieee8023adLag'";
        
         leaf-list slave-if {
             type if:interface-ref;
             must "/if:interfaces/if:interface[if:name = current()]"
                + "/if:type = 'ianaift:ethernetCsmacd'" {
                 description
                     "The type of a slave interface must be
                      'ethernetCsmacd'.";
             }
         }
         // other bonding config params, failover times, etc.
     }
        
         leaf-list slave-if {
             type if:interface-ref;
             must "/if:interfaces/if:interface[if:name = current()]"
                + "/if:type = 'ianaift:ethernetCsmacd'" {
                 description
                     "The type of a slave interface must be
                      'ethernetCsmacd'.";
             }
         }
         // other bonding config params, failover times, etc.
     }
        

While the interface layering is configured in interface-type-specific models, two generic state data leaf-lists, "higher-layer-if" and "lower-layer-if", represent a read-only view of the interface layering hierarchy.

虽然接口分层是在接口类型特定的模型中配置的,但两个通用状态数据叶列表“较高层if”和“较低层if”表示接口分层层次结构的只读视图。

4. Relationship to the IF-MIB
4. 与IF-MIB的关系

If the device implements the IF-MIB [RFC2863], each entry in the "/interfaces/interface" list in the operational state is typically mapped to one ifEntry. The "if-index" leaf MUST contain the value of the corresponding ifEntry's ifIndex.

如果设备实现了If-MIB[RFC2863],则处于运行状态的“/interfaces/interface”列表中的每个条目通常映射到一个ifEntry。“if index”叶必须包含相应ifEntry的ifIndex值。

In most cases, the "name" of an "/interfaces/interface" entry is mapped to ifName. The IF-MIB allows two different ifEntries to have the same ifName. Devices that support this feature and also support the data model defined in this document cannot have a 1-1 mapping between the "name" leaf and ifName.

在大多数情况下,“/interfaces/interface”条目的“name”映射到ifName。IF-MIB允许两个不同的IFENTRY具有相同的ifName。支持此功能并支持本文档中定义的数据模型的设备不能在“name”叶和ifName之间具有1-1映射。

The configured "description" of an "interface" has traditionally been mapped to ifAlias in some implementations. This document allows this mapping, but implementers should be aware of the differences in the value space and persistence for these objects. See the YANG module definition of the leaf "description" in Section 5 for details.

在某些实现中,“接口”的配置“描述”传统上映射到IFALIA。本文档允许这种映射,但是实现者应该知道这些对象在值空间和持久性方面的差异。有关详细信息,请参见第5节叶“说明”的模块定义。

The IF-MIB also defines the writable object ifPromiscuousMode. Since this object typically is not implemented as a configuration object by SNMP agents, it is not mapped to the "ietf-interfaces" module.

IF-MIB还定义了可写对象IFPROMISCUUSMODE。由于SNMP代理通常不会将此对象实现为配置对象,因此不会将其映射到“ietf接口”模块。

The ifMtu object from the IF-MIB is not mapped to the "ietf-interfaces" module. It is expected that interface-type-specific YANG modules provide interface-type-specific MTU leafs by augmenting the "ietf-interfaces" model.

IF-MIB中的ifMtu对象未映射到“ietf接口”模块。预计特定于接口类型的模块通过扩展“ietf接口”模型提供特定于接口类型的MTU LEAF。

There are a number of counters in the IF-MIB that exist in two versions: one with 32 bits and one with 64 bits. The 64-bit versions were added to support high-speed interfaces with a data rate greater than 20,000,000 bits/second. Today's implementations generally support such high-speed interfaces; hence, only 64-bit counters are provided in this data model. Note that the server that implements this module and an SNMP agent may differ in the time granularity in which they provide access to the counters. For example, it is common that SNMP implementations cache counter values for some time.

IF-MIB中有许多计数器存在于两个版本中:一个是32位的,另一个是64位的。添加64位版本是为了支持数据速率大于20000000位/秒的高速接口。今天的实现通常支持这种高速接口;因此,此数据模型中仅提供64位计数器。请注意,实现此模块的服务器和SNMP代理在提供对计数器的访问的时间粒度上可能有所不同。例如,SNMP实现通常会将计数器值缓存一段时间。

The objects ifDescr and ifConnectorPresent from the IF-MIB are not mapped to the "ietf-interfaces" module.

来自IF-MIB的对象ifDescr和ifConnectorPresent未映射到“ietf接口”模块。

The following table lists the YANG data nodes with corresponding objects in the IF-MIB.

下表列出了IF-MIB中具有相应对象的数据节点。

   +--------------------------------------+----------------------------+
   | YANG data node in                    | IF-MIB object              |
   | /interfaces/interface                |                            |
   +--------------------------------------+----------------------------+
   | name                                 | ifName                     |
   | type                                 | ifType                     |
   | description                          | ifAlias                    |
   | admin-status                         | ifAdminStatus              |
   | oper-status                          | ifOperStatus               |
   | last-change                          | ifLastChange               |
   | if-index                             | ifIndex                    |
   | link-up-down-trap-enable             | ifLinkUpDownTrapEnable     |
   | phys-address                         | ifPhysAddress              |
   | higher-layer-if and lower-layer-if   | ifStackTable               |
   | speed                                | ifSpeed and ifHighSpeed    |
   | discontinuity-time                   | ifCounterDiscontinuityTime |
   | in-octets                            | ifHCInOctets               |
   | in-unicast-pkts                      | ifHCInUcastPkts            |
   | in-broadcast-pkts                    | ifHCInBroadcastPkts        |
   | in-multicast-pkts                    | ifHCInMulticastPkts        |
   | in-discards                          | ifInDiscards               |
   | in-errors                            | ifInErrors                 |
   | in-unknown-protos                    | ifInUnknownProtos          |
   | out-octets                           | ifHCOutOctets              |
   | out-unicast-pkts                     | ifHCOutUcastPkts           |
   | out-broadcast-pkts                   | ifHCOutBroadcastPkts       |
   | out-multicast-pkts                   | ifHCOutMulticastPkts       |
   | out-discards                         | ifOutDiscards              |
   | out-errors                           | ifOutErrors                |
   +--------------------------------------+----------------------------+
        
   +--------------------------------------+----------------------------+
   | YANG data node in                    | IF-MIB object              |
   | /interfaces/interface                |                            |
   +--------------------------------------+----------------------------+
   | name                                 | ifName                     |
   | type                                 | ifType                     |
   | description                          | ifAlias                    |
   | admin-status                         | ifAdminStatus              |
   | oper-status                          | ifOperStatus               |
   | last-change                          | ifLastChange               |
   | if-index                             | ifIndex                    |
   | link-up-down-trap-enable             | ifLinkUpDownTrapEnable     |
   | phys-address                         | ifPhysAddress              |
   | higher-layer-if and lower-layer-if   | ifStackTable               |
   | speed                                | ifSpeed and ifHighSpeed    |
   | discontinuity-time                   | ifCounterDiscontinuityTime |
   | in-octets                            | ifHCInOctets               |
   | in-unicast-pkts                      | ifHCInUcastPkts            |
   | in-broadcast-pkts                    | ifHCInBroadcastPkts        |
   | in-multicast-pkts                    | ifHCInMulticastPkts        |
   | in-discards                          | ifInDiscards               |
   | in-errors                            | ifInErrors                 |
   | in-unknown-protos                    | ifInUnknownProtos          |
   | out-octets                           | ifHCOutOctets              |
   | out-unicast-pkts                     | ifHCOutUcastPkts           |
   | out-broadcast-pkts                   | ifHCOutBroadcastPkts       |
   | out-multicast-pkts                   | ifHCOutMulticastPkts       |
   | out-discards                         | ifOutDiscards              |
   | out-errors                           | ifOutErrors                |
   +--------------------------------------+----------------------------+
        

YANG Data Nodes and Related IF-MIB Objects

数据节点和相关的IF-MIB对象

5. Interfaces YANG Module
5. 杨氏模块接口

This YANG module imports typedefs from [RFC6991].

此模块从[RFC6991]导入typedefs。

   <CODE BEGINS> file "ietf-interfaces@2018-02-20.yang"
        
   <CODE BEGINS> file "ietf-interfaces@2018-02-20.yang"
        
   module ietf-interfaces {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
     prefix if;
        
   module ietf-interfaces {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
     prefix if;
        
     import ietf-yang-types {
       prefix yang;
     }
        
     import ietf-yang-types {
       prefix yang;
     }
        

organization "IETF NETMOD (Network Modeling) Working Group";

组织“IETF NETMOD(网络建模)工作组”;

     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>
        
        Editor:   Martin Bjorklund
                  <mailto:mbj@tail-f.com>";
        
        Editor:   Martin Bjorklund
                  <mailto:mbj@tail-f.com>";
        

description "This module contains a collection of YANG definitions for managing network interfaces.

description“此模块包含用于管理网络接口的定义集合。

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

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

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

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

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

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

     revision 2018-02-20 {
       description
         "Updated to support NMDA.";
       reference
         "RFC 8343: A YANG Data Model for Interface Management";
     }
        
     revision 2018-02-20 {
       description
         "Updated to support NMDA.";
       reference
         "RFC 8343: A YANG Data Model for Interface Management";
     }
        
     revision 2014-05-08 {
       description
         "Initial revision.";
       reference
         "RFC 7223: A YANG Data Model for Interface Management";
     }
        
     revision 2014-05-08 {
       description
         "Initial revision.";
       reference
         "RFC 7223: A YANG Data Model for Interface Management";
     }
        
     /*
      * Typedefs
      */
        
     /*
      * Typedefs
      */
        
     typedef interface-ref {
       type leafref {
         path "/if:interfaces/if:interface/if:name";
        
     typedef interface-ref {
       type leafref {
         path "/if:interfaces/if:interface/if:name";
        
       }
       description
         "This type is used by data models that need to reference
          interfaces.";
     }
        
       }
       description
         "This type is used by data models that need to reference
          interfaces.";
     }
        
     /*
      * Identities
      */
        
     /*
      * Identities
      */
        
     identity interface-type {
       description
         "Base identity from which specific interface types are
          derived.";
     }
        
     identity interface-type {
       description
         "Base identity from which specific interface types are
          derived.";
     }
        
     /*
      * Features
      */
        
     /*
      * Features
      */
        
     feature arbitrary-names {
       description
         "This feature indicates that the device allows user-controlled
          interfaces to be named arbitrarily.";
     }
     feature pre-provisioning {
       description
         "This feature indicates that the device supports
          pre-provisioning of interface configuration, i.e., it is
          possible to configure an interface whose physical interface
          hardware is not present on the device.";
     }
     feature if-mib {
       description
         "This feature indicates that the device implements
          the IF-MIB.";
       reference
         "RFC 2863: The Interfaces Group MIB";
     }
        
     feature arbitrary-names {
       description
         "This feature indicates that the device allows user-controlled
          interfaces to be named arbitrarily.";
     }
     feature pre-provisioning {
       description
         "This feature indicates that the device supports
          pre-provisioning of interface configuration, i.e., it is
          possible to configure an interface whose physical interface
          hardware is not present on the device.";
     }
     feature if-mib {
       description
         "This feature indicates that the device implements
          the IF-MIB.";
       reference
         "RFC 2863: The Interfaces Group MIB";
     }
        
     /*
      * Data nodes
      */
        
     /*
      * Data nodes
      */
        
     container interfaces {
       description
         "Interface parameters.";
        
     container interfaces {
       description
         "Interface parameters.";
        
       list interface {
         key "name";
        
       list interface {
         key "name";
        

description "The list of interfaces on the device.

description“设备上的接口列表。

The status of an interface is available in this list in the operational state. If the configuration of a system-controlled interface cannot be used by the system (e.g., the interface hardware present does not match the interface type), then the configuration is not applied to the system-controlled interface shown in the operational state. If the configuration of a user-controlled interface cannot be used by the system, the configured interface is not instantiated in the operational state.

在操作状态下,界面的状态在此列表中可用。如果系统无法使用系统控制接口的配置(例如,存在的接口硬件与接口类型不匹配),则该配置不会应用于运行状态下显示的系统控制接口。如果系统无法使用用户控制接口的配置,则配置的接口不会在操作状态下实例化。

System-controlled interfaces created by the system are always present in this list in the operational state, whether or not they are configured.";

由系统创建的系统控制接口在运行状态下始终存在于该列表中,无论它们是否已配置。“;

        leaf name {
           type string;
           description
             "The name of the interface.
        
        leaf name {
           type string;
           description
             "The name of the interface.
        

A device MAY restrict the allowed values for this leaf, possibly depending on the type of the interface. For system-controlled interfaces, this leaf is the device-specific name of the interface.

设备可能会限制此叶的允许值,这可能取决于接口的类型。对于系统控制接口,此叶是接口的设备特定名称。

If a client tries to create configuration for a system-controlled interface that is not present in the operational state, the server MAY reject the request if the implementation does not support pre-provisioning of interfaces or if the name refers to an interface that can never exist in the system. A Network Configuration Protocol (NETCONF) server MUST reply with an rpc-error with the error-tag 'invalid-value' in this case.

如果客户端尝试为不在操作状态下的系统控制接口创建配置,则如果实现不支持接口预配置,或者如果名称指的是系统中永远不可能存在的接口,则服务器可能会拒绝该请求。在这种情况下,网络配置协议(NETCONF)服务器必须使用带有错误标记“无效值”的rpc错误进行回复。

If the device supports pre-provisioning of interface configuration, the 'pre-provisioning' feature is advertised.

如果设备支持预设置接口配置,则会公布“预设置”功能。

If the device allows arbitrarily named user-controlled interfaces, the 'arbitrary-names' feature is advertised.

如果设备允许使用任意命名的用户控制界面,“任意名称”功能将被公布。

When a configured user-controlled interface is created by the system, it is instantiated with the same name in the operational state.

当系统创建已配置的用户控制界面时,在操作状态下,将使用相同的名称对其进行实例化。

              A server implementation MAY map this leaf to the ifName
              MIB object.  Such an implementation needs to use some
              mechanism to handle the differences in size and characters
              allowed between this leaf and ifName.  The definition of
              such a mechanism is outside the scope of this document.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifName";
         }
        
              A server implementation MAY map this leaf to the ifName
              MIB object.  Such an implementation needs to use some
              mechanism to handle the differences in size and characters
              allowed between this leaf and ifName.  The definition of
              such a mechanism is outside the scope of this document.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifName";
         }
        
         leaf description {
           type string;
           description
             "A textual description of the interface.
        
         leaf description {
           type string;
           description
             "A textual description of the interface.
        

A server implementation MAY map this leaf to the ifAlias MIB object. Such an implementation needs to use some mechanism to handle the differences in size and characters allowed between this leaf and ifAlias. The definition of such a mechanism is outside the scope of this document.

服务器实现可以将此叶映射到ifAlias MIB对象。这样的实现需要使用某种机制来处理此leaf和ifAlias之间允许的大小和字符差异。这种机制的定义不在本文件的范围之内。

              Since ifAlias is defined to be stored in non-volatile
              storage, the MIB implementation MUST map ifAlias to the
              value of 'description' in the persistently stored
              configuration.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAlias";
         }
        
              Since ifAlias is defined to be stored in non-volatile
              storage, the MIB implementation MUST map ifAlias to the
              value of 'description' in the persistently stored
              configuration.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAlias";
         }
        
         leaf type {
           type identityref {
             base interface-type;
           }
           mandatory true;
           description
             "The type of the interface.
        
         leaf type {
           type identityref {
             base interface-type;
           }
           mandatory true;
           description
             "The type of the interface.
        

When an interface entry is created, a server MAY initialize the type leaf with a valid value, e.g., if it is possible to derive the type from the name of the interface.

创建接口条目时,服务器可以使用有效值初始化类型叶,例如,如果可以从接口名称派生类型。

If a client tries to set the type of an interface to a value that can never be used by the system, e.g., if the type is not supported or if the type does not match the

如果客户端试图将接口类型设置为系统永远无法使用的值,例如,如果不支持该类型,或者如果该类型与

              name of the interface, the server MUST reject the request.
              A NETCONF server MUST reply with an rpc-error with the
              error-tag 'invalid-value' in this case.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifType";
         }
        
              name of the interface, the server MUST reject the request.
              A NETCONF server MUST reply with an rpc-error with the
              error-tag 'invalid-value' in this case.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifType";
         }
        
         leaf enabled {
           type boolean;
           default "true";
           description
             "This leaf contains the configured, desired state of the
              interface.
        
         leaf enabled {
           type boolean;
           default "true";
           description
             "This leaf contains the configured, desired state of the
              interface.
        

Systems that implement the IF-MIB use the value of this leaf in the intended configuration to set IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry has been initialized, as described in RFC 2863.

如RFC 2863中所述,实现IF-MIB的系统使用预期配置中此叶的值,在初始化ifEntry后将IF-MIB.ifAdminStatus设置为“向上”或“向下”。

              Changes in this leaf in the intended configuration are
              reflected in ifAdminStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
         }
        
              Changes in this leaf in the intended configuration are
              reflected in ifAdminStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
         }
        
         leaf link-up-down-trap-enable {
           if-feature if-mib;
           type enumeration {
             enum enabled {
               value 1;
               description
                 "The device will generate linkUp/linkDown SNMP
                  notifications for this interface.";
             }
             enum disabled {
               value 2;
               description
                 "The device will not generate linkUp/linkDown SNMP
                  notifications for this interface.";
             }
           }
           description
             "Controls whether linkUp/linkDown SNMP notifications
              should be generated for this interface.
        
         leaf link-up-down-trap-enable {
           if-feature if-mib;
           type enumeration {
             enum enabled {
               value 1;
               description
                 "The device will generate linkUp/linkDown SNMP
                  notifications for this interface.";
             }
             enum disabled {
               value 2;
               description
                 "The device will not generate linkUp/linkDown SNMP
                  notifications for this interface.";
             }
           }
           description
             "Controls whether linkUp/linkDown SNMP notifications
              should be generated for this interface.
        
              If this node is not configured, the value 'enabled' is
              operationally used by the server for interfaces that do
              not operate on top of any other interface (i.e., there are
              no 'lower-layer-if' entries), and 'disabled' otherwise.";
           reference
             "RFC 2863: The Interfaces Group MIB -
                        ifLinkUpDownTrapEnable";
         }
        
              If this node is not configured, the value 'enabled' is
              operationally used by the server for interfaces that do
              not operate on top of any other interface (i.e., there are
              no 'lower-layer-if' entries), and 'disabled' otherwise.";
           reference
             "RFC 2863: The Interfaces Group MIB -
                        ifLinkUpDownTrapEnable";
         }
        
         leaf admin-status {
           if-feature if-mib;
           type enumeration {
             enum up {
               value 1;
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
               description
                 "Not ready to pass packets and not in some test mode.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.";
             }
           }
           config false;
           mandatory true;
           description
             "The desired state of the interface.
        
         leaf admin-status {
           if-feature if-mib;
           type enumeration {
             enum up {
               value 1;
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
               description
                 "Not ready to pass packets and not in some test mode.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.";
             }
           }
           config false;
           mandatory true;
           description
             "The desired state of the interface.
        
              This leaf has the same read semantics as ifAdminStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
         }
        
              This leaf has the same read semantics as ifAdminStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
         }
        
         leaf oper-status {
           type enumeration {
             enum up {
               value 1;
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
        
         leaf oper-status {
           type enumeration {
             enum up {
               value 1;
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
        
               description
                 "The interface does not pass any packets.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.  No operational packets can
                  be passed.";
             }
             enum unknown {
               value 4;
               description
                 "Status cannot be determined for some reason.";
             }
             enum dormant {
               value 5;
               description
                 "Waiting for some external event.";
             }
             enum not-present {
               value 6;
               description
                 "Some component (typically hardware) is missing.";
             }
             enum lower-layer-down {
               value 7;
               description
                 "Down due to state of lower-layer interface(s).";
             }
           }
           config false;
           mandatory true;
           description
             "The current operational state of the interface.
        
               description
                 "The interface does not pass any packets.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.  No operational packets can
                  be passed.";
             }
             enum unknown {
               value 4;
               description
                 "Status cannot be determined for some reason.";
             }
             enum dormant {
               value 5;
               description
                 "Waiting for some external event.";
             }
             enum not-present {
               value 6;
               description
                 "Some component (typically hardware) is missing.";
             }
             enum lower-layer-down {
               value 7;
               description
                 "Down due to state of lower-layer interface(s).";
             }
           }
           config false;
           mandatory true;
           description
             "The current operational state of the interface.
        
              This leaf has the same semantics as ifOperStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifOperStatus";
         }
        
              This leaf has the same semantics as ifOperStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifOperStatus";
         }
        
         leaf last-change {
           type yang:date-and-time;
           config false;
           description
             "The time the interface entered its current operational
              state.  If the current state was entered prior to the
              last re-initialization of the local network management
              subsystem, then this node is not present.";
        
         leaf last-change {
           type yang:date-and-time;
           config false;
           description
             "The time the interface entered its current operational
              state.  If the current state was entered prior to the
              last re-initialization of the local network management
              subsystem, then this node is not present.";
        
           reference
             "RFC 2863: The Interfaces Group MIB - ifLastChange";
         }
        
           reference
             "RFC 2863: The Interfaces Group MIB - ifLastChange";
         }
        
         leaf if-index {
           if-feature if-mib;
           type int32 {
             range "1..2147483647";
           }
           config false;
           mandatory true;
           description
             "The ifIndex value for the ifEntry represented by this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifIndex";
         }
        
         leaf if-index {
           if-feature if-mib;
           type int32 {
             range "1..2147483647";
           }
           config false;
           mandatory true;
           description
             "The ifIndex value for the ifEntry represented by this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifIndex";
         }
        
         leaf phys-address {
           type yang:phys-address;
           config false;
           description
             "The interface's address at its protocol sub-layer.  For
              example, for an 802.x interface, this object normally
              contains a Media Access Control (MAC) address.  The
              interface's media-specific modules must define the bit
              and byte ordering and the format of the value of this
              object.  For interfaces that do not have such an address
              (e.g., a serial line), this node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
         }
        
         leaf phys-address {
           type yang:phys-address;
           config false;
           description
             "The interface's address at its protocol sub-layer.  For
              example, for an 802.x interface, this object normally
              contains a Media Access Control (MAC) address.  The
              interface's media-specific modules must define the bit
              and byte ordering and the format of the value of this
              object.  For interfaces that do not have such an address
              (e.g., a serial line), this node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
         }
        
         leaf-list higher-layer-if {
           type interface-ref;
           config false;
           description
             "A list of references to interfaces layered on top of this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf-list higher-layer-if {
           type interface-ref;
           config false;
           description
             "A list of references to interfaces layered on top of this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf-list lower-layer-if {
           type interface-ref;
           config false;
        
         leaf-list lower-layer-if {
           type interface-ref;
           config false;
        
           description
             "A list of references to interfaces layered underneath this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
           description
             "A list of references to interfaces layered underneath this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf speed {
           type yang:gauge64;
           units "bits/second";
           config false;
           description
               "An estimate of the interface's current bandwidth in bits
                per second.  For interfaces that do not vary in
                bandwidth or for those where no accurate estimation can
                be made, this node should contain the nominal bandwidth.
                For interfaces that have no concept of bandwidth, this
                node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB -
                        ifSpeed, ifHighSpeed";
         }
        
         leaf speed {
           type yang:gauge64;
           units "bits/second";
           config false;
           description
               "An estimate of the interface's current bandwidth in bits
                per second.  For interfaces that do not vary in
                bandwidth or for those where no accurate estimation can
                be made, this node should contain the nominal bandwidth.
                For interfaces that have no concept of bandwidth, this
                node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB -
                        ifSpeed, ifHighSpeed";
         }
        
         container statistics {
           config false;
           description
             "A collection of interface-related statistics objects.";
        
         container statistics {
           config false;
           description
             "A collection of interface-related statistics objects.";
        
           leaf discontinuity-time {
             type yang:date-and-time;
             mandatory true;
             description
               "The time on the most recent occasion at which any one or
                more of this interface's counters suffered a
                discontinuity.  If no such discontinuities have occurred
                since the last re-initialization of the local management
                subsystem, then this node contains the time the local
                management subsystem re-initialized itself.";
           }
        
           leaf discontinuity-time {
             type yang:date-and-time;
             mandatory true;
             description
               "The time on the most recent occasion at which any one or
                more of this interface's counters suffered a
                discontinuity.  If no such discontinuities have occurred
                since the last re-initialization of the local management
                subsystem, then this node contains the time the local
                management subsystem re-initialized itself.";
           }
        
           leaf in-octets {
             type yang:counter64;
             description
               "The total number of octets received on the interface,
                including framing characters.
        
           leaf in-octets {
             type yang:counter64;
             description
               "The total number of octets received on the interface,
                including framing characters.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
           }
        
           leaf in-unicast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were not addressed to a
                multicast or broadcast address at this sub-layer.
        
           leaf in-unicast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were not addressed to a
                multicast or broadcast address at this sub-layer.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
           }
        
           leaf in-broadcast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a broadcast
                address at this sub-layer.
        
           leaf in-broadcast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a broadcast
                address at this sub-layer.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInBroadcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInBroadcastPkts";
           }
        
           leaf in-multicast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a multicast
                address at this sub-layer.  For a MAC-layer protocol,
                this includes both Group and Functional addresses.
        
           leaf in-multicast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a multicast
                address at this sub-layer.  For a MAC-layer protocol,
                this includes both Group and Functional addresses.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInMulticastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInMulticastPkts";
           }
        
           leaf in-discards {
             type yang:counter32;
             description
               "The number of inbound packets that were chosen to be
                discarded even though no errors had been detected to
                prevent their being deliverable to a higher-layer
                protocol.  One possible reason for discarding such a
                packet could be to free up buffer space.
        
           leaf in-discards {
             type yang:counter32;
             description
               "The number of inbound packets that were chosen to be
                discarded even though no errors had been detected to
                prevent their being deliverable to a higher-layer
                protocol.  One possible reason for discarding such a
                packet could be to free up buffer space.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInDiscards";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInDiscards";
           }
        
           leaf in-errors {
             type yang:counter32;
             description
               "For packet-oriented interfaces, the number of inbound
                packets that contained errors preventing them from being
                deliverable to a higher-layer protocol.  For character-
                oriented or fixed-length interfaces, the number of
                inbound transmission units that contained errors
                preventing them from being deliverable to a higher-layer
                protocol.
        
           leaf in-errors {
             type yang:counter32;
             description
               "For packet-oriented interfaces, the number of inbound
                packets that contained errors preventing them from being
                deliverable to a higher-layer protocol.  For character-
                oriented or fixed-length interfaces, the number of
                inbound transmission units that contained errors
                preventing them from being deliverable to a higher-layer
                protocol.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInErrors";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInErrors";
           }
        
           leaf in-unknown-protos {
             type yang:counter32;
        
           leaf in-unknown-protos {
             type yang:counter32;
        

description "For packet-oriented interfaces, the number of packets received via the interface that were discarded because of an unknown or unsupported protocol. For character-oriented or fixed-length interfaces that support protocol multiplexing, the number of transmission units received via the interface that were discarded because of an unknown or unsupported protocol. For any interface that does not support protocol multiplexing, this counter is not present.

描述“对于面向数据包的接口,指通过接口接收的由于未知或不受支持的协议而被丢弃的数据包数。对于支持协议多路复用的面向字符或固定长度接口,指通过接口接收的由于未知或不受支持的协议而被丢弃的传输单元数。对于不支持协议多路复用的任何接口,此计数器不存在。

                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
           }
        
           leaf out-octets {
             type yang:counter64;
             description
               "The total number of octets transmitted out of the
                interface, including framing characters.
        
           leaf out-octets {
             type yang:counter64;
             description
               "The total number of octets transmitted out of the
                interface, including framing characters.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
           }
        
           leaf out-unicast-pkts {
             type yang:counter64;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were not addressed
                to a multicast or broadcast address at this sub-layer,
                including those that were discarded or not sent.
        
           leaf out-unicast-pkts {
             type yang:counter64;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were not addressed
                to a multicast or broadcast address at this sub-layer,
                including those that were discarded or not sent.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
        

}

}

           leaf out-broadcast-pkts {
             type yang:counter64;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were addressed to a
                broadcast address at this sub-layer, including those
                that were discarded or not sent.
        
           leaf out-broadcast-pkts {
             type yang:counter64;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were addressed to a
                broadcast address at this sub-layer, including those
                that were discarded or not sent.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutBroadcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutBroadcastPkts";
           }
        
           leaf out-multicast-pkts {
             type yang:counter64;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were addressed to a
                multicast address at this sub-layer, including those
                that were discarded or not sent.  For a MAC-layer
                protocol, this includes both Group and Functional
                addresses.
        
           leaf out-multicast-pkts {
             type yang:counter64;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were addressed to a
                multicast address at this sub-layer, including those
                that were discarded or not sent.  For a MAC-layer
                protocol, this includes both Group and Functional
                addresses.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutMulticastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutMulticastPkts";
           }
        
           leaf out-discards {
             type yang:counter32;
             description
               "The number of outbound packets that were chosen to be
                discarded even though no errors had been detected to
                prevent their being transmitted.  One possible reason
                for discarding such a packet could be to free up buffer
                space.
        
           leaf out-discards {
             type yang:counter32;
             description
               "The number of outbound packets that were chosen to be
                discarded even though no errors had been detected to
                prevent their being transmitted.  One possible reason
                for discarding such a packet could be to free up buffer
                space.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
           }
        
           leaf out-errors {
             type yang:counter32;
             description
               "For packet-oriented interfaces, the number of outbound
                packets that could not be transmitted because of errors.
                For character-oriented or fixed-length interfaces, the
                number of outbound transmission units that could not be
                transmitted because of errors.
        
           leaf out-errors {
             type yang:counter32;
             description
               "For packet-oriented interfaces, the number of outbound
                packets that could not be transmitted because of errors.
                For character-oriented or fixed-length interfaces, the
                number of outbound transmission units that could not be
                transmitted because of errors.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutErrors";
           }
         }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutErrors";
           }
         }
        
       }
     }
        
       }
     }
        
     /*
      * Legacy typedefs
      */
        
     /*
      * Legacy typedefs
      */
        
     typedef interface-state-ref {
       type leafref {
         path "/if:interfaces-state/if:interface/if:name";
       }
       status deprecated;
       description
         "This type is used by data models that need to reference
          the operationally present interfaces.";
     }
        
     typedef interface-state-ref {
       type leafref {
         path "/if:interfaces-state/if:interface/if:name";
       }
       status deprecated;
       description
         "This type is used by data models that need to reference
          the operationally present interfaces.";
     }
        
     /*
      * Legacy operational state data nodes
      */
        
     /*
      * Legacy operational state data nodes
      */
        

container interfaces-state {

容器接口状态{

       config false;
       status deprecated;
       description
         "Data nodes for the operational state of interfaces.";
        
       config false;
       status deprecated;
       description
         "Data nodes for the operational state of interfaces.";
        
       list interface {
         key "name";
         status deprecated;
        
       list interface {
         key "name";
         status deprecated;
        

description "The list of interfaces on the device.

description“设备上的接口列表。

System-controlled interfaces created by the system are always present in this list, whether or not they are configured.";

由系统创建的系统控制接口始终存在于该列表中,无论它们是否已配置。“;

         leaf name {
           type string;
           status deprecated;
           description
             "The name of the interface.
        
         leaf name {
           type string;
           status deprecated;
           description
             "The name of the interface.
        
              A server implementation MAY map this leaf to the ifName
              MIB object.  Such an implementation needs to use some
              mechanism to handle the differences in size and characters
              allowed between this leaf and ifName.  The definition of
              such a mechanism is outside the scope of this document.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifName";
         }
        
              A server implementation MAY map this leaf to the ifName
              MIB object.  Such an implementation needs to use some
              mechanism to handle the differences in size and characters
              allowed between this leaf and ifName.  The definition of
              such a mechanism is outside the scope of this document.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifName";
         }
        
         leaf type {
           type identityref {
             base interface-type;
           }
           mandatory true;
           status deprecated;
           description
             "The type of the interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifType";
         }
        
         leaf type {
           type identityref {
             base interface-type;
           }
           mandatory true;
           status deprecated;
           description
             "The type of the interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifType";
         }
        
         leaf admin-status {
           if-feature if-mib;
           type enumeration {
             enum up {
               value 1;
        
         leaf admin-status {
           if-feature if-mib;
           type enumeration {
             enum up {
               value 1;
        
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
               description
                 "Not ready to pass packets and not in some test mode.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.";
             }
           }
           mandatory true;
           status deprecated;
           description
             "The desired state of the interface.
        
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
               description
                 "Not ready to pass packets and not in some test mode.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.";
             }
           }
           mandatory true;
           status deprecated;
           description
             "The desired state of the interface.
        
              This leaf has the same read semantics as ifAdminStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
         }
        
              This leaf has the same read semantics as ifAdminStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
         }
        
         leaf oper-status {
           type enumeration {
             enum up {
               value 1;
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
               description
                 "The interface does not pass any packets.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.  No operational packets can
                  be passed.";
             }
             enum unknown {
               value 4;
               description
                 "Status cannot be determined for some reason.";
             }
             enum dormant {
        
         leaf oper-status {
           type enumeration {
             enum up {
               value 1;
               description
                 "Ready to pass packets.";
             }
             enum down {
               value 2;
               description
                 "The interface does not pass any packets.";
             }
             enum testing {
               value 3;
               description
                 "In some test mode.  No operational packets can
                  be passed.";
             }
             enum unknown {
               value 4;
               description
                 "Status cannot be determined for some reason.";
             }
             enum dormant {
        
               value 5;
               description
                 "Waiting for some external event.";
             }
             enum not-present {
               value 6;
               description
                 "Some component (typically hardware) is missing.";
             }
             enum lower-layer-down {
               value 7;
               description
                 "Down due to state of lower-layer interface(s).";
             }
           }
           mandatory true;
           status deprecated;
           description
             "The current operational state of the interface.
        
               value 5;
               description
                 "Waiting for some external event.";
             }
             enum not-present {
               value 6;
               description
                 "Some component (typically hardware) is missing.";
             }
             enum lower-layer-down {
               value 7;
               description
                 "Down due to state of lower-layer interface(s).";
             }
           }
           mandatory true;
           status deprecated;
           description
             "The current operational state of the interface.
        
              This leaf has the same semantics as ifOperStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifOperStatus";
         }
        
              This leaf has the same semantics as ifOperStatus.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifOperStatus";
         }
        
         leaf last-change {
           type yang:date-and-time;
           status deprecated;
           description
             "The time the interface entered its current operational
              state.  If the current state was entered prior to the
              last re-initialization of the local network management
              subsystem, then this node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifLastChange";
         }
        
         leaf last-change {
           type yang:date-and-time;
           status deprecated;
           description
             "The time the interface entered its current operational
              state.  If the current state was entered prior to the
              last re-initialization of the local network management
              subsystem, then this node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifLastChange";
         }
        
         leaf if-index {
           if-feature if-mib;
           type int32 {
             range "1..2147483647";
           }
           mandatory true;
           status deprecated;
           description
             "The ifIndex value for the ifEntry represented by this
              interface.";
        
         leaf if-index {
           if-feature if-mib;
           type int32 {
             range "1..2147483647";
           }
           mandatory true;
           status deprecated;
           description
             "The ifIndex value for the ifEntry represented by this
              interface.";
        
           reference
             "RFC 2863: The Interfaces Group MIB - ifIndex";
         }
        
           reference
             "RFC 2863: The Interfaces Group MIB - ifIndex";
         }
        
         leaf phys-address {
           type yang:phys-address;
           status deprecated;
           description
             "The interface's address at its protocol sub-layer.  For
              example, for an 802.x interface, this object normally
              contains a Media Access Control (MAC) address.  The
              interface's media-specific modules must define the bit
              and byte ordering and the format of the value of this
              object.  For interfaces that do not have such an address
              (e.g., a serial line), this node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
         }
        
         leaf phys-address {
           type yang:phys-address;
           status deprecated;
           description
             "The interface's address at its protocol sub-layer.  For
              example, for an 802.x interface, this object normally
              contains a Media Access Control (MAC) address.  The
              interface's media-specific modules must define the bit
              and byte ordering and the format of the value of this
              object.  For interfaces that do not have such an address
              (e.g., a serial line), this node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
         }
        
         leaf-list higher-layer-if {
           type interface-state-ref;
           status deprecated;
           description
             "A list of references to interfaces layered on top of this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf-list higher-layer-if {
           type interface-state-ref;
           status deprecated;
           description
             "A list of references to interfaces layered on top of this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf-list lower-layer-if {
           type interface-state-ref;
           status deprecated;
           description
             "A list of references to interfaces layered underneath this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf-list lower-layer-if {
           type interface-state-ref;
           status deprecated;
           description
             "A list of references to interfaces layered underneath this
              interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifStackTable";
         }
        
         leaf speed {
           type yang:gauge64;
           units "bits/second";
           status deprecated;
           description
               "An estimate of the interface's current bandwidth in bits
                per second.  For interfaces that do not vary in
                bandwidth or for those where no accurate estimation can
        
         leaf speed {
           type yang:gauge64;
           units "bits/second";
           status deprecated;
           description
               "An estimate of the interface's current bandwidth in bits
                per second.  For interfaces that do not vary in
                bandwidth or for those where no accurate estimation can
        
                be made, this node should contain the nominal bandwidth.
                For interfaces that have no concept of bandwidth, this
                node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB -
                        ifSpeed, ifHighSpeed";
         }
        
                be made, this node should contain the nominal bandwidth.
                For interfaces that have no concept of bandwidth, this
                node is not present.";
           reference
             "RFC 2863: The Interfaces Group MIB -
                        ifSpeed, ifHighSpeed";
         }
        
         container statistics {
           status deprecated;
           description
             "A collection of interface-related statistics objects.";
        
         container statistics {
           status deprecated;
           description
             "A collection of interface-related statistics objects.";
        
           leaf discontinuity-time {
             type yang:date-and-time;
             mandatory true;
             status deprecated;
             description
               "The time on the most recent occasion at which any one or
                more of this interface's counters suffered a
                discontinuity.  If no such discontinuities have occurred
                since the last re-initialization of the local management
                subsystem, then this node contains the time the local
                management subsystem re-initialized itself.";
           }
        
           leaf discontinuity-time {
             type yang:date-and-time;
             mandatory true;
             status deprecated;
             description
               "The time on the most recent occasion at which any one or
                more of this interface's counters suffered a
                discontinuity.  If no such discontinuities have occurred
                since the last re-initialization of the local management
                subsystem, then this node contains the time the local
                management subsystem re-initialized itself.";
           }
        
           leaf in-octets {
             type yang:counter64;
             status deprecated;
             description
               "The total number of octets received on the interface,
                including framing characters.
        
           leaf in-octets {
             type yang:counter64;
             status deprecated;
             description
               "The total number of octets received on the interface,
                including framing characters.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
           }
        
           leaf in-unicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were not addressed to a
                multicast or broadcast address at this sub-layer.
        
           leaf in-unicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were not addressed to a
                multicast or broadcast address at this sub-layer.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
           }
        
           leaf in-broadcast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a broadcast
                address at this sub-layer.
        
           leaf in-broadcast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a broadcast
                address at this sub-layer.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInBroadcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInBroadcastPkts";
           }
        
           leaf in-multicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a multicast
                address at this sub-layer.  For a MAC-layer protocol,
                this includes both Group and Functional addresses.
        
           leaf in-multicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a multicast
                address at this sub-layer.  For a MAC-layer protocol,
                this includes both Group and Functional addresses.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInMulticastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInMulticastPkts";
           }
        
           leaf in-discards {
             type yang:counter32;
             status deprecated;
        
           leaf in-discards {
             type yang:counter32;
             status deprecated;
        

description "The number of inbound packets that were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space.

description“即使未检测到任何错误,仍选择丢弃的入站数据包的数量,以防止其可交付到更高层协议。丢弃此类数据包的一个可能原因可能是释放缓冲区空间。

                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInDiscards";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInDiscards";
           }
        
           leaf in-errors {
             type yang:counter32;
             status deprecated;
             description
               "For packet-oriented interfaces, the number of inbound
                packets that contained errors preventing them from being
                deliverable to a higher-layer protocol.  For character-
                oriented or fixed-length interfaces, the number of
                inbound transmission units that contained errors
                preventing them from being deliverable to a higher-layer
                protocol.
        
           leaf in-errors {
             type yang:counter32;
             status deprecated;
             description
               "For packet-oriented interfaces, the number of inbound
                packets that contained errors preventing them from being
                deliverable to a higher-layer protocol.  For character-
                oriented or fixed-length interfaces, the number of
                inbound transmission units that contained errors
                preventing them from being deliverable to a higher-layer
                protocol.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInErrors";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInErrors";
           }
        
           leaf in-unknown-protos {
             type yang:counter32;
             status deprecated;
             description
               "For packet-oriented interfaces, the number of packets
                received via the interface that were discarded because
                of an unknown or unsupported protocol.  For
                character-oriented or fixed-length interfaces that
                support protocol multiplexing, the number of
                transmission units received via the interface that were
                discarded because of an unknown or unsupported protocol.
                For any interface that does not support protocol
                multiplexing, this counter is not present.
        
           leaf in-unknown-protos {
             type yang:counter32;
             status deprecated;
             description
               "For packet-oriented interfaces, the number of packets
                received via the interface that were discarded because
                of an unknown or unsupported protocol.  For
                character-oriented or fixed-length interfaces that
                support protocol multiplexing, the number of
                transmission units received via the interface that were
                discarded because of an unknown or unsupported protocol.
                For any interface that does not support protocol
                multiplexing, this counter is not present.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
           }
        
           leaf out-octets {
             type yang:counter64;
             status deprecated;
             description
               "The total number of octets transmitted out of the
                interface, including framing characters.
        
           leaf out-octets {
             type yang:counter64;
             status deprecated;
             description
               "The total number of octets transmitted out of the
                interface, including framing characters.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
           }
        
           leaf out-unicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were not addressed
                to a multicast or broadcast address at this sub-layer,
                including those that were discarded or not sent.
        
           leaf out-unicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were not addressed
                to a multicast or broadcast address at this sub-layer,
                including those that were discarded or not sent.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
           }
        
           leaf out-broadcast-pkts {
             type yang:counter64;
             status deprecated;
        
           leaf out-broadcast-pkts {
             type yang:counter64;
             status deprecated;
        

description "The total number of packets that higher-level protocols requested be transmitted and that were addressed to a broadcast address at this sub-layer, including those that were discarded or not sent.

description“高级协议请求传输的数据包总数,以及发送到该子层广播地址的数据包总数,包括被丢弃或未发送的数据包。

                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutBroadcastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutBroadcastPkts";
           }
        
           leaf out-multicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were addressed to a
                multicast address at this sub-layer, including those
                that were discarded or not sent.  For a MAC-layer
                protocol, this includes both Group and Functional
                addresses.
        
           leaf out-multicast-pkts {
             type yang:counter64;
             status deprecated;
             description
               "The total number of packets that higher-level protocols
                requested be transmitted and that were addressed to a
                multicast address at this sub-layer, including those
                that were discarded or not sent.  For a MAC-layer
                protocol, this includes both Group and Functional
                addresses.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutMulticastPkts";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCOutMulticastPkts";
           }
        
           leaf out-discards {
             type yang:counter32;
             status deprecated;
             description
               "The number of outbound packets that were chosen to be
                discarded even though no errors had been detected to
                prevent their being transmitted.  One possible reason
                for discarding such a packet could be to free up buffer
                space.
        
           leaf out-discards {
             type yang:counter32;
             status deprecated;
             description
               "The number of outbound packets that were chosen to be
                discarded even though no errors had been detected to
                prevent their being transmitted.  One possible reason
                for discarding such a packet could be to free up buffer
                space.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
           }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
           }
        
           leaf out-errors {
             type yang:counter32;
             status deprecated;
             description
               "For packet-oriented interfaces, the number of outbound
                packets that could not be transmitted because of errors.
                For character-oriented or fixed-length interfaces, the
                number of outbound transmission units that could not be
                transmitted because of errors.
        
           leaf out-errors {
             type yang:counter32;
             status deprecated;
             description
               "For packet-oriented interfaces, the number of outbound
                packets that could not be transmitted because of errors.
                For character-oriented or fixed-length interfaces, the
                number of outbound transmission units that could not be
                transmitted because of errors.
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutErrors";
           }
         }
       }
     }
   }
        
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifOutErrors";
           }
         }
       }
     }
   }
        

<CODE ENDS>

<代码结束>

6. IANA Considerations
6. IANA考虑

This document registers a URI in the "IETF XML Registry" [RFC3688]. Following the format in RFC 3688, the following registration has been made.

本文档在“IETF XML注册表”[RFC3688]中注册URI。按照RFC 3688中的格式,进行了以下注册。

     URI: urn:ietf:params:xml:ns:yang:ietf-interfaces
        
     URI: urn:ietf:params:xml:ns:yang:ietf-interfaces
        

Registrant Contact: The IESG.

注册人联系人:IESG。

XML: N/A, the requested URI is an XML namespace.

XML:N/A,请求的URI是一个XML名称空间。

This document registers a YANG module in the "YANG Module Names" registry [RFC6020].

本文件在“阳模块名称”注册表[RFC6020]中注册阳模块。

     name:         ietf-interfaces
     namespace:    urn:ietf:params:xml:ns:yang:ietf-interfaces
     prefix:       if
     reference:    RFC 8343
        
     name:         ietf-interfaces
     namespace:    urn:ietf:params:xml:ns:yang:ietf-interfaces
     prefix:       if
     reference:    RFC 8343
        
7. Security Considerations
7. 安全考虑

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

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

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

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

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

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

/interfaces/interface: This list specifies the configured interfaces on a device. Unauthorized access to this list could cause the device to ignore packets it should receive and process.

/接口/接口:此列表指定设备上配置的接口。未经授权访问此列表可能会导致设备忽略其应接收和处理的数据包。

/interfaces/interface/enabled: This leaf controls whether or not an interface is enabled. Unauthorized access to this leaf could cause the device to ignore packets it should receive and process.

/接口/接口/已启用:此叶控制接口是否已启用。未经授权访问此叶可能会导致设备忽略其应接收和处理的数据包。

8. References
8. 工具书类
8.1. Normative References
8.1. 规范性引用文件

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

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

[RFC2863] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", RFC 2863, DOI 10.17487/RFC2863, June 2000, <https://www.rfc-editor.org/info/rfc2863>.

[RFC2863]McCloghrie,K.和F.Kastenholz,“接口组MIB”,RFC 2863,DOI 10.17487/RFC2863,2000年6月<https://www.rfc-editor.org/info/rfc2863>.

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

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

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

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

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

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

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

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

[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, <https://www.rfc-editor.org/info/rfc6242>.

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

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

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

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

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

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

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

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

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

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

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

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

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

8.2. Informative References
8.2. 资料性引用

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

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

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

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

Appendix A. Example: Ethernet Interface Module

附录A.示例:以太网接口模块

This section gives a simple example of how an Ethernet interface module could be defined. It demonstrates how media-specific configuration parameters can be conditionally augmented to the generic interface list. It also shows how operational state parameters can be conditionally augmented to the operational interface list. The example is not intended as a complete module for Ethernet configuration.

本节给出了如何定义以太网接口模块的简单示例。它演示了如何将特定于媒体的配置参数有条件地扩展到通用接口列表。它还显示了如何有条件地将操作状态参数扩充到操作接口列表中。本示例不打算作为以太网配置的完整模块。

   module example-ethernet {
     namespace "http://example.com/ethernet";
     prefix "eth";
        
   module example-ethernet {
     namespace "http://example.com/ethernet";
     prefix "eth";
        
     import ietf-interfaces {
       prefix if;
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     import ietf-interfaces {
       prefix if;
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     // configuration and state parameters for Ethernet interfaces
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:ethernetCsmacd'";
        
     // configuration and state parameters for Ethernet interfaces
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:ethernetCsmacd'";
        
       container ethernet {
         container transmission {
           choice transmission-params {
             case auto {
               leaf auto-negotiate {
                 type empty;
               }
             }
             case manual {
               container manual {
                 leaf duplex {
                   type enumeration {
                     enum "half";
                     enum "full";
                   }
                 }
                 leaf speed {
                   type enumeration {
                     enum "10Mb";
                     enum "100Mb";
                     enum "1Gb";
                     enum "10Gb";
                   }
        
       container ethernet {
         container transmission {
           choice transmission-params {
             case auto {
               leaf auto-negotiate {
                 type empty;
               }
             }
             case manual {
               container manual {
                 leaf duplex {
                   type enumeration {
                     enum "half";
                     enum "full";
                   }
                 }
                 leaf speed {
                   type enumeration {
                     enum "10Mb";
                     enum "100Mb";
                     enum "1Gb";
                     enum "10Gb";
                   }
        
                 }
               }
             }
           }
           leaf duplex {
             type enumeration {
               enum "half";
               enum "full";
             }
             config false;
           }
         }
         // other Ethernet-specific params...
       }
     }
   }
        
                 }
               }
             }
           }
           leaf duplex {
             type enumeration {
               enum "half";
               enum "full";
             }
             config false;
           }
         }
         // other Ethernet-specific params...
       }
     }
   }
        

Appendix B. Example: Ethernet Bonding Interface Module

附录B.示例:以太网连接接口模块

This section gives an example of how interface layering can be defined. An Ethernet bonding interface that bonds several Ethernet interfaces into one logical interface is defined.

本节给出了如何定义接口分层的示例。定义了将多个以太网接口连接到一个逻辑接口的以太网连接接口。

   module example-ethernet-bonding {
     namespace "http://example.com/ethernet-bonding";
     prefix "bond";
        
   module example-ethernet-bonding {
     namespace "http://example.com/ethernet-bonding";
     prefix "bond";
        
     import ietf-interfaces {
       prefix if;
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     import ietf-interfaces {
       prefix if;
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:ieee8023adLag'";
        
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:ieee8023adLag'";
        
       leaf-list slave-if {
         type if:interface-ref;
         must "/if:interfaces/if:interface[if:name = current()]"
            + "/if:type = 'ianaift:ethernetCsmacd'" {
           description
             "The type of a slave interface must be 'ethernetCsmacd'.";
         }
       }
       leaf bonding-mode {
         type enumeration {
           enum round-robin;
        
       leaf-list slave-if {
         type if:interface-ref;
         must "/if:interfaces/if:interface[if:name = current()]"
            + "/if:type = 'ianaift:ethernetCsmacd'" {
           description
             "The type of a slave interface must be 'ethernetCsmacd'.";
         }
       }
       leaf bonding-mode {
         type enumeration {
           enum round-robin;
        
           enum active-backup;
           enum broadcast;
         }
       }
       // other bonding config params, failover times, etc.
     }
   }
        
           enum active-backup;
           enum broadcast;
         }
       }
       // other bonding config params, failover times, etc.
     }
   }
        

Appendix C. Example: VLAN Interface Module

附录C.示例:VLAN接口模块

This section gives an example of how a VLAN interface module can be defined.

本节给出了如何定义VLAN接口模块的示例。

   module example-vlan {
     namespace "http://example.com/vlan";
     prefix "vlan";
        
   module example-vlan {
     namespace "http://example.com/vlan";
     prefix "vlan";
        
     import ietf-interfaces {
       prefix if;
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     import ietf-interfaces {
       prefix if;
     }
     import iana-if-type {
       prefix ianaift;
     }
        
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:ethernetCsmacd' or
             if:type = 'ianaift:ieee8023adLag'";
       leaf vlan-tagging {
         type boolean;
         default false;
       }
     }
        
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:ethernetCsmacd' or
             if:type = 'ianaift:ieee8023adLag'";
       leaf vlan-tagging {
         type boolean;
         default false;
       }
     }
        
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:l2vlan'";
        
     augment "/if:interfaces/if:interface" {
       when "if:type = 'ianaift:l2vlan'";
        
       leaf base-interface {
         type if:interface-ref;
         must "/if:interfaces/if:interface[if:name = current()]"
            + "/vlan:vlan-tagging = 'true'" {
           description
             "The base interface must have VLAN tagging enabled.";
         }
       }
       leaf vlan-id {
         type uint16 {
           range "1..4094";
         }
        
       leaf base-interface {
         type if:interface-ref;
         must "/if:interfaces/if:interface[if:name = current()]"
            + "/vlan:vlan-tagging = 'true'" {
           description
             "The base interface must have VLAN tagging enabled.";
         }
       }
       leaf vlan-id {
         type uint16 {
           range "1..4094";
         }
        
         must "../base-interface" {
           description
             "If a vlan-id is defined, a base-interface must
              be specified.";
         }
       }
     }
   }
        
         must "../base-interface" {
           description
             "If a vlan-id is defined, a base-interface must
              be specified.";
         }
       }
     }
   }
        
Appendix D.  Example: NETCONF <get-config> Reply
        
Appendix D.  Example: NETCONF <get-config> Reply
        

This section gives an example of a reply to the NETCONF <get-config> request for the running configuration datastore for a device that implements the example data models above.

本节给出了一个示例,说明了对实现上述示例数据模型的设备的运行配置数据存储的NETCONF<get config>请求的回复。

   <rpc-reply
       xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
       message-id="101">
     <data>
       <interfaces
           xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
           xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"
           xmlns:vlan="http://example.com/vlan">
        
   <rpc-reply
       xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
       message-id="101">
     <data>
       <interfaces
           xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
           xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"
           xmlns:vlan="http://example.com/vlan">
        
         <interface>
           <name>eth0</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>false</enabled>
         </interface>
        
         <interface>
           <name>eth0</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>false</enabled>
         </interface>
        
         <interface>
           <name>eth1</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>true</enabled>
           <vlan:vlan-tagging>true</vlan:vlan-tagging>
         </interface>
        
         <interface>
           <name>eth1</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>true</enabled>
           <vlan:vlan-tagging>true</vlan:vlan-tagging>
         </interface>
        
         <interface>
           <name>eth1.10</name>
           <type>ianaift:l2vlan</type>
           <enabled>true</enabled>
           <vlan:base-interface>eth1</vlan:base-interface>
           <vlan:vlan-id>10</vlan:vlan-id>
         </interface>
        
         <interface>
           <name>eth1.10</name>
           <type>ianaift:l2vlan</type>
           <enabled>true</enabled>
           <vlan:base-interface>eth1</vlan:base-interface>
           <vlan:vlan-id>10</vlan:vlan-id>
         </interface>
        
         <interface>
           <name>lo1</name>
           <type>ianaift:softwareLoopback</type>
        
         <interface>
           <name>lo1</name>
           <type>ianaift:softwareLoopback</type>
        
           <enabled>true</enabled>
         </interface>
        
           <enabled>true</enabled>
         </interface>
        
       </interfaces>
     </data>
   </rpc-reply>
        
       </interfaces>
     </data>
   </rpc-reply>
        
Appendix E.  Example: NETCONF <get-data> Reply
        
Appendix E.  Example: NETCONF <get-data> Reply
        

This section gives an example of a reply to the NETCONF <get-data> request for the operational state datastore for a device that implements the example data models above.

本节给出了对实现上述示例数据模型的设备的操作状态数据存储的NETCONF<get data>请求的回复示例。

This example uses the "origin" annotation, which is defined in the module "ietf-origin" [RFC8342].

本例使用“源”注释,该注释在模块“ietf源”[RFC8342]中定义。

   <rpc-reply
       xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
       message-id="101">
     <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-datastores">
       <interfaces
           xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
           xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"
           xmlns:vlan="http://example.com/vlan"
           xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin">
        
   <rpc-reply
       xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
       message-id="101">
     <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-datastores">
       <interfaces
           xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
           xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"
           xmlns:vlan="http://example.com/vlan"
           xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin">
        
         <interface or:origin="or:intended">
           <name>eth0</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>false</enabled>
           <admin-status>down</admin-status>
           <oper-status>down</oper-status>
           <if-index>2</if-index>
           <phys-address>00:01:02:03:04:05</phys-address>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
         </interface>
        
         <interface or:origin="or:intended">
           <name>eth0</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>false</enabled>
           <admin-status>down</admin-status>
           <oper-status>down</oper-status>
           <if-index>2</if-index>
           <phys-address>00:01:02:03:04:05</phys-address>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
         </interface>
        
         <interface or:origin="or:intended">
           <name>eth1</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>true</enabled>
           <admin-status>up</admin-status>
           <oper-status>up</oper-status>
        
         <interface or:origin="or:intended">
           <name>eth1</name>
           <type>ianaift:ethernetCsmacd</type>
           <enabled>true</enabled>
           <admin-status>up</admin-status>
           <oper-status>up</oper-status>
        
           <if-index>7</if-index>
           <phys-address>00:01:02:03:04:06</phys-address>
           <higher-layer-if>eth1.10</higher-layer-if>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
           <vlan:vlan-tagging>true</vlan:vlan-tagging>
         </interface>
        
           <if-index>7</if-index>
           <phys-address>00:01:02:03:04:06</phys-address>
           <higher-layer-if>eth1.10</higher-layer-if>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
           <vlan:vlan-tagging>true</vlan:vlan-tagging>
         </interface>
        
         <interface or:origin="or:intended">
           <name>eth1.10</name>
           <type>ianaift:l2vlan</type>
           <enabled>true</enabled>
           <admin-status>up</admin-status>
           <oper-status>up</oper-status>
           <if-index>9</if-index>
           <lower-layer-if>eth1</lower-layer-if>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
           <vlan:base-interface>eth1</vlan:base-interface>
           <vlan:vlan-id>10</vlan:vlan-id>
         </interface>
        
         <interface or:origin="or:intended">
           <name>eth1.10</name>
           <type>ianaift:l2vlan</type>
           <enabled>true</enabled>
           <admin-status>up</admin-status>
           <oper-status>up</oper-status>
           <if-index>9</if-index>
           <lower-layer-if>eth1</lower-layer-if>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
           <vlan:base-interface>eth1</vlan:base-interface>
           <vlan:vlan-id>10</vlan:vlan-id>
         </interface>
        
         <!-- This interface is not configured -->
         <interface or:origin="or:system">
           <name>eth2</name>
           <type>ianaift:ethernetCsmacd</type>
           <admin-status>down</admin-status>
           <oper-status>down</oper-status>
           <if-index>8</if-index>
           <phys-address>00:01:02:03:04:07</phys-address>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
         </interface>
        
         <!-- This interface is not configured -->
         <interface or:origin="or:system">
           <name>eth2</name>
           <type>ianaift:ethernetCsmacd</type>
           <admin-status>down</admin-status>
           <oper-status>down</oper-status>
           <if-index>8</if-index>
           <phys-address>00:01:02:03:04:07</phys-address>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
         </interface>
        
         <interface or:origin="or:intended">
           <name>lo1</name>
        
         <interface or:origin="or:intended">
           <name>lo1</name>
        
           <type>ianaift:softwareLoopback</type>
           <enabled>true</enabled>
           <admin-status>up</admin-status>
           <oper-status>up</oper-status>
           <if-index>1</if-index>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
         </interface>
        
           <type>ianaift:softwareLoopback</type>
           <enabled>true</enabled>
           <admin-status>up</admin-status>
           <oper-status>up</oper-status>
           <if-index>1</if-index>
           <statistics>
             <discontinuity-time>
               2013-04-01T03:00:00+00:00
             </discontinuity-time>
             <!-- counters now shown here -->
           </statistics>
         </interface>
        
       </interfaces>
     </data>
   </rpc-reply>
        
       </interfaces>
     </data>
   </rpc-reply>
        

Appendix F. Examples: Interface Naming Schemes

附录F.示例:接口命名方案

This section gives examples of some implementation strategies.

本节给出了一些实施策略的示例。

The examples make use of the example data model "example-vlan" (see Appendix C) to show how user-controlled interfaces can be configured.

这些示例使用示例数据模型“示例vlan”(参见附录C)来说明如何配置用户控制的接口。

F.1. Router with Restricted Interface Names
F.1. 具有受限接口名称的路由器

In this example, a router has support for 4 line cards, each with 8 ports. The slots for the cards are physically numbered from 0 to 3, and the ports on each card from 0 to 7. Each card has Fast Ethernet or Gigabit Ethernet ports.

在本例中,路由器支持4个线路卡,每个线路卡有8个端口。这些卡的插槽从0到3进行物理编号,每个卡上的端口从0到7进行物理编号。每个卡都有快速以太网或千兆以太网端口。

The device-specific names for these physical interfaces are "fastethernet-N/M" or "gigabitethernet-N/M".

这些物理接口的设备特定名称为“fastethernet-N/M”或“gigabitethernet-N/M”。

The name of a VLAN interface is restricted to the form "<physical-interface-name>.<subinterface-number>".

VLAN接口的名称限制为“<物理接口名称><子接口编号>”形式。

It is assumed that the operator is aware of this naming scheme. The implementation auto-initializes the value for "type" based on the interface name.

假定操作员知道此命名方案。实现根据接口名称自动初始化“type”的值。

The NETCONF server does not advertise the "arbitrary-names" feature in the <hello> message.

NETCONF服务器不会在<hello>消息中公布“任意名称”功能。

An operator can configure a physical interface by sending an <edit-config> containing:

操作员可以通过发送包含以下内容的<edit config>,来配置物理界面:

     <interface nc:operation="create">
       <name>fastethernet-1/0</name>
     </interface>
        
     <interface nc:operation="create">
       <name>fastethernet-1/0</name>
     </interface>
        

When the server processes this request, it will set the leaf "type" to "ianaift:ethernetCsmacd". Thus, if the client performs a <get-config> right after the <edit-config> above, it will get:

当服务器处理此请求时,它会将叶“type”设置为“ianaift:ethernetCsmacd”。因此,如果客户机在上面的<edit config>之后执行<get config>,它将获得:

     <interface>
       <name>fastethernet-1/0</name>
       <type>ianaift:ethernetCsmacd</type>
     </interface>
        
     <interface>
       <name>fastethernet-1/0</name>
       <type>ianaift:ethernetCsmacd</type>
     </interface>
        

The client can configure a VLAN interface by sending an <edit-config> containing:

客户端可以通过发送包含以下内容的<edit config>,来配置VLAN接口:

     <interface nc:operation="create">
       <name>fastethernet-1/0.10005</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>fastethernet-1/0</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        
     <interface nc:operation="create">
       <name>fastethernet-1/0.10005</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>fastethernet-1/0</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        

If the client tries to change the type of the physical interface with an <edit-config> containing:

如果客户端试图使用包含以下内容的<edit config>更改物理接口的类型:

     <interface nc:operation="merge">
       <name>fastethernet-1/0</name>
       <type>ianaift:tunnel</type>
     </interface>
        
     <interface nc:operation="merge">
       <name>fastethernet-1/0</name>
       <type>ianaift:tunnel</type>
     </interface>
        

then the server will reply with an "invalid-value" error, since the new type does not match the name.

由于新类型与名称不匹配,因此服务器将以“无效值”错误进行回复。

F.2. Router with Arbitrary Interface Names
F.2. 具有任意接口名的路由器

In this example, a router has support for 4 line cards, each with 8 ports. The slots for the cards are physically numbered from 0 to 3, and the ports on each card from 0 to 7. Each card has Fast Ethernet or Gigabit Ethernet ports.

在本例中,路由器支持4个线路卡,每个线路卡有8个端口。这些卡的插槽从0到3进行物理编号,每个卡上的端口从0到7进行物理编号。每个卡都有快速以太网或千兆以太网端口。

The device-specific names for these physical interfaces are "fastethernet-N/M" or "gigabitethernet-N/M".

这些物理接口的设备特定名称为“fastethernet-N/M”或“gigabitethernet-N/M”。

The implementation does not restrict the user-controlled interface names. This allows an operator to more easily apply the interface configuration to a different interface. However, the additional level of indirection also makes it a bit more complex to map interface names found in other protocols to configuration entries.

该实现不限制用户控制的接口名称。这使操作员能够更轻松地将接口配置应用于不同的接口。然而,额外的间接级别也使得将其他协议中的接口名称映射到配置条目变得更加复杂。

The NETCONF server advertises the "arbitrary-names" feature in the <hello> message.

NETCONF服务器在<hello>消息中播发“任意名称”功能。

Physical interfaces are configured as in Appendix F.1.

物理接口的配置如附录F.1所示。

An operator can configure a VLAN interface by sending an <edit-config> containing:

操作员可以通过发送包含以下内容的<edit config>,来配置VLAN接口:

     <interface nc:operation="create">
       <name>acme-interface</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>fastethernet-1/0</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        
     <interface nc:operation="create">
       <name>acme-interface</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>fastethernet-1/0</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        

If necessary, the operator can move the configuration named "acme-interface" over to a different physical interface with an <edit-config> containing:

如有必要,操作员可以将名为“acme interface”的配置移到另一个物理接口上,该物理接口的<edit config>包含:

     <interface nc:operation="merge">
       <name>acme-interface</name>
       <vlan:base-interface>fastethernet-1/1</vlan:base-interface>
     </interface>
        
     <interface nc:operation="merge">
       <name>acme-interface</name>
       <vlan:base-interface>fastethernet-1/1</vlan:base-interface>
     </interface>
        
F.3. Ethernet Switch with Restricted Interface Names
F.3. 具有受限接口名称的以太网交换机

In this example, an Ethernet switch has a number of ports, each identified by a simple port number.

在此示例中,以太网交换机具有多个端口,每个端口由一个简单的端口号标识。

The device-specific names for the physical interfaces are numbers that match the physical port number.

物理接口的设备特定名称是与物理端口号匹配的数字。

An operator can configure a physical interface by sending an <edit-config> containing:

操作员可以通过发送包含以下内容的<edit config>,来配置物理界面:

     <interface nc:operation="create">
       <name>6</name>
     </interface>
        
     <interface nc:operation="create">
       <name>6</name>
     </interface>
        

When the server processes this request, it will set the leaf "type" to "ianaift:ethernetCsmacd". Thus, if the client performs a <get-config> right after the <edit-config> above, it will get:

当服务器处理此请求时,它会将叶“type”设置为“ianaift:ethernetCsmacd”。因此,如果客户机在上面的<edit config>之后执行<get config>,它将获得:

     <interface>
       <name>6</name>
       <type>ianaift:ethernetCsmacd</type>
     </interface>
        
     <interface>
       <name>6</name>
       <type>ianaift:ethernetCsmacd</type>
     </interface>
        
F.4. Generic Host with Restricted Interface Names
F.4. 具有受限接口名称的通用主机

In this example, a generic host has interfaces named by the kernel. The system identifies the physical interface by the name assigned by the operating system to the interface.

在本例中,通用主机具有由内核命名的接口。系统通过操作系统分配给接口的名称来标识物理接口。

The name of a VLAN interface is restricted to the form "<physical-interface-name>:<vlan-number>".

VLAN接口的名称限制为“<physical interface name>:<VLAN number>”形式。

The NETCONF server does not advertise the "arbitrary-names" feature in the <hello> message.

NETCONF服务器不会在<hello>消息中公布“任意名称”功能。

An operator can configure an interface by sending an <edit-config> containing:

操作员可以通过发送包含以下内容的<edit config>,来配置界面:

     <interface nc:operation="create">
       <name>eth8</name>
     </interface>
        
     <interface nc:operation="create">
       <name>eth8</name>
     </interface>
        

When the server processes this request, it will set the leaf "type" to "ianaift:ethernetCsmacd". Thus, if the client performs a <get-config> right after the <edit-config> above, it will get:

当服务器处理此请求时,它会将叶“type”设置为“ianaift:ethernetCsmacd”。因此,如果客户机在上面的<edit config>之后执行<get config>,它将获得:

     <interface>
       <name>eth8</name>
       <type>ianaift:ethernetCsmacd</type>
     </interface>
        
     <interface>
       <name>eth8</name>
       <type>ianaift:ethernetCsmacd</type>
     </interface>
        

The client can configure a VLAN interface by sending an <edit-config> containing:

客户端可以通过发送包含以下内容的<edit config>,来配置VLAN接口:

     <interface nc:operation="create">
       <name>eth8:5</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>eth8</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        
     <interface nc:operation="create">
       <name>eth8:5</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>eth8</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        
F.5. Generic Host with Arbitrary Interface Names
F.5. 具有任意接口名的通用主机

In this example, a generic host has interfaces named by the kernel. The system identifies the physical interface by the name assigned by the operating system to the interface.

在本例中,通用主机具有由内核命名的接口。系统通过操作系统分配给接口的名称来标识物理接口。

The implementation does not restrict the user-controlled interface names. This allows an operator to more easily apply the interface configuration to a different interface. However, the additional level of indirection also makes it a bit more complex to map interface names found in other protocols to configuration entries.

该实现不限制用户控制的接口名称。这使操作员能够更轻松地将接口配置应用于不同的接口。然而,额外的间接级别也使得将其他协议中的接口名称映射到配置条目变得更加复杂。

The NETCONF server advertises the "arbitrary-names" feature in the <hello> message.

NETCONF服务器在<hello>消息中播发“任意名称”功能。

Physical interfaces are configured as in Appendix F.4.

物理接口的配置如附录F.4所示。

An operator can configure a VLAN interface by sending an <edit-config> containing:

操作员可以通过发送包含以下内容的<edit config>,来配置VLAN接口:

     <interface nc:operation="create">
       <name>acme-interface</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>eth8</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        
     <interface nc:operation="create">
       <name>acme-interface</name>
       <type>ianaift:l2vlan</type>
       <vlan:base-interface>eth8</vlan:base-interface>
       <vlan:vlan-id>5</vlan:vlan-id>
     </interface>
        

If necessary, the operator can move the configuration named "acme-interface" over to a different physical interface with an <edit-config> containing:

如有必要,操作员可以将名为“acme interface”的配置移到另一个物理接口上,该物理接口的<edit config>包含:

     <interface nc:operation="merge">
       <name>acme-interface</name>
       <vlan:base-interface>eth3</vlan:base-interface>
     </interface>
        
     <interface nc:operation="merge">
       <name>acme-interface</name>
       <vlan:base-interface>eth3</vlan:base-interface>
     </interface>
        

Acknowledgments

致谢

The author wishes to thank Alexander Clemm, Per Hedeland, Ladislav Lhotka, and Juergen Schoenwaelder for their helpful comments.

作者希望感谢亚历山大·克莱姆、佩尔·海德兰、拉迪斯拉夫·洛特卡和尤尔根·舍恩瓦埃尔德的有益评论。

Author's Address

作者地址

Martin Bjorklund Tail-f Systems

Martin Bjorklund Tail-f系统

   Email: mbj@tail-f.com
        
   Email: mbj@tail-f.com