Internet Engineering Task Force (IETF)                     J. Hadi Salim
Request for Comments: 7391                             Mojatatu Networks
Updates: 5810, 7121                                         October 2014
Category: Standards Track
ISSN: 2070-1721
        
Internet Engineering Task Force (IETF)                     J. Hadi Salim
Request for Comments: 7391                             Mojatatu Networks
Updates: 5810, 7121                                         October 2014
Category: Standards Track
ISSN: 2070-1721
        

Forwarding and Control Element Separation (ForCES) Protocol Extensions

转发和控制元素分离(ForCES)协议扩展

Abstract

摘要

Experience in implementing and deploying the Forwarding and Control Element Separation (ForCES) architecture has demonstrated the need for a few small extensions both to ease programmability and to improve wire efficiency of some transactions. The ForCES protocol is extended with a table range operation and a new extension for error handling. This document updates the semantics in RFCs 5810 and 7121 to achieve that end goal.

实施和部署转发和控制元素分离(ForCES)体系结构的经验表明,需要一些小的扩展,以简化可编程性并提高某些事务的连线效率。ForCES协议扩展了一个表范围操作和一个新的错误处理扩展。本文档更新了RFCs 5810和7121中的语义,以实现该最终目标。

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 5741.

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

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

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

Copyright Notice

版权公告

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

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

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

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

Table of Contents

目录

   1. Introduction ....................................................2
      1.1. Terminology and Conventions ................................3
           1.1.1. Requirements Language ...............................3
           1.1.2. Terminology .........................................3
   2. Problem Overview ................................................4
      2.1. Table Ranges ...............................................4
      2.2. Error Codes ................................................4
   3. Protocol Update .................................................5
      3.1. Table Ranges ...............................................5
      3.2. Error Codes ................................................6
           3.2.1. New Codes ...........................................7
           3.2.2. Private Vendor Codes ................................8
           3.2.3. Extended Result TLV .................................8
                  3.2.3.1. Extended Result Backward Compatibility .....9
      3.3. Large Table Dumping ........................................9
   4. IANA Considerations ............................................11
   5. Security Considerations ........................................12
   6. References .....................................................12
      6.1. Normative References ......................................12
      6.2. Informative References ....................................12
   Appendix A. New FEPO Version ......................................13
   Acknowledgments ...................................................23
   Author's Address ..................................................23
        
   1. Introduction ....................................................2
      1.1. Terminology and Conventions ................................3
           1.1.1. Requirements Language ...............................3
           1.1.2. Terminology .........................................3
   2. Problem Overview ................................................4
      2.1. Table Ranges ...............................................4
      2.2. Error Codes ................................................4
   3. Protocol Update .................................................5
      3.1. Table Ranges ...............................................5
      3.2. Error Codes ................................................6
           3.2.1. New Codes ...........................................7
           3.2.2. Private Vendor Codes ................................8
           3.2.3. Extended Result TLV .................................8
                  3.2.3.1. Extended Result Backward Compatibility .....9
      3.3. Large Table Dumping ........................................9
   4. IANA Considerations ............................................11
   5. Security Considerations ........................................12
   6. References .....................................................12
      6.1. Normative References ......................................12
      6.2. Informative References ....................................12
   Appendix A. New FEPO Version ......................................13
   Acknowledgments ...................................................23
   Author's Address ..................................................23
        
1. Introduction
1. 介绍

Experience in implementing and deploying the ForCES architecture has demonstrated the need for a few small extensions both to ease programmability and to improve wire efficiency of some transactions. This document describes a few extensions to the semantics in the ForCES protocol specification [RFC5810] to achieve that end goal.

实施和部署ForCES体系结构的经验表明,需要进行一些小型扩展,以简化可编程性并提高某些事务的接线效率。本文档描述了ForCES协议规范[RFC5810]中语义的一些扩展,以实现该最终目标。

This document describes and justifies the need for two small extensions that are backward compatible. This document also clarifies details of how dumping of a large table residing on an FE (Forwarding Element) is achieved. To summarize:

本文档描述并证明需要两个向后兼容的小型扩展。本文档还详细说明了如何转储驻留在FE(转发元素)上的大型表。总结如下:

1. A table range operation to allow a controller or control application to request an arbitrary range of table rows is introduced.

1. 引入了表范围操作,以允许控制器或控制应用程序请求任意范围的表行。

2. Additional error codes returned to the controller (or control application) by an FE are introduced. Additionally, a new extension to carry details on error codes is introduced. As a result, this document updates the definition of the FE Protocol Object (FEPO) Logical Functional Block (LFB) in [RFC7121].

2. 引入了FE返回给控制器(或控制应用程序)的其他错误代码。此外,还引入了一个新的扩展来提供错误代码的详细信息。因此,本文件更新了[RFC7121]中FE协议对象(FEPO)逻辑功能块(LFB)的定义。

3. While already supported, an FE response to a GET request of a large table that does not fit in a single Protocol Layer (PL) message is not described in [RFC5810]. This document clarifies the details.

3. 虽然已经得到支持,但[RFC5810]中没有描述对不适合单个协议层(PL)消息的大型表的GET请求的FE响应。本文件澄清了细节。

1.1. Terminology and Conventions
1.1. 术语和公约
1.1.1. Requirements Language
1.1.1. 需求语言

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

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

1.1.2. Terminology
1.1.2. 术语

This document reiterates the terminology defined in several ForCES documents ([RFC3746], [RFC5810], [RFC5811], and [RFC5812]) for the sake of contextual clarity.

为了上下文清晰,本文件重申了多份部队文件([RFC3746]、[RFC5810]、[RFC5811]和[RFC5812])中定义的术语。

Control Element (CE)

控制元件(CE)

Forwarding Element (FE)

转发元素(FE)

FE Model

有限元模型

LFB (Logical Functional Block) Class (or type)

LFB(逻辑功能块)类(或类型)

LFB Instance

LFB实例

LFB Model

LFB模型

LFB Metadata

LFB元数据

ForCES Component

力分量

LFB Component

低频分量

ForCES Protocol Layer (ForCES PL)

ForCES协议层(ForCES PL)

ForCES Protocol Transport Mapping Layer (ForCES TML)

ForCES协议传输映射层(ForCES TML)

2. Problem Overview
2. 问题概述

In this section, we present sample use cases to illustrate each challenge being addressed.

在本节中,我们展示了示例用例,以说明正在解决的每个挑战。

2.1. Table Ranges
2.1. 表范围

Consider, for the sake of illustration, an FE table with 1 million reasonably sized table rows that are sparsely populated. Assume, again for the sake of illustration, that there are 2000 table rows sparsely populated between the row indices 23-10023.

为了说明,考虑一个FE表,该表具有100万个大小适中的表列,它们是稀疏填充的。为便于说明,再次假设行索引23-10023之间有2000个表行稀疏填充。

Implementation experience has shown that existing approaches for retrieving or deleting a sizable number of table rows are both programmatically tedious and inefficient on utilization of both compute and wire resources.

实施经验表明,检索或删除大量表行的现有方法在编程上既繁琐又低效,无法充分利用计算资源和连线资源。

