rfc8990.original | rfc8990.txt | |||
---|---|---|---|---|
Network Working Group C. Bormann | Internet Engineering Task Force (IETF) C. Bormann | |||
Internet-Draft Universitaet Bremen TZI | Request for Comments: 8990 Universität Bremen TZI | |||
Intended status: Standards Track B. Carpenter, Ed. | Category: Standards Track B. Carpenter, Ed. | |||
Expires: January 8, 2018 Univ. of Auckland | ISSN: 2070-1721 Univ. of Auckland | |||
B. Liu, Ed. | B. Liu, Ed. | |||
Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
July 7, 2017 | May 2021 | |||
A Generic Autonomic Signaling Protocol (GRASP) | GeneRic Autonomic Signaling Protocol (GRASP) | |||
draft-ietf-anima-grasp-15 | ||||
Abstract | Abstract | |||
This document specifies the GeneRic Autonomic Signaling Protocol | This document specifies the GeneRic Autonomic Signaling Protocol | |||
(GRASP), which enables autonomic nodes and autonomic service agents | (GRASP), which enables autonomic nodes and Autonomic Service Agents | |||
to dynamically discover peers, to synchronize state with each other, | to dynamically discover peers, to synchronize state with each other, | |||
and to negotiate parameter settings with each other. GRASP depends | and to negotiate parameter settings with each other. GRASP depends | |||
on an external security environment that is described elsewhere. The | on an external security environment that is described elsewhere. The | |||
technical objectives and parameters for specific application | technical objectives and parameters for specific application | |||
scenarios are to be described in separate documents. Appendices | scenarios are to be described in separate documents. Appendices | |||
briefly discuss requirements for the protocol and existing protocols | briefly discuss requirements for the protocol and existing protocols | |||
with comparable features. | with comparable features. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
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 http://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). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on January 8, 2018. | 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/rfc8990. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. GRASP Protocol Overview . . . . . . . . . . . . . . . . . . . 5 | 2. Protocol Overview | |||
2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.1. Terminology | |||
2.2. High Level Deployment Model . . . . . . . . . . . . . . . 7 | 2.2. High-Level Deployment Model | |||
2.3. High Level Design . . . . . . . . . . . . . . . . . . . . 8 | 2.3. High-Level Design | |||
2.4. Quick Operating Overview . . . . . . . . . . . . . . . . 11 | 2.4. Quick Operating Overview | |||
2.5. GRASP Protocol Basic Properties and Mechanisms . . . . . 12 | 2.5. GRASP Basic Properties and Mechanisms | |||
2.5.1. Required External Security Mechanism . . . . . . . . 12 | 2.5.1. Required External Security Mechanism | |||
2.5.2. Discovery Unsolicited Link-Local (DULL) GRASP . . . . 13 | 2.5.2. Discovery Unsolicited Link-Local (DULL) GRASP | |||
2.5.3. Transport Layer Usage . . . . . . . . . . . . . . . . 14 | 2.5.3. Transport Layer Usage | |||
2.5.4. Discovery Mechanism and Procedures . . . . . . . . . 15 | 2.5.4. Discovery Mechanism and Procedures | |||
2.5.5. Negotiation Procedures . . . . . . . . . . . . . . . 19 | 2.5.5. Negotiation Procedures | |||
2.5.6. Synchronization and Flooding Procedures . . . . . . . 21 | 2.5.6. Synchronization and Flooding Procedures | |||
2.6. GRASP Constants . . . . . . . . . . . . . . . . . . . . . 23 | 2.6. GRASP Constants | |||
2.7. Session Identifier (Session ID) . . . . . . . . . . . . . 24 | 2.7. Session Identifier (Session ID) | |||
2.8. GRASP Messages . . . . . . . . . . . . . . . . . . . . . 25 | 2.8. GRASP Messages | |||
2.8.1. Message Overview . . . . . . . . . . . . . . . . . . 25 | 2.8.1. Message Overview | |||
2.8.2. GRASP Message Format . . . . . . . . . . . . . . . . 25 | 2.8.2. GRASP Message Format | |||
2.8.3. Message Size . . . . . . . . . . . . . . . . . . . . 26 | 2.8.3. Message Size | |||
2.8.4. Discovery Message . . . . . . . . . . . . . . . . . . 26 | 2.8.4. Discovery Message | |||
2.8.5. Discovery Response Message . . . . . . . . . . . . . 28 | 2.8.5. Discovery Response Message | |||
2.8.6. Request Messages . . . . . . . . . . . . . . . . . . 29 | 2.8.6. Request Messages | |||
2.8.7. Negotiation Message . . . . . . . . . . . . . . . . . 30 | 2.8.7. Negotiation Message | |||
2.8.8. Negotiation End Message . . . . . . . . . . . . . . . 30 | 2.8.8. Negotiation End Message | |||
2.8.9. Confirm Waiting Message . . . . . . . . . . . . . 30 | 2.8.9. Confirm Waiting Message | |||
2.8.10. Synchronization Message . . . . . . . . . . . . . . . 31 | 2.8.10. Synchronization Message | |||
2.8.11. Flood Synchronization Message . . . . . . . . . . . . 31 | 2.8.11. Flood Synchronization Message | |||
2.8.12. Invalid Message . . . . . . . . . . . . . . . . . . . 32 | 2.8.12. Invalid Message | |||
2.8.13. No Operation Message . . . . . . . . . . . . . . . . 33 | 2.8.13. No Operation Message | |||
2.9. GRASP Options . . . . . . . . . . . . . . . . . . . . . . 33 | 2.9. GRASP Options | |||
2.9.1. Format of GRASP Options . . . . . . . . . . . . . . . 33 | 2.9.1. Format of GRASP Options | |||
2.9.2. Divert Option . . . . . . . . . . . . . . . . . . . . 33 | 2.9.2. Divert Option | |||
2.9.3. Accept Option . . . . . . . . . . . . . . . . . . . . 34 | 2.9.3. Accept Option | |||
2.9.4. Decline Option . . . . . . . . . . . . . . . . . . . 34 | 2.9.4. Decline Option | |||
2.9.5. Locator Options . . . . . . . . . . . . . . . . . . . 34 | 2.9.5. Locator Options | |||
2.10. Objective Options . . . . . . . . . . . . . . . . . . . . 36 | 2.10. Objective Options | |||
2.10.1. Format of Objective Options . . . . . . . . . . . . 36 | 2.10.1. Format of Objective Options | |||
2.10.2. Objective flags . . . . . . . . . . . . . . . . . . 38 | 2.10.2. Objective Flags | |||
2.10.3. General Considerations for Objective Options . . . . 38 | 2.10.3. General Considerations for Objective Options | |||
2.10.4. Organizing of Objective Options . . . . . . . . . . 39 | 2.10.4. Organizing of Objective Options | |||
2.10.5. Experimental and Example Objective Options . . . . . 41 | 2.10.5. Experimental and Example Objective Options | |||
3. Implementation Status [RFC Editor: please remove] . . . . . . 41 | 3. Security Considerations | |||
3.1. BUPT C++ Implementation . . . . . . . . . . . . . . . . . 41 | 4. CDDL Specification of GRASP | |||
3.2. Python Implementation . . . . . . . . . . . . . . . . . . 42 | 5. IANA Considerations | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | 6. References | |||
5. CDDL Specification of GRASP . . . . . . . . . . . . . . . . . 45 | 6.1. Normative References | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | 6.2. Informative References | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 49 | Appendix A. Example Message Formats | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 | A.1. Discovery Example | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 49 | A.2. Flood Example | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 50 | A.3. Synchronization Example | |||
Appendix A. Open Issues [RFC Editor: This section should be | A.4. Simple Negotiation Example | |||
empty. Please remove] . . . . . . . . . . . . . . . 54 | A.5. Complete Negotiation Example | |||
Appendix B. Closed Issues [RFC Editor: Please remove] . . . . . 54 | Appendix B. Requirement Analysis of Discovery, Synchronization, | |||
Appendix C. Change log [RFC Editor: Please remove] . . . . . . . 62 | and Negotiation | |||
Appendix D. Example Message Formats . . . . . . . . . . . . . . 70 | B.1. Requirements for Discovery | |||
D.1. Discovery Example . . . . . . . . . . . . . . . . . . . . 71 | B.2. Requirements for Synchronization and Negotiation Capability | |||
D.2. Flood Example . . . . . . . . . . . . . . . . . . . . . . 71 | B.3. Specific Technical Requirements | |||
D.3. Synchronization Example . . . . . . . . . . . . . . . . . 71 | Appendix C. Capability Analysis of Current Protocols | |||
D.4. Simple Negotiation Example . . . . . . . . . . . . . . . 72 | Acknowledgments | |||
D.5. Complete Negotiation Example . . . . . . . . . . . . . . 72 | Authors' Addresses | |||
Appendix E. Requirement Analysis of Discovery, Synchronization | ||||
and Negotiation . . . . . . . . . . . . . . . . . . 73 | ||||
E.1. Requirements for Discovery . . . . . . . . . . . . . . . 73 | ||||
E.2. Requirements for Synchronization and Negotiation | ||||
Capability . . . . . . . . . . . . . . . . . . . . . . . 75 | ||||
E.3. Specific Technical Requirements . . . . . . . . . . . . . 77 | ||||
Appendix F. Capability Analysis of Current Protocols . . . . . . 78 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 81 | ||||
1. Introduction | 1. Introduction | |||
The success of the Internet has made IP-based networks bigger and | The success of the Internet has made IP-based networks bigger and | |||
more complicated. Large-scale ISP and enterprise networks have | more complicated. Large-scale ISP and enterprise networks have | |||
become more and more problematic for human based management. Also, | become more and more problematic for human-based management. Also, | |||
operational costs are growing quickly. Consequently, there are | operational costs are growing quickly. Consequently, there are | |||
increased requirements for autonomic behavior in the networks. | increased requirements for autonomic behavior in the networks. | |||
General aspects of autonomic networks are discussed in [RFC7575] and | General aspects of Autonomic Networks are discussed in [RFC7575] and | |||
[RFC7576]. | [RFC7576]. | |||
One approach is to largely decentralize the logic of network | One approach is to largely decentralize the logic of network | |||
management by migrating it into network elements. A reference model | management by migrating it into network elements. A reference model | |||
for autonomic networking on this basis is given in | for Autonomic Networking on this basis is given in [RFC8993]. The | |||
[I-D.ietf-anima-reference-model]. The reader should consult this | reader should consult this document to understand how various | |||
document to understand how various autonomic components fit together. | autonomic components fit together. In order to achieve autonomy, | |||
In order to fulfill autonomy, devices that embody Autonomic Service | devices that embody Autonomic Service Agents (ASAs, [RFC7575]) have | |||
Agents (ASAs, [RFC7575]) have specific signaling requirements. In | specific signaling requirements. In particular, they need to | |||
particular they need to discover each other, to synchronize state | discover each other, to synchronize state with each other, and to | |||
with each other, and to negotiate parameters and resources directly | negotiate parameters and resources directly with each other. There | |||
with each other. There is no limitation on the types of parameters | is no limitation on the types of parameters and resources concerned, | |||
and resources concerned, which can include very basic information | which can include very basic information needed for addressing and | |||
needed for addressing and routing, as well as anything else that | routing, as well as anything else that might be configured in a | |||
might be configured in a conventional non-autonomic network. The | conventional non-autonomic network. The atomic unit of discovery, | |||
atomic unit of discovery, synchronization or negotiation is referred | synchronization, or negotiation is referred to as a technical | |||
to as a technical objective, i.e, a configurable parameter or set of | objective, i.e., a configurable parameter or set of parameters | |||
parameters (defined more precisely in Section 2.1). | (defined more precisely in Section 2.1). | |||
Negotiation is an iterative process, requiring multiple message | Negotiation is an iterative process, requiring multiple message | |||
exchanges forming a closed loop between the negotiating entities. In | exchanges forming a closed loop between the negotiating entities. In | |||
fact, these entities are ASAs, normally but not necessarily in | fact, these entities are ASAs, normally but not necessarily in | |||
different network devices. State synchronization, when needed, can | different network devices. State synchronization, when needed, can | |||
be regarded as a special case of negotiation, without iteration. | be regarded as a special case of negotiation without iteration. Both | |||
Both negotiation and synchronization must logically follow discovery. | negotiation and synchronization must logically follow discovery. | |||
More details of the requirements are found in Appendix E. | More details of the requirements are found in Appendix B. | |||
Section 2.3 describes a behavior model for a protocol intended to | Section 2.3 describes a behavior model for a protocol intended to | |||
support discovery, synchronization and negotiation. The design of | support discovery, synchronization, and negotiation. The design of | |||
GeneRic Autonomic Signaling Protocol (GRASP) in Section 2 of this | GeneRic Autonomic Signaling Protocol (GRASP) in Section 2 is based on | |||
document is based on this behavior model. The relevant capabilities | this behavior model. The relevant capabilities of various existing | |||
of various existing protocols are reviewed in Appendix F. | protocols are reviewed in Appendix C. | |||
The proposed discovery mechanism is oriented towards synchronization | The proposed discovery mechanism is oriented towards synchronization | |||
and negotiation objectives. It is based on a neighbor discovery | and negotiation objectives. It is based on a neighbor discovery | |||
process on the local link, but also supports diversion to peers on | process on the local link, but it also supports diversion to peers on | |||
other links. There is no assumption of any particular form of | other links. There is no assumption of any particular form of | |||
network topology. When a device starts up with no pre-configuration, | network topology. When a device starts up with no preconfiguration, | |||
it has no knowledge of the topology. The protocol itself is capable | it has no knowledge of the topology. The protocol itself is capable | |||
of being used in a small and/or flat network structure such as a | of being used in a small and/or flat network structure such as a | |||
small office or home network as well as in a large professionally | small office or home network as well as in a large, professionally | |||
managed network. Therefore, the discovery mechanism needs to be able | managed network. Therefore, the discovery mechanism needs to be able | |||
to allow a device to bootstrap itself without making any prior | to allow a device to bootstrap itself without making any prior | |||
assumptions about network structure. | assumptions about network structure. | |||
Because GRASP can be used as part of a decision process among | Because GRASP can be used as part of a decision process among | |||
distributed devices or between networks, it must run in a secure and | distributed devices or between networks, it must run in a secure and | |||
strongly authenticated environment. | strongly authenticated environment. | |||
In realistic deployments, not all devices will support GRASP. | In realistic deployments, not all devices will support GRASP. | |||
Therefore, some autonomic service agents will directly manage a group | Therefore, some Autonomic Service Agents will directly manage a group | |||
of non-autonomic nodes, and other non-autonomic nodes will be managed | of non-autonomic nodes, and other non-autonomic nodes will be managed | |||
traditionally. Such mixed scenarios are not discussed in this | traditionally. Such mixed scenarios are not discussed in this | |||
specification. | specification. | |||
2. GRASP Protocol Overview | 2. Protocol Overview | |||
2.1. Terminology | 2.1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC2119] when they appear in ALL CAPS. When these words are not in | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
ALL CAPS (such as "should" or "Should"), they have their usual | capitals, as shown here. | |||
English meanings, and are not to be interpreted as [RFC2119] key | ||||
words. | ||||
This document uses terminology defined in [RFC7575]. | This document uses terminology defined in [RFC7575]. | |||
The following additional terms are used throughout this document: | The following additional terms are used throughout this document: | |||
o Discovery: a process by which an ASA discovers peers according to | Discovery: | |||
a specific discovery objective. The discovery results may be | A process by which an ASA discovers peers according to a specific | |||
different according to the different discovery objectives. The | discovery objective. The discovery results may be different | |||
discovered peers may later be used as negotiation counterparts or | according to the different discovery objectives. The discovered | |||
as sources of synchronization data. | peers may later be used as negotiation counterparts or as sources | |||
of synchronization data. | ||||
o Negotiation: a process by which two ASAs interact iteratively to | Negotiation: | |||
agree on parameter settings that best satisfy the objectives of | A process by which two ASAs interact iteratively to agree on | |||
both ASAs. | parameter settings that best satisfy the objectives of both ASAs. | |||
o State Synchronization: a process by which ASAs interact to receive | State Synchronization: | |||
the current state of parameter values stored in other ASAs. This | A process by which ASAs interact to receive the current state of | |||
is a special case of negotiation in which information is sent but | parameter values stored in other ASAs. This is a special case of | |||
the ASAs do not request their peers to change parameter settings. | negotiation in which information is sent, but the ASAs do not | |||
All other definitions apply to both negotiation and | request their peers to change parameter settings. All other | |||
synchronization. | definitions apply to both negotiation and synchronization. | |||
o Technical Objective (usually abbreviated as Objective): A | Technical Objective (usually abbreviated as Objective): | |||
technical objective is a data structure, whose main contents are a | A technical objective is a data structure whose main contents are | |||
name and a value. The value consists of a single configurable | a name and a value. The value consists of a single configurable | |||
parameter or a set of parameters of some kind. The exact format | parameter or a set of parameters of some kind. The exact format | |||
of an objective is defined in Section 2.10.1. An objective occurs | of an objective is defined in Section 2.10.1. An objective occurs | |||
in three contexts: Discovery, Negotiation and Synchronization. | in three contexts: discovery, negotiation, and synchronization. | |||
Normally, a given objective will not occur in negotiation and | Normally, a given objective will not occur in negotiation and | |||
synchronization contexts simultaneously. | synchronization contexts simultaneously. | |||
* One ASA may support multiple independent objectives. | One ASA may support multiple independent objectives. | |||
* The parameter(s) in the value of a given objective apply to a | The parameter(s) in the value of a given objective apply to a | |||
specific service or function or action. They may in principle | specific service or function or action. They may in principle | |||
be anything that can be set to a specific logical, numerical or | be anything that can be set to a specific logical, numerical, | |||
string value, or a more complex data structure, by a network | or string value, or a more complex data structure, by a network | |||
node. Each node is expected to contain one or more ASAs which | node. Each node is expected to contain one or more ASAs which | |||
may each manage subsidiary non-autonomic nodes. | may each manage subsidiary non-autonomic nodes. | |||
* Discovery Objective: an objective in the process of discovery. | Discovery Objective: an objective in the process of discovery. | |||
Its value may be undefined. | Its value may be undefined. | |||
* Synchronization Objective: an objective whose specific | Synchronization Objective: an objective whose specific | |||
technical content needs to be synchronized among two or more | technical content needs to be synchronized among two or more | |||
ASAs. Thus, each ASA will maintain its own copy of the | ASAs. Thus, each ASA will maintain its own copy of the | |||
objective. | objective. | |||
* Negotiation Objective: an objective whose specific technical | Negotiation Objective: an objective whose specific technical | |||
content needs to be decided in coordination with another ASA. | content needs to be decided in coordination with another | |||
Again, each ASA will maintain its own copy of the objective. | ASA. Again, each ASA will maintain its own copy of the | |||
objective. | ||||
A detailed discussion of objectives, including their format, is | A detailed discussion of objectives, including their format, is | |||
found in Section 2.10. | found in Section 2.10. | |||
o Discovery Initiator: an ASA that starts discovery by sending a | Discovery Initiator: | |||
discovery message referring to a specific discovery objective. | An ASA that starts discovery by sending a Discovery message | |||
referring to a specific discovery objective. | ||||
o Discovery Responder: a peer that either contains an ASA supporting | Discovery Responder: | |||
the discovery objective indicated by the discovery initiator, or | A peer that either contains an ASA supporting the discovery | |||
caches the locator(s) of the ASA(s) supporting the objective. It | objective indicated by the discovery initiator or caches the | |||
sends a Discovery Response, as described later. | locator(s) of the ASA(s) supporting the objective. It sends a | |||
Discovery Response, as described later. | ||||
o Synchronization Initiator: an ASA that starts synchronization by | Synchronization Initiator: | |||
sending a request message referring to a specific synchronization | An ASA that starts synchronization by sending a request message | |||
objective. | referring to a specific synchronization objective. | |||
o Synchronization Responder: a peer ASA which responds with the | Synchronization Responder: | |||
value of a synchronization objective. | A peer ASA that responds with the value of a synchronization | |||
objective. | ||||
o Negotiation Initiator: an ASA that starts negotiation by sending a | Negotiation Initiator: | |||
request message referring to a specific negotiation objective. | An ASA that starts negotiation by sending a request message | |||
referring to a specific negotiation objective. | ||||
o Negotiation Counterpart: a peer with which the Negotiation | Negotiation Counterpart: | |||
Initiator negotiates a specific negotiation objective. | A peer with which the negotiation initiator negotiates a specific | |||
negotiation objective. | ||||
o GRASP Instance: This refers to an instantiation of a GRASP | GRASP Instance: | |||
protocol engine, likely including multiple threads or processes as | This refers to an instantiation of a GRASP protocol engine, likely | |||
well as dynamic data structures such as a discovery cache, running | including multiple threads or processes as well as dynamic data | |||
in a given security environment on a single device. | structures such as a discovery cache, running in a given security | |||
environment on a single device. | ||||
o GRASP Core: This refers to the code and shared data structures of | GRASP Core: | |||
a GRASP instance, which will communicate with individual ASAs via | This refers to the code and shared data structures of a GRASP | |||
a suitable Application Programming Interface (API). | instance, which will communicate with individual ASAs via a | |||
suitable Application Programming Interface (API). | ||||
o Interface or GRASP Interface: Unless otherwise stated, these refer | Interface or GRASP Interface: | |||
to a network interface - which might be physical or virtual - that | Unless otherwise stated, this refers to a network interface, which | |||
a specific instance of GRASP is currently using. A device might | might be physical or virtual, that a specific instance of GRASP is | |||
have other interfaces that are not used by GRASP and which are | currently using. A device might have other interfaces that are | |||
outside the scope of the autonomic network. | not used by GRASP and which are outside the scope of the Autonomic | |||
Network. | ||||
2.2. High Level Deployment Model | 2.2. High-Level Deployment Model | |||
A GRASP implementation will be part of the Autonomic Networking | A GRASP implementation will be part of the Autonomic Networking | |||
Infrastructure (ANI) in an autonomic node, which must also provide an | Infrastructure (ANI) in an autonomic node, which must also provide an | |||
appropriate security environment. In accordance with | appropriate security environment. In accordance with [RFC8993], this | |||
[I-D.ietf-anima-reference-model], this SHOULD be the Autonomic | SHOULD be the Autonomic Control Plane (ACP) [RFC8994]. As a result, | |||
Control Plane (ACP) [I-D.ietf-anima-autonomic-control-plane]. As a | all autonomic nodes in the ACP are able to trust each other. It is | |||
result, all autonomic nodes in the ACP are able to trust each other. | expected that GRASP will access the ACP by using a typical socket | |||
It is expected that GRASP will access the ACP by using a typical | programming interface, and the ACP will make available only network | |||
socket programming interface and the ACP will make available only | interfaces within the Autonomic Network. If there is no ACP, the | |||
network interfaces within the autonomic network. If there is no ACP, | considerations described in Section 2.5.1 apply. | |||
the considerations described in Section 2.5.1 apply. | ||||
There will also be one or more Autonomic Service Agents (ASAs). In | There will also be one or more Autonomic Service Agents (ASAs). In | |||
the minimal case of a single-purpose device, these components might | the minimal case of a single-purpose device, these components might | |||
be fully integrated with GRASP and the ACP. A more common model is | be fully integrated with GRASP and the ACP. A more common model is | |||
expected to be a multi-purpose device capable of containing several | expected to be a multipurpose device capable of containing several | |||
ASAs, such as a router or large switch. In this case it is expected | ASAs, such as a router or large switch. In this case it is expected | |||
that the ACP, GRASP and the ASAs will be implemented as separate | that the ACP, GRASP and the ASAs will be implemented as separate | |||
processes, which are able to support asynchronous and simultaneous | processes, which are able to support asynchronous and simultaneous | |||
operations, for example by multi-threading. | operations, for example by multithreading. | |||
In some scenarios, a limited negotiation model might be deployed | In some scenarios, a limited negotiation model might be deployed | |||
based on a limited trust relationship such as that between two | based on a limited trust relationship such as that between two | |||
administrative domains. ASAs might then exchange limited information | administrative domains. ASAs might then exchange limited information | |||
and negotiate some particular configurations. | and negotiate some particular configurations. | |||
GRASP is explicitly designed to operate within a single addressing | GRASP is explicitly designed to operate within a single addressing | |||
realm. Its discovery and flooding mechanisms do not support | realm. Its discovery and flooding mechanisms do not support | |||
autonomic operations that cross any form of address translator or | autonomic operations that cross any form of address translator or | |||
upper layer proxy. | upper-layer proxy. | |||
A suitable Application Programming Interface (API) will be needed | A suitable Application Programming Interface (API) will be needed | |||
between GRASP and the ASAs. In some implementations, ASAs would run | between GRASP and the ASAs. In some implementations, ASAs would run | |||
in user space with a GRASP library providing the API, and this | in user space with a GRASP library providing the API, and this | |||
library would in turn communicate via system calls with core GRASP | library would in turn communicate via system calls with core GRASP | |||
functions. Details of the API are out of scope for the present | functions. Details of the API are out of scope for the present | |||
document. For further details of possible deployment models, see | document. For further details of possible deployment models, see | |||
[I-D.ietf-anima-reference-model]. | [RFC8993]. | |||
An instance of GRASP must be aware of the network interfaces it will | An instance of GRASP must be aware of the network interfaces it will | |||
use, and of the appropriate global-scope and link-local addresses. | use, and of the appropriate global-scope and link-local addresses. | |||
In the presence of the ACP, such information will be available from | In the presence of the ACP, such information will be available from | |||
the adjacency table discussed in [I-D.ietf-anima-reference-model]. | the adjacency table discussed in [RFC8993]. In other cases, GRASP | |||
In other cases, GRASP must determine such information for itself. | must determine such information for itself. Details depend on the | |||
Details depend on the device and operating system. In the rest of | device and operating system. In the rest of this document, the terms | |||
this document, the terms 'interfaces' or 'GRASP interfaces' refers | 'interfaces' or 'GRASP interfaces' refers only to the set of network | |||
only to the set of network interfaces that a specific instance of | interfaces that a specific instance of GRASP is currently using. | |||
GRASP is currently using. | ||||
Because GRASP needs to work with very high reliability, especially | Because GRASP needs to work with very high reliability, especially | |||
during bootstrapping and during fault conditions, it is essential | during bootstrapping and during fault conditions, it is essential | |||
that every implementation continues to operate in adverse conditions. | that every implementation continues to operate in adverse conditions. | |||
For example, discovery failures, or any kind of socket exception at | For example, discovery failures, or any kind of socket exception at | |||
any time, must not cause irrecoverable failures in GRASP itself, and | any time, must not cause irrecoverable failures in GRASP itself, and | |||
must return suitable error codes through the API so that ASAs can | must return suitable error codes through the API so that ASAs can | |||
also recover. | also recover. | |||
GRASP must not depend upon non-volatile data storage. All run time | GRASP must not depend upon nonvolatile data storage. All runtime | |||
error conditions, and events such as address renumbering, network | error conditions, and events such as address renumbering, network | |||
interface failures, and CPU sleep/wake cycles, must be handled in | interface failures, and CPU sleep/wake cycles, must be handled in | |||
such a way that GRASP will still operate correctly and securely | such a way that GRASP will still operate correctly and securely | |||
(Section 2.5.1) afterwards. | afterwards (Section 2.5.1). | |||
An autonomic node will normally run a single instance of GRASP, used | An autonomic node will normally run a single instance of GRASP, which | |||
by multiple ASAs. Possible exceptions are mentioned below. | is used by multiple ASAs. Possible exceptions are mentioned below. | |||
2.3. High Level Design | 2.3. High-Level Design | |||
This section describes the behavior model and general design of | This section describes the behavior model and general design of | |||
GRASP, supporting discovery, synchronization and negotiation, to act | GRASP, supporting discovery, synchronization, and negotiation, to act | |||
as a platform for different technical objectives. | as a platform for different technical objectives. | |||
o A generic platform: | A generic platform: | |||
The protocol design is generic and independent of the | The protocol design is generic and independent of the | |||
synchronization or negotiation contents. The technical contents | synchronization or negotiation contents. The technical contents | |||
will vary according to the various technical objectives and the | will vary according to the various technical objectives and the | |||
different pairs of counterparts. | different pairs of counterparts. | |||
o Normally, a single main instance of the GRASP protocol engine will | Multiple instances: | |||
Normally, a single main instance of the GRASP protocol engine will | ||||
exist in an autonomic node, and each ASA will run as an | exist in an autonomic node, and each ASA will run as an | |||
independent asynchronous process. However, scenarios where | independent asynchronous process. However, scenarios where | |||
multiple instances of GRASP run in a single node, perhaps with | multiple instances of GRASP run in a single node, perhaps with | |||
different security properties, are possible (Section 2.5.2). In | different security properties, are possible (Section 2.5.2). In | |||
this case, each instance MUST listen independently for GRASP link- | this case, each instance MUST listen independently for GRASP link- | |||
local multicasts, and all instances MUST be woken by each such | local multicasts, and all instances MUST be woken by each such | |||
multicast, in order for discovery and flooding to work correctly. | multicast in order for discovery and flooding to work correctly. | |||
o Security infrastructure: | ||||
Security infrastructure: | ||||
As noted above, the protocol itself has no built-in security | As noted above, the protocol itself has no built-in security | |||
functionality, and relies on a separate secure infrastructure. | functionality and relies on a separate secure infrastructure. | |||
o Discovery, synchronization and negotiation are designed together: | ||||
Discovery, synchronization, and negotiation are designed together: | ||||
The discovery method and the synchronization and negotiation | The discovery method and the synchronization and negotiation | |||
methods are designed in the same way and can be combined when this | methods are designed in the same way and can be combined when this | |||
is useful, allowing a rapid mode of operation described in | is useful, allowing a rapid mode of operation described in | |||
Section 2.5.4. These processes can also be performed | Section 2.5.4. These processes can also be performed | |||
independently when appropriate. | independently when appropriate. | |||
* Thus, for some objectives, especially those concerned with | Thus, for some objectives, especially those concerned with | |||
application layer services, another discovery mechanism such as | application-layer services, another discovery mechanism such as | |||
the future DNS Service Discovery [RFC7558] MAY be used. The | DNS-based Service Discovery [RFC7558] MAY be used. The choice | |||
choice is left to the designers of individual ASAs. | is left to the designers of individual ASAs. | |||
o A uniform pattern for technical objectives: | ||||
A uniform pattern for technical objectives: | ||||
The synchronization and negotiation objectives are defined | The synchronization and negotiation objectives are defined | |||
according to a uniform pattern. The values that they contain | according to a uniform pattern. The values that they contain | |||
could be carried either in a simple binary format or in a complex | could be carried either in a simple binary format or in a complex | |||
object format. The basic protocol design uses the Concise Binary | object format. The basic protocol design uses the Concise Binary | |||
Object Representation (CBOR) [RFC7049], which is readily | Object Representation (CBOR) [RFC8949], which is readily | |||
extensible for unknown future requirements. | extensible for unknown, future requirements. | |||
o A flexible model for synchronization: | ||||
A flexible model for synchronization: | ||||
GRASP supports synchronization between two nodes, which could be | GRASP supports synchronization between two nodes, which could be | |||
used repeatedly to perform synchronization among a small number of | used repeatedly to perform synchronization among a small number of | |||
nodes. It also supports an unsolicited flooding mode when large | nodes. It also supports an unsolicited flooding mode when large | |||
groups of nodes, possibly including all autonomic nodes, need data | groups of nodes, possibly including all autonomic nodes, need data | |||
for the same technical objective. | for the same technical objective. | |||
* There may be some network parameters for which a more | There may be some network parameters for which a more | |||
traditional flooding mechanism such as DNCP [RFC7787] is | traditional flooding mechanism such as the Distributed Node | |||
considered more appropriate. GRASP can coexist with DNCP. | Consensus Protocol (DNCP) [RFC7787] is considered more | |||
appropriate. GRASP can coexist with DNCP. | ||||
o A simple initiator/responder model for negotiation: | ||||
Multi-party negotiations are very complicated to model and cannot | A simple initiator/responder model for negotiation: | |||
Multiparty negotiations are very complicated to model and cannot | ||||
readily be guaranteed to converge. GRASP uses a simple bilateral | readily be guaranteed to converge. GRASP uses a simple bilateral | |||
model and can support multi-party negotiations by indirect steps. | model and can support multiparty negotiations by indirect steps. | |||
o Organizing of synchronization or negotiation content: | ||||
Organizing of synchronization or negotiation content: | ||||
The technical content transmitted by GRASP will be organized | The technical content transmitted by GRASP will be organized | |||
according to the relevant function or service. The objectives for | according to the relevant function or service. The objectives for | |||
different functions or services are kept separate, because they | different functions or services are kept separate because they may | |||
may be negotiated or synchronized with different counterparts or | be negotiated or synchronized with different counterparts or have | |||
have different response times. Thus a normal arrangement would be | different response times. Thus a normal arrangement is a single | |||
a single ASA managing a small set of closely related objectives, | ASA managing a small set of closely related objectives, with a | |||
with a version of that ASA in each relevant autonomic node. | version of that ASA in each relevant autonomic node. Further | |||
Further discussion of this aspect is out of scope for the current | discussion of this aspect is out of scope for the current | |||
document. | document. | |||
o Requests and responses in negotiation procedures: | Requests and responses in negotiation procedures: | |||
The initiator can negotiate a specific negotiation objective with | The initiator can negotiate a specific negotiation objective with | |||
relevant counterpart ASAs. It can request relevant information | relevant counterpart ASAs. It can request relevant information | |||
from a counterpart so that it can coordinate its local | from a counterpart so that it can coordinate its local | |||
configuration. It can request the counterpart to make a matching | configuration. It can request the counterpart to make a matching | |||
configuration. It can request simulation or forecast results by | configuration. It can request simulation or forecast results by | |||
sending some dry run conditions. | sending some dry-run conditions. | |||
Beyond the traditional yes/no answer, the responder can reply with | Beyond the traditional yes/no answer, the responder can reply with | |||
a suggested alternative value for the objective concerned. This | a suggested alternative value for the objective concerned. This | |||
would start a bi-directional negotiation ending in a compromise | would start a bidirectional negotiation ending in a compromise | |||
between the two ASAs. | between the two ASAs. | |||
o Convergence of negotiation procedures: | Convergence of negotiation procedures: | |||
To enable convergence when a responder suggests a new value or | ||||
To enable convergence, when a responder suggests a new value or | ||||
condition in a negotiation step reply, it should be as close as | condition in a negotiation step reply, it should be as close as | |||
possible to the original request or previous suggestion. The | possible to the original request or previous suggestion. The | |||
suggested value of later negotiation steps should be chosen | suggested value of later negotiation steps should be chosen | |||
between the suggested values from the previous two steps. GRASP | between the suggested values from the previous two steps. GRASP | |||
provides mechanisms to guarantee convergence (or failure) in a | provides mechanisms to guarantee convergence (or failure) in a | |||
small number of steps, namely a timeout and a maximum number of | small number of steps, namely a timeout and a maximum number of | |||
iterations. | iterations. | |||
o Extensibility: | Extensibility: | |||
GRASP intentionally does not have a version number, and it can be | ||||
GRASP intentionally does not have a version number, and can be | ||||
extended by adding new message types and options. The Invalid | extended by adding new message types and options. The Invalid | |||
Message (M_INVALID) will be used to signal that an implementation | message (M_INVALID) will be used to signal that an implementation | |||
does not recognize a message or option sent by another | does not recognize a message or option sent by another | |||
implementation. In normal use, new semantics will be added by | implementation. In normal use, new semantics will be added by | |||
defining new synchronization or negotiation objectives. | defining new synchronization or negotiation objectives. | |||
2.4. Quick Operating Overview | 2.4. Quick Operating Overview | |||
An instance of GRASP is expected to run as a separate core module, | An instance of GRASP is expected to run as a separate core module, | |||
providing an API (such as [I-D.liu-anima-grasp-api]) to interface to | providing an API (such as [RFC8991]) to interface to various ASAs. | |||
various ASAs. These ASAs may operate without special privilege, | These ASAs may operate without special privilege, unless they need it | |||
unless they need it for other reasons (such as configuring IP | for other reasons (such as configuring IP addresses or manipulating | |||
addresses or manipulating routing tables). | routing tables). | |||
The GRASP mechanisms used by the ASA are built around GRASP | The GRASP mechanisms used by the ASA are built around GRASP | |||
objectives defined as data structures containing administrative | objectives defined as data structures containing administrative | |||
information such as the objective's unique name, and its current | information such as the objective's unique name and its current | |||
value. The format and size of the value is not restricted by the | value. The format and size of the value is not restricted by the | |||
protocol, except that it must be possible to serialize it for | protocol, except that it must be possible to serialize it for | |||
transmission in CBOR, which is no restriction at all in practice. | transmission in CBOR, which is no restriction at all in practice. | |||
GRASP provides the following mechanisms: | GRASP provides the following mechanisms: | |||
o A discovery mechanism (M_DISCOVERY, M_RESPONSE), by which an ASA | * A discovery mechanism (M_DISCOVERY, M_RESPONSE) by which an ASA | |||
can discover other ASAs supporting a given objective. | can discover other ASAs supporting a given objective. | |||
o A negotiation request mechanism (M_REQ_NEG), by which an ASA can | * A negotiation request mechanism (M_REQ_NEG) by which an ASA can | |||
start negotiation of an objective with a counterpart ASA. Once a | start negotiation of an objective with a counterpart ASA. Once a | |||
negotiation has started, the process is symmetrical, and there is | negotiation has started, the process is symmetrical, and there is | |||
a negotiation step message (M_NEGOTIATE) for each ASA to use in | a negotiation step message (M_NEGOTIATE) for each ASA to use in | |||
turn. Two other functions support negotiating steps (M_WAIT, | turn. Two other functions support negotiating steps (M_WAIT, | |||
M_END). | M_END). | |||
o A synchronization mechanism (M_REQ_SYN), by which an ASA can | * A synchronization mechanism (M_REQ_SYN) by which an ASA can | |||
request the current value of an objective from a counterpart ASA. | request the current value of an objective from a counterpart ASA. | |||
With this, there is a corresponding response function (M_SYNCH) | With this, there is a corresponding response function (M_SYNCH) | |||
for an ASA that wishes to respond to synchronization requests. | for an ASA that wishes to respond to synchronization requests. | |||
o A flood mechanism (M_FLOOD), by which an ASA can cause the current | * A flood mechanism (M_FLOOD) by which an ASA can cause the current | |||
value of an objective to be flooded throughout the autonomic | value of an objective to be flooded throughout the Autonomic | |||
network so that any ASA can receive it. One application of this | Network so that any ASA can receive it. One application of this | |||
is to act as an announcement, avoiding the need for discovery of a | is to act as an announcement, avoiding the need for discovery of a | |||
widely applicable objective. | widely applicable objective. | |||
Some example messages and simple message flows are provided in | Some example messages and simple message flows are provided in | |||
Appendix D. | Appendix A. | |||
2.5. GRASP Protocol Basic Properties and Mechanisms | 2.5. GRASP Basic Properties and Mechanisms | |||
2.5.1. Required External Security Mechanism | 2.5.1. Required External Security Mechanism | |||
GRASP does not specify transport security because it is meant to be | GRASP does not specify transport security because it is meant to be | |||
adapted to different environments. Every solution adopting GRASP | adapted to different environments. Every solution adopting GRASP | |||
MUST specify a security and transport substrate used by GRASP in that | MUST specify a security and transport substrate used by GRASP in that | |||
solution. | solution. | |||
The substrate MUST enforce sending and receiving GRASP messages only | The substrate MUST enforce sending and receiving GRASP messages only | |||
between members of a mutually trusted group running GRASP. Each | between members of a mutually trusted group running GRASP. Each | |||
group member is an instance of GRASP. The group members are nodes of | group member is an instance of GRASP. The group members are nodes of | |||
a connected graph. The group and graph is created by the security | a connected graph. The group and graph are created by the security | |||
and transport substrate and called the GRASP domain. The substrate | and transport substrate and are called the GRASP domain. The | |||
must support unicast messages between any group members and (link- | substrate must support unicast messages between any group members and | |||
local) multicast messages between adjacent group members. It must | (link-local) multicast messages between adjacent group members. It | |||
deny messages between group members and non group members. With this | must deny messages between group members and non-group members. With | |||
model, security is provided by enforcing group membership, but any | this model, security is provided by enforcing group membership, but | |||
member of the trusted group can attack the entire network until | any member of the trusted group can attack the entire network until | |||
revoked. | revoked. | |||
Substrates MUST use cryptographic member authentication and message | Substrates MUST use cryptographic member authentication and message | |||
integrity for GRASP messages. This can be end-to-end or hop-by-hop | integrity for GRASP messages. This can be end to end or hop by hop | |||
across the domain. The security and transport substrate MUST provide | across the domain. The security and transport substrate MUST provide | |||
mechanisms to remove untrusted members from the group. | mechanisms to remove untrusted members from the group. | |||
If the substrate does not mandate and enforce GRASP message | If the substrate does not mandate and enforce GRASP message | |||
encryption then any service using GRASP in such a solution MUST | encryption, then any service using GRASP in such a solution MUST | |||
provide protection and encryption for message elements whose exposure | provide protection and encryption for message elements whose exposure | |||
could constitute an attack vector. | could constitute an attack vector. | |||
The security and transport substrate for GRASP in the ANI is the ACP. | The security and transport substrate for GRASP in the ANI is the ACP. | |||
Unless otherwise noted, we assume this security and transport | Unless otherwise noted, we assume this security and transport | |||
substrate in the remainder of this document. The ACP does mandate | substrate in the remainder of this document. The ACP does mandate | |||
the use of encryption; therefore GRASP in the ANI can rely on GRASP | the use of encryption; therefore, GRASP in the ANI can rely on GRASP | |||
message being encrypted. The GRASP domain is the ACP: all nodes in | messages being encrypted. The GRASP domain is the ACP: all nodes in | |||
an autonomic domain connected by encrypted virtual links formed by | an autonomic domain connected by encrypted virtual links formed by | |||
the ACP. The ACP uses hop-by-hop security (authentication/ | the ACP. The ACP uses hop-by-hop security (authentication and | |||
encryption) of messages. Removal of nodes relies on standard PKI | encryption) of messages. Removal of nodes relies on standard PKI | |||
certificate revocation or expiry of sufficiently short lived | certificate revocation or expiry of sufficiently short-lived | |||
certificates. Refer to [I-D.ietf-anima-autonomic-control-plane] for | certificates. Refer to [RFC8994] for more details. | |||
more details. | ||||
As mentioned in Section 2.3, some GRASP operations might be performed | As mentioned in Section 2.3, some GRASP operations might be performed | |||
across an administrative domain boundary by mutual agreement, without | across an administrative domain boundary by mutual agreement, without | |||
the benefit of an ACP. Such operations MUST be confined to a | the benefit of an ACP. Such operations MUST be confined to a | |||
separate instance of GRASP with its own copy of all GRASP data | separate instance of GRASP with its own copy of all GRASP data | |||
structures running across a separate GRASP domain with a security and | structures running across a separate GRASP domain with a security and | |||
transport substrate. In the most simple case, each point-to-point | transport substrate. In the most simple case, each point-to-point | |||
interdomain GRASP peering could be a separate domain and the security | interdomain GRASP peering could be a separate domain, and the | |||
and transport substrate could be built using transport or network | security and transport substrate could be built using transport or | |||
layer security protocols. This is subject to future specifications. | network-layer security protocols. This is subject to future | |||
specifications. | ||||
An exception to the requirements for the security and transport | An exception to the requirements for the security and transport | |||
substrate exists for highly constrained subsets of GRASP meant to | substrate exists for highly constrained subsets of GRASP meant to | |||
support the establishment of a security and transport substrate, | support the establishment of a security and transport substrate, | |||
described in the following section. | described in the following section. | |||
2.5.2. Discovery Unsolicited Link-Local (DULL) GRASP | 2.5.2. Discovery Unsolicited Link-Local (DULL) GRASP | |||
Some services may need to use insecure GRASP discovery, response and | Some services may need to use insecure GRASP discovery, response, and | |||
flood messages without being able to use pre-existing security | flood messages without being able to use preexisting security | |||
associations, for example as part of discovery for establishing | associations, for example, as part of discovery for establishing | |||
security associations such as a security substrate for GRASP. | security associations such as a security substrate for GRASP. | |||
Such operations being intrinsically insecure, they need to be | Such operations being intrinsically insecure, they need to be | |||
confined to link-local use to minimize the risk of malicious actions. | confined to link-local use to minimize the risk of malicious actions. | |||
Possible examples include discovery of candidate ACP neighbors | Possible examples include discovery of candidate ACP neighbors | |||
[I-D.ietf-anima-autonomic-control-plane], discovery of bootstrap | [RFC8994], discovery of bootstrap proxies [RFC8995], or perhaps | |||
proxies [I-D.ietf-anima-bootstrapping-keyinfra] or perhaps | ||||
initialization services in networks using GRASP without being fully | initialization services in networks using GRASP without being fully | |||
autonomic (e.g., no ACP). Such usage MUST be limited to link-local | autonomic (e.g., no ACP). Such usage MUST be limited to link-local | |||
operations on a single interface and MUST be confined to a separate | operations on a single interface and MUST be confined to a separate | |||
insecure instance of GRASP with its own copy of all GRASP data | insecure instance of GRASP with its own copy of all GRASP data | |||
structures. This instance is nicknamed DULL - Discovery Unsolicited | structures. This instance is nicknamed DULL -- Discovery Unsolicited | |||
Link-Local. | Link-Local. | |||
The detailed rules for the DULL instance of GRASP are as follows: | The detailed rules for the DULL instance of GRASP are as follows: | |||
o An initiator MAY send Discovery or Flood Synchronization link- | * An initiator MAY send Discovery or Flood Synchronization link- | |||
local multicast messages which MUST have a loop count of 1, to | local multicast messages that MUST have a loop count of 1, to | |||
prevent off-link operations. Other unsolicited GRASP message | prevent off-link operations. Other unsolicited GRASP message | |||
types MUST NOT be sent. | types MUST NOT be sent. | |||
o A responder MUST silently discard any message whose loop count is | * A responder MUST silently discard any message whose loop count is | |||
not 1. | not 1. | |||
o A responder MUST silently discard any message referring to a GRASP | * A responder MUST silently discard any message referring to a GRASP | |||
Objective that is not directly part of a service that requires | objective that is not directly part of a service that requires | |||
this insecure mode. | this insecure mode. | |||
o A responder MUST NOT relay any multicast messages. | * A responder MUST NOT relay any multicast messages. | |||
o A Discovery Response MUST indicate a link-local address. | * A Discovery Response MUST indicate a link-local address. | |||
o A Discovery Response MUST NOT include a Divert option. | * A Discovery Response MUST NOT include a Divert option. | |||
o A node MUST silently discard any message whose source address is | * A node MUST silently discard any message whose source address is | |||
not link-local. | not link-local. | |||
To minimize traffic possibly observed by third parties, GRASP traffic | To minimize traffic possibly observed by third parties, GRASP traffic | |||
SHOULD be minimized by using only Flood Synchronization to announce | SHOULD be minimized by using only Flood Synchronization to announce | |||
objectives and their associated locators, rather than by using | objectives and their associated locators, rather than by using | |||
Discovery and Response. Further details are out of scope for this | Discovery and Discovery Response messages. Further details are out | |||
document | of scope for this document. | |||
2.5.3. Transport Layer Usage | 2.5.3. Transport Layer Usage | |||
All GRASP messages, after they are serialized as a CBOR byte string, | All GRASP messages, after they are serialized as a CBOR byte string, | |||
are transmitted as such directly over the transport protocol in use. | are transmitted as such directly over the transport protocol in use. | |||
The transport protocol(s) for a GRASP domain are specified by the | The transport protocol(s) for a GRASP domain are specified by the | |||
security and transport substrate as introduced in Section 2.5.1. | security and transport substrate as introduced in Section 2.5.1. | |||
GRASP discovery and flooding messages are designed for GRASP domain | GRASP discovery and flooding messages are designed for GRASP domain- | |||
wide flooding through hop-by-hop link-local multicast forwarding | wide flooding through hop-by-hop link-local multicast forwarding | |||
between adjacent GRASP nodes. The GRASP security and transport | between adjacent GRASP nodes. The GRASP security and transport | |||
substrate needs to specify how these link local multicasts are | substrate needs to specify how these link-local multicasts are | |||
transported. This can be unreliable transport (UDP) but it SHOULD be | transported. This can be unreliable transport (UDP) but it SHOULD be | |||
reliable transport (e.g., TCP). | reliable transport (e.g., TCP). | |||
If the substrate specifies an unreliable transport such as UDP for | If the substrate specifies an unreliable transport such as UDP for | |||
discovery and flooding messages, then it MUST NOT use IP | discovery and flooding messages, then it MUST NOT use IP | |||
fragmentation because of its loss characteristic, especially in | fragmentation because of its loss characteristic, especially in | |||
multi-hop flooding. GRASP MUST then enforce at the user API level a | multi-hop flooding. GRASP MUST then enforce at the user API level a | |||
limit to the size of discovery and flooding messages, so that no | limit to the size of discovery and flooding messages, so that no | |||
fragmentation can occur. For IPv6 transport this means that those | fragmentation can occur. For IPv6 transport, this means that the | |||
messages must be at most 1280 bytes sized IPv6 packets (unless there | size of those messages' IPv6 packets must be at most 1280 bytes | |||
is a known larger minimum link MTU across the whole GRASP domain). | (unless there is a known larger minimum link MTU across the whole | |||
GRASP domain). | ||||
All other GRASP messages are unicast beteween group members of the | All other GRASP messages are unicast between group members of the | |||
GRASP domain. These MUST use a reliable transport protocol because | GRASP domain. These MUST use a reliable transport protocol because | |||
GRASP itself does not provide for error detection, retransmission or | GRASP itself does not provide for error detection, retransmission, or | |||
flow control. Unless otherwise specified by the security and | flow control. Unless otherwise specified by the security and | |||
transport substrate, TCP MUST be used. | transport substrate, TCP MUST be used. | |||
The security and transport substrate for GRASP in the ANI is the ACP. | The security and transport substrate for GRASP in the ANI is the ACP. | |||
Unless otherwise noted, we assume this security and transport | Unless otherwise noted, we assume this security and transport | |||
substrate in the remainder of this document when describing GRASPs | substrate in the remainder of this document when describing GRASP's | |||
message transport. In the ACP, TCP is used for GRASP unicast | message transport. In the ACP, TCP is used for GRASP unicast | |||
messages. GRASP discovery and flooding messages also use TCP: These | messages. GRASP discovery and flooding messages also use TCP: these | |||
link-local messages are forwarded by replicating them to all adjacent | link-local messages are forwarded by replicating them to all adjacent | |||
GRASP nodes on the link via TCP connections to those adjacent GRASP | GRASP nodes on the link via TCP connections to those adjacent GRASP | |||
nodes. Because of this, GRASP in the ANI has no limitations on the | nodes. Because of this, GRASP in the ANI has no limitations on the | |||
size of discovery and flooding messages with respect to fragmentation | size of discovery and flooding messages with respect to fragmentation | |||
issues. UDP is used in the ANI with GRASP only with DULL when the | issues. While the ACP is being built using a DULL instance of GRASP, | |||
ACP is built to discover ACP/GRASP neighbors on links. | native UDP multicast is used to discover ACP/GRASP neighbors on | |||
links. | ||||
For link-local UDP multicast, the GRASP protocol listens to the well- | For link-local UDP multicast, GRASP listens to the well-known GRASP | |||
known GRASP Listen Port (Section 2.6). Transport connections for | Listen Port (Section 2.6). Transport connections for discovery and | |||
Discovery and Flooding on relay nodes must terminate in GRASP | flooding on relay nodes must terminate in GRASP instances (e.g., | |||
instances (eg: GRASP ASAs) so that link-local multicast, hop-by-hop | GRASP ASAs) so that link-local multicast, hop-by-hop flooding of | |||
flooding of M_DISCOVERY and M_FLOOD and hop-by-hop forwarding of | M_DISCOVERY and M_FLOOD messages and hop-by-hop forwarding of | |||
M_RESPONSE and caching of those responses along the path work | M_RESPONSE responses and caching of those responses along the path | |||
correctly. | work correctly. | |||
Unicast transport connections used for synchronization and | Unicast transport connections used for synchronization and | |||
negotiation can terminate directly in ASAs that implement objectives | negotiation can terminate directly in ASAs that implement objectives; | |||
and therefore this traffic does not need to pass through GRASP | therefore, this traffic does not need to pass through GRASP | |||
instances. For this, the ASA listens on its own dynamically assigned | instances. For this, the ASA listens on its own dynamically assigned | |||
ports, which are communicated to its peers during discovery. | ports, which are communicated to its peers during discovery. | |||
Alternatively, the GRASP instance can also terminate the unicast | Alternatively, the GRASP instance can also terminate the unicast | |||
transport connections and pass the traffic from/to the ASA if that is | transport connections and pass the traffic from/to the ASA if that is | |||
preferrable in some implementation (eg: to better decouple ASAs from | preferable in some implementations (e.g., to better decouple ASAs | |||
network connections). | from network connections). | |||
2.5.4. Discovery Mechanism and Procedures | 2.5.4. Discovery Mechanism and Procedures | |||
2.5.4.1. Separated discovery and negotiation mechanisms | 2.5.4.1. Separated Discovery and Negotiation Mechanisms | |||
Although discovery and negotiation or synchronization are defined | Although discovery and negotiation or synchronization are defined | |||
together in GRASP, they are separate mechanisms. The discovery | together in GRASP, they are separate mechanisms. The discovery | |||
process could run independently from the negotiation or | process could run independently from the negotiation or | |||
synchronization process. Upon receiving a Discovery (Section 2.8.4) | synchronization process. Upon receiving a Discovery message | |||
message, the recipient node should return a response message in which | (Section 2.8.4), the recipient node should return a Discovery | |||
it either indicates itself as a discovery responder or diverts the | Response message in which it either indicates itself as a discovery | |||
initiator towards another more suitable ASA. However, this response | responder or diverts the initiator towards another more suitable ASA. | |||
may be delayed if the recipient needs to relay the discovery onwards, | However, this response may be delayed if the recipient needs to relay | |||
as described below. | the Discovery message onward, as described in Section 2.5.4.4. | |||
The discovery action (M_DISCOVERY) will normally be followed by a | The discovery action (M_DISCOVERY) will normally be followed by a | |||
negotiation (M_REQ_NEG) or synchronization (M_REQ_SYN) action. The | negotiation (M_REQ_NEG) or synchronization (M_REQ_SYN) action. The | |||
discovery results could be utilized by the negotiation protocol to | discovery results could be utilized by the negotiation protocol to | |||
decide which ASA the initiator will negotiate with. | decide which ASA the initiator will negotiate with. | |||
The initiator of a discovery action for a given objective need not be | The initiator of a discovery action for a given objective need not be | |||
capable of responding to that objective as a Negotiation Counterpart, | capable of responding to that objective as a negotiation counterpart, | |||
as a Synchronization Responder or as source for flooding. For | as a synchronization responder, or as source for flooding. For | |||
example, an ASA might perform discovery even if it only wishes to act | example, an ASA might perform discovery even if it only wishes to act | |||
a Synchronization Initiator or Negotiation Initiator. Such an ASA | as a synchronization initiator or negotiation initiator. Such an ASA | |||
does not itself need to respond to discovery messages. | does not itself need to respond to Discovery messages. | |||
It is also entirely possible to use GRASP discovery without any | It is also entirely possible to use GRASP discovery without any | |||
subsequent negotiation or synchronization action. In this case, the | subsequent negotiation or synchronization action. In this case, the | |||
discovered objective is simply used as a name during the discovery | discovered objective is simply used as a name during the discovery | |||
process and any subsequent operations between the peers are outside | process, and any subsequent operations between the peers are outside | |||
the scope of GRASP. | the scope of GRASP. | |||
2.5.4.2. Discovery Overview | 2.5.4.2. Discovery Overview | |||
A complete discovery process will start with a multicast (of | A complete discovery process will start with a multicast Discovery | |||
M_DISCOVERY) on the local link. On-link neighbors supporting the | message (M_DISCOVERY) on the local link. On-link neighbors | |||
discovery objective will respond directly (with M_RESPONSE). A | supporting the discovery objective will respond directly with | |||
neighbor with multiple interfaces may respond with a cached discovery | Discovery Response (M_RESPONSE) messages. A neighbor with multiple | |||
response. If it has no cached response, it will relay the discovery | interfaces may respond with a cached Discovery Response. If it has | |||
on its other GRASP interfaces. If a node receiving the relayed | no cached response, it will relay the Discovery message on its other | |||
discovery supports the discovery objective, it will respond to the | GRASP interfaces. If a node receiving the relayed Discovery message | |||
relayed discovery. If it has a cached response, it will respond with | supports the discovery objective, it will respond to the relayed | |||
Discovery message. If it has a cached response, it will respond with | ||||
that. If not, it will repeat the discovery process, which thereby | that. If not, it will repeat the discovery process, which thereby | |||
becomes iterative. The loop count and timeout will ensure that the | becomes iterative. The loop count and timeout will ensure that the | |||
process ends. Further details are given below. | process ends. Further details are given in Section 2.5.4.4. | |||
A Discovery message MAY be sent unicast to a peer node, which SHOULD | A Discovery message MAY be sent unicast to a peer node, which SHOULD | |||
then proceed exactly as if the message had been multicast, except | then proceed exactly as if the message had been multicast, except | |||
that when TCP is used, the response will be on the same socket as the | that when TCP is used, the response will be on the same socket as the | |||
query. However, this mode does not guarantee successful discovery in | query. However, this mode does not guarantee successful discovery in | |||
the general case. | the general case. | |||
2.5.4.3. Discovery Procedures | 2.5.4.3. Discovery Procedures | |||
Discovery starts as an on-link operation. The Divert option can tell | Discovery starts as an on-link operation. The Divert option can tell | |||
the discovery initiator to contact an off-link ASA for that discovery | the discovery initiator to contact an off-link ASA for that discovery | |||
objective. If the security and transport substrate of the GRASP | objective. If the security and transport substrate of the GRASP | |||
domain (see Section 2.5.3) uses UDP link-local multicast then the | domain (see Section 2.5.3) uses UDP link-local multicast, then the | |||
discovery initiator sends these to the ALL_GRASP_NEIGHBORS link-local | discovery initiator sends these to the ALL_GRASP_NEIGHBORS link-local | |||
multicast address (Section 2.6) and and all GRASP nodes need to | multicast address (Section 2.6), and all GRASP nodes need to listen | |||
listen to this address to act as discovery responder. Because this | to this address to act as discovery responders. Because this port is | |||
port is unique in a device, this is a function of the GRASP instance | unique in a device, this is a function of the GRASP instance and not | |||
and not of an individual ASA. As a result, each ASA will need to | of an individual ASA. As a result, each ASA will need to register | |||
register the objectives that it supports with the local GRASP | the objectives that it supports with the local GRASP instance. | |||
instance. | ||||
If an ASA in a neighbor device supports the requested discovery | If an ASA in a neighbor device supports the requested discovery | |||
objective, the device SHOULD respond to the link-local multicast with | objective, the device SHOULD respond to the link-local multicast with | |||
a unicast Discovery Response message (Section 2.8.5) with locator | a unicast Discovery Response message (Section 2.8.5) with locator | |||
option(s), unless it is temporarily unavailable. Otherwise, if the | option(s) (Section 2.9.5) unless it is temporarily unavailable. | |||
neighbor has cached information about an ASA that supports the | Otherwise, if the neighbor has cached information about an ASA that | |||
requested discovery objective (usually because it discovered the same | supports the requested discovery objective (usually because it | |||
objective before), it SHOULD respond with a Discovery Response | discovered the same objective before), it SHOULD respond with a | |||
message with a Divert option pointing to the appropriate Discovery | Discovery Response message with a Divert option pointing to the | |||
Responder. However, it SHOULD NOT respond with a cached response on | appropriate discovery responder. However, it SHOULD NOT respond with | |||
an interface if it learnt that information from the same interface, | a cached response on an interface if it learned that information from | |||
because the peer in question will answer directly if still | the same interface because the peer in question will answer directly | |||
operational. | if still operational. | |||
If a device has no information about the requested discovery | If a device has no information about the requested discovery | |||
objective, and is not acting as a discovery relay (see below) it MUST | objective and is not acting as a discovery relay (see | |||
silently discard the Discovery message. | Section 2.5.4.4), it MUST silently discard the Discovery message. | |||
The discovery initiator MUST set a reasonable timeout on the | The discovery initiator MUST set a reasonable timeout on the | |||
discovery process. A suggested value is 100 milliseconds multiplied | discovery process. A suggested value is 100 milliseconds multiplied | |||
by the loop count embedded in the objective. | by the loop count embedded in the objective. | |||
If no discovery response is received within the timeout, the | If no Discovery Response is received within the timeout, the | |||
Discovery message MAY be repeated, with a newly generated Session ID | Discovery message MAY be repeated with a newly generated Session ID | |||
(Section 2.7). An exponential backoff SHOULD be used for subsequent | (Section 2.7). An exponential backoff SHOULD be used for subsequent | |||
repetitions, to limit the load during busy periods. The details of | repetitions to limit the load during busy periods. The details of | |||
the backoff algorithm will depend on the use case for the objective | the backoff algorithm will depend on the use case for the objective | |||
concerned but MUST be consistent with the recommendations in | concerned but MUST be consistent with the recommendations in | |||
[RFC8085] for low data-volume multicast. Frequent repetition might | [RFC8085] for low data-volume multicast. Frequent repetition might | |||
be symptomatic of a denial of service attack. | be symptomatic of a denial-of-service attack. | |||
After a GRASP device successfully discovers a locator for a Discovery | After a GRASP device successfully discovers a locator for a discovery | |||
Responder supporting a specific objective, it SHOULD cache this | responder supporting a specific objective, it SHOULD cache this | |||
information, including the interface index [RFC3493] via which it was | information, including the interface index [RFC3493] via which it was | |||
discovered. This cache record MAY be used for future negotiation or | discovered. This cache record MAY be used for future negotiation or | |||
synchronization, and the locator SHOULD be passed on when appropriate | synchronization, and the locator SHOULD be passed on when appropriate | |||
as a Divert option to another Discovery Initiator. | as a Divert option to another discovery initiator. | |||
The cache mechanism MUST include a lifetime for each entry. The | The cache mechanism MUST include a lifetime for each entry. The | |||
lifetime is derived from a time-to-live (ttl) parameter in each | lifetime is derived from a time-to-live (ttl) parameter in each | |||
Discovery Response message. Cached entries MUST be ignored or | Discovery Response message. Cached entries MUST be ignored or | |||
deleted after their lifetime expires. In some environments, | deleted after their lifetime expires. In some environments, | |||
unplanned address renumbering might occur. In such cases, the | unplanned address renumbering might occur. In such cases, the | |||
lifetime SHOULD be short compared to the typical address lifetime. | lifetime SHOULD be short compared to the typical address lifetime. | |||
The discovery mechanism needs to track the node's current address to | The discovery mechanism needs to track the node's current address to | |||
ensure that Discovery Responses always indicate the correct address. | ensure that Discovery Responses always indicate the correct address. | |||
If multiple Discovery Responders are found for the same objective, | If multiple discovery responders are found for the same objective, | |||
they SHOULD all be cached, unless this creates a resource shortage. | they SHOULD all be cached unless this creates a resource shortage. | |||
The method of choosing between multiple responders is an | The method of choosing between multiple responders is an | |||
implementation choice. This choice MUST be available to each ASA but | implementation choice. This choice MUST be available to each ASA, | |||
the GRASP implementation SHOULD provide a default choice. | but the GRASP implementation SHOULD provide a default choice. | |||
Because Discovery Responders will be cached in a finite cache, they | Because discovery responders will be cached in a finite cache, they | |||
might be deleted at any time. In this case, discovery will need to | might be deleted at any time. In this case, discovery will need to | |||
be repeated. If an ASA exits for any reason, its locator might still | be repeated. If an ASA exits for any reason, its locator might still | |||
be cached for some time, and attempts to connect to it will fail. | be cached for some time, and attempts to connect to it will fail. | |||
ASAs need to be robust in these circumstances. | ASAs need to be robust in these circumstances. | |||
2.5.4.4. Discovery Relaying | 2.5.4.4. Discovery Relaying | |||
A GRASP instance with multiple link-layer interfaces (typically | A GRASP instance with multiple link-layer interfaces (typically | |||
running in a router) MUST support discovery on all GRASP interfaces. | running in a router) MUST support discovery on all GRASP interfaces. | |||
We refer to this as a 'relaying instance'. | We refer to this as a 'relaying instance'. | |||
DULL Instances (Section 2.5.2) are always single-interface instances | DULL instances (Section 2.5.2) are always single-interface instances | |||
and therefore MUST NOT perform discovery relaying. | and therefore MUST NOT perform discovery relaying. | |||
If a relaying instance receives a Discovery message on a given | If a relaying instance receives a Discovery message on a given | |||
interface for a specific objective that it does not support and for | interface for a specific objective that it does not support and for | |||
which it has not previously cached a Discovery Responder, it MUST | which it has not previously cached a discovery responder, it MUST | |||
relay the query by re-issuing a new Discovery message as a link-local | relay the query by reissuing a new Discovery message as a link-local | |||
multicast on its other GRASP interfaces. | multicast on its other GRASP interfaces. | |||
The relayed discovery message MUST have the same Session ID and | The relayed Discovery message MUST have the same Session ID and | |||
Initiator field as the incoming (see Section 2.8.4). The Initiator | 'initiator' field as the incoming message (see Section 2.8.4). The | |||
IP address field is only used to allow for disambiguation of the | IP address in the 'initiator' field is only used to disambiguate the | |||
Session ID and is never used to address Response packets. Response | Session ID and is never used to address Response packets. Response | |||
packets are sent back to the relaying instance, not the original | packets are sent back to the relaying instance, not the original | |||
initiator. | initiator. | |||
The M_DISCOVERY message does not encode the transport address of the | The M_DISCOVERY message does not encode the transport address of the | |||
originator or relay. Response packets must therefore be sent to the | originator or relay. Response packets must therefore be sent to the | |||
transport layer address of the connection on which the M_DISCOVERY | transport-layer address of the connection on which the M_DISCOVERY | |||
message was received. If the M_DISCOVERY was relayed via a reliable | message was received. If the M_DISCOVERY was relayed via a reliable | |||
hop-by-hop transport connection, the response is simply sent back via | hop-by-hop transport connection, the response is simply sent back via | |||
the same connection. | the same connection. | |||
If the M_DISCOVERY was relayed via link-local (eg: UDP) multicast, | If the M_DISCOVERY was relayed via link-local (e.g., UDP) multicast, | |||
the response is sent back via a reliable hop-by-hop transport | the response is sent back via a reliable hop-by-hop transport | |||
connection with the same port number as the source port of the link- | connection with the same port number as the source port of the link- | |||
local multicast. Therefore, if link-local multicast is used and | local multicast. Therefore, if link-local multicast is used and | |||
M_RESPONSE messages are required (which is the case in almost all | M_RESPONSE messages are required (which is the case in almost all | |||
GRASP instances except for the limited use of DULL instances in the | GRASP instances except for the limited use of DULL instances in the | |||
ANI), GRASP needs to be able to bind to one port number on UDP from | ANI), GRASP needs to be able to bind to one port number on UDP from | |||
which to originate the link-local multicast M_DISCOVERY messages and | which to originate the link-local multicast M_DISCOVERY messages and | |||
the same port number on the reliable hop-by-hop transport (eg: TCP by | the same port number on the reliable hop-by-hop transport (e.g., TCP | |||
default) to be able to respond to transport connections from | by default) to be able to respond to transport connections from | |||
responders that want to send M_RESPONSE messages back. Note that | responders that want to send M_RESPONSE messages back. Note that | |||
this port does not need to be the GRASP_LISTEN_PORT. | this port does not need to be the GRASP_LISTEN_PORT. | |||
The relaying instance MUST decrement the loop count within the | The relaying instance MUST decrement the loop count within the | |||
objective, and MUST NOT relay the Discovery message if the result is | objective, and MUST NOT relay the Discovery message if the result is | |||
zero. Also, it MUST limit the total rate at which it relays | zero. Also, it MUST limit the total rate at which it relays | |||
discovery messages to a reasonable value, in order to mitigate | Discovery messages to a reasonable value in order to mitigate | |||
possible denial of service attacks. For example, the rate limit | possible denial-of-service attacks. For example, the rate limit | |||
could be set to a small multiple of the observed rate of discovery | could be set to a small multiple of the observed rate of Discovery | |||
messages during normal operation. The relaying instance MUST cache | messages during normal operation. The relaying instance MUST cache | |||
the Session ID value and initiator address of each relayed Discovery | the Session ID value and initiator address of each relayed Discovery | |||
message until any Discovery Responses have arrived or the discovery | message until any Discovery Responses have arrived or the discovery | |||
process has timed out. To prevent loops, it MUST NOT relay a | process has timed out. To prevent loops, it MUST NOT relay a | |||
Discovery message which carries a given cached Session ID and | Discovery message that carries a given cached Session ID and | |||
initiator address more than once. These precautions avoid discovery | initiator address more than once. These precautions avoid discovery | |||
loops and mitigate potential overload. | loops and mitigate potential overload. | |||
Since the relay device is unaware of the timeout set by the original | Since the relay device is unaware of the timeout set by the original | |||
initiator it SHOULD set a suitable timeout for the relayed discovery. | initiator, it SHOULD set a suitable timeout for the relayed Discovery | |||
A suggested value is 100 milliseconds multiplied by the remaining | message. A suggested value is 100 milliseconds multiplied by the | |||
loop count. | remaining loop count. | |||
The discovery results received by the relaying instance MUST in turn | The discovery results received by the relaying instance MUST in turn | |||
be sent as a Discovery Response message to the Discovery message that | be sent as a Discovery Response message to the Discovery message that | |||
caused the relay action. | caused the relay action. | |||
2.5.4.5. Rapid Mode (Discovery with Negotiation or Synchronization ) | 2.5.4.5. Rapid Mode (Discovery with Negotiation or Synchronization) | |||
A Discovery message MAY include an Objective option. This allows a | A Discovery message MAY include an objective option. This allows a | |||
rapid mode of negotiation (Section 2.5.5.1) or synchronization | rapid mode of negotiation (Section 2.5.5.1) or synchronization | |||
(Section 2.5.6.3). Rapid mode is currently limited to a single | (Section 2.5.6.3). Rapid mode is currently limited to a single | |||
objective for simplicity of design and implementation. A possible | objective for simplicity of design and implementation. A possible | |||
future extension is to allow multiple objectives in rapid mode for | future extension is to allow multiple objectives in rapid mode for | |||
greater efficiency. | greater efficiency. | |||
2.5.5. Negotiation Procedures | 2.5.5. Negotiation Procedures | |||
A negotiation initiator opens a transport connection to a counterpart | A negotiation initiator opens a transport connection to a counterpart | |||
ASA using the address, protocol and port obtained during discovery. | ASA using the address, protocol, and port obtained during discovery. | |||
It then sends a negotiation request (using M_REQ_NEG) to the | It then sends a negotiation request (using M_REQ_NEG) to the | |||
counterpart, including a specific negotiation objective. It may | counterpart, including a specific negotiation objective. It may | |||
request the negotiation counterpart to make a specific configuration. | request the negotiation counterpart to make a specific configuration. | |||
Alternatively, it may request a certain simulation or forecast result | Alternatively, it may request a certain simulation or forecast result | |||
by sending a dry run configuration. The details, including the | by sending a dry-run configuration. The details, including the | |||
distinction between a dry run and a live configuration change, will | distinction between a dry run and a live configuration change, will | |||
be defined separately for each type of negotiation objective. Any | be defined separately for each type of negotiation objective. Any | |||
state associated with a dry run operation, such as temporarily | state associated with a dry-run operation, such as temporarily | |||
reserving a resource for subsequent use in a live run, is entirely a | reserving a resource for subsequent use in a live run, is entirely a | |||
matter for the designer of the ASA concerned. | matter for the designer of the ASA concerned. | |||
Each negotiation session as a whole is subject to a timeout (default | Each negotiation session as a whole is subject to a timeout (default | |||
GRASP_DEF_TIMEOUT milliseconds, Section 2.6), initialised when the | GRASP_DEF_TIMEOUT milliseconds, Section 2.6), initialized when the | |||
request is sent (see Section 2.8.6). If no reply message of any kind | request is sent (see Section 2.8.6). If no reply message of any kind | |||
is received within the timeout, the negotiation request MAY be | is received within the timeout, the negotiation request MAY be | |||
repeated, with a newly generated Session ID (Section 2.7). An | repeated with a newly generated Session ID (Section 2.7). An | |||
exponential backoff SHOULD be used for subsequent repetitions. The | exponential backoff SHOULD be used for subsequent repetitions. The | |||
details of the backoff algorithm will depend on the use case for the | details of the backoff algorithm will depend on the use case for the | |||
objective concerned. | objective concerned. | |||
If the counterpart can immediately apply the requested configuration, | If the counterpart can immediately apply the requested configuration, | |||
it will give an immediate positive (O_ACCEPT) answer (using M_END). | it will give an immediate positive (O_ACCEPT) answer using the | |||
This will end the negotiation phase immediately. Otherwise, it will | Negotiation End (M_END) message. This will end the negotiation phase | |||
negotiate (using M_NEGOTIATE). It will reply with a proposed | immediately. Otherwise, it will negotiate (using M_NEGOTIATE). It | |||
alternative configuration that it can apply (typically, a | will reply with a proposed alternative configuration that it can | |||
configuration that uses fewer resources than requested by the | apply (typically, a configuration that uses fewer resources than | |||
negotiation initiator). This will start a bi-directional negotiation | requested by the negotiation initiator). This will start a | |||
(using M_NEGOTIATE) to reach a compromise between the two ASAs. | bidirectional negotiation using the Negotiate (M_NEGOTIATE) message | |||
to reach a compromise between the two ASAs. | ||||
The negotiation procedure is ended when one of the negotiation peers | The negotiation procedure is ended when one of the negotiation peers | |||
sends a Negotiation Ending (M_END) message, which contains an accept | sends a Negotiation End (M_END) message, which contains an Accept | |||
(O_ACCEPT) or decline (O_DECLINE) option and does not need a response | (O_ACCEPT) or Decline (O_DECLINE) option and does not need a response | |||
from the negotiation peer. Negotiation may also end in failure | from the negotiation peer. Negotiation may also end in failure | |||
(equivalent to a decline) if a timeout is exceeded or a loop count is | (equivalent to a decline) if a timeout is exceeded or a loop count is | |||
exceeded. When the procedure ends for whatever reason, the transport | exceeded. When the procedure ends for whatever reason, the transport | |||
connection SHOULD be closed. A transport session failure is treated | connection SHOULD be closed. A transport session failure is treated | |||
as a negotiation failure. | as a negotiation failure. | |||
A negotiation procedure concerns one objective and one counterpart. | A negotiation procedure concerns one objective and one counterpart. | |||
Both the initiator and the counterpart may take part in simultaneous | Both the initiator and the counterpart may take part in simultaneous | |||
negotiations with various other ASAs, or in simultaneous negotiations | negotiations with various other ASAs or in simultaneous negotiations | |||
about different objectives. Thus, GRASP is expected to be used in a | about different objectives. Thus, GRASP is expected to be used in a | |||
multi-threaded mode or its logical equivalent. Certain negotiation | multithreaded mode or its logical equivalent. Certain negotiation | |||
objectives may have restrictions on multi-threading, for example to | objectives may have restrictions on multithreading, for example to | |||
avoid over-allocating resources. | avoid over-allocating resources. | |||
Some configuration actions, for example wavelength switching in | Some configuration actions, for example, wavelength switching in | |||
optical networks, might take considerable time to execute. The ASA | optical networks, might take considerable time to execute. The ASA | |||
concerned needs to allow for this by design, but GRASP does allow for | concerned needs to allow for this by design, but GRASP does allow for | |||
a peer to insert latency in a negotiation process if necessary | a peer to insert latency in a negotiation process if necessary | |||
(Section 2.8.9, M_WAIT). | (Section 2.8.9, M_WAIT). | |||
2.5.5.1. Rapid Mode (Discovery/Negotiation Linkage) | 2.5.5.1. Rapid Mode (Discovery/Negotiation Linkage) | |||
A Discovery message MAY include a Negotiation Objective option. In | A Discovery message MAY include a Negotiation Objective option. In | |||
this case it is as if the initiator sent the sequence M_DISCOVERY, | this case, it is as if the initiator sent the sequence M_DISCOVERY | |||
immediately followed by M_REQ_NEG. This has implications for the | immediately followed by M_REQ_NEG. This has implications for the | |||
construction of the GRASP core, as it must carefully pass the | construction of the GRASP core, as it must carefully pass the | |||
contents of the Negotiation Objective option to the ASA so that it | contents of the Negotiation Objective option to the ASA so that it | |||
may evaluate the objective directly. When a Negotiation Objective | may evaluate the objective directly. When a Negotiation Objective | |||
option is present the ASA replies with an M_NEGOTIATE message (or | option is present, the ASA replies with an M_NEGOTIATE message (or | |||
M_END with O_ACCEPT if it is immediately satisfied with the | M_END with O_ACCEPT if it is immediately satisfied with the proposal) | |||
proposal), rather than with an M_RESPONSE. However, if the recipient | rather than with an M_RESPONSE. However, if the recipient node does | |||
node does not support rapid mode, discovery will continue normally. | not support rapid mode, discovery will continue normally. | |||
It is possible that a Discovery Response will arrive from a responder | It is possible that a Discovery Response will arrive from a responder | |||
that does not support rapid mode, before such a Negotiation message | that does not support rapid mode before such a Negotiation message | |||
arrives. In this case, rapid mode will not occur. | arrives. In this case, rapid mode will not occur. | |||
This rapid mode could reduce the interactions between nodes so that a | This rapid mode could reduce the interactions between nodes so that a | |||
higher efficiency could be achieved. However, a network in which | higher efficiency could be achieved. However, a network in which | |||
some nodes support rapid mode and others do not will have complex | some nodes support rapid mode and others do not will have complex | |||
timing-dependent behaviors. Therefore, the rapid negotiation | timing-dependent behaviors. Therefore, the rapid negotiation | |||
function SHOULD be disabled by default. | function SHOULD be disabled by default. | |||
2.5.6. Synchronization and Flooding Procedures | 2.5.6. Synchronization and Flooding Procedures | |||
2.5.6.1. Unicast Synchronization | 2.5.6.1. Unicast Synchronization | |||
A synchronization initiator opens a transport connection to a | A synchronization initiator opens a transport connection to a | |||
counterpart ASA using the address, protocol and port obtained during | counterpart ASA using the address, protocol, and port obtained during | |||
discovery. It then sends a synchronization request (using M_REQ_SYN) | discovery. It then sends a Request Synchronization message | |||
to the counterpart, including a specific synchronization objective. | (M_REQ_SYN, Section 2.8.6) to the counterpart, including a specific | |||
The counterpart responds with a Synchronization message (M_SYNCH, | synchronization objective. The counterpart responds with a | |||
Section 2.8.10) containing the current value of the requested | Synchronization message (M_SYNCH, Section 2.8.10) containing the | |||
synchronization objective. No further messages are needed and the | current value of the requested synchronization objective. No further | |||
transport connection SHOULD be closed. A transport session failure | messages are needed, and the transport connection SHOULD be closed. | |||
is treated as a synchronization failure. | A transport session failure is treated as a synchronization failure. | |||
If no reply message of any kind is received within a given timeout | If no reply message of any kind is received within a given timeout | |||
(default GRASP_DEF_TIMEOUT milliseconds, Section 2.6), the | (default GRASP_DEF_TIMEOUT milliseconds, Section 2.6), the | |||
synchronization request MAY be repeated, with a newly generated | synchronization request MAY be repeated with a newly generated | |||
Session ID (Section 2.7). An exponential backoff SHOULD be used for | Session ID (Section 2.7). An exponential backoff SHOULD be used for | |||
subsequent repetitions. The details of the backoff algorithm will | subsequent repetitions. The details of the backoff algorithm will | |||
depend on the use case for the objective concerned. | depend on the use case for the objective concerned. | |||
2.5.6.2. Flooding | 2.5.6.2. Flooding | |||
In the case just described, the message exchange is unicast and | In the case just described, the message exchange is unicast and | |||
concerns only one synchronization objective. For large groups of | concerns only one synchronization objective. For large groups of | |||
nodes requiring the same data, synchronization flooding is available. | nodes requiring the same data, synchronization flooding is available. | |||
For this, a flooding initiator MAY send an unsolicited Flood | For this, a flooding initiator MAY send an unsolicited Flood | |||
Synchronization message containing one or more Synchronization | Synchronization message (Section 2.8.11) containing one or more | |||
Objective option(s), if and only if the specification of those | Synchronization Objective option(s), if and only if the specification | |||
objectives permits it. This is sent as a multicast message to the | of those objectives permits it. This is sent as a multicast message | |||
ALL_GRASP_NEIGHBORS multicast address (Section 2.6). | to the ALL_GRASP_NEIGHBORS multicast address (Section 2.6). | |||
Receiving flood multicasts is a function of the GRASP core, as in the | Receiving flood multicasts is a function of the GRASP core, as in the | |||
case of discovery multicasts (Section 2.5.4.3). | case of discovery multicasts (Section 2.5.4.3). | |||
To ensure that flooding does not result in a loop, the originator of | To ensure that flooding does not result in a loop, the originator of | |||
the Flood Synchronization message MUST set the loop count in the | the Flood Synchronization message MUST set the loop count in the | |||
objectives to a suitable value (the default is GRASP_DEF_LOOPCT). | objectives to a suitable value (the default is GRASP_DEF_LOOPCT). | |||
Also, a suitable mechanism is needed to avoid excessive multicast | Also, a suitable mechanism is needed to avoid excessive multicast | |||
traffic. This mechanism MUST be defined as part of the specification | traffic. This mechanism MUST be defined as part of the specification | |||
of the synchronization objective(s) concerned. It might be a simple | of the synchronization objective(s) concerned. It might be a simple | |||
rate limit or a more complex mechanism such as the Trickle algorithm | rate limit or a more complex mechanism such as the Trickle algorithm | |||
[RFC6206]. | [RFC6206]. | |||
A GRASP device with multiple link-layer interfaces (typically a | A GRASP device with multiple link-layer interfaces (typically a | |||
router) MUST support synchronization flooding on all GRASP | router) MUST support synchronization flooding on all GRASP | |||
interfaces. If it receives a multicast Flood Synchronization message | interfaces. If it receives a multicast Flood Synchronization message | |||
on a given interface, it MUST relay it by re-issuing a Flood | on a given interface, it MUST relay it by reissuing a Flood | |||
Synchronization message as a link-local multicast on its other GRASP | Synchronization message as a link-local multicast on its other GRASP | |||
interfaces. The relayed message MUST have the same Session ID as the | interfaces. The relayed message MUST have the same Session ID as the | |||
incoming message and MUST be tagged with the IP address of its | incoming message and MUST be tagged with the IP address of its | |||
original initiator. | original initiator. | |||
Link-layer Flooding is supported by GRASP by setting the loop count | Link-layer flooding is supported by GRASP by setting the loop count | |||
to 1, and sending with a link-local source address. Floods with | to 1 and sending with a link-local source address. Floods with link- | |||
link-local source addresses and a loop count other than 1 are | local source addresses and a loop count other than 1 are invalid, and | |||
invalid, and such messages MUST be discarded. | such messages MUST be discarded. | |||
The relaying device MUST decrement the loop count within the first | The relaying device MUST decrement the loop count within the first | |||
objective, and MUST NOT relay the Flood Synchronization message if | objective and MUST NOT relay the Flood Synchronization message if the | |||
the result is zero. Also, it MUST limit the total rate at which it | result is zero. Also, it MUST limit the total rate at which it | |||
relays Flood Synchronization messages to a reasonable value, in order | relays Flood Synchronization messages to a reasonable value, in order | |||
to mitigate possible denial of service attacks. For example, the | to mitigate possible denial-of-service attacks. For example, the | |||
rate limit could be set to a small multiple of the observed rate of | rate limit could be set to a small multiple of the observed rate of | |||
flood messages during normal operation. The relaying device MUST | flood messages during normal operation. The relaying device MUST | |||
cache the Session ID value and initiator address of each relayed | cache the Session ID value and initiator address of each relayed | |||
Flood Synchronization message for a time not less than twice | Flood Synchronization message for a time not less than twice | |||
GRASP_DEF_TIMEOUT milliseconds. To prevent loops, it MUST NOT relay | GRASP_DEF_TIMEOUT milliseconds. To prevent loops, it MUST NOT relay | |||
a Flood Synchronization message which carries a given cached Session | a Flood Synchronization message that carries a given cached Session | |||
ID and initiator address more than once. These precautions avoid | ID and initiator address more than once. These precautions avoid | |||
synchronization loops and mitigate potential overload. | synchronization loops and mitigate potential overload. | |||
Note that this mechanism is unreliable in the case of sleeping nodes, | Note that this mechanism is unreliable in the case of sleeping nodes, | |||
or new nodes that join the network, or nodes that rejoin the network | or new nodes that join the network, or nodes that rejoin the network | |||
after a fault. An ASA that initiates a flood SHOULD repeat the flood | after a fault. An ASA that initiates a flood SHOULD repeat the flood | |||
at a suitable frequency, which MUST be consistent with the | at a suitable frequency, which MUST be consistent with the | |||
recommendations in [RFC8085] for low data-volume multicast. The ASA | recommendations in [RFC8085] for low data-volume multicast. The ASA | |||
SHOULD also act as a synchronization responder for the objective(s) | SHOULD also act as a synchronization responder for the objective(s) | |||
concerned. Thus nodes that require an objective subject to flooding | concerned. Thus nodes that require an objective subject to flooding | |||
can either wait for the next flood or request unicast synchronization | can either wait for the next flood or request unicast synchronization | |||
for that objective. | for that objective. | |||
The multicast messages for synchronization flooding are subject to | The multicast messages for synchronization flooding are subject to | |||
the security rules in Section 2.5.1. In practice this means that | the security rules in Section 2.5.1. In practice, this means that | |||
they MUST NOT be transmitted and MUST be ignored on receipt unless | they MUST NOT be transmitted and MUST be ignored on receipt unless | |||
there is an operational ACP or equivalent strong security in place. | there is an operational ACP or equivalent strong security in place. | |||
However, because of the security weakness of link-local multicast | However, because of the security weakness of link-local multicast | |||
(Section 4), synchronization objectives that are flooded SHOULD NOT | (Section 3), synchronization objectives that are flooded SHOULD NOT | |||
contain unencrypted private information and SHOULD be validated by | contain unencrypted private information and SHOULD be validated by | |||
the recipient ASA. | the recipient ASA. | |||
2.5.6.3. Rapid Mode (Discovery/Synchronization Linkage) | 2.5.6.3. Rapid Mode (Discovery/Synchronization Linkage) | |||
A Discovery message MAY include a Synchronization Objective option. | A Discovery message MAY include a Synchronization Objective option. | |||
In this case the Discovery message also acts as a Request | In this case, the Discovery message also acts as a Request | |||
Synchronization message to indicate to the Discovery Responder that | Synchronization message to indicate to the discovery responder that | |||
it could directly reply to the Discovery Initiator with a | it could directly reply to the discovery initiator with a | |||
Synchronization message Section 2.8.10 with synchronization data for | Synchronization message (Section 2.8.10) with synchronization data | |||
rapid processing, if the discovery target supports the corresponding | for rapid processing, if the discovery target supports the | |||
synchronization objective. The design implications are similar to | corresponding synchronization objective. The design implications are | |||
those discussed in Section 2.5.5.1. | similar to those discussed in Section 2.5.5.1. | |||
It is possible that a Discovery Response will arrive from a responder | It is possible that a Discovery Response will arrive from a responder | |||
that does not support rapid mode, before such a Synchronization | that does not support rapid mode before such a Synchronization | |||
message arrives. In this case, rapid mode will not occur. | message arrives. In this case, rapid mode will not occur. | |||
This rapid mode could reduce the interactions between nodes so that a | This rapid mode could reduce the interactions between nodes so that a | |||
higher efficiency could be achieved. However, a network in which | higher efficiency could be achieved. However, a network in which | |||
some nodes support rapid mode and others do not will have complex | some nodes support rapid mode and others do not will have complex | |||
timing-dependent behaviors. Therefore, the rapid synchronization | timing-dependent behaviors. Therefore, the rapid synchronization | |||
function SHOULD be configured off by default and MAY be configured on | function SHOULD be configured off by default and MAY be configured on | |||
or off by Intent. | or off by Intent. | |||
2.6. GRASP Constants | 2.6. GRASP Constants | |||
o ALL_GRASP_NEIGHBORS | ALL_GRASP_NEIGHBORS | |||
A link-local scope multicast address used by a GRASP-enabled | A link-local scope multicast address used by a GRASP-enabled | |||
device to discover GRASP-enabled neighbor (i.e., on-link) devices. | device to discover GRASP-enabled neighbor (i.e., on-link) devices. | |||
All devices that support GRASP are members of this multicast | All devices that support GRASP are members of this multicast | |||
group. | group. | |||
* IPv6 multicast address: TBD1 | * IPv6 multicast address: ff02::13 | |||
* IPv4 multicast address: TBD2 | ||||
o GRASP_LISTEN_PORT (TBD3) | * IPv4 multicast address: 224.0.0.119 | |||
GRASP_LISTEN_PORT (7017) | ||||
A well-known UDP user port that every GRASP-enabled network device | A well-known UDP user port that every GRASP-enabled network device | |||
MUST listen to for link-local multicasts when UDP is used for | MUST listen to for link-local multicasts when UDP is used for | |||
M_DISCOVERY or M_FLOOD messages in the GRASP instance This user | M_DISCOVERY or M_FLOOD messages in the GRASP instance. This user | |||
port MAY also be used to listen for TCP or UDP unicast messages in | port MAY also be used to listen for TCP or UDP unicast messages in | |||
a simple implementation of GRASP (Section 2.5.3). | a simple implementation of GRASP (Section 2.5.3). | |||
o GRASP_DEF_TIMEOUT (60000 milliseconds) | GRASP_DEF_TIMEOUT (60000 milliseconds) | |||
The default timeout used to determine that an operation has failed | The default timeout used to determine that an operation has failed | |||
to complete. | to complete. | |||
o GRASP_DEF_LOOPCT (6) | GRASP_DEF_LOOPCT (6) | |||
The default loop count used to determine that a negotiation has | The default loop count used to determine that a negotiation has | |||
failed to complete, and to avoid looping messages. | failed to complete and to avoid looping messages. | |||
o GRASP_DEF_MAX_SIZE (2048) | ||||
GRASP_DEF_MAX_SIZE (2048) | ||||
The default maximum message size in bytes. | The default maximum message size in bytes. | |||
2.7. Session Identifier (Session ID) | 2.7. Session Identifier (Session ID) | |||
This is an up to 32-bit opaque value used to distinguish multiple | This is an up to 32-bit opaque value used to distinguish multiple | |||
sessions between the same two devices. A new Session ID MUST be | sessions between the same two devices. A new Session ID MUST be | |||
generated by the initiator for every new Discovery, Flood | generated by the initiator for every new Discovery, Flood | |||
Synchronization or Request message. All responses and follow-up | Synchronization, or Request message. All responses and follow-up | |||
messages in the same discovery, synchronization or negotiation | messages in the same discovery, synchronization, or negotiation | |||
procedure MUST carry the same Session ID. | procedure MUST carry the same Session ID. | |||
The Session ID SHOULD have a very low collision rate locally. It | The Session ID SHOULD have a very low collision rate locally. It | |||
MUST be generated by a pseudo-random number generator (PRNG) using a | MUST be generated by a pseudorandom number generator (PRNG) using a | |||
locally generated seed which is unlikely to be used by any other | locally generated seed that is unlikely to be used by any other | |||
device in the same network. The PRNG SHOULD be cryptographically | device in the same network. The PRNG SHOULD be cryptographically | |||
strong [RFC4086]. When allocating a new Session ID, GRASP MUST check | strong [RFC4086]. When allocating a new Session ID, GRASP MUST check | |||
that the value is not already in use and SHOULD check that it has not | that the value is not already in use and SHOULD check that it has not | |||
been used recently, by consulting a cache of current and recent | been used recently by consulting a cache of current and recent | |||
sessions. In the unlikely event of a clash, GRASP MUST generate a | sessions. In the unlikely event of a clash, GRASP MUST generate a | |||
new value. | new value. | |||
However, there is a finite probability that two nodes might generate | However, there is a finite probability that two nodes might generate | |||
the same Session ID value. For that reason, when a Session ID is | the same Session ID value. For that reason, when a Session ID is | |||
communicated via GRASP, the receiving node MUST tag it with the | communicated via GRASP, the receiving node MUST tag it with the | |||
initiator's IP address to allow disambiguation. In the highly | initiator's IP address to allow disambiguation. In the highly | |||
unlikely event of two peers opening sessions with the same Session ID | unlikely event of two peers opening sessions with the same Session ID | |||
value, this tag will allow the two sessions to be distinguished. | value, this tag will allow the two sessions to be distinguished. | |||
Multicast GRASP messages and their responses, which may be relayed | Multicast GRASP messages and their responses, which may be relayed | |||
skipping to change at page 25, line 22 ¶ | skipping to change at line 1133 ¶ | |||
2.8.1. Message Overview | 2.8.1. Message Overview | |||
This section defines the GRASP message format and message types. | This section defines the GRASP message format and message types. | |||
Message types not listed here are reserved for future use. | Message types not listed here are reserved for future use. | |||
The messages currently defined are: | The messages currently defined are: | |||
Discovery and Discovery Response (M_DISCOVERY, M_RESPONSE). | Discovery and Discovery Response (M_DISCOVERY, M_RESPONSE). | |||
Request Negotiation, Negotiation, Confirm Waiting and Negotiation | Request Negotiation, Negotiation, Confirm Waiting, and Negotiation | |||
End (M_REQ_NEG, M_NEGOTIATE, M_WAIT, M_END). | End (M_REQ_NEG, M_NEGOTIATE, M_WAIT, M_END). | |||
Request Synchronization, Synchronization, and Flood | Request Synchronization, Synchronization, and Flood | |||
Synchronization (M_REQ_SYN, M_SYNCH, M_FLOOD. | Synchronization (M_REQ_SYN, M_SYNCH, M_FLOOD). | |||
No Operation and Invalid (M_NOOP, M_INVALID). | No Operation and Invalid (M_NOOP, M_INVALID). | |||
2.8.2. GRASP Message Format | 2.8.2. GRASP Message Format | |||
GRASP messages share an identical header format and a variable format | GRASP messages share an identical header format and a variable format | |||
area for options. GRASP message headers and options are transmitted | area for options. GRASP message headers and options are transmitted | |||
in Concise Binary Object Representation (CBOR) [RFC7049]. In this | in Concise Binary Object Representation (CBOR) [RFC8949]. In this | |||
specification, they are described using CBOR data definition language | specification, they are described using Concise Data Definition | |||
(CDDL) [I-D.greevenbosch-appsawg-cbor-cddl]. Fragmentary CDDL is | Language (CDDL) [RFC8610]. Fragmentary CDDL is used to describe each | |||
used to describe each item in this section. A complete and normative | item in this section. A complete and normative CDDL specification of | |||
CDDL specification of GRASP is given in Section 5, including | GRASP is given in Section 4, including constants such as message | |||
constants such as message types. | types. | |||
Every GRASP message, except the No Operation message, carries a | Every GRASP message, except the No Operation message, carries a | |||
Session ID (Section 2.7). Options are then presented serially in the | Session ID (Section 2.7). Options are then presented serially. | |||
options field. | ||||
In fragmentary CDDL, every GRASP message follows the pattern: | In fragmentary CDDL, every GRASP message follows the pattern: | |||
grasp-message = (message .within message-structure) / noop-message | grasp-message = (message .within message-structure) / noop-message | |||
message-structure = [MESSAGE_TYPE, session-id, ?initiator, | message-structure = [MESSAGE_TYPE, session-id, ?initiator, | |||
*grasp-option] | *grasp-option] | |||
MESSAGE_TYPE = 1..255 | MESSAGE_TYPE = 0..255 | |||
session-id = 0..4294967295 ;up to 32 bits | session-id = 0..4294967295 ; up to 32 bits | |||
grasp-option = any | grasp-option = any | |||
The MESSAGE_TYPE indicates the type of the message and thus defines | The MESSAGE_TYPE indicates the type of the message and thus defines | |||
the expected options. Any options received that are not consistent | the expected options. Any options received that are not consistent | |||
with the MESSAGE_TYPE SHOULD be silently discarded. | with the MESSAGE_TYPE SHOULD be silently discarded. | |||
The No Operation (noop) message is described in Section 2.8.13. | The No Operation (noop) message is described in Section 2.8.13. | |||
The various MESSAGE_TYPE values are defined in Section 5. | The various MESSAGE_TYPE values are defined in Section 4. | |||
All other message elements are described below and formally defined | All other message elements are described below and formally defined | |||
in Section 5. | in Section 4. | |||
If an unrecognized MESSAGE_TYPE is received in a unicast message, an | If an unrecognized MESSAGE_TYPE is received in a unicast message, an | |||
Invalid message (Section 2.8.12) MAY be returned. Otherwise the | Invalid message (Section 2.8.12) MAY be returned. Otherwise, the | |||
message MAY be logged and MUST be discarded. If an unrecognized | message MAY be logged and MUST be discarded. If an unrecognized | |||
MESSAGE_TYPE is received in a multicast message, it MAY be logged and | MESSAGE_TYPE is received in a multicast message, it MAY be logged and | |||
MUST be silently discarded. | MUST be silently discarded. | |||
2.8.3. Message Size | 2.8.3. Message Size | |||
GRASP nodes MUST be able to receive unicast messages of at least | GRASP nodes MUST be able to receive unicast messages of at least | |||
GRASP_DEF_MAX_SIZE bytes. GRASP nodes MUST NOT send unicast messages | GRASP_DEF_MAX_SIZE bytes. GRASP nodes MUST NOT send unicast messages | |||
longer than GRASP_DEF_MAX_SIZE bytes unless a longer size is | longer than GRASP_DEF_MAX_SIZE bytes unless a longer size is | |||
explicitly allowed for the objective concerned. For example, GRASP | explicitly allowed for the objective concerned. For example, GRASP | |||
negotiation itself could be used to agree on a longer message size. | negotiation itself could be used to agree on a longer message size. | |||
The message parser used by GRASP should be configured to know about | The message parser used by GRASP should be configured to know about | |||
the GRASP_DEF_MAX_SIZE, or any larger negotiated message size, so | the GRASP_DEF_MAX_SIZE, or any larger negotiated message size, so | |||
that it may defend against overly long messages. | that it may defend against overly long messages. | |||
The maximum size of multicast messages (M_DISCOVERY and M_FLOOD) | The maximum size of multicast messages (M_DISCOVERY and M_FLOOD) | |||
depends on the link layer technology or link adaptation layer in use. | depends on the link-layer technology or the link-adaptation layer in | |||
use. | ||||
2.8.4. Discovery Message | 2.8.4. Discovery Message | |||
In fragmentary CDDL, a Discovery message follows the pattern: | In fragmentary CDDL, a Discovery message follows the pattern: | |||
discovery-message = [M_DISCOVERY, session-id, initiator, objective] | discovery-message = [M_DISCOVERY, session-id, initiator, objective] | |||
A discovery initiator sends a Discovery message to initiate a | A discovery initiator sends a Discovery message to initiate a | |||
discovery process for a particular objective option. | discovery process for a particular objective option. | |||
The discovery initiator sends all Discovery messages via UDP to port | The discovery initiator sends all Discovery messages via UDP to port | |||
GRASP_LISTEN_PORT at the link-local ALL_GRASP_NEIGHBORS multicast | GRASP_LISTEN_PORT at the link-local ALL_GRASP_NEIGHBORS multicast | |||
address on each link-layer interface in use by GRASP. It then | address on each link-layer interface in use by GRASP. It then | |||
listens for unicast TCP responses on a given port, and stores the | listens for unicast TCP responses on a given port and stores the | |||
discovery results (including responding discovery objectives and | discovery results, including responding discovery objectives and | |||
corresponding unicast locators). | corresponding unicast locators. | |||
The listening port used for TCP MUST be the same port as used for | The listening port used for TCP MUST be the same port as used for | |||
sending the Discovery UDP multicast, on a given interface. In an | sending the Discovery UDP multicast, on a given interface. In an | |||
implementation with a single GRASP instance in a node this MAY be | implementation with a single GRASP instance in a node, this MAY be | |||
GRASP_LISTEN_PORT. To support multiple instances in the same node, | GRASP_LISTEN_PORT. To support multiple instances in the same node, | |||
the GRASP discovery mechanism in each instance needs to find, for | the GRASP discovery mechanism in each instance needs to find, for | |||
each interface, a dynamic port that it can bind to for both sending | each interface, a dynamic port that it can bind to for both sending | |||
UDP link-local multicast and listening for TCP, before initiating any | UDP link-local multicast and listening for TCP before initiating any | |||
discovery. | discovery. | |||
The 'initiator' field in the message is a globally unique IP address | The 'initiator' field in the message is a globally unique IP address | |||
of the initiator, for the sole purpose of disambiguating the Session | of the initiator for the sole purpose of disambiguating the Session | |||
ID in other nodes. If for some reason the initiator does not have a | ID in other nodes. If for some reason the initiator does not have a | |||
globally unique IP address, it MUST use a link-local address for this | globally unique IP address, it MUST use a link-local address that is | |||
purpose that is highly likely to be unique, for example using | highly likely to be unique for this purpose, for example, using | |||
[RFC7217]. Determination of a node's globally unique IP address is | [RFC7217]. Determination of a node's globally unique IP address is | |||
implementation-dependent. | implementation dependent. | |||
A Discovery message MUST include exactly one of the following: | A Discovery message MUST include exactly one of the following: | |||
o a discovery objective option (Section 2.10.1). Its loop count | * A Discovery Objective option (Section 2.10.1). Its loop count | |||
MUST be set to a suitable value to prevent discovery loops | MUST be set to a suitable value to prevent discovery loops | |||
(default value is GRASP_DEF_LOOPCT). If the discovery initiator | (default value is GRASP_DEF_LOOPCT). If the discovery initiator | |||
requires only on-link responses, the loop count MUST be set to 1. | requires only on-link responses, the loop count MUST be set to 1. | |||
o a negotiation objective option (Section 2.10.1). This is used | * A Negotiation Objective option (Section 2.10.1). This is used | |||
both for the purpose of discovery and to indicate to the discovery | both for the purpose of discovery and to indicate to the discovery | |||
target that it MAY directly reply to the discovery initiatior with | target that it MAY directly reply to the discovery initiator with | |||
a Negotiation message for rapid processing, if it could act as the | a Negotiation message for rapid processing, if it could act as the | |||
corresponding negotiation counterpart. The sender of such a | corresponding negotiation counterpart. The sender of such a | |||
Discovery message MUST initialize a negotiation timer and loop | Discovery message MUST initialize a negotiation timer and loop | |||
count in the same way as a Request Negotiation message | count in the same way as a Request Negotiation message | |||
(Section 2.8.6). | (Section 2.8.6). | |||
o a synchronization objective option (Section 2.10.1). This is used | * A Synchronization Objective option (Section 2.10.1). This is used | |||
both for the purpose of discovery and to indicate to the discovery | both for the purpose of discovery and to indicate to the discovery | |||
target that it MAY directly reply to the discovery initiator with | target that it MAY directly reply to the discovery initiator with | |||
a Synchronization message for rapid processing, if it could act as | a Synchronization message for rapid processing, if it could act as | |||
the corresponding synchronization counterpart. Its loop count | the corresponding synchronization counterpart. Its loop count | |||
MUST be set to a suitable value to prevent discovery loops | MUST be set to a suitable value to prevent discovery loops | |||
(default value is GRASP_DEF_LOOPCT). | (default value is GRASP_DEF_LOOPCT). | |||
As mentioned in Section 2.5.4.2, a Discovery message MAY be sent | As mentioned in Section 2.5.4.2, a Discovery message MAY be sent | |||
unicast to a peer node, which SHOULD then proceed exactly as if the | unicast to a peer node, which SHOULD then proceed exactly as if the | |||
message had been multicast. | message had been multicast. | |||
2.8.5. Discovery Response Message | 2.8.5. Discovery Response Message | |||
In fragmentary CDDL, a Discovery Response message follows the | In fragmentary CDDL, a Discovery Response message follows the | |||
pattern: | pattern: | |||
response-message = [M_RESPONSE, session-id, initiator, ttl, | response-message = [M_RESPONSE, session-id, initiator, ttl, | |||
(+locator-option // divert-option), ?objective)] | (+locator-option // divert-option), ?objective] | |||
ttl = 0..4294967295 ; in milliseconds | ttl = 0..4294967295 ; in milliseconds | |||
A node which receives a Discovery message SHOULD send a Discovery | A node that receives a Discovery message SHOULD send a Discovery | |||
Response message if and only if it can respond to the discovery. | Response message if and only if it can respond to the discovery. | |||
It MUST contain the same Session ID and initiator as the Discovery | It MUST contain the same Session ID and initiator as the Discovery | |||
message. | message. | |||
It MUST contain a time-to-live (ttl) for the validity of the | It MUST contain a time-to-live (ttl) for the validity of the | |||
response, given as a positive integer value in milliseconds. Zero | response, given as a positive integer value in milliseconds. Zero | |||
implies a value significantly greater than GRASP_DEF_TIMEOUT | implies a value significantly greater than GRASP_DEF_TIMEOUT | |||
milliseconds (Section 2.6). A suggested value is ten times that | milliseconds (Section 2.6). A suggested value is ten times that | |||
amount. | amount. | |||
skipping to change at page 28, line 48 ¶ | skipping to change at line 1297 ¶ | |||
In the case of a relayed Discovery message, the Discovery Response is | In the case of a relayed Discovery message, the Discovery Response is | |||
thus sent to the relay, not the original initiator. | thus sent to the relay, not the original initiator. | |||
In all cases, the transport session SHOULD be closed after sending | In all cases, the transport session SHOULD be closed after sending | |||
the Discovery Response. A transport session failure is treated as no | the Discovery Response. A transport session failure is treated as no | |||
response. | response. | |||
If the responding node supports the discovery objective of the | If the responding node supports the discovery objective of the | |||
discovery, it MUST include at least one kind of locator option | discovery, it MUST include at least one kind of locator option | |||
(Section 2.9.5) to indicate its own location. A sequence of multiple | (Section 2.9.5) to indicate its own location. A sequence of multiple | |||
kinds of locator options (e.g. IP address option and FQDN option) is | kinds of locator options (e.g., IP address option and FQDN option) is | |||
also valid. | also valid. | |||
If the responding node itself does not support the discovery | If the responding node itself does not support the discovery | |||
objective, but it knows the locator of the discovery objective, then | objective, but it knows the locator of the discovery objective, then | |||
it SHOULD respond to the discovery message with a divert option | it SHOULD respond to the Discovery message with a Divert option | |||
(Section 2.9.2) embedding a locator option or a combination of | (Section 2.9.2) embedding a locator option or a combination of | |||
multiple kinds of locator options which indicate the locator(s) of | multiple kinds of locator options that indicate the locator(s) of the | |||
the discovery objective. | discovery objective. | |||
More details on the processing of Discovery Responses are given in | More details on the processing of Discovery Responses are given in | |||
Section 2.5.4. | Section 2.5.4. | |||
2.8.6. Request Messages | 2.8.6. Request Messages | |||
In fragmentary CDDL, Request Negotiation and Request Synchronization | In fragmentary CDDL, Request Negotiation and Request Synchronization | |||
messages follow the patterns: | messages follow the patterns: | |||
request-negotiation-message = [M_REQ_NEG, session-id, objective] | request-negotiation-message = [M_REQ_NEG, session-id, objective] | |||
skipping to change at page 30, line 13 ¶ | skipping to change at line 1354 ¶ | |||
GRASP_DEF_LOOPCT. | GRASP_DEF_LOOPCT. | |||
If a node receives a Request message for an objective for which no | If a node receives a Request message for an objective for which no | |||
ASA is currently listening, it MUST immediately close the relevant | ASA is currently listening, it MUST immediately close the relevant | |||
socket to indicate this to the initiator. This is to avoid | socket to indicate this to the initiator. This is to avoid | |||
unnecessary timeouts if, for example, an ASA exits prematurely but | unnecessary timeouts if, for example, an ASA exits prematurely but | |||
the GRASP core is listening on its behalf. | the GRASP core is listening on its behalf. | |||
To avoid the highly unlikely race condition in which two nodes | To avoid the highly unlikely race condition in which two nodes | |||
simultaneously request sessions with each other using the same | simultaneously request sessions with each other using the same | |||
Session ID (Section 2.7), when a node receives a Request message, it | Session ID (Section 2.7), a node MUST verify that the received | |||
MUST verify that the received Session ID is not already locally | Session ID is not already locally active when it receives a Request | |||
active. In case of a clash, it MUST discard the Request message, in | message. In case of a clash, it MUST discard the Request message, in | |||
which case the initiator will detect a timeout. | which case the initiator will detect a timeout. | |||
2.8.7. Negotiation Message | 2.8.7. Negotiation Message | |||
In fragmentary CDDL, a Negotiation message follows the pattern: | In fragmentary CDDL, a Negotiation message follows the pattern: | |||
negotiate-message = [M_NEGOTIATE, session-id, objective] | negotiation-message = [M_NEGOTIATE, session-id, objective] | |||
A negotiation counterpart sends a Negotiation message in response to | A negotiation counterpart sends a Negotiation message in response to | |||
a Request Negotiation message, a Negotiation message, or a Discovery | a Request Negotiation message, a Negotiation message, or a Discovery | |||
message in Rapid Mode. A negotiation process MAY include multiple | message in rapid mode. A negotiation process MAY include multiple | |||
steps. | steps. | |||
The Negotiation message MUST include the relevant Negotiation | The Negotiation message MUST include the relevant Negotiation | |||
Objective option, with its value updated according to progress in the | Objective option, with its value updated according to progress in the | |||
negotiation. The sender MUST decrement the loop count by 1. If the | negotiation. The sender MUST decrement the loop count by 1. If the | |||
loop count becomes zero the message MUST NOT be sent. In this case | loop count becomes zero, the message MUST NOT be sent. In this case, | |||
the negotiation session has failed and will time out. | the negotiation session has failed and will time out. | |||
2.8.8. Negotiation End Message | 2.8.8. Negotiation End Message | |||
In fragmentary CDDL, a Negotiation End message follows the pattern: | In fragmentary CDDL, a Negotiation End message follows the pattern: | |||
end-message = [M_END, session-id, accept-option / decline-option] | end-message = [M_END, session-id, accept-option / decline-option] | |||
A negotiation counterpart sends an Negotiation End message to close | A negotiation counterpart sends a Negotiation End message to close | |||
the negotiation. It MUST contain either an accept or a decline | the negotiation. It MUST contain either an Accept option or a | |||
option, defined in Section 2.9.3 and Section 2.9.4. It could be sent | Decline option, defined in Section 2.9.3 and Section 2.9.4. It could | |||
either by the requesting node or the responding node. | be sent either by the requesting node or the responding node. | |||
2.8.9. Confirm Waiting Message | 2.8.9. Confirm Waiting Message | |||
In fragmentary CDDL, a Confirm Waiting message follows the pattern: | In fragmentary CDDL, a Confirm Waiting message follows the pattern: | |||
wait-message = [M_WAIT, session-id, waiting-time] | wait-message = [M_WAIT, session-id, waiting-time] | |||
waiting-time = 0..4294967295 ; in milliseconds | waiting-time = 0..4294967295 ; in milliseconds | |||
A responding node sends a Confirm Waiting message to ask the | A responding node sends a Confirm Waiting message to ask the | |||
requesting node to wait for a further negotiation response. It might | requesting node to wait for a further negotiation response. It might | |||
be that the local process needs more time or that the negotiation | be that the local process needs more time or that the negotiation | |||
depends on another triggered negotiation. This message MUST NOT | depends on another triggered negotiation. This message MUST NOT | |||
include any other options. When received, the waiting time value | include any other options. When received, the waiting time value | |||
overwrites and restarts the current negotiation timer | overwrites and restarts the current negotiation timer | |||
(Section 2.8.6). | (Section 2.8.6). | |||
The responding node SHOULD send a Negotiation, Negotiation End or | The responding node SHOULD send a Negotiation, Negotiation End, or | |||
another Confirm Waiting message before the negotiation timer expires. | another Confirm Waiting message before the negotiation timer expires. | |||
If not, when the initiator's timer expires, the initiator MUST treat | If not, when the initiator's timer expires, the initiator MUST treat | |||
the negotiation procedure as failed. | the negotiation procedure as failed. | |||
2.8.10. Synchronization Message | 2.8.10. Synchronization Message | |||
In fragmentary CDDL, a Synchronization message follows the pattern: | In fragmentary CDDL, a Synchronization message follows the pattern: | |||
synch-message = [M_SYNCH, session-id, objective] | synch-message = [M_SYNCH, session-id, objective] | |||
A node which receives a Request Synchronization, or a Discovery | A node that receives a Request Synchronization, or a Discovery | |||
message in Rapid Mode, sends back a unicast Synchronization message | message in rapid mode, sends back a unicast Synchronization message | |||
with the synchronization data, in the form of a GRASP Option for the | with the synchronization data, in the form of a GRASP option for the | |||
specific synchronization objective present in the Request | specific synchronization objective present in the Request | |||
Synchronization. | Synchronization. | |||
2.8.11. Flood Synchronization Message | 2.8.11. Flood Synchronization Message | |||
In fragmentary CDDL, a Flood Synchronization message follows the | In fragmentary CDDL, a Flood Synchronization message follows the | |||
pattern: | pattern: | |||
flood-message = [M_FLOOD, session-id, initiator, ttl, | flood-message = [M_FLOOD, session-id, initiator, ttl, | |||
+[objective, (locator-option / [])]] | +[objective, (locator-option / [])]] | |||
ttl = 0..4294967295 ; in milliseconds | ttl = 0..4294967295 ; in milliseconds | |||
A node MAY initiate flooding by sending an unsolicited Flood | A node MAY initiate flooding by sending an unsolicited Flood | |||
Synchronization Message with synchronization data. This MAY be sent | Synchronization message with synchronization data. This MAY be sent | |||
to port GRASP_LISTEN_PORT at the link-local ALL_GRASP_NEIGHBORS | to port GRASP_LISTEN_PORT at the link-local ALL_GRASP_NEIGHBORS | |||
multicast address, in accordance with the rules in Section 2.5.6. | multicast address, in accordance with the rules in Section 2.5.6. | |||
The initiator address is provided, as described for Discovery | The initiator address is provided, as described for Discovery | |||
messages (Section 2.8.4), only to disambiguate the Session ID. | messages (Section 2.8.4), only to disambiguate the Session ID. | |||
The message MUST contain a time-to-live (ttl) for the validity of | The message MUST contain a time-to-live (ttl) for the validity of | |||
the contents, given as a positive integer value in milliseconds. | the contents, given as a positive integer value in milliseconds. | |||
There is no default; zero indicates an indefinite lifetime. | There is no default; zero indicates an indefinite lifetime. | |||
The synchronization data are in the form of GRASP Option(s) for | The synchronization data are in the form of GRASP option(s) for | |||
specific synchronization objective(s). The loop count(s) MUST be | specific synchronization objective(s). The loop count(s) MUST be | |||
set to a suitable value to prevent flood loops (default value is | set to a suitable value to prevent flood loops (default value is | |||
GRASP_DEF_LOOPCT). | GRASP_DEF_LOOPCT). | |||
Each objective option MAY be followed by a locator option | Each objective option MAY be followed by a locator option | |||
associated with the flooded objective. In its absence, an empty | (Section 2.9.5) associated with the flooded objective. In its | |||
option MUST be included to indicate a null locator. | absence, an empty option MUST be included to indicate a null | |||
locator. | ||||
A node that receives a Flood Synchronization message MUST cache the | A node that receives a Flood Synchronization message MUST cache the | |||
received objectives for use by local ASAs. Each cached objective | received objectives for use by local ASAs. Each cached objective | |||
MUST be tagged with the locator option sent with it, or with a null | MUST be tagged with the locator option sent with it, or with a null | |||
tag if an empty locator option was sent. If a subsequent Flood | tag if an empty locator option was sent. If a subsequent Flood | |||
Synchronization message carrying an objective with same name and the | Synchronization message carries an objective with the same name and | |||
same tag, the corresponding cached copy of the objective MUST be | the same tag, the corresponding cached copy of the objective MUST be | |||
overwritten. If a subsequent Flood Synchronization message carrying | overwritten. If a subsequent Flood Synchronization message carrying | |||
an objective with same name arrives with a different tag, a new | an objective with same name arrives with a different tag, a new | |||
cached entry MUST be created. | cached entry MUST be created. | |||
Note: the purpose of this mechanism is to allow the recipient of | Note: the purpose of this mechanism is to allow the recipient of | |||
flooded values to distinguish between different senders of the same | flooded values to distinguish between different senders of the same | |||
objective, and if necessary communicate with them using the locator, | objective, and if necessary communicate with them using the locator, | |||
protocol and port included in the locator option. Many objectives | protocol, and port included in the locator option. Many objectives | |||
will not need this mechanism, so they will be flooded with a null | will not need this mechanism, so they will be flooded with a null | |||
locator. | locator. | |||
Cached entries MUST be ignored or deleted after their lifetime | Cached entries MUST be ignored or deleted after their lifetime | |||
expires. | expires. | |||
2.8.12. Invalid Message | 2.8.12. Invalid Message | |||
In fragmentary CDDL, an Invalid message follows the pattern: | In fragmentary CDDL, an Invalid message follows the pattern: | |||
invalid-message = [M_INVALID, session-id, ?any] | invalid-message = [M_INVALID, session-id, ?any] | |||
This message MAY be sent by an implementation in response to an | This message MAY be sent by an implementation in response to an | |||
incoming unicast message that it considers invalid. The session-id | incoming unicast message that it considers invalid. The Session ID | |||
MUST be copied from the incoming message. The content SHOULD be | value MUST be copied from the incoming message. The content SHOULD | |||
diagnostic information such as a partial copy of the invalid message | be diagnostic information such as a partial copy of the invalid | |||
up to the maximum message size. An M_INVALID message MAY be silently | message up to the maximum message size. An M_INVALID message MAY be | |||
ignored by a recipient. However, it could be used in support of | silently ignored by a recipient. However, it could be used in | |||
extensibility, since it indicates that the remote node does not | support of extensibility, since it indicates that the remote node | |||
support a new or obsolete message or option. | does not support a new or obsolete message or option. | |||
An M_INVALID message MUST NOT be sent in response to an M_INVALID | An M_INVALID message MUST NOT be sent in response to an M_INVALID | |||
message. | message. | |||
2.8.13. No Operation Message | 2.8.13. No Operation Message | |||
In fragmentary CDDL, a No Operation message follows the pattern: | In fragmentary CDDL, a No Operation message follows the pattern: | |||
noop-message = [M_NOOP] | noop-message = [M_NOOP] | |||
skipping to change at page 33, line 23 ¶ | skipping to change at line 1507 ¶ | |||
a recipient. | a recipient. | |||
2.9. GRASP Options | 2.9. GRASP Options | |||
This section defines the GRASP options for the negotiation and | This section defines the GRASP options for the negotiation and | |||
synchronization protocol signaling. Additional options may be | synchronization protocol signaling. Additional options may be | |||
defined in the future. | defined in the future. | |||
2.9.1. Format of GRASP Options | 2.9.1. Format of GRASP Options | |||
GRASP options are CBOR objects that MUST start with an unsigned | GRASP options SHOULD be CBOR arrays that MUST start with an unsigned | |||
integer identifying the specific option type carried in this option. | integer identifying the specific option type carried in this option. | |||
These option types are formally defined in Section 5. Apart from | These option types are formally defined in Section 4. | |||
that the only format requirement is that each option MUST be a well- | ||||
formed CBOR object. In general a CBOR array format is RECOMMENDED to | ||||
limit overhead. | ||||
GRASP options may be defined to include encapsulated GRASP options. | GRASP options may be defined to include encapsulated GRASP options. | |||
2.9.2. Divert Option | 2.9.2. Divert Option | |||
The Divert option is used to redirect a GRASP request to another | The Divert option is used to redirect a GRASP request to another | |||
node, which may be more appropriate for the intended negotiation or | node, which may be more appropriate for the intended negotiation or | |||
synchronization. It may redirect to an entity that is known as a | synchronization. It may redirect to an entity that is known as a | |||
specific negotiation or synchronization counterpart (on-link or off- | specific negotiation or synchronization counterpart (on-link or off- | |||
link) or a default gateway. The divert option MUST only be | link) or a default gateway. The Divert option MUST only be | |||
encapsulated in Discovery Response messages. If found elsewhere, it | encapsulated in Discovery Response messages. If found elsewhere, it | |||
SHOULD be silently ignored. | SHOULD be silently ignored. | |||
A discovery initiator MAY ignore a Divert option if it only requires | A discovery initiator MAY ignore a Divert option if it only requires | |||
direct discovery responses. | direct Discovery Responses. | |||
In fragmentary CDDL, the Divert option follows the pattern: | In fragmentary CDDL, the Divert option follows the pattern: | |||
divert-option = [O_DIVERT, +locator-option] | divert-option = [O_DIVERT, +locator-option] | |||
The embedded Locator Option(s) (Section 2.9.5) point to diverted | The embedded locator option(s) (Section 2.9.5) point to diverted | |||
destination target(s) in response to a Discovery message. | destination target(s) in response to a Discovery message. | |||
2.9.3. Accept Option | 2.9.3. Accept Option | |||
The accept option is used to indicate to the negotiation counterpart | The Accept option is used to indicate to the negotiation counterpart | |||
that the proposed negotiation content is accepted. | that the proposed negotiation content is accepted. | |||
The accept option MUST only be encapsulated in Negotiation End | The Accept option MUST only be encapsulated in Negotiation End | |||
messages. If found elsewhere, it SHOULD be silently ignored. | messages. If found elsewhere, it SHOULD be silently ignored. | |||
In fragmentary CDDL, the Accept option follows the pattern: | In fragmentary CDDL, the Accept option follows the pattern: | |||
accept-option = [O_ACCEPT] | accept-option = [O_ACCEPT] | |||
2.9.4. Decline Option | 2.9.4. Decline Option | |||
The decline option is used to indicate to the negotiation counterpart | The Decline option is used to indicate to the negotiation counterpart | |||
the proposed negotiation content is declined and end the negotiation | the proposed negotiation content is declined and to end the | |||
process. | negotiation process. | |||
The decline option MUST only be encapsulated in Negotiation End | The Decline option MUST only be encapsulated in Negotiation End | |||
messages. If found elsewhere, it SHOULD be silently ignored. | messages. If found elsewhere, it SHOULD be silently ignored. | |||
In fragmentary CDDL, the Decline option follows the pattern: | In fragmentary CDDL, the Decline option follows the pattern: | |||
decline-option = [O_DECLINE, ?reason] | decline-option = [O_DECLINE, ?reason] | |||
reason = text ;optional UTF-8 error message | reason = text ; optional UTF-8 error message | |||
Note: there might be scenarios where an ASA wants to decline the | Note: there might be scenarios where an ASA wants to decline the | |||
proposed value and restart the negotiation process. In this case it | proposed value and restart the negotiation process. In this case, it | |||
is an implementation choice whether to send a Decline option or to | is an implementation choice whether to send a Decline option or to | |||
continue with a Negotiate message, with an objective option that | continue with a Negotiation message, with an objective option that | |||
contains a null value, or one that contains a new value that might | contains a null value or one that contains a new value that might | |||
achieve convergence. | achieve convergence. | |||
2.9.5. Locator Options | 2.9.5. Locator Options | |||
These locator options are used to present reachability information | These locator options are used to present reachability information | |||
for an ASA, a device or an interface. They are Locator IPv6 Address | for an ASA, a device, or an interface. They are Locator IPv6 Address | |||
Option, Locator IPv4 Address Option, Locator FQDN (Fully Qualified | option, Locator IPv4 Address option, Locator FQDN option, and Locator | |||
Domain Name) Option and URI (Uniform Resource Identifier) Option. | URI option. | |||
Since ASAs will normally run as independent user programs, locator | Since ASAs will normally run as independent user programs, locator | |||
options need to indicate the network layer locator plus the transport | options need to indicate the network-layer locator plus the transport | |||
protocol and port number for reaching the target. For this reason, | protocol and port number for reaching the target. For this reason, | |||
the Locator Options for IP addresses and FQDNs include this | the locator options for IP addresses and FQDNs include this | |||
information explicitly. In the case of the URI Option, this | information explicitly. In the case of the Locator URI option, this | |||
information can be encoded in the URI itself. | information can be encoded in the URI itself. | |||
Note: It is assumed that all locators used in locator options are in | Note: It is assumed that all locators used in locator options are in | |||
scope throughout the GRASP domain. As stated in Section 2.2, GRASP | scope throughout the GRASP domain. As stated in Section 2.2, GRASP | |||
is not intended to work across disjoint addressing or naming realms. | is not intended to work across disjoint addressing or naming realms. | |||
2.9.5.1. Locator IPv6 address option | 2.9.5.1. Locator IPv6 Address Option | |||
In fragmentary CDDL, the IPv6 address option follows the pattern: | In fragmentary CDDL, the Locator IPv6 Address option follows the | |||
pattern: | ||||
ipv6-locator-option = [O_IPv6_LOCATOR, ipv6-address, | ipv6-locator-option = [O_IPv6_LOCATOR, ipv6-address, | |||
transport-proto, port-number] | transport-proto, port-number] | |||
ipv6-address = bytes .size 16 | ipv6-address = bytes .size 16 | |||
transport-proto = IPPROTO_TCP / IPPROTO_UDP | transport-proto = IPPROTO_TCP / IPPROTO_UDP | |||
IPPROTO_TCP = 6 | IPPROTO_TCP = 6 | |||
IPPROTO_UDP = 17 | IPPROTO_UDP = 17 | |||
port-number = 0..65535 | port-number = 0..65535 | |||
The content of this option is a binary IPv6 address followed by the | The content of this option is a binary IPv6 address followed by the | |||
protocol number and port number to be used. | protocol number and port number to be used. | |||
Note 1: The IPv6 address MUST normally have global scope. However, | Note 1: The IPv6 address MUST normally have global scope. However, | |||
during initialization, a link-local address MAY be used for specific | during initialization, a link-local address MAY be used for specific | |||
objectives only (Section 2.5.2). In this case the corresponding | objectives only (Section 2.5.2). In this case, the corresponding | |||
Discovery Response message MUST be sent via the interface to which | Discovery Response message MUST be sent via the interface to which | |||
the link-local address applies. | the link-local address applies. | |||
Note 2: A link-local IPv6 address MUST NOT be used when this option | Note 2: A link-local IPv6 address MUST NOT be used when this option | |||
is included in a Divert option. | is included in a Divert option. | |||
Note 3: The IPPROTO values are taken from the existing IANA Protocol | Note 3: The IPPROTO values are taken from the existing IANA Protocol | |||
Numbers registry in order to specify TCP or UDP. If GRASP requires | Numbers registry in order to specify TCP or UDP. If GRASP requires | |||
future values that are not in that registry, a new registry for | future values that are not in that registry, a new registry for | |||
values outside the range 0..255 will be needed. | values outside the range 0..255 will be needed. | |||
2.9.5.2. Locator IPv4 address option | 2.9.5.2. Locator IPv4 Address Option | |||
In fragmentary CDDL, the IPv4 address option follows the pattern: | In fragmentary CDDL, the Locator IPv4 Address option follows the | |||
pattern: | ||||
ipv4-locator-option = [O_IPv4_LOCATOR, ipv4-address, | ipv4-locator-option = [O_IPv4_LOCATOR, ipv4-address, | |||
transport-proto, port-number] | transport-proto, port-number] | |||
ipv4-address = bytes .size 4 | ipv4-address = bytes .size 4 | |||
The content of this option is a binary IPv4 address followed by the | The content of this option is a binary IPv4 address followed by the | |||
protocol number and port number to be used. | protocol number and port number to be used. | |||
Note: If an operator has internal network address translation for | Note: If an operator has internal network address translation for | |||
IPv4, this option MUST NOT be used within the Divert option. | IPv4, this option MUST NOT be used within the Divert option. | |||
2.9.5.3. Locator FQDN option | 2.9.5.3. Locator FQDN Option | |||
In fragmentary CDDL, the FQDN option follows the pattern: | In fragmentary CDDL, the Locator FQDN option follows the pattern: | |||
fqdn-locator-option = [O_FQDN_LOCATOR, text, | fqdn-locator-option = [O_FQDN_LOCATOR, text, | |||
transport-proto, port-number] | transport-proto, port-number] | |||
The content of this option is the Fully Qualified Domain Name of the | The content of this option is the FQDN of the target followed by the | |||
target followed by the protocol number and port number to be used. | protocol number and port number to be used. | |||
Note 1: Any FQDN which might not be valid throughout the network in | Note 1: Any FQDN that might not be valid throughout the network in | |||
question, such as a Multicast DNS name [RFC6762], MUST NOT be used | question, such as a Multicast DNS name [RFC6762], MUST NOT be used | |||
when this option is used within the Divert option. | when this option is used within the Divert option. | |||
Note 2: Normal GRASP operations are not expected to use this option. | Note 2: Normal GRASP operations are not expected to use this option. | |||
It is intended for special purposes such as discovering external | It is intended for special purposes such as discovering external | |||
services. | services. | |||
2.9.5.4. Locator URI option | 2.9.5.4. Locator URI Option | |||
In fragmentary CDDL, the URI option follows the pattern: | In fragmentary CDDL, the Locator URI option follows the pattern: | |||
uri-locator = [O_URI_LOCATOR, text, | uri-locator-option = [O_URI_LOCATOR, text, | |||
transport-proto / null, port-number / null] | transport-proto / null, port-number / null] | |||
The content of this option is the Uniform Resource Identifier of the | The content of this option is the URI of the target followed by the | |||
target followed by the protocol number and port number to be used (or | protocol number and port number to be used (or by null values if not | |||
by null values if not required) [RFC3986]. | required) [RFC3986]. | |||
Note 1: Any URI which might not be valid throughout the network in | Note 1: Any URI which might not be valid throughout the network in | |||
question, such as one based on a Multicast DNS name [RFC6762], MUST | question, such as one based on a Multicast DNS name [RFC6762], MUST | |||
NOT be used when this option is used within the Divert option. | NOT be used when this option is used within the Divert option. | |||
Note 2: Normal GRASP operations are not expected to use this option. | Note 2: Normal GRASP operations are not expected to use this option. | |||
It is intended for special purposes such as discovering external | It is intended for special purposes such as discovering external | |||
services. Therefore its use is not further described in this | services. Therefore, its use is not further described in this | |||
specification. | specification. | |||
2.10. Objective Options | 2.10. Objective Options | |||
2.10.1. Format of Objective Options | 2.10.1. Format of Objective Options | |||
An objective option is used to identify objectives for the purposes | An objective option is used to identify objectives for the purposes | |||
of discovery, negotiation or synchronization. All objectives MUST be | of discovery, negotiation, or synchronization. All objectives MUST | |||
in the following format, described in fragmentary CDDL: | be in the following format, described in fragmentary CDDL: | |||
objective = [objective-name, objective-flags, loop-count, ?objective-value] | objective = [objective-name, objective-flags, | |||
loop-count, ?objective-value] | ||||
objective-name = text | objective-name = text | |||
objective-value = any | objective-value = any | |||
loop-count = 0..255 | loop-count = 0..255 | |||
All objectives are identified by a unique name which is a UTF-8 | All objectives are identified by a unique name that is a UTF-8 string | |||
string [RFC3629], to be compared byte by byte. | [RFC3629], to be compared byte by byte. | |||
The names of generic objectives MUST NOT include a colon (":") and | The names of generic objectives MUST NOT include a colon (":") and | |||
MUST be registered with IANA (Section 6). | MUST be registered with IANA (Section 5). | |||
The names of privately defined objectives MUST include at least one | The names of privately defined objectives MUST include at least one | |||
colon (":"). The string preceding the last colon in the name MUST be | colon (":"). The string preceding the last colon in the name MUST be | |||
globally unique and in some way identify the entity or person | globally unique and in some way identify the entity or person | |||
defining the objective. The following three methods MAY be used to | defining the objective. The following three methods MAY be used to | |||
create such a globally unique string: | create such a globally unique string: | |||
1. The unique string is a decimal number representing a registered | 1. The unique string is a decimal number representing a registered | |||
32 bit Private Enterprise Number (PEN) [RFC5612] that uniquely | 32-bit Private Enterprise Number (PEN) [RFC5612] that uniquely | |||
identifies the enterprise defining the objective. | identifies the enterprise defining the objective. | |||
2. The unique string is a fully qualified domain name that uniquely | 2. The unique string is a FQDN that uniquely identifies the entity | |||
identifies the entity or person defining the objective. | or person defining the objective. | |||
3. The unique string is an email address that uniquely identifies | 3. The unique string is an email address that uniquely identifies | |||
the entity or person defining the objective. | the entity or person defining the objective. | |||
The GRASP protocol treats the objective name as an opaque string. | GRASP treats the objective name as an opaque string. For example, | |||
For example, "EX1", "32473:EX1", "example.com:EX1", "example.org:EX1 | "EX1", "32473:EX1", "example.com:EX1", "example.org:EX1", and | |||
and "user@example.org:EX1" would be five different objectives. | "user@example.org:EX1" are five different objectives. | |||
The 'objective-flags' field is described below. | The 'objective-flags' field is described in Section 2.10.2. | |||
The 'loop-count' field is used for terminating negotiation as | The 'loop-count' field is used for terminating negotiation as | |||
described in Section 2.8.7. It is also used for terminating | described in Section 2.8.7. It is also used for terminating | |||
discovery as described in Section 2.5.4, and for terminating flooding | discovery as described in Section 2.5.4 and for terminating flooding | |||
as described in Section 2.5.6.2. It is placed in the objective | as described in Section 2.5.6.2. It is placed in the objective | |||
rather than in the GRASP message format because, as far as the ASA is | rather than in the GRASP message format because, as far as the ASA is | |||
concerned, it is a property of the objective itself. | concerned, it is a property of the objective itself. | |||
The 'objective-value' field is to express the actual value of a | The 'objective-value' field expresses the actual value of a | |||
negotiation or synchronization objective. Its format is defined in | negotiation or synchronization objective. Its format is defined in | |||
the specification of the objective and may be a simple value or a | the specification of the objective and may be a simple value or a | |||
data structure of any kind, as long as it can be represented in CBOR. | data structure of any kind, as long as it can be represented in CBOR. | |||
It is optional because it is optional in a Discovery or Discovery | It is optional only in a Discovery or Discovery Response message. | |||
Response message. | ||||
2.10.2. Objective flags | 2.10.2. Objective Flags | |||
An objective may be relevant for discovery only, for discovery and | An objective may be relevant for discovery only, for discovery and | |||
negotiation, or for discovery and synchronization. This is expressed | negotiation, or for discovery and synchronization. This is expressed | |||
in the objective by logical flag bits: | in the objective by logical flag bits: | |||
objective-flags = uint .bits objective-flag | objective-flags = uint .bits objective-flag | |||
objective-flag = &( | objective-flag = &( | |||
F_DISC: 0 ; valid for discovery | F_DISC: 0 ; valid for discovery | |||
F_NEG: 1 ; valid for negotiation | F_NEG: 1 ; valid for negotiation | |||
F_SYNCH: 2 ; valid for synchronization | F_SYNCH: 2 ; valid for synchronization | |||
F_NEG_DRY: 3 ; negotiation is dry-run | F_NEG_DRY: 3 ; negotiation is a dry run | |||
) | ) | |||
These bits are independent and may be combined appropriately, e.g. | These bits are independent and may be combined appropriately, e.g., | |||
(F_DISC and F_SYNCH) or (F_DISC and F_NEG) or (F_DISC and F_NEG and | (F_DISC and F_SYNCH) or (F_DISC and F_NEG) or (F_DISC and F_NEG and | |||
F_NEG_DRY). | F_NEG_DRY). | |||
Note that for a given negotiation session, an objective must be | Note that for a given negotiation session, an objective must be used | |||
either used for negotiation, or for dry-run negotiation. Mixing the | either for negotiation or for dry-run negotiation. Mixing the two | |||
two modes in a single negotiation is not possible. | modes in a single negotiation is not possible. | |||
2.10.3. General Considerations for Objective Options | 2.10.3. General Considerations for Objective Options | |||
As mentioned above, Objective Options MUST be assigned a unique name. | As mentioned above, objective options MUST be assigned a unique name. | |||
As long as privately defined Objective Options obey the rules above, | As long as privately defined objective options obey the rules above, | |||
this document does not restrict their choice of name, but the entity | this document does not restrict their choice of name, but the entity | |||
or person concerned SHOULD publish the names in use. | or person concerned SHOULD publish the names in use. | |||
Names are expressed as UTF-8 strings for convenience in designing | Names are expressed as UTF-8 strings for convenience in designing | |||
Objective Options for localized use. For generic usage, names | objective options for localized use. For generic usage, names | |||
expressed in the ASCII subset of UTF-8 are RECOMMENDED. Designers | expressed in the ASCII subset of UTF-8 are RECOMMENDED. Designers | |||
planning to use non-ASCII names are strongly advised to consult | planning to use non-ASCII names are strongly advised to consult | |||
[RFC7564] or its successor to understand the complexities involved. | [RFC8264] or its successor to understand the complexities involved. | |||
Since the GRASP protocol compares names byte by byte, all issues of | Since GRASP compares names byte by byte, all issues of Unicode | |||
Unicode profiling and canonicalization MUST be specified in the | profiling and canonicalization MUST be specified in the design of the | |||
design of the Objective Option. | objective option. | |||
All Objective Options MUST respect the CBOR patterns defined above as | All objective options MUST respect the CBOR patterns defined above as | |||
"objective" and MUST replace the "any" field with a valid CBOR data | "objective" and MUST replace the 'any' field with a valid CBOR data | |||
definition for the relevant use case and application. | definition for the relevant use case and application. | |||
An Objective Option that contains no additional fields beyond its | An objective option that contains no additional fields beyond its | |||
"loop-count" can only be a discovery objective and MUST only be used | 'loop-count' can only be a discovery objective and MUST only be used | |||
in Discovery and Discovery Response messages. | in Discovery and Discovery Response messages. | |||
The Negotiation Objective Options contain negotiation objectives, | The Negotiation Objective options contain negotiation objectives, | |||
which vary according to different functions/services. They MUST be | which vary according to different functions and/or services. They | |||
carried by Discovery, Request Negotiation or Negotiation messages | MUST be carried by Discovery, Request Negotiation, or Negotiation | |||
only. The negotiation initiator MUST set the initial "loop-count" to | messages only. The negotiation initiator MUST set the initial 'loop- | |||
a value specified in the specification of the objective or, if no | count' to a value specified in the specification of the objective or, | |||
such value is specified, to GRASP_DEF_LOOPCT. | if no such value is specified, to GRASP_DEF_LOOPCT. | |||
For most scenarios, there should be initial values in the negotiation | For most scenarios, there should be initial values in the negotiation | |||
requests. Consequently, the Negotiation Objective options MUST | requests. Consequently, the Negotiation Objective options MUST | |||
always be completely presented in a Request Negotiation message, or | always be completely presented in a Request Negotiation message, or | |||
in a Discovery message in rapid mode. If there is no initial value, | in a Discovery message in rapid mode. If there is no initial value, | |||
the value field SHOULD be set to the 'null' value defined by CBOR. | the 'value' field SHOULD be set to the 'null' value defined by CBOR. | |||
Synchronization Objective Options are similar, but MUST be carried by | Synchronization Objective options are similar, but MUST be carried by | |||
Discovery, Discovery Response, Request Synchronization, or Flood | Discovery, Discovery Response, Request Synchronization, or Flood | |||
Synchronization messages only. They include value fields only in | Synchronization messages only. They include 'value' fields only in | |||
Synchronization or Flood Synchronization messages. | Synchronization or Flood Synchronization messages. | |||
The design of an objective interacts in various ways with the design | The design of an objective interacts in various ways with the design | |||
of the ASAs that will use it. ASA design considerations are | of the ASAs that will use it. ASA design considerations are | |||
discussed in [I-D.carpenter-anima-asa-guidelines]. | discussed in [ASA-GUIDELINES]. | |||
2.10.4. Organizing of Objective Options | 2.10.4. Organizing of Objective Options | |||
Generic objective options MUST be specified in documents available to | Generic objective options MUST be specified in documents available to | |||
the public and SHOULD be designed to use either the negotiation or | the public and SHOULD be designed to use either the negotiation or | |||
the synchronization mechanism described above. | the synchronization mechanism described above. | |||
As noted earlier, one negotiation objective is handled by each GRASP | As noted earlier, one negotiation objective is handled by each GRASP | |||
negotiation thread. Therefore, a negotiation objective, which is | negotiation thread. Therefore, a negotiation objective, which is | |||
based on a specific function or action, SHOULD be organized as a | based on a specific function or action, SHOULD be organized as a | |||
single GRASP option. It is NOT RECOMMENDED to organize multiple | single GRASP option. It is NOT RECOMMENDED to organize multiple | |||
negotiation objectives into a single option, nor to split a single | negotiation objectives into a single option nor to split a single | |||
function or action into multiple negotiation objectives. | function or action into multiple negotiation objectives. | |||
It is important to understand that GRASP negotiation does not support | It is important to understand that GRASP negotiation does not support | |||
transactional integrity. If transactional integrity is needed for a | transactional integrity. If transactional integrity is needed for a | |||
specific objective, this must be ensured by the ASA. For example, an | specific objective, this must be ensured by the ASA. For example, an | |||
ASA might need to ensure that it only participates in one negotiation | ASA might need to ensure that it only participates in one negotiation | |||
thread at the same time. Such an ASA would need to stop listening | thread at the same time. Such an ASA would need to stop listening | |||
for incoming negotiation requests before generating an outgoing | for incoming negotiation requests before generating an outgoing | |||
negotiation request. | negotiation request. | |||
A synchronization objective SHOULD be organized as a single GRASP | A synchronization objective SHOULD be organized as a single GRASP | |||
option. | option. | |||
Some objectives will support more than one operational mode. An | Some objectives will support more than one operational mode. An | |||
example is a negotiation objective with both a "dry run" mode (where | example is a negotiation objective with both a dry-run mode (where | |||
the negotiation is to find out whether the other end can in fact make | the negotiation is to determine whether the other end can, in fact, | |||
the requested change without problems) and a "live" mode, as | make the requested change without problems) and a live mode, as | |||
explained in Section 2.5.5. The semantics of such modes will be | explained in Section 2.5.5. The semantics of such modes will be | |||
defined in the specification of the objectives. These objectives | defined in the specification of the objectives. These objectives | |||
SHOULD include flags indicating the applicable mode(s). | SHOULD include flags indicating the applicable mode(s). | |||
An issue requiring particular attention is that GRASP itself is not a | An issue requiring particular attention is that GRASP itself is not a | |||
transactionally safe protocol. Any state associated with a dry run | transactionally safe protocol. Any state associated with a dry-run | |||
operation, such as temporarily reserving a resource for subsequent | operation, such as temporarily reserving a resource for subsequent | |||
use in a live run, is entirely a matter for the designer of the ASA | use in a live run, is entirely a matter for the designer of the ASA | |||
concerned. | concerned. | |||
As indicated in Section 2.1, an objective's value may include | As indicated in Section 2.1, an objective's value may include | |||
multiple parameters. Parameters might be categorized into two | multiple parameters. Parameters might be categorized into two | |||
classes: the obligatory ones presented as fixed fields; and the | classes: the obligatory ones presented as fixed fields and the | |||
optional ones presented in some other form of data structure embedded | optional ones presented in some other form of data structure embedded | |||
in CBOR. The format might be inherited from an existing management | in CBOR. The format might be inherited from an existing management | |||
or configuration protocol, with the objective option acting as a | or configuration protocol, with the objective option acting as a | |||
carrier for that format. The data structure might be defined in a | carrier for that format. The data structure might be defined in a | |||
formal language, but that is a matter for the specifications of | formal language, but that is a matter for the specifications of | |||
individual objectives. There are many candidates, according to the | individual objectives. There are many candidates, according to the | |||
context, such as ABNF, RBNF, XML Schema, YANG, etc. The GRASP | context, such as ABNF, RBNF, XML Schema, YANG, etc. GRASP itself is | |||
protocol itself is agnostic on these questions. The only restriction | agnostic on these questions. The only restriction is that the format | |||
is that the format can be mapped into CBOR. | can be mapped into CBOR. | |||
It is NOT RECOMMENDED to mix parameters that have significantly | It is NOT RECOMMENDED to mix parameters that have significantly | |||
different response time characteristics in a single objective. | different response-time characteristics in a single objective. | |||
Separate objectives are more suitable for such a scenario. | Separate objectives are more suitable for such a scenario. | |||
All objectives MUST support GRASP discovery. However, as mentioned | All objectives MUST support GRASP discovery. However, as mentioned | |||
in Section 2.3, it is acceptable for an ASA to use an alternative | in Section 2.3, it is acceptable for an ASA to use an alternative | |||
method of discovery. | method of discovery. | |||
Normally, a GRASP objective will refer to specific technical | Normally, a GRASP objective will refer to specific technical | |||
parameters as explained in Section 2.1. However, it is acceptable to | parameters as explained in Section 2.1. However, it is acceptable to | |||
define an abstract objective for the purpose of managing or | define an abstract objective for the purpose of managing or | |||
coordinating ASAs. It is also acceptable to define a special-purpose | coordinating ASAs. It is also acceptable to define a special-purpose | |||
objective for purposes such as trust bootstrapping or formation of | objective for purposes such as trust bootstrapping or formation of | |||
the ACP. | the ACP. | |||
To guarantee convergence, a limited number of rounds or a timeout is | To guarantee convergence, a limited number of rounds or a timeout is | |||
needed for each negotiation objective. Therefore, the definition of | needed for each negotiation objective. Therefore, the definition of | |||
each negotiation objective SHOULD clearly specify this, for example a | each negotiation objective SHOULD clearly specify this, for example, | |||
default loop count and timeout, so that the negotiation can always be | a default loop count and timeout, so that the negotiation can always | |||
terminated properly. If not, the GRASP defaults will apply. | be terminated properly. If not, the GRASP defaults will apply. | |||
There must be a well-defined procedure for concluding that a | There must be a well-defined procedure for concluding that a | |||
negotiation cannot succeed, and if so deciding what happens next | negotiation cannot succeed, and if so, deciding what happens next | |||
(e.g., deadlock resolution, tie-breaking, or revert to best-effort | (e.g., deadlock resolution, tie-breaking, or reversion to best-effort | |||
service). This MUST be specified for individual negotiation | service). This MUST be specified for individual negotiation | |||
objectives. | objectives. | |||
2.10.5. Experimental and Example Objective Options | 2.10.5. Experimental and Example Objective Options | |||
The names "EX0" through "EX9" have been reserved for experimental | The names "EX0" through "EX9" have been reserved for experimental | |||
options. Multiple names have been assigned because a single | options. Multiple names have been assigned because a single | |||
experiment may use multiple options simultaneously. These | experiment may use multiple options simultaneously. These | |||
experimental options are highly likely to have different meanings | experimental options are highly likely to have different meanings | |||
when used for different experiments. Therefore, they SHOULD NOT be | when used for different experiments. Therefore, they SHOULD NOT be | |||
used without an explicit human decision and MUST NOT be used in | used without an explicit human decision and MUST NOT be used in | |||
unmanaged networks such as home networks. | unmanaged networks such as home networks. | |||
These names are also RECOMMENDED for use in documentation examples. | These names are also RECOMMENDED for use in documentation examples. | |||
3. Implementation Status [RFC Editor: please remove] | 3. Security Considerations | |||
Two prototype implementations of GRASP have been made. | ||||
3.1. BUPT C++ Implementation | ||||
o Name: BaseNegotiator.cpp, msg.cpp, Client.cpp, Server.cpp | ||||
o Description: C++ implementation of GRASP core and API | ||||
o Maturity: Prototype code, interoperable between Ubuntu. | ||||
o Coverage: Corresponds to draft-carpenter-anima-gdn-protocol-03. | ||||
Since it was implemented based on the old version draft, the most | ||||
significant limitations comparing to current protocol design | ||||
include: | ||||
* Not support CBOR | ||||
* Not support Flooding | ||||
* Not support loop avoidance | ||||
* only coded for IPv6, any IPv4 is accidental | ||||
o Licensing: Huawei License. | ||||
o Experience: https://github.com/liubingpang/IETF-Anima-Signaling- | ||||
Protocol/blob/master/README.md | ||||
o Contact: https://github.com/liubingpang/IETF-Anima-Signaling- | ||||
Protocol | ||||
3.2. Python Implementation | ||||
o Name: graspy | ||||
o Description: Python 3 implementation of GRASP core and API. | ||||
o Maturity: Prototype code, interoperable between Windows 7 and | ||||
Linux. | ||||
o Coverage: Corresponds to draft-ietf-anima-grasp-13. Limitations | ||||
include: | ||||
* insecure: uses a dummy ACP module | ||||
* only coded for IPv6, any IPv4 is accidental | ||||
* FQDN and URI locators incompletely supported | ||||
* no code for rapid mode | ||||
* relay code is lazy (no rate control) | ||||
* all unicast transactions use TCP (no unicast UDP). | ||||
Experimental code for unicast UDP proved to be complex and | ||||
brittle. | ||||
* optional Objective option in Response messages not implemented | ||||
* workarounds for defects in Python socket module and Windows | ||||
socket peculiarities | ||||
o Licensing: Simplified BSD | ||||
o Experience: Tested on Windows, Linux and MacOS. | ||||
https://www.cs.auckland.ac.nz/~brian/graspy/graspy.pdf | ||||
o Contact: https://www.cs.auckland.ac.nz/~brian/graspy/ | ||||
4. Security Considerations | ||||
A successful attack on negotiation-enabled nodes would be extremely | A successful attack on negotiation-enabled nodes would be extremely | |||
harmful, as such nodes might end up with a completely undesirable | harmful, as such nodes might end up with a completely undesirable | |||
configuration that would also adversely affect their peers. GRASP | configuration that would also adversely affect their peers. GRASP | |||
nodes and messages therefore require full protection. As explained | nodes and messages therefore require full protection. As explained | |||
in Section 2.5.1, GRASP MUST run within a secure environment such as | in Section 2.5.1, GRASP MUST run within a secure environment such as | |||
the Autonomic Control Plane [I-D.ietf-anima-autonomic-control-plane], | the ACP [RFC8994], except for the constrained instances described in | |||
except for the constrained instances described in Section 2.5.2. | Section 2.5.2. | |||
- Authentication | ||||
Authentication | ||||
A cryptographically authenticated identity for each device is | A cryptographically authenticated identity for each device is | |||
needed in an autonomic network. It is not safe to assume that a | needed in an Autonomic Network. It is not safe to assume that a | |||
large network is physically secured against interference or that | large network is physically secured against interference or that | |||
all personnel are trustworthy. Each autonomic node MUST be | all personnel are trustworthy. Each autonomic node MUST be | |||
capable of proving its identity and authenticating its messages. | capable of proving its identity and authenticating its messages. | |||
GRASP relies on a separate external certificate-based security | GRASP relies on a separate, external certificate-based security | |||
mechanism to support authentication, data integrity protection, | mechanism to support authentication, data integrity protection, | |||
and anti-replay protection. | and anti-replay protection. | |||
Since GRASP must be deployed in an existing secure environment, | Since GRASP must be deployed in an existing secure environment, | |||
the protocol itself specifies nothing concerning the trust anchor | the protocol itself specifies nothing concerning the trust anchor | |||
and certification authority. For example, in the Autonomic | and certification authority. For example, in the ACP [RFC8994], | |||
Control Plane [I-D.ietf-anima-autonomic-control-plane], all nodes | all nodes can trust each other and the ASAs installed in them. | |||
can trust each other and the ASAs installed in them. | ||||
If GRASP is used temporarily without an external security | If GRASP is used temporarily without an external security | |||
mechanism, for example during system bootstrap (Section 2.5.1), | mechanism, for example, during system bootstrap (Section 2.5.1), | |||
the Session ID (Section 2.7) will act as a nonce to provide | the Session ID (Section 2.7) will act as a nonce to provide | |||
limited protection against third parties injecting responses. A | limited protection against the injecting of responses by third | |||
full analysis of the secure bootstrap process is in | parties. A full analysis of the secure bootstrap process is in | |||
[I-D.ietf-anima-bootstrapping-keyinfra]. | [RFC8995]. | |||
- Authorization and Roles | ||||
The GRASP protocol is agnostic about the roles and capabilities of | ||||
individual ASAs and about which objectives a particular ASA is | ||||
authorized to support. An implementation might support | ||||
precautions such as allowing only one ASA in a given node to | ||||
modify a given objective, but this may not be appropriate in all | ||||
cases. For example, it might be operationally useful to allow an | ||||
old and a new version of the same ASA to run simultaneously during | ||||
an overlap period. These questions are out of scope for the | ||||
present specification. | ||||
- Privacy and confidentiality | Authorization and roles | |||
GRASP is agnostic about the roles and capabilities of individual | ||||
ASAs and about which objectives a particular ASA is authorized to | ||||
support. An implementation might support precautions such as | ||||
allowing only one ASA in a given node to modify a given objective, | ||||
but this may not be appropriate in all cases. For example, it | ||||
might be operationally useful to allow an old and a new version of | ||||
the same ASA to run simultaneously during an overlap period. | ||||
These questions are out of scope for the present specification. | ||||
GRASP is intended for network management purposes involving | Privacy and confidentiality | |||
GRASP is intended for network-management purposes involving | ||||
network elements, not end hosts. Therefore, no personal | network elements, not end hosts. Therefore, no personal | |||
information is expected to be involved in the signaling protocol, | information is expected to be involved in the signaling protocol, | |||
so there should be no direct impact on personal privacy. | so there should be no direct impact on personal privacy. | |||
Nevertheless, applications that do convey personal information | Nevertheless, applications that do convey personal information | |||
cannot be excluded. Also, traffic flow paths, VPNs, etc. could be | cannot be excluded. Also, traffic flow paths, VPNs, etc., could | |||
negotiated, which could be of interest for traffic analysis. | be negotiated, which could be of interest for traffic analysis. | |||
Operators generally want to conceal details of their network | Operators generally want to conceal details of their network | |||
topology and traffic density from outsiders. Therefore, since | topology and traffic density from outsiders. Therefore, since | |||
insider attacks cannot be excluded in a large network, the | insider attacks cannot be excluded in a large network, the | |||
security mechanism for the protocol MUST provide message | security mechanism for the protocol MUST provide message | |||
confidentiality. This is why Section 2.5.1 requires either an ACP | confidentiality. This is why Section 2.5.1 requires either an ACP | |||
or an alternative security mechanism. | or an alternative security mechanism. | |||
- Link-local multicast security | Link-local multicast security | |||
GRASP has no reasonable alternative to using link-local multicast | GRASP has no reasonable alternative to using link-local multicast | |||
for Discovery or Flood Synchronization messages and these messages | for Discovery or Flood Synchronization messages, and these | |||
are sent in clear and with no authentication. They are only sent | messages are sent in the clear and with no authentication. They | |||
on interfaces within the autonomic network (see Section 2.1 and | are only sent on interfaces within the Autonomic Network (see | |||
Section 2.5.1). They are however available to on-link | Section 2.1 and Section 2.5.1). They are, however, available to | |||
eavesdroppers, and could be forged by on-link attackers. In the | on-link eavesdroppers and could be forged by on-link attackers. | |||
case of Discovery, the Discovery Responses are unicast and will | In the case of discovery, the Discovery Responses are unicast and | |||
therefore be protected (Section 2.5.1), and an untrusted forger | will therefore be protected (Section 2.5.1), and an untrusted | |||
will not be able to receive responses. In the case of Flood | forger will not be able to receive responses. In the case of | |||
Synchronization, an on-link eavesdropper will be able to receive | flood synchronization, an on-link eavesdropper will be able to | |||
the flooded objectives but there is no response message to | receive the flooded objectives, but there is no response message | |||
consider. Some precautions for Flood Synchronization messages are | to consider. Some precautions for Flood Synchronization messages | |||
suggested in Section 2.5.6.2. | are suggested in Section 2.5.6.2. | |||
- DoS Attack Protection | ||||
DoS attack protection | ||||
GRASP discovery partly relies on insecure link-local multicast. | GRASP discovery partly relies on insecure link-local multicast. | |||
Since routers participating in GRASP sometimes relay discovery | Since routers participating in GRASP sometimes relay Discovery | |||
messages from one link to another, this could be a vector for | messages from one link to another, this could be a vector for | |||
denial of service attacks. Some mitigations are specified in | denial-of-service attacks. Some mitigations are specified in | |||
Section 2.5.4. However, malicious code installed inside the | Section 2.5.4. However, malicious code installed inside the ACP | |||
Autonomic Control Plane could always launch DoS attacks consisting | could always launch DoS attacks consisting of either spurious | |||
of spurious discovery messages, or of spurious discovery | Discovery messages or spurious Discovery Responses. It is | |||
responses. It is important that firewalls prevent any GRASP | important that firewalls prevent any GRASP messages from entering | |||
messages from entering the domain from an unknown source. | the domain from an unknown source. | |||
- Security during bootstrap and discovery | ||||
Security during bootstrap and discovery | ||||
A node cannot trust GRASP traffic from other nodes until the | A node cannot trust GRASP traffic from other nodes until the | |||
security environment (such as the ACP) has identified the trust | security environment (such as the ACP) has identified the trust | |||
anchor and can authenticate traffic by validating certificates for | anchor and can authenticate traffic by validating certificates for | |||
other nodes. Also, until it has succesfully enrolled | other nodes. Also, until it has successfully enrolled [RFC8995], | |||
[I-D.ietf-anima-bootstrapping-keyinfra] a node cannot assume that | a node cannot assume that other nodes are able to authenticate its | |||
other nodes are able to authenticate its own traffic. Therefore, | own traffic. Therefore, GRASP discovery during the bootstrap | |||
GRASP discovery during the bootstrap phase for a new device will | phase for a new device will inevitably be insecure. Secure | |||
inevitably be insecure. Secure synchronization and negotiation | synchronization and negotiation will be impossible until | |||
will be impossible until enrollment is complete. Further details | enrollment is complete. Further details are given in | |||
are given in Section 2.5.2. | Section 2.5.2. | |||
- Security of discovered locators | Security of discovered locators | |||
When GRASP discovery returns an IP address, it MUST be that of a | When GRASP discovery returns an IP address, it MUST be that of a | |||
node within the secure environment (Section 2.5.1). If it returns | node within the secure environment (Section 2.5.1). If it returns | |||
an FQDN or a URI, the ASA that receives it MUST NOT assume that | an FQDN or a URI, the ASA that receives it MUST NOT assume that | |||
the target of the locator is within the secure environment. | the target of the locator is within the secure environment. | |||
5. CDDL Specification of GRASP | 4. CDDL Specification of GRASP | |||
<CODE BEGINS> | ||||
grasp-message = (message .within message-structure) / noop-message | ||||
message-structure = [MESSAGE_TYPE, session-id, ?initiator, | ||||
*grasp-option] | ||||
MESSAGE_TYPE = 0..255 | ||||
session-id = 0..4294967295 ;up to 32 bits | ||||
grasp-option = any | ||||
message /= discovery-message | ||||
discovery-message = [M_DISCOVERY, session-id, initiator, objective] | ||||
message /= response-message ;response to Discovery | ||||
response-message = [M_RESPONSE, session-id, initiator, ttl, | ||||
(+locator-option // divert-option), ?objective] | ||||
message /= synch-message ;response to Synchronization request | ||||
synch-message = [M_SYNCH, session-id, objective] | ||||
message /= flood-message | ||||
flood-message = [M_FLOOD, session-id, initiator, ttl, | ||||
+[objective, (locator-option / [])]] | ||||
message /= request-negotiation-message | ||||
request-negotiation-message = [M_REQ_NEG, session-id, objective] | ||||
message /= request-synchronization-message | <CODE BEGINS> file "grasp.cddl" | |||
request-synchronization-message = [M_REQ_SYN, session-id, objective] | grasp-message = (message .within message-structure) / noop-message | |||
message /= negotiation-message | message-structure = [MESSAGE_TYPE, session-id, ?initiator, | |||
negotiation-message = [M_NEGOTIATE, session-id, objective] | *grasp-option] | |||
message /= end-message | MESSAGE_TYPE = 0..255 | |||
end-message = [M_END, session-id, accept-option / decline-option ] | session-id = 0..4294967295 ; up to 32 bits | |||
grasp-option = any | ||||
message /= wait-message | message /= discovery-message | |||
wait-message = [M_WAIT, session-id, waiting-time] | discovery-message = [M_DISCOVERY, session-id, initiator, objective] | |||
message /= invalid-message | message /= response-message ; response to Discovery | |||
invalid-message = [M_INVALID, session-id, ?any] | response-message = [M_RESPONSE, session-id, initiator, ttl, | |||
noop-message = [M_NOOP] | (+locator-option // divert-option), ?objective] | |||
divert-option = [O_DIVERT, +locator-option] | message /= synch-message ; response to Synchronization request | |||
synch-message = [M_SYNCH, session-id, objective] | ||||
accept-option = [O_ACCEPT] | message /= flood-message | |||
flood-message = [M_FLOOD, session-id, initiator, ttl, | ||||
+[objective, (locator-option / [])]] | ||||
decline-option = [O_DECLINE, ?reason] | message /= request-negotiation-message | |||
reason = text ;optional UTF-8 error message | request-negotiation-message = [M_REQ_NEG, session-id, objective] | |||
waiting-time = 0..4294967295 ; in milliseconds | message /= request-synchronization-message | |||
ttl = 0..4294967295 ; in milliseconds | request-synchronization-message = [M_REQ_SYN, session-id, objective] | |||
locator-option /= [O_IPv4_LOCATOR, ipv4-address, | message /= negotiation-message | |||
transport-proto, port-number] | negotiation-message = [M_NEGOTIATE, session-id, objective] | |||
ipv4-address = bytes .size 4 | ||||
locator-option /= [O_IPv6_LOCATOR, ipv6-address, | message /= end-message | |||
transport-proto, port-number] | end-message = [M_END, session-id, accept-option / decline-option] | |||
ipv6-address = bytes .size 16 | ||||
locator-option /= [O_FQDN_LOCATOR, text, transport-proto, port-number] | message /= wait-message | |||
wait-message = [M_WAIT, session-id, waiting-time] | ||||
locator-option /= [O_URI_LOCATOR, text, | message /= invalid-message | |||
transport-proto / null, port-number / null] | invalid-message = [M_INVALID, session-id, ?any] | |||
transport-proto = IPPROTO_TCP / IPPROTO_UDP | noop-message = [M_NOOP] | |||
IPPROTO_TCP = 6 | ||||
IPPROTO_UDP = 17 | ||||
port-number = 0..65535 | ||||
initiator = ipv4-address / ipv6-address | divert-option = [O_DIVERT, +locator-option] | |||
objective-flags = uint .bits objective-flag | accept-option = [O_ACCEPT] | |||
objective-flag = &( | decline-option = [O_DECLINE, ?reason] | |||
F_DISC: 0 ; valid for discovery | reason = text ; optional UTF-8 error message | |||
F_NEG: 1 ; valid for negotiation | ||||
F_SYNCH: 2 ; valid for synchronization | ||||
F_NEG_DRY: 3 ; negotiation is dry-run | ||||
) | ||||
objective = [objective-name, objective-flags, loop-count, ?objective-value] | waiting-time = 0..4294967295 ; in milliseconds | |||
ttl = 0..4294967295 ; in milliseconds | ||||
objective-name = text ;see section "Format of Objective Options" | locator-option /= [O_IPv4_LOCATOR, ipv4-address, | |||
transport-proto, port-number] | ||||
ipv4-address = bytes .size 4 | ||||
objective-value = any | locator-option /= [O_IPv6_LOCATOR, ipv6-address, | |||
transport-proto, port-number] | ||||
ipv6-address = bytes .size 16 | ||||
loop-count = 0..255 | locator-option /= [O_FQDN_LOCATOR, text, transport-proto, | |||
; Constants for message types and option types | port-number] | |||
M_NOOP = 0 | locator-option /= [O_URI_LOCATOR, text, | |||
M_DISCOVERY = 1 | transport-proto / null, port-number / null] | |||
M_RESPONSE = 2 | ||||
M_REQ_NEG = 3 | ||||
M_REQ_SYN = 4 | ||||
M_NEGOTIATE = 5 | ||||
M_END = 6 | ||||
M_WAIT = 7 | ||||
M_SYNCH = 8 | ||||
M_FLOOD = 9 | ||||
M_INVALID = 99 | ||||
O_DIVERT = 100 | transport-proto = IPPROTO_TCP / IPPROTO_UDP | |||
O_ACCEPT = 101 | IPPROTO_TCP = 6 | |||
O_DECLINE = 102 | IPPROTO_UDP = 17 | |||
O_IPv6_LOCATOR = 103 | port-number = 0..65535 | |||
O_IPv4_LOCATOR = 104 | ||||
O_FQDN_LOCATOR = 105 | ||||
O_URI_LOCATOR = 106 | ||||
<CODE ENDS> | ||||
6. IANA Considerations | initiator = ipv4-address / ipv6-address | |||
This document defines the GeneRic Autonomic Signaling Protocol | objective-flags = uint .bits objective-flag | |||
(GRASP). | ||||
Section 2.6 explains the following link-local multicast addresses, | objective-flag = &( | |||
which IANA is requested to assign for use by GRASP: | F_DISC: 0 ; valid for discovery | |||
F_NEG: 1 ; valid for negotiation | ||||
F_SYNCH: 2 ; valid for synchronization | ||||
F_NEG_DRY: 3 ; negotiation is a dry run | ||||
) | ||||
ALL_GRASP_NEIGHBORS multicast address (IPv6): (TBD1). Assigned in | objective = [objective-name, objective-flags, | |||
the IPv6 Link-Local Scope Multicast Addresses registry. | loop-count, ?objective-value] | |||
ALL_GRASP_NEIGHBORS multicast address (IPv4): (TBD2). Assigned in | objective-name = text ; see section "Format of Objective Options" | |||
the IPv4 Multicast Local Network Control Block. | ||||
Section 2.6 explains the following User Port, which IANA is requested | objective-value = any | |||
to assign for use by GRASP for both UDP and TCP: | ||||
GRASP_LISTEN_PORT: (TBD3) | loop-count = 0..255 | |||
Service Name: Generic Autonomic Signaling Protocol (GRASP) | ||||
Transport Protocols: UDP, TCP | ||||
Assignee: iesg@ietf.org | ||||
Contact: chair@ietf.org | ||||
Description: See Section 2.6 | ||||
Reference: RFC XXXX (this document) | ||||
The IANA is requested to create a GRASP Parameter Registry including | ||||
two registry tables. These are the GRASP Messages and Options | ||||
Table and the GRASP Objective Names Table. | ||||
GRASP Messages and Options Table. The values in this table are names | ; Constants for message types and option types | |||
paired with decimal integers. Future values MUST be assigned using | ||||
the Standards Action policy defined by [RFC8126]. The following | ||||
initial values are assigned by this document: | ||||
M_NOOP = 0 | M_NOOP = 0 | |||
M_DISCOVERY = 1 | M_DISCOVERY = 1 | |||
M_RESPONSE = 2 | M_RESPONSE = 2 | |||
M_REQ_NEG = 3 | M_REQ_NEG = 3 | |||
M_REQ_SYN = 4 | M_REQ_SYN = 4 | |||
M_NEGOTIATE = 5 | M_NEGOTIATE = 5 | |||
M_END = 6 | M_END = 6 | |||
M_WAIT = 7 | M_WAIT = 7 | |||
M_SYNCH = 8 | M_SYNCH = 8 | |||
M_FLOOD = 9 | M_FLOOD = 9 | |||
M_INVALID = 99 | M_INVALID = 99 | |||
O_DIVERT = 100 | O_DIVERT = 100 | |||
O_ACCEPT = 101 | O_ACCEPT = 101 | |||
O_DECLINE = 102 | O_DECLINE = 102 | |||
O_IPv6_LOCATOR = 103 | O_IPv6_LOCATOR = 103 | |||
O_IPv4_LOCATOR = 104 | O_IPv4_LOCATOR = 104 | |||
O_FQDN_LOCATOR = 105 | O_FQDN_LOCATOR = 105 | |||
O_URI_LOCATOR = 106 | O_URI_LOCATOR = 106 | |||
<CODE ENDS> | ||||
GRASP Objective Names Table. The values in this table are UTF-8 | 5. IANA Considerations | |||
strings which MUST NOT include a colon (":"), according to | ||||
This document defines the GeneRic Autonomic Signaling Protocol | ||||
(GRASP). | ||||
Section 2.6 explains the following link-local multicast addresses | ||||
that IANA has assigned for use by GRASP. | ||||
Assigned in the "Link-Local Scope Multicast Addresses" subregistry of | ||||
the "IPv6 Multicast Address Space Registry": | ||||
Address(es): ff02::13 | ||||
Description: ALL_GRASP_NEIGHBORS | ||||
Reference: RFC 8990 | ||||
Assigned in the "Local Network Control Block (224.0.0.0 - 224.0.0.255 | ||||
(224.0.0/24))" subregistry of the "IPv4 Multicast Address Space | ||||
Registry": | ||||
Address(es): 224.0.0.119 | ||||
Description: ALL_GRASP_NEIGHBORS | ||||
Reference: RFC 8990 | ||||
Section 2.6 explains the following User Port (GRASP_LISTEN_PORT), | ||||
which IANA has assigned for use by GRASP for both UDP and TCP: | ||||
Service Name: grasp | ||||
Port Number: 7017 | ||||
Transport Protocol: udp, tcp | ||||
Description GeneRic Autonomic Signaling Protocol | ||||
Assignee: IESG <iesg@ietf.org> | ||||
Contact: IETF Chair <chair@ietf.org> | ||||
Reference: RFC 8990 | ||||
The IANA has created the "GeneRic Autonomic Signaling Protocol | ||||
(GRASP) Parameters" registry, which includes two subregistries: | ||||
"GRASP Messages and Options" and "GRASP Objective Names". | ||||
The values in the "GRASP Messages and Options" subregistry are names | ||||
paired with decimal integers. Future values MUST be assigned using | ||||
the Standards Action policy defined by [RFC8126]. The following | ||||
initial values are assigned by this document: | ||||
+=======+================+ | ||||
| Value | Message/Option | | ||||
+=======+================+ | ||||
| 0 | M_NOOP | | ||||
+-------+----------------+ | ||||
| 1 | M_DISCOVERY | | ||||
+-------+----------------+ | ||||
| 2 | M_RESPONSE | | ||||
+-------+----------------+ | ||||
| 3 | M_REQ_NEG | | ||||
+-------+----------------+ | ||||
| 4 | M_REQ_SYN | | ||||
+-------+----------------+ | ||||
| 5 | M_NEGOTIATE | | ||||
+-------+----------------+ | ||||
| 6 | M_END | | ||||
+-------+----------------+ | ||||
| 7 | M_WAIT | | ||||
+-------+----------------+ | ||||
| 8 | M_SYNCH | | ||||
+-------+----------------+ | ||||
| 9 | M_FLOOD | | ||||
+-------+----------------+ | ||||
| 99 | M_INVALID | | ||||
+-------+----------------+ | ||||
| 100 | O_DIVERT | | ||||
+-------+----------------+ | ||||
| 101 | O_ACCEPT | | ||||
+-------+----------------+ | ||||
| 102 | O_DECLINE | | ||||
+-------+----------------+ | ||||
| 103 | O_IPv6_LOCATOR | | ||||
+-------+----------------+ | ||||
| 104 | O_IPv4_LOCATOR | | ||||
+-------+----------------+ | ||||
| 105 | O_FQDN_LOCATOR | | ||||
+-------+----------------+ | ||||
| 106 | O_URI_LOCATOR | | ||||
+-------+----------------+ | ||||
Table 1: Initial | ||||
Values of the "GRASP | ||||
Messages and Options" | ||||
Subregistry | ||||
The values in the "GRASP Objective Names" subregistry are UTF-8 | ||||
strings that MUST NOT include a colon (":"), according to | ||||
Section 2.10.1. Future values MUST be assigned using the | Section 2.10.1. Future values MUST be assigned using the | |||
Specification Required policy defined by [RFC8126]. | Specification Required policy defined by [RFC8126]. | |||
To assist expert review of a new objective, the specification should | To assist expert review of a new objective, the specification should | |||
include a precise description of the format of the new objective, | include a precise description of the format of the new objective, | |||
with sufficient explanation of its semantics to allow independent | with sufficient explanation of its semantics to allow independent | |||
implementations. See Section 2.10.3 for more details. If the new | implementations. See Section 2.10.3 for more details. If the new | |||
objective is similar in name or purpose to a previously registered | objective is similar in name or purpose to a previously registered | |||
objective, the specification should explain why a new objective is | objective, the specification should explain why a new objective is | |||
justified. | justified. | |||
The following initial values are assigned by this document: | The following initial values are assigned by this document: | |||
EX0 | +================+===========+ | |||
EX1 | | Objective Name | Reference | | |||
EX2 | +================+===========+ | |||
EX3 | | EX0 | RFC 8990 | | |||
EX4 | +----------------+-----------+ | |||
EX5 | | EX1 | RFC 8990 | | |||
EX6 | +----------------+-----------+ | |||
EX7 | | EX2 | RFC 8990 | | |||
EX8 | +----------------+-----------+ | |||
EX9 | | EX3 | RFC 8990 | | |||
+----------------+-----------+ | ||||
7. Acknowledgements | | EX4 | RFC 8990 | | |||
+----------------+-----------+ | ||||
A major contribution to the original version of this document was | | EX5 | RFC 8990 | | |||
made by Sheng Jiang and significant contributions were made by | +----------------+-----------+ | |||
Toerless Eckert. Significant early review inputs were received from | | EX6 | RFC 8990 | | |||
Joel Halpern, Barry Leiba, Charles E. Perkins, and Michael | +----------------+-----------+ | |||
Richardson. William Atwood provided important assistance in | | EX7 | RFC 8990 | | |||
debugging a prototype implementation. | +----------------+-----------+ | |||
| EX8 | RFC 8990 | | ||||
Valuable comments were received from Michael Behringer, Jeferson | +----------------+-----------+ | |||
Campos Nobre, Laurent Ciavaglia, Zongpeng Du, Yu Fu, Joel Jaeggli, | | EX9 | RFC 8990 | | |||
Zhenbin Li, Dimitri Papadimitriou, Pierre Peloso, Reshad Rahman, | +----------------+-----------+ | |||
Markus Stenberg, Martin Stiemerling, Rene Struik, Martin Thomson, | ||||
Dacheng Zhang, and participants in the NMRG research group, the ANIMA | ||||
working group, and the IESG. | ||||
8. References | ||||
8.1. Normative References | Table 2: Initial Values of | |||
the "GRASP Objective | ||||
Names" Subregistry | ||||
[I-D.greevenbosch-appsawg-cbor-cddl] | 6. References | |||
Birkholz, H., Vigano, C., and C. Bormann, "Concise data | ||||
definition language (CDDL): a notational convention to | ||||
express CBOR data structures", draft-greevenbosch-appsawg- | ||||
cbor-cddl-11 (work in progress), July 2017. | ||||
[I-D.ietf-anima-autonomic-control-plane] | 6.1. Normative References | |||
Behringer, M., Eckert, T., and S. Bjarnason, "An Autonomic | ||||
Control Plane", draft-ietf-anima-autonomic-control- | ||||
plane-07 (work in progress), July 2017. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | |||
2003, <http://www.rfc-editor.org/info/rfc3629>. | 2003, <https://www.rfc-editor.org/info/rfc3629>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
<http://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | |||
"Randomness Requirements for Security", BCP 106, RFC 4086, | "Randomness Requirements for Security", BCP 106, RFC 4086, | |||
DOI 10.17487/RFC4086, June 2005, | DOI 10.17487/RFC4086, June 2005, | |||
<http://www.rfc-editor.org/info/rfc4086>. | <https://www.rfc-editor.org/info/rfc4086>. | |||
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | ||||
October 2013, <http://www.rfc-editor.org/info/rfc7049>. | ||||
[RFC7217] Gont, F., "A Method for Generating Semantically Opaque | [RFC7217] Gont, F., "A Method for Generating Semantically Opaque | |||
Interface Identifiers with IPv6 Stateless Address | Interface Identifiers with IPv6 Stateless Address | |||
Autoconfiguration (SLAAC)", RFC 7217, | Autoconfiguration (SLAAC)", RFC 7217, | |||
DOI 10.17487/RFC7217, April 2014, | DOI 10.17487/RFC7217, April 2014, | |||
<http://www.rfc-editor.org/info/rfc7217>. | <https://www.rfc-editor.org/info/rfc7217>. | |||
[RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
March 2017, <http://www.rfc-editor.org/info/rfc8085>. | March 2017, <https://www.rfc-editor.org/info/rfc8085>. | |||
8.2. Informative References | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
[I-D.carpenter-anima-asa-guidelines] | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
Carpenter, B. and S. Jiang, "Guidelines for Autonomic | Definition Language (CDDL): A Notational Convention to | |||
Service Agents", draft-carpenter-anima-asa-guidelines-02 | Express Concise Binary Object Representation (CBOR) and | |||
(work in progress), July 2017. | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | ||||
[I-D.chaparadza-intarea-igcp] | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Behringer, M., Chaparadza, R., Petre, R., Li, X., and H. | Representation (CBOR)", STD 94, RFC 8949, | |||
Mahkonen, "IP based Generic Control Protocol (IGCP)", | DOI 10.17487/RFC8949, December 2020, | |||
draft-chaparadza-intarea-igcp-00 (work in progress), July | <https://www.rfc-editor.org/info/rfc8949>. | |||
2011. | ||||
[I-D.ietf-anima-bootstrapping-keyinfra] | [RFC8994] Eckert, T., Ed., Behringer, M., Ed., and S. Bjarnason, "An | |||
Pritikin, M., Richardson, M., Behringer, M., Bjarnason, | Autonomic Control Plane (ACP)", RFC 8994, | |||
S., and K. Watsen, "Bootstrapping Remote Secure Key | DOI 10.17487/RFC8994, May 2021, | |||
Infrastructures (BRSKI)", draft-ietf-anima-bootstrapping- | <https://www.rfc-editor.org/info/rfc8994>. | |||
keyinfra-07 (work in progress), July 2017. | ||||
[I-D.ietf-anima-reference-model] | 6.2. Informative References | |||
Behringer, M., Carpenter, B., Eckert, T., Ciavaglia, L., | ||||
Pierre, P., Liu, B., Nobre, J., and J. Strassner, "A | ||||
Reference Model for Autonomic Networking", draft-ietf- | ||||
anima-reference-model-04 (work in progress), July 2017. | ||||
[I-D.ietf-anima-stable-connectivity] | [ADNCP] Stenberg, M., "Autonomic Distributed Node Consensus | |||
Eckert, T. and M. Behringer, "Using Autonomic Control | Protocol", Work in Progress, Internet-Draft, draft- | |||
Plane for Stable Connectivity of Network OAM", draft-ietf- | stenberg-anima-adncp-00, 5 March 2015, | |||
anima-stable-connectivity-03 (work in progress), July | <https://tools.ietf.org/html/draft-stenberg-anima-adncp- | |||
2017. | 00>. | |||
[I-D.liu-anima-grasp-api] | [ASA-GUIDELINES] | |||
Carpenter, B., Liu, B., Wang, W., and X. Gong, "Generic | Carpenter, B., Ciavaglia, L., Jiang, S., and P. Peloso, | |||
Autonomic Signaling Protocol Application Program Interface | "Guidelines for Autonomic Service Agents", Work in | |||
(GRASP API)", draft-liu-anima-grasp-api-04 (work in | Progress, Internet-Draft, draft-ietf-anima-asa-guidelines- | |||
progress), June 2017. | 00, 14 November 2020, <https://tools.ietf.org/html/draft- | |||
ietf-anima-asa-guidelines-00>. | ||||
[I-D.stenberg-anima-adncp] | [IGCP] Behringer, M. H., Chaparadza, R., Xin, L., Mahkonen, H., | |||
Stenberg, M., "Autonomic Distributed Node Consensus | and R. Petre, "IP based Generic Control Protocol (IGCP)", | |||
Protocol", draft-stenberg-anima-adncp-00 (work in | Work in Progress, Internet-Draft, draft-chaparadza- | |||
progress), March 2015. | intarea-igcp-00, 25 July 2011, | |||
<https://tools.ietf.org/html/draft-chaparadza-intarea- | ||||
igcp-00>. | ||||
[RFC2205] Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and S. | [RFC2205] Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and S. | |||
Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1 | Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1 | |||
Functional Specification", RFC 2205, DOI 10.17487/RFC2205, | Functional Specification", RFC 2205, DOI 10.17487/RFC2205, | |||
September 1997, <http://www.rfc-editor.org/info/rfc2205>. | September 1997, <https://www.rfc-editor.org/info/rfc2205>. | |||
[RFC2334] Luciani, J., Armitage, G., Halpern, J., and N. Doraswamy, | [RFC2334] Luciani, J., Armitage, G., Halpern, J., and N. Doraswamy, | |||
"Server Cache Synchronization Protocol (SCSP)", RFC 2334, | "Server Cache Synchronization Protocol (SCSP)", RFC 2334, | |||
DOI 10.17487/RFC2334, April 1998, | DOI 10.17487/RFC2334, April 1998, | |||
<http://www.rfc-editor.org/info/rfc2334>. | <https://www.rfc-editor.org/info/rfc2334>. | |||
[RFC2608] Guttman, E., Perkins, C., Veizades, J., and M. Day, | [RFC2608] Guttman, E., Perkins, C., Veizades, J., and M. Day, | |||
"Service Location Protocol, Version 2", RFC 2608, | "Service Location Protocol, Version 2", RFC 2608, | |||
DOI 10.17487/RFC2608, June 1999, | DOI 10.17487/RFC2608, June 1999, | |||
<http://www.rfc-editor.org/info/rfc2608>. | <https://www.rfc-editor.org/info/rfc2608>. | |||
[RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | [RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | |||
"Remote Authentication Dial In User Service (RADIUS)", | "Remote Authentication Dial In User Service (RADIUS)", | |||
RFC 2865, DOI 10.17487/RFC2865, June 2000, | RFC 2865, DOI 10.17487/RFC2865, June 2000, | |||
<http://www.rfc-editor.org/info/rfc2865>. | <https://www.rfc-editor.org/info/rfc2865>. | |||
[RFC3315] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins, | ||||
C., and M. Carney, "Dynamic Host Configuration Protocol | ||||
for IPv6 (DHCPv6)", RFC 3315, DOI 10.17487/RFC3315, July | ||||
2003, <http://www.rfc-editor.org/info/rfc3315>. | ||||
[RFC3416] Presuhn, R., Ed., "Version 2 of the Protocol Operations | [RFC3416] Presuhn, R., Ed., "Version 2 of the Protocol Operations | |||
for the Simple Network Management Protocol (SNMP)", | for the Simple Network Management Protocol (SNMP)", | |||
STD 62, RFC 3416, DOI 10.17487/RFC3416, December 2002, | STD 62, RFC 3416, DOI 10.17487/RFC3416, December 2002, | |||
<http://www.rfc-editor.org/info/rfc3416>. | <https://www.rfc-editor.org/info/rfc3416>. | |||
[RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | |||
Stevens, "Basic Socket Interface Extensions for IPv6", | Stevens, "Basic Socket Interface Extensions for IPv6", | |||
RFC 3493, DOI 10.17487/RFC3493, February 2003, | RFC 3493, DOI 10.17487/RFC3493, February 2003, | |||
<http://www.rfc-editor.org/info/rfc3493>. | <https://www.rfc-editor.org/info/rfc3493>. | |||
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
DOI 10.17487/RFC4861, September 2007, | DOI 10.17487/RFC4861, September 2007, | |||
<http://www.rfc-editor.org/info/rfc4861>. | <https://www.rfc-editor.org/info/rfc4861>. | |||
[RFC5612] Eronen, P. and D. Harrington, "Enterprise Number for | [RFC5612] Eronen, P. and D. Harrington, "Enterprise Number for | |||
Documentation Use", RFC 5612, DOI 10.17487/RFC5612, August | Documentation Use", RFC 5612, DOI 10.17487/RFC5612, August | |||
2009, <http://www.rfc-editor.org/info/rfc5612>. | 2009, <https://www.rfc-editor.org/info/rfc5612>. | |||
[RFC5971] Schulzrinne, H. and R. Hancock, "GIST: General Internet | [RFC5971] Schulzrinne, H. and R. Hancock, "GIST: General Internet | |||
Signalling Transport", RFC 5971, DOI 10.17487/RFC5971, | Signalling Transport", RFC 5971, DOI 10.17487/RFC5971, | |||
October 2010, <http://www.rfc-editor.org/info/rfc5971>. | October 2010, <https://www.rfc-editor.org/info/rfc5971>. | |||
[RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | |||
"The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | "The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | |||
March 2011, <http://www.rfc-editor.org/info/rfc6206>. | March 2011, <https://www.rfc-editor.org/info/rfc6206>. | |||
[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, | |||
<http://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
[RFC6733] Fajardo, V., Ed., Arkko, J., Loughney, J., and G. Zorn, | [RFC6733] Fajardo, V., Ed., Arkko, J., Loughney, J., and G. Zorn, | |||
Ed., "Diameter Base Protocol", RFC 6733, | Ed., "Diameter Base Protocol", RFC 6733, | |||
DOI 10.17487/RFC6733, October 2012, | DOI 10.17487/RFC6733, October 2012, | |||
<http://www.rfc-editor.org/info/rfc6733>. | <https://www.rfc-editor.org/info/rfc6733>. | |||
[RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | |||
DOI 10.17487/RFC6762, February 2013, | DOI 10.17487/RFC6762, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6762>. | <https://www.rfc-editor.org/info/rfc6762>. | |||
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6763>. | <https://www.rfc-editor.org/info/rfc6763>. | |||
[RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | [RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | |||
P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | |||
DOI 10.17487/RFC6887, April 2013, | DOI 10.17487/RFC6887, April 2013, | |||
<http://www.rfc-editor.org/info/rfc6887>. | <https://www.rfc-editor.org/info/rfc6887>. | |||
[RFC7558] Lynn, K., Cheshire, S., Blanchet, M., and D. Migault, | [RFC7558] Lynn, K., Cheshire, S., Blanchet, M., and D. Migault, | |||
"Requirements for Scalable DNS-Based Service Discovery | "Requirements for Scalable DNS-Based Service Discovery | |||
(DNS-SD) / Multicast DNS (mDNS) Extensions", RFC 7558, | (DNS-SD) / Multicast DNS (mDNS) Extensions", RFC 7558, | |||
DOI 10.17487/RFC7558, July 2015, | DOI 10.17487/RFC7558, July 2015, | |||
<http://www.rfc-editor.org/info/rfc7558>. | <https://www.rfc-editor.org/info/rfc7558>. | |||
[RFC7564] Saint-Andre, P. and M. Blanchet, "PRECIS Framework: | ||||
Preparation, Enforcement, and Comparison of | ||||
Internationalized Strings in Application Protocols", | ||||
RFC 7564, DOI 10.17487/RFC7564, May 2015, | ||||
<http://www.rfc-editor.org/info/rfc7564>. | ||||
[RFC7575] Behringer, M., Pritikin, M., Bjarnason, S., Clemm, A., | [RFC7575] Behringer, M., Pritikin, M., Bjarnason, S., Clemm, A., | |||
Carpenter, B., Jiang, S., and L. Ciavaglia, "Autonomic | Carpenter, B., Jiang, S., and L. Ciavaglia, "Autonomic | |||
Networking: Definitions and Design Goals", RFC 7575, | Networking: Definitions and Design Goals", RFC 7575, | |||
DOI 10.17487/RFC7575, June 2015, | DOI 10.17487/RFC7575, June 2015, | |||
<http://www.rfc-editor.org/info/rfc7575>. | <https://www.rfc-editor.org/info/rfc7575>. | |||
[RFC7576] Jiang, S., Carpenter, B., and M. Behringer, "General Gap | [RFC7576] Jiang, S., Carpenter, B., and M. Behringer, "General Gap | |||
Analysis for Autonomic Networking", RFC 7576, | Analysis for Autonomic Networking", RFC 7576, | |||
DOI 10.17487/RFC7576, June 2015, | DOI 10.17487/RFC7576, June 2015, | |||
<http://www.rfc-editor.org/info/rfc7576>. | <https://www.rfc-editor.org/info/rfc7576>. | |||
[RFC7787] Stenberg, M. and S. Barth, "Distributed Node Consensus | [RFC7787] Stenberg, M. and S. Barth, "Distributed Node Consensus | |||
Protocol", RFC 7787, DOI 10.17487/RFC7787, April 2016, | Protocol", RFC 7787, DOI 10.17487/RFC7787, April 2016, | |||
<http://www.rfc-editor.org/info/rfc7787>. | <https://www.rfc-editor.org/info/rfc7787>. | |||
[RFC7788] Stenberg, M., Barth, S., and P. Pfister, "Home Networking | [RFC7788] Stenberg, M., Barth, S., and P. Pfister, "Home Networking | |||
Control Protocol", RFC 7788, DOI 10.17487/RFC7788, April | Control Protocol", RFC 7788, DOI 10.17487/RFC7788, April | |||
2016, <http://www.rfc-editor.org/info/rfc7788>. | 2016, <https://www.rfc-editor.org/info/rfc7788>. | |||
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
<http://www.rfc-editor.org/info/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<http://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
Appendix A. Open Issues [RFC Editor: This section should be empty. | ||||
Please remove] | ||||
o 68. (Placeholder) | ||||
Appendix B. Closed Issues [RFC Editor: Please remove] | ||||
o 1. UDP vs TCP: For now, this specification suggests UDP and TCP | ||||
as message transport mechanisms. This is not clarified yet. UDP | ||||
is good for short conversations, is necessary for multicast | ||||
discovery, and generally fits the discovery and divert scenarios | ||||
well. However, it will cause problems with large messages. TCP | ||||
is good for stable and long sessions, with a little bit of time | ||||
consumption during the session establishment stage. If messages | ||||
exceed a reasonable MTU, a TCP mode will be required in any case. | ||||
This question may be affected by the security discussion. | ||||
RESOLVED by specifying UDP for short message and TCP for longer | ||||
one. | ||||
o 2. DTLS or TLS vs built-in security mechanism. For now, this | ||||
specification has chosen a PKI based built-in security mechanism | ||||
based on asymmetric cryptography. However, (D)TLS might be chosen | ||||
as security solution to avoid duplication of effort. It also | ||||
allows essentially similar security for short messages over UDP | ||||
and longer ones over TCP. The implementation trade-offs are | ||||
different. The current approach requires expensive asymmetric | ||||
cryptographic calculations for every message. (D)TLS has startup | ||||
overheads but cheaper crypto per message. DTLS is less mature | ||||
than TLS. | ||||
RESOLVED by specifying external security (ACP or (D)TLS). | ||||
o The following open issues applied only if the original security | ||||
model was retained: | ||||
* 2.1. For replay protection, GRASP currently requires every | ||||
participant to have an NTP-synchronized clock. Is this OK for | ||||
low-end devices, and how does it work during device | ||||
bootstrapping? We could take the Timestamp out of signature | ||||
option, to become an independent and OPTIONAL (or RECOMMENDED) | ||||
option. | ||||
* 2.2. The Signature Option states that this option could be any | ||||
place in a message. Wouldn't it be better to specify a | ||||
position (such as the end)? That would be much simpler to | ||||
implement. | ||||
RESOLVED by changing security model. | ||||
o 3. DoS Attack Protection needs work. | ||||
RESOLVED by adding text. | ||||
o 4. Should we consider preferring a text-based approach to | ||||
discovery (after the initial discovery needed for bootstrapping)? | ||||
This could be a complementary mechanism for multicast based | ||||
discovery, especially for a very large autonomic network. | ||||
Centralized registration could be automatically deployed | ||||
incrementally. At the very first stage, the repository could be | ||||
empty; then it could be filled in by the objectives discovered by | ||||
different devices (for example using Dynamic DNS Update). The | ||||
more records are stored in the repository, the less the multicast- | ||||
based discovery is needed. However, if we adopt such a mechanism, | ||||
there would be challenges: stateful solution, and security. | ||||
RESOLVED for now by adding optional use of DNS-SD by ASAs. | ||||
Subsequently removed by editors as irrelevant to GRASP istelf. | ||||
o 5. Need to expand description of the minimum requirements for the | ||||
specification of an individual discovery, synchronization or | ||||
negotiation objective. | ||||
RESOLVED for now by extra wording. | ||||
o 6. Use case and protocol walkthrough. A description of how a | ||||
node starts up, performs discovery, and conducts negotiation and | ||||
synchronisation for a sample use case would help readers to | ||||
understand the applicability of this specification. Maybe it | ||||
should be an artificial use case or maybe a simple real one, based | ||||
on a conceptual API. However, the authors have not yet decided | ||||
whether to have a separate document or have it in the protocol | ||||
document. | ||||
RESOLVED: recommend a separate document. | ||||
o 7. Cross-check against other ANIMA WG documents for consistency | ||||
and gaps. | ||||
RESOLVED: Satisfied by WGLC. | ||||
o 8. Consideration of ADNCP proposal. | ||||
RESOLVED by adding optional use of DNCP for flooding-type | ||||
synchronization. | ||||
o 9. Clarify how a GDNP instance knows whether it is running inside | ||||
the ACP. (Sheng) | ||||
RESOLVED by improved text. | ||||
o 10. Clarify how a non-ACP GDNP instance initiates (D)TLS. | ||||
(Sheng) | ||||
RESOLVED by improved text and declaring DTLS out of scope for this | ||||
draft. | ||||
o 11. Clarify how UDP/TCP choice is made. (Sheng) [Like DNS? - | ||||
Brian] | ||||
RESOLVED by improved text. | ||||
o 12. Justify that IP address within ACP or (D)TLS environment is | ||||
sufficient to prove AN identity; or explain how Device Identity | ||||
Option is used. (Sheng) | ||||
RESOLVED for now: we assume that all ASAs in a device are trusted | ||||
as soon as the device is trusted, so they share credentials. In | ||||
that case the Device Identity Option is useless. This needs to be | ||||
reviewed later. | ||||
o 13. Emphasise that negotiation/synchronization are independent | ||||
from discovery, although the rapid discovery mode includes the | ||||
first step of a negotiation/synchronization. (Sheng) | ||||
RESOLVED by improved text. | ||||
o 14. Do we need an unsolicited flooding mechanism for discovery | ||||
(for discovery results that everyone needs), to reduce scaling | ||||
impact of flooding discovery messages? (Toerless) | ||||
RESOLVED: Yes, added to requirements and solution. | ||||
o 15. Do we need flag bits in Objective Options to distinguish | ||||
distinguish Synchronization and Negotiation "Request" or rapid | ||||
mode "Discovery" messages? (Bing) | ||||
RESOLVED: yes, work on the API showed that these flags are | ||||
essential. | ||||
o 16. (Related to issue 14). Should we revive the "unsolicited | ||||
Response" for flooding synchronisation data? This has to be done | ||||
carefully due to the well-known issues with flooding, but it could | ||||
be useful, e.g. for Intent distribution, where DNCP doesn't seem | ||||
applicable. | ||||
RESOLVED: Yes, see #14. | ||||
o 17. Ensure that the discovery mechanism is completely proof | ||||
against loops and protected against duplicate responses. | ||||
RESOLVED: Added loop count mechanism. | ||||
o 18. Discuss the handling of multiple valid discovery responses. | ||||
RESOLVED: Stated that the choice must be available to the ASA but | ||||
GRASP implementation should pick a default. | ||||
o 19. Should we use a text-oriented format such as JSON/CBOR | ||||
instead of native binary TLV format? | ||||
RESOLVED: Yes, changed to CBOR. | ||||
o 20. Is the Divert option needed? If a discovery response | ||||
provides a valid IP address or FQDN, the recipient doesn't gain | ||||
any extra knowledge from the Divert. On the other hand, the | ||||
presence of Divert informs the receiver that the target is off- | ||||
link, which might be useful sometimes. | ||||
RESOLVED: Decided to keep Divert option. | ||||
o 21. Rename the protocol as GRASP (GeneRic Autonomic Signaling | ||||
Protocol)? | ||||
RESOLVED: Yes, name changed. | ||||
o 22. Does discovery mechanism scale robustly as needed? Need hop | ||||
limit on relaying? | ||||
RESOLVED: Added hop limit. | ||||
o 23. Need more details on TTL for caching discovery responses. | ||||
RESOLVED: Done. | ||||
o 24. Do we need "fast withdrawal" of discovery responses? | ||||
RESOLVED: This doesn't seem necessary. If an ASA exits or stops | ||||
supporting a given objective, peers will fail to start future | ||||
sessions and will simply repeat discovery. | ||||
o 25. Does GDNP discovery meet the needs of multi-hop DNS-SD? | ||||
RESOLVED: Decided not to consider this further as a GRASP protocol | ||||
issue. GRASP objectives could embed DNS-SD formats if needed. | ||||
o 26. Add a URL type to the locator options (for security bootstrap | ||||
etc.) | ||||
RESOLVED: Done, later renamed as URI. | ||||
o 27. Security of Flood multicasts (Section 2.5.6.2). | ||||
RESOLVED: added text. | ||||
o 28. Does ACP support secure link-local multicast? | ||||
RESOLVED by new text in the Security Considerations. | ||||
o 29. PEN is used to distinguish vendor options. Would it be | ||||
better to use a domain name? Anything unique will do. | ||||
RESOLVED: Simplified this by removing PEN field and changing | ||||
naming rules for objectives. | ||||
o 30. Does response to discovery require randomized delays to | ||||
mitigate amplification attacks? | ||||
RESOLVED: WG feedback is that it's unnecessary. | ||||
o 31. We have specified repeats for failed discovery etc. Is that | ||||
sufficient to deal with sleeping nodes? | ||||
RESOLVED: WG feedback is that it's unnecessary to say more. | ||||
o 32. We have one-to-one synchronization and flooding | ||||
synchronization. Do we also need selective flooding to a subset | ||||
of nodes? | ||||
RESOLVED: This will be discussed as a protocol extension in a | ||||
separate draft (draft-liu-anima-grasp-distribution). | ||||
o 33. Clarify if/when discovery needs to be repeated. | ||||
RESOLVED: Done. | ||||
o 34. Clarify what is mandatory for running in ACP, expand | ||||
discussion of security boundary when running with no ACP - might | ||||
rely on the local PKI infrastructure. | ||||
RESOLVED: Done. | ||||
o 35. State that role-based authorization of ASAs is out of scope | ||||
for GRASP. GRASP doesn't recognize/handle any "roles". | ||||
RESOLVED: Done. | ||||
o 36. Reconsider CBOR definition for PEN syntax. ( objective-name | ||||
= text / [pen, text] ; pen = uint ) | ||||
RESOLVED: See issue 29. | ||||
o 37. Are URI locators really needed? | ||||
RESOLVED: Yes, e.g. for security bootstrap discovery, but added | ||||
note that addresses are the normal case (same for FQDN locators). | ||||
o 38. Is Session ID sufficient to identify relayed responses? | ||||
Isn't the originator's address needed too? | ||||
RESOLVED: Yes, this is needed for multicast messages and their | ||||
responses. | ||||
o 39. Clarify that a node will contain one GRASP instance | ||||
supporting multiple ASAs. | ||||
RESOLVED: Done. | ||||
o 40. Add a "reason" code to the DECLINE option? | ||||
RESOLVED: Done. | ||||
o 41. What happens if an ASA cannot conveniently use one of the | ||||
GRASP mechanisms? Do we (a) add a message type to GRASP, or (b) | ||||
simply pass the discovery results to the ASA so that it can open | ||||
its own socket? | ||||
RESOLVED: Both would be possible, but (b) is preferred. | ||||
o 42. Do we need a feature whereby an ASA can bypass the ACP and | ||||
use the data plane for efficiency/throughput? This would require | ||||
discovery to return non-ACP addresses and would evade ACP | ||||
security. | ||||
RESOLVED: This is considered out of scope for GRASP, but a comment | ||||
has been added in security considerations. | ||||
o 43. Rapid mode synchronization and negotiation is currently | ||||
limited to a single objective for simplicity of design and | ||||
implementation. A future consideration is to allow multiple | ||||
objectives in rapid mode for greater efficiency. | ||||
RESOLVED: This is considered out of scope for this version. | ||||
o 44. In requirement T9, the words that encryption "may not be | ||||
required in all deployments" were removed. Is that OK?. | ||||
RESOLVED: No objections. | ||||
o 45. Device Identity Option is unused. Can we remove it | ||||
completely?. | ||||
RESOLVED: No objections. Done. | ||||
o 46. The 'initiator' field in DISCOVER, RESPONSE and FLOOD | ||||
messages is intended to assist in loop prevention. However, we | ||||
also have the loop count for that. Also, if we create a new | ||||
Session ID each time a DISCOVER or FLOOD is relayed, that ID can | ||||
be disambiguated by recipients. It would be simpler to remove the | ||||
initiator from the messages, making parsing more uniform. Is that | ||||
OK? | ||||
RESOLVED: Yes. Done. | ||||
o 47. REQUEST is a dual purpose message (request negotiation or | ||||
request synchronization). Would it be better to split this into | ||||
two different messages (and adjust various message names | ||||
accordingly)? | ||||
RESOLVED: Yes. Done. | ||||
o 48. Should the Appendix "Capability Analysis of Current | ||||
Protocols" be deleted before RFC publication? | ||||
RESOLVED: No (per WG meeting at IETF 96). | ||||
o 49. Section 2.5.1 Should say more about signaling between two | ||||
autonomic networks/domains. | ||||
RESOLVED: Description of separate GRASP instance added. | ||||
o 50. Is Rapid mode limited to on-link only? What happens if first | ||||
discovery responder does not support Rapid Mode? Section 2.5.5, | ||||
Section 2.5.6) | ||||
RESOLVED: Not limited to on-link. First responder wins. | ||||
o 51. Should flooded objectives have a time-to-live before they are | ||||
deleted from the flood cache? And should they be tagged in the | ||||
cache with their source locator? | ||||
RESOLVED: TTL added to Flood (and Discovery Response) messages. | ||||
Cached flooded objectives must be tagged with their originating | ||||
ASA locator, and multiple copies must be kept if necessary. | ||||
o 52. Describe in detail what is allowed and disallowed in an | ||||
insecure instance of GRASP. | ||||
RESOLVED: Done. | ||||
o 53. Tune IANA Considerations to support early assignment request. | ||||
o 54. Is there a highly unlikely race condition if two peers | ||||
simultaneously choose the same Session ID and send each other | ||||
simultaneous M_REQ_NEG messages? | ||||
RESOLVED: Yes. Enhanced text on Session ID generation, and added | ||||
precaution when receiving a Request message. | ||||
o 55. Could discovery be performed over TCP? | ||||
RESOLVED: Unicast discovery added as an option. | ||||
o 56. Change Session-ID to 32 bits? | ||||
RESOLVED: Done. | ||||
o 57. Add M_INVALID message? | ||||
RESOLVED: Done. | ||||
o 58. Maximum message size? | ||||
RESOLVED by specifying default maximum message size (2048 bytes). | ||||
o 59. Add F_NEG_DRY flag to specify a "dry run" objective?. | ||||
RESOLVED: Done. | ||||
o 60. Change M_FLOOD syntax to associate a locator with each | ||||
objective? | ||||
RESOLVED: Done. | ||||
o 61. Is the SONN constrained instance really needed? | ||||
RESOLVED: Retained but only as an option. | ||||
o 62. Is it helpful to tag descriptive text with message names | ||||
(M_DISCOVER etc.)? | ||||
RESOLVED: Yes, done in various parts of the text. | ||||
o 63. Should encryption be MUST instead of SHOULD in Section 2.5.1 | ||||
and Section 2.5.1? | ||||
RESOLVED: Yes, MUST implement in both cases. | ||||
o 64. Should more security text be moved from the main text into | ||||
the Security Considerations? | ||||
RESOLVED: No, on AD advice. | ||||
o 65. Do we need to formally restrict Unicode characters allowed in | ||||
objective names? | ||||
RESOLVED: No, but need to point to guidance from PRECIS WG. | ||||
o 66. Split requirements into separate document? | ||||
RESOLVED: No, on AD advice. | ||||
o 67. Remove normative dependency on draft-greevenbosch-appsawg- | ||||
cbor-cddl? | ||||
RESOLVED: No, on AD advice. In worst case, fix at AUTH48. | ||||
Appendix C. Change log [RFC Editor: Please remove] | ||||
draft-ietf-anima-grasp-15, 2017-07-07: | ||||
Updates following additional IESG comments: | ||||
Security (Eric Rescorla): missing brittleness of group security | ||||
concept, attack via compromised member. | ||||
TSV (Mirja Kuehlewind): clarification on the use of UDP, TCP, mandate | ||||
use of TCP (or other reliable transport). | ||||
Clarified that in ACP, UDP is not used at all. | ||||
Clarified that GRASP itself needs TCP listen port (was previously | ||||
written as if this was optional). | ||||
draft-ietf-anima-grasp-14, 2017-07-02: | ||||
Updates following additional IESG comments: | ||||
Updated 2.5.1 and 2.5.2 based on IESG security feedback (specify | ||||
dependency against security substrate). | ||||
Strengthened requirement for reliable transport protocol. | ||||
draft-ietf-anima-grasp-13, 2017-06-06: | ||||
Updates following additional IESG comments: | ||||
Removed all mention of TLS, including SONN, since it was under- | ||||
specified. | ||||
Clarified other text about trust and security model. | ||||
Banned Rapid Mode when multicast is insecure. | ||||
Explained use of M_INVALID to support extensibility | ||||
Corrected details on discovery cache TTL and discovery timeout. | ||||
Improved description of multicast UDP w.r.t. RFC8085. | ||||
Clarified when transport connections are opened or closed. | ||||
Noted that IPPROTO values come from the Protocol Numbers registry | ||||
Protocol change: Added protocol and port numbers to URI locator. | ||||
Removed inaccurate text about routing protocols | ||||
Moved Requirements section to an Appendix. | ||||
Other editorial and technical clarifications. | ||||
draft-ietf-anima-grasp-12, 2017-05-19: | ||||
Updates following IESG comments: | ||||
Clarified that GRASP runs in a single addressing realm | ||||
Improved wording about FQDN resolution, clarified that URI usage is | ||||
out of scope. | ||||
Clarified description of negotiation timeout. | ||||
Noted that 'dry run' semantics are ASA-dependent | ||||
Made the ACP a normative reference | ||||
Clarified that LL multicasts are limited to GRASP interfaces | ||||
Unicast UDP moved out of scope | ||||
Editorial clarifications | ||||
draft-ietf-anima-grasp-11, 2017-03-30: | ||||
Updates following IETF 98 discussion: | ||||
Encryption changed to a MUST implement. | ||||
Pointed to guidance on UTF-8 names. | ||||
draft-ietf-anima-grasp-10, 2017-03-10: | ||||
Updates following IETF Last call: | ||||
Protocol change: Specify that an objective with no initial value | ||||
should have its value field set to CBOR 'null'. | ||||
Protocol change: Specify behavior on receiving unrecognized message | ||||
type. | ||||
Noted that UTF-8 names are matched byte-for-byte. | ||||
Added brief guidance for Expert Reviewer of new generic objectives. | ||||
Numerous editorial improvements and clarifications and minor text | ||||
rearrangements, none intended to change the meaning. | ||||
draft-ietf-anima-grasp-09, 2016-12-15: | ||||
Protocol change: Add F_NEG_DRY flag to specify a "dry run" objective. | ||||
Protocol change: Change M_FLOOD syntax to associate a locator with | ||||
each objective. | ||||
Concentrated mentions of TLS in one section, with all details out of | ||||
scope. | ||||
Clarified text around constrained instances of GRASP. | ||||
Strengthened text restricting LL addresses in locator options. | ||||
Clarified description of rapid mode processsing. | ||||
Specified that cached discovery results should not be returned on the | ||||
same interface where they were learned. | ||||
Shortened text in "High Level Design Choices" | ||||
Dropped the word 'kernel' to avoid confusion with o/s kernel mode. | ||||
Editorial improvements and clarifications. | ||||
draft-ietf-anima-grasp-08, 2016-10-30: | ||||
Protocol change: Added M_INVALID message. | ||||
Protocol change: Increased Session ID space to 32 bits. | ||||
Enhanced rules to avoid Session ID clashes. | ||||
Corrected and completed description of timeouts for Request messages. | ||||
Improved wording about exponential backoff and DoS. | ||||
Clarified that discovery relaying is not done by limited security | ||||
instances. | ||||
Corrected and expanded explanation of port used for Discovery | ||||
Response. | ||||
Noted that Discovery message could be sent unicast in special cases. | ||||
Added paragraph on extensibility. | ||||
Specified default maximum message size. | ||||
Added Appendix for sample messages. | ||||
Added short protocol overview. | ||||
Editorial fixes, including minor re-ordering for readability. | ||||
draft-ietf-anima-grasp-07, 2016-09-13: | ||||
Protocol change: Added TTL field to Flood message (issue 51). | ||||
Protocol change: Added Locator option to Flood message (issue 51). | ||||
Protocol change: Added TTL field to Discovery Response message | ||||
(corrollary to issue 51). | ||||
Clarified details of rapid mode (issues 43 and 50). | ||||
Description of inter-domain GRASP instance added (issue 49). | ||||
Description of limited security GRASP instances added (issue 52). | ||||
Strengthened advice to use TCP rather than UDP. | ||||
Updated IANA considerations and text about well-known port usage | ||||
(issue 53). | ||||
Amended text about ASA authorization and roles to allow for | ||||
overlapping ASAs. | ||||
Added text recommending that Flood should be repeated periodically. | ||||
Editorial fixes. | ||||
draft-ietf-anima-grasp-06, 2016-06-27: | ||||
Added text on discovery cache timeouts. | ||||
Noted that ASAs that are only initiators do not need to respond to | ||||
discovery message. | ||||
Added text on unexpected address changes. | ||||
Added text on robust implementation. | ||||
Clarifications and editorial fixes for numerous review comments | ||||
Added open issues for some review comments. | ||||
draft-ietf-anima-grasp-05, 2016-05-13: | ||||
Noted in requirement T1 that it should be possible to implement ASAs | ||||
independently as user space programs. | ||||
Protocol change: Added protocol number and port to discovery | ||||
response. Updated protocol description, CDDL and IANA considerations | ||||
accordingly. | ||||
Clarified that discovery and flood multicasts are handled by the | ||||
GRASP core, not directly by ASAs. | ||||
Clarified that a node may discover an objective without supporting it | ||||
for synchronization or negotiation. | ||||
Added Implementation Status section. | ||||
Added reference to SCSP. | ||||
Editorial fixes. | ||||
draft-ietf-anima-grasp-04, 2016-03-11: | ||||
Protocol change: Restored initiator field in certain messages and | ||||
adjusted relaying rules to provide complete loop detection. | ||||
Updated IANA Considerations. | ||||
draft-ietf-anima-grasp-03, 2016-02-24: | ||||
Protocol change: Removed initiator field from certain messages and | ||||
adjusted relaying requirement to simplify loop detection. Also | ||||
clarified narrative explanation of discovery relaying. | ||||
Protocol change: Split Request message into two (Request Negotiation | ||||
and Request Synchronization) and updated other message names for | ||||
clarity. | ||||
Protocol change: Dropped unused Device ID option. | ||||
Further clarified text on transport layer usage. | ||||
New text about multicast insecurity in Security Considerations. | ||||
Various other clarifications and editorial fixes, including moving | ||||
some material to Appendix. | ||||
draft-ietf-anima-grasp-02, 2016-01-13: | ||||
Resolved numerous issues according to WG discussions. | ||||
Renumbered requirements, added D9. | ||||
Protocol change: only allow one objective in rapid mode. | ||||
Protocol change: added optional error string to DECLINE option. | ||||
Protocol change: removed statement that seemed to say that a Request | ||||
not preceded by a Discovery should cause a Discovery response. That | ||||
made no sense, because there is no way the initiator would know where | ||||
to send the Request. | ||||
Protocol change: Removed PEN option from vendor objectives, changed | ||||
naming rule accordingly. | ||||
Protocol change: Added FLOOD message to simplify coding. | ||||
Protocol change: Added SYNCH message to simplify coding. | ||||
Protocol change: Added initiator id to DISCOVER, RESPONSE and FLOOD | ||||
messages. But also allowed the relay process for DISCOVER and FLOOD | ||||
to regenerate a Session ID. | ||||
Protocol change: Require that discovered addresses must be global | ||||
(except during bootstrap). | ||||
Protocol change: Receiver of REQUEST message must close socket if no | ||||
ASA is listening for the objective. | ||||
Protocol change: Simplified Waiting message. | ||||
Protocol change: Added No Operation message. | ||||
Renamed URL locator type as URI locator type. | ||||
Updated CDDL definition. | ||||
Various other clarifications and editorial fixes. | ||||
draft-ietf-anima-grasp-01, 2015-10-09: | ||||
Updated requirements after list discussion. | ||||
Changed from TLV to CBOR format - many detailed changes, added co- | ||||
author. | ||||
Tightened up loop count and timeouts for various cases. | ||||
Noted that GRASP does not provide transactional integrity. | ||||
Various other clarifications and editorial fixes. | ||||
draft-ietf-anima-grasp-00, 2015-08-14: | ||||
File name and protocol name changed following WG adoption. | ||||
Added URL locator type. | ||||
draft-carpenter-anima-gdn-protocol-04, 2015-06-21: | ||||
Tuned wording around hierarchical structure. | ||||
Changed "device" to "ASA" in many places. | ||||
Reformulated requirements to be clear that the ASA is the main | ||||
customer for signaling. | ||||
Added requirement for flooding unsolicited synch, and added it to | ||||
protocol spec. Recognized DNCP as alternative for flooding synch | ||||
data. | ||||
Requirements clarified, expanded and rearranged following design team | ||||
discussion. | ||||
Clarified that GDNP discovery must not be a prerequisite for GDNP | ||||
negotiation or synchronization (resolved issue 13). | ||||
Specified flag bits for objective options (resolved issue 15). | ||||
Clarified usage of ACP vs TLS/DTLS and TCP vs UDP (resolved issues | ||||
9,10,11). | ||||
Updated DNCP description from latest DNCP draft. | ||||
Editorial improvements. | ||||
draft-carpenter-anima-gdn-protocol-03, 2015-04-20: | ||||
Removed intrinsic security, required external security | ||||
Format changes to allow DNCP co-existence | ||||
Recognized DNS-SD as alternative discovery method. | ||||
Editorial improvements | ||||
draft-carpenter-anima-gdn-protocol-02, 2015-02-19: | ||||
Tuned requirements to clarify scope, | ||||
Clarified relationship between types of objective, | ||||
Clarified that objectives may be simple values or complex data | ||||
structures, | ||||
Improved description of objective options, | ||||
Added loop-avoidance mechanisms (loop count and default timeout, | ||||
limitations on discovery relaying and on unsolicited responses), | ||||
Allow multiple discovery objectives in one response, | ||||
Provided for missing or multiple discovery responses, | [RFC8264] Saint-Andre, P. and M. Blanchet, "PRECIS Framework: | |||
Preparation, Enforcement, and Comparison of | ||||
Internationalized Strings in Application Protocols", | ||||
RFC 8264, DOI 10.17487/RFC8264, October 2017, | ||||
<https://www.rfc-editor.org/info/rfc8264>. | ||||
Indicated how modes such as "dry run" should be supported, | [RFC8368] Eckert, T., Ed. and M. Behringer, "Using an Autonomic | |||
Control Plane for Stable Connectivity of Network | ||||
Operations, Administration, and Maintenance (OAM)", | ||||
RFC 8368, DOI 10.17487/RFC8368, May 2018, | ||||
<https://www.rfc-editor.org/info/rfc8368>. | ||||
Minor editorial and technical corrections and clarifications, | [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | |||
Richardson, M., Jiang, S., Lemon, T., and T. Winters, | ||||
"Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | ||||
RFC 8415, DOI 10.17487/RFC8415, November 2018, | ||||
<https://www.rfc-editor.org/info/rfc8415>. | ||||
Reorganized future work list. | [RFC8991] Carpenter, B., Liu, B., Ed., Wang, W., and X. Gong, | |||
"GeneRic Autonomic Signaling Protocol Application Program | ||||
Interface (GRASP API)", RFC 8991, DOI 10.17487/RFC8991, | ||||
May 2021, <https://www.rfc-editor.org/info/rfc8991>. | ||||
draft-carpenter-anima-gdn-protocol-01, restructured the logical flow | [RFC8993] Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia, | |||
of the document, updated to describe synchronization completely, add | L., and J. Nobre, "A Reference Model for Autonomic | |||
unsolicited responses, numerous corrections and clarifications, | Networking", RFC 8993, DOI 10.17487/RFC8993, May 2021, | |||
expanded future work list, 2015-01-06. | <https://www.rfc-editor.org/info/rfc8993>. | |||
draft-carpenter-anima-gdn-protocol-00, combination of draft-jiang- | [RFC8995] Pritikin, M., Richardson, M., Eckert, T., Behringer, M., | |||
config-negotiation-ps-03 and draft-jiang-config-negotiation-protocol- | and K. Watsen, "Bootstrapping Remote Secure Key | |||
02, 2014-10-08. | Infrastructure (BRSKI)", RFC 8995, DOI 10.17487/RFC8995, | |||
May 2021, <https://www.rfc-editor.org/info/rfc8995>. | ||||
Appendix D. Example Message Formats | Appendix A. Example Message Formats | |||
For readers unfamiliar with CBOR, this appendix shows a number of | For readers unfamiliar with CBOR, this appendix shows a number of | |||
example GRASP messages conforming to the CDDL syntax given in | example GRASP messages conforming to the CDDL syntax given in | |||
Section 5. Each message is shown three times in the following | Section 4. Each message is shown three times in the following | |||
formats: | formats: | |||
1. CBOR diagnostic notation. | 1. CBOR diagnostic notation. | |||
2. Similar, but showing the names of the constants. (Details of the | 2. Similar, but showing the names of the constants. (Details of the | |||
flag bit encoding are omitted.) | flag bit encoding are omitted.) | |||
3. Hexadecimal version of the CBOR wire format. | 3. Hexadecimal version of the CBOR wire format. | |||
Long lines are split for display purposes only. | Long lines are split for display purposes only. | |||
D.1. Discovery Example | A.1. Discovery Example | |||
The initiator (2001:db8:f000:baaa:28cc:dc4c:9703:6781) multicasts a | The initiator (2001:db8:f000:baaa:28cc:dc4c:9703:6781) multicasts a | |||
discovery message looking for objective EX1: | Discovery message looking for objective EX1: | |||
[1, 13948744, h'20010db8f000baaa28ccdc4c97036781', ["EX1", 5, 2, 0]] | [1, 13948744, h'20010db8f000baaa28ccdc4c97036781', ["EX1", 5, 2, 0]] | |||
[M_DISCOVERY, 13948744, h'20010db8f000baaa28ccdc4c97036781', | [M_DISCOVERY, 13948744, h'20010db8f000baaa28ccdc4c97036781', | |||
["EX1", F_SYNCH_bits, 2, 0]] | ["EX1", F_SYNCH_bits, 2, 0]] | |||
h'84011a00d4d7485020010db8f000baaa28ccdc4c970367818463455831050200' | h'84011a00d4d7485020010db8f000baaa28ccdc4c970367818463455831050200' | |||
A peer (2001:0db8:f000:baaa:f000:baaa:f000:baaa) responds with a | A peer (2001:0db8:f000:baaa:f000:baaa:f000:baaa) responds with a | |||
locator: | locator: | |||
[2, 13948744, h'20010db8f000baaa28ccdc4c97036781', 60000, | [2, 13948744, h'20010db8f000baaa28ccdc4c97036781', 60000, | |||
[103, h'20010db8f000baaaf000baaaf000baaa', 6, 49443]] | [103, h'20010db8f000baaaf000baaaf000baaa', 6, 49443]] | |||
[M_RESPONSE, 13948744, h'20010db8f000baaa28ccdc4c97036781', 60000, | [M_RESPONSE, 13948744, h'20010db8f000baaa28ccdc4c97036781', 60000, | |||
[O_IPv6_LOCATOR, h'20010db8f000baaaf000baaaf000baaa', | [O_IPv6_LOCATOR, h'20010db8f000baaaf000baaaf000baaa', | |||
IPPROTO_TCP, 49443]] | IPPROTO_TCP, 49443]] | |||
h'85021a00d4d7485020010db8f000baaa28ccdc4c9703678119ea6084186750 | h'85021a00d4d7485020010db8f000baaa28ccdc4c9703678119ea6084186750 | |||
20010db8f000baaaf000baaaf000baaa0619c123' | 20010db8f000baaaf000baaaf000baaa0619c123' | |||
D.2. Flood Example | A.2. Flood Example | |||
The initiator multicasts a flood message. The single objective has a | The initiator multicasts a Flood Synchronization message. The single | |||
null locator. There is no response: | objective has a null locator. There is no response: | |||
[9, 3504974, h'20010db8f000baaa28ccdc4c97036781', 10000, | [9, 3504974, h'20010db8f000baaa28ccdc4c97036781', 10000, | |||
[["EX1", 5, 2, ["Example 1 value=", 100]],[] ] ] | [["EX1", 5, 2, ["Example 1 value=", 100]],[] ] ] | |||
[M_FLOOD, 3504974, h'20010db8f000baaa28ccdc4c97036781', 10000, | [M_FLOOD, 3504974, h'20010db8f000baaa28ccdc4c97036781', 10000, | |||
[["EX1", F_SYNCH_bits, 2, ["Example 1 value=", 100]],[] ] ] | [["EX1", F_SYNCH_bits, 2, ["Example 1 value=", 100]],[] ] ] | |||
h'86091a00357b4e5020010db8f000baaa28ccdc4c97036781192710 | h'85091a00357b4e5020010db8f000baaa28ccdc4c97036781192710 | |||
828463455831050282704578616d706c6520312076616c75653d186480' | 828463455831050282704578616d706c6520312076616c75653d186480' | |||
D.3. Synchronization Example | A.3. Synchronization Example | |||
Following successful discovery of objective EX2, the initiator | Following successful discovery of objective EX2, the initiator | |||
unicasts a request: | unicasts a Request Synchronization message: | |||
[4, 4038926, ["EX2", 5, 5, 0]] | [4, 4038926, ["EX2", 5, 5, 0]] | |||
[M_REQ_SYN, 4038926, ["EX2", F_SYNCH_bits, 5, 0]] | [M_REQ_SYN, 4038926, ["EX2", F_SYNCH_bits, 5, 0]] | |||
h'83041a003da10e8463455832050500' | h'83041a003da10e8463455832050500' | |||
The peer responds with a value: | The peer responds with a value: | |||
[8, 4038926, ["EX2", 5, 5, ["Example 2 value=", 200]]] | [8, 4038926, ["EX2", 5, 5, ["Example 2 value=", 200]]] | |||
[M_SYNCH, 4038926, ["EX2", F_SYNCH_bits, 5, ["Example 2 value=", 200]]] | [M_SYNCH, 4038926, ["EX2", F_SYNCH_bits, 5, ["Example 2 value=", 200]]] | |||
h'83081a003da10e8463455832050582704578616d706c6520322076616c75653d18c8' | h'83081a003da10e8463455832050582704578616d706c6520322076616c75653d18c8' | |||
D.4. Simple Negotiation Example | A.4. Simple Negotiation Example | |||
Following successful discovery of objective EX3, the initiator | Following successful discovery of objective EX3, the initiator | |||
unicasts a request: | unicasts a Request Negotiation message: | |||
[3, 802813, ["EX3", 3, 6, ["NZD", 47]]] | [3, 802813, ["EX3", 3, 6, ["NZD", 47]]] | |||
[M_REQ_NEG, 802813, ["EX3", F_NEG_bits, 6, ["NZD", 47]]] | [M_REQ_NEG, 802813, ["EX3", F_NEG_bits, 6, ["NZD", 47]]] | |||
h'83031a000c3ffd8463455833030682634e5a44182f' | h'83031a000c3ffd8463455833030682634e5a44182f' | |||
The peer responds with immediate acceptance. Note that no objective | The peer responds with immediate acceptance. Note that no objective | |||
is needed, because the initiator's request was accepted without | is needed because the initiator's request was accepted without | |||
change: | change: | |||
[6, 802813, [101]] | [6, 802813, [101]] | |||
[M_END , 802813, [O_ACCEPT]] | [M_END , 802813, [O_ACCEPT]] | |||
h'83061a000c3ffd811865' | h'83061a000c3ffd811865' | |||
D.5. Complete Negotiation Example | A.5. Complete Negotiation Example | |||
Again the initiator unicasts a request: | Again the initiator unicasts a Request Negotiation message: | |||
[3, 13767778, ["EX3", 3, 6, ["NZD", 410]]] | [3, 13767778, ["EX3", 3, 6, ["NZD", 410]]] | |||
[M_REQ_NEG, 13767778, ["EX3", F_NEG_bits, 6, ["NZD", 410]]] | [M_REQ_NEG, 13767778, ["EX3", F_NEG_bits, 6, ["NZD", 410]]] | |||
h'83031a00d214628463455833030682634e5a4419019a' | h'83031a00d214628463455833030682634e5a4419019a' | |||
The responder starts to negotiate (making an offer): | The responder starts to negotiate (making an offer): | |||
[5, 13767778, ["EX3", 3, 6, ["NZD", 80]]] | [5, 13767778, ["EX3", 3, 6, ["NZD", 80]]] | |||
[M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 6, ["NZD", 80]]] | [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 6, ["NZD", 80]]] | |||
h'83051a00d214628463455833030682634e5a441850' | h'83051a00d214628463455833030682634e5a441850' | |||
skipping to change at page 73, line 26 ¶ | skipping to change at line 2575 ¶ | |||
[6, 13767778, [102, "Insufficient funds"]] | [6, 13767778, [102, "Insufficient funds"]] | |||
[M_END , 13767778, [O_DECLINE, "Insufficient funds"]] | [M_END , 13767778, [O_DECLINE, "Insufficient funds"]] | |||
h'83061a00d2146282186672496e73756666696369656e742066756e6473' | h'83061a00d2146282186672496e73756666696369656e742066756e6473' | |||
This negotiation has failed. If either side had sent [M_END, | This negotiation has failed. If either side had sent [M_END, | |||
13767778, [O_ACCEPT]] it would have succeeded, converging on the | 13767778, [O_ACCEPT]] it would have succeeded, converging on the | |||
objective value in the preceding M_NEGOTIATE. Note that apart from | objective value in the preceding M_NEGOTIATE. Note that apart from | |||
the initial M_REQ_NEG, the process is symmetrical. | the initial M_REQ_NEG, the process is symmetrical. | |||
Appendix E. Requirement Analysis of Discovery, Synchronization and | Appendix B. Requirement Analysis of Discovery, Synchronization, and | |||
Negotiation | Negotiation | |||
This section discusses the requirements for discovery, negotiation | This section discusses the requirements for discovery, negotiation, | |||
and synchronization capabilities. The primary user of the protocol | and synchronization capabilities. The primary user of the protocol | |||
is an autonomic service agent (ASA), so the requirements are mainly | is an Autonomic Service Agent (ASA), so the requirements are mainly | |||
expressed as the features needed by an ASA. A single physical device | expressed as the features needed by an ASA. A single physical device | |||
might contain several ASAs, and a single ASA might manage several | might contain several ASAs, and a single ASA might manage several | |||
technical objectives. If a technical objective is managed by several | technical objectives. If a technical objective is managed by several | |||
ASAs, any necessary coordination is outside the scope of the GRASP | ASAs, any necessary coordination is outside the scope of GRASP. | |||
signaling protocol. Furthermore, requirements for ASAs themselves, | Furthermore, requirements for ASAs themselves, such as the processing | |||
such as the processing of Intent [RFC7575], are out of scope for the | of Intent [RFC7575], are out of scope for the present document. | |||
present document. | ||||
E.1. Requirements for Discovery | B.1. Requirements for Discovery | |||
D1. ASAs may be designed to manage any type of configurable device | D1. ASAs may be designed to manage any type of configurable device | |||
or software, as required in Appendix E.2. A basic requirement is | or software, as required in Appendix B.2. A basic requirement | |||
therefore that the protocol can represent and discover any kind of | is therefore that the protocol can represent and discover any | |||
technical objective (as defined in Section 2.1) among arbitrary | kind of technical objective (as defined in Section 2.1) among | |||
subsets of participating nodes. | arbitrary subsets of participating nodes. | |||
In an autonomic network we must assume that when a device starts up | In an Autonomic Network, we must assume that when a device | |||
it has no information about any peer devices, the network structure, | starts up, it has no information about any peer devices, the | |||
or what specific role it must play. The ASA(s) inside the device are | network structure, or the specific role it must play. The | |||
in the same situation. In some cases, when a new application session | ASA(s) inside the device are in the same situation. In some | |||
starts up within a device, the device or ASA may again lack | cases, when a new application session starts within a device, | |||
information about relevant peers. For example, it might be necessary | the device or ASA may again lack information about relevant | |||
to set up resources on multiple other devices, coordinated and | peers. For example, it might be necessary to set up resources | |||
matched to each other so that there is no wasted resource. Security | on multiple other devices, coordinated and matched to each | |||
settings might also need updating to allow for the new device or | other so that there is no wasted resource. Security settings | |||
user. The relevant peers may be different for different technical | might also need updating to allow for the new device or user. | |||
objectives. Therefore discovery needs to be repeated as often as | The relevant peers may be different for different technical | |||
necessary to find peers capable of acting as counterparts for each | objectives. Therefore discovery needs to be repeated as often | |||
objective that a discovery initiator needs to handle. From this | as necessary to find peers capable of acting as counterparts | |||
background we derive the next three requirements: | for each objective that a discovery initiator needs to handle. | |||
From this background we derive the next three requirements: | ||||
D2. When an ASA first starts up, it may have no knowledge of the | D2. When an ASA first starts up, it may have no knowledge of the | |||
specific network to which it is attached. Therefore the discovery | specific network to which it is attached. Therefore the | |||
process must be able to support any network scenario, assuming only | discovery process must be able to support any network scenario, | |||
that the device concerned is bootstrapped from factory condition. | assuming only that the device concerned is bootstrapped from | |||
factory condition. | ||||
D3. When an ASA starts up, it must require no configured location | D3. When an ASA starts up, it must require no configured location | |||
information about any peers in order to discover them. | information about any peers in order to discover them. | |||
D4. If an ASA supports multiple technical objectives, relevant peers | D4. If an ASA supports multiple technical objectives, relevant | |||
may be different for different discovery objectives, so discovery | peers may be different for different discovery objectives, so | |||
needs to be performed separately to find counterparts for each | discovery needs to be performed separately to find counterparts | |||
objective. Thus, there must be a mechanism by which an ASA can | for each objective. Thus, there must be a mechanism by which | |||
separately discover peer ASAs for each of the technical objectives | an ASA can separately discover peer ASAs for each of the | |||
that it needs to manage, whenever necessary. | technical objectives that it needs to manage, whenever | |||
necessary. | ||||
D5. Following discovery, an ASA will normally perform negotiation or | D5. Following discovery, an ASA will normally perform negotiation | |||
synchronization for the corresponding objectives. The design should | or synchronization for the corresponding objectives. The | |||
allow for this by conveniently linking discovery to negotiation and | design should allow for this by conveniently linking discovery | |||
synchronization. It may provide an optional mechanism to combine | to negotiation and synchronization. It may provide an optional | |||
discovery and negotiation/synchronization in a single protocol | mechanism to combine discovery and negotiation/synchronization | |||
exchange. | in a single protocol exchange. | |||
D6. Some objectives may only be significant on the local link, but | D6. Some objectives may only be significant on the local link, but | |||
others may be significant across the routed network and require off- | others may be significant across the routed network and require | |||
link operations. Thus, the relevant peers might be immediate | off-link operations. Thus, the relevant peers might be | |||
neighbors on the same layer 2 link, or they might be more distant and | immediate neighbors on the same layer 2 link, or they might be | |||
only accessible via layer 3. The mechanism must therefore provide | more distant and only accessible via layer 3. The mechanism | |||
both on-link and off-link discovery of ASAs supporting specific | must therefore provide both on-link and off-link discovery of | |||
technical objectives. | ASAs supporting specific technical objectives. | |||
D7. The discovery process should be flexible enough to allow for | D7. The discovery process should be flexible enough to allow for | |||
special cases, such as the following: | special cases, such as the following: | |||
o During initialization, a device must be able to establish mutual | * During initialization, a device must be able to establish | |||
trust with autonomic nodes elsewhere in the network and | mutual trust with autonomic nodes elsewhere in the network | |||
participate in an authentication mechanism. Although this will | and participate in an authentication mechanism. Although | |||
inevitably start with a discovery action, it is a special case | this will inevitably start with a discovery action, it is a | |||
precisely because trust is not yet established. This topic is the | special case precisely because trust is not yet established. | |||
subject of [I-D.ietf-anima-bootstrapping-keyinfra]. We require | This topic is the subject of [RFC8995]. We require that | |||
that once trust has been established for a device, all ASAs within | once trust has been established for a device, all ASAs | |||
the device inherit the device's credentials and are also trusted. | within the device inherit the device's credentials and are | |||
This does not preclude the device having multiple credentials. | also trusted. This does not preclude the device having | |||
multiple credentials. | ||||
o Depending on the type of network involved, discovery of other | * Depending on the type of network involved, discovery of | |||
central functions might be needed, such as the Network Operations | other central functions might be needed, such as the Network | |||
Center (NOC) [I-D.ietf-anima-stable-connectivity]. The protocol | Operations Center (NOC) [RFC8368]. The protocol must be | |||
must be capable of supporting such discovery during | capable of supporting such discovery during initialization, | |||
initialization, as well as discovery during ongoing operation. | as well as discovery during ongoing operation. | |||
D8. The discovery process must not generate excessive traffic and | D8. The discovery process must not generate excessive traffic and | |||
must take account of sleeping nodes. | must take account of sleeping nodes. | |||
D9. There must be a mechanism for handling stale discovery results. | D9. There must be a mechanism for handling stale discovery results. | |||
E.2. Requirements for Synchronization and Negotiation Capability | B.2. Requirements for Synchronization and Negotiation Capability | |||
Autonomic networks need to be able to manage many different types of | Autonomic Networks need to be able to manage many different types of | |||
parameter and consider many dimensions, such as latency, load, unused | parameters and consider many dimensions, such as latency, load, | |||
or limited resources, conflicting resource requests, security | unused or limited resources, conflicting resource requests, security | |||
settings, power saving, load balancing, etc. Status information and | settings, power saving, load balancing, etc. Status information and | |||
resource metrics need to be shared between nodes for dynamic | resource metrics need to be shared between nodes for dynamic | |||
adjustment of resources and for monitoring purposes. While this | adjustment of resources and for monitoring purposes. While this | |||
might be achieved by existing protocols when they are available, the | might be achieved by existing protocols when they are available, the | |||
new protocol needs to be able to support parameter exchange, | new protocol needs to be able to support parameter exchange, | |||
including mutual synchronization, even when no negotiation as such is | including mutual synchronization, even when no negotiation as such is | |||
required. In general, these parameters do not apply to all | required. In general, these parameters do not apply to all | |||
participating nodes, but only to a subset. | participating nodes, but only to a subset. | |||
SN1. A basic requirement for the protocol is therefore the ability | SN1. A basic requirement for the protocol is therefore the ability | |||
to represent, discover, synchronize and negotiate almost any kind of | to represent, discover, synchronize, and negotiate almost any | |||
network parameter among selected subsets of participating nodes. | kind of network parameter among selected subsets of | |||
participating nodes. | ||||
SN2. Negotiation is an iterative request/response process that must | SN2. Negotiation is an iterative request/response process that must | |||
be guaranteed to terminate (with success or failure). While tie- | be guaranteed to terminate (with success or failure). While | |||
breaking rules must be defined specifically for each use case, the | tie-breaking rules must be defined specifically for each use | |||
protocol should have some general mechanisms in support of loop and | case, the protocol should have some general mechanisms in | |||
deadlock prevention, such as hop count limits or timeouts. | support of loop and deadlock prevention, such as hop-count | |||
limits or timeouts. | ||||
SN3. Synchronization must be possible for groups of nodes ranging | SN3. Synchronization must be possible for groups of nodes ranging | |||
from small to very large. | from small to very large. | |||
SN4. To avoid "reinventing the wheel", the protocol should be able | SN4. To avoid "reinventing the wheel", the protocol should be able | |||
to encapsulate the data formats used by existing configuration | to encapsulate the data formats used by existing configuration | |||
protocols (such as NETCONF/YANG) in cases where that is convenient. | protocols (such as Network Configuration Protocol (NETCONF) and | |||
YANG) in cases where that is convenient. | ||||
SN5. Human intervention in complex situations is costly and error- | SN5. Human intervention in complex situations is costly and error | |||
prone. Therefore, synchronization or negotiation of parameters | prone. Therefore, synchronization or negotiation of parameters | |||
without human intervention is desirable whenever the coordination of | without human intervention is desirable whenever the | |||
multiple devices can improve overall network performance. It follows | coordination of multiple devices can improve overall network | |||
that the protocol's resource requirements must be small enough to fit | performance. It follows that the protocol's resource | |||
in any device that would otherwise need human intervention. The | requirements must be small enough to fit in any device that | |||
issue of running in constrained nodes is discussed in | would otherwise need human intervention. The issue of running | |||
[I-D.ietf-anima-reference-model]. | in constrained nodes is discussed in [RFC8993]. | |||
SN6. Human intervention in large networks is often replaced by use | SN6. Human intervention in large networks is often replaced by use | |||
of a top-down network management system (NMS). It therefore follows | of a top-down network management system (NMS). It therefore | |||
that the protocol, as part of the Autonomic Networking | follows that the protocol, as part of the Autonomic Networking | |||
Infrastructure, should be capable of running in any device that would | Infrastructure, should be capable of running in any device that | |||
otherwise be managed by an NMS, and that it can co-exist with an NMS, | would otherwise be managed by an NMS, and that it can coexist | |||
and with protocols such as SNMP and NETCONF. | with an NMS and with protocols such as SNMP and NETCONF. | |||
SN7. Specific autonomic features are expected to be implemented by | SN7. Specific autonomic features are expected to be implemented by | |||
individual ASAs, but the protocol must be general enough to allow | individual ASAs, but the protocol must be general enough to | |||
them. Some examples follow: | allow them. Some examples follow: | |||
o Dependencies and conflicts: In order to decide upon a | * Dependencies and conflicts: In order to decide upon a | |||
configuration for a given device, the device may need information | configuration for a given device, the device may need | |||
from neighbors. This can be established through the negotiation | information from neighbors. This can be established through | |||
procedure, or through synchronization if that is sufficient. | the negotiation procedure, or through synchronization if | |||
However, a given item in a neighbor may depend on other | that is sufficient. However, a given item in a neighbor may | |||
information from its own neighbors, which may need another | depend on other information from its own neighbors, which | |||
negotiation or synchronization procedure to obtain or decide. | may need another negotiation or synchronization procedure to | |||
Therefore, there are potential dependencies and conflicts among | obtain or decide. Therefore, there are potential | |||
negotiation or synchronization procedures. Resolving dependencies | dependencies and conflicts among negotiation or | |||
and conflicts is a matter for the individual ASAs involved. To | synchronization procedures. Resolving dependencies and | |||
allow this, there need to be clear boundaries and convergence | conflicts is a matter for the individual ASAs involved. To | |||
mechanisms for negotiations. Also some mechanisms are needed to | allow this, there need to be clear boundaries and | |||
avoid loop dependencies or uncontrolled growth in a tree of | convergence mechanisms for negotiations. Also some | |||
dependencies. It is the ASA designer's responsibility to avoid or | mechanisms are needed to avoid loop dependencies or | |||
detect looping dependencies or excessive growth of dependency | uncontrolled growth in a tree of dependencies. It is the | |||
trees. The protocol's role is limited to bilateral signaling | ASA designer's responsibility to avoid or detect looping | |||
between ASAs, and the avoidance of loops during bilateral | dependencies or excessive growth of dependency trees. The | |||
signaling. | protocol's role is limited to bilateral signaling between | |||
ASAs and the avoidance of loops during bilateral signaling. | ||||
o Recovery from faults and identification of faulty devices should | * Recovery from faults and identification of faulty devices | |||
be as automatic as possible. The protocol's role is limited to | should be as automatic as possible. The protocol's role is | |||
discovery, synchronization and negotiation. These processes can | limited to discovery, synchronization, and negotiation. | |||
occur at any time, and an ASA may need to repeat any of these | These processes can occur at any time, and an ASA may need | |||
steps when the ASA detects an event such as a negotiation | to repeat any of these steps when the ASA detects an event | |||
counterpart failing. | such as a negotiation counterpart failing. | |||
o Since a major goal is to minimize human intervention, it is | * Since a major goal is to minimize human intervention, it is | |||
necessary that the network can in effect "think ahead" before | necessary that the network can in effect "think ahead" | |||
changing its parameters. One aspect of this is an ASA that relies | before changing its parameters. One aspect of this is an | |||
on a knowledge base to predict network behavior. This is out of | ASA that relies on a knowledge base to predict network | |||
scope for the signaling protocol. However, another aspect is | behavior. This is out of scope for the signaling protocol. | |||
forecasting the effect of a change by a "dry run" negotiation | However, another aspect is forecasting the effect of a | |||
before actually installing the change. Signaling a dry run is | change by a "dry run" negotiation before actually installing | |||
therefore a desirable feature of the protocol. | the change. Signaling a dry run is therefore a desirable | |||
feature of the protocol. | ||||
Note that management logging, monitoring, alerts and tools for | Note that management logging, monitoring, alerts, and tools for | |||
intervention are required. However, these can only be features of | intervention are required. However, these can only be features | |||
individual ASAs, not of the protocol itself. Another document | of individual ASAs, not of the protocol itself. Another | |||
[I-D.ietf-anima-stable-connectivity] discusses how such agents may be | document [RFC8368] discusses how such agents may be linked into | |||
linked into conventional OAM systems via an Autonomic Control Plane | conventional Operations, Administration, and Maintenance (OAM) | |||
[I-D.ietf-anima-autonomic-control-plane]. | systems via an Autonomic Control Plane [RFC8994]. | |||
SN8. The protocol will be able to deal with a wide variety of | SN8. The protocol will be able to deal with a wide variety of | |||
technical objectives, covering any type of network parameter. | technical objectives, covering any type of network parameter. | |||
Therefore the protocol will need a flexible and easily extensible | Therefore the protocol will need a flexible and easily | |||
format for describing objectives. At a later stage it may be | extensible format for describing objectives. At a later stage, | |||
desirable to adopt an explicit information model. One consideration | it may be desirable to adopt an explicit information model. | |||
is whether to adopt an existing information model or to design a new | One consideration is whether to adopt an existing information | |||
one. | model or to design a new one. | |||
E.3. Specific Technical Requirements | B.3. Specific Technical Requirements | |||
T1. It should be convenient for ASA designers to define new | T1. It should be convenient for ASA designers to define new | |||
technical objectives and for programmers to express them, without | technical objectives and for programmers to express them, | |||
excessive impact on run-time efficiency and footprint. In | without excessive impact on runtime efficiency and footprint. | |||
particular, it should be convenient for ASAs to be implemented | In particular, it should be convenient for ASAs to be | |||
independently of each other as user space programs rather than as | implemented independently of each other as user-space programs | |||
kernel code, where such a programming model is possible. The classes | rather than as kernel code, where such a programming model is | |||
of device in which the protocol might run is discussed in | possible. The classes of device in which the protocol might | |||
[I-D.ietf-anima-reference-model]. | run is discussed in [RFC8993]. | |||
T2. The protocol should be easily extensible in case the initially | T2. The protocol should be easily extensible in case the initially | |||
defined discovery, synchronization and negotiation mechanisms prove | defined discovery, synchronization, and negotiation mechanisms | |||
to be insufficient. | prove to be insufficient. | |||
T3. To be a generic platform, the protocol payload format should be | T3. To be a generic platform, the protocol payload format should be | |||
independent of the transport protocol or IP version. In particular, | independent of the transport protocol or IP version. In | |||
it should be able to run over IPv6 or IPv4. However, some functions, | particular, it should be able to run over IPv6 or IPv4. | |||
such as multicasting on a link, might need to be IP version | However, some functions, such as multicasting on a link, might | |||
dependent. By default, IPv6 should be preferred. | need to be IP version dependent. By default, IPv6 should be | |||
preferred. | ||||
T4. The protocol must be able to access off-link counterparts via | T4. The protocol must be able to access off-link counterparts via | |||
routable addresses, i.e., must not be restricted to link-local | routable addresses, i.e., must not be restricted to link-local | |||
operation. | operation. | |||
T5. It must also be possible for an external discovery mechanism to | T5. It must also be possible for an external discovery mechanism to | |||
be used, if appropriate for a given technical objective. In other | be used, if appropriate for a given technical objective. In | |||
words, GRASP discovery must not be a prerequisite for GRASP | other words, GRASP discovery must not be a prerequisite for | |||
negotiation or synchronization. | GRASP negotiation or synchronization. | |||
T6. The protocol must be capable of distinguishing multiple | T6. The protocol must be capable of distinguishing multiple | |||
simultaneous operations with one or more peers, especially when wait | simultaneous operations with one or more peers, especially when | |||
states occur. | wait states occur. | |||
T7. Intent: Although the distribution of Intent is out of scope for | T7. Intent: Although the distribution of Intent is out of scope for | |||
this document, the protocol must not by design exclude its use for | this document, the protocol must not by design exclude its use | |||
Intent distribution. | for Intent distribution. | |||
T8. Management monitoring, alerts and intervention: Devices should | T8. Management monitoring, alerts, and intervention: Devices should | |||
be able to report to a monitoring system. Some events must be able | be able to report to a monitoring system. Some events must be | |||
to generate operator alerts and some provision for emergency | able to generate operator alerts, and some provision for | |||
intervention must be possible (e.g. to freeze synchronization or | emergency intervention must be possible (e.g., to freeze | |||
negotiation in a mis-behaving device). These features might not use | synchronization or negotiation in a misbehaving device). These | |||
the signaling protocol itself, but its design should not exclude such | features might not use the signaling protocol itself, but its | |||
use. | design should not exclude such use. | |||
T9. Because this protocol may directly cause changes to device | T9. Because this protocol may directly cause changes to device | |||
configurations and have significant impacts on a running network, all | configurations and have significant impacts on a running | |||
protocol exchanges need to be fully secured against forged messages | network, all protocol exchanges need to be fully secured | |||
and man-in-the middle attacks, and secured as much as reasonably | against forged messages and man-in-the-middle attacks, and | |||
possible against denial of service attacks. There must also be an | secured as much as reasonably possible against denial-of- | |||
encryption mechanism to resist unwanted monitoring. However, it is | service attacks. There must also be an encryption mechanism to | |||
not required that the protocol itself provides these security | resist unwanted monitoring. However, it is not required that | |||
features; it may depend on an existing secure environment. | the protocol itself provides these security features; it may | |||
depend on an existing secure environment. | ||||
Appendix F. Capability Analysis of Current Protocols | Appendix C. Capability Analysis of Current Protocols | |||
This appendix discusses various existing protocols with properties | This appendix discusses various existing protocols with properties | |||
related to the requirements described in Appendix E. The purpose is | related to the requirements described in Appendix B. The purpose is | |||
to evaluate whether any existing protocol, or a simple combination of | to evaluate whether any existing protocol, or a simple combination of | |||
existing protocols, can meet those requirements. | existing protocols, can meet those requirements. | |||
Numerous protocols include some form of discovery, but these all | Numerous protocols include some form of discovery, but these all | |||
appear to be very specific in their applicability. Service Location | appear to be very specific in their applicability. Service Location | |||
Protocol (SLP) [RFC2608] provides service discovery for managed | Protocol (SLP) [RFC2608] provides service discovery for managed | |||
networks, but requires configuration of its own servers. DNS-SD | networks, but it requires configuration of its own servers. DNS- | |||
[RFC6763] combined with mDNS [RFC6762] provides service discovery for | Based Service Discovery (DNS-SD) [RFC6763] combined with Multicast | |||
small networks with a single link layer. [RFC7558] aims to extend | DNS (mDNS) [RFC6762] provides service discovery for small networks | |||
this to larger autonomous networks but this is not yet standardized. | with a single link layer. [RFC7558] aims to extend this to larger | |||
However, both SLP and DNS-SD appear to target primarily application | autonomous networks, but this is not yet standardized. However, both | |||
layer services, not the layer 2 and 3 objectives relevant to basic | SLP and DNS-SD appear to target primarily application-layer services, | |||
network configuration. Both SLP and DNS-SD are text-based protocols. | not the layer 2 and 3 objectives relevant to basic network | |||
configuration. Both SLP and DNS-SD are text-based protocols. | ||||
Simple Network Management Protocol (SNMP) [RFC3416] uses a command/ | Simple Network Management Protocol (SNMP) [RFC3416] uses a command/ | |||
response model not well suited for peer negotiation. Network | response model not well suited for peer negotiation. NETCONF | |||
Configuration Protocol (NETCONF) [RFC6241] uses an RPC model that | [RFC6241] uses an RPC model that does allow positive or negative | |||
does allow positive or negative responses from the target system, but | responses from the target system, but this is still not adequate for | |||
this is still not adequate for negotiation. | negotiation. | |||
There are various existing protocols that have elementary negotiation | There are various existing protocols that have elementary negotiation | |||
abilities, such as Dynamic Host Configuration Protocol for IPv6 | abilities, such as Dynamic Host Configuration Protocol for IPv6 | |||
(DHCPv6) [RFC3315], Neighbor Discovery (ND) [RFC4861], Port Control | (DHCPv6) [RFC8415], Neighbor Discovery (ND) [RFC4861], Port Control | |||
Protocol (PCP) [RFC6887], Remote Authentication Dial In User Service | Protocol (PCP) [RFC6887], Remote Authentication Dial-In User Service | |||
(RADIUS) [RFC2865], Diameter [RFC6733], etc. Most of them are | (RADIUS) [RFC2865], Diameter [RFC6733], etc. Most of them are | |||
configuration or management protocols. However, they either provide | configuration or management protocols. However, they either provide | |||
only a simple request/response model in a master/slave context or | only a simple request/response model in a master/slave context or | |||
very limited negotiation abilities. | very limited negotiation abilities. | |||
There are some signaling protocols with an element of negotiation. | There are some signaling protocols with an element of negotiation. | |||
For example Resource ReSerVation Protocol (RSVP) [RFC2205] was | For example, Resource ReSerVation Protocol (RSVP) [RFC2205] was | |||
designed for negotiating quality of service parameters along the path | designed for negotiating quality-of-service parameters along the path | |||
of a unicast or multicast flow. RSVP is a very specialised protocol | of a unicast or multicast flow. RSVP is a very specialized protocol | |||
aimed at end-to-end flows. A more generic design is General Internet | aimed at end-to-end flows. A more generic design is General Internet | |||
Signalling Transport (GIST) [RFC5971], but it is complex, tries to | Signalling Transport (GIST) [RFC5971]; however, it tries to solve | |||
solve many problems, and is also aimed at per-flow signaling across | many problems, making it complex, and is also aimed at per-flow | |||
many hops rather than at device-to-device signaling. However, we | signaling across many hops rather than at device-to-device signaling. | |||
cannot completely exclude extended RSVP or GIST as a synchronization | However, we cannot completely exclude extended RSVP or GIST as a | |||
and negotiation protocol. They do not appear to be directly useable | synchronization and negotiation protocol. They do not appear to be | |||
for peer discovery. | directly usable for peer discovery. | |||
RESTCONF [RFC8040] is a protocol intended to convey NETCONF | RESTCONF [RFC8040] is a protocol intended to convey NETCONF | |||
information expressed in the YANG language via HTTP, including the | information expressed in the YANG language via HTTP, including the | |||
ability to transit HTML intermediaries. While this is a powerful | ability to transit HTML intermediaries. While this is a powerful | |||
approach in the context of centralised configuration of a complex | approach in the context of centralized configuration of a complex | |||
network, it is not well adapted to efficient interactive negotiation | network, it is not well adapted to efficient interactive negotiation | |||
between peer devices, especially simple ones that might not include | between peer devices, especially simple ones that might not include | |||
YANG processing already. | YANG processing already. | |||
The Distributed Node Consensus Protocol (DNCP) [RFC7787] is defined | The Distributed Node Consensus Protocol (DNCP) [RFC7787] is defined | |||
as a generic form of state synchronization protocol, with a proposed | as a generic form of a state synchronization protocol, with a | |||
usage profile being the Home Networking Control Protocol (HNCP) | proposed usage profile being the Home Networking Control Protocol | |||
[RFC7788] for configuring Homenet routers. A specific application of | (HNCP) [RFC7788] for configuring Homenet routers. A specific | |||
DNCP for autonomic networking was proposed in | application of DNCP for Autonomic Networking was proposed in [ADNCP]. | |||
[I-D.stenberg-anima-adncp]. | According to [RFC7787]: | |||
| DNCP is designed to provide a way for each participating node to | ||||
| publish a set of TLV (Type-Length-Value) tuples (at most 64 KB) | ||||
| and to provide a shared and common view about the data | ||||
| published... | ||||
| | ||||
| DNCP is most suitable for data that changes only infrequently... | ||||
| | ||||
| If constant rapid state changes are needed, the preferable choice | ||||
| is to use an additional point-to-point channel... | ||||
DNCP "is designed to provide a way for each participating node to | ||||
publish a set of TLV (Type-Length-Value) tuples, and to provide a | ||||
shared and common view about the data published... DNCP is most | ||||
suitable for data that changes only infrequently... If constant rapid | ||||
state changes are needed, the preferable choice is to use an | ||||
additional point-to-point channel..." | ||||
Specific features of DNCP include: | Specific features of DNCP include: | |||
o Every participating node has a unique node identifier. | * Every participating node has a unique node identifier. | |||
o DNCP messages are encoded as a sequence of TLV objects, sent over | * DNCP messages are encoded as a sequence of TLV objects and sent | |||
unicast UDP or TCP, with or without (D)TLS security. | over unicast UDP or TCP, with or without (D)TLS security. | |||
o Multicast is used only for discovery of DNCP neighbors when lower | * Multicast is used only for discovery of DNCP neighbors when lower | |||
security is acceptable. | security is acceptable. | |||
o Synchronization of state is maintained by a flooding process using | * Synchronization of state is maintained by a flooding process using | |||
the Trickle algorithm. There is no bilateral synchronization or | the Trickle algorithm. There is no bilateral synchronization or | |||
negotiation capability. | negotiation capability. | |||
o The HNCP profile of DNCP is designed to operate between directly | * The HNCP profile of DNCP is designed to operate between directly | |||
connected neighbors on a shared link using UDP and link-local IPv6 | connected neighbors on a shared link using UDP and link-local IPv6 | |||
addresses. | addresses. | |||
DNCP does not meet the needs of a general negotiation protocol, | DNCP does not meet the needs of a general negotiation protocol | |||
because it is designed specifically for flooding synchronization. | because it is designed specifically for flooding synchronization. | |||
Also, in its HNCP profile it is limited to link-local messages and to | Also, in its HNCP profile, it is limited to link-local messages and | |||
IPv6. However, at the minimum it is a very interesting test case for | to IPv6. However, at the minimum, it is a very interesting test case | |||
this style of interaction between devices without needing a central | for this style of interaction between devices without needing a | |||
authority, and it is a proven method of network-wide state | central authority, and it is a proven method of network-wide state | |||
synchronization by flooding. | synchronization by flooding. | |||
The Server Cache Synchronization Protocol (SCSP) [RFC2334] also | The Server Cache Synchronization Protocol (SCSP) [RFC2334] also | |||
describes a method for cache synchronization and cache replication | describes a method for cache synchronization and cache replication | |||
among a group of nodes. | among a group of nodes. | |||
A proposal was made some years ago for an IP based Generic Control | A proposal was made some years ago for an IP based Generic Control | |||
Protocol (IGCP) [I-D.chaparadza-intarea-igcp]. This was aimed at | Protocol (IGCP) [IGCP]. This was aimed at information exchange and | |||
information exchange and negotiation but not directly at peer | negotiation but not directly at peer discovery. However, it has many | |||
discovery. However, it has many points in common with the present | points in common with the present work. | |||
work. | ||||
None of the above solutions appears to completely meet the needs of | None of the above solutions appears to completely meet the needs of | |||
generic discovery, state synchronization and negotiation in a single | generic discovery, state synchronization, and negotiation in a single | |||
solution. Many of the protocols assume that they are working in a | solution. Many of the protocols assume that they are working in a | |||
traditional top-down or north-south scenario, rather than a fluid | traditional top-down or north-south scenario, rather than a fluid | |||
peer-to-peer scenario. Most of them are specialized in one way or | peer-to-peer scenario. Most of them are specialized in one way or | |||
another. As a result, we have not identified a combination of | another. As a result, we have not identified a combination of | |||
existing protocols that meets the requirements in Appendix E. Also, | existing protocols that meets the requirements in Appendix B. Also, | |||
we have not identified a path by which one of the existing protocols | we have not identified a path by which one of the existing protocols | |||
could be extended to meet the requirements. | could be extended to meet the requirements. | |||
Acknowledgments | ||||
A major contribution to the original draft version of this document | ||||
was made by Sheng Jiang, and significant contributions were made by | ||||
Toerless Eckert. Significant early review inputs were received from | ||||
Joel Halpern, Barry Leiba, Charles E. Perkins, and Michael | ||||
Richardson. William Atwood provided important assistance in | ||||
debugging a prototype implementation. | ||||
Valuable comments were received from Michael Behringer, Jéferson | ||||
Campos Nobre, Laurent Ciavaglia, Zongpeng Du, Yu Fu, Joel Jaeggli, | ||||
Zhenbin Li, Dimitri Papadimitriou, Pierre Peloso, Reshad Rahman, | ||||
Markus Stenberg, Martin Stiemerling, Rene Struik, Martin Thomson, | ||||
Dacheng Zhang, and participants in the Network Management Research | ||||
Group, the ANIMA Working Group, and the IESG. | ||||
Authors' Addresses | Authors' Addresses | |||
Carsten Bormann | Carsten Bormann | |||
Universitaet Bremen TZI | Universität Bremen TZI | |||
Postfach 330440 | Postfach 330440 | |||
D-28359 Bremen | D-28359 Bremen | |||
Germany | Germany | |||
Email: cabo@tzi.org | Email: cabo@tzi.org | |||
Brian Carpenter (editor) | Brian Carpenter (editor) | |||
Department 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 | |||
Bing Liu (editor) | Bing Liu (editor) | |||
Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
Q14, Huawei Campus | Q14, Huawei Campus | |||
Hai-Dian District | ||||
No.156 Beiqing Road | No.156 Beiqing Road | |||
Hai-Dian District, Beijing 100095 | Beijing | |||
P.R. China | 100095 | |||
China | ||||
Email: leo.liubing@huawei.com | Email: leo.liubing@huawei.com | |||
End of changes. 461 change blocks. | ||||
2051 lines changed or deleted | 1243 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/ |