| rfc9222.original | rfc9222.txt | |||
|---|---|---|---|---|
| Network Working Group B. E. Carpenter | Internet Engineering Task Force (IETF) B. Carpenter | |||
| Internet-Draft Univ. of Auckland | Request for Comments: 9222 Univ. of Auckland | |||
| Intended status: Informational L. Ciavaglia | Category: Informational L. Ciavaglia | |||
| Expires: 5 August 2022 Rakuten Mobile | ISSN: 2070-1721 Rakuten Mobile | |||
| S. Jiang | S. Jiang | |||
| Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
| P. Peloso | P. Peloso | |||
| Nokia | Nokia | |||
| 1 February 2022 | March 2022 | |||
| Guidelines for Autonomic Service Agents | Guidelines for Autonomic Service Agents | |||
| draft-ietf-anima-asa-guidelines-07 | ||||
| Abstract | Abstract | |||
| This document proposes guidelines for the design of Autonomic Service | This document proposes guidelines for the design of Autonomic Service | |||
| Agents for autonomic networks. Autonomic Service Agents, together | Agents for autonomic networks. Autonomic Service Agents, together | |||
| with the Autonomic Network Infrastructure, the Autonomic Control | with the Autonomic Network Infrastructure, the Autonomic Control | |||
| Plane and the Generic Autonomic Signaling Protocol constitute base | Plane, and the GeneRic Autonomic Signaling Protocol, constitute base | |||
| elements of an autonomic networking ecosystem. | elements of an autonomic networking ecosystem. | |||
| Discussion Venue | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Discussion of this document takes place on the ANIMA mailing list | ||||
| (anima@ietf.org), which is archived at | ||||
| https://mailarchive.ietf.org/arch/browse/anima/ | ||||
| (https://mailarchive.ietf.org/arch/browse/anima/). | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
| approved by the IESG are candidates for any level of Internet | ||||
| Standard; see Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 5 August 2022. | 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/rfc9222. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Logical Structure of an Autonomic Service Agent . . . . . . . 5 | 2. Terminology | |||
| 3. Interaction with the Autonomic Networking Infrastructure . . 6 | 3. Logical Structure of an Autonomic Service Agent | |||
| 3.1. Interaction with the security mechanisms . . . . . . . . 6 | 4. Interaction with the Autonomic Networking Infrastructure | |||
| 3.2. Interaction with the Autonomic Control Plane . . . . . . 6 | 4.1. Interaction with the Security Mechanisms | |||
| 3.3. Interaction with GRASP and its API . . . . . . . . . . . 7 | 4.2. Interaction with the Autonomic Control Plane | |||
| 3.4. Interaction with policy mechanisms . . . . . . . . . . . 8 | 4.3. Interaction with GRASP and its API | |||
| 4. Interaction with Non-Autonomic Components and Systems . . . . 9 | 4.4. Interaction with Policy Mechanisms | |||
| 5. Design of GRASP Objectives . . . . . . . . . . . . . . . . . 9 | 5. Interaction with Non-autonomic Components and Systems | |||
| 6. Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6. Design of GRASP Objectives | |||
| 6.1. Installation phase . . . . . . . . . . . . . . . . . . . 11 | 7. Life Cycle | |||
| 6.1.1. Installation phase inputs and outputs . . . . . . . . 12 | 7.1. Installation Phase | |||
| 6.2. Instantiation phase . . . . . . . . . . . . . . . . . . . 13 | 7.1.1. Installation Phase Inputs and Outputs | |||
| 6.2.1. Operator's goal . . . . . . . . . . . . . . . . . . . 13 | 7.2. Instantiation Phase | |||
| 6.2.2. Instantiation phase inputs and outputs . . . . . . . 14 | 7.2.1. Operator's Goal | |||
| 6.2.3. Instantiation phase requirements . . . . . . . . . . 14 | 7.2.2. Instantiation Phase Inputs and Outputs | |||
| 6.3. Operation phase . . . . . . . . . . . . . . . . . . . . . 15 | 7.2.3. Instantiation Phase Requirements | |||
| 6.4. Removal phase . . . . . . . . . . . . . . . . . . . . . . 16 | 7.3. Operation Phase | |||
| 7. Coordination and Data Models . . . . . . . . . . . . . . . . 16 | 7.4. Removal Phase | |||
| 7.1. Coordination between Autonomic Functions . . . . . . . . 16 | 8. Coordination and Data Models | |||
| 7.2. Coordination with Traditional Management Functions . . . 16 | 8.1. Coordination between Autonomic Functions | |||
| 7.3. Data Models . . . . . . . . . . . . . . . . . . . . . . . 16 | 8.2. Coordination with Traditional Management Functions | |||
| 8. Robustness . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 8.3. Data Models | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 9. Robustness | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 10. Security Considerations | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 19 | 11. IANA Considerations | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 12. References | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 20 | 12.1. Normative References | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 20 | 12.2. Informative References | |||
| Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 22 | Appendix A. Example Logic Flows | |||
| Appendix B. Terminology . . . . . . . . . . . . . . . . . . . . 25 | Acknowledgements | |||
| Appendix C. Example Logic Flows . . . . . . . . . . . . . . . . 25 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| 1. Introduction | 1. Introduction | |||
| This document proposes guidelines for the design of Autonomic Service | This document proposes guidelines for the design of Autonomic Service | |||
| Agents (ASAs) in the context of an Autonomic Network (AN) based on | Agents (ASAs) in the context of an Autonomic Network (AN) based on | |||
| the Autonomic Network Infrastructure (ANI) outlined in the autonomic | the Autonomic Network Infrastructure (ANI) outlined in the autonomic | |||
| networking reference model [RFC8993]. This infrastructure makes use | networking reference model [RFC8993]. This infrastructure makes use | |||
| of the Autonomic Control Plane (ACP) [RFC8994] and the Generic | of the Autonomic Control Plane (ACP) [RFC8994] and the GeneRic | |||
| Autonomic Signaling Protocol (GRASP) [RFC8990]. A general | Autonomic Signaling Protocol (GRASP) [RFC8990]. A general | |||
| introduction to this environment may be found at [IPJ], which also | introduction to this environment may be found at [IPJ], which also | |||
| includes explanatory diagrams, and a summary of terminology is in | includes explanatory diagrams, and a summary of terminology is in | |||
| Appendix B. | Section 2. | |||
| This document is a contribution to the description of an autonomic | This document is a contribution to the description of an autonomic | |||
| networking ecosystem, recognizing that a deployable autonomic network | networking ecosystem, recognizing that a deployable autonomic network | |||
| needs more than just ACP and GRASP implementations. Such an | needs more than just ACP and GRASP implementations. Such an | |||
| autonomic network must achieve management tasks that a Network | autonomic network must achieve management tasks that a Network | |||
| Operations Center (NOC) cannot readily achieve manually, such as | Operations Center (NOC) cannot readily achieve manually, such as | |||
| continuous resource optimization or automated fault detection and | continuous resource optimization or automated fault detection and | |||
| repair. These tasks, and other management automation goals, are | repair. These tasks, and other management automation goals, are | |||
| described at length in [RFC7575]. The net result should be | described at length in [RFC7575]. The net result should be | |||
| significant operational improvement. To achieve this, the autonomic | significant operational improvement. To achieve this, the autonomic | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at line 120 ¶ | |||
| corresponding GRASP technical objective definitions. A GRASP | corresponding GRASP technical objective definitions. A GRASP | |||
| objective [RFC8990] is a data structure whose main contents are a | objective [RFC8990] is a data structure whose main contents are a | |||
| name and a value. The value consists of a single configurable | name and a value. The value consists of a single configurable | |||
| parameter or a set of parameters of some kind. | parameter or a set of parameters of some kind. | |||
| There must also be tools to deploy and oversee ASAs, and integration | There must also be tools to deploy and oversee ASAs, and integration | |||
| with existing operational mechanisms [RFC8368]. However, this | with existing operational mechanisms [RFC8368]. However, this | |||
| document focuses on the design of ASAs, with some reference to | document focuses on the design of ASAs, with some reference to | |||
| implementation and operational aspects. | implementation and operational aspects. | |||
| There is a considerable literature about autonomic agents with a | There is considerable literature about autonomic agents with a | |||
| variety of proposals about how they should be characterized. Some | variety of proposals about how they should be characterized. Some | |||
| examples are [DeMola06], [Huebscher08], [Movahedi12] and [GANA13]. | examples are [DEMOLA06], [HUEBSCHER08], [MOVAHEDI12], and [GANA13]. | |||
| However, for the present document, the basic definitions and goals | However, for the present document, the basic definitions and goals | |||
| for autonomic networking given in [RFC7575] apply. According to RFC | for autonomic networking given in [RFC7575] apply. According to RFC | |||
| 7575, an Autonomic Service Agent is "An agent implemented on an | 7575, an Autonomic Service Agent is "An agent implemented on an | |||
| autonomic node that implements an autonomic function, either in part | autonomic node that implements an autonomic function, either in part | |||
| (in the case of a distributed function) or whole." | (in the case of a distributed function) or whole." | |||
| ASAs must be distinguished from other forms of software component. | ||||
| ASAs must be distinguished from other forms of software components. | ||||
| They are components of network or service management; they do not in | They are components of network or service management; they do not in | |||
| themselves provide services to end users. They do however provide | themselves provide services to end users. They do, however, provide | |||
| management services to network operators and administrators. For | management services to network operators and administrators. For | |||
| example, the services envisaged for network function virtualisation | example, the services envisaged for network function virtualization | |||
| [NFV] or for service function chaining [RFC7665] might be managed by | (NFV) [NFV] or for service function chaining (SFC) [RFC7665] might be | |||
| an ASA rather than by traditional configuration tools. | managed by an ASA rather than by traditional configuration tools. | |||
| Another example is that an existing script running within a router to | Another example is that an existing script running within a router to | |||
| locally monitor or configure functions or services could be upgraded | locally monitor or configure functions or services could be upgraded | |||
| to an ASA that could communicate with peer scripts on neighboring or | to an ASA that could communicate with peer scripts on neighboring or | |||
| remote routers. A high-level API will allow such upgraded scripts to | remote routers. A high-level API will allow such upgraded scripts to | |||
| take full advantage of the secure ACP and the discovery, negotiation | take full advantage of the secure ACP and the discovery, negotiation, | |||
| and synchronization features of GRASP. Familiar tasks such as | and synchronization features of GRASP. Familiar tasks such as | |||
| configuring an Interior Gateway Protocol (IGP) on neighboring routers | configuring an Interior Gateway Protocol (IGP) on neighboring routers | |||
| or even exchanging IGP security keys could be performed securely in | or even exchanging IGP security keys could be performed securely in | |||
| this way. This document mainly addresses issues affecting quite | this way. This document mainly addresses issues affecting quite | |||
| complex ASAs, but initially the most useful ASAs may in fact be | complex ASAs, but initially, the most useful ASAs may in fact be | |||
| rather simple evolutions of existing scripts. | rather simple evolutions of existing scripts. | |||
| The reference model [RFC8993] for autonomic networks explains further | The reference model [RFC8993] for autonomic networks explains further | |||
| the functionality of ASAs by adding "[An ASA is] a process that makes | the functionality of ASAs by adding the following: | |||
| use of the features provided by the ANI to achieve its own goals, | ||||
| usually including interaction with other ASAs via the GRASP protocol | | [An ASA is] a process that makes use of the features provided by | |||
| [RFC8990] or otherwise. Of course, it also interacts with the | | the ANI to achieve its own goals, usually including interaction | |||
| specific targets of its function, using any suitable mechanism. | | with other ASAs via GRASP [RFC8990] or otherwise. Of course, it | |||
| Unless its function is very simple, the ASA will need to handle | | also interacts with the specific targets of its function, using | |||
| overlapping asynchronous operations. It may therefore be a quite | | any suitable mechanism. Unless its function is very simple, the | |||
| complex piece of software in its own right, forming part of the | | ASA will need to handle overlapping asynchronous operations. It | |||
| application layer above the ANI." | | may therefore be a quite complex piece of software in its own | |||
| | right, forming part of the application layer above the ANI. | ||||
| As mentioned, there will certainly be simple ASAs that manage a | As mentioned, there will certainly be simple ASAs that manage a | |||
| single objective in a straightforward way and do not need | single objective in a straightforward way and do not need | |||
| asynchronous operations. In nodes where computing power and memory | asynchronous operations. In nodes where computing power and memory | |||
| space are limited, ASAs should run at a much lower frequency than the | space are limited, ASAs should run at a much lower frequency than the | |||
| primary workload, so CPU load should not be a big issue, but memory | primary workload, so CPU load should not be a big issue, but memory | |||
| footprint in a constrained node is certainly a concern. ASAs | footprint in a constrained node is certainly a concern. ASAs | |||
| installed in constrained devices will have limited functionality. In | installed in constrained devices will have limited functionality. In | |||
| such cases, many aspects of the current document do not apply. | such cases, many aspects of the current document do not apply. | |||
| However, in the general case, an ASA may be a relatively complex | However, in the general case, an ASA may be a relatively complex | |||
| software component that will in many cases control and monitor | software component that will in many cases control and monitor | |||
| simpler entities in the same or remote host(s). For example, a | simpler entities in the same or remote host(s). For example, a | |||
| device controller that manages tens or hundreds of simple devices | device controller that manages tens or hundreds of simple devices | |||
| might contain a single ASA. | might contain a single ASA. | |||
| The remainder of this document offers guidance on the design of | The remainder of this document offers guidance on the design of | |||
| complex ASAs. Some of the material may be familiar to those | complex ASAs. Some of the material may be familiar to those | |||
| experienced in distributed fault-tolerant and real-time control | experienced in distributed fault-tolerant and real-time control | |||
| systems. Robustness and security are of particular importance in | systems. Robustness and security are of particular importance in | |||
| autonomic networks and are discussed in Section 8 and Section 9. | autonomic networks and are discussed in Sections 9 and 10. | |||
| 2. Logical Structure of an Autonomic Service Agent | 2. Terminology | |||
| This section summarizes various acronyms and terminology used in the | ||||
| document. Where no other reference is given, please consult | ||||
| [RFC8993] or [RFC7575]. | ||||
| Autonomic: self-managing (self-configuring, self-protecting, self- | ||||
| healing, self-optimizing), but allowing high-level guidance by a | ||||
| central entity such as a NOC | ||||
| Autonomic Function: a function that adapts on its own to a changing | ||||
| environment | ||||
| Autonomic Node: a node that employs autonomic functions | ||||
| ACP: Autonomic Control Plane [RFC8994] | ||||
| AN: Autonomic Network; a network of autonomic nodes, which interact | ||||
| directly with each other | ||||
| ANI: Autonomic Network Infrastructure | ||||
| ASA: Autonomic Service Agent; an agent installed on an autonomic | ||||
| node that implements an autonomic function, either partially (in | ||||
| the case of a distributed function) or completely | ||||
| BRSKI: Bootstrapping Remote Secure Key Infrastructure [RFC8995] | ||||
| CBOR: Concise Binary Object Representation[RFC8949] | ||||
| GRASP: GeneRric Autonomic Signaling Protocol [RFC8990] | ||||
| GRASP API: GRASP Application Programming Interface [RFC8991] | ||||
| NOC: Network Operations Center [RFC8368] | ||||
| Objective: A GRASP technical objective is a data structure whose | ||||
| main contents are a name and a value. The value consists of a | ||||
| single configurable parameter or a set of parameters of some kind | ||||
| [RFC8990]. | ||||
| 3. Logical Structure of an Autonomic Service Agent | ||||
| As mentioned above, all but the simplest ASAs will need to support | As mentioned above, all but the simplest ASAs will need to support | |||
| asynchronous operations. Different programming environments support | asynchronous operations. Different programming environments support | |||
| asynchronicity in different ways. In this document, we use an | asynchronicity in different ways. In this document, we use an | |||
| explicit multi-threading model to describe operations. This is | explicit multi-threading model to describe operations. This is | |||
| illustrative, and alternatives to multi-threading are discussed in | illustrative, and alternatives to multi-threading are discussed in | |||
| detail in connection with the GRASP API (see Section 3.3). | detail in connection with the GRASP API (see Section 4.3). | |||
| A typical ASA will have a main thread that performs various initial | A typical ASA will have a main thread that performs various initial | |||
| housekeeping actions such as: | housekeeping actions such as: | |||
| * Obtain authorization credentials, if needed. | * obtain authorization credentials, if needed | |||
| * Register the ASA with GRASP. | * register the ASA with GRASP | |||
| * Acquire relevant policy parameters. | * acquire relevant policy parameters | |||
| * Declare data structures for relevant GRASP objectives. | * declare data structures for relevant GRASP objectives | |||
| * Register with GRASP those objectives that it will actively manage. | * register with GRASP those objectives that it will actively manage | |||
| * Launch a self-monitoring thread. | * launch a self-monitoring thread | |||
| * Enter its main loop. | * enter its main loop | |||
| The logic of the main loop will depend on the details of the | The logic of the main loop will depend on the details of the | |||
| autonomic function concerned. Whenever asynchronous operations are | autonomic function concerned. Whenever asynchronous operations are | |||
| required, extra threads may be launched. Examples of such threads | required, extra threads may be launched. Examples of such threads | |||
| include: | include: | |||
| * Repeatedly flood an objective to the AN, so that any ASA can | * repeatedly flood an objective to the AN so that any ASA can | |||
| receive the objective's latest value. | receive the objective's latest value | |||
| * Accept incoming synchronization requests for an objective managed | * accept incoming synchronization requests for an objective managed | |||
| by this ASA. | by this ASA | |||
| * Accept incoming negotiation requests for an objective managed by | * accept incoming negotiation requests for an objective managed by | |||
| this ASA, and then conduct the resulting negotiation with the | this ASA, and then conduct the resulting negotiation with the | |||
| counterpart ASA. | counterpart ASA | |||
| * Manage subsidiary non-autonomic devices directly. | * manage subsidiary non-autonomic devices directly | |||
| These threads should all either exit after their job is done, or | These threads should all either exit after their job is done or enter | |||
| enter a wait state for new work, to avoid wasting system resources. | a wait state for new work to avoid wasting system resources. | |||
| According to the degree of parallelism needed by the application, | According to the degree of parallelism needed by the application, | |||
| some of these threads might be launched in multiple instances. In | some of these threads might be launched in multiple instances. In | |||
| particular, if negotiation sessions with other ASAs are expected to | particular, if negotiation sessions with other ASAs are expected to | |||
| be long or to involve wait states, the ASA designer might allow for | be long or to involve wait states, the ASA designer might allow for | |||
| multiple simultaneous negotiating threads, with appropriate use of | multiple simultaneous negotiating threads, with appropriate use of | |||
| queues and synchronization primitives to maintain consistency. | queues and synchronization primitives to maintain consistency. | |||
| The main loop itself could act as the initiator of synchronization | The main loop itself could act as the initiator of synchronization | |||
| requests or negotiation requests, when the ASA needs data or | requests or negotiation requests when the ASA needs data or resources | |||
| resources from other ASAs. In particular, the main loop should watch | from other ASAs. In particular, the main loop should watch for | |||
| for changes in policy parameters that affect its operation, and if | changes in policy parameters that affect its operation and, if | |||
| appropriate, occasionally refresh authorization credentials. It | appropriate, occasionally refresh authorization credentials. It | |||
| should also do whatever is required to avoid unnecessary resource | should also do whatever is required to avoid unnecessary resource | |||
| consumption, for example by limiting its frequency of execution. | consumption, for example, by limiting its frequency of execution. | |||
| The self-monitoring thread is of considerable importance. Failure of | The self-monitoring thread is of considerable importance. Failure of | |||
| autonomic service agents is highly undesirable. To a large extent | autonomic service agents is highly undesirable. To a large extent, | |||
| this depends on careful coding and testing, with no unhandled error | this depends on careful coding and testing, with no unhandled error | |||
| returns or exceptions, but if there is nevertheless some sort of | returns or exceptions, but if there is nevertheless some sort of | |||
| failure, the self-monitoring thread should detect it, fix it if | failure, the self-monitoring thread should detect it, fix it if | |||
| possible, and in the worst case restart the entire ASA. | possible, and, in the worst case, restart the entire ASA. | |||
| Appendix C presents some example logic flows in informal pseudocode. | Appendix A presents some example logic flows in informal pseudocode. | |||
| 3. Interaction with the Autonomic Networking Infrastructure | 4. Interaction with the Autonomic Networking Infrastructure | |||
| 3.1. Interaction with the security mechanisms | 4.1. Interaction with the Security Mechanisms | |||
| An ASA by definition runs in an autonomic node. Before any normal | An ASA by definition runs in an autonomic node. Before any normal | |||
| ASAs are started, such nodes must be bootstrapped into the autonomic | ASAs are started, such nodes must be bootstrapped into the autonomic | |||
| network's secure key infrastructure, typically in accordance with | network's secure key infrastructure, typically in accordance with | |||
| [RFC8995]. This key infrastructure will be used to secure the ACP | [RFC8995]. This key infrastructure will be used to secure the ACP | |||
| (next section) and may be used by ASAs to set up additional secure | (next section) and may be used by ASAs to set up additional secure | |||
| interactions with their peers, if needed. | interactions with their peers, if needed. | |||
| Note that the secure bootstrap process itself incorporates simple | Note that the secure bootstrap process itself incorporates simple | |||
| special-purpose ASAs that use a restricted mode of GRASP (Section 4 | special-purpose ASAs that use a restricted mode of GRASP (Section 4 | |||
| of [RFC8995]). | of [RFC8995]). | |||
| 3.2. Interaction with the Autonomic Control Plane | 4.2. Interaction with the Autonomic Control Plane | |||
| In a normal autonomic network, ASAs will run as clients of the ACP, | In a normal autonomic network, ASAs will run as clients of the ACP, | |||
| which will provide a fully secured network environment for all | which will provide a fully secured network environment for all | |||
| communication with other ASAs, in most cases mediated by GRASP (next | communication with other ASAs, in most cases mediated by GRASP (next | |||
| section). | section). | |||
| Note that the ACP formation process itself incorporates simple | Note that the ACP formation process itself incorporates simple | |||
| special-purpose ASAs that use a restricted mode of GRASP (Section 6.4 | special-purpose ASAs that use a restricted mode of GRASP (Section 6.4 | |||
| of [RFC8994]). | of [RFC8994]). | |||
| 3.3. Interaction with GRASP and its API | 4.3. Interaction with GRASP and its API | |||
| In a node where a significant number of ASAs are installed, GRASP | In a node where a significant number of ASAs are installed, GRASP | |||
| [RFC8990] is likely to run as a separate process with its API | [RFC8990] is likely to run as a separate process with its API | |||
| [RFC8991] available in user space. Thus, ASAs may operate without | [RFC8991] available in user space. Thus, ASAs may operate without | |||
| special privilege, unless they need it for other reasons. The ASA's | special privilege, unless they need it for other reasons. The ASA's | |||
| view of GRASP is built around GRASP objectives (Section 5), defined | view of GRASP is built around GRASP objectives (Section 6), defined | |||
| as data structures containing administrative information such as the | as data structures containing administrative information such as the | |||
| objective's unique name, and its current value. The format and size | objective's unique name, and its current value. The format and size | |||
| of the value is not restricted by the protocol, except that it must | of the value is not restricted by the protocol, except that it must | |||
| be possible to serialise it for transmission in Concise Binary Object | be possible to serialize it for transmission in Concise Binary Object | |||
| Representation (CBOR) [RFC8949], subject only to GRASP's maximum | Representation (CBOR) [RFC8949], subject only to GRASP's maximum | |||
| message size as discussed in Section 5. | message size as discussed in Section 6. | |||
| As discussed in Section 2, GRASP is an asynchronous protocol, and | As discussed in Section 3, GRASP is an asynchronous protocol, and | |||
| this document uses a multi-threading model to describe operations. | this document uses a multi-threading model to describe operations. | |||
| In many programming environments, an 'event loop' model is used | In many programming environments, an "event loop" model is used | |||
| instead, in which case each thread would be implemented as an event | instead, in which case each thread would be implemented as an event | |||
| handler called in turn by the main loop. For this case, the GRASP | handler called in turn by the main loop. For this case, the GRASP | |||
| API must provide non-blocking calls and possibly support callbacks. | API must provide non-blocking calls and possibly support callbacks. | |||
| This topic is discussed in more detail in [RFC8991], and other | This topic is discussed in more detail in [RFC8991], and other | |||
| asynchronicity models are also possible. Whenever necessary, the | asynchronicity models are also possible. Whenever necessary, the | |||
| GRASP session identifier will be used to distinguish simultaneous | GRASP session identifier will be used to distinguish simultaneous | |||
| operations. | operations. | |||
| The GRASP API should offer the following features: | The GRASP API should offer the following features: | |||
| * Registration functions, so that an ASA can register itself and the | * Registration functions, so that an ASA can register itself and the | |||
| objectives that it manages. | objectives that it manages. | |||
| * A discovery function, by which an ASA can discover other ASAs | * A discovery function, by which an ASA can discover other ASAs | |||
| supporting a given objective. | supporting a given objective. | |||
| * A negotiation request function, by which an ASA can start | * A negotiation request function, by which an ASA can start | |||
| negotiation of an objective with a counterpart ASA. With this, | negotiation of an objective with a counterpart ASA. With this, | |||
| there is a corresponding listening function for an ASA that wishes | there is a corresponding listening function for an ASA that wishes | |||
| to respond to negotiation requests, and a set of functions to | to respond to negotiation requests and a set of functions to | |||
| support negotiating steps. Once a negotiation starts, it is a | support negotiating steps. Once a negotiation starts, it is a | |||
| symmetric process with both sides sending successive objective | symmetric process with both sides sending successive objective | |||
| values to each other until agreement is reached (or the | values to each other until agreement is reached (or the | |||
| negotiation fails). | negotiation fails). | |||
| * A synchronization function, by which an ASA can request the | * A synchronization function, by which an ASA can request the | |||
| current value of an objective from a counterpart ASA. With this, | current value of an objective from a counterpart ASA. With this, | |||
| there is a corresponding listening function for an ASA that wishes | there is a corresponding listening function for an ASA that wishes | |||
| to respond to synchronization requests. Unlike negotiation, | to respond to synchronization requests. Unlike negotiation, | |||
| synchronization is an asymmetric process in which the listener | synchronization is an asymmetric process in which the listener | |||
| skipping to change at page 8, line 21 ¶ | skipping to change at line 376 ¶ | |||
| * A flood function, by which an ASA can cause the current value of | * A flood function, by which an ASA can cause the current value of | |||
| an objective to be flooded throughout the AN so that any ASA can | an objective to be flooded throughout the AN so that any ASA can | |||
| receive it. | receive it. | |||
| For further details and some additional housekeeping functions, see | For further details and some additional housekeeping functions, see | |||
| [RFC8991]. | [RFC8991]. | |||
| The GRASP API is intended to support the various interactions | The GRASP API is intended to support the various interactions | |||
| expected between most ASAs, such as the interactions outlined in | expected between most ASAs, such as the interactions outlined in | |||
| Section 2. However, if ASAs require additional communication between | Section 3. However, if ASAs require additional communication between | |||
| themselves, they can do so directly over the ACP to benefit from its | themselves, they can do so directly over the ACP to benefit from its | |||
| security. One option is to use GRASP discovery and synchronization | security. One option is to use GRASP discovery and synchronization | |||
| as a rendez-vous mechanism between two ASAs, passing communication | as a rendezvous mechanism between two ASAs, passing communication | |||
| parameters such as a TCP port number via GRASP. The use of TLS over | parameters such as a TCP port number via GRASP. The use of TLS over | |||
| the ACP for such communications is advisable, as described in | the ACP for such communications is advisable, as described in | |||
| Section 6.9.2 of [RFC8994]. | Section 6.9.2 of [RFC8994]. | |||
| 3.4. Interaction with policy mechanisms | 4.4. Interaction with Policy Mechanisms | |||
| At the time of writing, the policy mechanisms for the ANI are | At the time of writing, the policy mechanisms for the ANI are | |||
| undefined. In particular, the use of declarative policies (aka | undefined. In particular, the use of declarative policies (aka | |||
| Intents) for the definition and management of ASA's behaviors remains | Intents) for the definition and management of an ASA's behaviors | |||
| a research topic [I-D.irtf-nmrg-ibn-concepts-definitions]. | remains a research topic [IBN-CONCEPTS]. | |||
| In the cases where ASAs are defined as closed control loops, the | In the cases where ASAs are defined as closed control loops, the | |||
| specifications defined in [ZSM009-1] regarding imperative and | specifications defined in [ZSM009-1] regarding imperative and | |||
| declarative goal statements may be applicable. | declarative goal statements may be applicable. | |||
| In the ANI, policy dissemination is expected to operate by an | In the ANI, policy dissemination is expected to operate by an | |||
| information distribution mechanism (e.g. via GRASP [RFC8990]) that | information distribution mechanism (e.g., via GRASP [RFC8990]) that | |||
| can reach all autonomic nodes, and therefore every ASA. However, | can reach all autonomic nodes and therefore every ASA. However, each | |||
| each ASA must be capable of operating "out of the box" in the absence | ASA must be capable of operating "out of the box" in the absence of | |||
| of locally defined policy, so every ASA implementation must include | locally defined policy, so every ASA implementation must include | |||
| carefully chosen default values and settings for all policy | carefully chosen default values and settings for all policy | |||
| parameters. | parameters. | |||
| 4. Interaction with Non-Autonomic Components and Systems | 5. Interaction with Non-autonomic Components and Systems | |||
| An ASA, to have any external effects, must also interact with non- | To have any external effects, an ASA must also interact with non- | |||
| autonomic components of the node where it is installed. For example, | autonomic components of the node where it is installed. For example, | |||
| an ASA whose purpose is to manage a resource must interact with that | an ASA whose purpose is to manage a resource must interact with that | |||
| resource. An ASA managing an entity that is also managed by local | resource. An ASA managing an entity that is also managed by local | |||
| software must interact with that software. For example, if such | software must interact with that software. For example, if such | |||
| management is performed by NETCONF [RFC6241], the ASA must interact | management is performed by NETCONF [RFC6241], the ASA must interact | |||
| with the NETCONF server as an independent NETCONF client in the same | with the NETCONF server as an independent NETCONF client in the same | |||
| node to avoid any inconsistency between configuration changes | node to avoid any inconsistency between configuration changes | |||
| delivered via NETCONF and configuration changes made by the ASA. | delivered via NETCONF and configuration changes made by the ASA. | |||
| In an environment where systems are virtualized and specialized using | In an environment where systems are virtualized and specialized using | |||
| techniques such as network function virtualization or network | techniques such as network function virtualization or network | |||
| slicing, there will be a design choice whether ASAs are deployed once | slicing, there will be a design choice whether ASAs are deployed once | |||
| per physical node or once per virtual context. A related issue is | per physical node or once per virtual context. A related issue is | |||
| whether the ANI as a whole is deployed once on a physical network, or | whether the ANI as a whole is deployed once on a physical network or | |||
| whether several virtual ANIs are deployed. This aspect needs to be | whether several virtual ANIs are deployed. This aspect needs to be | |||
| considered by the ASA designer. | considered by the ASA designer. | |||
| 5. Design of GRASP Objectives | 6. Design of GRASP Objectives | |||
| The design of an ASA will often require the design of a new GRASP | The design of an ASA will often require the design of a new GRASP | |||
| objective. The general rules for the format of GRASP objectives, | objective. The general rules for the format of GRASP objectives, | |||
| their names, and IANA registration are given in [RFC8990]. | their names, and IANA registration are given in [RFC8990]. | |||
| Additionally, that document discusses various general considerations | Additionally, that document discusses various general considerations | |||
| for the design of objectives, which are not repeated here. However, | for the design of objectives, which are not repeated here. However, | |||
| note that the GRASP protocol, like HTTP, does not provide | note that GRASP, like HTTP, does not provide transactional integrity. | |||
| transactional integrity. In particular, steps in a GRASP negotiation | In particular, steps in a GRASP negotiation are not idempotent. The | |||
| are not idempotent. The design of a GRASP objective and the logic | design of a GRASP objective and the logic flow of the ASA should take | |||
| flow of the ASA should take this into account. One approach, which | this into account. One approach, which should be used when possible, | |||
| should be used when possible, is to design objectives with idempotent | is to design objectives with idempotent semantics. If this is not | |||
| semantics. If this is not possible, typically if an ASA is | possible, typically if an ASA is allocating part of a shared resource | |||
| allocating part of a shared resource to other ASAs, it needs to | to other ASAs, it needs to ensure that the same part of the resource | |||
| ensure that the same part of the resource is not allocated twice. | is not allocated twice. The easiest way is to run only one | |||
| The easiest way is to run only one negotiation at a time. If an ASA | negotiation at a time. If an ASA is capable of overlapping several | |||
| is capable of overlapping several negotiations, it must avoid | negotiations, it must avoid interference between these negotiations. | |||
| interference between these negotiations. | ||||
| Negotiations will always end, normally because one end or the other | Negotiations will always end, normally because one end or the other | |||
| declares success or failure. If this does not happen, either a | declares success or failure. If this does not happen, either a | |||
| timeout or exhaustion of the loop count will occur. The definition | timeout or exhaustion of the loop count will occur. The definition | |||
| of a GRASP objective should describe a specific negotiation policy if | of a GRASP objective should describe a specific negotiation policy if | |||
| it is not self-evident. | it is not self-evident. | |||
| GRASP allows a 'dry run' mode of negotiation, where a negotiation | GRASP allows a "dry run" mode of negotiation, where a negotiation | |||
| session follows its normal course but is not committed at either end | session follows its normal course but is not committed at either end | |||
| until a subsequent live negotiation session. If 'dry run' mode is | until a subsequent live negotiation session. If dry run mode is | |||
| defined for the objective, its specification, and every | defined for the objective, its specification, and every | |||
| implementation, must consider what state needs to be saved following | implementation, must consider what state needs to be saved following | |||
| a dry run negotiation, such that a subsequent live negotiation can be | a dry run negotiation, such that a subsequent live negotiation can be | |||
| expected to succeed. It must be clear how long this state is kept, | expected to succeed. It must be clear how long this state is kept | |||
| and what happens if the live negotiation occurs after this state is | and what happens if the live negotiation occurs after this state is | |||
| deleted. An ASA that requests a dry run negotiation must take | deleted. An ASA that requests a dry run negotiation must take | |||
| account of the possibility that a successful dry run is followed by a | account of the possibility that a successful dry run is followed by a | |||
| failed live negotiation. Because of these complexities, the dry run | failed live negotiation. Because of these complexities, the dry run | |||
| mechanism should only be supported by objectives and ASAs where there | mechanism should only be supported by objectives and ASAs where there | |||
| is a significant benefit from it. | is a significant benefit from it. | |||
| The actual value field of an objective is limited by the GRASP | The actual value field of an objective is limited by the GRASP | |||
| protocol definition to any data structure that can be expressed in | protocol definition to any data structure that can be expressed in | |||
| Concise Binary Object Representation (CBOR) [RFC8949]. For some | Concise Binary Object Representation (CBOR) [RFC8949]. For some | |||
| objectives, a single data item will suffice; for example an integer, | objectives, a single data item will suffice, for example, an integer, | |||
| a floating point number, a UTF-8 string or an arbitrary byte string. | a floating point number, a UTF-8 string, or an arbitrary byte string. | |||
| For more complex cases, a simple tuple structure such as [item1, | For more complex cases, a simple tuple structure such as [item1, | |||
| item2, item3] could be used. Since CBOR is closely linked to JSON, | item2, item3] could be used. Since CBOR is closely linked to JSON, | |||
| it is also rather easy to define an objective whose value is a JSON | it is also rather easy to define an objective whose value is a JSON | |||
| structure. The formats acceptable by the GRASP API will limit the | structure. The formats acceptable by the GRASP API will limit the | |||
| options in practice. A generic solution is for the API to accept and | options in practice. A generic solution is for the API to accept and | |||
| deliver the value field in raw CBOR, with the ASA itself encoding and | deliver the value field in raw CBOR, with the ASA itself encoding and | |||
| decoding it via a CBOR library (section 2.3.2.4 of [RFC8991]). | decoding it via a CBOR library (Section 2.3.2.4 of [RFC8991]). | |||
| The maximum size of the value field of an objective is limited by the | The maximum size of the value field of an objective is limited by the | |||
| GRASP maximum message size. If the default maximum size specified as | GRASP maximum message size. If the default maximum size specified as | |||
| GRASP_DEF_MAX_SIZE by [RFC8990] is not enough, the specification of | GRASP_DEF_MAX_SIZE by [RFC8990] is not enough, the specification of | |||
| the objective must indicate the required maximum message size, both | the objective must indicate the required maximum message size for | |||
| for unicast and multicast messages. | both unicast and multicast messages. | |||
| A mapping from YANG to CBOR is defined by [I-D.ietf-core-yang-cbor]. | A mapping from YANG to CBOR is defined by [CBOR-YANG]. Subject to | |||
| Subject to the size limit defined for GRASP messages, nothing | the size limit defined for GRASP messages, nothing prevents | |||
| prevents objectives transporting YANG in this way. | objectives transporting YANG in this way. | |||
| The flexibility of CBOR implies that the value field of many | The flexibility of CBOR implies that the value field of many | |||
| objectives can be extended in service, to add additional information | objectives can be extended in service, to add additional information | |||
| or alternative content, especially if JSON-like structures are used. | or alternative content, especially if JSON-like structures are used. | |||
| This has consequences for the robustness of ASAs, as discussed in | This has consequences for the robustness of ASAs, as discussed in | |||
| Section 8. | Section 9. | |||
| 6. Life Cycle | 7. Life Cycle | |||
| The ASA life cycle was discussed in | The ASA life cycle is discussed in [AUTONOMIC-FUNCTION], from which | |||
| [I-D.peloso-anima-autonomic-function], from which the following text | the following text was derived. It does not cover all details, and | |||
| was derived. It does not cover all details, and some of the terms | some of the terms used would require precise definitions in a given | |||
| used would require precise definitions in a given implementation. | implementation. | |||
| In simple cases, Autonomic functions could be permanent, in the sense | In simple cases, autonomic functions could be permanent, in the sense | |||
| that ASAs are shipped as part of a product and persist throughout the | that ASAs are shipped as part of a product and persist throughout the | |||
| product's life. However, in complex cases, a more likely situation | product's life. However, in complex cases, a more likely situation | |||
| is that ASAs need to be installed or updated dynamically, because of | is that ASAs need to be installed or updated dynamically because of | |||
| new requirements or bugs. This section describes one approach to the | new requirements or bugs. This section describes one approach to the | |||
| resulting life cycle of individual ASAs. It does not consider wider | resulting life cycle of individual ASAs. It does not consider wider | |||
| issues such as updates of shared libraries. | issues such as updates of shared libraries. | |||
| Because continuity of service is fundamental to autonomic networking, | Because continuity of service is fundamental to autonomic networking, | |||
| the process of seamlessly replacing a running instance of an ASA with | the process of seamlessly replacing a running instance of an ASA with | |||
| a new version needs to be part of the ASA's design. The implication | a new version needs to be part of the ASA's design. The implication | |||
| of service continuity on the design of ASAs can be illustrated along | of service continuity on the design of ASAs can be illustrated along | |||
| the three main phases of the ASA life cycle, namely Installation, | the three main phases of the ASA life cycle, namely installation, | |||
| Instantiation and Operation. | instantiation, and operation. | |||
| +--------------+ | +--------------+ | |||
| Undeployed ------>| |------> Undeployed | Undeployed ------>| |------> Undeployed | |||
| | Installed | | | Installed | | |||
| +-->| |---+ | +-->| |---+ | |||
| Mandate | +--------------+ | Receives a | Mandate | +--------------+ | Receives a | |||
| is revoked | +--------------+ | Mandate | is revoked | +--------------+ | Mandate | |||
| +---| |<--+ | +---| |<--+ | |||
| | Instantiated | | | Instantiated | | |||
| +-->| |---+ | +-->| |---+ | |||
| set | +--------------+ | set | set | +--------------+ | set | |||
| down | +--------------+ | up | down | +--------------+ | up | |||
| +---| |<--+ | +---| |<--+ | |||
| | Operational | | | Operational | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| Figure 1: Life Cycle of an Autonomic Service Agent | Figure 1: Life Cycle of an Autonomic Service Agent | |||
| 6.1. Installation phase | 7.1. Installation Phase | |||
| We define "installation" to mean that a piece of software is loaded | We define "installation" to mean that a piece of software is loaded | |||
| into a device, along with any necessary libraries, but is not yet | into a device, along with any necessary libraries, but is not yet | |||
| activated. | activated. | |||
| Before being able to instantiate and run ASAs, the operator will | Before being able to instantiate and run ASAs, the operator will | |||
| first provision the infrastructure with the sets of ASA software | first provision the infrastructure with the sets of ASA software | |||
| corresponding to its needs and objectives. Such software must be | corresponding to its needs and objectives. Such software must be | |||
| checked for integrity and authenticity before installation. The | checked for integrity and authenticity before installation. The | |||
| provisioning of the infrastructure is realized in the installation | provisioning of the infrastructure is realized in the installation | |||
| phase and consists of installing (or checking the availability of) | phase and consists of installing (or checking the availability of) | |||
| the pieces of software of the different ASAs in a set of Installation | the pieces of software of the different ASAs in a set of Installation | |||
| Hosts within the autonomic network. | Hosts within the autonomic network. | |||
| There are 3 properties applicable to the installation of ASAs: | There are three properties applicable to the installation of ASAs: | |||
| * The dynamic installation property allows installing an ASA on | * The dynamic installation property allows installing an ASA on | |||
| demand, on any hosts compatible with the ASA. | demand, on any hosts compatible with the ASA. | |||
| * The decoupling property allows an ASA on one machine to control | * The decoupling property allows an ASA on one machine to control | |||
| resources in another machine (known as "decoupled mode"). | resources in another machine (known as "decoupled mode"). | |||
| * The multiplicity property allows controlling multiple sets of | * The multiplicity property allows controlling multiple sets of | |||
| resources from a single ASA. | resources from a single ASA. | |||
| These three properties are very important in the context of the | These three properties are very important in the context of the | |||
| installation phase as their variations condition how the ASA could be | installation phase as their variations condition how the ASA could be | |||
| installed on the infrastructure. | installed on the infrastructure. | |||
| 6.1.1. Installation phase inputs and outputs | 7.1.1. Installation Phase Inputs and Outputs | |||
| Inputs are: | Inputs are: | |||
| * [ASA_type] specifies which ASA to install. | * [ASA_type]: specifies which ASA to install. | |||
| * [Installation_target_infrastructure] specifies the candidate | * [Installation_target_infrastructure]: specifies the candidate | |||
| installation Hosts. | installation Hosts. | |||
| * [ASA_placement_function] specifies how the installation phase will | * [ASA_placement_function]: specifies how the installation phase | |||
| meet the operator's needs and objectives for the provision of the | will meet the operator's needs and objectives for the provision of | |||
| infrastructure. This function is only useful in the decoupled | the infrastructure. This function is only useful in the decoupled | |||
| mode. It can be as simple as an explicit list of hosts on which | mode. It can be as simple as an explicit list of hosts on which | |||
| the ASAs are to be installed, or it could consist of operator- | the ASAs are to be installed, or it could consist of operator- | |||
| defined criteria and constraints. | defined criteria and constraints. | |||
| The main output of the installation phase is a [List_of_ASAs] | The main output of the installation phase is a [List_of_ASAs] | |||
| installed on [List_of_hosts]. This output is also useful for the | installed on [List_of_hosts]. This output is also useful for the | |||
| coordination function where it acts as a static interaction map (see | coordination function where it acts as a static interaction map (see | |||
| Section 7.1). | Section 8.1). | |||
| The condition to validate in order to pass to next phase is to ensure | The condition to validate in order to pass to next phase is to ensure | |||
| that [List_of_ASAs] are correctly installed on [List_of_hosts]. A | that [List_of_ASAs] are correctly installed on [List_of_hosts]. A | |||
| minimum set of primitives to support the installation of ASAs could | minimum set of primitives to support the installation of ASAs could | |||
| be: install(List_of_ASAs, Installation_target_infrastructure, | be the following: install (List_of_ASAs, | |||
| ASA_placement_function), and uninstall (List_of_ASAs). | Installation_target_infrastructure, ASA_placement_function) and | |||
| uninstall (List_of_ASAs). | ||||
| 6.2. Instantiation phase | 7.2. Instantiation Phase | |||
| We define "instantiation" as the operation of creating a single ASA | We define "instantiation" as the operation of creating a single ASA | |||
| instance from the corresponding piece of installed software. | instance from the corresponding piece of installed software. | |||
| Once the ASAs are installed on the appropriate hosts in the network, | Once the ASAs are installed on the appropriate hosts in the network, | |||
| these ASAs may start to operate. From the operator viewpoint, an | these ASAs may start to operate. From the operator viewpoint, an | |||
| operating ASA means the ASA manages the network resources as per the | operating ASA means the ASA manages the network resources as per the | |||
| objectives given. At the ASA local level, operating means executing | objectives given. At the ASA local level, operating means executing | |||
| their control loop algorithm. | their control loop algorithm. | |||
| There are two apsects to take into consideration. First, having a | There are two aspects to take into consideration. First, having a | |||
| piece of code installed and available to run on a host is not the | piece of code installed and available to run on a host is not the | |||
| same as having an agent based on this piece of code running inside | same as having an agent based on this piece of code running inside | |||
| the host. Second, in a coupled case, determining which resources are | the host. Second, in a coupled case, determining which resources are | |||
| controlled by an ASA is straightforward (the ASA runs on the same | controlled by an ASA is straightforward (the ASA runs on the same | |||
| autonomic node as the resources it is controlling); in a decoupled | autonomic node as the resources it is controlling). In a decoupled | |||
| mode determining this is a bit more complex: a starting agent will | mode, determining this is a bit more complex: a starting agent will | |||
| have to either discover the set of resources it ought to control, or | have to either discover the set of resources it ought to control, or | |||
| such information has to be communicated to the ASA. | such information has to be communicated to the ASA. | |||
| The instantiation phase of an ASA covers both these aspects: starting | The instantiation phase of an ASA covers both these aspects: starting | |||
| the agent code (when this does not start automatically) and | the agent code (when this does not start automatically) and | |||
| determining which resources have to be controlled (when this is not | determining which resources have to be controlled (when this is not | |||
| straightforward). | straightforward). | |||
| 6.2.1. Operator's goal | 7.2.1. Operator's Goal | |||
| Through this phase, the operator wants to control its autonomic | Through this phase, the operator wants to control its autonomic | |||
| network regarding at least two aspects: | network regarding at least two aspects: | |||
| 1 determine the scope of autonomic functions by instructing which | 1. determine the scope of autonomic functions by instructing which | |||
| network resources have to be managed by which autonomic function | network resources have to be managed by which autonomic function | |||
| (and more precisely by which release of the ASA software code, | (and more precisely by which release of the ASA software code, | |||
| e.g., version number or provider), | e.g., version number or provider). | |||
| 2 determine how the autonomic functions are organized by | 2. determine how the autonomic functions are organized by | |||
| instantiating a set of ASAs across one or more autonomic nodes and | instantiating a set of ASAs across one or more autonomic nodes | |||
| instructing them accordingly about the other ASAs in the set as | and instructing them accordingly about the other ASAs in the set | |||
| necessary. | as necessary. | |||
| In this phase, the operator may also want to set goals for autonomic | In this phase, the operator may also want to set goals for autonomic | |||
| functions, e.g., by configuring GRASP objectives. | functions, e.g., by configuring GRASP objectives. | |||
| The operator's goal can be summarized in an instruction to the | The operator's goal can be summarized in an instruction to the | |||
| autonomic ecosystem matching the following format, explained in | autonomic ecosystem matching the following format, explained in | |||
| detail in the next sub-section: | detail in the next sub-section: | |||
| [Instances_of_ASA_type] ready to control | [Instances_of_ASA_type] ready to control | |||
| [Instantiation_target_infrastructure] with | [Instantiation_target_infrastructure] with | |||
| [Instantiation_target_parameters] | [Instantiation_target_parameters] | |||
| 6.2.2. Instantiation phase inputs and outputs | 7.2.2. Instantiation Phase Inputs and Outputs | |||
| Inputs are: | Inputs are: | |||
| * [Instances_of_ASA_type] that specifies which ASAs to instantiate | * [Instances_of_ASA_type]: specifies which ASAs to instantiate | |||
| * [Instantiation_target_infrastructure] that specifies which are the | * [Instantiation_target_infrastructure]: specifies which resources | |||
| resources to be managed by the autonomic function; this can be the | are to be managed by the autonomic function; this can be the whole | |||
| whole network or a subset of it like a domain, a physical segment | network or a subset of it like a domain, a physical segment, or | |||
| or even a specific list of resources, | even a specific list of resources. | |||
| * [Instantiation_target_parameters] that specifies which are the | * [Instantiation_target_parameters]: specifies which GRASP | |||
| GRASP objectives to be sent to ASAs (e.g., an optimization target) | objectives are to be sent to ASAs (e.g., an optimization target) | |||
| Outputs are: | Outputs are: | |||
| * [Set_of_ASA_resources_relations] describing which resources are | * [Set_of_ASA_resources_relations]: describes which resources are | |||
| managed by which ASA instances; this is not a formal message, but | managed by which ASA instances; this is not a formal message but a | |||
| a resulting configuration log for a set of ASAs. | resulting configuration log for a set of ASAs. | |||
| 6.2.3. Instantiation phase requirements | 7.2.3. Instantiation Phase Requirements | |||
| The instructions described in Section 6.2 could be either: | The instructions described in Section 7.2 could be either of the | |||
| following: | ||||
| * Sent to a targeted ASA. In the case, the receiving Agent will | * Sent to a targeted ASA. In this case, the receiving Agent will | |||
| have to manage the specified list of | have to manage the specified list of | |||
| [Instantiation_target_infrastructure], with the | [Instantiation_target_infrastructure], with the | |||
| [Instantiation_target_parameters]. | [Instantiation_target_parameters]. | |||
| * Broadcast to all ASAs. In this case, the ASAs would determine | * Broadcast to all ASAs. In this case, the ASAs would determine | |||
| from the list which ASAs would handle which | from the list which ASAs would handle which | |||
| [Instantiation_target_infrastructure], with the | [Instantiation_target_infrastructure], with the | |||
| [Instantiation_target_parameters]. | [Instantiation_target_parameters]. | |||
| These instructions may be grouped as a specific data structure, | These instructions may be grouped as a specific data structure | |||
| referred to as an ASA Instance Mandate. The specification of such an | referred to as an ASA Instance Mandate. The specification of such an | |||
| ASA Instance Mandate is beyond the scope of this document. | ASA Instance Mandate is beyond the scope of this document. | |||
| The conclusion of this instantiation phase is a set of ASA instances | The conclusion of this instantiation phase is a set of ASA instances | |||
| ready to operate. These ASA instances are characterized by the | ready to operate. These ASA instances are characterized by the | |||
| resources they manage, the metrics being monitored and the actions | resources they manage, the metrics being monitored, and the actions | |||
| that can be executed (like modifying certain parameters values). The | that can be executed (like modifying certain parameter values). The | |||
| description of the ASA instance may be defined in an ASA Instance | description of the ASA instance may be defined in an ASA Instance | |||
| Manifest data structure. The specification of such an ASA Instance | Manifest data structure. The specification of such an ASA Instance | |||
| Manifest is beyond the scope of this document. | Manifest is beyond the scope of this document. | |||
| The ASA Instance Manifest does not only serve informational purposes | The ASA Instance Manifest does not only serve informational purposes | |||
| such as acknowledgement of successful instantiation to the operator, | such as acknowledgement of successful instantiation to the operator | |||
| but is also necessary for further autonomic operations with: | but is also necessary for further autonomic operations with: | |||
| * coordinated entities (see Section 7.1) | * coordinated entities (see Section 8.1) | |||
| * collaborative entities with purposes such as to establish | * collaborative entities with purposes such as to establish | |||
| knowledge exchange (some ASAs may produce knowledge or monitor | knowledge exchange (some ASAs may produce knowledge or monitor | |||
| metrics that would be useful for other ASAs) | metrics that would be useful for other ASAs) | |||
| 6.3. Operation phase | 7.3. Operation Phase | |||
| During the Operation phase, the operator can: | During the operation phase, the operator can: | |||
| * Activate/Deactivate ASAs: enable/disable their autonomic loops. | * activate/deactivate ASAs: enable/disable their autonomic loops | |||
| * Modify ASAs targets: set different technical objectives. | * modify ASA targets: set different technical objectives | |||
| * Modify ASAs managed resources: update the instance mandate to | * modify ASAs managed resources: update the Instance Mandate to | |||
| specify a different set of resources to manage (only applicable to | specify a different set of resources to manage (only applicable to | |||
| decoupled ASAs). | decoupled ASAs) | |||
| During the Operation phase, running ASAs can interact with other | During the operation phase, running ASAs can interact with other | |||
| ASAs: | ASAs: | |||
| * in order to exchange knowledge (e.g. an ASA providing traffic | * in order to exchange knowledge (e.g., an ASA providing traffic | |||
| predictions to a load balancing ASA) | predictions to a load balancing ASA) | |||
| * in order to collaboratively reach an objective (e.g. ASAs | * in order to collaboratively reach an objective (e.g., ASAs | |||
| pertaining to the same autonomic function will collaborate, e.g., | pertaining to the same autonomic function will collaborate, e.g., | |||
| in the case of a load balancing function, by modifying link | in the case of a load balancing function, by modifying link | |||
| metrics according to neighboring resource loads) | metrics according to neighboring resource loads) | |||
| During the Operation phase, running ASAs are expected to apply | During the operation phase, running ASAs are expected to apply | |||
| coordination schemes as per Section 7.1. | coordination schemes as per Section 8.1. | |||
| 6.4. Removal phase | 7.4. Removal Phase | |||
| When an ASA is removed from service and uninstalled, the above steps | When an ASA is removed from service and uninstalled, the above steps | |||
| are reversed. It is important that its data, especially any security | are reversed. It is important that its data, especially any security | |||
| key material, is purged. | key material, is purged. | |||
| 7. Coordination and Data Models | 8. Coordination and Data Models | |||
| 7.1. Coordination between Autonomic Functions | 8.1. Coordination between Autonomic Functions | |||
| Some autonomic functions will be completely independent of each | Some autonomic functions will be completely independent of each | |||
| other. However, others are at risk of interfering with each other - | other. However, others are at risk of interfering with each other; | |||
| for example, two different optimization functions might both attempt | for example, two different optimization functions might both attempt | |||
| to modify the same underlying parameter in different ways. In a | to modify the same underlying parameter in different ways. In a | |||
| complete system, a method is needed of identifying ASAs that might | complete system, a method is needed for identifying ASAs that might | |||
| interfere with each other and coordinating their actions when | interfere with each other and coordinating their actions when | |||
| necessary. | necessary. | |||
| 7.2. Coordination with Traditional Management Functions | 8.2. Coordination with Traditional Management Functions | |||
| Some ASAs will have functions that overlap with existing | Some ASAs will have functions that overlap with existing | |||
| configuration tools and network management mechanisms such as command | configuration tools and network management mechanisms such as | |||
| line interfaces, DHCP, DHCPv6, SNMP, NETCONF, and RESTCONF. This is | command-line interfaces, DHCP, DHCPv6, SNMP, NETCONF, and RESTCONF. | |||
| of course an existing problem whenever multiple configuration tools | This is, of course, an existing problem whenever multiple | |||
| are in use by the NOC. Each ASA designer will need to consider this | configuration tools are in use by the NOC. Each ASA designer will | |||
| issue and how to avoid clashes and inconsistencies in various | need to consider this issue and how to avoid clashes and | |||
| deployment scenarios. Some specific considerations for interaction | inconsistencies in various deployment scenarios. Some specific | |||
| with OAM tools are given in [RFC8368]. As another example, [RFC8992] | considerations for interaction with OAM tools are given in [RFC8368]. | |||
| describes how autonomic management of IPv6 prefixes can interact with | As another example, [RFC8992] describes how autonomic management of | |||
| prefix delegation via DHCPv6. The description of a GRASP objective | IPv6 prefixes can interact with prefix delegation via DHCPv6. The | |||
| and of an ASA using it should include a discussion of any such | description of a GRASP objective and of an ASA using it should | |||
| interactions. | include a discussion of any such interactions. | |||
| 7.3. Data Models | 8.3. Data Models | |||
| Management functions often include a shared data model, quite likely | Management functions often include a shared data model, quite likely | |||
| to be expressed in a formal notation such as YANG. This aspect | to be expressed in a formal notation such as YANG. This aspect | |||
| should not be an afterthought in the design of an ASA. To the | should not be an afterthought in the design of an ASA. To the | |||
| contrary, the design of the ASA and of its GRASP objectives should | contrary, the design of the ASA and of its GRASP objectives should | |||
| match the data model; as noted in Section 5, YANG serialized as CBOR | match the data model; as noted in Section 6, YANG serialized as CBOR | |||
| may be used directly as the value of a GRASP objective. | may be used directly as the value of a GRASP objective. | |||
| 8. Robustness | 9. Robustness | |||
| It is of great importance that all components of an autonomic system | It is of great importance that all components of an autonomic system | |||
| are highly robust. Although ASA designers should aim for their | are highly robust. Although ASA designers should aim for their | |||
| component to never fail, it is more important to design the ASA to | component to never fail, it is more important to design the ASA to | |||
| assume that failures will happen and to gracefully recover from those | assume that failures will happen and to gracefully recover from those | |||
| failures when they occur. Hence, this section lists various aspects | failures when they occur. Hence, this section lists various aspects | |||
| of robustness that ASA designers should consider: | of robustness that ASA designers should consider: | |||
| 1. If despite all precautions, an ASA does encounter a fatal error, | 1. If despite all precautions, an ASA does encounter a fatal error, | |||
| it should in any case restart automatically and try again. To | it should in any case restart automatically and try again. To | |||
| skipping to change at page 17, line 32 ¶ | skipping to change at line 792 ¶ | |||
| out of bounds, the corresponding parameter should be either left | out of bounds, the corresponding parameter should be either left | |||
| unchanged or restored to a value known to be safe in all | unchanged or restored to a value known to be safe in all | |||
| configurations. | configurations. | |||
| 3. If a GRASP synchronization or negotiation session fails for any | 3. If a GRASP synchronization or negotiation session fails for any | |||
| reason, it may be repeated after a suitable pause. The length | reason, it may be repeated after a suitable pause. The length | |||
| of the pause depends on the use case; randomization and | of the pause depends on the use case; randomization and | |||
| exponential backoff should be considered. | exponential backoff should be considered. | |||
| 4. If a session fails repeatedly, the ASA should consider that its | 4. If a session fails repeatedly, the ASA should consider that its | |||
| peer has failed, and cause GRASP to flush its discovery cache | peer has failed, and it should cause GRASP to flush its | |||
| and repeat peer discovery. | discovery cache and repeat peer discovery. | |||
| 5. In any case, it may be prudent to repeat discovery periodically, | 5. In any case, it may be prudent to repeat discovery periodically, | |||
| depending on the use case. | depending on the use case. | |||
| 6. Any received GRASP message should be checked. If it is wrongly | 6. Any received GRASP message should be checked. If it is wrongly | |||
| formatted, it should be ignored. Within a unicast session, an | formatted, it should be ignored. Within a unicast session, an | |||
| Invalid message (M_INVALID) may be sent. This function may be | Invalid message (M_INVALID) may be sent. This function may be | |||
| provided by the GRASP implementation itself. | provided by the GRASP implementation itself. | |||
| 7. Any received GRASP objective should be checked. Basic | 7. Any received GRASP objective should be checked. Basic | |||
| skipping to change at page 18, line 15 ¶ | skipping to change at line 822 ¶ | |||
| 8. On the other hand, the definitions of GRASP objectives are very | 8. On the other hand, the definitions of GRASP objectives are very | |||
| likely to be extended, using the flexibility of CBOR or JSON. | likely to be extended, using the flexibility of CBOR or JSON. | |||
| Therefore, ASAs should be able to deal gracefully with unknown | Therefore, ASAs should be able to deal gracefully with unknown | |||
| components within the values of objectives. The specification | components within the values of objectives. The specification | |||
| of an objective should describe how unknown components are to be | of an objective should describe how unknown components are to be | |||
| handled (ignored, logged and ignored, or rejected as an error). | handled (ignored, logged and ignored, or rejected as an error). | |||
| 9. If an ASA receives either an Invalid message (M_INVALID) or a | 9. If an ASA receives either an Invalid message (M_INVALID) or a | |||
| Negotiation End message (M_END) with a Decline option | Negotiation End message (M_END) with a Decline option | |||
| (O_DECLINE), one possible reason is that the peer ASA does not | (O_DECLINE), one possible reason is that the peer ASA does not | |||
| support a new feature of either GRASP or of the objective in | support a new feature of either GRASP or the objective in | |||
| question. In such a case the ASA may choose to repeat the | question. In such a case, the ASA may choose to repeat the | |||
| operation concerned without using that new feature. | operation concerned without using that new feature. | |||
| 10. All other possible exceptions should be handled in an orderly | 10. All other possible exceptions should be handled in an orderly | |||
| way. There should be no such thing as an unhandled exception | way. There should be no such thing as an unhandled exception | |||
| (but see point 1 above). | (but see point 1 above). | |||
| At a slightly more general level, ASAs are not services in | At a slightly more general level, ASAs are not services in | |||
| themselves, but they automate services. This has a fundamental | themselves, but they automate services. This has a fundamental | |||
| impact on how to design robust ASAs. In general, when an ASA | impact on how to design robust ASAs. In general, when an ASA | |||
| observes a particular state (1) of operations of the services/ | observes a particular state (1) of operations of the services/ | |||
| resources it controls, it typically aims to improve this state to a | resources it controls, it typically aims to improve this state to a | |||
| better state, say (2). Ideally, the ASA is built so that it can | better state, say (2). Ideally, the ASA is built so that it can | |||
| ensure that any error encountered can still lead to returning to (1) | ensure that any error encountered can still lead to returning to (1) | |||
| instead of a state (3) which is worse than (1). One example instance | instead of a state (3), which is worse than (1). One example | |||
| of this principle is "make-before-break" used in reconfiguration of | instance of this principle is "make-before-break" used in | |||
| routing protocols in manual operations. This principle of operations | reconfiguration of routing protocols in manual operations. This | |||
| can accordingly be coded into the operation of an ASA. The GRASP dry | principle of operations can accordingly be coded into the operation | |||
| run option mentioned in Section 5 is another tool helpful for this | of an ASA. The GRASP dry run option mentioned in Section 6 is | |||
| ASA design goal of "test-before-make". | another tool helpful for this ASA design goal of "test-before-make". | |||
| 9. Security Considerations | 10. Security Considerations | |||
| ASAs are intended to run in an environment that is protected by the | ASAs are intended to run in an environment that is protected by the | |||
| Autonomic Control Plane [RFC8994], admission to which depends on an | Autonomic Control Plane [RFC8994], admission to which depends on an | |||
| initial secure bootstrap process such as BRSKI [RFC8995]. Those | initial secure bootstrap process such as BRSKI [RFC8995]. Those | |||
| documents describe security considerations relating to the use of and | documents describe security considerations relating to the use of and | |||
| properties provided by the ACP and BRSKI, respectively. Such an ACP | properties provided by the ACP and BRSKI, respectively. Such an ACP | |||
| can provide keying material for mutual authentication between ASAs as | can provide keying material for mutual authentication between ASAs as | |||
| well as confidential communication channels for messages between | well as confidential communication channels for messages between | |||
| ASAs. In some deployments, a secure partition of the link layer | ASAs. In some deployments, a secure partition of the link layer | |||
| might be used instead. GRASP itself has significant security | might be used instead. GRASP itself has significant security | |||
| considerations [RFC8990]. However, this does not relieve ASAs of | considerations [RFC8990]. However, this does not relieve ASAs of | |||
| responsibility for security. When ASAs configure or manage network | responsibility for security. When ASAs configure or manage network | |||
| elements outside the ACP, potentially in a different physical node, | elements outside the ACP, potentially in a different physical node, | |||
| they must interact with other non-autonomic software components to | they must interact with other non-autonomic software components to | |||
| perform their management functions. The details are specific to each | perform their management functions. The details are specific to each | |||
| case, but this has an important security implication. An ASA might | case, but this has an important security implication. An ASA might | |||
| act as a loophole by which the managed entity could penetrate the | act as a loophole by which the managed entity could penetrate the | |||
| security boundary of the ANI. Thus, ASAs must be designed to avoid | security boundary of the ANI. Thus, ASAs must be designed to avoid | |||
| loopholes such as passing on executable code or proxying unverified | loopholes such as passing on executable code or proxying unverified | |||
| commands, and should if possible operate in an unprivileged mode. In | commands and should, if possible, operate in an unprivileged mode. | |||
| particular, they must use secure coding practices, e.g., carefully | In particular, they must use secure coding practices, e.g., carefully | |||
| validate all incoming information and avoid unnecessary elevation of | validate all incoming information and avoid unnecessary elevation of | |||
| privilege. This will apply in particular when an ASA interacts with | privilege. This will apply in particular when an ASA interacts with | |||
| a management component such as a NETCONF server. | a management component such as a NETCONF server. | |||
| A similar situation will arise if an ASA acts as a gateway between | A similar situation will arise if an ASA acts as a gateway between | |||
| two separate autonomic networks, i.e. it has access to two separate | two separate autonomic networks, i.e., it has access to two separate | |||
| ACPs. Such an ASA must also be designed to avoid loopholes and to | ACPs. Such an ASA must also be designed to avoid loopholes and to | |||
| validate incoming information from both sides. | validate incoming information from both sides. | |||
| As a reminder, GRASP does not intrinsically provide transactional | As a reminder, GRASP does not intrinsically provide transactional | |||
| integrity (Section 5). | integrity (Section 6). | |||
| As appropriate to their specific functions, ASAs should take account | As appropriate to their specific functions, ASAs should take account | |||
| of relevant privacy considerations [RFC6973]. | of relevant privacy considerations [RFC6973]. | |||
| The initial version of the autonomic infrastructure assumes that all | The initial version of the autonomic infrastructure assumes that all | |||
| autonomic nodes are trusted by virtue of their admission to the ACP. | autonomic nodes are trusted by virtue of their admission to the ACP. | |||
| ASAs are therefore trusted to manipulate any GRASP objective, simply | ASAs are therefore trusted to manipulate any GRASP objective simply | |||
| because they are installed on a node that has successfully joined the | because they are installed on a node that has successfully joined the | |||
| ACP. In the general case, a node may have multiple roles and a role | ACP. In the general case, a node may have multiple roles, and a role | |||
| may use multiple ASAs, each using multiple GRASP objectives. | may use multiple ASAs, each using multiple GRASP objectives. | |||
| Additional mechanisms for the fine-grained authorization of nodes and | Additional mechanisms for the fine-grained authorization of nodes and | |||
| ASAs to manipulate specific GRASP objectives could be designed. | ASAs to manipulate specific GRASP objectives could be designed. | |||
| Meanwhile, we repeat that ASAs should run without special privilege | Meanwhile, we repeat that ASAs should run without special privilege | |||
| if possible. Independently of this, interfaces between ASAs and the | if possible. Independently of this, interfaces between ASAs and the | |||
| router configuration and monitoring services of the node can be | router configuration and monitoring services of the node can be | |||
| subject to authentication that provides more fine-grained | subject to authentication that provides more fine-grained | |||
| authorization for specific services. These additional authentication | authorization for specific services. These additional authentication | |||
| parameters could be passed to an ASA during its instantiation phase. | parameters could be passed to an ASA during its instantiation phase. | |||
| 10. IANA Considerations | 11. IANA Considerations | |||
| This document makes no request of the IANA. | ||||
| 11. Acknowledgements | ||||
| Valuable comments were received from Michael Behringer, Menachem | This document has no IANA actions. | |||
| Dodge, Martin Dürst, Toerless Eckert, Thomas Fossati, Alex Galis, | ||||
| Bing Liu, Benno Overeinder, Michael Richardson, Rob Wilton and other | ||||
| IESG members. | ||||
| 12. References | 12. References | |||
| 12.1. Normative References | 12.1. Normative References | |||
| [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
| Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
| DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
| <https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
| skipping to change at page 20, line 31 ¶ | skipping to change at line 926 ¶ | |||
| DOI 10.17487/RFC8994, May 2021, | DOI 10.17487/RFC8994, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc8994>. | <https://www.rfc-editor.org/info/rfc8994>. | |||
| [RFC8995] Pritikin, M., Richardson, M., Eckert, T., Behringer, M., | [RFC8995] Pritikin, M., Richardson, M., Eckert, T., Behringer, M., | |||
| and K. Watsen, "Bootstrapping Remote Secure Key | and K. Watsen, "Bootstrapping Remote Secure Key | |||
| Infrastructure (BRSKI)", RFC 8995, DOI 10.17487/RFC8995, | Infrastructure (BRSKI)", RFC 8995, DOI 10.17487/RFC8995, | |||
| May 2021, <https://www.rfc-editor.org/info/rfc8995>. | May 2021, <https://www.rfc-editor.org/info/rfc8995>. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [DeMola06] De Mola, F. and R. Quitadamo, "Towards an Agent Model for | [AUTONOMIC-FUNCTION] | |||
| Pierre, P. and L. Ciavaglia, "A Day in the Life of an | ||||
| Autonomic Function", Work in Progress, Internet-Draft, | ||||
| draft-peloso-anima-autonomic-function-01, 21 March 2016, | ||||
| <https://datatracker.ietf.org/doc/html/draft-peloso-anima- | ||||
| autonomic-function-01>. | ||||
| [CBOR-YANG] | ||||
| Veillette, M., Ed., Petrov, I., Ed., Pelov, A., Bormann, | ||||
| C., and M. Richardson, "CBOR Encoding of Data Modeled with | ||||
| YANG", Work in Progress, Internet-Draft, draft-ietf-core- | ||||
| yang-cbor-18, December 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-core- | ||||
| yang-cbor-18>. | ||||
| [DEMOLA06] De Mola, F. and R. Quitadamo, "Towards an Agent Model for | ||||
| Future Autonomic Communications", Proceedings of the 7th | Future Autonomic Communications", Proceedings of the 7th | |||
| WOA 2006 Workshop From Objects to Agents 51-59, September | WOA 2006 Workshop From Objects to Agents 51-59, September | |||
| 2006. | 2006. | |||
| [GANA13] "Autonomic network engineering for the self-managing | [GANA13] ETSI, "Autonomic network engineering for the self-managing | |||
| Future Internet (AFI): GANA Architectural Reference Model | Future Internet (AFI); Generic Autonomic Network | |||
| for Autonomic Networking, Cognitive Networking and Self- | Architecture (An Architectural Reference Model for | |||
| Management.", April 2013, | Autonomic Networking, Cognitive Networking and Self- | |||
| <http://www.etsi.org/deliver/etsi_gs/ | Management)", GS AFI 002, V1.1.1, April 2013, | |||
| <https://www.etsi.org/deliver/etsi_gs/ | ||||
| AFI/001_099/002/01.01.01_60/gs_afi002v010101p.pdf>. | AFI/001_099/002/01.01.01_60/gs_afi002v010101p.pdf>. | |||
| [Huebscher08] | [HUEBSCHER08] | |||
| Huebscher, M. C. and J. A. McCann, "A survey of autonomic | Huebscher, M. C. and J. A. McCann, "A survey of autonomic | |||
| computing - degrees, models, and applications", ACM | computing - degrees, models, and applications", ACM | |||
| Computing Surveys (CSUR) Volume 40 Issue 3 DOI: | Computing Surveys (CSUR), Volume 40, Issue 3, | |||
| 10.1145/1380584.1380585, August 2008. | DOI 10.1145/1380584.1380585, August 2008, | |||
| <https://doi.org/10.1145/1380584.1380585>. | ||||
| [I-D.ietf-core-yang-cbor] | ||||
| Veillette, M., Petrov, I., Pelov, A., Bormann, C., and M. | ||||
| Richardson, "CBOR Encoding of Data Modeled with YANG", | ||||
| Work in Progress, Internet-Draft, draft-ietf-core-yang- | ||||
| cbor-18, 19 December 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-core- | ||||
| yang-cbor-18>. | ||||
| [I-D.irtf-nmrg-ibn-concepts-definitions] | [IBN-CONCEPTS] | |||
| Clemm, A., Ciavaglia, L., Granville, L. Z., and J. | Clemm, A., Ciavaglia, L., Granville, L. Z., and J. | |||
| Tantsura, "Intent-Based Networking - Concepts and | Tantsura, "Intent-Based Networking - Concepts and | |||
| Definitions", Work in Progress, Internet-Draft, draft- | Definitions", Work in Progress, Internet-Draft, draft- | |||
| irtf-nmrg-ibn-concepts-definitions-06, 15 December 2021, | irtf-nmrg-ibn-concepts-definitions-06, 15 December 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-irtf-nmrg- | <https://datatracker.ietf.org/doc/html/draft-irtf-nmrg- | |||
| ibn-concepts-definitions-06>. | ibn-concepts-definitions-06>. | |||
| [I-D.peloso-anima-autonomic-function] | ||||
| Pierre, P. and L. Ciavaglia, "A Day in the Life of an | ||||
| Autonomic Function", Work in Progress, Internet-Draft, | ||||
| draft-peloso-anima-autonomic-function-01, 21 March 2016, | ||||
| <https://datatracker.ietf.org/doc/html/draft-peloso-anima- | ||||
| autonomic-function-01>. | ||||
| [IPJ] Behringer, M., Bormann, C., Carpenter, B. E., Eckert, T., | [IPJ] Behringer, M., Bormann, C., Carpenter, B. E., Eckert, T., | |||
| Campos Nobre, J., Jiang, S., Li, Y., and M. C. Richardson, | Campos Nobre, J., Jiang, S., Li, Y., and M. C. Richardson, | |||
| "Autonomic Networking Gets Serious", The Internet Protocol | "Autonomic Networking Gets Serious", The Internet Protocol | |||
| Journal Volume: 24 , Issue: 3, ISSN 1944-1134, Page(s): 2 | Journal, Volume 24, Issue 3, Page(s) 2 - 18, ISSN | |||
| - 18, October 2021, <https://ipj.dreamhosters.com/wp- | 1944-1134, October 2021, <https://ipj.dreamhosters.com/wp- | |||
| content/uploads/2021/10/243-ipj.pdf>. | content/uploads/2021/10/243-ipj.pdf>. | |||
| [Movahedi12] | [MOVAHEDI12] | |||
| Movahedi, Z., Ayari, M., Langar, R., and G. Pujolle, "A | Movahedi, Z., Ayari, M., Langar, R., and G. Pujolle, "A | |||
| Survey of Autonomic Network Architectures and Evaluation | Survey of Autonomic Network Architectures and Evaluation | |||
| Criteria", IEEE Communications Surveys & Tutorials Volume: | Criteria", IEEE Communications Surveys & Tutorials, Volume | |||
| 14 , Issue: 2 DOI: 10.1109/SURV.2011.042711.00078, | 14, Issue 2, Pages 464 - 490, | |||
| Page(s): 464 - 490, 2012. | DOI 10.1109/SURV.2011.042711.00078, 2012, | |||
| <https://doi.org/10.1109/SURV.2011.042711.00078>. | ||||
| [NFV] "Network Functions Virtualisation - Introductory White | [NFV] ETSI, "Network Functions Virtualisation", SDN and OpenFlow | |||
| Paper", SDN and OpenFlow World Congress, Darmstadt, | World Congress, October 2012, | |||
| Germany 1-16, October 2012, | <https://portal.etsi.org/NFV/NFV_White_Paper.pdf>. | |||
| <http://portal.etsi.org/NFV/NFV_White_Paper.pdf>. | ||||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., | [RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., | |||
| Morris, J., Hansen, M., and R. Smith, "Privacy | Morris, J., Hansen, M., and R. Smith, "Privacy | |||
| Considerations for Internet Protocols", RFC 6973, | Considerations for Internet Protocols", RFC 6973, | |||
| DOI 10.17487/RFC6973, July 2013, | DOI 10.17487/RFC6973, July 2013, | |||
| skipping to change at page 22, line 37 ¶ | skipping to change at line 1031 ¶ | |||
| [RFC8992] Jiang, S., Ed., Du, Z., Carpenter, B., and Q. Sun, | [RFC8992] Jiang, S., Ed., Du, Z., Carpenter, B., and Q. Sun, | |||
| "Autonomic IPv6 Edge Prefix Management in Large-Scale | "Autonomic IPv6 Edge Prefix Management in Large-Scale | |||
| Networks", RFC 8992, DOI 10.17487/RFC8992, May 2021, | Networks", RFC 8992, DOI 10.17487/RFC8992, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc8992>. | <https://www.rfc-editor.org/info/rfc8992>. | |||
| [RFC8993] Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia, | [RFC8993] Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia, | |||
| L., and J. Nobre, "A Reference Model for Autonomic | L., and J. Nobre, "A Reference Model for Autonomic | |||
| Networking", RFC 8993, DOI 10.17487/RFC8993, May 2021, | Networking", RFC 8993, DOI 10.17487/RFC8993, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc8993>. | <https://www.rfc-editor.org/info/rfc8993>. | |||
| [ZSM009-1] "Zero-touch network and Service Management (ZSM); Closed- | [ZSM009-1] ETSI, "Zero-touch network and Service Management (ZSM); | |||
| Loop Automation; Part 1: Enablers", June 2021, | Closed-Loop Automation; Part 1: Enablers", GS ZSM 009-1, | |||
| Version 1.1.1, June 2021, | ||||
| <https://www.etsi.org/deliver/etsi_gs/ | <https://www.etsi.org/deliver/etsi_gs/ | |||
| ZSM/001_099/00901/01.01.01_60/gs_ZSM00901v010101p.pdf>. | ZSM/001_099/00901/01.01.01_60/gs_ZSM00901v010101p.pdf>. | |||
| Appendix A. Change log | Appendix A. Example Logic Flows | |||
| This section is to be removed before publishing as an RFC. | ||||
| draft-ietf-anima-asa-guidelines-07, 2022-02-01: | ||||
| * Editorial | ||||
| draft-ietf-anima-asa-guidelines-06, 2022-01-27: | ||||
| * Clarified two sentences about special-purpose ASAs (Section 3.1, | ||||
| Section 3.2). | ||||
| * Fixed indentation bug and added one statement to MAIN PROGRAM | ||||
| pseudocode. | ||||
| * Removed mention of software image servers in section 6.1, which | ||||
| confused the reader. | ||||
| * Other improvements from IESG reviews. | ||||
| draft-ietf-anima-asa-guidelines-05, 2021-12-20: | ||||
| * Clarified NETCONF wording. | ||||
| * Removed <CODE BEGINS> on advice from IETF Trust | ||||
| * Noted resource limits in constrained nodes | ||||
| * Strengthened text on data integrity in resource management example | ||||
| * Strengthen discussion of extensibility of GRASP objectives. | ||||
| * Other editorial improvements from IETF Last Call reviews | ||||
| draft-ietf-anima-asa-guidelines-04, 2021-11-20: | ||||
| * Added terminology appendix | ||||
| * Further clarified discussion of asynch operations | ||||
| * Other editorial improvements from AD review | ||||
| draft-ietf-anima-asa-guidelines-03, 2021-11-07: | ||||
| * Added security consideration for gateway ASAs | ||||
| * Cite IPJ article | ||||
| draft-ietf-anima-asa-guidelines-02, 2021-09-13: | ||||
| * Added note on maximum message size. | ||||
| * Editorial fixes | ||||
| draft-ietf-anima-asa-guidelines-01, 2021-06-27: | ||||
| * Incorporated shepherd's review comments | ||||
| * Editorial fixes | ||||
| draft-ietf-anima-asa-guidelines-00, 2020-11-14: | ||||
| * Adopted by WG | ||||
| * Editorial fixes | ||||
| draft-carpenter-anima-asa-guidelines-09, 2020-07-25: | ||||
| * Additional text on future authorization. | ||||
| * Editorial fixes | ||||
| draft-carpenter-anima-asa-guidelines-08, 2020-01-10: | ||||
| * Introduced notion of autonomic ecosystem. | ||||
| * Minor technical clarifications. | ||||
| * Converted to v3 format. | ||||
| draft-carpenter-anima-asa-guidelines-07, 2019-07-17: | ||||
| * Improved explanation of threading vs event-loop | ||||
| * Other editorial improvements. | ||||
| draft-carpenter-anima-asa-guidelines-06, 2018-01-07: | ||||
| * Expanded and improved example logic flow. | ||||
| * Editorial corrections. | ||||
| draft-carpenter-anima-asa-guidelines-05, 2018-06-30: | ||||
| * Added section on relationshp with non-autonomic components. | ||||
| * Editorial corrections. | ||||
| draft-carpenter-anima-asa-guidelines-04, 2018-03-03: | ||||
| * Added note about simple ASAs. | ||||
| * Added note about NFV/SFC services. | ||||
| * Improved text about threading v event loop model | ||||
| * Added section about coordination with traditional tools. | ||||
| * Added appendix with example logic flow. | ||||
| draft-carpenter-anima-asa-guidelines-03, 2017-10-25: | ||||
| * Added details on life cycle. | ||||
| * Added details on robustness. | ||||
| * Added co-authors. | ||||
| draft-carpenter-anima-asa-guidelines-02, 2017-07-01: | ||||
| * Expanded description of event-loop case. | ||||
| * Added note about 'dry run' mode. | ||||
| draft-carpenter-anima-asa-guidelines-01, 2017-01-06: | ||||
| * More sections filled in. | ||||
| draft-carpenter-anima-asa-guidelines-00, 2016-09-30: | ||||
| * Initial version | ||||
| Appendix B. Terminology | ||||
| This appendix summarises various acronyms and terminology used in the | ||||
| document. Where no other reference is given, please consult | ||||
| [RFC8993] or [RFC7575]. | ||||
| * Autonomic: Self-managing (self-configuring, self-protecting, self- | ||||
| healing, self-optimizing), but allowing high-level guidance by a | ||||
| central entity such as a NOC. | ||||
| * Autonomic Function: A function that adapts on its own to a | ||||
| changing environment. | ||||
| * Autonomic Node: A node that employs autonomic functions. | ||||
| * ACP: Autonomic Control Plane [RFC8994]. | ||||
| * AN: Autonomic Network: A network of autonomic nodes, which | ||||
| interact directly with each other. | ||||
| * ANI: Autonomic Network Infrastructure. | ||||
| * ASA: Autonomic Service Agent. An agent installed on an autonomic | ||||
| node that implements an autonomic function, either partially (in | ||||
| the case of a distributed function) or completely. | ||||
| * BRSKI: Bootstrapping Remote Secure Key Infrastructure [RFC8995]. | ||||
| * CBOR: Concise Binary Object Representation [RFC8949]. | ||||
| * GRASP: Generic Autonomic Signaling Protocol [RFC8990]. | ||||
| * GRASP API: GRASP Application Programming Interface [RFC8991]. | ||||
| * NOC: Network Operations Center [RFC8368]. | ||||
| * Objective: A GRASP technical objective is a data structure whose | ||||
| main contents are a name and a value. The value consists of a | ||||
| single configurable parameter or a set of parameters of some kind. | ||||
| [RFC8990]. | ||||
| Appendix C. Example Logic Flows | ||||
| This appendix describes generic logic flows that combine to act as an | This appendix describes generic logic flows that combine to act as an | |||
| Autonomic Service Agent (ASA) for resource management. Note that | Autonomic Service Agent (ASA) for resource management. Note that | |||
| these are illustrative examples, and in no sense requirements. As | these are illustrative examples and are in no sense requirements. As | |||
| long as the rules of GRASP are followed, a real implementation could | long as the rules of GRASP are followed, a real implementation could | |||
| be different. The reader is assumed to be familiar with GRASP | be different. The reader is assumed to be familiar with GRASP | |||
| [RFC8990] and its conceptual API [RFC8991]. | [RFC8990] and its conceptual API [RFC8991]. | |||
| A complete autonomic function for a distributed resource will consist | A complete autonomic function for a distributed resource will consist | |||
| of a number of instances of the ASA placed at relevant points in a | of a number of instances of the ASA placed at relevant points in a | |||
| network. Specific details will of course depend on the resource | network. Specific details will, of course, depend on the resource | |||
| concerned. One example is IP address prefix management, as specified | concerned. One example is IP address prefix management, as specified | |||
| in [RFC8992]. In this case, an instance of the ASA will exist in | in [RFC8992]. In this case, an instance of the ASA will exist in | |||
| each delegating router. | each delegating router. | |||
| An underlying assumption is that there is an initial source of the | An underlying assumption is that there is an initial source of the | |||
| resource in question, referred to here as an origin ASA. The other | resource in question, referred to here as an origin ASA. The other | |||
| ASAs, known as delegators, obtain supplies of the resource from the | ASAs, known as delegators, obtain supplies of the resource from the | |||
| origin, and then delegate quantities of the resource to consumers | origin, delegate quantities of the resource to consumers that request | |||
| that request it, and recover it when no longer needed. | it, and recover it when no longer needed. | |||
| Another assumption is there is a set of network wide policy | Another assumption is there is a set of network-wide policy | |||
| parameters, which the origin will provide to the delegators. These | parameters, which the origin will provide to the delegators. These | |||
| parameters will control how the delegators decide how much resource | parameters will control how the delegators decide how much resource | |||
| to provide to consumers. Thus, the ASA logic has two operating | to provide to consumers. Thus, the ASA logic has two operating | |||
| modes: origin and delegator. When running as an origin, it starts by | modes: origin and delegator. When running as an origin, it starts by | |||
| obtaining a quantity of the resource from the NOC, and it acts as a | obtaining a quantity of the resource from the NOC, and it acts as a | |||
| source of policy parameters, via both GRASP flooding and GRASP | source of policy parameters, via both GRASP flooding and GRASP | |||
| synchronization. (In some scenarios, flooding or synchronization | synchronization. (In some scenarios, flooding or synchronization | |||
| alone might be sufficient, but this example includes both.) | alone might be sufficient, but this example includes both.) | |||
| When running as a delegator, it starts with an empty resource pool, | When running as a delegator, it starts with an empty resource pool, | |||
| it acquires the policy parameters by GRASP synchronization, and it | acquires the policy parameters by GRASP synchronization, and | |||
| delegates quantities of the resource to consumers that request it. | delegates quantities of the resource to consumers that request it. | |||
| Both as an origin and as a delegator, when its pool is low it seeks | Both as an origin and as a delegator, when its pool is low, it seeks | |||
| quantities of the resource by requesting GRASP negotiation with peer | quantities of the resource by requesting GRASP negotiation with peer | |||
| ASAs. When its pool is sufficient, it hands out resource to peer | ASAs. When its pool is sufficient, it hands out resource to peer | |||
| ASAs in response to negotiation requests. Thus, over time, the | ASAs in response to negotiation requests. Thus, over time, the | |||
| initial resource pool held by the origin will be shared among all the | initial resource pool held by the origin will be shared among all the | |||
| delegators according to demand. | delegators according to demand. | |||
| In theory a network could include any number of origins and any | In theory, a network could include any number of origins and any | |||
| number of delegators, with the only condition being that each | number of delegators, with the only condition being that each | |||
| origin's initial resource pool is unique. A realistic scenario is to | origin's initial resource pool is unique. A realistic scenario is to | |||
| have exactly one origin and as many delegators as you like. A | have exactly one origin and as many delegators as you like. A | |||
| scenario with no origin is useless. | scenario with no origin is useless. | |||
| An implementation requirement is that resource pools are kept in | An implementation requirement is that resource pools are kept in | |||
| stable storage. Otherwise, if a delegator exits for any reason, all | stable storage. Otherwise, if a delegator exits for any reason, all | |||
| the resources it has obtained or delegated are lost. If an origin | the resources it has obtained or delegated are lost. If an origin | |||
| exits, its entire spare pool is lost. The logic for using stable | exits, its entire spare pool is lost. The logic for using stable | |||
| storage and for crash recovery is not included in the pseudocode | storage and for crash recovery is not included in the pseudocode | |||
| below, which focuses on communication between ASAs. Since GRASP | below, which focuses on communication between ASAs. Since GRASP | |||
| operations are not intrinsically idempotent, data integrity during | operations are not intrinsically idempotent, data integrity during | |||
| failure scenarios is the responsibility of the ASA designer. This is | failure scenarios is the responsibility of the ASA designer. This is | |||
| a complex topic in its own right that is not discussed in the present | a complex topic in its own right that is not discussed in the present | |||
| document. | document. | |||
| The description below does not implement GRASP's 'dry run' function. | The description below does not implement GRASP's dry run function. | |||
| That would require temporarily marking any resource handed out in a | That would require temporarily marking any resource handed out in a | |||
| dry run negotiation as reserved, until either the peer obtains it in | dry run negotiation as reserved, until either the peer obtains it in | |||
| a live run, or a suitable timeout occurs. | a live run, or a suitable timeout occurs. | |||
| The main data structures used in each instance of the ASA are: | The main data structures used in each instance of the ASA are: | |||
| * The resource_pool, for example an ordered list of available | * resource_pool: an ordered list of available resources, for | |||
| resources. Depending on the nature of the resource, units of | example. Depending on the nature of the resource, units of | |||
| resource are split when appropriate, and a background garbage | resource are split when appropriate, and a background garbage | |||
| collector recombines split resources if they are returned to the | collector recombines split resources if they are returned to the | |||
| pool. | pool. | |||
| * The delegated_list, where a delegator stores the resources it has | * delegated_list: where a delegator stores the resources it has | |||
| given to subsidiary devices. | given to subsidiary devices. | |||
| Possible main logic flows are below, using a threaded implementation | Possible main logic flows are below, using a threaded implementation | |||
| model. As noted above, alternative approaches to asynchronous | model. As noted above, alternative approaches to asynchronous | |||
| operations are possible. The transformation to an event loop model | operations are possible. The transformation to an event loop model | |||
| should be apparent - each thread would correspond to one event in the | should be apparent; each thread would correspond to one event in the | |||
| event loop. | event loop. | |||
| The GRASP objectives are as follows: | The GRASP objectives are as follows: | |||
| * ["EX1.Resource", flags, loop_count, value] where the value depends | * ["EX1.Resource", flags, loop_count, value], where the value | |||
| on the resource concerned, but will typically include its size and | depends on the resource concerned but will typically include its | |||
| identification. | size and identification. | |||
| * ["EX1.Params", flags, loop_count, value] where the value will be, | * ["EX1.Params", flags, loop_count, value], where the value will be, | |||
| for example, a JSON object defining the applicable parameters. | for example, a JSON object defining the applicable parameters. | |||
| In the outline logic flows below, these objectives are represented | In the outline logic flows below, these objectives are represented | |||
| simply by their names. | simply by their names. | |||
| MAIN PROGRAM: | MAIN PROGRAM: | |||
| Create empty resource_pool (and an associated lock) | Create empty resource_pool (and an associated lock) | |||
| Create empty delegated_list | Create empty delegated_list | |||
| Determine whether to act as origin | Determine whether to act as origin | |||
| skipping to change at page 30, line 12 ¶ | skipping to change at line 1230 ¶ | |||
| Send M_FLOOD message for EX1.Params | Send M_FLOOD message for EX1.Params | |||
| sleep() #periodic timer suitable for application scenario | sleep() #periodic timer suitable for application scenario | |||
| GARBAGE_COLLECTOR thread: | GARBAGE_COLLECTOR thread: | |||
| do forever: | do forever: | |||
| Search resource_pool for adjacent resources | Search resource_pool for adjacent resources | |||
| Merge adjacent resources | Merge adjacent resources | |||
| sleep() #periodic timer suitable for application scenario | sleep() #periodic timer suitable for application scenario | |||
| Acknowledgements | ||||
| Valuable comments were received from Michael Behringer, Menachem | ||||
| Dodge, Martin Dürst, Toerless Eckert, Thomas Fossati, Alex Galis, | ||||
| Bing Liu, Benno Overeinder, Michael Richardson, Rob Wilton, and other | ||||
| IESG members. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Brian Carpenter | Brian Carpenter | |||
| School of Computer Science | School of Computer Science | |||
| University of Auckland | University of Auckland | |||
| PB 92019 | PB 92019 | |||
| Auckland 1142 | Auckland 1142 | |||
| New Zealand | New Zealand | |||
| Email: brian.e.carpenter@gmail.com | Email: brian.e.carpenter@gmail.com | |||
| Laurent Ciavaglia | Laurent Ciavaglia | |||
| Rakuten Mobile | Rakuten Mobile | |||
| Paris | Paris | |||
| France | France | |||
| Email: laurent.ciavaglia@rakuten.com | Email: laurent.ciavaglia@rakuten.com | |||
| Sheng Jiang | Sheng Jiang | |||
| Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
| Q14 Huawei Campus | Q14 Huawei Campus | |||
| 156 Beiqing Road | 156 Beiqing Road | |||
| Hai-Dian District | Hai-Dian District | |||
| Beijing | Beijing | |||
| 100095 | 100095 | |||
| China | China | |||
| End of changes. 159 change blocks. | ||||
| 460 lines changed or deleted | 360 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||