By definition, ForCES GET and DEL requests sent from a controller (or control application) are prepended with a path to a component and sent to the FE. In the case of indexed tables, the component path can point to either a table or a table row index.

根据定义,从控制器(或控制应用程序)发送的强制GET和DEL请求以组件路径作为前缀,并发送到FE。对于索引表,组件路径可以指向表或表行索引。

As an example, a control application attempting to retrieve the first 2000 table rows appearing between row indices 23 and 10023 can achieve its goal in one of the following ways:

例如,试图检索行索引23和10023之间出现的前2000个表行的控制应用程序可以通过以下方式之一实现其目标:

o Dump the whole table and filter for the needed 2000 table rows.

o 转储整个表并筛选所需的2000个表行。

o Send up to 10000 ForCES PL requests, incrementing the index by one each time, and stop when the needed 2000 entries are retrieved.

o 发送多达10000个强制PL请求,每次增加一个索引,并在检索到所需的2000个条目时停止。

o If the application had knowledge of which table rows existed (not unreasonable given the controller is supposed to be aware of state within a Network Element (NE)), then the application could take advantage of ForCES batching to send fewer large messages (each with different path entries for a total of 2000).

o 如果应用程序知道存在哪些表行(考虑到控制器应该知道网元(NE)内的状态,这不是不合理的),那么应用程序可以利用强制批处理来发送较少的大型消息(每个消息具有总共2000个不同的路径条目)。

As argued, while the above options exist, all are tedious.

如前所述,尽管存在上述选项,但所有选项都是乏味的。

2.2. Error Codes
2.2. 错误代码

[RFC5810] has defined a generic set of error codes that are to be returned to the CE from an FE. Deployment experience has shown that it would be useful to have more fine-grained error codes. As an example, the error code E_NOT_SUPPORTED could be mapped to many FE error source possibilities that need to then be interpreted by the caller based on some understanding of the nature of the sent request. This makes debugging more time consuming.

[RFC5810]定义了一组从FE返回给CE的通用错误代码。部署经验表明,拥有更细粒度的错误代码将非常有用。例如,不支持的错误代码E_可以映射到许多FE错误源可能性,调用方需要基于对发送请求的性质的一些理解来解释这些错误源可能性。这使得调试更加耗时。

3. Protocol Update
3. 协议更新

This section describes a normative update to the ForCES protocol to address the issues discussed in Section 2.

本节描述了部队协议的规范性更新,以解决第2节中讨论的问题。

3.1. Table Ranges
3.1. 表范围

We define a new TLV, TABLERANGE-TLV (type ID 0x0117), that will be associated with the PATH-DATA-TLV in the same manner the KEYINFO-TLV is. Figure 1 shows how this new TLV is constructed.

我们定义了一个新的TLV,TABLERANGE-TLV(类型ID 0x0117),它将以与KEYINFO-TLV相同的方式与PATH-DATA-TLV关联。图1显示了这个新TLV是如何构造的。

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Type (0x0117)              |     Length                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Start Index                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         End Index                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Type (0x0117)              |     Length                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Start Index                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         End Index                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        

Figure 1: ForCES Table Range Request Layout

图1:ForCES表范围请求布局

Figure 2 illustrates a GET request for a range of rows 11 to 23 of a table with a component path of "1/6".

图2展示了一个GET请求,该请求用于组件路径为“1/6”的表的第11到23行。

      OPER = GET-TLV
             PATH-DATA-TLV:
               flags = F_SELTABRANGE, IDCount = 2, IDs = {1,6}
               TABLERANGE-TLV content = {11,23}
        
      OPER = GET-TLV
             PATH-DATA-TLV:
               flags = F_SELTABRANGE, IDCount = 2, IDs = {1,6}
               TABLERANGE-TLV content = {11,23}
        

Figure 2: ForCES Table Range Request Example

图2:ForCES表范围请求示例

The path flag F_SELTABRANGE (0x2, i.e., bit 1, where bit 0 is F_SELKEY as defined in [RFC5810]) MUST be set to indicate the presence of the TABLERANGE-TLV. The path flag bit F_SELTABRANGE can only be used in a GET or DEL and is mutually exclusive with F_SELKEY. The FE MUST enforce the path flag constraints and ensure that the selected path belongs to a defined, indexed table component. Any violation of these constraints MUST be rejected with an error code of E_INVALID_TFLAGS with a description of what the problem is when using extended error reporting (refer to Section 3.2).

必须设置路径标志F_SELTABRANGE(0x2,即位1,其中位0是[RFC5810]中定义的F_SELKEY])以指示TABLERANGE-TLV的存在。路径标志位F_SELTABRANGE只能在GET或DEL中使用,并且与F_SELKEY互斥。FE必须强制执行路径标志约束,并确保所选路径属于已定义的索引表组件。必须拒绝任何违反这些约束的行为,错误代码为E_INVALID_TFLAGS,并说明使用扩展错误报告时的问题(参考第3.2节)。

It should be noted that there are combinations of path selection mechanisms that should not appear together for the sake of simplicity of operations. These include TABLERANGE-TLV and KEYINFO-TLV as well as multiple nested TABLERANGE-TLVs.

应该注意的是,为了简化操作,存在路径选择机制的组合,这些组合不应该同时出现。其中包括TABLERANGE-TLV和KEYINFO-TLV以及多个嵌套TABLERANGE TLV。

The TABLERANGE-TLV contents constitute:

TABLERANGE-TLV内容包括:

o A 32-bit start index. An index of 0 implies the beginning of the table row.

o 32位起始索引。索引为0表示表行的开头。

o A 32-bit end index. A value of 0xFFFFFFFF implies the last entry.

o 32位结束索引。0xFFFFFF的值表示最后一个条目。

The response for a table range query will either be:

表范围查询的响应将为:

o The requested table data returned (when at least one referenced row is available); in such a case, a response with a path pointing to the table and whose data content contains the row(s) will be sent to the CE. The data content MUST be encapsulated in a SPARSEDATA-TLV. The SPARSEDATA-TLV content will have the "I" (in Index-Length-Value (ILV)) for each table row indicating the table indices.

o 返回的请求表数据(当至少有一个引用行可用时);在这种情况下,将向CE发送路径指向表且其数据内容包含行的响应。数据内容必须封装在SPARA-TLV中。对于每个表行,A-TLV内容将具有指示表索引的“I”(索引长度值(ILV))。

o An EXTENDEDRESULT-TLV (refer to Section 3.2.3) when:

o 以下情况下的扩展结果-TLV(参考第3.2.3节):

* the response is to a range delete request. The result will either be:

* 响应是对范围删除请求的响应。结果将是:

+ a success if any of the rows that were requested are deleted; or

+ 如果请求的任何行被删除,则为成功;或

+ a proper error code if none of the rows that were requested can be deleted.

+ 如果请求的行都无法删除,则返回正确的错误代码。

* data is absent and an error code of E_EMPTY with an optional content string describing the nature of the error is used (refer to Section 3.2).

* 数据缺失,并使用错误代码E_EMPTY和描述错误性质的可选内容字符串(参考第3.2节)。

* both a path key and path table range were stated on the path flags of the original request. In such a case, an error code of E_INVALID_TFLAGS with an optional content string describing the nature of the error is used (refer to Section 3.2).

* 原始请求的路径标志上同时声明了路径键和路径表范围。在这种情况下,将使用错误代码E_INVALID_TFLAGS和描述错误性质的可选内容字符串(参考第3.2节)。

* other standard ForCES errors (such as Access Control List (ACL) constraints trying to retrieve contents of an unreadable table, accessing unknown components, etc.) occur.

* 出现其他标准强制错误(如试图检索不可读表的内容的访问控制列表(ACL)约束、访问未知组件等)。

3.2. Error Codes
3.2. 错误代码

We define the following:

我们定义如下:

1. A new set of error codes.

1. 一组新的错误代码。

2. Allocation of some reserved codes for private use.

2. 为私人使用分配一些保留代码。

3. A new TLV, EXTENDEDRESULT-TLV (0x0118), that will carry a code (which will be a superset of what is currently specified in [RFC5810]) as well as an optional cause content. This is illustrated in Figure 3.

3. 一个新的TLV,EXTENDEDRESULT-TLV(0x0118),它将携带一个代码(它将是[RFC5810]中当前指定内容的超集)以及一个可选的原因内容。这如图3所示。

3.2.1. New Codes
3.2.1. 新代码

The EXTENDEDRESULT-TLV Result Value is 32 bits and is a superset of the RESULT-TLV Result Value defined in [RFC5810]. The new version code space is 32 bits as opposed to the code size of 8 bits in [RFC5810]. The first 8-bit values (256 codes) are common to both code spaces.

EXTENDEDRESULT-TLV结果值为32位,是[RFC5810]中定义的Result-TLV结果值的超集。新版本的代码空间为32位,而[RFC5810]中的代码大小为8位。前8位值(256个代码)对于两个代码空间都是通用的。

   +------------+-------------------------+----------------------------+
   | Code       | Mnemonic                | Details                    |
   +------------+-------------------------+----------------------------+
   | 0x18       | E_TIMED_OUT             | A timeout occurred while   |
   |            |                         | processing the message     |
   |            |                         |                            |
   | 0x19       | E_INVALID_TFLAGS        | Invalid table flags        |
   |            |                         |                            |
   | 0x1A       | E_INVALID_OP            | Requested operation is     |
   |            |                         | invalid                    |
   |            |                         |                            |
   | 0x1B       | E_CONGEST_NT            | Node congestion            |
   |            |                         | notification               |
   |            |                         |                            |
   | 0x1C       | E_COMPONENT_NOT_A_TABLE | Component not a table      |
   |            |                         |                            |
   | 0x1D       | E_PERM                  | Operation not permitted    |
   |            |                         |                            |
   | 0x1E       | E_BUSY                  | System is busy             |
   |            |                         |                            |
   | 0x1F       | E_EMPTY                 | Table is empty             |
   |            |                         |                            |
   | 0x20       | E_UNKNOWN               | A generic catch-all error  |
   |            |                         | code.  Carries a string to |
   |            |                         | further extrapolate what   |
   |            |                         | the error implies.         |
   +------------+-------------------------+----------------------------+
        
   +------------+-------------------------+----------------------------+
   | Code       | Mnemonic                | Details                    |
   +------------+-------------------------+----------------------------+
   | 0x18       | E_TIMED_OUT             | A timeout occurred while   |
   |            |                         | processing the message     |
   |            |                         |                            |
   | 0x19       | E_INVALID_TFLAGS        | Invalid table flags        |
   |            |                         |                            |
   | 0x1A       | E_INVALID_OP            | Requested operation is     |
   |            |                         | invalid                    |
   |            |                         |                            |
   | 0x1B       | E_CONGEST_NT            | Node congestion            |
   |            |                         | notification               |
   |            |                         |                            |
   | 0x1C       | E_COMPONENT_NOT_A_TABLE | Component not a table      |
   |            |                         |                            |
   | 0x1D       | E_PERM                  | Operation not permitted    |
   |            |                         |                            |
   | 0x1E       | E_BUSY                  | System is busy             |
   |            |                         |                            |
   | 0x1F       | E_EMPTY                 | Table is empty             |
   |            |                         |                            |
   | 0x20       | E_UNKNOWN               | A generic catch-all error  |
   |            |                         | code.  Carries a string to |
   |            |                         | further extrapolate what   |
   |            |                         | the error implies.         |
   +------------+-------------------------+----------------------------+
        

Table 1: New Codes

表1:新代码

3.2.2. Private Vendor Codes
3.2.2. 私人供应商代码

Codes 0x100-0x200 are reserved for use as private codes. Since these are freely available, it is expected that the FE and CE side implementations will both understand/interpret the semantics of any used codes and avoid any conflicts.

代码0x100-0x200保留用作专用代码。由于这些代码是免费提供的,因此预计FE和CE端实现都将理解/解释任何使用的代码的语义,并避免任何冲突。

3.2.3. Extended Result TLV
3.2.3. 扩展结果TLV
        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |   Type = EXTENDEDRESULT-TLV   |              Length           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Result Value                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Optional Cause Content                     |
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        
        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |   Type = EXTENDEDRESULT-TLV   |              Length           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Result Value                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Optional Cause Content                     |
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        

Figure 3: EXTENDEDRESULT-TLV

图3:EXTENDEDRESULT-TLV

o Like all other ForCES TLVs, the EXTENDEDRESULT-TLV is expected to be 32-bit aligned.

o 与所有其他力TLV一样,EXTENDEDRESULT-TLV预期为32位对齐。

o The EXTENDEDRESULT-TLV Result Value derives and extends from the same current namespace that is used by the RESULT-TLV Result Value as specified in Section 7.1.7 of [RFC5810]. The main difference is that there is now a 32-bit Result Value (as opposed to the old 8-bit).

o EXTENDEDRESULT-TLV结果值派生并扩展自[RFC5810]第7.1.7节中指定的Result-TLV结果值所使用的同一当前命名空间。主要区别在于现在有一个32位的结果值(与旧的8位结果值相反)。

o The Optional Cause Content is defined to further disambiguate the Result Value. It is expected that UTF-8 string values will be used. The content Result Value is intended to be consumed by the (human) operator, and implementations may choose to specify different content for the same error code. Additionally, future codes may specify cause content to be of types other than string.

o 定义可选原因内容以进一步消除结果值的歧义。预计将使用UTF-8字符串值。内容结果值将由(人工)操作员使用,实现可以选择为同一错误代码指定不同的内容。此外,未来的代码可能会指定导致内容为字符串以外的类型。

o It is recommended that the maximum size of the cause string should not exceed 32 bytes. The cause string is not standardized by this document.

o 建议原因字符串的最大大小不应超过32字节。此文档未对原因字符串进行标准化。

3.2.3.1. Extended Result Backward Compatibility
3.2.3.1. 扩展结果向后兼容性

To support backward compatibility, we update the FEPO LFB (in Appendix A) to version 1.2. We also add a new component ID 16 (named EResultAdmin), and a capability component ID 32 (named EResultCapab).

为了支持向后兼容性,我们将FEPO LFB(见附录A)更新为1.2版。我们还添加了一个新的组件ID 16(名为EResultAdmin)和一个功能组件ID 32(名为EResultCapab)。

An FE will advertise its capability to support extended TLVs via the EResultCapab table. When an FE is capable of responding with both extended results and older result TLVs, it will have two table rows, one for each supported value. By default, an FE capable of supporting both modes will assume the lowest common denominator (i.e., EResultAdmin will be EResultNotSupported) and will issue responses using RESULT-TLVs. It should be noted that an FE advertising FEPO version 1.2 MUST support EXTENDEDRESULT-TLVs at minimum.

FE将通过EResultCapab表宣传其支持扩展TLV的能力。当FE能够同时响应扩展结果和较旧的结果TLV时,它将有两个表行,每个支持的值对应一行。默认情况下,能够支持两种模式的FE将采用最低公分母(即,EResultAdmin将被EResultNotSupported),并将使用结果TLV发出响应。需要注意的是,FE广告FEPO版本1.2必须至少支持EXTENDEDRESULT TLV。

On an FE that supports both RESULT-TLVs and EXTENDEDRESULT-TLVs, a master CE can turn on support for extended results by setting the EResultAdmin value to 2, in which case the FE MUST switch over to sending only EXTENDEDRESULT-TLVs. Likewise, a master CE can turn off extended result responses by writing a 1 to the EResultAdmin. An FE that does not support one mode or the other MUST reject setting EResultAdmin to a value it does not support by responding with an error code of E_NOT_SUPPORTED. It is expected that all CEs participating in a high availability (HA) mode be capable of supporting FEPO version 1.2 whenever EResultAdmin is set to strict support of EXTENDEDRESULT-TLVs. The consensus between CEs in an HA set up to set strict support of EXTENDEDRESULT-TLVs is out of scope for this document.

在同时支持结果TLV和EXTENDEDRESULT TLV的FE上,主CE可以通过将EResultAdmin值设置为2来启用对扩展结果的支持,在这种情况下,FE必须切换到仅发送EXTENDEDRESULT TLV。同样,主CE可以通过向EResultAdmin写入1来关闭扩展结果响应。不支持一种模式或另一种模式的FE必须拒绝将EResultAdmin设置为其不支持的值,方法是响应错误代码E_not_SUPPORTED。当EResultAdmin设置为严格支持EXTENDEDRESULT TLV时,预计所有参与高可用性(HA)模式的CE都能够支持FEPO版本1.2。为严格支持EXTENDEDRESULT TLV而设立的HA中CE之间达成的共识不在本文件范围内。

3.3. Large Table Dumping
3.3. 大台面卸料

Imagine a GET request to a path that is a table, i.e., a table dump. Such a request is sent to the FE with a specific correlator, say X. Imagine this table to have a large number of entries at the FE. For the sake of illustration, let's say millions of rows. This requires that the FE delivers the response over multiple messages, all using the same correlator X.

想象一下,对一个路径的GET请求是一个表,即一个表转储。这样的请求通过一个特定的相关器(比如X)发送到FE。想象一下这个表在FE处有大量的条目。为了便于说明,我们假设有数百万行。这要求FE通过多条消息传递响应,所有消息都使用相同的correlator X。

The ForCES protocol document [RFC5810] does not adequately describe how a large multi-part GET response message is delivered; the text in this section clarifies. We limit the discussion to a table object only.

ForCES协议文件[RFC5810]没有充分描述如何传递大型多部分GET响应消息;本节中的文本进行了澄清。我们将讨论仅限于表对象。

Implementation experience of dumping large tables shows that we can use transaction flags to indicate that a GET response is the beginning, middle, or end of a multi-part message. In other words, we mirror the effect of an atomic transaction sent by a CE to an FE.

转储大型表的实现经验表明,我们可以使用事务标志来指示GET响应是多部分消息的开头、中间或结尾。换句话说,我们镜像了CE发送给FE的原子事务的效果。

CE PL FE PL

CE-PL-FE-PL

         |                                                      |
         | (0) Query, Path-to-a-large-table, OP=GET             |
         |----------------------------------------------------->|
         |                correlator = X                        |
         |                                                      |
         | (1) Query-Response, SOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         |                                                      |
         | (2) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         |                                                      |
         | (3) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         .                                                      .
         .                                                      .
         .                                                      .
         .                                                      .
         |                                                      |
         | (N) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         |                                                      |
         | (N) Query-Response, EOT,AT, OP=GET-RESPONSE          |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             RESULT-TLV (SUCCESS)                     |
         |                                                      |
        
         |                                                      |
         | (0) Query, Path-to-a-large-table, OP=GET             |
         |----------------------------------------------------->|
         |                correlator = X                        |
         |                                                      |
         | (1) Query-Response, SOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         |                                                      |
         | (2) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         |                                                      |
         | (3) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         .                                                      .
         .                                                      .
         .                                                      .
         .                                                      .
         |                                                      |
         | (N) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             DATA TLV (SPARSE/FULL)                   |
         |                                                      |
         | (N) Query-Response, EOT,AT, OP=GET-RESPONSE          |
         |<-----------------------------------------------------|
         |                correlator = X                        |
         |             RESULT-TLV (SUCCESS)                     |
         |                                                      |
        

Figure 4: Large Table Dump Time Sequence

图4:大表转储时间序列

The last message to go to the CE, which carries the End Of Transaction (EOT) flag, MUST NOT carry any data. This allows us to mirror ForCES two-phase commit (2PC) messaging [RFC5810] where the last message is an empty commit message. A GET response will carry a RESULT-TLV in such a case.

发送至CE的最后一条消息(带有事务结束(EOT)标志)不得包含任何数据。这允许我们镜像强制两阶段提交(2PC)消息[RFC5810],其中最后一条消息是空的提交消息。在这种情况下,GET响应将携带RESULT-TLV。

4. IANA Considerations
4. IANA考虑

This document updates <https://www.iana.org/assignments/forces> as follows:

此文档更新<https://www.iana.org/assignments/forces>详情如下:

This document registers two new top-level TLVs and two new path flags; it also updates an IANA-registered FE Protocol Object Logical Functional Block (LFB).

本文档注册了两个新的顶级TLV和两个新的路径标志;它还更新IANA注册的FE协议对象逻辑功能块(LFB)。

Appendix A defines an update to the FE Protocol Object LFB to version 1.2. An entry for FE Protocol Object LFB version 1.2 has been added to the "Logical Functional Block (LFB) Class Names and Class Identifiers" sub-registry.

附录A将FE协议对象LFB更新为1.2版。FE协议对象LFB版本1.2的条目已添加到“逻辑功能块(LFB)类名和类标识符”子注册表中。

The following new TLVs have been defined and added to the "TLV Types" sub-registry:

已定义以下新TLV并将其添加到“TLV类型”子注册表中:

o TABLERANGE-TLV (type ID 0x0117)

o TABLERANGE-TLV(类型ID 0x0117)

o EXTENDEDRESULT-TLV (type ID 0x0118)

o EXTENDEDRESULT-TLV(类型ID 0x0118)

The "RESULT-TLV Result Values" sub-registry has been updated as follows:

“结果-TLV结果值”子注册表已更新如下:

o Codes 0x21-0xFE are marked as Unassigned.

o 代码0x21-0xFE标记为未分配。

o Codes 0x18-0x20 are defined by this document in Section 3.2.1.

o 代码0x18-0x20由本文件第3.2.1节定义。

o Codes 0x100-0x200 are reserved for private use.

o 代码0x100-0x200保留供私人使用。

A new "EXTENDEDRESULT-TLV Result Values" sub-registry has been created. The codes 0x00-0xFF are mirrored from the "RESULT-TLV Result Values" sub-registry. Any future allocations of this code range (in the range 0x21-0xFE) must be made only in the new "EXTENDEDRESULT-TLV Result Values" sub-registry and not in the "RESULT-TLV Result Values" sub-registry. The codes 0x100-0x200 are reserved for private use as described earlier, and the code ranges 0x21-0xFE and 0x201-0xFFFFFFFF are marked as Unassigned with the IANA allocation policy of Specification Required [RFC5226]. The Designated Expert (DE) needs to ensure that existing deployments are not broken by any specified request. The DE should post a given code request to the ForCES WG mailing list (or a successor designated by the Area Director) for comment and review. The DE should then either approve or deny the registration request, publish a notice of the decision to the ForCES WG mailing list or its successor, and inform IANA of his/her decision. A denial notice must be justified by an

已创建新的“EXTENDEDRESULT-TLV结果值”子注册表。代码0x00-0xFF从“结果-TLV结果值”子注册表镜像。此代码范围(范围0x21-0xFE)的任何未来分配只能在新的“EXTENDEDRESULT-TLV结果值”子注册表中进行,而不能在“Result-TLV结果值”子注册表中进行。如前所述,代码0x100-0x200保留供私人使用,并且代码范围0x21-0xFE和0x201-0xFFFFFFFF标记为未根据所需规范的IANA分配策略分配[RFC5226]。指定专家(DE)需要确保现有部署不会因任何指定请求而中断。DE应向部队工作组邮件列表(或区域总监指定的继任者)发布给定代码请求,以供评论和审查。DE应批准或拒绝注册请求,向部队工作组邮件列表或其继任者发布决定通知,并将其决定通知IANA。拒绝通知必须有以下正当理由:

explanation and, in the cases where it is possible, concrete suggestions on how the request can be modified so as to become acceptable.

解释,并在可能的情况下,就如何修改请求以使其变得可接受提出具体建议。

5. Security Considerations
5. 安全考虑

The security considerations described in the ForCES protocol [RFC5810] apply to this document as well.

部队协议[RFC5810]中描述的安全注意事项也适用于本文件。

6. References
6. 工具书类
6.1. Normative References
6.1. 规范性引用文件

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

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

[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008, <http://www.rfc-editor.org/info/rfc5226>.

[RFC5226]Narten,T.和H.Alvestrand,“在RFCs中编写IANA注意事项部分的指南”,BCP 26,RFC 5226,2008年5月<http://www.rfc-editor.org/info/rfc5226>.

[RFC5810] Doria, A., Hadi Salim, J., Haas, R., Khosravi, H., Wang, W., Dong, L., Gopal, R., and J. Halpern, "Forwarding and Control Element Separation (ForCES) Protocol Specification", RFC 5810, March 2010, <http://www.rfc-editor.org/info/rfc5810>.

[RFC5810]Doria,A.,Hadi Salim,J.,Haas,R.,Khosravi,H.,Wang,W.,Dong,L.,Gopal,R.,和J.Halpern,“转发和控制元件分离(部队)协议规范”,RFC 58102010年3月<http://www.rfc-editor.org/info/rfc5810>.

[RFC5811] Hadi Salim, J. and K. Ogawa, "SCTP-Based Transport Mapping Layer (TML) for the Forwarding and Control Element Separation (ForCES) Protocol", RFC 5811, March 2010, <http://www.rfc-editor.org/info/rfc5811>.

[RFC5811]Hadi Salim,J.和K.Ogawa,“转发和控制单元分离(部队)协议的基于SCTP的传输映射层(TML)”,RFC 58112010年3月<http://www.rfc-editor.org/info/rfc5811>.

[RFC5812] Halpern, J. and J. Hadi Salim, "Forwarding and Control Element Separation (ForCES) Forwarding Element Model", RFC 5812, March 2010, <http://www.rfc-editor.org/ info/rfc5812>.

[RFC5812]Halpern,J.和J.Hadi Salim,“转发和控制单元分离(部队)转发单元模型”,RFC 5812,2010年3月<http://www.rfc-editor.org/ 信息/rfc5812>。

[RFC7121] Ogawa, K., Wang, W., Haleplidis, E., and J. Hadi Salim, "High Availability within a Forwarding and Control Element Separation (ForCES) Network Element", RFC 7121, February 2014, <http://www.rfc-editor.org/info/rfc7121>.

[RFC7121]Ogawa,K.,Wang,W.,Haleplidis,E.,和J.Hadi Salim,“转发和控制单元分离(部队)网元内的高可用性”,RFC 71212014年2月<http://www.rfc-editor.org/info/rfc7121>.

6.2. Informative References
6.2. 资料性引用

[RFC3746] Yang, L., Dantu, R., Anderson, T., and R. Gopal, "Forwarding and Control Element Separation (ForCES) Framework", RFC 3746, April 2004, <http://www.rfc-editor.org/info/rfc3746>.

[RFC3746]Yang,L.,Dantu,R.,Anderson,T.,和R.Gopal,“转发和控制单元分离(部队)框架”,RFC 37462004年4月<http://www.rfc-editor.org/info/rfc3746>.

Appendix A. New FEPO Version
附录A.新FEPO版本

This version of FEPO updates the earlier one given in [RFC7121]. The XML has been validated against the schema defined in [RFC5812].

此版本的FEPO更新了[RFC7121]中给出的早期版本。XML已根据[RFC5812]中定义的模式进行验证。

  <LFBLibrary xmlns="urn:ietf:params:xml:ns:forces:lfbmodel:1.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="lfb-schema.xsd" provides="FEPO">
     <!-- XXX -->
     <dataTypeDefs>
        <dataTypeDef>
           <name>CEHBPolicyValues</name>
           <synopsis>
              The possible values of CE heartbeat policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>CEHBPolicy0</name>
                    <synopsis>
                        The CE will send heartbeats to the FE
                        every CEHDI timeout if no other messages
                        have been sent since.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>CEHBPolicy1</name>
                    <synopsis>
                        The CE will not send heartbeats to the FE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FEHBPolicyValues</name>
           <synopsis>
               The possible values of FE heartbeat policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>FEHBPolicy0</name>
                    <synopsis>
                    The FE will not generate any heartbeats to the CE.
                    </synopsis>
        
  <LFBLibrary xmlns="urn:ietf:params:xml:ns:forces:lfbmodel:1.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="lfb-schema.xsd" provides="FEPO">
     <!-- XXX -->
     <dataTypeDefs>
        <dataTypeDef>
           <name>CEHBPolicyValues</name>
           <synopsis>
              The possible values of CE heartbeat policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>CEHBPolicy0</name>
                    <synopsis>
                        The CE will send heartbeats to the FE
                        every CEHDI timeout if no other messages
                        have been sent since.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>CEHBPolicy1</name>
                    <synopsis>
                        The CE will not send heartbeats to the FE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FEHBPolicyValues</name>
           <synopsis>
               The possible values of FE heartbeat policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>FEHBPolicy0</name>
                    <synopsis>
                    The FE will not generate any heartbeats to the CE.
                    </synopsis>
        
                 </specialValue>
                 <specialValue value="1">
                    <name>FEHBPolicy1</name>
                    <synopsis>
                       The FE generates heartbeats to the CE every
                       FEHI if no other
                       messages have been sent to the CE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FERestartPolicyValues</name>
           <synopsis>
              The possible values of FE restart policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>FERestartPolicy0</name>
                    <synopsis>
                       The FE restarts its state from scratch.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>HAModeValues</name>
           <synopsis>
              The possible values of HA modes
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>NoHA</name>
                    <synopsis>
                       The FE is not running in HA mode.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>ColdStandby</name>
                    <synopsis>
                       The FE is running in HA mode cold standby.
                    </synopsis>
        
                 </specialValue>
                 <specialValue value="1">
                    <name>FEHBPolicy1</name>
                    <synopsis>
                       The FE generates heartbeats to the CE every
                       FEHI if no other
                       messages have been sent to the CE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FERestartPolicyValues</name>
           <synopsis>
              The possible values of FE restart policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>FERestartPolicy0</name>
                    <synopsis>
                       The FE restarts its state from scratch.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>HAModeValues</name>
           <synopsis>
              The possible values of HA modes
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>NoHA</name>
                    <synopsis>
                       The FE is not running in HA mode.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>ColdStandby</name>
                    <synopsis>
                       The FE is running in HA mode cold standby.
                    </synopsis>
        
                 </specialValue>
                 <specialValue value="2">
                    <name>HotStandby</name>
                    <synopsis>
                       The FE is running in HA mode hot standby.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>CEFailoverPolicyValues</name>
           <synopsis>
              The possible values of CE failover policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>CEFailoverPolicy0</name>
                    <synopsis>
                        The FE should stop functioning immediately
                        and transition to FE OperDisable state.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>CEFailoverPolicy1</name>
                    <synopsis>
                        The FE should continue forwarding even
                        without an associated CE for CEFTI.  The
                        FE goes to FE OperDisable when the CEFTI
                        expires and there is no association.  Requires
                        graceful restart support.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FEHACapab</name>
           <synopsis>
              The supported HA features
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>GracefullRestart</name>
        
                 </specialValue>
                 <specialValue value="2">
                    <name>HotStandby</name>
                    <synopsis>
                       The FE is running in HA mode hot standby.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>CEFailoverPolicyValues</name>
           <synopsis>
              The possible values of CE failover policy
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>CEFailoverPolicy0</name>
                    <synopsis>
                        The FE should stop functioning immediately
                        and transition to FE OperDisable state.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>CEFailoverPolicy1</name>
                    <synopsis>
                        The FE should continue forwarding even
                        without an associated CE for CEFTI.  The
                        FE goes to FE OperDisable when the CEFTI
                        expires and there is no association.  Requires
                        graceful restart support.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FEHACapab</name>
           <synopsis>
              The supported HA features
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>GracefullRestart</name>
        
                    <synopsis>
                       The FE supports graceful restart.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>HA</name>
                    <synopsis>
                       The FE supports HA.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>CEStatusType</name>
           <synopsis>Status values.  Status for each CE</synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>Disconnected</name>
                    <synopsis>No connection attempt with the CE yet
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>Connected</name>
                    <synopsis>The FE connection with the CE at the TML
                       has been completed.
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
                    <name>Associated</name>
                    <synopsis>The FE has associated with the CE.
                    </synopsis>
                 </specialValue>
                 <specialValue value="3">
                    <name>IsMaster</name>
                    <synopsis>The CE is the master (and associated).
                    </synopsis>
                 </specialValue>
                 <specialValue value="4">
                    <name>LostConnection</name>
                    <synopsis>The FE was associated with the CE but
                       lost the connection.
                    </synopsis>
                 </specialValue>
                 <specialValue value="5">
                    <name>Unreachable</name>
        
                    <synopsis>
                       The FE supports graceful restart.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>HA</name>
                    <synopsis>
                       The FE supports HA.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>CEStatusType</name>
           <synopsis>Status values.  Status for each CE</synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>Disconnected</name>
                    <synopsis>No connection attempt with the CE yet
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>Connected</name>
                    <synopsis>The FE connection with the CE at the TML
                       has been completed.
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
                    <name>Associated</name>
                    <synopsis>The FE has associated with the CE.
                    </synopsis>
                 </specialValue>
                 <specialValue value="3">
                    <name>IsMaster</name>
                    <synopsis>The CE is the master (and associated).
                    </synopsis>
                 </specialValue>
                 <specialValue value="4">
                    <name>LostConnection</name>
                    <synopsis>The FE was associated with the CE but
                       lost the connection.
                    </synopsis>
                 </specialValue>
                 <specialValue value="5">
                    <name>Unreachable</name>
        
                    <synopsis>The CE is deemed as unreachable by the FE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>StatisticsType</name>
           <synopsis>Statistics Definition</synopsis>
           <struct>
              <component componentID="1">
                 <name>RecvPackets</name>
                 <synopsis>Packets received</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="2">
                 <name>RecvErrPackets</name>
                 <synopsis>Packets received from CE with errors
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="3">
                 <name>RecvBytes</name>
                 <synopsis>Bytes received from CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="4">
                 <name>RecvErrBytes</name>
                 <synopsis>Bytes received from CE in error</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="5">
                 <name>TxmitPackets</name>
                 <synopsis>Packets transmitted to CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="6">
                 <name>TxmitErrPackets</name>
                 <synopsis>
                    Packets transmitted to CE that incurred
                    errors
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="7">
                 <name>TxmitBytes</name>
                 <synopsis>Bytes transmitted to CE</synopsis>
                 <typeRef>uint64</typeRef>
        
                    <synopsis>The CE is deemed as unreachable by the FE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>StatisticsType</name>
           <synopsis>Statistics Definition</synopsis>
           <struct>
              <component componentID="1">
                 <name>RecvPackets</name>
                 <synopsis>Packets received</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="2">
                 <name>RecvErrPackets</name>
                 <synopsis>Packets received from CE with errors
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="3">
                 <name>RecvBytes</name>
                 <synopsis>Bytes received from CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="4">
                 <name>RecvErrBytes</name>
                 <synopsis>Bytes received from CE in error</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="5">
                 <name>TxmitPackets</name>
                 <synopsis>Packets transmitted to CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="6">
                 <name>TxmitErrPackets</name>
                 <synopsis>
                    Packets transmitted to CE that incurred
                    errors
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="7">
                 <name>TxmitBytes</name>
                 <synopsis>Bytes transmitted to CE</synopsis>
                 <typeRef>uint64</typeRef>
        
              </component>
              <component componentID="8">
                 <name>TxmitErrBytes</name>
                 <synopsis>Bytes transmitted to CE incurring errors
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
           </struct>
        </dataTypeDef>
        <dataTypeDef>
           <name>AllCEType</name>
           <synopsis>Table Type for AllCE component</synopsis>
           <struct>
              <component componentID="1">
                 <name>CEID</name>
                 <synopsis>ID of the CE</synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="2">
                 <name>Statistics</name>
                 <synopsis>Statistics per CE</synopsis>
                 <typeRef>StatisticsType</typeRef>
              </component>
              <component componentID="3">
                 <name>CEStatus</name>
                 <synopsis>Status of the CE</synopsis>
                 <typeRef>CEStatusType</typeRef>
              </component>
           </struct>
        </dataTypeDef>
        <dataTypeDef>
           <name>ExtendedResultType</name>
           <synopsis>
               Possible extended result support
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <rangeRestriction>
                <allowedRange min="1" max="2"/>
              </rangeRestriction>
              <specialValues>
                 <specialValue value="1">
                    <name>EResultNotSupported</name>
                    <synopsis>
                        Extended results are not supported.
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
        
              </component>
              <component componentID="8">
                 <name>TxmitErrBytes</name>
                 <synopsis>Bytes transmitted to CE incurring errors
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
           </struct>
        </dataTypeDef>
        <dataTypeDef>
           <name>AllCEType</name>
           <synopsis>Table Type for AllCE component</synopsis>
           <struct>
              <component componentID="1">
                 <name>CEID</name>
                 <synopsis>ID of the CE</synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="2">
                 <name>Statistics</name>
                 <synopsis>Statistics per CE</synopsis>
                 <typeRef>StatisticsType</typeRef>
              </component>
              <component componentID="3">
                 <name>CEStatus</name>
                 <synopsis>Status of the CE</synopsis>
                 <typeRef>CEStatusType</typeRef>
              </component>
           </struct>
        </dataTypeDef>
        <dataTypeDef>
           <name>ExtendedResultType</name>
           <synopsis>
               Possible extended result support
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <rangeRestriction>
                <allowedRange min="1" max="2"/>
              </rangeRestriction>
              <specialValues>
                 <specialValue value="1">
                    <name>EResultNotSupported</name>
                    <synopsis>
                        Extended results are not supported.
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
        
                    <name>EResultSupported</name>
                    <synopsis>
                        Extended results are supported.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
     </dataTypeDefs>
     <LFBClassDefs>
        <LFBClassDef LFBClassID="2">
           <name>FEPO</name>
           <synopsis>
              The FE Protocol Object, with extended result control
           </synopsis>
           <version>1.2</version>
           <components>
              <component componentID="1" access="read-only">
                 <name>CurrentRunningVersion</name>
                 <synopsis>Currently running ForCES version</synopsis>
                 <typeRef>uchar</typeRef>
              </component>
              <component componentID="2" access="read-only">
                 <name>FEID</name>
                 <synopsis>Unicast FEID</synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="3" access="read-write">
                 <name>MulticastFEIDs</name>
                 <synopsis>
                    The table of all multicast IDs
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uint32</typeRef>
                 </array>
              </component>
              <component componentID="4" access="read-write">
                 <name>CEHBPolicy</name>
                 <synopsis>
                    The CE Heartbeat Policy
                 </synopsis>
                 <typeRef>CEHBPolicyValues</typeRef>
              </component>
              <component componentID="5" access="read-write">
                 <name>CEHDI</name>
                 <synopsis>
                    The CE Heartbeat Dead Interval in milliseconds
                 </synopsis>
        
                    <name>EResultSupported</name>
                    <synopsis>
                        Extended results are supported.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
     </dataTypeDefs>
     <LFBClassDefs>
        <LFBClassDef LFBClassID="2">
           <name>FEPO</name>
           <synopsis>
              The FE Protocol Object, with extended result control
           </synopsis>
           <version>1.2</version>
           <components>
              <component componentID="1" access="read-only">
                 <name>CurrentRunningVersion</name>
                 <synopsis>Currently running ForCES version</synopsis>
                 <typeRef>uchar</typeRef>
              </component>
              <component componentID="2" access="read-only">
                 <name>FEID</name>
                 <synopsis>Unicast FEID</synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="3" access="read-write">
                 <name>MulticastFEIDs</name>
                 <synopsis>
                    The table of all multicast IDs
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uint32</typeRef>
                 </array>
              </component>
              <component componentID="4" access="read-write">
                 <name>CEHBPolicy</name>
                 <synopsis>
                    The CE Heartbeat Policy
                 </synopsis>
                 <typeRef>CEHBPolicyValues</typeRef>
              </component>
              <component componentID="5" access="read-write">
                 <name>CEHDI</name>
                 <synopsis>
                    The CE Heartbeat Dead Interval in milliseconds
                 </synopsis>
        
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="6" access="read-write">
                 <name>FEHBPolicy</name>
                 <synopsis>
                    The FE Heartbeat Policy
                 </synopsis>
                 <typeRef>FEHBPolicyValues</typeRef>
              </component>
              <component componentID="7" access="read-write">
                 <name>FEHI</name>
                 <synopsis>
                    The FE Heartbeat Interval in milliseconds
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="8" access="read-write">
                 <name>CEID</name>
                 <synopsis>
                    The Primary CE this FE is associated with
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="9" access="read-write">
                 <name>BackupCEs</name>
                 <synopsis>
                    The table of all backup CEs other than the
                    primary
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uint32</typeRef>
                 </array>
              </component>
              <component componentID="10" access="read-write">
                 <name>CEFailoverPolicy</name>
                 <synopsis>
                    The CE Failover Policy
                 </synopsis>
                 <typeRef>CEFailoverPolicyValues</typeRef>
              </component>
              <component componentID="11" access="read-write">
                 <name>CEFTI</name>
                 <synopsis>
                    The CE Failover Timeout Interval in milliseconds
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="12" access="read-write">
        
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="6" access="read-write">
                 <name>FEHBPolicy</name>
                 <synopsis>
                    The FE Heartbeat Policy
                 </synopsis>
                 <typeRef>FEHBPolicyValues</typeRef>
              </component>
              <component componentID="7" access="read-write">
                 <name>FEHI</name>
                 <synopsis>
                    The FE Heartbeat Interval in milliseconds
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="8" access="read-write">
                 <name>CEID</name>
                 <synopsis>
                    The Primary CE this FE is associated with
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="9" access="read-write">
                 <name>BackupCEs</name>
                 <synopsis>
                    The table of all backup CEs other than the
                    primary
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uint32</typeRef>
                 </array>
              </component>
              <component componentID="10" access="read-write">
                 <name>CEFailoverPolicy</name>
                 <synopsis>
                    The CE Failover Policy
                 </synopsis>
                 <typeRef>CEFailoverPolicyValues</typeRef>
              </component>
              <component componentID="11" access="read-write">
                 <name>CEFTI</name>
                 <synopsis>
                    The CE Failover Timeout Interval in milliseconds
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="12" access="read-write">
        
                 <name>FERestartPolicy</name>
                 <synopsis>
                    The FE Restart Policy
                 </synopsis>
                 <typeRef>FERestartPolicyValues</typeRef>
              </component>
              <component componentID="13" access="read-write">
                 <name>LastCEID</name>
                 <synopsis>
                    The Primary CE this FE was last associated
                    with
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="14" access="read-write">
                 <name>HAMode</name>
                 <synopsis>
                    The HA mode used
                 </synopsis>
                 <typeRef>HAModeValues</typeRef>
              </component>
              <component componentID="15" access="read-only">
                 <name>AllCEs</name>
                 <synopsis>The table of all CEs</synopsis>
                 <array type="variable-size">
                    <typeRef>AllCEType</typeRef>
                 </array>
               </component>
               <component componentID="16" access="read-write">
                 <name>EResultAdmin</name>
                 <synopsis>
                     Turn extended results off or on,
                     but default to off.
                 </synopsis>
                 <typeRef>ExtendedResultType</typeRef>
                 <defaultValue>1</defaultValue>
              </component>
           </components>
           <capabilities>
              <capability componentID="30">
                 <name>SupportableVersions</name>
                 <synopsis>
                    The table of ForCES versions that FE supports
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uchar</typeRef>
                 </array>
              </capability>
        
                 <name>FERestartPolicy</name>
                 <synopsis>
                    The FE Restart Policy
                 </synopsis>
                 <typeRef>FERestartPolicyValues</typeRef>
              </component>
              <component componentID="13" access="read-write">
                 <name>LastCEID</name>
                 <synopsis>
                    The Primary CE this FE was last associated
                    with
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="14" access="read-write">
                 <name>HAMode</name>
                 <synopsis>
                    The HA mode used
                 </synopsis>
                 <typeRef>HAModeValues</typeRef>
              </component>
              <component componentID="15" access="read-only">
                 <name>AllCEs</name>
                 <synopsis>The table of all CEs</synopsis>
                 <array type="variable-size">
                    <typeRef>AllCEType</typeRef>
                 </array>
               </component>
               <component componentID="16" access="read-write">
                 <name>EResultAdmin</name>
                 <synopsis>
                     Turn extended results off or on,
                     but default to off.
                 </synopsis>
                 <typeRef>ExtendedResultType</typeRef>
                 <defaultValue>1</defaultValue>
              </component>
           </components>
           <capabilities>
              <capability componentID="30">
                 <name>SupportableVersions</name>
                 <synopsis>
                    The table of ForCES versions that FE supports
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uchar</typeRef>
                 </array>
              </capability>
        
              <capability componentID="31">
                 <name>HACapabilities</name>
                 <synopsis>
                    The table of HA capabilities the FE supports
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>FEHACapab</typeRef>
                 </array>
              </capability>
               <capability componentID="32">
                 <name>EResultCapab</name>
                 <synopsis>
                    The table of supported result capabilities
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>ExtendedResultType</typeRef>
                 </array>
             </capability>
           </capabilities>
           <events baseID="61">
              <event eventID="1">
                 <name>PrimaryCEDown</name>
                 <synopsis>
                    The primary CE has changed.
                 </synopsis>
                 <eventTarget>
                    <eventField>LastCEID</eventField>
                 </eventTarget>
                 <eventChanged/>
                 <eventReports>
                    <eventReport>
                       <eventField>LastCEID</eventField>
                    </eventReport>
                 </eventReports>
              </event>
              <event eventID="2">
                 <name>PrimaryCEChanged</name>
                 <synopsis>A new primary CE has been selected.
                 </synopsis>
                 <eventTarget>
                    <eventField>CEID</eventField>
                 </eventTarget>
                 <eventChanged/>
                 <eventReports>
                    <eventReport>
                       <eventField>CEID</eventField>
                    </eventReport>
                 </eventReports>
        
              <capability componentID="31">
                 <name>HACapabilities</name>
                 <synopsis>
                    The table of HA capabilities the FE supports
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>FEHACapab</typeRef>
                 </array>
              </capability>
               <capability componentID="32">
                 <name>EResultCapab</name>
                 <synopsis>
                    The table of supported result capabilities
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>ExtendedResultType</typeRef>
                 </array>
             </capability>
           </capabilities>
           <events baseID="61">
              <event eventID="1">
                 <name>PrimaryCEDown</name>
                 <synopsis>
                    The primary CE has changed.
                 </synopsis>
                 <eventTarget>
                    <eventField>LastCEID</eventField>
                 </eventTarget>
                 <eventChanged/>
                 <eventReports>
                    <eventReport>
                       <eventField>LastCEID</eventField>
                    </eventReport>
                 </eventReports>
              </event>
              <event eventID="2">
                 <name>PrimaryCEChanged</name>
                 <synopsis>A new primary CE has been selected.
                 </synopsis>
                 <eventTarget>
                    <eventField>CEID</eventField>
                 </eventTarget>
                 <eventChanged/>
                 <eventReports>
                    <eventReport>
                       <eventField>CEID</eventField>
                    </eventReport>
                 </eventReports>
        
              </event>
           </events>
        </LFBClassDef>
     </LFBClassDefs>
  </LFBLibrary>
        
              </event>
           </events>
        </LFBClassDef>
     </LFBClassDefs>
  </LFBLibrary>
        

Acknowledgments

致谢

The author would like to thank Evangelos Haleplidis and Joel Halpern for discussions that made this document better. Adrian Farrel did an excellent AD review of the document, which improved the quality of this document. Tobias Gondrom did the Security Directorate review. Brian Carpenter did the Gen-ART review. Nevil Brownlee performed the Operations Directorate review. S. Moonesamy (SM) worked hard to review our publication process. Pearl Liang caught issues in the IANA text.

作者要感谢Evangelos Haleplidis和Joel Halpern的讨论,这些讨论使本文件变得更好。阿德里安·法雷尔(Adrian Farrel)对该文档进行了出色的广告审查,从而提高了该文档的质量。Tobias Gondrom做了安全理事会的审查。布莱恩·卡彭特做了《当代艺术评论》。内维尔·布朗利进行了运营董事会审查。S.Moonesamy(SM)努力审查我们的出版过程。Pearl Liang抓住了IANA文本中的问题。

The author would like to thank the following IESG members who reviewed and improved this document: Alia Atlas, Barry Leiba, Brian Haberman, Kathleen Moriarty, Richard Barnes, and Spencer Dawkins.

作者要感谢以下IESG成员审查并改进了本文件:Alia Atlas、Barry Leiba、Brian Haberman、Kathleen Moriarty、Richard Barnes和Spencer Dawkins。

Author's Address

作者地址

Jamal Hadi Salim Mojatatu Networks Suite 400, 303 Moodie Dr. Ottawa, Ontario K2H 9R4 Canada

Jamal Hadi Salim Mojatatu Networks 400套房,303 Moodie Dr.渥太华,加拿大安大略省K2H 9R4

   EMail: hadi@mojatatu.com
        
   EMail: hadi@mojatatu.com