| rfc8990xml2.original.xml | rfc8990.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!-- This is built from a template for a generic Internet Draft. Suggestions for | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| improvement welcome - write to Brian Carpenter, brian.e.carpenter @ gmail.c | ||||
| om | ||||
| This can be converted using the Web service at http://xml.resource.org/ --> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
| <?rfc toc="yes"?> | ||||
| <!-- You want a table of contents --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- Use symbolic labels for references --> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <!-- This sorts the references --> | ||||
| <?rfc iprnotified="no" ?> | ||||
| <!-- Change to "yes" if someone has disclosed IPR for the draft --> | ||||
| <?rfc compact="yes"?> | ||||
| <!-- This defines the specific filename and version number of your draft (and in | ||||
| serts the appropriate IETF boilerplate --> | ||||
| <rfc category="std" docName="draft-ietf-anima-grasp-15" ipr="trust200902"> | ||||
| <front> | ||||
| <title abbrev="GRASP">A Generic Autonomic Signaling Protocol (GRASP)</title> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | ||||
| category="std" | ||||
| number="8990" | ||||
| docName="draft-ietf-anima-grasp-15" | ||||
| ipr="trust200902" | ||||
| consensus="true" | ||||
| obsoletes="" | ||||
| updates="" | ||||
| submissionType="IETF" | ||||
| xml:lang="en" | ||||
| tocInclude="true" | ||||
| tocDepth="3" | ||||
| symRefs="true" | ||||
| sortRefs="true" | ||||
| version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 2.46.0 --> | ||||
| <front> | ||||
| <title abbrev="GRASP">GeneRic Autonomic Signaling Protocol (GRASP)</title> | ||||
| <seriesInfo name="RFC" value="8990"/> | ||||
| <author initials="C." surname="Bormann" fullname="Carsten Bormann"> | <author initials="C." surname="Bormann" fullname="Carsten Bormann"> | |||
| <organization>Universität Bremen TZI</organization> | <organization>Universität Bremen TZI</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Postfach 330440</street> | <street>Postfach 330440</street> | |||
| <city>D-28359 Bremen</city> | <city>Bremen</city> | |||
| <code>D-28359</code> | ||||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <email>cabo@tzi.org</email> | <email>cabo@tzi.org</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Brian Carpenter" initials="B." surname="Carpenter" role="e | ||||
| <author fullname="Brian Carpenter" initials="B. E." surname="Carpenter" role | ditor"> | |||
| ="editor"> | ||||
| <organization abbrev="Univ. of Auckland"/> | <organization abbrev="Univ. of Auckland"/> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Department of Computer Science</street> | <street>School of Computer Science</street> | |||
| <street>University of Auckland</street> | <street>University of Auckland</street> | |||
| <street>PB 92019</street> | <street>PB 92019</street> | |||
| <city>Auckland</city> | <city>Auckland</city> | |||
| <region/> | ||||
| <code>1142</code> | <code>1142</code> | |||
| <country>New Zealand</country> | <country>New Zealand</country> | |||
| </postal> | </postal> | |||
| <email>brian.e.carpenter@gmail.com</email> | <email>brian.e.carpenter@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Bing Liu" initials="B." surname="Liu" role="editor"> | <author fullname="Bing Liu" initials="B." surname="Liu" role="editor"> | |||
| <organization>Huawei Technologies Co., Ltd</organization> | <organization>Huawei Technologies Co., Ltd</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Q14, Huawei Campus</street> | ||||
| <street>No.156 Beiqing Road</street> | <street>No.156 Beiqing Road</street> | |||
| <city>Hai-Dian District, Beijing</city> | <extaddr>Q14, Huawei Campus</extaddr> | |||
| <extaddr>Hai-Dian District</extaddr> | ||||
| <city>Beijing</city> | ||||
| <code>100095</code> | <code>100095</code> | |||
| <country>P.R. China</country> | <country>China</country> | |||
| </postal> | </postal> | |||
| <email>leo.liubing@huawei.com</email> | <email>leo.liubing@huawei.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="May" year="2021"/> | ||||
| <area>Operations and Management</area> | ||||
| <workgroup>ANIMA</workgroup> | ||||
| <!----> | <keyword>autonomic networking</keyword> | |||
| <keyword>autonomous operation</keyword> | ||||
| <date day="7" month="July" year="2017"/> | <keyword>self-management</keyword> | |||
| <abstract> | <abstract> | |||
| <t>This document specifies the GeneRic Autonomic Signaling Protocol (GRASP ), which | <t>This document specifies the GeneRic Autonomic Signaling Protocol (GRASP ), which | |||
| enables autonomic nodes and autonomic service agents to dynamically discov er peers, | enables autonomic nodes and Autonomic Service Agents to dynamically discov er peers, | |||
| to synchronize state with each other, and to negotiate parameter settings with each | to synchronize state with each other, and to negotiate parameter settings with each | |||
| other. GRASP depends on an external security environment that is described | other. GRASP depends on an external security environment that is described | |||
| elsewhere. The technical objectives and parameters for specific applicatio n scenarios | elsewhere. The technical objectives and parameters for specific applicatio n scenarios | |||
| are to be described in separate documents. Appendices briefly discuss requ irements | are to be described in separate documents. Appendices briefly discuss requ irements | |||
| for the protocol and existing protocols with comparable features.</t> | for the protocol and existing protocols with comparable features.</t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="intro" title="Introduction"> | <section anchor="intro" numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <t>The success of the Internet has made IP-based networks bigger and | <t>The success of the Internet has made IP-based networks bigger and | |||
| more complicated. Large-scale ISP and enterprise networks have become more and more | more complicated. Large-scale ISP and enterprise networks have become more and more | |||
| problematic for human based management. Also, operational costs are growin g quickly. | problematic for human-based management. Also, operational costs are growin g quickly. | |||
| Consequently, there are increased requirements for autonomic behavior in t he networks. | Consequently, there are increased requirements for autonomic behavior in t he networks. | |||
| General aspects of autonomic networks are discussed in | General aspects of Autonomic Networks are discussed in | |||
| <xref target="RFC7575"/> and <xref target="RFC7576"/>. </t> | <xref target="RFC7575" format="default"/> and <xref target="RFC7576" forma | |||
| t="default"/>. </t> | ||||
| <t>One approach is to largely decentralize the logic of network management by migrating it | <t>One approach is to largely decentralize the logic of network management by migrating it | |||
| into network elements. A reference model for autonomic networking on this | into network elements. A reference model for Autonomic Networking on this | |||
| basis is given in | basis is given in | |||
| <xref target="I-D.ietf-anima-reference-model"/>. The reader should consult | <xref target="RFC8993" format="default"/>. The reader should consult this | |||
| this document | document | |||
| to understand how various autonomic components fit together. | to understand how various autonomic components fit together. | |||
| In order to fulfill autonomy, devices that embody Autonomic Service Agents | In order to achieve autonomy, devices that embody Autonomic Service Agents | |||
| (ASAs, <xref target="RFC7575"/>) | (ASAs, <xref target="RFC7575" format="default"/>) | |||
| have specific signaling requirements. In particular they need to discover | have specific signaling requirements. In particular, they need to discover | |||
| each other, | each other, | |||
| to synchronize state with each other, | to synchronize state with each other, | |||
| and to negotiate parameters and resources directly with each other. | and to negotiate parameters and resources directly with each other. | |||
| There is no limitation on the types of parameters and resources concerned, | There is no limitation on the types of parameters and resources concerned, | |||
| which can include very basic information needed for addressing and routing , | which can include very basic information needed for addressing and routing , | |||
| as well as anything else that might be configured in a conventional non-au tonomic network. | as well as anything else that might be configured in a conventional non-au tonomic network. | |||
| The atomic unit of discovery, synchronization or negotiation is referred t | The atomic unit of discovery, synchronization, or negotiation is referred | |||
| o as a technical | to as a technical | |||
| objective, i.e, a configurable parameter or set of parameters | objective, i.e., a configurable parameter or set of parameters | |||
| (defined more precisely in <xref target="terms"/>).</t> | (defined more precisely in <xref target="terms" format="default"/>).</t> | |||
| <t> | <t> | |||
| Negotiation is an iterative process, requiring multiple message exchanges forming | Negotiation is an iterative process, requiring multiple message exchanges forming | |||
| a closed loop between the negotiating entities. In fact, these entities ar e | a closed loop between the negotiating entities. In fact, these entities ar e | |||
| ASAs, normally but not necessarily in different network devices. | ASAs, normally but not necessarily in different network devices. | |||
| State synchronization, when needed, | State synchronization, when needed, | |||
| can be regarded as a special case of negotiation, without iteration. | can be regarded as a special case of negotiation without iteration. | |||
| Both negotiation and synchronization must logically follow discovery. | Both negotiation and synchronization must logically follow discovery. | |||
| More details of the requirements are found in <xref target="reqts"/>. | More details of the requirements are found in <xref target="reqts" format= | |||
| <xref target="highlevel"/> describes a behavior model for a protocol | "default"/>. | |||
| intended to support discovery, synchronization and negotiation. The | <xref target="highlevel" format="default"/> describes a behavior model for | |||
| design of GeneRic Autonomic Signaling Protocol (GRASP) in <xref target="Ov | a protocol | |||
| erview"/> | intended to support discovery, synchronization, and negotiation. The | |||
| of this document is based on this behavior model. The relevant capabilitie | design of GeneRic Autonomic Signaling Protocol (GRASP) in <xref target="Ov | |||
| s | erview" format="default"/> | |||
| of various existing protocols are reviewed in <xref target="current"/>.</t | is based on this behavior model. The relevant capabilities | |||
| > | of various existing protocols are reviewed in <xref target="current" forma | |||
| t="default"/>.</t> | ||||
| <t>The proposed discovery mechanism is oriented towards synchronization an d | <t>The proposed discovery mechanism is oriented towards synchronization an d | |||
| negotiation objectives. It is based on a neighbor discovery process on the | negotiation objectives. It is based on a neighbor discovery process on the | |||
| local link, but also supports diversion to peers on other links. | local link, but it also supports diversion to peers on other links. | |||
| There is no assumption of any particular form of network topology. | There is no assumption of any particular form of network topology. | |||
| When a device starts up with no pre-configuration, | When a device starts up with no preconfiguration, | |||
| it has no knowledge of the topology. The protocol itself is capable of | 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 small | 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 managed networ k. | office or home network as well as in a large, professionally managed netwo rk. | |||
| Therefore, the discovery mechanism needs to be able to allow a device | Therefore, the discovery mechanism needs to be able to allow a device | |||
| to bootstrap itself without making any prior assumptions about network | to bootstrap itself without making any prior assumptions about network | |||
| structure. </t> | structure. </t> | |||
| <t>Because GRASP can be used as part of a decision process among distribut ed | <t>Because GRASP can be used as part of a decision process among distribut ed | |||
| devices or between networks, it must run in a secure and strongly authenti cated | devices or between networks, it must run in a secure and strongly authenti cated | |||
| environment. | environment. | |||
| </t> | </t> | |||
| <t>In realistic deployments, not all devices will | <t>In realistic deployments, not all devices will | |||
| support GRASP. Therefore, some autonomic service agents will directly | support GRASP. Therefore, some Autonomic Service Agents will directly | |||
| manage a group of non-autonomic nodes, and other non-autonomic nodes | manage a group of non-autonomic nodes, and other non-autonomic nodes | |||
| will be managed traditionally. Such mixed scenarios | will be managed traditionally. Such mixed scenarios | |||
| are not discussed in this specification.</t> | are not discussed in this specification.</t> | |||
| </section> | </section> | |||
| <!-- intro --> | <section anchor="Overview" numbered="true" toc="default"> | |||
| <name>Protocol Overview</name> | ||||
| <section anchor="Overview" title="GRASP Protocol Overview"> | <section anchor="terms" numbered="true" toc="default"> | |||
| <name>Terminology</name> | ||||
| <section anchor="terms" title="Terminology"> | <t> | |||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| "OPTIONAL" in this document are to be interpreted as described in | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| <xref target="RFC2119"/> when they appear in ALL CAPS. When these words | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| are not in ALL CAPS (such as "should" or "Should"), they have their | be interpreted as | |||
| usual English meanings, and are not to be interpreted as <xref target="RFC | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
| 2119"/> key words.</t> | when, and only when, they appear in all capitals, as shown here. | |||
| </t> | ||||
| <t>This document uses terminology defined in <xref target="RFC7575"/>.</t> | ||||
| <t>This document uses terminology defined in <xref target="RFC7575" form at="default"/>.</t> | ||||
| <t>The following additional terms are used throughout this document: | <t>The following additional terms are used throughout this document: | |||
| <list style="symbols"> | </t> | |||
| <!-- <t>Autonomic Device: identical to Autonomic Node.</t> --> | ||||
| <t>Discovery: a process by which an ASA discovers peers | ||||
| according to a specific discovery objective. The discovery results | ||||
| may be different according to the different discovery objectives. | ||||
| The discovered peers may later be used as negotiation | ||||
| counterparts or as sources of synchronization data. </t> | ||||
| <t>Negotiation: a process by which two ASAs interact | <dl newline="true"> | |||
| iteratively to agree on parameter settings that best satisfy the | ||||
| objectives of both ASAs.</t> | ||||
| <t>State Synchronization: a process by which ASAs | <dt>Discovery: | |||
| interact to receive the current state of parameter | </dt> | |||
| values stored in other ASAs. This is a special case of negotiation | <dd><t>A process by which an ASA discovers peers according to a specific | |||
| in which information is sent but the ASAs do not request | discovery objective. The discovery results may be different according to the | |||
| their peers to change parameter settings. All other definitions | different discovery objectives. The discovered peers may later be used as | |||
| apply to both negotiation and synchronization. </t> | negotiation counterparts or as sources of synchronization data. | |||
| </t> | ||||
| </dd> | ||||
| <t>Technical Objective (usually abbreviated as Objective): | <dt>Negotiation: | |||
| A technical objective is a data structure, whose main contents | </dt> | |||
| are a name and a value. The value consists of a single configurable | <dd> | |||
| parameter or a set of parameters of some kind. The exact | <t>A process by which two ASAs interact iteratively to agree on parameter | |||
| format of an objective is defined in <xref target="ObjForm"/>. | settings that best satisfy the objectives of both ASAs. | |||
| An objective occurs in three contexts: Discovery, Negotiation | </t> | |||
| and Synchronization. Normally, a given objective will not | </dd> | |||
| occur in negotiation and synchronization contexts simultaneously. | ||||
| <list style="symbols"> | <dt>State Synchronization: | |||
| </dt> | ||||
| <dd><t>A process by which ASAs interact to receive the current state of paramete | ||||
| r | ||||
| values stored in other ASAs. This is a special case of negotiation in which | ||||
| information is sent, but the ASAs do not request their peers to change | ||||
| parameter settings. All other definitions apply to both negotiation and synchron | ||||
| ization. | ||||
| </t></dd> | ||||
| <t>One ASA may support multiple independent objectives.</t> | <dt>Technical Objective (usually abbreviated as Objective): | |||
| </dt> | ||||
| <dd><t>A technical objective is a data structure whose main contents are a name | ||||
| and a value. The value consists of a single configurable parameter or a set of | ||||
| parameters of some kind. The exact format of an objective is defined in <xref ta | ||||
| rget="ObjForm" format="default"/>. An objective occurs in three contexts: | ||||
| discovery, negotiation, and synchronization. Normally, a given objective will | ||||
| not occur in negotiation and synchronization contexts simultaneously. | ||||
| </t> | ||||
| <t>The parameter(s) in the value of a given objective apply to | <ul empty="true"> | |||
| a specific service or function or action. They may in principle be | <li>One ASA may support multiple independent objectives. | |||
| anything that can be set to a specific logical, numerical or string | </li> | |||
| value, or a more complex data structure, by a network node. | <li> | |||
| Each node is expected to contain one or more ASAs | The parameter(s) in the value of a given objective apply to a specific | |||
| which may each manage subsidiary non-autonomic nodes.</t> | service or function or action. They may in principle be anything that can be | |||
| set to a specific logical, numerical, or string value, or a more complex data | ||||
| structure, by a network node. Each node is expected to contain one or more | ||||
| ASAs which may each manage subsidiary non-autonomic nodes. | ||||
| </li> | ||||
| <t>Discovery Objective: an objective in the process of discovery. It | <li> | |||
| s value | <dl> | |||
| may be undefined.</t> | <dt>Discovery Objective: | |||
| </dt> | ||||
| <dd>an objective in the process of discovery. Its value may be undefined. | ||||
| </dd> | ||||
| <t>Synchronization Objective: an objective whose specific technical | <dt>Synchronization Objective: | |||
| content | </dt> | |||
| needs to be synchronized among two or more ASAs. Thus, each ASA will | <dd>an objective whose specific technical content needs to be synchronized | |||
| maintain | among two or more ASAs. Thus, each ASA will maintain its own copy of the | |||
| its own copy of the objective.</t> | objective. | |||
| </dd> | ||||
| <t>Negotiation Objective: an objective whose specific technical cont | <dt>Negotiation Objective: | |||
| ent | </dt> | |||
| needs to be decided in coordination with another ASA. Again, each AS | <dd>an objective whose specific technical content needs to be decided in | |||
| A will maintain | coordination with another ASA. Again, each ASA will maintain its own copy of | |||
| its own copy of the objective.</t> | the objective. | |||
| </dd> | ||||
| </list> | </dl> | |||
| </li> | ||||
| <li> A detailed discussion of objectives, including their format, is found in | ||||
| <xref target="ObjOption" format="default"/>. | ||||
| </li> | ||||
| </ul> | ||||
| A detailed discussion of objectives, including their format, is foun d in <xref target="ObjOption"/>.</t> | </dd> | |||
| <t>Discovery Initiator: an ASA that starts discovery | <dt>Discovery Initiator: | |||
| by sending a discovery message referring to a specific discovery | </dt> | |||
| objective.</t> | <dd><t>An ASA that starts discovery by sending a Discovery message referring to | |||
| a | ||||
| specific discovery objective. | ||||
| </t></dd> | ||||
| <t>Discovery Responder: a peer that either contains an ASA supporting | <dt>Discovery Responder: | |||
| the discovery objective | </dt> | |||
| indicated by the discovery initiator, or caches the locator(s) of the | <dd><t>A peer that either contains an ASA supporting the discovery objective | |||
| ASA(s) supporting | indicated by the discovery initiator or caches the locator(s) of the ASA(s) | |||
| the objective. It sends a Discovery Response, as described later.</t> | supporting the objective. It sends a Discovery Response, as described later. | |||
| </t></dd> | ||||
| <t>Synchronization Initiator: an ASA that starts synchronization | <dt>Synchronization Initiator: | |||
| by sending a request message referring to a specific synchronization | </dt> | |||
| objective.</t> | <dd><t>An ASA that starts synchronization by sending a request message referring | |||
| to a specific synchronization objective. | ||||
| </t></dd> | ||||
| <t>Synchronization Responder: a peer ASA which responds with the | <dt>Synchronization Responder: | |||
| value of a synchronization objective.</t> | </dt> | |||
| <dd><t>A peer ASA that responds with the value of a synchronization objective. | ||||
| </t></dd> | ||||
| <t>Negotiation Initiator: an ASA that starts | <dt>Negotiation Initiator: | |||
| negotiation by sending a request message referring to a specific | </dt> | |||
| negotiation objective.</t> | <dd><t>An ASA that starts negotiation by sending a request message referring to | |||
| a | ||||
| specific negotiation objective.</t> | ||||
| </dd> | ||||
| <t>Negotiation Counterpart: a peer with which the Negotiation | <dt>Negotiation Counterpart: | |||
| Initiator negotiates a specific negotiation objective.</t> | </dt> | |||
| <dd> | ||||
| <t>A peer with which the negotiation initiator negotiates a specific | ||||
| negotiation objective.</t> | ||||
| </dd> | ||||
| <t>GRASP Instance: This refers to an instantiation of a GRASP protocol | <dt>GRASP Instance: | |||
| engine, likely including | </dt> | |||
| multiple threads or processes as well as dynamic data structures such | <dd> | |||
| as a discovery cache, running in | <t>This refers to an instantiation of a GRASP protocol engine, likely | |||
| a given security environment on a single device. </t> | including multiple threads or processes as well as dynamic data structures | |||
| such as a discovery cache, running in a given security environment on a single | ||||
| device. | ||||
| </t> | ||||
| </dd> | ||||
| <t>GRASP Core: This refers to the code and shared data structures of a | <dt>GRASP Core: | |||
| GRASP instance, which will | </dt> | |||
| communicate with individual ASAs via a suitable Application Programmin | <dd> | |||
| g Interface (API).</t> | <t>This refers to the code and shared data structures of a GRASP instance, | |||
| which will communicate with individual ASAs via a suitable Application | ||||
| Programming Interface (API). | ||||
| </t> | ||||
| </dd> | ||||
| <t>Interface or GRASP Interface: Unless otherwise stated, these refer | <dt>Interface or GRASP Interface: | |||
| to a network | </dt> | |||
| interface - which might be physical or virtual - that a specific insta | <dd> | |||
| nce of | <t>Unless otherwise stated, this refers to a network interface, which might | |||
| GRASP is currently using. A device might have other interfaces that ar | be physical or virtual, that a specific instance of GRASP is currently | |||
| e not | using. A device might have other interfaces that are not used by GRASP and | |||
| used by GRASP and which are outside the scope of the autonomic network | which are outside the scope of the Autonomic Network. | |||
| .</t> | </t> | |||
| </dd> | ||||
| </list></t> | </dl> | |||
| </section> | ||||
| <section anchor="hilev" title="High Level Deployment Model"> | </section> | |||
| <t>A GRASP implementation will be part of the Autonomic Networking Infrast | <section anchor="hilev" numbered="true" toc="default"> | |||
| ructure (ANI) | <name>High-Level Deployment Model</name> | |||
| <t>A GRASP implementation will be part of the Autonomic Networking Infra | ||||
| structure (ANI) | ||||
| in an autonomic node, which must also provide an appropriate security envi ronment. | in an autonomic node, which must also provide an appropriate security envi ronment. | |||
| In accordance with <xref target="I-D.ietf-anima-reference-model"/>, this S | In accordance with <xref target="RFC8993" format="default"/>, this <bcp14> | |||
| HOULD be the | SHOULD</bcp14> be the | |||
| Autonomic Control Plane (ACP) <xref target="I-D.ietf-anima-autonomic-contr | Autonomic Control Plane (ACP) <xref target="RFC8994" format="default"/>. | |||
| ol-plane"/>. | ||||
| As a result, all autonomic nodes in the ACP are able to trust each other. | As a result, all autonomic nodes in the ACP are able to trust each other. | |||
| It is expected that GRASP will access the ACP by using a typical socket pr | It is expected that GRASP will access the ACP by using a typical socket pr | |||
| ogramming interface | ogramming interface, | |||
| and the ACP will make available only network interfaces within the autonom | and the ACP will make available only network interfaces within the Autonom | |||
| ic network. | ic Network. | |||
| If there is no ACP, the considerations described in <xref target="reqsec"/ | If there is no ACP, the considerations described in <xref target="reqsec" | |||
| > apply. </t> | format="default"/> apply. </t> | |||
| <t> | ||||
| <t> | ||||
| There will also be one or more Autonomic Service Agents (ASAs). In the min imal case | There will also be one or more Autonomic Service Agents (ASAs). In the min imal case | |||
| of a single-purpose device, these components might be fully integrated wit h GRASP | of a single-purpose device, these components might be fully integrated wit h GRASP | |||
| and the ACP. A more common model is expected to be a multi-purpose device capable of containing | and the ACP. A more common model is expected to be a multipurpose device c apable of containing | |||
| several ASAs, such as a router or large switch. In this case it is expecte d that the ACP, GRASP and the ASAs will | several ASAs, such as a router or large switch. In this case it is expecte d that the ACP, GRASP and the ASAs will | |||
| be implemented as separate processes, which are able to support | be implemented as separate processes, which are able to support | |||
| asynchronous and simultaneous operations, for example by multi-threading.< | asynchronous and simultaneous operations, for example by multithreading.</ | |||
| /t> | t> | |||
| <t>In some scenarios, a limited negotiation model might be deployed base | ||||
| <t>In some scenarios, a limited negotiation model might be deployed based | d on a limited | |||
| on a limited | ||||
| trust relationship such as that between two administrative domains. ASAs m ight then | trust relationship such as that between two administrative domains. ASAs m ight then | |||
| exchange limited information and negotiate some particular configurations. </t> | exchange limited information and negotiate some particular configurations. </t> | |||
| <t>GRASP is explicitly designed to operate within a single addressing re | ||||
| <t>GRASP is explicitly designed to operate within a single addressing real | alm. | |||
| m. | ||||
| Its discovery and flooding mechanisms do not support autonomic operations that | Its discovery and flooding mechanisms do not support autonomic operations that | |||
| cross any form of address translator or upper layer proxy.</t> | cross any form of address translator or upper-layer proxy.</t> | |||
| <t>A suitable Application Programming Interface (API) will be needed | ||||
| <t>A suitable Application Programming Interface (API) will be needed | ||||
| between GRASP and the ASAs. In some implementations, ASAs would run in use r | between GRASP and the ASAs. In some implementations, ASAs would run in use r | |||
| space with a GRASP library providing the API, and this library would in tu rn | space with a GRASP library providing the API, and this library would in tu rn | |||
| communicate via system calls with core GRASP functions. | communicate via system calls with core GRASP functions. | |||
| Details of the API are out of scope for the present document. | Details of the API are out of scope for the present document. | |||
| For further details of possible deployment models, see | For further details of possible deployment models, see | |||
| <xref target="I-D.ietf-anima-reference-model"/>. | <xref target="RFC8993" format="default"/>. | |||
| </t> | </t> | |||
| <t>An instance of GRASP must be aware of the network interfaces it will | ||||
| <t>An instance of GRASP must be aware of the network interfaces it will us | use, and of the | |||
| e, and of the | ||||
| appropriate global-scope | appropriate global-scope | |||
| and link-local addresses. In the presence of the ACP, such information wil l be available from | and link-local addresses. In the presence of the ACP, such information wil l be available from | |||
| the adjacency table discussed in <xref target="I-D.ietf-anima-reference-mo del"/>. | the adjacency table discussed in <xref target="RFC8993" format="default"/> . | |||
| In other cases, GRASP must determine such information for itself. Details depend on the | In other cases, GRASP must determine such information for itself. Details depend on the | |||
| device and operating system. In the rest of this document, the terms 'inte rfaces' | device and operating system. In the rest of this document, the terms 'inte rfaces' | |||
| or 'GRASP interfaces' | or 'GRASP interfaces' | |||
| refers only to the set of network interfaces that a specific instance | refers only to the set of network interfaces that a specific instance | |||
| of GRASP is currently using. </t> | of GRASP is currently using. </t> | |||
| <t>Because GRASP needs to work with very high reliability, especially duri ng bootstrapping | <t>Because GRASP needs to work with very high reliability, especially du ring bootstrapping | |||
| and during fault conditions, it is essential that every implementation con tinues to | and during fault conditions, it is essential that every implementation con tinues to | |||
| operate in adverse conditions. For example, discovery failures, or any kin d of socket | operate in adverse conditions. For example, discovery failures, or any kin d of socket | |||
| exception at any time, must not cause irrecoverable failures in GRASP itse lf, and must | exception at any time, must not cause irrecoverable failures in GRASP itse lf, and must | |||
| return suitable error codes through the API so that ASAs can also recover. | return suitable error codes through the API so that ASAs can also recover. | |||
| </t> | </t> | |||
| <t>GRASP must not depend upon non-volatile data storage. All run time erro | <t>GRASP must not depend upon nonvolatile data storage. All runtime erro | |||
| r | r | |||
| conditions, and events such as address renumbering, network interface fail ures, | conditions, and events such as address renumbering, network interface fail ures, | |||
| and CPU sleep/wake cycles, must be handled in such a way that GRASP will s till | and CPU sleep/wake cycles, must be handled in such a way that GRASP will s till | |||
| operate correctly and securely (<xref target="reqsec"/>) afterwards.</t> | operate correctly and securely afterwards (<xref target="reqsec" format="d | |||
| efault"/>).</t> | ||||
| <t>An autonomic node will normally run a single instance of GRASP, used by | <t>An autonomic node will normally run a single instance of GRASP, which | |||
| multiple ASAs. | is used by multiple ASAs. | |||
| Possible exceptions are mentioned below. | Possible exceptions are mentioned below. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="highlevel" numbered="true" toc="default"> | ||||
| <section anchor="highlevel" title="High Level Design"> | <name>High-Level Design</name> | |||
| <t>This section describes the behavior model and general design of | <t>This section describes the behavior model and general design of | |||
| GRASP, supporting discovery, synchronization and negotiation, to | GRASP, supporting discovery, synchronization, and negotiation, to | |||
| act as a platform for different technical objectives.</t> | act as a platform for different technical objectives.</t> | |||
| <t><list style="symbols"> | <dl newline="true"> | |||
| <t>A generic platform:<vspace blankLines="1"/> | <dt>A generic platform: | |||
| The protocol design is generic and independent of the synchronizatio | </dt> | |||
| n or | <dd><t>The protocol design is generic and independent of the synchronization or | |||
| negotiation contents. The technical contents will vary according to | negotiation contents. The technical contents will vary according to the | |||
| the | various technical objectives and the different pairs of counterparts.</t></dd> | |||
| various technical objectives and the different pairs of | <dt>Multiple instances: | |||
| counterparts.<vspace blankLines="1"/></t> | </dt> | |||
| <dd><t> | ||||
| Normally, a single main instance of the GRASP protocol engine will exist | ||||
| in an autonomic node, and each ASA will run as an independent asynchronous | ||||
| process. However, scenarios where multiple instances of GRASP run in a single | ||||
| node, perhaps with different security properties, are possible (<xref target="se | ||||
| cinst" format="default"/>). In this case, each instance | ||||
| <bcp14>MUST</bcp14> listen independently for GRASP link-local multicasts, and | ||||
| all instances <bcp14>MUST</bcp14> be woken by each such multicast in order | ||||
| for discovery and flooding to work correctly. | ||||
| </t></dd> | ||||
| <t>Normally, a single main instance of the GRASP protocol engine wil | <dt>Security infrastructure: | |||
| l exist in an autonomic | </dt> | |||
| node, and each ASA will run as an independent asynchronous process. | <dd><t>As noted above, the protocol itself has no built-in security | |||
| However, scenarios | functionality and relies on a separate secure infrastructure.</t> | |||
| where multiple instances of GRASP run in a single node, perhaps with | </dd> | |||
| different security | ||||
| properties, are possible (<xref target="secinst"/>). In this case, e | ||||
| ach instance MUST | ||||
| listen independently for GRASP link-local multicasts, | ||||
| and all instances MUST be woken by each such multic | ||||
| ast, in order for | ||||
| discovery and flooding to work correctly. | ||||
| <vspace blankLines="1"/></t> | ||||
| <t>Security infrastructure:<vspace blankLines="1"/> | <dt>Discovery, synchronization, and negotiation are designed together: | |||
| As noted above, the protocol itself has no built-in security functio | </dt> | |||
| nality, | <dd><t>The discovery method and the synchronization and negotiation methods are | |||
| and relies on a separate secure infrastructure.<vspace blankLines="1 | designed in the same way and can be combined when this is useful, allowing a | |||
| "/></t> | rapid mode of operation described in <xref target="discmech" format="default"/>. | |||
| These processes can also be performed independently when | ||||
| appropriate.</t> | ||||
| <t>Discovery, synchronization and negotiation are designed together: | <ul empty="true"> | |||
| <vspace blankLines="1"/> | <li> | |||
| The discovery method and the synchronization and negotiation methods | <t> | |||
| are designed in the same way and can be combined when this is | Thus, for some objectives, especially those concerned with application-layer | |||
| useful, allowing a rapid mode of operation described in <xref target | services, another discovery mechanism such as DNS-based Service Discovery | |||
| ="discmech"/>. | <xref target="RFC7558" format="default"/> <bcp14>MAY</bcp14> be used. The | |||
| These processes can also be performed independently when appropriate | choice is left to the designers of individual ASAs. | |||
| . | </t> | |||
| <list style="symbols"> | </li> | |||
| <t>Thus, for some objectives, especially those concerned with appl | </ul> | |||
| ication layer | ||||
| services, another discovery mechanism such as the future DNS Servi | ||||
| ce | ||||
| Discovery <xref target="RFC7558"/> MAY be used. | ||||
| The choice is left to the designers of individual ASAs.</t> | ||||
| </list> | ||||
| <vspace blankLines="1"/></t> | ||||
| <t>A uniform pattern for technical objectives:<vspace blankLines="1" | </dd> | |||
| /> | ||||
| The synchronization and negotiation objectives are defined | ||||
| according to a uniform pattern. The values that they contain | ||||
| could be carried either in a simple binary format or in a | ||||
| complex object format. The basic protocol design uses the Concise | ||||
| Binary Object Representation (CBOR) <xref target="RFC7049"/>, | ||||
| which is readily extensible for unknown future requirements. <vspace | ||||
| blankLines="1"/></t> | ||||
| <t>A flexible model for synchronization:<vspace blankLines="1"/> | <dt>A uniform pattern for technical objectives: | |||
| GRASP supports synchronization between two nodes, which could be use | </dt> | |||
| d | <dd> | |||
| repeatedly to perform synchronization among a small number of nodes. | <t> | |||
| It also supports an unsolicited flooding mode when large groups of n | The synchronization and negotiation objectives are defined according to a | |||
| odes, | uniform pattern. The values that they contain could be carried either in a | |||
| possibly including all autonomic nodes, need data for the same | simple binary format or in a complex object format. The basic protocol design | |||
| technical objective. | uses the Concise Binary Object Representation (CBOR) <xref target="RFC8949" form | |||
| at="default"/>, which is readily extensible for unknown, future | ||||
| requirements. | ||||
| </t> | ||||
| </dd> | ||||
| <list style="symbols"> | <dt>A flexible model for synchronization: | |||
| <t>There may be some network parameters for which a more tradition | </dt> | |||
| al flooding | <dd> | |||
| mechanism such as DNCP <xref target="RFC7787"/> | <t>GRASP supports synchronization between two nodes, which could be used | |||
| is considered more appropriate. GRASP can coexist with DNCP. | repeatedly to perform synchronization among a small number of nodes. It also | |||
| </t> | supports an unsolicited flooding mode when large groups of nodes, possibly | |||
| </list> | including all autonomic nodes, need data for the same technical objective. | |||
| <vspace blankLines="1"/></t> | </t> | |||
| <t>A simple initiator/responder model for negotiation:<vspace blankL | <ul empty="true"> | |||
| ines="1"/> | <li> | |||
| Multi-party negotiations are very complicated to model and cannot | <t> | |||
| readily be guaranteed to converge. GRASP uses a simple bilateral mod | There may be some network parameters for which a more traditional flooding | |||
| el | mechanism such as the Distributed Node Consensus Protocol (DNCP) <xref target="R | |||
| and can support multi-party negotiations by indirect steps. | FC7787" format="default"/> is considered | |||
| <vspace blankLines="1"/></t> | more appropriate. GRASP can coexist with DNCP. | |||
| </t> | ||||
| </li> | ||||
| </ul> | ||||
| </dd> | ||||
| <t>Organizing of synchronization or negotiation content:<vspace blan | <dt>A simple initiator/responder model for negotiation: | |||
| kLines="1"/> | </dt> | |||
| The technical content transmitted by GRASP will be | <dd> | |||
| organized according to the relevant function or service. The | <t>Multiparty negotiations are very complicated to model and cannot readily | |||
| objectives for different functions or services are kept | be guaranteed to converge. GRASP uses a simple bilateral model and can support | |||
| separate, because they may be negotiated or synchronized with differ | multiparty negotiations by indirect steps. | |||
| ent | </t> | |||
| counterparts or have different response times. Thus a normal arrange | </dd> | |||
| ment | ||||
| would be a single ASA managing a small set of closely related object | ||||
| ives, | ||||
| with a version of that ASA in each relevant autonomic node. Further | ||||
| discussion of this aspect is out of scope for the current document. | ||||
| <vspace blankLines="1"/></t> | ||||
| <t>Requests and responses in negotiation procedures:<vspace blankLin | <dt>Organizing of synchronization or negotiation content: | |||
| es="1"/> | </dt> | |||
| The initiator can negotiate a specific negotiation objective with re | <dd> | |||
| levant | <t>The technical content transmitted by GRASP will be organized according to | |||
| counterpart ASAs. It can request relevant information from a counter | the relevant function or service. The objectives for different functions or | |||
| part so that it | services are kept separate because they may be negotiated or synchronized | |||
| can coordinate its local configuration. It can request the counterpa | with different counterparts or have different response times. Thus a normal | |||
| rt to make | arrangement is a single ASA managing a small set of closely related | |||
| a matching configuration. It can request simulation or forecast resu | objectives, with a version of that ASA in each relevant autonomic | |||
| lts by sending | node. Further discussion of this aspect is out of scope for the current | |||
| some dry run conditions. | document. | |||
| <vspace blankLines="1"/>Beyond the traditional yes/no answer, the | </t> | |||
| responder can reply with a suggested alternative value for the objec | </dd> | |||
| tive | ||||
| concerned. This would start a bi-directional negotiation | ||||
| ending in a compromise between the two ASAs.<vspace blankLines="1"/> | ||||
| </t> | ||||
| <t>Convergence of negotiation procedures:<vspace blankLines="1"/> | <dt>Requests and responses in negotiation procedures: | |||
| To enable convergence, when a responder suggests a new value or | </dt> | |||
| condition in a negotiation step reply, it should be as close as poss | <dd> | |||
| ible | <t> | |||
| to the original request or previous suggestion. The suggested value | The initiator can negotiate a specific negotiation objective with relevant | |||
| of | counterpart ASAs. It can request relevant information from a counterpart so | |||
| later negotiation steps should be chosen between the suggested value | that it can coordinate its local configuration. It can request the counterpart | |||
| s from | to make a matching configuration. It can request simulation or forecast | |||
| the previous two steps. GRASP provides mechanisms to guarantee conve | results by sending some dry-run conditions. | |||
| rgence | </t> | |||
| (or failure) in a small number of steps, namely a timeout and a maxi | <t> | |||
| mum number | Beyond the traditional yes/no answer, the responder can reply with a suggested | |||
| of iterations. | alternative value for the objective concerned. This would start a | |||
| <vspace blankLines="1"/> | bidirectional negotiation ending in a compromise between the two ASAs. | |||
| </t> | ||||
| </dd> | ||||
| </t> | <dt>Convergence of negotiation procedures: | |||
| </dt> | ||||
| <dd> | ||||
| <t>To enable convergence when a responder suggests a new value or condition | ||||
| in a negotiation step reply, it should be as close as possible to the original | ||||
| request or previous suggestion. The suggested value of later negotiation steps | ||||
| should be chosen between the suggested values from the previous two | ||||
| steps. GRASP provides mechanisms to guarantee convergence (or failure) in a | ||||
| small number of steps, namely a timeout and a maximum number of iterations. | ||||
| </t> | ||||
| </dd> | ||||
| <t>Extensibility:<vspace blankLines="1"/> | <dt>Extensibility: | |||
| GRASP intentionally does not have a version number, and can be exten | </dt> | |||
| ded by adding new | <dd> | |||
| message types and options. The Invalid Message (M_INVALID) will be u | <t>GRASP intentionally does not have a version number, and it can be extended by | |||
| sed to signal | adding new message types and options. The Invalid message (M_INVALID) will be | |||
| that an implementation does not recognize a message or option sent b | used to signal that an implementation does not recognize a message or option | |||
| y another | sent by another implementation. In normal use, new semantics will be added by | |||
| implementation. In normal use, new semantics will be added | defining new synchronization or negotiation objectives. | |||
| by defining new synchronization or negotiation objectives. | </t> | |||
| </t> | </dd> | |||
| </list></t> | </dl> | |||
| </section> | ||||
| <section title="Quick Operating Overview"> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Quick Operating Overview</name> | ||||
| <t>An instance of GRASP is expected to run as a separate core module, | <t>An instance of GRASP is expected to run as a separate core module, | |||
| providing an API (such as <xref target="I-D.liu-anima-grasp-api"/>) to i nterface to | providing an API (such as <xref target="RFC8991" format="default"/>) to interface to | |||
| various ASAs. | various ASAs. | |||
| These ASAs may operate without special privilege, unless they need it fo r | These ASAs may operate without special privilege, unless they need it fo r | |||
| other reasons (such as configuring IP addresses or manipulating routing | other reasons (such as configuring IP addresses or manipulating routing | |||
| tables). | tables). | |||
| </t><t> | </t> | |||
| <t> | ||||
| The GRASP mechanisms used by the ASA are built around GRASP objectives | The GRASP mechanisms used by the ASA are built around GRASP objectives | |||
| defined as data structures | defined as data structures | |||
| containing administrative information such as the objective's unique | containing administrative information such as the objective's unique | |||
| name, and its current value. The format and size of the value is | name and its current value. The format and size of the value is | |||
| not restricted by the protocol, except that it must be possible to | not restricted by the protocol, except that it must be possible to | |||
| serialize it for transmission in CBOR, which is no | serialize it for transmission in CBOR, which is no | |||
| restriction at all in practice. | restriction at all in practice. | |||
| </t><t> | </t> | |||
| <t> | ||||
| GRASP provides the following mechanisms: | GRASP provides the following mechanisms: | |||
| <list style="symbols"> | </t> | |||
| <t>A discovery mechanism (M_DISCOVERY, M_RESPONSE), by which an ASA can | <ul spacing="normal"> | |||
| <li>A discovery mechanism (M_DISCOVERY, M_RESPONSE) by which an ASA ca | ||||
| n | ||||
| discover other ASAs supporting a given objective. | discover other ASAs supporting a given objective. | |||
| </t><t> | </li> | |||
| A negotiation request mechanism (M_REQ_NEG), by which an ASA can start | <li> | |||
| A negotiation request mechanism (M_REQ_NEG) by which an ASA can start | ||||
| negotiation of an objective with a counterpart ASA. Once a negotiation has | negotiation of an objective with a counterpart ASA. Once a negotiation has | |||
| started, the process is symmetrical, and there is a negotiation step me ssage | started, the process is symmetrical, and there is a negotiation step me ssage | |||
| (M_NEGOTIATE) for each ASA to use in turn. Two other functions support negotiating | (M_NEGOTIATE) for each ASA to use in turn. Two other functions support negotiating | |||
| steps (M_WAIT, M_END). | steps (M_WAIT, M_END). | |||
| </t><t> | </li> | |||
| A synchronization mechanism (M_REQ_SYN), by which an ASA can request th | <li> | |||
| e | A synchronization mechanism (M_REQ_SYN) by which an ASA can request the | |||
| current value of an objective from a counterpart ASA. With this, | current value of an objective from a counterpart ASA. With this, | |||
| there is a corresponding response function (M_SYNCH) for an ASA that | there is a corresponding response function (M_SYNCH) for an ASA that | |||
| wishes to respond to synchronization requests. | wishes to respond to synchronization requests. | |||
| </t><t> | </li> | |||
| A flood mechanism (M_FLOOD), by which an ASA can cause the current value | <li> | |||
| of | A flood mechanism (M_FLOOD) by which an ASA can cause the current value | |||
| an objective to be flooded throughout the autonomic network so that any | of | |||
| ASA can | an objective to be flooded throughout the Autonomic Network so that any | |||
| ASA can | ||||
| receive it. One application of this is to act as an announcement, avoidi ng the need for | receive it. One application of this is to act as an announcement, avoidi ng the need for | |||
| discovery of a widely applicable objective.</t> | discovery of a widely applicable objective.</li> | |||
| </list></t> | </ul> | |||
| <t>Some example messages and simple message flows are provided in <xref ta | <t>Some example messages and simple message flows are provided in <xref | |||
| rget="examples"/>.</t> | target="examples" format="default"/>.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="GRASP Protocol Basic Properties and Mechanisms"> | <name>GRASP Basic Properties and Mechanisms</name> | |||
| <section anchor="reqsec" numbered="true" toc="default"> | ||||
| <section anchor="reqsec" title="Required External Security Mechanism"> | <name>Required External Security Mechanism</name> | |||
| <t>GRASP does not specify transport security because it is meant to | ||||
| <t>GRASP does not specify transport security because it is meant to be | be adapted to different environments. Every solution adopting GRASP | |||
| adapted to | <bcp14>MUST</bcp14> specify a security and transport substrate used by | |||
| different environments. Every solution adopting GRASP MUST specify a se | GRASP in | |||
| curity and transport substrate | that solution.</t> | |||
| used by GRASP in that solution.</t> | <t>The substrate <bcp14>MUST</bcp14> enforce sending and receiving GRA | |||
| SP messages | ||||
| <t>The substrate MUST enforce sending and receiving GRASP messages only | only between members of a mutually trusted group running GRASP. Each | |||
| between members of a mutually trusted | group member is an instance of GRASP. The group members are nodes of | |||
| group running GRASP. Each group member is an instance of GRASP. The grou | a connected graph. The group and graph are created by the security | |||
| p members are nodes of a | and transport substrate and are called the GRASP domain. The substrat | |||
| connected graph. The group and graph is created by the security and tran | e | |||
| sport substrate and called the GRASP domain. | must support unicast messages between any group members and | |||
| The substrate must support unicast messages between any group members an | (link-local) multicast messages between adjacent group members. It | |||
| d (link-local) multicast | must deny messages between group members and non-group members. With | |||
| messages between adjacent group members. It must deny messages between g | this model, security is provided by enforcing group membership, but | |||
| roup members and non group | any member of the trusted group can attack the entire network until | |||
| members. With this model, security is provided by enforcing group member | revoked.</t> | |||
| ship, but any member of the | <t> Substrates <bcp14>MUST</bcp14> use cryptographic member authentica | |||
| trusted group can attack the entire network until revoked.</t> | tion and | |||
| message integrity for GRASP messages. This can be end to end or | ||||
| <t> Substrates MUST use cryptographic member authentication and message | hop by hop across the domain. The security and transport substrate | |||
| integrity for GRASP messages. | <bcp14>MUST</bcp14> provide mechanisms to remove untrusted members fro | |||
| This can be end-to-end or hop-by-hop across the domain. The security and | m the | |||
| transport substrate MUST provide mechanisms | group.</t> | |||
| to remove untrusted members from the group.</t> | <t>If the substrate does not mandate and enforce GRASP message | |||
| encryption, then any service using GRASP in such a solution <bcp14>MUS | ||||
| <t>If the substrate does not mandate and enforce GRASP message encryptio | T</bcp14> | |||
| n then any service | provide protection and encryption for message elements whose | |||
| using GRASP in such a solution MUST provide protection and encryption fo | exposure could constitute an attack vector.</t> | |||
| r message elements whose | <t>The security and transport substrate for GRASP in the ANI is the | |||
| exposure could constitute an attack vector.</t> | ACP. Unless otherwise noted, we assume this security and transport | |||
| substrate in the remainder of this document. The ACP does mandate | ||||
| <t>The security and transport substrate for GRASP in the ANI is the ACP. | the use of encryption; therefore, GRASP in the ANI can rely on GRASP | |||
| Unless otherwise noted, we assume this | messages being encrypted. The GRASP domain is the ACP: all nodes in | |||
| security and transport substrate in the remainder of this document. The | an autonomic domain connected by encrypted virtual links formed by | |||
| ACP does mandate the use of encryption; | the ACP. The ACP uses hop-by-hop security | |||
| therefore GRASP in the ANI can rely on GRASP message being encrypted. Th | (authentication and encryption) of messages. Removal of nodes relies o | |||
| e GRASP domain is the ACP: all | n | |||
| nodes in an autonomic domain connected by encrypted virtual links formed | standard PKI certificate revocation or expiry of sufficiently short-li | |||
| by the ACP. The ACP uses | ved | |||
| hop-by-hop security (authentication/encryption) of messages. Removal of | certificates. Refer to <xref target="RFC8994" format="default"/> | |||
| nodes relies on standard | for more details.</t> | |||
| PKI certificate revocation or expiry of sufficiently short lived certifi | <t>As mentioned in <xref target="highlevel" format="default"/>, some G | |||
| cates. Refer to | RASP operations might be | |||
| <xref target="I-D.ietf-anima-autonomic-control-plane"/> for more detail | ||||
| s.</t> | ||||
| <t>As mentioned in <xref target="highlevel"/>, some GRASP operations mi | ||||
| ght be | ||||
| performed across an administrative domain boundary by mutual agreement, without the | performed across an administrative domain boundary by mutual agreement, without the | |||
| benefit of an ACP. Such operations | benefit of an ACP. Such operations | |||
| MUST be confined to a separate instance of GRASP with its own copy of a ll GRASP | <bcp14>MUST</bcp14> be confined to a separate instance of GRASP with it s own copy of all GRASP | |||
| data structures running across a separate GRASP domain with a security and transport substrate. | data structures running across a separate GRASP domain with a security and transport substrate. | |||
| In the most simple case, each point-to-point interdomain GRASP peering could be a | In the most simple case, each point-to-point interdomain GRASP peering could be a | |||
| separate domain and the security and transport substrate could be built using transport or network layer | separate domain, and the security and transport substrate could be buil t using transport or network-layer | |||
| security protocols. This is subject to future specifications. </t> | security protocols. This is subject to future specifications. </t> | |||
| <!-- TLS <xref target="RFC5246"/> and DTLS <xref target="RFC6347"/> bas | ||||
| ed on a Public Key Infrastructure (PKI) | ||||
| <xref target="RFC5280"/> are RECOMMENDED for this purpose.--> | ||||
| <t>An exception to the requirements for the security and transport subs trate exists | <t>An exception to the requirements for the security and transport subs trate exists | |||
| for highly constrained subsets of GRASP meant to support the establishm ent of a security and transport substrate, | for highly constrained subsets of GRASP meant to support the establishm ent of a security and transport substrate, | |||
| described in the following section.</t> | described in the following section.</t> | |||
| </section> | </section> | |||
| <section anchor="secinst" numbered="true" toc="default"> | ||||
| <section anchor="secinst" title="Discovery Unsolicited Link-Local (DULL | <name>Discovery Unsolicited Link-Local (DULL) GRASP</name> | |||
| ) GRASP"> | <t>Some services may need to use insecure GRASP discovery, response, | |||
| <t>Some services may need to use insecure GRASP discovery, response | and flood messages without being able to use preexisting security | |||
| and flood messages without being able to use pre-existing security asso | associations, for example, as part of discovery for establishing | |||
| ciations, for example | security associations such as a security substrate for GRASP.</t> | |||
| as part of discovery for establishing security associations such a | <t>Such operations being intrinsically insecure, they need to be confi | |||
| s a security substrate for | ned to link-local | |||
| GRASP.</t> | ||||
| <t>Such operations being intrinsically insecure, they need to be confin | ||||
| ed to link-local | ||||
| use to minimize the risk of malicious actions. Possible examples | use to minimize the risk of malicious actions. Possible examples | |||
| include discovery of candidate ACP neighbors | include discovery of candidate ACP neighbors | |||
| <xref target="I-D.ietf-anima-autonomic-control-plane"/>, discovery of b | <xref target="RFC8994" format="default"/>, discovery of bootstrap | |||
| ootstrap | proxies <xref target="RFC8995" format="default"/>, or perhaps | |||
| proxies <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/> or perha | ||||
| ps | ||||
| initialization services in networks using GRASP without being fully aut onomic | initialization services in networks using GRASP without being fully aut onomic | |||
| (e.g., no ACP). | (e.g., no ACP). | |||
| Such usage MUST be limited to link-local operations on a single interfa ce and MUST be confined | Such usage <bcp14>MUST</bcp14> be limited to link-local operations on a single interface and <bcp14>MUST</bcp14> be confined | |||
| to a separate insecure instance of GRASP with its own copy of all GRASP | to a separate insecure instance of GRASP with its own copy of all GRASP | |||
| data structures. This instance is nicknamed DULL - Discovery Unsolicite | data structures. This instance is nicknamed DULL -- Discovery Unsolicit | |||
| d Link-Local.</t> | ed Link-Local.</t> | |||
| <t>The detailed rules for the DULL instance of GRASP are as follows: | ||||
| <t>The detailed rules for the DULL instance of GRASP are as follows: | </t> | |||
| <list style="symbols"> | <ul spacing="normal"> | |||
| <t>An initiator MAY send Discovery or Flood Synchronization link-local | <li>An initiator <bcp14>MAY</bcp14> send Discovery or Flood Synchron | |||
| multicast messages which MUST have a loop count of 1, to prevent | ization link-local | |||
| multicast messages that <bcp14>MUST</bcp14> have a loop count of 1, to | ||||
| prevent | ||||
| off-link operations. | off-link operations. | |||
| Other unsolicited GRASP message types MUST NOT be sent.</t> | Other unsolicited GRASP message types <bcp14>MUST NOT</bcp14> be sent.< | |||
| <t>A responder MUST silently discard any message whose loop count is no | /li> | |||
| t 1.</t> | <li>A responder <bcp14>MUST</bcp14> silently discard any message who | |||
| <t>A responder MUST silently discard any message referring to a GRASP O | se loop count is not 1.</li> | |||
| bjective that is | <li>A responder <bcp14>MUST</bcp14> silently discard any message ref | |||
| not directly part of a service that requires this insecure mode.</t> | erring to a GRASP objective that is | |||
| <t>A responder MUST NOT relay any multicast messages.</t> | not directly part of a service that requires this insecure mode.</li> | |||
| <t>A Discovery Response MUST indicate a link-local address.</t> | <li>A responder <bcp14>MUST NOT</bcp14> relay any multicast messages | |||
| <t>A Discovery Response MUST NOT include a Divert option.</t> | .</li> | |||
| <t>A node MUST silently discard any message whose source address is not | <li>A Discovery Response <bcp14>MUST</bcp14> indicate a link-local a | |||
| link-local.</t> | ddress.</li> | |||
| </list></t> | <li>A Discovery Response <bcp14>MUST NOT</bcp14> include a Divert op | |||
| <t>To minimize traffic possibly observed by third parties, | tion.</li> | |||
| GRASP traffic SHOULD be minimized by using only Flood Synchronization | <li>A node <bcp14>MUST</bcp14> silently discard any message whose so | |||
| urce address is not link-local.</li> | ||||
| </ul> | ||||
| <t>To minimize traffic possibly observed by third parties, | ||||
| GRASP traffic <bcp14>SHOULD</bcp14> be minimized by using only Flood Sy | ||||
| nchronization | ||||
| to announce objectives and their associated locators, rather than by us ing Discovery | to announce objectives and their associated locators, rather than by us ing Discovery | |||
| and Response. Further details are out of scope for this document</t> | and Discovery Response messages. Further details are out of scope for t | |||
| </section> | his document.</t> | |||
| </section> | ||||
| <!-- <section anchor="secinst-sonn" title="Secure Only Neighbor Negotia | ||||
| tion"> | ||||
| <t>Some services might use insecure on-link operations as in DULL, | ||||
| but also use unicast synchronization or negotiation operations protecte | ||||
| d by TLS. | ||||
| A separate instance of GRASP is used, with its own copy of all GRASP da | ||||
| ta structures. | ||||
| This instance is nicknamed SONN - Secure Only Neighbor Negotiation.</t> | ||||
| <t> | ||||
| The detailed rules for the SONN instance of GRASP are as follows: | ||||
| <list style="symbols"> | ||||
| <t>All types of GRASP message are permitted.</t> | ||||
| <t>An initiator MUST send any Discovery or Flood Synchronization link-l | ||||
| ocal | ||||
| multicast messages with a loop count of 1.</t> | ||||
| <t>A responder MUST silently discard any Discovery or Flood Synchroniza | ||||
| tion message whose loop count is not 1.</t> | ||||
| <t>A responder MUST silently discard any message referring to a GRASP O | ||||
| bjective that is | ||||
| not directly part of the service concerned.</t> | ||||
| <t>A responder MUST NOT relay any multicast messages.</t> | ||||
| <t>A Discovery Response MUST indicate a link-local address.</t> | ||||
| <t>A Discovery Response MUST NOT include a Divert option.</t> | ||||
| <t>A node MUST silently discard any message whose source address is not | ||||
| link-local.</t> | ||||
| </list></t> | ||||
| <t>Further details are out of scope for this document.</t> | ||||
| </section> --> | ||||
| <section anchor="trans" title="Transport Layer Usage"> | ||||
| <t>All GRASP messages, after they are serialized as a CBOR byte string, | <section anchor="trans" numbered="true" toc="default"> | |||
| are transmitted | <name>Transport Layer Usage</name> | |||
| <t>All GRASP messages, after they are serialized as a CBOR byte string | ||||
| , are transmitted | ||||
| as such directly over the transport protocol in use. The transport proto col(s) for a GRASP | as such directly over the transport protocol in use. The transport proto col(s) for a GRASP | |||
| domain are specified by the security and transport substrate as introduc | domain are specified by the security and transport substrate as introduc | |||
| ed in <xref target="reqsec"/>.</t> | ed in <xref target="reqsec" format="default"/>.</t> | |||
| <t>GRASP discovery and flooding messages are designed for GRASP domain | ||||
| <t>GRASP discovery and flooding messages are designed for GRASP domain w | -wide flooding | |||
| ide flooding | ||||
| through hop-by-hop link-local multicast forwarding between adjacent GRAS P nodes. The | through hop-by-hop link-local multicast forwarding between adjacent GRAS P nodes. The | |||
| GRASP security and transport substrate needs to specify how these link l | GRASP security and transport substrate needs to specify how these link-l | |||
| ocal multicasts | ocal multicasts | |||
| are transported. This can be unreliable transport (UDP) but it SHOULD be | are transported. This can be unreliable transport (UDP) but it <bcp14>SH | |||
| reliable | OULD</bcp14> be reliable | |||
| transport (e.g., TCP).</t> | transport (e.g., TCP).</t> | |||
| <t>If the substrate specifies an unreliable transport such as UDP for | ||||
| <t>If the substrate specifies an unreliable transport such as UDP for di | discovery and flooding messages, | |||
| scovery and flooding messages, | then it <bcp14>MUST NOT</bcp14> use IP fragmentation because of its loss | |||
| then it MUST NOT use IP fragmentation because of its loss characteristic | characteristic, especially | |||
| , especially | in multi-hop flooding. GRASP <bcp14>MUST</bcp14> then enforce at the use | |||
| in multi-hop flooding. GRASP MUST then enforce at the user API level a l | r API level a limit to the size | |||
| imit to the size | of discovery and flooding messages, so that no fragmentation can occur. | |||
| of discovery and flooding messages, so that no fragmentation can occur. | For IPv6 transport, this | |||
| For IPv6 transport this | means that the size of those messages' IPv6 packets must be at most 1280 | |||
| means that those messages must be at most 1280 bytes sized IPv6 packets | bytes (unless there is a known | |||
| (unless there is a known | ||||
| larger minimum link MTU across the whole GRASP domain).</t> | larger minimum link MTU across the whole GRASP domain).</t> | |||
| <t>All other GRASP messages are unicast between group members of the G | ||||
| <t>All other GRASP messages are unicast beteween group members of the GR | RASP domain. These | |||
| ASP domain. These | <bcp14>MUST</bcp14> use a reliable transport protocol because GRASP itse | |||
| MUST use a reliable transport protocol because GRASP itself does not pro | lf does not provide for error detection, | |||
| vide for error detection, | retransmission, or flow control. Unless otherwise specified by the secur | |||
| retransmission or flow control. Unless otherwise specified by the securi | ity and transport | |||
| ty and transport | substrate, TCP <bcp14>MUST</bcp14> be used.</t> | |||
| substrate, TCP MUST be used.</t> | <t>The security and transport substrate for GRASP in the ANI is the AC | |||
| P. Unless otherwise noted, | ||||
| <t>The security and transport substrate for GRASP in the ANI is the ACP. | ||||
| Unless otherwise noted, | ||||
| we assume this security and transport substrate in the remainder of this document when describing | we assume this security and transport substrate in the remainder of this document when describing | |||
| GRASPs message transport. In the ACP, TCP is used for GRASP unicast mess | GRASP's message transport. In the ACP, TCP is used for GRASP unicast mes | |||
| ages. GRASP discovery and | sages. GRASP discovery and | |||
| flooding messages also use TCP: These link-local messages are forwarded | flooding messages also use TCP: these link-local messages are forwarded | |||
| by replicating them to | by replicating them to | |||
| all adjacent GRASP nodes on the link via TCP connections to those adjace nt GRASP nodes. Because | all adjacent GRASP nodes on the link via TCP connections to those adjace nt GRASP nodes. Because | |||
| of this, GRASP in the ANI has no limitations on the size of discovery an d flooding messages with | of this, GRASP in the ANI has no limitations on the size of discovery an d flooding messages with | |||
| respect to fragmentation issues. UDP is used in the ANI with GRASP only | respect to fragmentation issues. While the ACP is being built using a DU | |||
| with DULL when the ACP is built | LL instance of GRASP, | |||
| to discover ACP/GRASP neighbors on links.</t> | native UDP multicast is used to discover ACP/GRASP neighbors on links. < | |||
| /t> | ||||
| <!-- <t>Nevertheless, when running within a secure ACP on reliable infra | <t>For link-local UDP multicast, GRASP listens to the well-kno | |||
| structure, | wn | |||
| UDP MAY be used for unicast messages not exceeding the minimum IPv6 path | GRASP Listen Port (<xref target="Constants" format="default"/>). Transpo | |||
| MTU; | rt connections for discovery | |||
| however, TCP MUST be used for longer messages. In other words, IPv6 frag | and flooding on relay nodes must terminate in GRASP instances (e.g., GRA | |||
| mentation | SP ASAs) so | |||
| is avoided. If a node receives a UDP message but the reply is too long, | that link-local multicast, hop-by-hop flooding of M_DISCOVERY and M_FLOO | |||
| it | D messages and hop-by-hop forwarding | |||
| MUST open a TCP connection to the peer for the reply. Note that when | of M_RESPONSE responses and caching of those responses along the path wo | |||
| the network is under heavy load or in a fault condition, UDP might becom | rk correctly.</t> | |||
| e | <t>Unicast transport connections used for synchronization and negotiat | |||
| unreliable. Since this is when autonomic functions are most necessary, | ion can terminate | |||
| automatic fallback to TCP MUST be implemented. The simplest implementati | directly in ASAs that implement objectives; therefore, this traffic does | |||
| on | not need to | |||
| is therefore to use only TCP.</t> --> | ||||
| <t>For link-local UDP multicast, the GRASP protocol listens to the well- | ||||
| known | ||||
| GRASP Listen Port (<xref target="Constants"/>). Transport connections fo | ||||
| r Discovery | ||||
| and Flooding on relay nodes must terminate in GRASP instances (eg: GRASP | ||||
| ASAs) so | ||||
| that link-local multicast, hop-by-hop flooding of M_DISCOVERY and M_FLOO | ||||
| D and hop-by-hop forwarding | ||||
| of M_RESPONSE and caching of those responses along the path work correct | ||||
| ly.</t> | ||||
| <t>Unicast transport connections used for synchronization and negotiatio | ||||
| n can terminate | ||||
| directly in ASAs that implement objectives and therefore this traffic do | ||||
| es not need to | ||||
| pass through GRASP instances. For this, the ASA listens on its own dynam ically assigned ports, | pass through GRASP instances. For this, the ASA listens on its own dynam ically assigned ports, | |||
| which are communicated to its peers during discovery. Alternatively, the GRASP instance | which are communicated to its peers during discovery. Alternatively, the GRASP instance | |||
| can also terminate the unicast transport connections and pass the traffi c from/to the | can also terminate the unicast transport connections and pass the traffi c from/to the | |||
| ASA if that is preferrable in some implementation (eg: to better decoupl e ASAs from | ASA if that is preferable in some implementations (e.g., to better decou ple ASAs from | |||
| network connections).</t> | network connections).</t> | |||
| </section> | </section> | |||
| <section anchor="discmech" numbered="true" toc="default"> | ||||
| <section anchor="discmech" title="Discovery Mechanism and Procedures"> | <name>Discovery Mechanism and Procedures</name> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Separated discovery and negotiation mechanisms"> | <name>Separated Discovery and Negotiation Mechanisms</name> | |||
| <t>Although discovery and negotiation or synchronization are defined | ||||
| <t>Although discovery and negotiation or synchronization are d | ||||
| efined | ||||
| 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 synchr onization | process could run independently from the negotiation or synchr onization | |||
| process. Upon receiving a Discovery (<xref target="DiscoveryMe | process. Upon receiving a Discovery message (<xref target="Dis | |||
| ssage"/>) | coveryMessage" format="default"/>), | |||
| message, the | the | |||
| recipient node should return a response message in which it ei | recipient node should return a Discovery Response message in w | |||
| ther | hich it either | |||
| indicates itself as a discovery responder or diverts the | indicates itself as a discovery responder or diverts the | |||
| initiator towards another more suitable ASA. However, this | initiator towards another more suitable ASA. However, this | |||
| response may be delayed if the recipient needs to relay | response may be delayed if the recipient needs to relay | |||
| the discovery onwards, as described below.</t> | the Discovery message onward, as described in <xref target="d | |||
| iscovery-relaying" format="default"/>.</t> | ||||
| <t>The discovery action (M_DISCOVERY) will normally be followe | <t>The discovery action (M_DISCOVERY) will normally be followed by | |||
| d by | ||||
| a negotiation (M_REQ_NEG) or synchronization (M_REQ_SYN) actio n. The | a negotiation (M_REQ_NEG) or synchronization (M_REQ_SYN) actio n. The | |||
| discovery results could be utilized by the negotiation | discovery results could be utilized by the negotiation | |||
| protocol to decide which ASA the initiator will negotiate | protocol to decide which ASA the initiator will negotiate | |||
| with.</t> | with.</t> | |||
| <t>The initiator of a discovery action for a given objective need no | ||||
| <t>The initiator of a discovery action for a given objective n | t | |||
| eed not | be capable of responding to that objective as a negotiation co | |||
| be capable of responding to that objective as a Negotiation Co | unterpart, as a | |||
| unterpart, as a | synchronization responder, or as source for flooding. For exam | |||
| Synchronization Responder or as source for flooding. For examp | ple, an ASA might perform | |||
| le, an ASA might perform | discovery even if it only wishes to act as a synchronization i | |||
| discovery even if it only wishes to act a Synchronization Init | nitiator or negotiation initiator. | |||
| iator or Negotiation Initiator. | Such an ASA does not itself need to respond to Discovery messa | |||
| Such an ASA does not itself need to respond to discovery messa | ges.</t> | |||
| ges.</t> | <t>It is also entirely possible to use GRASP discovery without any s | |||
| ubsequent | ||||
| <t>It is also entirely possible to use GRASP discovery without | ||||
| any subsequent | ||||
| negotiation or synchronization action. In this case, the disco vered objective | negotiation or synchronization action. In this case, the disco vered objective | |||
| is simply used as a name during the discovery process and any subsequent | is simply used as a name during the discovery process, and any subsequent | |||
| operations between the peers are outside the scope of GRASP.</ t> | operations between the peers are outside the scope of GRASP.</ t> | |||
| </section> | </section> | |||
| <section anchor="discovw" numbered="true" toc="default"> | ||||
| <section anchor="discovw" title="Discovery Overview"> | <name>Discovery Overview</name> | |||
| <t>A complete discovery process will start with a multicast (of | <t>A complete discovery process will start with a multicast Discover | |||
| M_DISCOVERY) on the | y message (M_DISCOVERY) on the | |||
| local link. On-link neighbors supporting the discovery objective will | local link. On-link neighbors supporting the discovery objective will | |||
| respond directly (with M_RESPONSE). A neighbor with multiple int | respond directly with Discovery Response (M_RESPONSE) messages. | |||
| erfaces may respond | A neighbor with multiple interfaces may respond | |||
| with a cached discovery response. If it has no cached response, | with a cached Discovery Response. If it has no cached response, | |||
| it will relay the | it will relay the | |||
| discovery on its other GRASP interfaces<!--, for example reachin | Discovery message on its other GRASP interfaces. | |||
| g a higher-level gateway | If a node receiving the relayed Discovery message | |||
| in a hierarchical network-->. If a node receiving the relayed di | supports the discovery objective, it will respond to the relayed | |||
| scovery | Discovery message. | |||
| supports the discovery objective, it will respond to the relayed | ||||
| discovery. | ||||
| If it has a cached response, it will respond with that. | If it has a cached response, it will respond with that. | |||
| If not, it will repeat the discovery process, which thereby beco mes iterative. | If not, it will repeat the discovery process, which thereby beco mes iterative. | |||
| The loop count and timeout will ensure that the process ends. Fu rther details | The loop count and timeout will ensure that the process ends. Fu rther details | |||
| are given below. | are given in <xref target="discovery-relaying" format="default"/ | |||
| </t> | >. | |||
| <t>A Discovery message MAY be sent unicast to a peer node, | </t> | |||
| which SHOULD then proceed exactly as if the message had been mul | <t>A Discovery message <bcp14>MAY</bcp14> be sent unicast to a peer | |||
| ticast, | node, | |||
| which <bcp14>SHOULD</bcp14> then proceed exactly as if the messa | ||||
| ge had been multicast, | ||||
| except that when TCP is used, the response will be | except that when TCP is used, the response will be | |||
| on the same socket as the query. However, | on the same socket as the query. However, | |||
| this mode does not guarantee successful discovery in the general case. | this mode does not guarantee successful discovery in the general case. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="discproc" numbered="true" toc="default"> | ||||
| <section anchor="discproc" title="Discovery Procedures"> | <name>Discovery Procedures</name> | |||
| <t>Discovery starts as an on-link operation. The Divert option | <t>Discovery starts as an on-link operation. The Divert option | |||
| can tell the discovery initiator to contact an off-link | can tell the discovery initiator to contact an off-link | |||
| ASA for that discovery objective. If the security and transpor t substrate | ASA for that discovery objective. If the security and transpor t substrate | |||
| of the GRASP domain (see <xref target="trans"/>) uses UDP link -local multicast | of the GRASP domain (see <xref target="trans" format="default" />) uses UDP link-local multicast, | |||
| then the discovery initiator sends these to the ALL_GRASP_NEIG HBORS link-local | then the discovery initiator sends these to the ALL_GRASP_NEIG HBORS link-local | |||
| multicast address (<xref target="Constants"/>) and and all GRA | multicast address (<xref target="Constants" format="default"/> | |||
| SP nodes need | ), and all GRASP nodes need | |||
| to listen to this address to act as discovery responder. | to listen to this address to act as discovery responders. | |||
| Because this port | Because this port | |||
| is unique in a device, this is a function of the GRASP instanc e | is unique in a device, this is a function of the GRASP instanc e | |||
| and not of an individual ASA. As a result, each ASA will need to | and not of an individual ASA. As a result, each ASA will need to | |||
| register the objectives that it supports with the local GRASP instance.</t> | register the objectives that it supports with the local GRASP instance.</t> | |||
| <t>If an ASA in a neighbor device supports the requested discovery o | ||||
| <t>If an ASA in a neighbor device supports the requested disco | bjective, | |||
| very objective, | the device <bcp14>SHOULD</bcp14> respond to the link-local mul | |||
| the device SHOULD respond to the link-local multicast with a u | ticast with a unicast Discovery Response | |||
| nicast Discovery Response | message (<xref target="ResponseMessage" format="default"/>) wi | |||
| message (<xref target="ResponseMessage"/>) with locator option | th locator option(s) (<xref target="LocatorOption" format="default"/>) unless it | |||
| (s), unless it is | is | |||
| temporarily unavailable. Otherwise, if the neighbor has cached information | temporarily unavailable. Otherwise, if the neighbor has cached information | |||
| about an ASA that supports the requested discovery objective ( usually | about an ASA that supports the requested discovery objective ( usually | |||
| because it discovered the same objective before), it SHOULD | because it discovered the same objective before), it <bcp14>SH OULD</bcp14> | |||
| respond with a Discovery Response message with a Divert option pointing | respond with a Discovery Response message with a Divert option pointing | |||
| to the appropriate Discovery Responder. However, it SHOULD NOT | to the appropriate discovery responder. However, it <bcp14>SHO | |||
| respond | ULD NOT</bcp14> respond | |||
| with a cached response on an interface if it learnt that infor | with a cached response on an interface if it learned that info | |||
| mation from | rmation from | |||
| the same interface, because the peer in question will answer d | the same interface because the peer in question will answer di | |||
| irectly if still | rectly if still | |||
| operational.</t> | operational.</t> | |||
| <t>If a device has no information about the requested discovery obje | ||||
| <t>If a device has no information about the requested discover | ctive | |||
| y objective, | and is not acting as a discovery relay (see <xref target="disc | |||
| and is not acting as a discovery relay (see below) it MUST sil | overy-relaying" format="default"/>), it <bcp14>MUST</bcp14> silently | |||
| ently | ||||
| discard the Discovery message.</t> | discard the Discovery message.</t> | |||
| <t>The discovery initiator <bcp14>MUST</bcp14> set a reasonable time | ||||
| <t>The discovery initiator MUST set a reasonable timeout on th | out on the | |||
| e | ||||
| discovery process. A suggested value is 100 milliseconds multi plied by the loop count | discovery process. A suggested value is 100 milliseconds multi plied by the loop count | |||
| embedded in the objective.</t> | embedded in the objective.</t> | |||
| <t>If no Discovery Response is received within the timeout, | ||||
| <t>If no discovery response is received within the timeout, | the Discovery message <bcp14>MAY</bcp14> be repeated with a ne | |||
| <!-- a reasonable timeout | wly generated | |||
| (default GRASP_DEF_TIMEOUT milliseconds, <xref target="Constan | Session ID (<xref target="SessionID" format="default"/>). An e | |||
| ts"/>),--> | xponential backoff <bcp14>SHOULD</bcp14> be used | |||
| the Discovery message MAY be repeated, with a newly generated | for subsequent repetitions to limit the load during busy perio | |||
| Session ID (<xref target="SessionID"/>). An exponential backof | ds. The | |||
| f SHOULD be used | ||||
| for subsequent repetitions, to limit the load during busy peri | ||||
| ods. The | ||||
| details of the backoff algorithm will depend on the use case f or the | details of the backoff algorithm will depend on the use case f or the | |||
| objective concerned but MUST be consistent with the recommenda | objective concerned but <bcp14>MUST</bcp14> be consistent with | |||
| tions | the recommendations | |||
| in <xref target="RFC8085"/> for low data-volume multicast. | in <xref target="RFC8085" format="default"/> for low data-volu | |||
| Frequent repetition might be symptomatic of a denial of servic | me multicast. | |||
| e attack.</t> | Frequent repetition might be symptomatic of a denial-of-servic | |||
| e attack.</t> | ||||
| <t>After a GRASP device successfully discovers a locator for a | <t>After a GRASP device successfully discovers a locator for a disco | |||
| Discovery Responder | very responder | |||
| supporting a specific objective, it SHOULD cache this informat | supporting a specific objective, it <bcp14>SHOULD</bcp14> cach | |||
| ion, including the interface | e this information, including the interface | |||
| index <xref target="RFC3493"/> via which it was discovered. Th | index <xref target="RFC3493" format="default"/> via which it w | |||
| is cache record MAY be used for future | as discovered. This cache record <bcp14>MAY</bcp14> be used for future | |||
| negotiation or synchronization, and the locator SHOULD be pass | negotiation or synchronization, and the locator <bcp14>SHOULD< | |||
| ed on when appropriate | /bcp14> be passed on when appropriate | |||
| as a Divert option to another Discovery Initiator.</t> | as a Divert option to another discovery initiator.</t> | |||
| <t>The cache mechanism <bcp14>MUST</bcp14> include a lifetime for ea | ||||
| <t>The cache mechanism MUST include a lifetime for each entry. | ch entry. The | |||
| The | ||||
| lifetime is derived from a time-to-live (ttl) parameter in eac h | lifetime is derived from a time-to-live (ttl) parameter in eac h | |||
| Discovery Response message. | Discovery Response message. | |||
| Cached entries MUST be ignored or deleted after their lifetime expires. | Cached entries <bcp14>MUST</bcp14> be ignored or deleted after their lifetime expires. | |||
| In some environments, unplanned address renumbering might occu r. | In some environments, unplanned address renumbering might occu r. | |||
| In such cases, the lifetime SHOULD be short compared to | In such cases, the lifetime <bcp14>SHOULD</bcp14> be short com | |||
| the typical address lifetime<!-- and a mechanism to flush the | pared to | |||
| discovery cache MUST be implemented-->. The discovery mechanis | the typical address lifetime. The discovery mechanism | |||
| m | ||||
| needs to track the node's current address to ensure that Disco very | needs to track the node's current address to ensure that Disco very | |||
| Responses always indicate the correct address.</t> | Responses always indicate the correct address.</t> | |||
| <t>If multiple discovery responders are found for the same objective | ||||
| <t>If multiple Discovery Responders are found for the same obj | , they | |||
| ective, they | <bcp14>SHOULD</bcp14> all be cached unless this creates a reso | |||
| SHOULD all be cached, unless this creates a resource shortage. | urce shortage. The method | |||
| The method | ||||
| of choosing between multiple responders is an implementation c hoice. | of choosing between multiple responders is an implementation c hoice. | |||
| This choice MUST be available to each ASA but the GRASP implem | This choice <bcp14>MUST</bcp14> be available to each ASA, but | |||
| entation | the GRASP implementation | |||
| SHOULD provide a default choice.</t> | <bcp14>SHOULD</bcp14> provide a default choice.</t> | |||
| <t>Because discovery responders will be cached in a finite cache, th | ||||
| <t>Because Discovery Responders will be cached in a finite cac | ey might | |||
| he, they might | ||||
| be deleted at any time. In this case, discovery will need to b e repeated. If an | be deleted at any time. In this case, discovery will need to b e repeated. If an | |||
| ASA exits for any reason, its locator might still be cached fo r some time, | ASA exits for any reason, its locator might still be cached fo r some time, | |||
| and attempts to connect to it will fail. ASAs need to be robus t in these | and attempts to connect to it will fail. ASAs need to be robus t in these | |||
| circumstances. </t> | circumstances. </t> | |||
| </section> | ||||
| </section> | <section anchor="discovery-relaying" numbered="true" toc="default"> | |||
| <name>Discovery Relaying</name> | ||||
| <section title="Discovery Relaying"> | <t>A GRASP instance with multiple link-layer interfaces (typically | |||
| <t>A GRASP instance with multiple link-layer interfaces (typic | running in a router) <bcp14>MUST</bcp14> support discovery on all | |||
| ally running in a router) MUST | GRASP interfaces. We refer to this as a 'relaying instance'.</t> | |||
| support discovery on all GRASP interfaces. We refer to this as | <t>DULL instances (<xref target="secinst" format="default"/>) are | |||
| a 'relaying instance'.</t> | always single-interface instances and therefore <bcp14>MUST NO | |||
| T</bcp14> perform discovery relaying.</t> | ||||
| <t>DULL Instances (<xref target="secinst"/>) are | <t>If a relaying instance receives a Discovery message on a given | |||
| always single-interface instances and therefore MUST NOT perfo | interface for a specific objective that it does not support and | |||
| rm discovery relaying.</t> | for which it has not previously cached a discovery responder, it | |||
| <bcp14>MUST</bcp14> relay the query by reissuing a new Discovery | ||||
| <t>If a relaying instance receives a Discovery message | message as a link-local multicast on its other GRASP | |||
| on a given interface for a specific objective that it does not | interfaces.</t> | |||
| support and for | <t> The relayed Discovery message <bcp14>MUST</bcp14> have the | |||
| which it has not previously cached a Discovery Responder, it M | same Session ID and 'initiator' field as the incoming message (see < | |||
| UST relay | xref target="DiscoveryMessage" format="default"/>). The IP | |||
| the query by re-issuing a new Discovery message as a link-loca | address in the 'initiator' field is only used to disambiguate the | |||
| l multicast on its other | Session ID and is never used to address Response packets. | |||
| GRASP interfaces.</t> | Response packets are sent back to the relaying instance, not the | |||
| original initiator.</t> | ||||
| <t> The relayed discovery message MUST have the same Session I | <t>The M_DISCOVERY message does not encode the transport address | |||
| D and Initiator field | of the originator or relay. Response packets must therefore be | |||
| as the incoming (see <xref target="DiscoveryMessage"/>). The I | sent to the transport-layer address of the connection on which the | |||
| nitiator IP address field is only | M_DISCOVERY message was received. If the M_DISCOVERY was relayed | |||
| used to allow for disambiguation of the Session ID and is neve | via a reliable hop-by-hop transport connection, the response is | |||
| r used to address Response packets. | simply sent back via the same connection.</t> | |||
| Response packets are sent back to the relaying instance, not t | <t>If the M_DISCOVERY was relayed via link-local (e.g., UDP) | |||
| he original initiator.</t> | multicast, the response is sent back via a reliable hop-by-hop | |||
| transport connection with the same port number as the source port | ||||
| <t>The M_DISCOVERY message does not encode the transport addre | of the link-local multicast. Therefore, if link-local multicast is | |||
| ss of the originator or | used and M_RESPONSE messages are required (which is the case in | |||
| relay. Response packets must therefore be sent to the transpor | almost all GRASP instances except for the limited use of DULL | |||
| t layer address of the connection | instances in the ANI), GRASP needs to be able to bind to one port | |||
| on which the M_DISCOVERY message was received. If the M_DISCOV | number on UDP from which to originate the link-local multicast | |||
| ERY was relayed via a reliable | M_DISCOVERY messages and the same port number on the reliable | |||
| hop-by-hop transport connection, the response is simply sent b | hop-by-hop transport (e.g., TCP by default) to be able to respond to | |||
| ack via the same connection.</t> | transport connections from responders that want to send M_RESPONSE | |||
| messages back. Note that this port does not need to be the | ||||
| <t>If the M_DISCOVERY was relayed via link-local (eg: UDP) mul | GRASP_LISTEN_PORT.</t> | |||
| ticast, the response is sent | <t>The relaying instance <bcp14>MUST</bcp14> decrement the loop | |||
| back via a reliable hop-by-hop transport connection with the s | count within the objective, and <bcp14>MUST NOT</bcp14> relay the | |||
| ame port number as | Discovery message if the result is zero. Also, it | |||
| the source port of the link-local multicast. Therefore, if lin | <bcp14>MUST</bcp14> limit the total rate at which it relays | |||
| k-local multicast is | Discovery messages to a reasonable value in order to mitigate | |||
| used and M_RESPONSE messages are required (which is the case i | possible denial-of-service attacks. For example, the rate limit | |||
| n almost all GRASP instances | could be set to a small multiple of the observed rate of Discovery | |||
| except for the limited use of DULL instances in the ANI), GRAS | messages during normal operation. The relaying instance | |||
| P needs to be able to bind to one | <bcp14>MUST</bcp14> cache the Session ID value and initiator | |||
| port number on UDP from which to originate the link-local mult | address of each relayed Discovery message until any Discovery | |||
| icast M_DISCOVERY messages | Responses have arrived or the discovery process has timed out. To | |||
| and the same port number on the reliable hop-by-hop transport | prevent loops, it <bcp14>MUST NOT</bcp14> relay a Discovery | |||
| (eg: TCP by default) | message that carries a given cached Session ID and initiator | |||
| to be able to respond to transport connections from responders | address more than once. These precautions avoid discovery loops | |||
| that want to send | and mitigate potential overload.</t> | |||
| M_RESPONSE messages back. Note that this port does not need to | <t>Since the relay device is unaware of the timeout set by the origi | |||
| be the GRASP_LISTEN_PORT.</t> | nal | |||
| initiator, it <bcp14>SHOULD</bcp14> set a suitable timeout for | ||||
| <t>The relaying instance MUST decrement the loop count within | the relayed Discovery message. | |||
| the objective, and | ||||
| MUST NOT relay the Discovery message if the result is zero. | ||||
| Also, it MUST limit the total rate at which it relays discover | ||||
| y messages | ||||
| to a reasonable value, in order to mitigate possible denial of | ||||
| service attacks. | ||||
| For example, the rate limit could be set to a small multiple o | ||||
| f the observed | ||||
| rate of discovery messages during normal operation. | ||||
| The relaying instance MUST cache the Session ID value and init | ||||
| iator address of each | ||||
| relayed Discovery message until any Discovery Responses have a | ||||
| rrived or | ||||
| the discovery process has timed out. | ||||
| To prevent loops, it MUST NOT relay a Discovery message | ||||
| which carries a given cached Session ID and initiator address | ||||
| more than once. | ||||
| These precautions avoid discovery loops and mitigate potential | ||||
| overload.</t> | ||||
| <t>Since the relay device is unaware of the timeout set by the | ||||
| original | ||||
| initiator it SHOULD set a suitable timeout for the relayed dis | ||||
| covery. <!-- significantly less than GRASP_DEF_TIMEOUT | ||||
| milliseconds (<xref target="Constants"/>).--> | ||||
| A suggested value is 100 milliseconds multiplied by the remain ing loop count.</t> | A suggested value is 100 milliseconds multiplied by the remain ing loop count.</t> | |||
| <t>The discovery results received by the relaying instance <bcp14>MU | ||||
| <t>The discovery results received by the relaying instance MUS | ST</bcp14> in turn be | |||
| T in turn be | ||||
| sent as a Discovery Response message to the Discovery message that caused | sent as a Discovery Response message to the Discovery message that caused | |||
| the relay action.</t> | the relay action.</t> | |||
| </section> | ||||
| </section> | <section anchor="rapid" numbered="true" toc="default"> | |||
| <name>Rapid Mode (Discovery with Negotiation or Synchronization)</na | ||||
| <section anchor="rapid" title="Rapid Mode (Discovery with Negotiat | me> | |||
| ion or Synchronization )"> | <t>A Discovery message <bcp14>MAY</bcp14> include an | |||
| <t>A Discovery message MAY include an | objective option. This allows a rapid mode of negotiation | |||
| Objective option. This allows a rapid mode of negotiation | (<xref target="rapidneg" format="default"/>) or | |||
| (<xref target="rapidneg"/>) or | synchronization (<xref target="rapidsynch" format="default"/>) | |||
| synchronization (<xref target="rapidsynch"/>). | . | |||
| Rapid mode is currently limited to a single objective | Rapid mode is currently limited to a single objective | |||
| for simplicity of design and implementation. A possible future extension | for simplicity of design and implementation. A possible future extension | |||
| is to allow multiple objectives in rapid mode for greater effi ciency. | is to allow multiple objectives in rapid mode for greater effi ciency. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="negproc" numbered="true" toc="default"> | ||||
| <section anchor="negproc" title="Negotiation Procedures"> | <name>Negotiation Procedures</name> | |||
| <t>A negotiation initiator opens a transport connection to a | <t>A negotiation initiator opens a transport connection to a | |||
| counterpart ASA using the address, protocol and port obtained during d iscovery. | counterpart ASA using the address, protocol, and port obtained during discovery. | |||
| It then sends a negotiation request (using M_REQ_NEG) to the counterpa rt, | It then sends a negotiation request (using M_REQ_NEG) to the counterpa rt, | |||
| including a specific negotiation objective. It may request the negotia tion | including a specific negotiation objective. It may request the negotia tion | |||
| counterpart to make a specific configuration. Alternatively, it may | counterpart to make a specific configuration. Alternatively, it may | |||
| request a certain simulation or forecast result by sending a dry run c onfiguration. | request a certain simulation or forecast result by sending a dry-run c onfiguration. | |||
| The details, including the distinction between a dry run and a live | The details, including the distinction between a dry run and a live | |||
| configuration change, will be defined separately for each type of nego tiation | configuration change, will be defined separately for each type of nego tiation | |||
| objective. Any state associated with a dry run operation, | objective. Any state associated with a dry-run operation, | |||
| such as temporarily reserving a resource for subsequent use in a live | such as temporarily reserving a resource for subsequent use in a live | |||
| run, is entirely a matter for the designer of the ASA concerned.</t> | run, is entirely a matter for the designer of the ASA concerned.</t> | |||
| <t>Each negotiation session as a whole is subject to a timeout | <t>Each negotiation session as a whole is subject to a timeout | |||
| (default GRASP_DEF_TIMEOUT milliseconds, <xref target="Constants"/>), | (default GRASP_DEF_TIMEOUT milliseconds, <xref target="Constants" form | |||
| initialised when the request is sent (see <xref target="RequestMessage | at="default"/>), | |||
| "/>). | initialized when the request is sent (see <xref target="RequestMessage | |||
| " format="default"/>). | ||||
| If no reply message of any kind is received within the timeout, | If no reply message of any kind is received within the timeout, | |||
| the negotiation request MAY be repeated, with a newly generated | the negotiation request <bcp14>MAY</bcp14> be repeated with a newly ge | |||
| Session ID (<xref target="SessionID"/>). An exponential backoff SHOULD | nerated | |||
| be used | Session ID (<xref target="SessionID" format="default"/>). An exponenti | |||
| al backoff <bcp14>SHOULD</bcp14> be used | ||||
| for subsequent repetitions. The | 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.</t> | objective concerned.</t> | |||
| <t/> | ||||
| <t>If the counterpart can immediately apply the requested | <t>If the counterpart can immediately apply the requested | |||
| configuration, it will give an immediate positive (O_ACCEPT) answer (u sing M_END). | configuration, it will give an immediate positive (O_ACCEPT) answer us ing the Negotiation End (M_END) message. | |||
| This will end the negotiation phase immediately. Otherwise, it will | This will end the negotiation phase immediately. Otherwise, it will | |||
| negotiate (using M_NEGOTIATE). It will reply with a proposed alternati ve configuration | negotiate (using M_NEGOTIATE). It will reply with a proposed alternati ve configuration | |||
| that it can apply (typically, a configuration that uses fewer resource s | that it can apply (typically, a configuration that uses fewer resource s | |||
| than requested by the negotiation initiator). This will start a | than requested by the negotiation initiator). This will start a | |||
| bi-directional negotiation (using M_NEGOTIATE) to reach a compromise b | bidirectional negotiation using the Negotiate (M_NEGOTIATE) message to | |||
| etween the two ASAs.</t> | reach a compromise between the two ASAs.</t> | |||
| <t>The negotiation procedure is ended when one of the negotiation | <t>The negotiation procedure is ended when one of the negotiation | |||
| peers sends a Negotiation Ending (M_END) message, which contains an ac | peers sends a Negotiation End (M_END) message, which contains an Accep | |||
| cept (O_ACCEPT) | t (O_ACCEPT) | |||
| or decline (O_DECLINE) option and does not need a response from the ne | or Decline (O_DECLINE) option and does not need a response from the ne | |||
| gotiation | gotiation | |||
| peer. Negotiation may also end in failure (equivalent to a decline) | peer. Negotiation may also end in failure (equivalent to a decline) | |||
| if a timeout is exceeded or a loop count is exceeded. When the procedu re | if a timeout is exceeded or a loop count is exceeded. When the procedu re | |||
| ends for whatever reason, the transport connection SHOULD be closed. | ends for whatever reason, the transport connection <bcp14>SHOULD</bcp1 4> be closed. | |||
| A transport session failure is treated as a negotiation failure.</t> | A transport session failure is treated as a negotiation failure.</t> | |||
| <t>A negotiation procedure concerns one objective and one | <t>A negotiation procedure concerns one objective and one | |||
| counterpart. Both the initiator and the counterpart may take part in | counterpart. Both the initiator and the counterpart may take part in | |||
| simultaneous negotiations with various other ASAs, or in | simultaneous negotiations with various other ASAs or in | |||
| simultaneous negotiations about different objectives. Thus, GRASP is | simultaneous negotiations about different objectives. Thus, GRASP is | |||
| expected to be used in a multi-threaded mode or its logical equivalent | expected to be used in a multithreaded mode or its logical equivalent. | |||
| . Certain negotiation | 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. </t> | avoid over-allocating resources. </t> | |||
| <t>Some configuration actions, for example, wavelength switching | ||||
| <t>Some configuration actions, for example wavelength switching | ||||
| in optical networks, might take considerable time to execute. The ASA | in 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 | |||
| (<xref target="ConfirmWaitingMessage"/>, M_WAIT).</t> | (<xref target="ConfirmWaitingMessage" format="default"/>, M_WAIT).</t> | |||
| <section anchor="rapidneg" numbered="true" toc="default"> | ||||
| <section anchor="rapidneg" title="Rapid Mode (Discovery/Negotiation Li | <name>Rapid Mode (Discovery/Negotiation Linkage)</name> | |||
| nkage)"> | <t>A Discovery message <bcp14>MAY</bcp14> include a Negotiation | |||
| <t>A Discovery message MAY include a Negotiation | Objective option. In this case, it is as if the initiator sent the | |||
| Objective option. In this case it is as if the initiator sent the s | sequence | |||
| equence | M_DISCOVERY immediately followed by M_REQ_NEG. | |||
| M_DISCOVERY, immediately followed by M_REQ_NEG. | ||||
| This has implications for the construction of the GRASP core, as it must carefully | This has implications for the construction of the GRASP core, as it must carefully | |||
| pass the contents of the Negotiation Objective option to the ASA so that it | pass the contents of the Negotiation Objective option to the ASA so that it | |||
| may evaluate the objective directly. When a Negotiation Objective o ption is | may evaluate the objective directly. When a Negotiation Objective o ption is | |||
| present the ASA replies with an M_NEGOTIATE message (or M_END with | present, the ASA replies with an M_NEGOTIATE message (or M_END with | |||
| O_ACCEPT if it is | O_ACCEPT if it is | |||
| immediately satisfied with the proposal), rather than with an M_RES | immediately satisfied with the proposal) rather than with an M_RESP | |||
| PONSE. | ONSE. | |||
| However, if the recipient node does not support rapid mode, discove ry will | However, if the recipient node does not support rapid mode, discove ry will | |||
| continue normally.</t> | continue normally.</t> | |||
| <t>It is possible that a Discovery Response will arrive from a respo | ||||
| <t>It is possible that a Discovery Response will arrive from a resp | nder that | |||
| onder that | does not support rapid mode before such a Negotiation message arriv | |||
| does not support rapid mode, before such a Negotiation message arri | es. | |||
| ves. | ||||
| In this case, rapid mode will not occur.</t> | In this case, rapid mode will not occur.</t> | |||
| <t>This rapid mode could reduce the interactions between | ||||
| <t>This rapid mode could reduce the interactions between | ||||
| nodes so that a higher efficiency could be achieved. However, a net work in which some | nodes so that a higher efficiency could be achieved. However, a net work in which some | |||
| nodes support rapid mode and others do not will have complex timing -dependent behaviors. | nodes support rapid mode and others do not will have complex timing -dependent behaviors. | |||
| Therefore, the rapid negotiation function SHOULD be disabled by def | Therefore, the rapid negotiation function <bcp14>SHOULD</bcp14> be | |||
| ault. | disabled by default. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="synchproc" numbered="true" toc="default"> | ||||
| <section anchor="synchproc" title="Synchronization and Flooding Procedur | <name>Synchronization and Flooding Procedures</name> | |||
| es"> | <section anchor="synch" numbered="true" toc="default"> | |||
| <section anchor="synch" title="Unicast Synchronization"> | <name>Unicast Synchronization</name> | |||
| <t>A synchronization initiator opens a transport connection to a | <t>A synchronization initiator opens a transport connection to a | |||
| counterpart ASA using the address, protocol and port obtained during d | counterpart ASA using the address, protocol, and port obtained during | |||
| iscovery. | discovery. | |||
| It then sends a synchronization request (using M_REQ_SYN) to the | It then sends a Request Synchronization message (M_REQ_SYN, <xref targ | |||
| et="RequestMessage" format="default"/>) to the | ||||
| counterpart, including a specific synchronization objective. | counterpart, including a specific synchronization objective. | |||
| The counterpart responds with a Synchronization message (M_SYNCH, <xre f target="SynchMessage"/>) | The counterpart responds with a Synchronization message (M_SYNCH, <xre f target="SynchMessage" format="default"/>) | |||
| containing the current value of the requested synchronization | containing the current value of the requested synchronization | |||
| objective. No further messages are needed and the transport | objective. No further messages are needed, and the transport | |||
| connection SHOULD be closed. A transport session failure is treated | connection <bcp14>SHOULD</bcp14> be closed. A transport session failur | |||
| e is treated | ||||
| as a synchronization failure.</t> | as a synchronization failure.</t> | |||
| <t>If no reply message of any kind is received within a given timeou | ||||
| <t>If no reply message of any kind is received within a given timeout | t | |||
| (default GRASP_DEF_TIMEOUT milliseconds, <xref target="Constants"/>), | (default GRASP_DEF_TIMEOUT milliseconds, <xref target="Constants" form | |||
| the synchronization request MAY be repeated, with a newly generated | at="default"/>), | |||
| Session ID (<xref target="SessionID"/>). An exponential backoff SHOULD | the synchronization request <bcp14>MAY</bcp14> be repeated with a newl | |||
| be used | y generated | |||
| Session ID (<xref target="SessionID" format="default"/>). An exponenti | ||||
| al backoff <bcp14>SHOULD</bcp14> be used | ||||
| for subsequent repetitions. The | 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.</t> | objective concerned.</t> | |||
| </section> | </section> | |||
| <section anchor="flooding" numbered="true" toc="default"> | ||||
| <section anchor="flooding" title="Flooding"> | <name>Flooding</name> | |||
| <t>In the case just described, the message exchange is unicast and | <t>In the case just described, the message exchange is unicast and | |||
| concerns only one synchronization objective. For large groups of nodes | concerns only one synchronization objective. For large groups of nodes | |||
| requiring the same data, synchronization flooding is available. For th is, | requiring the same data, synchronization flooding is available. For th is, | |||
| a flooding initiator MAY send an unsolicited Flood Synchronization mes sage containing | a flooding initiator <bcp14>MAY</bcp14> send an unsolicited Flood Sync hronization message (<xref target="FloodMessage" format="default"/>) containing | |||
| one or more Synchronization Objective option(s), if and only if the sp ecification | one or more Synchronization Objective option(s), if and only if the sp ecification | |||
| of those objectives permits it. This is sent as a multicast message to the | of those objectives permits it. This is sent as a multicast message to the | |||
| ALL_GRASP_NEIGHBORS multicast address (<xref target="Constants"/>).</t | ALL_GRASP_NEIGHBORS multicast address (<xref target="Constants" format | |||
| > | ="default"/>).</t> | |||
| <t>Receiving flood multicasts is a function of the GRASP core, | ||||
| <t>Receiving flood multicasts is a function of the GRASP core, | as in the case of discovery multicasts (<xref target="discproc" format | |||
| as in the case of discovery multicasts (<xref target="discproc"/>).</t | ="default"/>).</t> | |||
| > | <t>To ensure that flooding does not result in a loop, the originator | |||
| of the Flood Synchronization message | ||||
| <t>To ensure that flooding does not result in a loop, the originator o | <bcp14>MUST</bcp14> set the loop count in the objectives to a suitable | |||
| f the Flood Synchronization message | value (the default is GRASP_DEF_LOOPCT). | |||
| MUST set the loop count in the objectives to a suitable value (the def | ||||
| ault is GRASP_DEF_LOOPCT). | ||||
| Also, a suitable mechanism is needed | Also, a suitable mechanism is needed | |||
| to avoid excessive multicast traffic. This mechanism MUST be defined a s part of the | to avoid excessive multicast traffic. This mechanism <bcp14>MUST</bcp1 4> be defined as part of the | |||
| specification of the synchronization objective(s) concerned. It might be a simple rate | specification of the synchronization objective(s) concerned. It might be a simple rate | |||
| limit or a more complex mechanism such as the Trickle algorithm <xref | limit or a more complex mechanism such as the Trickle algorithm <xref | |||
| target="RFC6206"/>.</t> | target="RFC6206" format="default"/>.</t> | |||
| <t>A GRASP device with multiple link-layer interfaces (typically a r | ||||
| <t>A GRASP device with multiple link-layer interfaces (typically a rou | outer) <bcp14>MUST</bcp14> | |||
| ter) MUST | ||||
| support synchronization flooding on all GRASP interfaces. If it receiv es a multicast | support synchronization flooding on all GRASP interfaces. If it receiv es a multicast | |||
| Flood Synchronization message on a given interface, it MUST relay | Flood Synchronization message on a given interface, it <bcp14>MUST</bc | |||
| it by re-issuing a Flood Synchronization message as a link-local multi | p14> relay | |||
| cast | it by reissuing a Flood Synchronization message as a link-local multic | |||
| ast | ||||
| on its other GRASP interfaces. | on its other GRASP interfaces. | |||
| The relayed message MUST have the same Session ID as the incoming | The relayed message <bcp14>MUST</bcp14> have the same Session ID as th | |||
| message and MUST be tagged with the IP address of its original initiat | e incoming | |||
| or. </t> | message and <bcp14>MUST</bcp14> be tagged with the IP address of its o | |||
| riginal initiator. </t> | ||||
| <t>Link-layer Flooding is supported by GRASP by setting the loop count | <t>Link-layer flooding is supported by GRASP by setting the loop cou | |||
| to 1, | nt to 1 | |||
| and sending with a link-local source address. Floods with link-local s ource addresses | and sending with a link-local source address. Floods with link-local s ource addresses | |||
| and a loop count other than 1 are invalid, and such messages MUST be d | and a loop count other than 1 are invalid, and such messages <bcp14>MU | |||
| iscarded.</t> | ST</bcp14> be discarded.</t> | |||
| <t>The relaying device <bcp14>MUST</bcp14> decrement the loop count | ||||
| <t>The relaying device MUST decrement the loop count within the first | within the first objective and | |||
| objective, and | <bcp14>MUST NOT</bcp14> relay the Flood Synchronization message if the | |||
| MUST NOT relay the Flood Synchronization message if the result is zero | result is zero. | |||
| . | Also, it <bcp14>MUST</bcp14> limit the total rate at which it relays F | |||
| Also, it MUST limit the total rate at which it relays Flood Synchroniz | lood Synchronization messages | |||
| ation messages | to a reasonable value, in order to mitigate possible denial-of-service | |||
| to a reasonable value, in order to mitigate possible denial of service | attacks. | |||
| attacks. | ||||
| For example, the rate limit could be set to a small multiple of the ob served | For example, the rate limit could be set to a small multiple of the ob served | |||
| rate of flood messages during normal operation. | rate of flood messages during normal operation. | |||
| The relaying device MUST cache the Session ID value and initiator addr ess of each relayed | The relaying device <bcp14>MUST</bcp14> cache the Session ID value and initiator address of each relayed | |||
| Flood Synchronization message for a time not less than twice GRASP_DEF _TIMEOUT milliseconds. | Flood Synchronization message for a time not less than twice GRASP_DEF _TIMEOUT milliseconds. | |||
| To prevent loops, it MUST NOT relay a Flood Synchronization message | To prevent loops, it <bcp14>MUST NOT</bcp14> relay a Flood Synchroniza | |||
| which carries a given cached Session ID and initiator address more tha | tion message | |||
| n once. | that carries a given cached Session ID and initiator address more than | |||
| once. | ||||
| These precautions avoid synchronization loops and mitigate potential o verload.</t> | These precautions avoid synchronization loops and mitigate potential o verload.</t> | |||
| <t>Note that this mechanism is unreliable in the case of sleeping no | ||||
| <t>Note that this mechanism is unreliable in the case of sleeping node | des, | |||
| s, | ||||
| 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 <bcp14>SHOULD</bcp14> rep | |||
| at a suitable frequency, which MUST be consistent with the recommendat | eat the flood | |||
| ions | at a suitable frequency, which <bcp14>MUST</bcp14> be consistent with | |||
| in <xref target="RFC8085"/> for low data-volume multicast. | the recommendations | |||
| The ASA SHOULD also act as a synchronization responder for | in <xref target="RFC8085" format="default"/> for low data-volume multi | |||
| cast. | ||||
| The ASA <bcp14>SHOULD</bcp14> also act as a synchronization responder | ||||
| for | ||||
| the objective(s) concerned. Thus nodes that require an objective subje ct to | the objective(s) concerned. Thus nodes that require an objective subje ct to | |||
| flooding can either wait for the next flood or request unicast synchro nization | flooding can either wait for the next flood or request unicast synchro nization | |||
| for that objective. </t> | for that objective. </t> | |||
| <t>The multicast messages for synchronization flooding are subject t | ||||
| <t>The multicast messages for synchronization flooding are subject to | o the security | |||
| the security | rules in <xref target="reqsec" format="default"/>. In practice, this m | |||
| rules in <xref target="reqsec"/>. In practice this means that they MUS | eans that they <bcp14>MUST NOT</bcp14> be transmitted | |||
| T NOT be transmitted | and <bcp14>MUST</bcp14> be ignored on receipt unless there is an opera | |||
| and MUST be ignored on receipt unless there is an operational ACP or e | tional ACP or equivalent strong | |||
| quivalent strong | ||||
| security in place. However, because | security in place. However, because | |||
| of the security weakness of link-local multicast (<xref target="securi | of the security weakness of link-local multicast (<xref target="securi | |||
| ty"/>), | ty" format="default"/>), | |||
| synchronization objectives that are flooded SHOULD NOT contain unencry | synchronization objectives that are flooded <bcp14>SHOULD NOT</bcp14> | |||
| pted private | contain unencrypted private | |||
| information and SHOULD be validated by the recipient ASA.</t> | information and <bcp14>SHOULD</bcp14> be validated by the recipient AS | |||
| A.</t> | ||||
| </section> | </section> | |||
| <section anchor="rapidsynch" numbered="true" toc="default"> | ||||
| <section anchor="rapidsynch" title="Rapid Mode (Discovery/Synchronizat | <name>Rapid Mode (Discovery/Synchronization Linkage)</name> | |||
| ion Linkage)"> | <t>A Discovery message <bcp14>MAY</bcp14> include a Synchronization | |||
| <t>A Discovery message MAY include a Synchronization | Objective option. In this case, the Discovery message also acts | |||
| Objective option. In this case the Discovery message also acts | as a Request Synchronization message to indicate to the discovery r | |||
| as a Request Synchronization message to indicate to the Discovery R | esponder | |||
| esponder | that it could directly reply to the discovery initiator with | |||
| that it could directly reply to the Discovery Initiator with | a Synchronization message (<xref target="SynchMessage" format="defa | |||
| a Synchronization message <xref target="SynchMessage"/> with synchr | ult"/>) with synchronization data for rapid processing, | |||
| onization data for rapid processing, | ||||
| if the discovery target supports the corresponding synchronization | if the discovery target supports the corresponding synchronization | |||
| objective. The design implications are similar to those discussed i | objective. The design implications are similar to those discussed i | |||
| n <xref target="rapidneg"/>.</t> | n <xref target="rapidneg" format="default"/>.</t> | |||
| <t>It is possible that a Discovery Response will arrive from a respo | ||||
| <t>It is possible that a Discovery Response will arrive from a resp | nder that | |||
| onder that | does not support rapid mode before such a Synchronization message a | |||
| does not support rapid mode, before such a Synchronization message | rrives. | |||
| arrives. | ||||
| In this case, rapid mode will not occur.</t> | In this case, rapid mode will not occur.</t> | |||
| <t>This rapid mode could reduce the interactions between | ||||
| <t>This rapid mode could reduce the interactions between | ||||
| nodes so that a higher efficiency could be achieved. However, a net work in which some | nodes so that a higher efficiency could be achieved. However, a net work in which some | |||
| nodes support rapid mode and others do not will have complex timing -dependent behaviors. | nodes support rapid mode and others do not will have complex timing -dependent behaviors. | |||
| Therefore, the rapid synchronization function SHOULD be configured | Therefore, the rapid synchronization function <bcp14>SHOULD</bcp14> | |||
| off by default | be configured off by default | |||
| and MAY be configured on or off by Intent.</t> | and <bcp14>MAY</bcp14> be configured on or off by Intent.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="Constants" numbered="true" toc="default"> | ||||
| <name>GRASP Constants</name> | ||||
| <section anchor="Constants" title="GRASP Constants"> | <dl newline="true"> | |||
| <t><list style="symbols"> | <dt>ALL_GRASP_NEIGHBORS | |||
| <t>ALL_GRASP_NEIGHBORS<vspace blankLines="1"/>A link-local | </dt> | |||
| scope multicast address used by a GRASP-enabled device to discover | <dd> <t>A link-local scope multicast address used by a GRASP-enabled device to | |||
| GRASP-enabled neighbor (i.e., on-link) devices. All devices that | discover GRASP-enabled neighbor (i.e., on-link) devices. All devices that | |||
| support GRASP are members of this multicast group.<list style="symbo | support GRASP are members of this multicast group.</t> | |||
| ls"> | ||||
| <t>IPv6 multicast address: TBD1</t> | ||||
| <t>IPv4 multicast address: TBD2</t> | <ul spacing="normal"> | |||
| </list></t> | <li>IPv6 multicast address: ff02::13</li> | |||
| <li>IPv4 multicast address: 224.0.0.119</li> | ||||
| </ul> | ||||
| </dd> | ||||
| <t>GRASP_LISTEN_PORT (TBD3)<vspace blankLines="1"/>A well-known UDP | <dt>GRASP_LISTEN_PORT (7017) | |||
| user port that | </dt> | |||
| every GRASP-enabled network device MUST listen to for link-local mul | <dd> <t>A well-known UDP user port that every GRASP-enabled network device | |||
| ticasts when UDP | <bcp14>MUST</bcp14> listen to for link-local multicasts when UDP is used for | |||
| is used for M_DISCOVERY or M_FLOOD messages in the GRASP instance | M_DISCOVERY or M_FLOOD messages in the GRASP instance. This user port | |||
| This user port MAY also be used to listen for TCP or UDP unicast mes | <bcp14>MAY</bcp14> also be used to listen for TCP or UDP unicast messages in a | |||
| sages | simple implementation of GRASP (<xref target="trans" format="default"/>).</t> | |||
| in a simple implementation of GRASP (<xref target="trans"/>).</t> | </dd> | |||
| <t>GRASP_DEF_TIMEOUT (60000 milliseconds)<vspace blankLines="1"/>The | <dt>GRASP_DEF_TIMEOUT (60000 milliseconds) | |||
| default timeout used to | </dt> | |||
| determine that an operation has failed to complete.</t> | <dd><t>The default timeout used to determine that an operation has failed to com | |||
| plete.</t> | ||||
| </dd> | ||||
| <t>GRASP_DEF_LOOPCT (6)<vspace blankLines="1"/>The default loop coun | <dt>GRASP_DEF_LOOPCT (6) | |||
| t used to | </dt> | |||
| determine that a negotiation has failed to complete, and to avoid lo | <dd><t>The default loop count used to determine that a negotiation has failed | |||
| oping messages.</t> | to complete and to avoid looping messages.</t> | |||
| </dd> | ||||
| <t>GRASP_DEF_MAX_SIZE (2048)<vspace blankLines="1"/>The default maxi | <dt>GRASP_DEF_MAX_SIZE (2048) | |||
| mum message size in bytes.</t> | </dt> | |||
| </list></t> | <dd><t>The default maximum message size in bytes.</t> | |||
| </section> | </dd> | |||
| <section anchor="SessionID" title="Session Identifier (Session ID)"> | </dl> | |||
| </section> | ||||
| <section anchor="SessionID" numbered="true" toc="default"> | ||||
| <name>Session Identifier (Session ID)</name> | ||||
| <t>This is an up to 32-bit opaque value used to distinguish multiple ses sions between | <t>This is an up to 32-bit opaque value used to distinguish multiple ses sions between | |||
| the same two devices. A new Session ID MUST be generated by the initiato | the same two devices. A new Session ID <bcp14>MUST</bcp14> be generated | |||
| r for every | by the initiator for every | |||
| new Discovery, Flood Synchronization or Request message. All responses a | new Discovery, Flood Synchronization, or Request message. All responses | |||
| nd follow-up messages in the same | and follow-up messages in the same | |||
| discovery, synchronization or negotiation procedure MUST carry the same | discovery, synchronization, or negotiation procedure <bcp14>MUST</bcp14> | |||
| Session ID.</t> | carry the same Session ID.</t> | |||
| <t>The Session ID <bcp14>SHOULD</bcp14> have a very low collision rate l | ||||
| <t>The Session ID SHOULD have a very low collision rate locally. It | ocally. It | |||
| MUST be generated by a pseudo-random number generator (PRNG) using a loc | <bcp14>MUST</bcp14> be generated by a pseudorandom number generator (PRN | |||
| ally | G) using a locally | |||
| generated seed which is unlikely to be used by any other device in the s | generated seed that is unlikely to be used by any other device in the sa | |||
| ame | me | |||
| network. The PRNG SHOULD be cryptographically strong <xref target="RFC40 | network. The PRNG <bcp14>SHOULD</bcp14> be cryptographically strong <xre | |||
| 86"/>. | f target="RFC4086" format="default"/>. | |||
| When allocating a new Session ID, GRASP MUST | When allocating a new Session ID, GRASP <bcp14>MUST</bcp14> | |||
| check that the value is not already in use and SHOULD check that it has | check that the value is not already in use and <bcp14>SHOULD</bcp14> che | |||
| not been | ck that it has not been | |||
| used recently, by consulting a cache of current and recent sessions. In | used recently by consulting a cache of current and recent sessions. In t | |||
| the unlikely | he unlikely | |||
| event of a clash, GRASP MUST generate a new value.</t> | event of a clash, GRASP <bcp14>MUST</bcp14> generate a new value.</t> | |||
| <t>However, there is a finite probability that two nodes might generate the same | <t>However, there is a finite probability that two nodes might generate the same | |||
| Session ID value. For that reason, when a Session ID is communicated via GRASP, the | Session ID value. For that reason, when a Session ID is communicated via GRASP, the | |||
| receiving node MUST tag it with the initiator's IP address to allow disa mbiguation. | receiving node <bcp14>MUST</bcp14> tag it with the initiator's IP addres s to allow disambiguation. | |||
| In the highly unlikely event of two peers opening sessions with the same | In the highly unlikely event of two peers opening sessions with the same | |||
| Session ID value, this tag will allow the two sessions to be distinguish ed. | Session ID value, this tag will allow the two sessions to be distinguish ed. | |||
| Multicast GRASP messages and their responses, which may be relayed betwe en links, | Multicast GRASP messages and their responses, which may be relayed betwe en links, | |||
| therefore include a field that carries the initiator's global IP address .</t> | therefore include a field that carries the initiator's global IP address .</t> | |||
| <t>There is a highly unlikely race condition in which two peers start si multaneous negotiation | <t>There is a highly unlikely race condition in which two peers start si multaneous negotiation | |||
| sessions with each other using the same Session ID value. Depending on v arious | sessions with each other using the same Session ID value. Depending on v arious | |||
| implementation choices, this might lead to the two sessions being confus ed. | implementation choices, this might lead to the two sessions being confus ed. | |||
| See <xref target="RequestMessage"/> for details of how to avoid this.</t > | See <xref target="RequestMessage" format="default"/> for details of how to avoid this.</t> | |||
| </section> | </section> | |||
| <section anchor="GRASPMessages" numbered="true" toc="default"> | ||||
| <section anchor="GRASPMessages" title="GRASP Messages"> | <name>GRASP Messages</name> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Message Overview"> | <name>Message Overview</name> | |||
| <t>This section defines the GRASP message format and message types. | <t>This section defines the GRASP message format and message types. | |||
| Message types not listed here are reserved for future use. </t> | Message types not listed here are reserved for future use. </t> | |||
| <t>The messages currently defined are: | <t>The messages currently defined are: | |||
| <list style="bullets"> | </t> | |||
| <t>Discovery and Discovery Response (M_DISCOVERY, M_RESPONSE).</t> | <ul spacing="normal" empty="true"> | |||
| <t>Request Negotiation, Negotiation, Confirm Waiting and Negotiation E | <li>Discovery and Discovery Response (M_DISCOVERY, M_RESPONSE).</li> | |||
| nd (M_REQ_NEG, M_NEGOTIATE, M_WAIT, M_END).</t> | <li>Request Negotiation, Negotiation, Confirm Waiting, and Negotiati | |||
| <t>Request Synchronization, Synchronization, and Flood Synchronization | on End (M_REQ_NEG, M_NEGOTIATE, M_WAIT, M_END).</li> | |||
| (M_REQ_SYN, M_SYNCH, M_FLOOD.</t> | <li>Request Synchronization, Synchronization, and Flood Synchronizat | |||
| <t>No Operation and Invalid (M_NOOP, M_INVALID).</t> | ion (M_REQ_SYN, M_SYNCH, M_FLOOD).</li> | |||
| </list></t> | <li>No Operation and Invalid (M_NOOP, M_INVALID).</li> | |||
| </ul> | ||||
| </section> | </section> | |||
| <section title="GRASP Message Format"> | <section numbered="true" toc="default"> | |||
| <name>GRASP Message Format</name> | ||||
| <t>GRASP messages share an identical header format and a | <t>GRASP messages share an identical header format and a | |||
| variable format area for options. GRASP message headers and options | variable format area for options. GRASP message headers and options | |||
| are transmitted in Concise Binary Object Representation (CBOR) | are transmitted in Concise Binary Object Representation (CBOR) | |||
| <xref target="RFC7049"/>. In this specification, they are described | <xref target="RFC8949" format="default"/>. In this specification, they | |||
| using CBOR data definition language (CDDL) | are described | |||
| <xref target="I-D.greevenbosch-appsawg-cbor-cddl"/>. | using Concise Data Definition Language (CDDL) | |||
| <xref target="RFC8610" format="default"/>. | ||||
| Fragmentary CDDL is used to describe each item in this section. A comp lete and normative | Fragmentary CDDL is used to describe each item in this section. A comp lete and normative | |||
| CDDL specification of GRASP is given in <xref target="cddl"/>, includi ng constants such | CDDL specification of GRASP is given in <xref target="cddl" format="de fault"/>, including constants such | |||
| as message types. | as message types. | |||
| </t> | </t> | |||
| <t>Every GRASP message, except the No Operation message, carries a Ses | <t>Every GRASP message, except the No Operation message, carries a Ses | |||
| sion ID (<xref target="SessionID"/>). | sion ID (<xref target="SessionID" format="default"/>). | |||
| Options are then presented serially in the options field.</t> | Options are then presented serially.</t> | |||
| <t>In fragmentary CDDL, every GRASP message follows the pattern:</t> | <t>In fragmentary CDDL, every GRASP message follows the pattern:</t> | |||
| <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>The MESSAGE_TYPE indicates the type of the message and thus defines | <t>The MESSAGE_TYPE indicates the type of the message and thus defines | |||
| the expected options. Any options received that are not consistent wit h | the expected options. Any options received that are not consistent wit h | |||
| the MESSAGE_TYPE SHOULD be silently discarded. </t> | the MESSAGE_TYPE <bcp14>SHOULD</bcp14> be silently discarded. </t> | |||
| <t>The No Operation (noop) message is described in <xref target="noop | ||||
| <t>The No Operation (noop) message is described in <xref target="noop | " format="default"/>.</t> | |||
| "/>.</t> | <t>The various MESSAGE_TYPE values are defined in <xref target="cddl" | |||
| <t>The various MESSAGE_TYPE values are defined in <xref target="cddl"/ | format="default"/>.</t> | |||
| >.</t> | <t>All other message elements are described below and formally defined | |||
| <t>All other message elements are described below and formally defined | in <xref target="cddl" format="default"/>.</t> | |||
| in <xref target="cddl"/>.</t> | ||||
| <t>If an unrecognized MESSAGE_TYPE is received in a unicast message, | <t>If an unrecognized MESSAGE_TYPE is received in a unicast message, | |||
| an Invalid message (<xref target="invalid"/>) MAY be returned. Otherwi | an Invalid message (<xref target="invalid" format="default"/>) <bcp14> | |||
| se the message | MAY</bcp14> be returned. Otherwise, the message | |||
| MAY be logged and MUST be discarded. If an unrecognized MESSAGE_TYPE i | <bcp14>MAY</bcp14> be logged and <bcp14>MUST</bcp14> be discarded. If | |||
| s received | an unrecognized MESSAGE_TYPE is received | |||
| in a multicast message, it MAY be logged and MUST be silently discarde | in a multicast message, it <bcp14>MAY</bcp14> be logged and <bcp14>MUS | |||
| d.</t> | T</bcp14> be silently discarded.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Message Size"> | <name>Message Size</name> | |||
| <t>GRASP nodes MUST be able to receive unicast messages of at least GRAS | <t>GRASP nodes <bcp14>MUST</bcp14> be able to receive unicast messages | |||
| P_DEF_MAX_SIZE bytes. GRASP nodes | of at least GRASP_DEF_MAX_SIZE bytes. GRASP nodes | |||
| MUST NOT send unicast messages longer than GRASP_DEF_MAX_SIZE bytes unle | <bcp14>MUST NOT</bcp14> send unicast messages longer than GRASP_DEF_MAX_ | |||
| ss a longer size is explicitly | SIZE bytes unless a longer size is explicitly | |||
| allowed for the objective concerned. For example, GRASP negotiation itse lf could be used | allowed for the objective concerned. For example, GRASP negotiation itse lf could be used | |||
| to agree on a longer message size.</t> | to agree on a longer message size.</t> | |||
| <t>The message parser used by GRASP should be configured to know about t he GRASP_DEF_MAX_SIZE, or | <t>The message parser used by GRASP should be configured to know about the GRASP_DEF_MAX_SIZE, or | |||
| any larger negotiated message size, so that it may defend against overly long messages.</t> | any larger negotiated message size, so that it may defend against overly long messages.</t> | |||
| <t>The maximum size of multicast messages (M_DISCOVERY and M_FLOOD) de | ||||
| <t>The maximum size of multicast messages (M_DISCOVERY and M_FLOOD) depe | pends on the link-layer | |||
| nds on the link | technology or the link-adaptation layer in use.</t> | |||
| layer technology or link adaptation layer in use.</t> | ||||
| </section> | </section> | |||
| <section anchor="DiscoveryMessage" numbered="true" toc="default"> | ||||
| <name>Discovery Message</name> | ||||
| <t>In fragmentary CDDL, a Discovery message follows the pattern:</t> | ||||
| <section anchor="DiscoveryMessage" title="Discovery Message"> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <t>In fragmentary CDDL, a Discovery message follows the pattern:</t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| discovery-message = [M_DISCOVERY, session-id, initiator, objective] | discovery-message = [M_DISCOVERY, session-id, initiator, objective] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| A discovery initiator sends a Discovery message | A discovery initiator sends a Discovery message | |||
| to initiate a discovery process for a particular objective option . | to initiate a discovery process for a particular objective option . | |||
| </t><t> | </t> | |||
| <t> | ||||
| The discovery initiator sends all Discovery | The discovery initiator sends all Discovery | |||
| messages via UDP to port GRASP_LISTEN_PORT at the link-local | messages via UDP to port GRASP_LISTEN_PORT at the link-local | |||
| ALL_GRASP_NEIGHBORS multicast address on each link-layer interfac e in use by GRASP. | ALL_GRASP_NEIGHBORS multicast address on each link-layer interfac e in use by GRASP. | |||
| It then listens for unicast TCP responses on a given port, and st | It then listens for unicast TCP responses on a given port and sto | |||
| ores the discovery | res the discovery | |||
| results (including responding discovery objectives and | results, including responding discovery objectives and | |||
| corresponding unicast locators). | corresponding unicast locators. | |||
| </t> | </t> | |||
| <t>The listening port used for TCP MUST be the same port as used | <t>The listening port used for TCP <bcp14>MUST</bcp14> be the same por | |||
| for sending the | t as used for sending the | |||
| Discovery UDP multicast, on a given interface. In an implementati on with a | Discovery UDP multicast, on a given interface. In an implementati on with a | |||
| single GRASP instance in a node this MAY be GRASP_LISTEN_PORT. To support | single GRASP instance in a node, this <bcp14>MAY</bcp14> be GRASP _LISTEN_PORT. To support | |||
| multiple instances in the same node, the GRASP discovery mechanis m in each | multiple instances in the same node, the GRASP discovery mechanis m in each | |||
| instance needs to find, for each interface, a dynamic port that i t can bind to | instance needs to find, for each interface, a dynamic port that i t can bind to | |||
| for both sending UDP link-local multicast and listening for TCP, before | for both sending UDP link-local multicast and listening for TCP b efore | |||
| initiating any discovery.</t> | initiating any discovery.</t> | |||
| <t> | <t> | |||
| The 'initiator' field in the message is a globally unique IP addr ess of the | The 'initiator' field in the message is a globally unique IP addr ess of the | |||
| initiator, for the sole purpose of disambiguating the Session ID | initiator for the sole purpose of disambiguating the Session ID | |||
| in other nodes. If for some reason the initiator does not | in other nodes. If for some reason the initiator does not | |||
| have a globally unique IP address, it MUST use a link-local | have a globally unique IP address, it <bcp14>MUST</bcp14> use a l | |||
| address for this purpose that is highly likely to be | ink-local | |||
| unique, for example using <xref target="RFC7217"/>. Determination | address that is highly likely to be | |||
| of a node's globally unique IP address is implementation-dependen | unique for this purpose, for example, using <xref target="RFC7217 | |||
| t. | " format="default"/>. Determination | |||
| </t><t> | of a node's globally unique IP address is implementation dependen | |||
| A Discovery message MUST include exactly one of the following: | t. | |||
| <list style="symbols"> | </t> | |||
| <t>a discovery objective option (<xref target="ObjForm"/>). | <t> | |||
| Its loop count MUST be set to a suitable value to prevent discove | A Discovery message <bcp14>MUST</bcp14> include exactly one of th | |||
| ry | e following: | |||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>A Discovery Objective option (<xref target="ObjForm" format="def | ||||
| ault"/>). | ||||
| Its loop count <bcp14>MUST</bcp14> be set to a suitable value to | ||||
| prevent discovery | ||||
| loops (default value is GRASP_DEF_LOOPCT). If the discovery initi ator | loops (default value is GRASP_DEF_LOOPCT). If the discovery initi ator | |||
| requires only on-link responses, the loop count MUST be set to 1. | requires only on-link responses, the loop count <bcp14>MUST</bcp1 | |||
| </t> | 4> be set to 1. | |||
| </li> | ||||
| <t>a negotiation objective option (<xref target="ObjForm"/>). Thi | <li>A Negotiation Objective option (<xref target="ObjForm" format="d | |||
| s | efault"/>). This | |||
| is used both for the purpose of discovery and to indicate | is used both for the purpose of discovery and to indicate | |||
| to the discovery target that it MAY directly reply to | to the discovery target that it <bcp14>MAY</bcp14> directly reply | |||
| the discovery initiatior with a Negotiation message for | to | |||
| the discovery initiator with a Negotiation message for | ||||
| rapid processing, if it could act as the corresponding negotiatio n counterpart. | rapid processing, if it could act as the corresponding negotiatio n counterpart. | |||
| The sender of such a Discovery message MUST initialize | The sender of such a Discovery message <bcp14>MUST</bcp14> initia lize | |||
| a negotiation timer and loop count in the same way as a Request N egotiation message | a negotiation timer and loop count in the same way as a Request N egotiation message | |||
| (<xref target="RequestMessage"/>). | (<xref target="RequestMessage" format="default"/>). | |||
| </t> | </li> | |||
| <t>a synchronization objective option (<xref target="ObjForm"/>). | <li>A Synchronization Objective option (<xref target="ObjForm" forma | |||
| t="default"/>). | ||||
| This is used both for the purpose of discovery and to indicate to the discovery | This is used both for the purpose of discovery and to indicate to the discovery | |||
| target that it MAY directly reply to the discovery initiator with a Synchronization message | target that it <bcp14>MAY</bcp14> directly reply to the discovery initiator with a Synchronization message | |||
| for rapid processing, if it could act as the corresponding synchr onization counterpart. | for rapid processing, if it could act as the corresponding synchr onization counterpart. | |||
| Its loop count MUST be set to a suitable value to prevent discove | Its loop count <bcp14>MUST</bcp14> be set to a suitable value to | |||
| ry | prevent discovery | |||
| loops (default value is GRASP_DEF_LOOPCT).</t> | loops (default value is GRASP_DEF_LOOPCT).</li> | |||
| </list></t> | </ul> | |||
| <t>As mentioned in <xref target="discovw"/>, a Discovery message | <t>As mentioned in <xref target="discovw" format="default"/>, a Discov | |||
| MAY be sent unicast to a peer node, | ery message <bcp14>MAY</bcp14> be sent unicast to a peer node, | |||
| which SHOULD then proceed exactly as if the message had been mul | which <bcp14>SHOULD</bcp14> then proceed exactly as if the messa | |||
| ticast. | ge had been multicast. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="ResponseMessage" numbered="true" toc="default"> | ||||
| <section anchor="ResponseMessage" title="Discovery Response Message"> | <name>Discovery Response Message</name> | |||
| <t>In fragmentary CDDL, a Discovery Response message follows the patte rn:</t> | <t>In fragmentary CDDL, a Discovery Response message follows the patte rn:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| A node which receives a Discovery message SHOULD send a | A node that receives a Discovery message <bcp14>SHOULD</bcp14> send a | |||
| Discovery Response message if and only if it can respond to the discov ery. | Discovery Response message if and only if it can respond to the discov ery. | |||
| <list> | </t> | |||
| <t>It MUST contain the same Session ID and initiator as the Discovery | <ul spacing="normal" empty="true"> | |||
| message. | <li>It <bcp14>MUST</bcp14> contain the same Session ID and initiator | |||
| </t><t>It MUST contain a time-to-live (ttl) for the validity of the re | as the Discovery message. | |||
| sponse, given | </li> | |||
| <li>It <bcp14>MUST</bcp14> contain a time-to-live (ttl) for the vali | ||||
| dity of the response, given | ||||
| as a positive integer value in milliseconds. Zero implies a value sign ificantly | as a positive integer value in milliseconds. Zero implies a value sign ificantly | |||
| greater than GRASP_DEF_TIMEOUT milliseconds (<xref target="Constants"/ >). A suggested | greater than GRASP_DEF_TIMEOUT milliseconds (<xref target="Constants" format="default"/>). A suggested | |||
| value is ten times that amount. | value is ten times that amount. | |||
| </t><t>It MAY include a copy of the discovery objective from | </li> | |||
| the Discovery message.</t> | <li>It <bcp14>MAY</bcp14> include a copy of the discovery objective | |||
| </list> | from | |||
| the Discovery message.</li> | ||||
| </ul> | ||||
| <t> | ||||
| It is sent to the sender of the Discovery message via TCP | It is sent to the sender of the Discovery message via TCP | |||
| at the port used to send the Discovery message (as explained in <xref target="DiscoveryMessage"/>). | at the port used to send the Discovery message (as explained in <xref target="DiscoveryMessage" format="default"/>). | |||
| In the case of a relayed Discovery message, the Discovery Response | In the case of a relayed Discovery message, the Discovery Response | |||
| is thus sent to the relay, not the original initiator. | is thus sent to the relay, not the original initiator. | |||
| </t><t> | </t> | |||
| In all cases, the transport session SHOULD be closed after sending the | <t> | |||
| Discovery Response. | In all cases, the transport session <bcp14>SHOULD</bcp14> be closed af | |||
| ter sending the Discovery Response. | ||||
| A transport session failure is treated as no response. | A transport session failure is treated as no response. | |||
| </t><t> | </t> | |||
| <t> | ||||
| If the responding node supports the discovery objective | If the responding node supports the discovery objective | |||
| of the discovery, it MUST include at least one kind of | of the discovery, it <bcp14>MUST</bcp14> include at least one kind of | |||
| locator option (<xref target="LocatorOption"/>) to indicate its own | locator option (<xref target="LocatorOption" format="default"/>) to in | |||
| dicate its own | ||||
| location. A sequence of multiple kinds of locator | location. A sequence of multiple kinds of locator | |||
| options (e.g. IP address option and FQDN option) is also | options (e.g., IP address option and FQDN option) is also | |||
| valid. | valid. | |||
| </t><t> | </t> | |||
| <t> | ||||
| 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, but it knows the locator of the discovery | |||
| objective, then it SHOULD respond to the discovery message with a | objective, then it <bcp14>SHOULD</bcp14> respond to the Discovery mess | |||
| divert option (<xref target="DivertOption"/>) embedding a locator | age with a | |||
| Divert option (<xref target="DivertOption" format="default"/>) embeddi | ||||
| ng a locator | ||||
| option or a combination of multiple kinds of locator | option or a combination of multiple kinds of locator | |||
| options which indicate the locator(s) of the discovery objective. | options that indicate the locator(s) of the discovery objective. | |||
| </t> | </t> | |||
| <t>More details on the processing of Discovery Responses are given in | <t>More details on the processing of Discovery Responses are given in | |||
| <xref target="discmech"/>.</t> | <xref target="discmech" format="default"/>.</t> | |||
| </section> | </section> | |||
| <section anchor="RequestMessage" numbered="true" toc="default"> | ||||
| <section anchor="RequestMessage" title="Request Messages"> | <name>Request Messages</name> | |||
| <t>In fragmentary CDDL, Request Negotiation and Request Synchronizatio n messages follow the patterns:</t> | <t>In fragmentary CDDL, Request Negotiation and Request Synchronizatio n messages follow the patterns:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| request-negotiation-message = [M_REQ_NEG, session-id, objective] | request-negotiation-message = [M_REQ_NEG, session-id, objective] | |||
| request-synchronization-message = [M_REQ_SYN, session-id, objective] | request-synchronization-message = [M_REQ_SYN, session-id, objective] | |||
| ]]></sourcecode> | ||||
| ]]></artwork> | ||||
| </figure></t> | ||||
| <t> | <t> | |||
| A negotiation or synchronization requesting node | A negotiation or synchronization requesting node | |||
| sends the appropriate Request message to the unicast address of the ne gotiation or | sends the appropriate Request message to the unicast address of the ne gotiation or | |||
| synchronization counterpart, using the appropriate protocol and port n umbers | synchronization counterpart, using the appropriate protocol and port n umbers | |||
| (selected from the discovery result). If the discovery result is an FQ DN, | (selected from the discovery result). If the discovery result is an FQ DN, | |||
| it will be resolved first.</t> | it will be resolved first.</t> | |||
| <t>A Request message MUST include the relevant objective option. In th | <t>A Request message <bcp14>MUST</bcp14> include the relevant objectiv | |||
| e case of | e option. In the case of | |||
| Request Negotiation, the objective option MUST include the requested v | Request Negotiation, the objective option <bcp14>MUST</bcp14> include | |||
| alue. </t> | the requested value. </t> | |||
| <t>When an initiator sends a Request Negotiation message, it MUST init | <t>When an initiator sends a Request Negotiation message, it <bcp14>MU | |||
| ialize a negotiation timer | ST</bcp14> initialize a negotiation timer | |||
| for the new negotiation thread. The default is GRASP_DEF_TIMEOUT milli seconds. Unless this | for the new negotiation thread. The default is GRASP_DEF_TIMEOUT milli seconds. Unless this | |||
| timeout is modified by a Confirm Waiting message (<xref target="Confir mWaitingMessage"/>), | timeout is modified by a Confirm Waiting message (<xref target="Confir mWaitingMessage" format="default"/>), | |||
| the initiator will consider that the negotiation has failed when the t imer expires. </t> | the initiator will consider that the negotiation has failed when the t imer expires. </t> | |||
| <t>Similarly, when an initiator sends a Request Synchronization, it SH OULD initialize | <t>Similarly, when an initiator sends a Request Synchronization, it <b cp14>SHOULD</bcp14> initialize | |||
| a synchronization timer. The default is GRASP_DEF_TIMEOUT milliseconds . | a synchronization timer. The default is GRASP_DEF_TIMEOUT milliseconds . | |||
| The initiator will consider that synchronization has failed | The initiator will consider that synchronization has failed | |||
| if there is no response before the timer expires.</t> | if there is no response before the timer expires.</t> | |||
| <t>When an initiator sends a Request message, it MUST initialize the l oop count | <t>When an initiator sends a Request message, it <bcp14>MUST</bcp14> i nitialize the loop count | |||
| of the objective option with a value defined in the specification of t he option | of the objective option with a value defined in the specification of t he option | |||
| or, if no such value is specified, with GRASP_DEF_LOOPCT. </t> | or, if no such value is specified, with GRASP_DEF_LOOPCT. </t> | |||
| <t>If a node receives a Request message for an objective for which no ASA is currently | <t>If a node receives a Request message for an objective for which no ASA is currently | |||
| listening, it MUST immediately close the relevant socket to indicate t his to the initiator. | listening, it <bcp14>MUST</bcp14> immediately close the relevant socke t to indicate this to the initiator. | |||
| This is to avoid unnecessary timeouts if, for example, an ASA exits pr ematurely | This is to avoid unnecessary timeouts if, for example, an ASA exits pr ematurely | |||
| but the GRASP core is listening on its behalf.</t> | but the GRASP core is listening on its behalf.</t> | |||
| <t>To avoid the highly unlikely race condition in which two nodes simu ltaneously request | <t>To avoid the highly unlikely race condition in which two nodes simu ltaneously request | |||
| sessions with each other using the same Session ID (<xref target="Sess | sessions with each other using the same Session ID (<xref target="Sess | |||
| ionID"/>), when a node receives a Request message, | ionID" format="default"/>), | |||
| it MUST verify that the received Session ID is not already locally act | a node <bcp14>MUST</bcp14> verify that the received Session ID is not | |||
| ive. In case of a clash, | already locally active | |||
| it MUST discard the Request message, in which case the initiator will | when it receives a Request message. In case of a clash, | |||
| detect a timeout.</t> | it <bcp14>MUST</bcp14> discard the Request message, in which case the | |||
| initiator will detect a timeout.</t> | ||||
| </section> | </section> | |||
| <section anchor="NegotiationMessage" numbered="true" toc="default"> | ||||
| <section anchor="NegotiationMessage" title="Negotiation Message"> | <name>Negotiation Message</name> | |||
| <t>In fragmentary CDDL, a Negotiation message follows the pattern:</t> | <t>In fragmentary CDDL, a Negotiation message follows the pattern:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | negotiation-message = [M_NEGOTIATE, session-id, objective] | |||
| negotiate-message = [M_NEGOTIATE, session-id, objective] | ]]></sourcecode> | |||
| ]]></artwork> | ||||
| </figure></t> | ||||
| <t>A negotiation counterpart sends a Negotiation | ||||
| message in response to a Request Negotiation message, a | ||||
| Negotiation message, or a Discovery message | ||||
| in Rapid Mode. A negotiation process MAY | ||||
| include multiple steps.</t> | ||||
| <t>The Negotiation message MUST include the relevant Negotiation Objec | <t>A negotiation counterpart sends a Negotiation message in response | |||
| tive option, | to a Request Negotiation message, a Negotiation message, or a | |||
| with its value updated according to progress in the negotiation. The s | Discovery message in rapid mode. A negotiation process | |||
| ender | <bcp14>MAY</bcp14> include multiple steps.</t> | |||
| MUST decrement the loop count by 1. If the loop count becomes zero the | <t>The Negotiation message <bcp14>MUST</bcp14> include the relevant | |||
| message | Negotiation Objective option, with its value updated according to | |||
| MUST NOT be sent. In this case the negotiation session has failed and | progress in the negotiation. The sender <bcp14>MUST</bcp14> | |||
| will time out.</t> | decrement the loop count by 1. If the loop count becomes zero, the | |||
| message <bcp14>MUST NOT</bcp14> be sent. In this case, the | ||||
| negotiation session has failed and will time out.</t> | ||||
| </section> | </section> | |||
| <section anchor="NegotiationEndingMessage" numbered="true" toc="default" | ||||
| <section anchor="NegotiationEndingMessage" title="Negotiation End Messag | > | |||
| e"> | <name>Negotiation End Message</name> | |||
| <t>In fragmentary CDDL, a Negotiation End message follows the | ||||
| <t>In fragmentary CDDL, a Negotiation End message follows the pattern: | pattern:</t> | |||
| </t> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| end-message = [M_END, session-id, accept-option / decline-option] | end-message = [M_END, session-id, accept-option / decline-option] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| A negotiation counterpart sends an Negotiation End | A negotiation counterpart sends a Negotiation End message to close | |||
| message to close the negotiation. It MUST contain | the negotiation. It <bcp14>MUST</bcp14> contain either an Accept optio | |||
| either an accept or a decline option, | n or | |||
| defined in <xref target="AcceptOption"/> and <xref target="DeclineOpti | a Decline option, defined in <xref target="AcceptOption" format="defau | |||
| on"/>. | lt"/> and <xref target="DeclineOption" format="default"/>. It could be sent eit | |||
| It could be sent either by the | her by the requesting node | |||
| requesting node or the responding node.</t> | or the responding node.</t> | |||
| </section> | </section> | |||
| <section anchor="ConfirmWaitingMessage" numbered="true" toc="default"> | ||||
| <section anchor="ConfirmWaitingMessage" title="Confirm Waiting Messa | <name>Confirm Waiting Message</name> | |||
| ge"> | <t>In fragmentary CDDL, a Confirm Waiting message follows the pattern: | |||
| </t> | ||||
| <t>In fragmentary CDDL, a Confirm Waiting message follows the patt | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| ern:</t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| A responding node sends a Confirm Waiting message to | A responding node sends a Confirm Waiting message to | |||
| ask the requesting node to wait for a further | ask the requesting node to wait for a further | |||
| negotiation response. It might be that the local | negotiation response. It might be that the local | |||
| process needs more time or that the negotiation | process needs more time or that the negotiation | |||
| depends on another triggered negotiation. This | depends on another triggered negotiation. This | |||
| message MUST NOT include any other options. | message <bcp14>MUST NOT</bcp14> include any other options. | |||
| When received, the waiting time value overwrites | When received, the waiting time value overwrites | |||
| and restarts the current negotiation timer | and restarts the current negotiation timer | |||
| (<xref target="RequestMessage"/>).</t> | (<xref target="RequestMessage" format="default"/>).</t> | |||
| <t>The responding node <bcp14>SHOULD</bcp14> send a Negotiation, Negot | ||||
| <t>The responding node SHOULD send a Negotiation, Negotiation End or a | iation End, or another | |||
| nother | ||||
| Confirm Waiting message before the negotiation timer expires. If | Confirm Waiting message before the negotiation timer expires. If | |||
| not, when the initiator's timer expires, the initiator MUST treat | not, when the initiator's timer expires, the initiator <bcp14>MUST</bc p14> treat | |||
| the negotiation procedure as failed.</t> | the negotiation procedure as failed.</t> | |||
| </section> | </section> | |||
| <section anchor="SynchMessage" numbered="true" toc="default"> | ||||
| <section anchor="SynchMessage" title="Synchronization Message"> | <name>Synchronization Message</name> | |||
| <t>In fragmentary CDDL, a Synchronization message follows the pattern: </t> | <t>In fragmentary CDDL, a Synchronization message follows the pattern: </t> | |||
| <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| synch-message = [M_SYNCH, session-id, objective] | synch-message = [M_SYNCH, session-id, objective] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>A node which receives a Request Synchronization, or | <t>A node that receives a Request Synchronization, or | |||
| a Discovery message in Rapid Mode, sends back a unicast Synchroniza | a Discovery message in rapid mode, sends back a unicast Synchroniza | |||
| tion | tion | |||
| message with the synchronization data, in the form of a GRASP Optio | message with the synchronization data, in the form of a GRASP optio | |||
| n for the specific | n for the specific | |||
| synchronization objective present in the Request Synchronization.</ t> | synchronization objective present in the Request Synchronization.</ t> | |||
| </section> | </section> | |||
| <section anchor="FloodMessage" numbered="true" toc="default"> | ||||
| <section anchor="FloodMessage" title="Flood Synchronization Message"> | <name>Flood Synchronization Message</name> | |||
| <t>In fragmentary CDDL, a Flood Synchronization message follows the pa ttern:</t> | <t>In fragmentary CDDL, a Flood Synchronization message follows the pa ttern:</t> | |||
| <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| A node MAY initiate flooding by sending an unsolicited Flood Synchroni | A node <bcp14>MAY</bcp14> initiate flooding by sending an | |||
| zation Message | unsolicited Flood Synchronization message with synchronization | |||
| with synchronization data. This MAY be sent to port GRASP_LISTEN_PORT | data. This <bcp14>MAY</bcp14> be sent to port GRASP_LISTEN_PORT at | |||
| at the | the link-local ALL_GRASP_NEIGHBORS multicast address, in accordance | |||
| link-local ALL_GRASP_NEIGHBORS multicast address, in accordance | with the rules in <xref target="synchproc" format="default"/>. | |||
| with the rules in <xref target="synchproc"/>. | </t> | |||
| <list><t> | ||||
| The initiator address is provided, as described for Discovery messages | <ul empty="true" spacing="normal"> | |||
| (<xref target="DiscoveryMessage"/>), | <li> | |||
| The initiator address is provided, as described for Discovery messages | ||||
| (<xref target="DiscoveryMessage" format="default"/>), | ||||
| only to disambiguate the Session ID. | only to disambiguate the Session ID. | |||
| </t><t> | </li> | |||
| The message MUST contain a time-to-live (ttl) for the validity of the | <li> | |||
| contents, given | The message <bcp14>MUST</bcp14> contain a time-to-live (ttl) for the v | |||
| alidity of the contents, given | ||||
| as a positive integer value in milliseconds. There is no default; | as a positive integer value in milliseconds. There is no default; | |||
| zero indicates an indefinite lifetime. | zero indicates an indefinite lifetime. | |||
| </t><t> | </li> | |||
| The synchronization data are in the form of GRASP Option(s) for specif | <li> | |||
| ic | The synchronization data are in the form of GRASP option(s) for specif | |||
| synchronization objective(s). The loop count(s) MUST be set to a suita | ic | |||
| ble | synchronization objective(s). The loop count(s) <bcp14>MUST</bcp14> be | |||
| value to prevent flood loops (default value is GRASP_DEF_LOOPCT).</t>< | set to a suitable | |||
| t> | value to prevent flood loops (default value is GRASP_DEF_LOOPCT).</li> | |||
| Each objective option MAY be followed by a locator option associated w | <li> | |||
| ith | Each objective option <bcp14>MAY</bcp14> be followed by a locator opti | |||
| the flooded objective. In its absence, an empty option MUST be include | on (<xref target="LocatorOption" format="default"/>) associated with | |||
| d | the flooded objective. In its absence, an empty option <bcp14>MUST</bc | |||
| p14> be included | ||||
| to indicate a null locator. | to indicate a null locator. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| A node that receives a Flood Synchronization message MUST cache the re | <t> | |||
| ceived objectives for | A node that receives a Flood Synchronization message | |||
| use by local ASAs. Each cached objective MUST be tagged with the locat | <bcp14>MUST</bcp14> cache the received objectives for use by local | |||
| or option sent with it, or with a null | ASAs. Each cached objective <bcp14>MUST</bcp14> be tagged with the | |||
| tag if an empty locator option was sent. If a subsequent Flood Synchro | locator option sent with it, or with a null tag if an empty locator | |||
| nization message carrying an objective | option was sent. If a subsequent Flood Synchronization message | |||
| with same name and the same tag, the corresponding cached copy of the | carries an objective with the same name and the same tag, the | |||
| objective MUST be overwritten. | corresponding cached copy of the objective <bcp14>MUST</bcp14> be | |||
| If a subsequent Flood Synchronization message carrying an objective wi | overwritten. If a subsequent Flood Synchronization message carrying | |||
| th same name arrives with a different | an objective with same name arrives with a different tag, a new | |||
| tag, a new cached entry MUST be created.</t> | cached entry <bcp14>MUST</bcp14> be created.</t> | |||
| <t>Note: the purpose of this mechanism is to allow the recipient of fl | ||||
| ooded values to distinguish between | ||||
| different senders of the same objective, and if necessary communicate | ||||
| with them using the locator, protocol | ||||
| and port included in the locator option. Many objectives will not need | ||||
| this mechanism, so they will be flooded | ||||
| with a null locator.</t> | ||||
| <t>Cached entries MUST be ignored or deleted after their lifetime expi | ||||
| res.</t> | ||||
| <t>Note: the purpose of this mechanism is to allow the recipient of | ||||
| flooded values to distinguish between different senders of the same | ||||
| objective, and if necessary communicate with them using the locator, | ||||
| protocol, and port included in the locator option. Many objectives | ||||
| will not need this mechanism, so they will be flooded with a null | ||||
| locator.</t> | ||||
| <t>Cached entries <bcp14>MUST</bcp14> be ignored or deleted after | ||||
| their lifetime expires.</t> | ||||
| </section> | </section> | |||
| <section anchor="invalid" numbered="true" toc="default"> | ||||
| <section anchor="invalid" title="Invalid Message"> | <name>Invalid Message</name> | |||
| <t>In fragmentary CDDL, an Invalid message follows the pattern:</t> | <t>In fragmentary CDDL, an Invalid message follows the pattern:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| invalid-message = [M_INVALID, session-id, ?any] | invalid-message = [M_INVALID, session-id, ?any] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| This message MAY be sent by an implementation in response to an incomi | This message <bcp14>MAY</bcp14> be sent by an implementation in | |||
| ng unicast message that it considers | response to an incoming unicast message that it considers | |||
| invalid. The session-id MUST be copied from the incoming message. The | invalid. The Session ID value <bcp14>MUST</bcp14> be copied from the | |||
| content SHOULD | incoming message. The content <bcp14>SHOULD</bcp14> be diagnostic | |||
| be diagnostic information such as a partial copy of the invalid messag | information such as a partial copy of the invalid message up to the | |||
| e up to the | maximum message size. An M_INVALID message <bcp14>MAY</bcp14> be | |||
| maximum message size. An M_INVALID message | silently ignored by a recipient. However, it could be used in | |||
| MAY be silently ignored by a recipient. However, it could be used in s | support of extensibility, since it indicates that the remote node | |||
| upport of | does not support a new or obsolete message or option.</t> | |||
| extensibility, since it indicates that the remote node does not suppor | <t>An M_INVALID message <bcp14>MUST NOT</bcp14> be sent in response to | |||
| t a new or | an M_INVALID message.</t> | |||
| obsolete message or option.</t> | ||||
| <t>An M_INVALID message MUST NOT be sent in response to an M_INVALID m | ||||
| essage.</t> | ||||
| </section> | </section> | |||
| <section anchor="noop" numbered="true" toc="default"> | ||||
| <section anchor="noop" title="No Operation Message"> | <name>No Operation Message</name> | |||
| <t>In fragmentary CDDL, a No Operation message follows the pattern:</t > | <t>In fragmentary CDDL, a No Operation message follows the pattern:</t > | |||
| <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| noop-message = [M_NOOP] | noop-message = [M_NOOP] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| This message MAY be sent by an implementation that for practical reaso | This message <bcp14>MAY</bcp14> be sent by an implementation that for | |||
| ns needs to | practical reasons needs to | |||
| initialize a socket. It MUST be silently ignored by a recipient.</t> | initialize a socket. It <bcp14>MUST</bcp14> be silently ignored by a r | |||
| ecipient.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="GRASPOptions" numbered="true" toc="default"> | ||||
| <section anchor="GRASPOptions" title="GRASP Options"> | <name>GRASP Options</name> | |||
| <t>This section defines the GRASP options for the negotiation | <t>This section defines the GRASP options for the negotiation | |||
| and synchronization protocol signaling. Additional | and synchronization protocol signaling. Additional | |||
| options may be defined in the future.</t> | options may be defined in the future.</t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Format of GRASP Options"> | <name>Format of GRASP Options</name> | |||
| <t>GRASP options <bcp14>SHOULD</bcp14> be CBOR arrays that <bcp14>MUST | ||||
| <t>GRASP options are CBOR objects that MUST start with an unsigned in | </bcp14> start with an unsigned | |||
| teger identifying | integer identifying the specific option type carried in this option. | |||
| the specific option type carried in this option. These option types a | These option types are formally defined in <xref target="cddl" format= | |||
| re formally | "default"/>.</t> | |||
| defined in <xref target="cddl"/>. Apart from that the only format req | ||||
| uirement | ||||
| is that each option MUST be a well-formed CBOR object. In general a C | ||||
| BOR array format | ||||
| is RECOMMENDED to limit overhead.</t> | ||||
| <t>GRASP options may be defined to include encapsulated GRASP options. </t> | <t>GRASP options may be defined to include encapsulated GRASP options. </t> | |||
| </section> | </section> | |||
| <section anchor="DivertOption" numbered="true" toc="default"> | ||||
| <section anchor="DivertOption" title="Divert Option"> | <name>Divert Option</name> | |||
| <t>The Divert option is used to redirect a GRASP request to another | <t>The Divert option is used to redirect a GRASP request to another | |||
| node, which may be more appropriate for the intended negotiation or sy nchronization. It | node, which may be more appropriate for the intended negotiation or sy nchronization. It | |||
| may redirect to an entity that is known as a specific negotiation or s ynchronization | may redirect to an entity that is known as a specific negotiation or s ynchronization | |||
| counterpart (on-link or off-link) or a default gateway. The divert | counterpart (on-link or off-link) or a default gateway. The Divert | |||
| option MUST only be encapsulated in Discovery Response messages. | option <bcp14>MUST</bcp14> only be encapsulated in Discovery Response | |||
| If found elsewhere, it SHOULD be silently ignored.</t> | messages. | |||
| <t>A discovery initiator MAY ignore a Divert option if it only require | If found elsewhere, it <bcp14>SHOULD</bcp14> be silently ignored.</t> | |||
| s direct | <t>A discovery initiator <bcp14>MAY</bcp14> ignore a Divert option if | |||
| discovery responses. </t> | it only requires direct | |||
| Discovery Responses. </t> | ||||
| <t>In fragmentary CDDL, the Divert option follows the pattern:</t> | <t>In fragmentary CDDL, the Divert option follows the pattern:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| divert-option = [O_DIVERT, +locator-option] | divert-option = [O_DIVERT, +locator-option] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>The embedded Locator Option(s) (<xref target="LocatorOption"/>) | <t>The embedded locator option(s) (<xref target="LocatorOption" format ="default"/>) | |||
| point to diverted destination target(s) in response to a Discovery messa ge. </t> | point to diverted destination target(s) in response to a Discovery messa ge. </t> | |||
| </section> | </section> | |||
| <section anchor="AcceptOption" numbered="true" toc="default"> | ||||
| <section anchor="AcceptOption" title="Accept Option"> | <name>Accept Option</name> | |||
| <t>The Accept option is used to indicate to the negotiation counterpar | ||||
| <t>The accept option is used to indicate to the negotiation counterpar | t | |||
| t | ||||
| that the proposed negotiation content is accepted.</t> | that the proposed negotiation content is accepted.</t> | |||
| <t>The Accept option <bcp14>MUST</bcp14> only be encapsulated in Negot | ||||
| <t>The accept option MUST only be encapsulated in Negotiation End | iation End | |||
| messages. If found elsewhere, it SHOULD be silently ignored.</t> | messages. If found elsewhere, it <bcp14>SHOULD</bcp14> be silently ign | |||
| ored.</t> | ||||
| <t>In fragmentary CDDL, the Accept option follows the pattern:</t> | <t>In fragmentary CDDL, the Accept option follows the pattern:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| accept-option = [O_ACCEPT] | accept-option = [O_ACCEPT] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| </section> | ||||
| <section anchor="DeclineOption" title="Decline Option"> | ||||
| <t>The decline option is used to indicate to the negotiation | </section> | |||
| counterpart the proposed negotiation content is declined and end the | <section anchor="DeclineOption" numbered="true" toc="default"> | |||
| <name>Decline Option</name> | ||||
| <t>The Decline option is used to indicate to the negotiation | ||||
| counterpart the proposed negotiation content is declined and to end th | ||||
| e | ||||
| negotiation process.</t> | negotiation process.</t> | |||
| <t>The Decline option <bcp14>MUST</bcp14> only be encapsulated in | ||||
| <t>The decline option MUST only be encapsulated in | Negotiation End messages. If found elsewhere, it <bcp14>SHOULD</bcp14> | |||
| Negotiation End messages. If found elsewhere, it SHOULD be | be | |||
| silently ignored.</t> | silently ignored.</t> | |||
| <t>In fragmentary CDDL, the Decline option follows the pattern:</t> | <t>In fragmentary CDDL, the Decline option follows the pattern:</t> | |||
| <t><figure> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| decline-option = [O_DECLINE, ?reason] | decline-option = [O_DECLINE, ?reason] | |||
| reason = text ;optional UTF-8 error message | reason = text ; optional UTF-8 error message | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>Note: there might be scenarios where an ASA wants | <t>Note: there might be scenarios where an ASA wants | |||
| to decline the proposed value and restart the negotiation process. | to decline the proposed value and restart the negotiation process. | |||
| In this case it is an implementation choice whether to send a Decline | In this case, it is an implementation choice whether to send a Decline | |||
| option or to continue with a Negotiate message, with an objective | option or to continue with a Negotiation message, with an objective | |||
| option that contains a null value, or one that contains a new | option that contains a null value or one that contains a new | |||
| value that might achieve convergence.</t> | value that might achieve convergence.</t> | |||
| </section> | </section> | |||
| <section anchor="LocatorOption" numbered="true" toc="default"> | ||||
| <section anchor="LocatorOption" title="Locator Options"> | <name>Locator Options</name> | |||
| <t>These locator options are used to present reachability information for an ASA, | <t>These locator options are used to present reachability information for an ASA, | |||
| a device or an interface. They are Locator IPv6 Address | a device, or an interface. They are Locator IPv6 Address | |||
| Option, Locator IPv4 Address Option, Locator FQDN (Fully | option, Locator IPv4 Address option, Locator FQDN | |||
| Qualified Domain Name) Option and URI (Uniform Resource Identifier) Op | option, and Locator URI option.</t> | |||
| tion.</t> | ||||
| <t>Since ASAs will normally run as independent user programs, locator options need | <t>Since ASAs will normally run as independent user programs, locator options need | |||
| to indicate the network layer locator plus the transport protocol and | to indicate the network-layer locator plus the transport protocol and | |||
| port number for | port number for | |||
| reaching the target. For this reason, the Locator Options for IP addre | reaching the target. For this reason, the locator options for IP addre | |||
| sses | sses | |||
| and FQDNs include this information explicitly. In the case of the URI | and FQDNs include this information explicitly. In the case of the Loca | |||
| Option, | tor URI option, | |||
| this information can be encoded in the URI itself.</t> | this information can be encoded in the URI itself.</t> | |||
| <t>Note: It is assumed that all locators used in locator options are i n scope throughout | <t>Note: It is assumed that all locators used in locator options are i n scope throughout | |||
| the GRASP domain. As stated in <xref target="hilev"/>, | the GRASP domain. As stated in <xref target="hilev" format="default"/> , | |||
| GRASP is not intended to work across disjoint addressing | GRASP is not intended to work across disjoint addressing | |||
| or naming realms. </t> | or naming realms. </t> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Locator IPv6 Address Option</name> | ||||
| <t>In fragmentary CDDL, the Locator IPv6 Address option follows the | ||||
| pattern:</t> | ||||
| <section title="Locator IPv6 address option"> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <t>In fragmentary CDDL, the IPv6 address option follows the pattern:</ | ||||
| t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>The content of this option is a binary IPv6 address followed by the | ||||
| protocol number and port number to be used.</t> | ||||
| <t>Note 1: The IPv6 address MUST normally have global scope. However, | ||||
| during initialization, | ||||
| a link-local address MAY be used for specific objectives only (<xref t | ||||
| arget="secinst"/>). In this case | ||||
| the corresponding Discovery Response message MUST be sent via the inte | ||||
| rface to which the link-local | ||||
| address applies.</t> | ||||
| <t>Note 2: A link-local IPv6 address MUST NOT be used when this option | ||||
| is included in a Divert option.</t> | ||||
| <t>Note 3: The IPPROTO values are taken from the existing IANA Protoco | <t>The content of this option is a binary IPv6 address followed by | |||
| l Numbers registry in order | the protocol number and port number to be used.</t> | |||
| to specify TCP or UDP. If GRASP | <t>Note 1: The IPv6 address <bcp14>MUST</bcp14> normally have | |||
| requires future values that are not in that registry, a new registry f | global scope. However, during initialization, a link-local address | |||
| or values outside the range 0..255 | <bcp14>MAY</bcp14> be used for specific objectives only (<xref targe | |||
| will be needed.</t> | t="secinst" format="default"/>). In this case, the | |||
| corresponding Discovery Response message <bcp14>MUST</bcp14> be | ||||
| sent via the interface to which the link-local address | ||||
| applies.</t> | ||||
| <t>Note 2: A link-local IPv6 address <bcp14>MUST NOT</bcp14> be | ||||
| used when this option is included in a Divert option.</t> | ||||
| <t>Note 3: The IPPROTO values are taken from the existing IANA | ||||
| Protocol Numbers registry in order to specify TCP or UDP. If GRASP | ||||
| requires future values that are not in that registry, a new | ||||
| registry for values outside the range 0..255 will be needed.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Locator IPv4 Address Option</name> | ||||
| <t>In fragmentary CDDL, the Locator IPv4 Address option follows the | ||||
| pattern:</t> | ||||
| <section title="Locator IPv4 address option"> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <t>In fragmentary CDDL, the IPv4 address option follows the pattern:</ | ||||
| t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>The content of this option is a binary IPv4 address followed by the | ||||
| protocol number and port number to be used.</t> | ||||
| <t>Note: If an operator has internal network address translation for I | <t>The content of this option is a binary IPv4 address followed by | |||
| Pv4, | the protocol number and port number to be used.</t> | |||
| this option MUST NOT be used within the Divert option.</t> | <t>Note: If an operator has internal network address translation for | |||
| IPv4, | ||||
| this option <bcp14>MUST NOT</bcp14> be used within the Divert option.< | ||||
| /t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Locator FQDN Option</name> | ||||
| <t>In fragmentary CDDL, the Locator FQDN option follows the pattern: | ||||
| </t> | ||||
| <section title="Locator FQDN option"> | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| <t>In fragmentary CDDL, the FQDN option follows the pattern:</t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| fqdn-locator-option = [O_FQDN_LOCATOR, text, | fqdn-locator-option = [O_FQDN_LOCATOR, text, | |||
| transport-proto, port-number] | transport-proto, port-number] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t>The content of this option is the Fully Qualified Domain Name of th | <t>The content of this option is the FQDN | |||
| e target followed by the protocol number and port number to be used. | of the target followed by the protocol number and port number to | |||
| </t> | be used. | |||
| <t>Note 1: Any FQDN which might not be valid throughout the network in | </t> | |||
| question, | <t>Note 1: Any FQDN that might not be valid throughout the | |||
| such as a Multicast DNS name <xref target="RFC6762"/>, MUST NOT be use | network in question, such as a Multicast DNS name <xref target="RFC6 | |||
| d when | 762" format="default"/>, <bcp14>MUST NOT</bcp14> be | |||
| this option is used within the Divert option.</t> | used when this option is used within the Divert option.</t> | |||
| <t>Note 2: Normal GRASP operations are not expected to use this option | <t>Note 2: Normal GRASP operations are not expected to use this opti | |||
| . It is intended for | on. It is intended for | |||
| special purposes such as discovering external services.</t> | special purposes such as discovering external services.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Locator URI option"> | <name>Locator URI Option</name> | |||
| <t>In fragmentary CDDL, the Locator URI option follows the pattern:< | ||||
| <t>In fragmentary CDDL, the URI option follows the pattern:</t> | /t> | |||
| <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | ||||
| <t><figure> | uri-locator-option = [O_URI_LOCATOR, text, | |||
| <artwork><![CDATA[ | transport-proto / null, port-number / null] | |||
| uri-locator = [O_URI_LOCATOR, text, | ]]></sourcecode> | |||
| transport-proto / null, port-number / null] | <t>The content of this option is the URI of the target | |||
| ]]></artwork> | ||||
| </figure></t> | ||||
| <t>The content of this option is the Uniform Resource Identifier of th | ||||
| e target | ||||
| followed by the protocol number and port number to be used (or by null values if not required) | followed by the protocol number and port number to be used (or by null values if not required) | |||
| <xref target="RFC3986"/>. | <xref target="RFC3986" format="default"/>. | |||
| </t> | </t> | |||
| <t>Note 1: Any URI which might not be valid throughout the network in | <t>Note 1: Any URI which might not be valid throughout the network i | |||
| question, | n question, | |||
| such as one based on a Multicast DNS name <xref target="RFC6762"/>, MU | such as one based on a Multicast DNS name <xref target="RFC6762" forma | |||
| ST NOT be used when | t="default"/>, <bcp14>MUST NOT</bcp14> be used when | |||
| this option is used within the Divert option.</t> | this option is used within the Divert option.</t> | |||
| <t>Note 2: Normal GRASP operations are not expected to use this option | <t>Note 2: Normal GRASP operations are not expected to use this opti | |||
| . It is intended for | on. It is intended for | |||
| special purposes such as discovering external services. Therefore its | special purposes such as discovering external services. Therefore, its | |||
| use is not further | use is not further | |||
| described in this specification.</t> | described in this specification.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <!----> | ||||
| </section> | </section> | |||
| <section anchor="ObjOption" numbered="true" toc="default"> | ||||
| <section anchor="ObjOption" title="Objective Options"> | <name>Objective Options</name> | |||
| <section anchor="ObjForm" title="Format of Objective Options"> | <section anchor="ObjForm" numbered="true" toc="default"> | |||
| <name>Format of Objective Options</name> | ||||
| <t>An objective option is used to identify objectives for | <t>An objective option is used to identify objectives for | |||
| the purposes of discovery, negotiation or synchronization. | the purposes of discovery, negotiation, or synchronization. | |||
| All objectives MUST be in the following format, | All objectives <bcp14>MUST</bcp14> be in the following format, | |||
| described in fragmentary CDDL:</t> | described in fragmentary CDDL:</t> | |||
| <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | ||||
| objective = [objective-name, objective-flags, | ||||
| loop-count, ?objective-value] | ||||
| <t><figure> | objective-name = text | |||
| <artwork><![CDATA[ | objective-value = any | |||
| objective = [objective-name, objective-flags, loop-count, ?objective-value] | loop-count = 0..255 | |||
| ]]></sourcecode> | ||||
| objective-name = text | ||||
| objective-value = any | ||||
| loop-count = 0..255 | ||||
| ]]></artwork> | ||||
| </figure></t> | ||||
| <t>All objectives are identified by a unique name which is a UTF-8 str | ||||
| ing <xref target="RFC3629"/>, to be | ||||
| compared byte by byte. </t> | ||||
| <t>The names of generic objectives MUST NOT include a colon (":") | ||||
| and MUST be registered with IANA (<xref target="iana"/>).</t> | ||||
| <t>The names of privately defined objectives MUST include at least one | <t>All objectives are identified by a unique name that is a UTF-8 | |||
| colon (":"). | string <xref target="RFC3629" format="default"/>, to be compared | |||
| The string preceding the last colon in the name MUST be globally uniqu | byte by byte. </t> | |||
| e and in some | <t>The names of generic objectives <bcp14>MUST NOT</bcp14> include a c | |||
| olon (":") | ||||
| and <bcp14>MUST</bcp14> be registered with IANA (<xref target="iana" f | ||||
| ormat="default"/>).</t> | ||||
| <t>The names of privately defined objectives <bcp14>MUST</bcp14> inclu | ||||
| de at least one colon (":"). | ||||
| The string preceding the last colon in the name <bcp14>MUST</bcp14> be | ||||
| globally unique and in some | ||||
| way identify the entity or person defining the objective. The followin g three methods | way identify the entity or person defining the objective. The followin g three methods | |||
| MAY be used to create such a globally unique string: | <bcp14>MAY</bcp14> be used to create such a globally unique string: | |||
| <list style="numbers"> | </t> | |||
| <t>The unique string is a decimal number representing a registered 32 | <ol spacing="normal" type="1"> | |||
| bit Private Enterprise | <li>The unique string is a decimal number representing a registered | |||
| Number (PEN) <xref target="RFC5612"/> that uniquely identifies the ent | 32-bit Private Enterprise | |||
| erprise | Number (PEN) <xref target="RFC5612" format="default"/> that uniquely i | |||
| defining the objective.</t> | dentifies the enterprise | |||
| <t>The unique string is a fully qualified domain name that uniquely id | defining the objective.</li> | |||
| entifies the entity or person | <li>The unique string is a FQDN that uniquely identifies the entity | |||
| defining the objective.</t> | or person | |||
| <t>The unique string is an email address that uniquely identifies the | defining the objective.</li> | |||
| entity or person | <li>The unique string is an email address that uniquely identifies t | |||
| defining the objective.</t> | he entity or person | |||
| </list> | defining the objective.</li> | |||
| </ol> | ||||
| The GRASP protocol treats the objective name as an opaque string. For | <t> | |||
| example, "EX1", "32473:EX1", | ||||
| "example.com:EX1", "example.org:EX1 and "user@example.org:EX1" would b | ||||
| e five different objectives.</t> | ||||
| <t>The 'objective-flags' field is described below.</t> | ||||
| GRASP treats the objective name as an opaque string. For example, "EX1 | ||||
| ", "32473:EX1", | ||||
| "example.com:EX1", "example.org:EX1", and "user@example.org:EX1" are f | ||||
| ive different objectives.</t> | ||||
| <t>The 'objective-flags' field is described in <xref target="objective | ||||
| _flags" format="default"/>.</t> | ||||
| <t>The 'loop-count' field is used for terminating negotiation as descr ibed in | <t>The 'loop-count' field is used for terminating negotiation as descr ibed in | |||
| <xref target="NegotiationMessage"/>. It is also used for terminating d | <xref target="NegotiationMessage" format="default"/>. It is also used | |||
| iscovery as | for terminating discovery as | |||
| described in <xref target="discmech"/>, and for terminating flooding a | described in <xref target="discmech" format="default"/> and for termin | |||
| s described in | ating flooding as described in | |||
| <xref target="flooding"/>. It is placed in the objective rather than i | <xref target="flooding" format="default"/>. It is placed in the object | |||
| n the GRASP | ive rather than in the GRASP | |||
| message format because, as far as the ASA is concerned, it is a proper ty of the | message format because, as far as the ASA is concerned, it is a proper ty of the | |||
| objective itself. | objective itself. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The 'objective-value' field is to express the actual value of a negoti ation | The 'objective-value' field expresses the actual value of a negotiatio n | |||
| or synchronization objective. Its format is defined in the | or synchronization objective. Its format is defined in the | |||
| specification of the objective and may be a simple value | 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 C BOR. | or a data structure of any kind, as long as it can be represented in C BOR. | |||
| It is optional because it is optional in a Discovery or Discovery Resp | It is optional only in a Discovery or Discovery Response message.</t> | |||
| onse message.</t> | </section> | |||
| </section> | <section anchor="objective_flags" numbered="true" toc="default"> | |||
| <name>Objective Flags</name> | ||||
| <section title="Objective flags"> | <t>An objective may be relevant for discovery only, for discovery and | |||
| negotiation, or | ||||
| <t>An objective may be relevant for discovery only, for discovery and n | ||||
| egotiation, or | ||||
| for discovery and synchronization. This is expressed in the objective b y logical flag bits:</t> | for discovery and synchronization. This is expressed in the objective b y logical flag bits:</t> | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
| 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 | |||
| ) | )]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure></t> | ||||
| <t>These bits are independent and may be combined appropriately, e.g. ( | <t>These bits are independent and may be combined appropriately, e.g., | |||
| F_DISC and F_SYNCH) or | (F_DISC and F_SYNCH) or | |||
| (F_DISC and F_NEG) or (F_DISC and F_NEG and F_NEG_DRY).</t> | (F_DISC and F_NEG) or (F_DISC and F_NEG and F_NEG_DRY).</t> | |||
| <t>Note that for a given negotiation session, an objective must be eith er used for negotiation, or for | <t>Note that for a given negotiation session, an objective must be use d either for negotiation or for | |||
| dry-run negotiation. Mixing the two modes in a single negotiation is no t possible.</t> | dry-run negotiation. Mixing the two modes in a single negotiation is no t possible.</t> | |||
| </section> | </section> | |||
| <section anchor="ConsOption" numbered="true" toc="default"> | ||||
| <section anchor="ConsOption" title="General Considerations for Objective O | <name>General Considerations for Objective Options</name> | |||
| ptions"> | <t>As mentioned above, objective options <bcp14>MUST</bcp14> be assign | |||
| ed a unique name. | ||||
| <t>As mentioned above, Objective Options MUST be assigned a unique name. | As long as privately defined objective options obey the rules above, thi | |||
| As long as privately defined Objective Options obey the rules above, thi | s document | |||
| s document | does not restrict their choice of name, but the entity or person concern | |||
| does not restrict their choice of name, but the entity or person concern | ed <bcp14>SHOULD</bcp14> publish the names in use. </t> | |||
| ed SHOULD publish the names in use. </t> | <t>Names are expressed as UTF-8 strings for convenience in designing o | |||
| bjective options for | ||||
| <t>Names are expressed as UTF-8 strings for convenience in designing Obj | localized use. For generic usage, names expressed in the ASCII subset of | |||
| ective Options for | UTF-8 are <bcp14>RECOMMENDED</bcp14>. | |||
| localized use. For generic usage, names expressed in the ASCII subset of | Designers planning to use non-ASCII names are strongly advised to consul | |||
| UTF-8 are RECOMMENDED. | t <xref target="RFC8264" format="default"/> | |||
| Designers planning to use non-ASCII names are strongly advised to consul | ||||
| t <xref target="RFC7564"/> | ||||
| or its successor | or its successor | |||
| to understand the complexities involved. Since the GRASP protocol compar | to understand the complexities involved. Since GRASP compares names byte | |||
| es names byte by byte, | by byte, | |||
| all issues of Unicode profiling and canonicalization MUST be specified i | all issues of Unicode profiling and canonicalization <bcp14>MUST</bcp14> | |||
| n the design of the | be specified in the design of the | |||
| Objective Option.</t> | objective option.</t> | |||
| <t>All objective options <bcp14>MUST</bcp14> respect the CBOR patterns | ||||
| <t>All Objective Options MUST respect the CBOR patterns defined above as | defined above as "objective" | |||
| "objective" | and <bcp14>MUST</bcp14> replace the 'any' field with a valid CBOR data d | |||
| and MUST replace the "any" field with a valid CBOR data definition | efinition | |||
| for the relevant use case and application. </t> | for the relevant use case and application. </t> | |||
| <t>An objective option that contains no additional | ||||
| <t>An Objective Option that contains no additional | fields beyond its 'loop-count' can only be a discovery objective and <bc | |||
| fields beyond its "loop-count" can only be a discovery objective and MUS | p14>MUST</bcp14> only be used | |||
| T only be used | ||||
| in Discovery and Discovery Response messages.</t> | in Discovery and Discovery Response messages.</t> | |||
| <t>The Negotiation Objective options contain negotiation objectives, | ||||
| <t>The Negotiation Objective Options contain negotiation objectives, | which vary according to different functions and/or services. They <bcp14 | |||
| which vary according to different functions/services. They MUST | >MUST</bcp14> | |||
| be carried by Discovery, Request Negotiation or Negotiation messages onl | be carried by Discovery, Request Negotiation, or Negotiation messages on | |||
| y. The negotiation | ly. The negotiation | |||
| initiator MUST set the initial "loop-count" to a value specified in the | initiator <bcp14>MUST</bcp14> set the initial 'loop-count' to a value sp | |||
| ecified in the | ||||
| specification of the objective or, if no such value is specified, to | specification of the objective or, if no such value is specified, to | |||
| GRASP_DEF_LOOPCT.</t> | GRASP_DEF_LOOPCT.</t> | |||
| <t>For most scenarios, there should be initial values in the | ||||
| <t>For most scenarios, there should be initial values in the | negotiation requests. Consequently, the Negotiation Objective options <b | |||
| negotiation requests. Consequently, the Negotiation Objective options MU | cp14>MUST</bcp14> | |||
| ST | ||||
| always be completely presented in a Request Negotiation message, or in a Discovery | always be completely presented in a Request Negotiation message, or in a Discovery | |||
| message in rapid mode. If there is no | message in rapid mode. If there is no | |||
| initial value, the value field SHOULD be set to the 'null' value defined | initial value, the 'value' field <bcp14>SHOULD</bcp14> be set to the 'nu ll' value defined | |||
| by CBOR.</t> | by CBOR.</t> | |||
| <t>Synchronization Objective options are similar, but <bcp14>MUST</bcp | ||||
| <t>Synchronization Objective Options are similar, but MUST be carried | 14> be carried | |||
| by Discovery, Discovery Response, Request Synchronization, or Flood Sync hronization | by Discovery, Discovery Response, Request Synchronization, or Flood Sync hronization | |||
| messages only. They include | messages only. They include | |||
| value fields only in Synchronization or Flood Synchronization messages. | 'value' fields only in Synchronization or Flood Synchronization messages | |||
| </t> | . </t> | |||
| <t>The design of an objective interacts in various ways with the desig | ||||
| <t>The design of an objective interacts in various ways with the design | n of the ASAs | |||
| of the ASAs | ||||
| that will use it. ASA design considerations are discussed in | that will use it. ASA design considerations are discussed in | |||
| <xref target="I-D.carpenter-anima-asa-guidelines"/>.</t> | <xref target="I-D.ietf-anima-asa-guidelines" format="default"/>.</t> | |||
| </section> | </section> | |||
| <section title="Organizing of Objective Options"> | <section numbered="true" toc="default"> | |||
| <name>Organizing of Objective Options</name> | ||||
| <t>Generic objective options MUST be specified in documents | <t>Generic objective options <bcp14>MUST</bcp14> be specified in docum | |||
| available to the public and SHOULD be designed to use either | ents | |||
| available to the public and <bcp14>SHOULD</bcp14> be designed to use e | ||||
| ither | ||||
| the negotiation or the synchronization mechanism described above. | the negotiation or the synchronization mechanism described above. | |||
| </t> | </t> | |||
| <t>As noted earlier, one negotiation objective is handled by each | <t>As noted earlier, one negotiation objective is handled by each | |||
| GRASP negotiation thread. Therefore, a negotiation objective, which is | GRASP negotiation thread. Therefore, a negotiation objective, which is | |||
| based on a specific function or action, SHOULD be organized as a singl | based on a specific function or action, <bcp14>SHOULD</bcp14> be organ | |||
| e | ized as a single | |||
| GRASP option. It is NOT RECOMMENDED to organize multiple negotiation | GRASP option. It is <bcp14>NOT RECOMMENDED</bcp14> to organize multipl | |||
| objectives into a single option, nor to split a single function | e negotiation | |||
| objectives into a single option nor to split a single function | ||||
| or action into multiple negotiation objectives. </t> | or action into multiple negotiation objectives. </t> | |||
| <t>It is important to understand that GRASP negotiation does not | <t>It is important to understand that GRASP negotiation does not | |||
| support transactional integrity. If transactional integrity is needed for | support transactional integrity. If transactional integrity is needed for | |||
| a specific objective, this must be ensured by the ASA. For example, an ASA | a specific objective, this must be ensured by the ASA. For example, an ASA | |||
| might need to ensure that it only participates in one negotiation thre ad | might need to ensure that it only participates in one negotiation thre ad | |||
| at the same time. Such an ASA would need to stop listening for incomin g | at the same time. Such an ASA would need to stop listening for incomin g | |||
| negotiation requests before generating an outgoing negotiation request .</t> | negotiation requests before generating an outgoing negotiation request .</t> | |||
| <t>A synchronization objective <bcp14>SHOULD</bcp14> be organized as a | ||||
| <t>A synchronization objective SHOULD be organized as a single GRASP o | single GRASP option.</t> | |||
| ption.</t> | ||||
| <t>Some objectives will support more than one operational mode. | <t>Some objectives will support more than one operational mode. | |||
| An example is a negotiation objective with both a "dry run" mode | An example is a negotiation objective with both a dry-run mode | |||
| (where the negotiation is to find out whether the other end can in fac | (where the negotiation is to determine whether the other end can, in f | |||
| t | act, | |||
| make the requested change without problems) and a "live" mode, as expl | make the requested change without problems) and a live mode, as explai | |||
| ained | ned | |||
| in <xref target="negproc"/>. The semantics of such | in <xref target="negproc" format="default"/>. The semantics of such | |||
| modes will be defined in the specification of the objectives. These | modes will be defined in the specification of the objectives. These | |||
| objectives SHOULD include flags indicating the | objectives <bcp14>SHOULD</bcp14> include flags indicating the | |||
| applicable mode(s).</t> | applicable mode(s).</t> | |||
| <t>An issue requiring particular attention is that GRASP itself is | <t>An issue requiring particular attention is that GRASP itself is | |||
| not a transactionally safe protocol. Any state associated with a dry r un operation, | not a transactionally safe protocol. Any state associated with a dry-r un operation, | |||
| such as temporarily reserving a resource for subsequent use in a live | such as temporarily reserving a resource for subsequent use in a live | |||
| run, is entirely a matter for the designer of the ASA concerned.</t> | run, is entirely a matter for the designer of the ASA concerned.</t> | |||
| <t>As indicated in <xref target="terms" format="default"/>, an objecti | ||||
| <t>As indicated in <xref target="terms"/>, an objective's value may | ve's value may | |||
| include multiple parameters. Parameters | include multiple parameters. Parameters | |||
| might be categorized into two classes: the obligatory ones presented a s | might be categorized into two classes: the obligatory ones presented a s | |||
| fixed fields; and the optional ones presented in | fixed fields and the optional ones presented in | |||
| some other form of data structure embedded in CBOR. The format might b e | some other form of data structure embedded in CBOR. The format might b e | |||
| inherited from an existing management or configuration protocol, with | inherited from an existing management or configuration protocol, with | |||
| the objective option acting as a carrier for that format. | the objective option acting as a carrier for that format. | |||
| The data structure might be defined in a formal language, but that is a | The data structure might be defined in a formal language, but that is a | |||
| matter for the specifications of individual objectives. | matter for the specifications of individual objectives. | |||
| There are many candidates, according to the context, such as ABNF, RBN F, | There are many candidates, according to the context, such as ABNF, RBN F, | |||
| XML Schema, YANG, etc. The GRASP protocol itself is agnostic on | XML Schema, YANG, etc. GRASP itself is agnostic on | |||
| these questions. The only restriction is that the format can be mapped | these questions. The only restriction is that the format can be mapped | |||
| into CBOR.</t> | into CBOR.</t> | |||
| <t>It is <bcp14>NOT RECOMMENDED</bcp14> to mix parameters that have si | ||||
| <t>It is NOT RECOMMENDED to mix parameters that have significantly | gnificantly | |||
| different response time characteristics in a single objective. Separat | different response-time characteristics in a single objective. Separat | |||
| e | e | |||
| objectives are more suitable for such a scenario.</t> | objectives are more suitable for such a scenario.</t> | |||
| <t>All objectives <bcp14>MUST</bcp14> support GRASP discovery. However | ||||
| <t>All objectives MUST support GRASP discovery. However, as mentioned | , as mentioned | |||
| in <xref target="highlevel"/>, it is acceptable for an ASA to use an a | in <xref target="highlevel" format="default"/>, it is acceptable for a | |||
| lternative method | n ASA to use an alternative method | |||
| of discovery. </t> | of discovery. </t> | |||
| <t>Normally, a GRASP objective will refer to specific technical parame ters | <t>Normally, a GRASP objective will refer to specific technical parame ters | |||
| as explained in <xref target="terms"/>. However, it is acceptable to d efine | as explained in <xref target="terms" format="default"/>. However, it i s acceptable to define | |||
| an abstract objective for the purpose of managing or coordinating ASAs . | an abstract objective for the purpose of managing or coordinating ASAs . | |||
| It is also acceptable to define a special-purpose objective for purpos es | It is also acceptable to define a special-purpose objective for purpos es | |||
| such as trust bootstrapping or formation of the ACP.</t> | such as trust bootstrapping or formation of the ACP.</t> | |||
| <t> | <t> | |||
| To guarantee convergence, a limited number of rounds or a timeout is needed | To guarantee convergence, a limited number of rounds or a timeout is needed | |||
| for each negotiation objective. | for each negotiation objective. | |||
| Therefore, the definition of each negotiation objective SHOULD clear | Therefore, the definition of each negotiation objective <bcp14>SHOUL | |||
| ly specify | D</bcp14> clearly specify | |||
| this, for example a default loop count and timeout, | this, for example, a default loop count and timeout, | |||
| so that the negotiation can always be terminated properly. If not, | so that the negotiation can always be terminated properly. If not, | |||
| the GRASP defaults will apply. | the GRASP defaults will apply. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | ||||
| There must be a well-defined procedure for concluding that a negotia tion cannot | There must be a well-defined procedure for concluding that a negotia tion cannot | |||
| succeed, and if so deciding what happens next (e.g., deadlock | succeed, and if so, deciding what happens next (e.g., deadlock | |||
| resolution, tie-breaking, or revert to best-effort | resolution, tie-breaking, or reversion to best-effort | |||
| service). This MUST be specified for individual negotiation objectiv | service). This <bcp14>MUST</bcp14> be specified for individual negot | |||
| es. | iation objectives. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Experimental and Example Objective Options"> | <name>Experimental and Example Objective Options</name> | |||
| <t>The names "EX0" through "EX9" have been reserved for experimental o ptions. | <t>The names "EX0" through "EX9" have been reserved for experimental o ptions. | |||
| Multiple names have been assigned because a single experiment | Multiple names have been assigned because a single experiment | |||
| may use multiple options simultaneously. These experimental options | may use multiple options simultaneously. These experimental options | |||
| are highly likely to have different meanings when used for different | are highly likely to have different meanings when used for different | |||
| experiments. Therefore, they SHOULD NOT be used without an explicit | experiments. Therefore, they <bcp14>SHOULD NOT</bcp14> be used without | |||
| human decision and MUST NOT be used in unmanaged networks such as | an explicit | |||
| human decision and <bcp14>MUST NOT</bcp14> be used in unmanaged networ | ||||
| ks such as | ||||
| home networks.</t> | home networks.</t> | |||
| <t>These names are also RECOMMENDED for use in documentation | <t>These names are also <bcp14>RECOMMENDED</bcp14> for use in document ation | |||
| examples.</t> | examples.</t> | |||
| </section> | </section> | |||
| </section> | ||||
| </section> | ||||
| <section title="Implementation Status [RFC Editor: please remove]"> | ||||
| <t>Two prototype implementations of GRASP have been made.</t> | ||||
| <section title="BUPT C++ Implementation"> | ||||
| <t><list style="symbols"> | ||||
| <t>Name: BaseNegotiator.cpp, msg.cpp, Client.cpp, Server.cpp</t> | ||||
| <t>Description: C++ implementation of GRASP core and API</t> | ||||
| <t>Maturity: Prototype code, interoperable between Ubuntu.</t> | ||||
| <t>Coverage: Corresponds to draft-carpenter-anima-gdn-protocol-03. Since i | ||||
| t was implemented | ||||
| based on the old version draft, the most significant limitations comparing | ||||
| to current protocol design | ||||
| include: | ||||
| <list style="symbols"> | ||||
| <t>Not support CBOR</t> | ||||
| <t>Not support Flooding</t> | ||||
| <t>Not support loop avoidance</t> | ||||
| <t>only coded for IPv6, any IPv4 is accidental</t></list></t> | ||||
| <t>Licensing: Huawei License.</t> | ||||
| <t>Experience: https://github.com/liubingpang/IETF-Anima-Signaling-Protoco | ||||
| l/blob/master/README.md</t> | ||||
| <t>Contact: https://github.com/liubingpang/IETF-Anima-Signaling-Protocol</ | ||||
| t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section title="Python Implementation"> | ||||
| <t><list style="symbols"> | ||||
| <t>Name: graspy</t> | ||||
| <t>Description: Python 3 implementation of GRASP core and API.</t> | ||||
| <t>Maturity: Prototype code, interoperable between Windows 7 and Linux.</t | ||||
| > | ||||
| <t>Coverage: Corresponds to draft-ietf-anima-grasp-13. Limitations include | ||||
| : | ||||
| <list style="symbols"> | ||||
| <t>insecure: uses a dummy ACP module</t> | ||||
| <t>only coded for IPv6, any IPv4 is accidental</t> | ||||
| <t>FQDN and URI locators incompletely supported</t> | ||||
| <t>no code for rapid mode</t> | ||||
| <t>relay code is lazy (no rate control)</t> | ||||
| <t>all unicast transactions use TCP (no unicast UDP). Experimental code | ||||
| for unicast UDP proved to be complex and brittle.</t> | ||||
| <t>optional Objective option in Response messages not implemented</t> | ||||
| <t>workarounds for defects in Python socket module and Windows socket p | ||||
| eculiarities</t> | ||||
| </list></t> | ||||
| <t>Licensing: Simplified BSD</t> | ||||
| <t>Experience: Tested on Windows, Linux and MacOS. https://www.cs.auckland | ||||
| .ac.nz/~brian/graspy/graspy.pdf</t> | ||||
| <t>Contact: https://www.cs.auckland.ac.nz/~brian/graspy/</t> | ||||
| </list></t> | ||||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| <section anchor="security" title="Security Considerations"> | <section anchor="security" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | ||||
| <t>A successful attack on negotiation-enabled nodes | <t>A successful attack on negotiation-enabled nodes | |||
| would be extremely harmful, as such nodes might end up with a completely | would be extremely harmful, as such nodes might end up with a completely | |||
| undesirable configuration that would also adversely affect their peers. | undesirable configuration that would also adversely affect their peers. | |||
| GRASP nodes and messages therefore require full protection. | GRASP nodes and messages therefore require full protection. | |||
| As explained in <xref target="reqsec"/>, GRASP MUST run within a secure | As explained in <xref target="reqsec" format="default"/>, GRASP <bcp14>MUS | |||
| environment such as the Autonomic Control Plane | T</bcp14> run within a secure | |||
| <xref target="I-D.ietf-anima-autonomic-control-plane"/>, | environment such as the ACP | |||
| except for the constrained instances described in <xref target="secinst"/> | <xref target="RFC8994" format="default"/>, | |||
| .</t> | except for the constrained instances described in <xref target="secinst" f | |||
| ormat="default"/>.</t> | ||||
| <t>- Authentication<list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t>A cryptographically authenticated identity for each device is | <dt>Authentication | |||
| needed in an autonomic network. It is not safe to assume that a | </dt> | |||
| <dd><t>A cryptographically authenticated identity for each device is | ||||
| needed in an Autonomic Network. It is not safe to assume that a | ||||
| large network is physically secured against interference or that all | large network is physically secured against interference or that all | |||
| personnel are trustworthy. Each autonomic node MUST be capable | personnel are trustworthy. Each autonomic node <bcp14>MUST</bcp14> be capable | |||
| of proving its identity and authenticating its messages. GRASP | of proving its identity and authenticating its messages. GRASP | |||
| relies on a separate external certificate-based security mechanism to support | relies on a separate, external certificate-based security mechanism to support | |||
| authentication, data integrity protection, and anti-replay protection. </t> | authentication, data integrity protection, and anti-replay protection. </t> | |||
| <t>Since GRASP must be deployed in an existing secure environment, | <t>Since GRASP must be deployed in an existing secure environment, | |||
| the protocol itself specifies nothing concerning the trust anchor and | the protocol itself specifies nothing concerning the trust anchor and | |||
| certification authority. For example, in the Autonomic Control Plane | certification authority. For example, in the ACP | |||
| <xref target="I-D.ietf-anima-autonomic-control-plane"/>, all nodes can | <xref target="RFC8994" format="default"/>, all nodes can | |||
| trust each other and the ASAs installed in them.</t> | trust each other and the ASAs installed in them.</t> | |||
| <t>If GRASP is used temporarily without an external security mechanism | <t>If GRASP is used temporarily without an external security mechanism, | |||
| , | for example, during system bootstrap (<xref target="reqsec" format="de | |||
| for example during system bootstrap (<xref target="reqsec"/>), | fault"/>), | |||
| the Session ID (<xref target="SessionID"/>) will act as a nonce to | the Session ID (<xref target="SessionID" format="default"/>) will act | |||
| provide limited protection against third parties injecting responses. | as a nonce to | |||
| provide limited protection against the injecting of responses by third | ||||
| parties. | ||||
| A full analysis of the secure bootstrap process is in | A full analysis of the secure bootstrap process is in | |||
| <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/>. </t> | <xref target="RFC8995" format="default"/>.</t> | |||
| </list></t> | </dd> | |||
| <t>- Authorization and Roles<list style="hanging"> | <dt>Authorization and roles</dt> | |||
| <t>The GRASP protocol is agnostic about the roles and capabilities of i | <dd><t>GRASP is agnostic about the roles and capabilities of individual | |||
| ndividual | ||||
| ASAs and about which objectives a particular ASA is authorized to suppo rt. An implementation | ASAs and about which objectives a particular ASA is authorized to suppo rt. An implementation | |||
| might support precautions such as allowing only one ASA in a given node to modify | 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 ex ample, | a given objective, but this may not be appropriate in all cases. For ex ample, | |||
| it might be operationally useful to allow an old and a new version of t he same | it might be operationally useful to allow an old and a new version of t he same | |||
| ASA to run simultaneously during an overlap period. These questions are out | ASA to run simultaneously during an overlap period. These questions are out | |||
| of scope for the present specification.</t> | of scope for the present specification.</t></dd> | |||
| </list></t> | ||||
| <t>- Privacy and confidentiality<list style="hanging"> | <dt>Privacy and confidentiality | |||
| <t>GRASP is intended for network management purposes involving | </dt> | |||
| <dd><t>GRASP is intended for network-management purposes involving | ||||
| network elements, not end hosts. Therefore, no personal information | network elements, not end hosts. Therefore, no personal information | |||
| is expected to be involved in the signaling protocol, so there should be no direct | is expected to be involved in the signaling protocol, so there should be no direct | |||
| impact on personal privacy. Nevertheless, applications that do | impact on personal privacy. Nevertheless, applications that do | |||
| convey personal information cannot be excluded. Also, traffic flow pat hs, VPNs, | convey personal information cannot be excluded. Also, traffic flow pat hs, VPNs, | |||
| etc. could be negotiated, which could be of interest for traffic | etc., could be negotiated, which could be of interest for traffic | |||
| analysis. Operators generally want to conceal details of their | analysis. Operators generally want to conceal details of their | |||
| network topology and traffic density from outsiders. Therefore, | network topology and traffic density from outsiders. Therefore, | |||
| since insider attacks cannot be excluded in a large | since insider attacks cannot be excluded in a large | |||
| network, the security mechanism for the protocol MUST | network, the security mechanism for the protocol <bcp14>MUST</bcp14> | |||
| provide message confidentiality. This is why <xref target="reqsec"/> | provide message confidentiality. This is why <xref target="reqsec" for | |||
| requires either an ACP or an alternative security mechanism.</t> | mat="default"/> | |||
| </list></t> | requires either an ACP or an alternative security mechanism.</t></dd> | |||
| <t>- Link-local multicast security<list style="hanging"> | <dt>Link-local multicast security | |||
| <t>GRASP has no reasonable alternative to using link-local multicast | </dt> | |||
| for Discovery or Flood Synchronization messages and these messages are | <dd><t>GRASP has no reasonable alternative to using link-local | |||
| sent in clear and | multicast for Discovery or Flood Synchronization messages, and these | |||
| with no authentication. They are only sent on interfaces within the au | messages are sent in the clear and with no authentication. They are only | |||
| tonomic network | sent on interfaces within the Autonomic Network (see <xref target="terms | |||
| (see <xref target="terms"/> and <xref target="reqsec"/>). | " format="default"/> and <xref target="reqsec" format="default"/>). They are, h | |||
| They are however available to on-link eavesdroppers, and | owever, available to on-link | |||
| could be forged by on-link attackers. In the case of Discovery, the Di | eavesdroppers and could be forged by on-link attackers. In the case | |||
| scovery Responses | of discovery, the Discovery Responses are unicast and will therefore | |||
| are unicast and will therefore be protected (<xref target="reqsec"/>), | be protected (<xref target="reqsec" format="default"/>), and an | |||
| and an untrusted | untrusted forger will not be able to receive responses. In the case of | |||
| forger will not be able to receive responses. In the case of Flood Syn | flood synchronization, an on-link eavesdropper will be able to receive | |||
| chronization, an on-link | the flooded objectives, but there is no response message to | |||
| eavesdropper will be able to receive the flooded objectives but there | consider. Some precautions for Flood Synchronization messages are | |||
| is no response | suggested in <xref target="flooding" format="default"/>.</t></dd> | |||
| message to consider. Some precautions for Flood Synchronization messag | ||||
| es | ||||
| are suggested in <xref target="flooding"/>.</t> | ||||
| </list></t> | ||||
| <t>- DoS Attack Protection<list style="hanging"> | <dt>DoS attack protection | |||
| <t>GRASP discovery partly relies on insecure link-local multicast. Sin | </dt> | |||
| ce | <dd><t>GRASP discovery partly relies on insecure link-local multicast. S | |||
| routers participating in GRASP sometimes relay discovery messages from | ince | |||
| one link | routers participating in GRASP sometimes relay Discovery messages from | |||
| to another, this could be a vector for denial of service attacks. Some | one link | |||
| mitigations are specified in <xref target="discmech"/>. However, malic | to another, this could be a vector for denial-of-service attacks. Some | |||
| ious | mitigations are specified in <xref target="discmech" format="default"/ | |||
| code installed inside the Autonomic Control Plane could always launch | >. However, malicious | |||
| DoS attacks consisting of spurious discovery messages, or of spurious | code installed inside the ACP could always launch | |||
| discovery responses. It is important that firewalls prevent any GRASP | DoS attacks consisting of either spurious Discovery messages or spurio | |||
| messages | us | |||
| from entering the domain from an unknown source. </t> | Discovery Responses. It is important that firewalls prevent any GRASP | |||
| </list></t> | messages | |||
| from entering the domain from an unknown source.</t></dd> | ||||
| <t>- Security during bootstrap and discovery<list style="hanging"> | <dt>Security during bootstrap and discovery | |||
| <t>A node cannot trust GRASP traffic from other nodes until the securi | </dt> | |||
| ty | <dd><t>A node cannot trust GRASP traffic from other nodes until the secu | |||
| rity | ||||
| environment (such as the ACP) has identified the trust anchor and can authenticate traffic | environment (such as the ACP) has identified the trust anchor and can authenticate traffic | |||
| by validating certificates for other nodes. Also, until it has succesf | by validating certificates for other nodes. Also, until it has success | |||
| ully enrolled | fully enrolled | |||
| <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/> a node cannot | <xref target="RFC8995" format="default"/>, a node cannot | |||
| assume that other nodes are able to authenticate its own traffic. | assume that other nodes are able to authenticate its own traffic. | |||
| Therefore, GRASP discovery during the bootstrap phase for a new device | Therefore, GRASP discovery during the bootstrap phase for a new device | |||
| will inevitably be insecure. Secure synchronization and negotiation | will inevitably be insecure. Secure synchronization and negotiation | |||
| will be impossible until enrollment is complete. Further details | will be impossible until enrollment is complete. Further details | |||
| are given in <xref target="secinst"/>.</t> | are given in <xref target="secinst" format="default"/>.</t></dd> | |||
| </list></t> | ||||
| <t>- Security of discovered locators<list style="hanging"> | <dt>Security of discovered locators | |||
| <t>When GRASP discovery returns an IP address, it MUST be that of a no | </dt> | |||
| de | <dd><t>When GRASP discovery returns an IP address, it <bcp14>MUST</bcp14 | |||
| within the secure environment (<xref target="reqsec"/>). If it returns | > be that of a node | |||
| an FQDN or a URI, the ASA that receives it MUST NOT assume that the | within the secure environment (<xref target="reqsec" format="default"/ | |||
| target of the locator is within the secure environment.</t> | >). If it returns | |||
| </list></t> | an FQDN or a URI, the ASA that receives it <bcp14>MUST NOT</bcp14> ass | |||
| ume that the | ||||
| target of the locator is within the secure environment.</t></dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| <section anchor="cddl" numbered="true" toc="default"> | ||||
| <name>CDDL Specification of GRASP</name> | ||||
| <section anchor="cddl" title="CDDL Specification of GRASP"> | <sourcecode name="grasp.cddl" type="cddl" markers="true"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| <CODE BEGINS> | ||||
| 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 = 0..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 | |||
| message /= discovery-message | message /= discovery-message | |||
| discovery-message = [M_DISCOVERY, session-id, initiator, objective] | discovery-message = [M_DISCOVERY, session-id, initiator, objective] | |||
| message /= response-message ;response to Discovery | message /= response-message ; response to Discovery | |||
| 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] | |||
| message /= synch-message ;response to Synchronization request | message /= synch-message ; response to Synchronization request | |||
| synch-message = [M_SYNCH, session-id, objective] | synch-message = [M_SYNCH, session-id, objective] | |||
| message /= flood-message | message /= flood-message | |||
| flood-message = [M_FLOOD, session-id, initiator, ttl, | flood-message = [M_FLOOD, session-id, initiator, ttl, | |||
| +[objective, (locator-option / [])]] | +[objective, (locator-option / [])]] | |||
| message /= request-negotiation-message | message /= request-negotiation-message | |||
| request-negotiation-message = [M_REQ_NEG, session-id, objective] | request-negotiation-message = [M_REQ_NEG, session-id, objective] | |||
| message /= request-synchronization-message | message /= request-synchronization-message | |||
| request-synchronization-message = [M_REQ_SYN, session-id, objective] | request-synchronization-message = [M_REQ_SYN, session-id, objective] | |||
| message /= negotiation-message | message /= negotiation-message | |||
| negotiation-message = [M_NEGOTIATE, session-id, objective] | negotiation-message = [M_NEGOTIATE, session-id, objective] | |||
| message /= end-message | message /= end-message | |||
| end-message = [M_END, session-id, accept-option / decline-option ] | end-message = [M_END, session-id, accept-option / decline-option] | |||
| message /= wait-message | message /= wait-message | |||
| wait-message = [M_WAIT, session-id, waiting-time] | wait-message = [M_WAIT, session-id, waiting-time] | |||
| message /= invalid-message | message /= invalid-message | |||
| invalid-message = [M_INVALID, session-id, ?any] | invalid-message = [M_INVALID, session-id, ?any] | |||
| noop-message = [M_NOOP] | noop-message = [M_NOOP] | |||
| divert-option = [O_DIVERT, +locator-option] | divert-option = [O_DIVERT, +locator-option] | |||
| accept-option = [O_ACCEPT] | accept-option = [O_ACCEPT] | |||
| decline-option = [O_DECLINE, ?reason] | decline-option = [O_DECLINE, ?reason] | |||
| reason = text ;optional UTF-8 error message | reason = text ; optional UTF-8 error message | |||
| waiting-time = 0..4294967295 ; in milliseconds | waiting-time = 0..4294967295 ; in milliseconds | |||
| ttl = 0..4294967295 ; in milliseconds | ttl = 0..4294967295 ; in milliseconds | |||
| locator-option /= [O_IPv4_LOCATOR, ipv4-address, | 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 | |||
| locator-option /= [O_IPv6_LOCATOR, ipv6-address, | 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 | |||
| locator-option /= [O_FQDN_LOCATOR, text, transport-proto, port-number] | locator-option /= [O_FQDN_LOCATOR, text, transport-proto, | |||
| port-number] | ||||
| locator-option /= [O_URI_LOCATOR, text, | locator-option /= [O_URI_LOCATOR, text, | |||
| transport-proto / null, port-number / null] | transport-proto / null, port-number / null] | |||
| 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 | |||
| initiator = ipv4-address / ipv6-address | initiator = ipv4-address / ipv6-address | |||
| 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 | |||
| ) | ) | |||
| objective = [objective-name, objective-flags, loop-count, ?objective-value] | objective = [objective-name, objective-flags, | |||
| loop-count, ?objective-value] | ||||
| objective-name = text ;see section "Format of Objective Options" | objective-name = text ; see section "Format of Objective Options" | |||
| objective-value = any | objective-value = any | |||
| loop-count = 0..255 | loop-count = 0..255 | |||
| ; Constants for message types and option types | ; Constants for message types and option types | |||
| M_NOOP = 0 | M_NOOP = 0 | |||
| M_DISCOVERY = 1 | M_DISCOVERY = 1 | |||
| M_RESPONSE = 2 | M_RESPONSE = 2 | |||
| skipping to change at line 2157 ¶ | skipping to change at line 2071 ¶ | |||
| 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> | ]]></sourcecode> | |||
| ]]></artwork> | ||||
| </figure></t> | ||||
| </section> | </section> | |||
| <section anchor="iana" numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <section anchor="iana" title="IANA Considerations"> | <t>This document defines the GeneRic Autonomic Signaling Protocol (GRASP). | |||
| <t>This document defines the GeneRic Autonomic Signaling Protocol (GRASP).</ | </t> | |||
| t> | <t><xref target="Constants" format="default"/> explains the following link | |||
| <t><xref target="Constants"/> explains the following link-local multicast | -local multicast | |||
| addresses, which IANA is requested to assign for use by GRASP:</t> | addresses that IANA has assigned for use by GRASP.</t> | |||
| <t><list style="hanging"> | ||||
| <t hangText="ALL_GRASP_NEIGHBORS multicast address">(IPv6): (TBD1). | ||||
| Assigned in the IPv6 Link-Local Scope Multicast Addresses registry.</t | ||||
| > | ||||
| <t hangText="ALL_GRASP_NEIGHBORS multicast address">(IPv4): (TBD2). | ||||
| Assigned in the IPv4 Multicast Local Network Control Block. | ||||
| <!-- <vspace blankLines="1"/> | ||||
| (Note in draft: alternatively, we could use 224.0.0.1, currently | ||||
| defined as All Systems on this Subnet.)--></t> | ||||
| </list></t> | ||||
| <t><xref target="Constants"/> explains the following User Port, | ||||
| which IANA is requested to assign for use by GRASP for both UDP and TCP:< | ||||
| /t> | ||||
| <t>GRASP_LISTEN_PORT: (TBD3) | ||||
| <vspace blankLines="0"/> | ||||
| Service Name: Generic Autonomic Signaling Protocol (GRASP) | ||||
| <vspace blankLines="0"/> | ||||
| Transport Protocols: UDP, TCP | ||||
| <vspace blankLines="0"/> | ||||
| Assignee: iesg@ietf.org | ||||
| <vspace blankLines="0"/> | ||||
| Contact: chair@ietf.org | ||||
| <vspace blankLines="0"/> | ||||
| Description: See <xref target="Constants"/> | ||||
| <vspace blankLines="0"/> | ||||
| Reference: RFC XXXX (this document)</t> | ||||
| <t>The IANA is requested to create a GRASP Parameter Registry | ||||
| including two registry tables. These are the GRASP Messages and Options Ta | ||||
| ble and | ||||
| the GRASP Objective Names Table.</t> | ||||
| <t>GRASP Messages and Options Table. The values in this table are names pa | ||||
| ired with decimal | ||||
| integers. Future values MUST be assigned using the Standards Action policy | ||||
| defined by <xref target="RFC8126"/>. The following initial values are assi | ||||
| gned by this document:</t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[M_NOOP = 0 | ||||
| M_DISCOVERY = 1 | ||||
| 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 | ||||
| O_ACCEPT = 101 | ||||
| O_DECLINE = 102 | ||||
| O_IPv6_LOCATOR = 103 | ||||
| O_IPv4_LOCATOR = 104 | ||||
| O_FQDN_LOCATOR = 105 | ||||
| O_URI_LOCATOR = 106 | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t>GRASP Objective Names Table. The values in this table are UTF-8 strin | ||||
| gs which | ||||
| MUST NOT include a colon (":"), according to <xref target="ObjForm"/>. | ||||
| Future values MUST be assigned using the Specification Required policy | ||||
| defined by <xref target="RFC8126"/>.</t> | ||||
| <t>To assist expert review of a new objective, the specification should | ||||
| include | ||||
| a precise description of the format of the new objective, with sufficien | ||||
| t explanation | ||||
| of its semantics to allow independent implementations. See <xref target= | ||||
| "ConsOption"/> for | ||||
| more details. If the new objective is similar in name or purpose to a pr | ||||
| eviously | ||||
| registered objective, the specification should explain why a new objecti | ||||
| ve is justified. </t> | ||||
| <t>The following initial values are assigned by this document:</t> | ||||
| <t><figure> | <t>Assigned in the "Link-Local Scope Multicast Addresses" subregistry | |||
| <artwork><![CDATA[ EX0 | of the "IPv6 Multicast Address Space Registry":</t> | |||
| EX1 | <dl newline="false" spacing="compact"> | |||
| EX2 | ||||
| EX3 | ||||
| EX4 | ||||
| EX5 | ||||
| EX6 | ||||
| EX7 | ||||
| EX8 | ||||
| EX9 | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </t> | ||||
| </section> | <dt>Address(es):</dt><dd>ff02::13</dd> | |||
| <dt>Description:</dt><dd>ALL_GRASP_NEIGHBORS</dd> | ||||
| <dt>Reference:</dt><dd>RFC 8990</dd> | ||||
| </dl> | ||||
| <section anchor="ack" title="Acknowledgements"> | <t>Assigned in the "Local Network Control Block (224.0.0.0 - 224.0.0.2 | |||
| 55 (224.0.0/24))" | ||||
| subregistry of the "IPv4 Multicast Address Space Registry":</t> | ||||
| <t>A major contribution to the original version of this document was made | <dl newline="false" spacing="compact"> | |||
| by Sheng Jiang | <dt>Address(es):</dt><dd>224.0.0.119</dd> | |||
| and significant contributions were made by Toerless Eckert. | <dt>Description:</dt><dd>ALL_GRASP_NEIGHBORS</dd> | |||
| Significant early review inputs were received from Joel Halpern, Barry Lei | <dt>Reference:</dt><dd>RFC 8990</dd> | |||
| ba, | </dl> | |||
| Charles E. Perkins, and Michael Richardson. William Atwood provided import | <t><xref target="Constants" format="default"/> explains the following User | |||
| ant assistance in | Port (GRASP_LISTEN_PORT), | |||
| debugging a prototype implementation.</t> | which IANA has assigned for use by GRASP for both UDP and TCP:</t> | |||
| <t>Valuable comments were received from | <dl spacing="compact"> | |||
| Michael Behringer, | <dt>Service Name:</dt> <dd>grasp</dd> | |||
| Jeferson Campos Nobre, | <dt>Port Number:</dt> <dd>7017</dd> | |||
| Laurent Ciavaglia, | <dt>Transport Protocol:</dt> <dd>udp, tcp</dd> | |||
| Zongpeng Du, | <dt>Description</dt><dd>GeneRic Autonomic Signaling Protocol</dd> | |||
| Yu Fu, | <dt>Assignee:</dt> <dd>IESG <iesg@ietf.org></dd> | |||
| Joel Jaeggli, | <dt>Contact:</dt> <dd>IETF Chair <chair@ietf.org></dd> | |||
| Zhenbin Li, | <dt>Reference:</dt> <dd>RFC 8990</dd> | |||
| Dimitri Papadimitriou, | </dl> | |||
| 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.</t> | ||||
| <t>The IANA has created the "GeneRic Autonomic Signaling Protocol (GRASP) | ||||
| Parameters" registry, | ||||
| which includes two subregistries: "GRASP Messages and Options" and | ||||
| "GRASP Objective Names".</t> | ||||
| <t>The values in the "GRASP Messages and Options" subregistry are names pa | ||||
| ired with decimal | ||||
| integers. Future values <bcp14>MUST</bcp14> be assigned using the Standard | ||||
| s Action policy | ||||
| defined by <xref target="RFC8126" format="default"/>. The following initia | ||||
| l values are assigned by this document:</t> | ||||
| <table anchor="msg-options"> | ||||
| <name>Initial Values of the "GRASP Messages and Options" Subregistry</name> | ||||
| <thead> | ||||
| <tr><th>Value</th><th>Message/Option</th></tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>0</td> | ||||
| <td>M_NOOP</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>1</td> | ||||
| <td>M_DISCOVERY</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>2</td> | ||||
| <td>M_RESPONSE</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>3</td> | ||||
| <td>M_REQ_NEG</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>4</td> | ||||
| <td>M_REQ_SYN</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>5</td> | ||||
| <td>M_NEGOTIATE</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>6</td> | ||||
| <td>M_END</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>7</td> | ||||
| <td>M_WAIT</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>8</td> | ||||
| <td>M_SYNCH</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>9</td> | ||||
| <td>M_FLOOD</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>99</td> | ||||
| <td>M_INVALID</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>100</td> | ||||
| <td>O_DIVERT</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>101</td> | ||||
| <td>O_ACCEPT</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>102</td> | ||||
| <td>O_DECLINE</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>103</td> | ||||
| <td>O_IPv6_LOCATOR</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>104</td> | ||||
| <td>O_IPv4_LOCATOR</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>105</td> | ||||
| <td>O_FQDN_LOCATOR</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>106</td> | ||||
| <td>O_URI_LOCATOR</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>The values in the "GRASP Objective Names" subregistry are UTF-8 | ||||
| strings that <bcp14>MUST NOT</bcp14> include a colon (":"), according | ||||
| to <xref target="ObjForm" format="default"/>. Future values | ||||
| <bcp14>MUST</bcp14> be assigned using the Specification Required policy | ||||
| defined by <xref target="RFC8126" format="default"/>.</t> | ||||
| <t>To assist expert review of a new objective, the specification should | ||||
| include a precise description of the format of the new objective, with | ||||
| sufficient explanation of its semantics to allow independent | ||||
| implementations. See <xref target="ConsOption" format="default"/> for | ||||
| more details. If the new objective is similar in name or purpose to a | ||||
| previously registered objective, the specification should explain why a | ||||
| new objective is justified. </t> | ||||
| <t>The following initial values are assigned by this document:</t> | ||||
| <table anchor="obj-names"> | ||||
| <name>Initial Values of the "GRASP Objective Names" Subregistry</name> | ||||
| <thead> | ||||
| <tr><th>Objective Name</th><th>Reference</th></tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>EX0</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX1</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX2</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX3</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX4</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX5</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX6</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX7</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX8</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>EX9</td> | ||||
| <td>RFC 8990</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | ||||
| <?rfc include='reference.RFC.2119'?> | ||||
| <!-- <?rfc include='reference.RFC.5280'?> --> | ||||
| <?rfc include='reference.RFC.4086'?> | ||||
| <!-- <?rfc include='reference.RFC.5246'?> --> | ||||
| <!-- <?rfc include='reference.RFC.6347'?> --> | ||||
| <?rfc include='reference.RFC.3986'?> | ||||
| <?rfc include='reference.RFC.7049'?> | ||||
| <?rfc include='reference.RFC.7217'?> | ||||
| <?rfc include='reference.RFC.3629'?> | ||||
| <?rfc include='reference.RFC.8085'?> | ||||
| <?rfc include='reference.I-D.ietf-anima-autonomic-control-plane'?> | ||||
| <?rfc include='reference.I-D.greevenbosch-appsawg-cbor-cddl'?> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <?rfc include='reference.RFC.2334'?> | ||||
| <?rfc include='reference.RFC.3493'?> | ||||
| <?rfc include='reference.RFC.8126'?> | ||||
| <?rfc include='reference.RFC.6733'?> | ||||
| <?rfc include='reference.RFC.2865'?> | ||||
| <?rfc include='reference.RFC.4861'?> | ||||
| <?rfc include='reference.RFC.5971'?> | ||||
| <?rfc include='reference.RFC.6241'?> | ||||
| <!-- <?rfc include='reference.RFC.3209'?> --> | ||||
| <?rfc include='reference.RFC.2205'?> | ||||
| <?rfc include='reference.RFC.3416'?> | ||||
| <?rfc include='reference.RFC.3315'?> | ||||
| <?rfc include='reference.RFC.6887'?> | ||||
| <?rfc include='reference.RFC.6762'?> | ||||
| <?rfc include='reference.RFC.6763'?> | ||||
| <?rfc include='reference.RFC.2608'?> | ||||
| <?rfc include='reference.RFC.6206'?> | ||||
| <?rfc include='reference.RFC.7564'?> | ||||
| <?rfc include='reference.RFC.7575'?> | ||||
| <?rfc include='reference.RFC.7576'?> | ||||
| <?rfc include='reference.RFC.7558'?> | ||||
| <?rfc include='reference.RFC.7787'?> | ||||
| <?rfc include='reference.RFC.7788'?> | ||||
| <?rfc include='reference.RFC.8040'?> | ||||
| <?rfc include='reference.I-D.liu-anima-grasp-api'?> | ||||
| <?rfc include='reference.I-D.stenberg-anima-adncp'?> | ||||
| <?rfc include='reference.I-D.chaparadza-intarea-igcp'?> | ||||
| <?rfc include='reference.I-D.ietf-anima-reference-model'?> | ||||
| <?rfc include='reference.I-D.ietf-anima-bootstrapping-keyinfra'?> | ||||
| <?rfc include='reference.I-D.ietf-anima-stable-connectivity'?> | ||||
| <?rfc include='reference.RFC.5612'?> | ||||
| <?rfc include='reference.I-D.carpenter-anima-asa-guidelines'?> | ||||
| </references> | ||||
| <section title="Open Issues [RFC Editor: This section should be empty. Pleas | ||||
| e remove]"> | ||||
| <t><list style="symbols"> | ||||
| <t>68. (Placeholder)</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section title="Closed Issues [RFC Editor: Please remove]"> | ||||
| <t> | ||||
| <list style="symbols"> | ||||
| <t>1. UDP vs TCP: For now, this specification suggests UDP and TCP a | ||||
| s | ||||
| message transport mechanisms. This is not clarified yet. UDP | ||||
| is good for short conversations, is necessary for multicast discover | ||||
| y, | ||||
| and generally fits the discovery and divert scenarios | ||||
| well. However, it will cause problems with large messages. TCP is go | ||||
| od | ||||
| 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. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by specifying UDP for short message and TCP for longer one. | ||||
| </t> | ||||
| <t>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 s | ||||
| ecurity for short | ||||
| messages over UDP and longer ones over TCP. The implementation trade | ||||
| -offs are different. | ||||
| The current approach requires expensive asymmetric cryptographic cal | ||||
| culations | ||||
| for every message. (D)TLS has startup overheads but cheaper crypto p | ||||
| er message. | ||||
| DTLS is less mature than TLS. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by specifying external security (ACP or (D)TLS). | ||||
| </t> | ||||
| <t>The following open issues applied only if the original security m | ||||
| odel was retained: | ||||
| <list style="symbols"> | ||||
| <t>2.1. For replay protection, GRASP currently requires every partic | ||||
| ipant 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.</t> | ||||
| <t>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. </t> | ||||
| </list>RESOLVED by changing security model.</t> | ||||
| <t>3. DoS Attack Protection needs work. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by adding text.</t> | ||||
| <t>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 discover | ||||
| y, especially | ||||
| for a very large autonomic network. Centralized registration could b | ||||
| e automatically | ||||
| deployed incrementally. At the very first stage, the repository coul | ||||
| d 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 reposi | ||||
| tory, the less the | ||||
| multicast-based discovery is needed. However, if we adopt such a mec | ||||
| hanism, there would be | ||||
| challenges: stateful solution, and security. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED for now by adding optional use of DNS-SD by ASAs. Subsequen | ||||
| tly removed | ||||
| by editors as irrelevant to GRASP istelf. | ||||
| </t> | ||||
| <t>5. Need to expand description of the minimum requirements for | ||||
| the specification of an individual discovery, synchronization or | ||||
| negotiation objective. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED for now by extra wording.</t> | ||||
| <t>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. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: recommend a separate document.</t> | ||||
| <t>7. Cross-check against other ANIMA WG documents for consistency a | ||||
| nd gaps. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Satisfied by WGLC.</t> | ||||
| <t>8. Consideration of ADNCP proposal. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by adding optional use of DNCP for flooding-type synchroniz | ||||
| ation.</t> | ||||
| <t>9. Clarify how a GDNP instance knows whether it is running inside | ||||
| the ACP. (Sheng) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by improved text.</t> | ||||
| <t>10. Clarify how a non-ACP GDNP instance initiates (D)TLS. (Sheng) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by improved text and declaring DTLS out of scope for this d | ||||
| raft. | ||||
| </t> | ||||
| <t>11. Clarify how UDP/TCP choice is made. (Sheng) [Like DNS? - Bria | ||||
| n] | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by improved text.</t> | ||||
| <t>12. Justify that IP address within ACP or (D)TLS environment is s | ||||
| ufficient to | ||||
| prove AN identity; or explain how Device Identity Option is used. (S | ||||
| heng) | ||||
| <vspace blankLines="1"/> | ||||
| 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 lat | ||||
| er.</t> | ||||
| <t>13. Emphasise that negotiation/synchronization are independent fr | ||||
| om discovery, | ||||
| although the rapid discovery mode includes the first step of a negot | ||||
| iation/synchronization. | ||||
| (Sheng) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by improved text. </t> | ||||
| <t>14. Do we need an unsolicited flooding mechanism for discovery (f | ||||
| or discovery results | ||||
| that everyone needs), to reduce scaling impact of flooding discovery | ||||
| messages? (Toerless) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, added to requirements and solution. </t> | ||||
| <t>15. Do we need flag bits in Objective Options to distinguish dist | ||||
| inguish Synchronization | ||||
| and Negotiation "Request" or rapid mode "Discovery" messages? (Bing) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: yes, work on the API showed that these flags are essential | ||||
| . </t> | ||||
| <t>16. (Related to issue 14). Should we revive the "unsolicited Resp | ||||
| onse" 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, wher | ||||
| e DNCP doesn't | ||||
| seem applicable. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, see #14. | ||||
| </t> | ||||
| <t>17. Ensure that the discovery mechanism is completely proof again | ||||
| st loops | ||||
| and protected against duplicate responses. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Added loop count mechanism. | ||||
| </t> | ||||
| <t>18. Discuss the handling of multiple valid discovery responses. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Stated that the choice must be available to the ASA | ||||
| but GRASP implementation should pick a default. </t> | ||||
| <t>19. Should we use a text-oriented format such as JSON/CBOR instea | ||||
| d of | ||||
| native binary TLV format? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, changed to CBOR. </t> | ||||
| <t>20. Is the Divert option needed? If a discovery response provides | <displayreference target="I-D.stenberg-anima-adncp" to="ADNCP"/> | |||
| a valid | <displayreference target="I-D.chaparadza-intarea-igcp" to="IGCP"/> | |||
| IP address or FQDN, the recipient doesn't gain any extra knowledge f | <displayreference target="I-D.ietf-anima-asa-guidelines" to="ASA-GUIDELINES"/> | |||
| rom the Divert. | ||||
| On the other hand, the presence of Divert informs the receiver that | ||||
| the target | ||||
| is off-link, which might be useful sometimes. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Decided to keep Divert option. </t> | ||||
| <t>21. Rename the protocol as GRASP (GeneRic Autonomic Signaling Pro | ||||
| tocol)? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, name changed.</t> | ||||
| <t>22. Does discovery mechanism scale robustly as needed? Need hop l | ||||
| imit on relaying? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Added hop limit.</t> | ||||
| <t>23. Need more details on TTL for caching discovery responses. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>24. Do we need "fast withdrawal" of discovery responses? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: This doesn't seem necessary. If an ASA exits or stops supp | ||||
| orting a given objective, | ||||
| peers will fail to start future sessions and will simply repeat disc | ||||
| overy. </t> | ||||
| <t>25. Does GDNP discovery meet the needs of multi-hop DNS-SD? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Decided not to consider this further as a GRASP protocol i | ||||
| ssue. GRASP objectives | ||||
| could embed DNS-SD formats if needed.</t> | ||||
| <t>26. Add a URL type to the locator options (for security bootstrap | ||||
| etc.) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done, later renamed as URI. </t> | ||||
| <t>27. Security of Flood multicasts (<xref target="flooding"/>). | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: added text.</t> | ||||
| <t>28. Does ACP support secure link-local multicast? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by new text in the Security Considerations.</t> | ||||
| <t>29. PEN is used to distinguish vendor options. Would it be better | ||||
| to use | ||||
| a domain name? Anything unique will do. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Simplified this by removing PEN field and changing naming | ||||
| rules | ||||
| for objectives.</t> | ||||
| <t>30. Does response to discovery require randomized delays to mitig | ||||
| ate amplification attacks? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: WG feedback is that it's unnecessary.</t> | ||||
| <t>31. We have specified repeats for failed discovery etc. Is that s | ||||
| ufficient to deal with sleeping nodes? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: WG feedback is that it's unnecessary to say more.</t> | ||||
| <t>32. We have one-to-one synchronization and flooding synchronizati | ||||
| on. Do we also need | ||||
| selective flooding to a subset of nodes? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: This will be discussed as a protocol extension in a separa | ||||
| te draft | ||||
| (draft-liu-anima-grasp-distribution).</t> | ||||
| <t>33. Clarify if/when discovery needs to be repeated. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>34. Clarify what is mandatory for running in ACP, expand discussi | ||||
| on of security boundary | ||||
| when running with no ACP - might rely on the local PKI infrastructur | ||||
| e. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>35. State that role-based authorization of ASAs is out of scope f | ||||
| or GRASP. | ||||
| GRASP doesn't recognize/handle any "roles". | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>36. Reconsider CBOR definition for PEN syntax. | ||||
| ( objective-name = text / [pen, text] ; pen = uint ) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: See issue 29.</t> | ||||
| <t>37. Are URI locators really needed? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, e.g. for security bootstrap discovery, but added note | ||||
| that | ||||
| addresses are the normal case (same for FQDN locators).</t> | ||||
| <t>38. Is Session ID sufficient to identify relayed responses? | ||||
| Isn't the originator's address needed too? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, this is needed for multicast messages and their respo | ||||
| nses.</t> | ||||
| <t>39. Clarify that a node will contain one GRASP instance supportin | ||||
| g multiple ASAs. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>40. Add a "reason" code to the DECLINE option? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>41. What happens if an ASA cannot conveniently use one of the GRA | ||||
| SP mechanisms? | ||||
| Do we (a) add a message type to GRASP, or (b) simply pass the discov | ||||
| ery results to the ASA so | ||||
| that it can open its own socket?<vspace blankLines="1"/> | ||||
| RESOLVED: Both would be possible, but (b) is preferred.</t> | ||||
| <t>42. Do we need a feature whereby an ASA can bypass the ACP and us | ||||
| e the data plane | ||||
| for efficiency/throughput? This would require discovery to return no | ||||
| n-ACP addresses | ||||
| and would evade ACP security.<vspace blankLines="1"/> | ||||
| RESOLVED: This is considered out of scope for GRASP, but a comment h | ||||
| as been added | ||||
| in security considerations. </t> | ||||
| <t>43. Rapid mode synchronization and negotiation is currently limit | ||||
| ed to | ||||
| a single objective for simplicity of design and implementation. A fu | ||||
| ture | ||||
| consideration is to allow multiple objectives in rapid mode for grea | ||||
| ter efficiency. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: This is considered out of scope for this version.</t> | ||||
| <t>44. In requirement T9, the words that encryption "may not be requ | ||||
| ired in all deployments" | ||||
| were removed. Is that OK?.<vspace blankLines="1"/> | ||||
| RESOLVED: No objections.</t> | ||||
| <t>45. Device Identity Option is unused. Can we remove it completely | ||||
| ?.<vspace blankLines="1"/> | ||||
| RESOLVED: No objections. Done.</t> | ||||
| <t>46. The 'initiator' field in DISCOVER, RESPONSE and FLOOD message | ||||
| s is intended to assist | ||||
| in loop prevention. However, we also have the loop count for that. A | ||||
| lso, 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?<vspace blankLines="1"/> | ||||
| RESOLVED: Yes. Done.</t> | ||||
| <t>47. REQUEST is a dual purpose message (request negotiation or req | ||||
| uest synchronization). | ||||
| Would it be better to split this into two different messages (and ad | ||||
| just various | ||||
| message names accordingly)?<vspace blankLines="1"/> | ||||
| RESOLVED: Yes. Done.</t> | ||||
| <t>48. Should the Appendix "Capability Analysis of Current Protocols | ||||
| " be deleted before | ||||
| RFC publication?<vspace blankLines="1"/> | ||||
| RESOLVED: No (per WG meeting at IETF 96).</t> | ||||
| <t>49. <xref target="reqsec"/> Should say more about signaling betwee | ||||
| n two autonomic networks/domains. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Description of separate GRASP instance added.</t> | ||||
| <t>50. Is Rapid mode limited to on-link only? What happens if first d | ||||
| iscovery responder does | ||||
| not support Rapid Mode? <xref target="negproc"/>, <xref target="synch | ||||
| proc"/>) | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Not limited to on-link. First responder wins.</t> | ||||
| <t>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 so | ||||
| urce locator? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: TTL added to Flood (and Discovery Response) messages. Cache | ||||
| d flooded | ||||
| objectives must be tagged with their originating ASA locator, and mul | ||||
| tiple copies must be kept if necessary.</t> | ||||
| <t>52. Describe in detail what is allowed and disallowed in an insecu | ||||
| re instance of GRASP. | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>53. Tune IANA Considerations to support early assignment request.< | ||||
| vspace blankLines="1"/></t> | ||||
| <t>54. Is there a highly unlikely race condition if two peers simulta | ||||
| neously choose the | ||||
| same Session ID and send each other simultaneous M_REQ_NEG messages? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes. Enhanced text on Session ID generation, and added prec | ||||
| aution when | ||||
| receiving a Request message.</t> | ||||
| <t>55. Could discovery be performed over TCP?<vspace blankLines="1"/> | ||||
| RESOLVED: Unicast discovery added as an option.</t> | ||||
| <t>56. Change Session-ID to 32 bits?<vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>57. Add M_INVALID message?<vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>58. Maximum message size? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED by specifying default maximum message size (2048 bytes).</t> | ||||
| <t>59. Add F_NEG_DRY flag to specify a "dry run" objective?.<vspace bl | ||||
| ankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>60. Change M_FLOOD syntax to associate a locator with each objectiv | ||||
| e?<vspace blankLines="1"/> | ||||
| RESOLVED: Done.</t> | ||||
| <t>61. Is the SONN constrained instance really needed?<vspace blankLin | ||||
| es="1"/> | ||||
| RESOLVED: Retained but only as an option.</t> | ||||
| <t>62. Is it helpful to tag descriptive text with message names (M_DIS | ||||
| COVER etc.)?<vspace blankLines="1"/> | ||||
| RESOLVED: Yes, done in various parts of the text.</t> | ||||
| <t>63. Should encryption be MUST instead of SHOULD in <xref target="re | ||||
| qsec"/> and <xref target="reqsec"/>? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: Yes, MUST implement in both cases.</t> | ||||
| <t>64. Should more security text be moved from the main text into the | ||||
| Security Considerations? | ||||
| <vspace blankLines="1"/> | ||||
| RESOLVED: No, on AD advice.</t> | ||||
| <t>65. Do we need to formally restrict Unicode characters allowed in o | ||||
| bjective names?<vspace blankLines="1"/> | ||||
| RESOLVED: No, but need to point to guidance from PRECIS WG.</t> | ||||
| <t>66. Split requirements into separate document?<vspace blankLines="1 | ||||
| "/> | ||||
| RESOLVED: No, on AD advice.</t> | ||||
| <t>67. Remove normative dependency on draft-greevenbosch-appsawg-cbor- | ||||
| cddl?<vspace blankLines="1"/> | ||||
| RESOLVED: No, on AD advice. In worst case, fix at AUTH48.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="changes" title="Change log [RFC Editor: Please remove]"> | ||||
| <t>draft-ietf-anima-grasp-15, 2017-07-07: | ||||
| <vspace blankLines="1"/> | ||||
| Updates following additional IESG comments: | ||||
| <vspace blankLines="1"/> | ||||
| Security (Eric Rescorla): missing brittleness of group security concept, a | ||||
| ttack via compromised member. | ||||
| <vspace blankLines="1"/> | ||||
| TSV (Mirja Kuehlewind): clarification on the use of UDP, TCP, mandate use | ||||
| of TCP (or other reliable transport). | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that in ACP, UDP is not used at all. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that GRASP itself needs TCP listen port (was previously written | ||||
| as if this was optional). | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-14, 2017-07-02: | ||||
| <vspace blankLines="1"/> | ||||
| Updates following additional IESG comments: | ||||
| <vspace blankLines="1"/> | ||||
| Updated 2.5.1 and 2.5.2 based on IESG security feedback (specify dependenc | ||||
| y against security substrate). | ||||
| <vspace blankLines="1"/> | ||||
| Strengthened requirement for reliable transport protocol. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-13, 2017-06-06: | ||||
| <vspace blankLines="1"/> | ||||
| Updates following additional IESG comments: | ||||
| <vspace blankLines="1"/> | ||||
| Removed all mention of TLS, including SONN, since it was under-specified. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified other text about trust and security model. | ||||
| <vspace blankLines="1"/> | ||||
| Banned Rapid Mode when multicast is insecure. | ||||
| <vspace blankLines="1"/> | ||||
| Explained use of M_INVALID to support extensibility | ||||
| <vspace blankLines="1"/> | ||||
| Corrected details on discovery cache TTL and discovery timeout. | ||||
| <vspace blankLines="1"/> | ||||
| Improved description of multicast UDP w.r.t. RFC8085. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified when transport connections are opened or closed. | ||||
| <vspace blankLines="1"/> | ||||
| Noted that IPPROTO values come from the Protocol Numbers registry | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Added protocol and port numbers to URI locator. | ||||
| <vspace blankLines="1"/> | ||||
| Removed inaccurate text about routing protocols | ||||
| <vspace blankLines="1"/> | ||||
| Moved Requirements section to an Appendix. | ||||
| <vspace blankLines="1"/> | ||||
| Other editorial and technical clarifications. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-12, 2017-05-19: | ||||
| <vspace blankLines="1"/> | ||||
| Updates following IESG comments: | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that GRASP runs in a single addressing realm | ||||
| <vspace blankLines="1"/> | ||||
| Improved wording about FQDN resolution, clarified that URI usage is out of | ||||
| scope. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified description of negotiation timeout. | ||||
| <vspace blankLines="1"/> | ||||
| Noted that 'dry run' semantics are ASA-dependent | ||||
| <vspace blankLines="1"/> | ||||
| Made the ACP a normative reference | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that LL multicasts are limited to GRASP interfaces | ||||
| <vspace blankLines="1"/> | ||||
| Unicast UDP moved out of scope | ||||
| <vspace blankLines="1"/> | ||||
| Editorial clarifications | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-11, 2017-03-30: | ||||
| <vspace blankLines="1"/> | ||||
| Updates following IETF 98 discussion: | ||||
| <vspace blankLines="1"/> | ||||
| Encryption changed to a MUST implement. | ||||
| <vspace blankLines="1"/> | ||||
| Pointed to guidance on UTF-8 names. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-10, 2017-03-10: | ||||
| <vspace blankLines="1"/> | ||||
| Updates following IETF Last call: | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Specify that an objective with no initial value should ha | ||||
| ve | ||||
| its value field set to CBOR 'null'. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Specify behavior on receiving unrecognized message type. | ||||
| <vspace blankLines="1"/> | ||||
| Noted that UTF-8 names are matched byte-for-byte. | ||||
| <vspace blankLines="1"/> | ||||
| Added brief guidance for Expert Reviewer of new generic objectives. | ||||
| <vspace blankLines="1"/> | ||||
| Numerous editorial improvements and clarifications and minor text rearrang | ||||
| ements, | ||||
| none intended to change the meaning. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-09, 2016-12-15: | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Add F_NEG_DRY flag to specify a "dry run" objective. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Change M_FLOOD syntax to associate a locator with each ob | ||||
| jective. | ||||
| <vspace blankLines="1"/> | ||||
| Concentrated mentions of TLS in one section, with all details out of scope | ||||
| . | ||||
| <vspace blankLines="1"/> | ||||
| Clarified text around constrained instances of GRASP. | ||||
| <vspace blankLines="1"/> | ||||
| Strengthened text restricting LL addresses in locator options. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified description of rapid mode processsing. | ||||
| <vspace blankLines="1"/> | ||||
| Specified that cached discovery results should not be returned on the same | ||||
| interface where they were learned. | ||||
| <vspace blankLines="1"/> | ||||
| Shortened text in "High Level Design Choices" | ||||
| <vspace blankLines="1"/> | ||||
| Dropped the word 'kernel' to avoid confusion with o/s kernel mode. | ||||
| <vspace blankLines="1"/> | ||||
| Editorial improvements and clarifications. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-08, 2016-10-30: | <references> | |||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.4086.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3986.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8949.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7217.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3629.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8085.xml"/> | ||||
| <vspace blankLines="1"/> | <reference anchor="RFC8994" target="https://www.rfc-editor.org/info/rfc8994"> | |||
| Protocol change: Added M_INVALID message. | <front> | |||
| <vspace blankLines="1"/> | <title>An Autonomic Control Plane (ACP)</title> | |||
| Protocol change: Increased Session ID space to 32 bits. | <author initials="T" surname="Eckert" fullname="Toerless Eckert" role="editor | |||
| <vspace blankLines="1"/> | "> | |||
| Enhanced rules to avoid Session ID clashes. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Corrected and completed description of timeouts for Request messages. | <author initials="M" surname="Behringer" fullname="Michael H. Behringer" role | |||
| <vspace blankLines="1"/> | ="editor"> | |||
| Improved wording about exponential backoff and DoS. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Clarified that discovery relaying is not done by limited security instance | <author initials="S" surname="Bjarnason" fullname="Steinthor Bjarnason"> | |||
| s. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Corrected and expanded explanation of port used for Discovery Response. | <date month="May" year="2021"/> | |||
| <vspace blankLines="1"/> | </front> | |||
| Noted that Discovery message could be sent unicast in special cases. | <seriesInfo name="RFC" value="8994"/> | |||
| <vspace blankLines="1"/> | <seriesInfo name="DOI" value="10.17487/RFC8994"/> | |||
| Added paragraph on extensibility. | </reference> | |||
| <vspace blankLines="1"/> | ||||
| Specified default maximum message size. | ||||
| <vspace blankLines="1"/> | ||||
| Added Appendix for sample messages. | ||||
| <vspace blankLines="1"/> | ||||
| Added short protocol overview. | ||||
| <vspace blankLines="1"/> | ||||
| Editorial fixes, including minor re-ordering for readability. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-07, 2016-09-13: | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC .8610.xml"/> | |||
| <vspace blankLines="1"/> | </references> | |||
| Protocol change: Added TTL field to Flood message (issue 51). | <references> | |||
| <vspace blankLines="1"/> | <name>Informative References</name> | |||
| Protocol change: Added Locator option to Flood message (issue 51). | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <vspace blankLines="1"/> | FC.2334.xml"/> | |||
| Protocol change: Added TTL field to Discovery Response message (corrollary | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| to issue 51). | FC.3493.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Clarified details of rapid mode (issues 43 and 50). | FC.8126.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Description of inter-domain GRASP instance added (issue 49). | FC.6733.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Description of limited security GRASP instances added (issue 52). | FC.2865.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Strengthened advice to use TCP rather than UDP. | FC.4861.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Updated IANA considerations and text about well-known port usage (issue 53 | FC.5971.xml"/> | |||
| ). | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <vspace blankLines="1"/> | FC.6241.xml"/> | |||
| Amended text about ASA authorization and roles to allow for overlapping AS | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| As. | FC.2205.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Added text recommending that Flood should be repeated periodically. | FC.3416.xml"/> | |||
| <vspace blankLines="1"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Editorial fixes. | FC.8415.xml"/> | |||
| </t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| FC.5612.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6887.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6762.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6763.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2608.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6206.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8264.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7575.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7576.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7558.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7787.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7788.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8040.xml"/> | ||||
| <t>draft-ietf-anima-grasp-06, 2016-06-27: | <reference anchor="RFC8991" target="https://www.rfc-editor.org/info/rfc8991"> | |||
| <vspace blankLines="1"/> | <front> | |||
| Added text on discovery cache timeouts. | <title>GeneRic Autonomic Signaling Protocol Application Program Interface (GRASP | |||
| <vspace blankLines="1"/> | API)</title> | |||
| Noted that ASAs that are only initiators do not need to respond to discove | <author initials="B" surname="Carpenter" fullname="Brian Carpenter"> | |||
| ry message. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Added text on unexpected address changes. | <author initials="B" surname="Liu" fullname="Bing Liu" role="editor"> | |||
| <vspace blankLines="1"/> | <organization/> | |||
| Added text on robust implementation. | </author> | |||
| <vspace blankLines="1"/> | <author initials="W" surname="Wang" fullname="Wendong Wang"> | |||
| Clarifications and editorial fixes for numerous review comments | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Added open issues for some review comments. | <author initials="X" surname="Gong" fullname="Xiangyang Gong"> | |||
| </t> | <organization/> | |||
| </author> | ||||
| <date month="May" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8991"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8991"/> | ||||
| </reference> | ||||
| <t>draft-ietf-anima-grasp-05, 2016-05-13: | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| <vspace blankLines="1"/> | .stenberg-anima-adncp.xml"/> | |||
| Noted in requirement T1 that it should be possible to implement ASAs indep | ||||
| endently as user space programs. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Added protocol number and port to discovery response. Upd | ||||
| ated protocol description, CDDL and IANA considerations accordingly. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that discovery and flood multicasts are handled by the GRASP cor | ||||
| e, not directly by ASAs. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that a node may discover an objective without supporting it for | ||||
| synchronization or negotiation. | ||||
| <vspace blankLines="1"/> | ||||
| Added Implementation Status section. | ||||
| <vspace blankLines="1"/> | ||||
| Added reference to SCSP. | ||||
| <vspace blankLines="1"/> | ||||
| Editorial fixes. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-04, 2016-03-11: | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| <vspace blankLines="1"/> | .chaparadza-intarea-igcp.xml"/> | |||
| Protocol change: Restored initiator field in certain messages and adjusted | ||||
| relaying rules | ||||
| to provide complete loop detection. | ||||
| <vspace blankLines="1"/> | ||||
| Updated IANA Considerations. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-03, 2016-02-24: | <reference anchor="RFC8993" target="https://www.rfc-editor.org/info/rfc8993"> | |||
| <vspace blankLines="1"/> | <front> | |||
| Protocol change: Removed initiator field from certain messages and adjuste | <title>A Reference Model for Autonomic Networking</title> | |||
| d relaying requirement | <author initials="M" surname="Behringer" fullname="Michael H. Behringer" role | |||
| to simplify loop detection. Also clarified narrative explanation of discov | ="editor"> | |||
| ery relaying. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Protocol change: Split Request message into two (Request Negotiation and R | <author initials="B" surname="Carpenter" fullname="Brian Carpenter"> | |||
| equest Synchronization) | <organization/> | |||
| and updated other message names for clarity. | </author> | |||
| <vspace blankLines="1"/> | <author initials="T" surname="Eckert" fullname="Toerless Eckert"> | |||
| Protocol change: Dropped unused Device ID option. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Further clarified text on transport layer usage. | <author initials="L" surname="Ciavaglia" fullname="Laurent Ciavaglia"> | |||
| <vspace blankLines="1"/> | <organization/> | |||
| New text about multicast insecurity in Security Considerations. | </author> | |||
| <vspace blankLines="1"/> | <author initials="J" surname="Nobre" fullname="Jéferson Campos Nobre"> | |||
| Various other clarifications and editorial fixes, including moving some ma | <organization/> | |||
| terial to Appendix. | </author> | |||
| <date month="May" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8993"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8993"/> | ||||
| </reference> | ||||
| </t> | <reference anchor="RFC8995" target="https://www.rfc-editor.org/info/rfc8995"> | |||
| <t>draft-ietf-anima-grasp-02, 2016-01-13: | <front> | |||
| <vspace blankLines="1"/> | <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title> | |||
| Resolved numerous issues according to WG discussions. | <author initials="M" surname="Pritikin" fullname="Max Pritikin"> | |||
| <vspace blankLines="1"/> | <organization/> | |||
| Renumbered requirements, added D9. | </author> | |||
| <vspace blankLines="1"/> | <author initials="M" surname="Richardson" fullname="Michael C. Richardson"> | |||
| Protocol change: only allow one objective in rapid mode. | <organization/> | |||
| <vspace blankLines="1"/> | </author> | |||
| Protocol change: added optional error string to DECLINE option. | <author initials="T" surname="Eckert" fullname="Toerless Eckert"> | |||
| <vspace blankLines="1"/> | <organization/> | |||
| Protocol change: removed statement that seemed to say that a Request not p | </author> | |||
| receded | <author initials="M" surname="Behringer" fullname="Michael H. Behringer"> | |||
| by a Discovery should cause a Discovery response. That made no sense, beca | <organization/> | |||
| use there | </author> | |||
| is no way the initiator would know where to send the Request. | <author initials="K" surname="Watsen" fullname="Kent Watsen"> | |||
| <vspace blankLines="1"/> | <organization/> | |||
| Protocol change: Removed PEN option from vendor objectives, changed naming | </author> | |||
| rule | <date month="May" year="2021"/> | |||
| accordingly. | </front> | |||
| <vspace blankLines="1"/> | <seriesInfo name="RFC" value="8995"/> | |||
| Protocol change: Added FLOOD message to simplify coding. | <seriesInfo name="DOI" value="10.17487/RFC8995"/> | |||
| <vspace blankLines="1"/> | </reference> | |||
| Protocol change: Added SYNCH message to simplify coding. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Added initiator id to DISCOVER, RESPONSE and FLOOD messag | ||||
| es. | ||||
| But also allowed the relay process for DISCOVER and FLOOD to regenerate a | ||||
| Session ID. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Require that discovered addresses must be global (except | ||||
| during bootstrap). | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Receiver of REQUEST message must close socket if no ASA i | ||||
| s listening for the objective. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Simplified Waiting message. | ||||
| <vspace blankLines="1"/> | ||||
| Protocol change: Added No Operation message. | ||||
| <vspace blankLines="1"/> | ||||
| Renamed URL locator type as URI locator type. | ||||
| <vspace blankLines="1"/> | ||||
| Updated CDDL definition. | ||||
| <vspace blankLines="1"/> | ||||
| Various other clarifications and editorial fixes. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-01, 2015-10-09: | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <vspace blankLines="1"/> | FC.8368.xml"/> | |||
| Updated requirements after list discussion. | ||||
| <vspace blankLines="1"/> | ||||
| Changed from TLV to CBOR format - many detailed changes, added co-author. | ||||
| <vspace blankLines="1"/> | ||||
| Tightened up loop count and timeouts for various cases. | ||||
| <vspace blankLines="1"/> | ||||
| Noted that GRASP does not provide transactional integrity. | ||||
| <vspace blankLines="1"/> | ||||
| Various other clarifications and editorial fixes. | ||||
| </t> | ||||
| <t>draft-ietf-anima-grasp-00, 2015-08-14: | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| <vspace blankLines="1"/> | .ietf-anima-asa-guidelines.xml"/> | |||
| File name and protocol name changed following WG adoption. | ||||
| <vspace blankLines="1"/> | ||||
| Added URL locator type. | ||||
| </t> | ||||
| <t>draft-carpenter-anima-gdn-protocol-04, 2015-06-21: | </references> | |||
| <vspace blankLines="1"/> | </references> | |||
| Tuned wording around hierarchical structure. | ||||
| <vspace blankLines="1"/> | ||||
| Changed "device" to "ASA" in many places. | ||||
| <vspace blankLines="1"/> | ||||
| Reformulated requirements to be clear that the ASA is the main customer | ||||
| for signaling. | ||||
| <vspace blankLines="1"/> | ||||
| Added requirement for flooding unsolicited synch, and added it to protocol | ||||
| spec. | ||||
| Recognized DNCP as alternative for flooding synch data. | ||||
| <vspace blankLines="1"/> | ||||
| Requirements clarified, expanded and rearranged following design team disc | ||||
| ussion. | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that GDNP discovery must not | ||||
| be a prerequisite for GDNP negotiation or synchronization (resolved issue | ||||
| 13). | ||||
| <vspace blankLines="1"/> | ||||
| Specified flag bits for objective options (resolved issue 15). | ||||
| <vspace blankLines="1"/> | ||||
| Clarified usage of ACP vs TLS/DTLS and TCP vs UDP (resolved issues 9,10,11 | ||||
| ). | ||||
| <vspace blankLines="1"/> | ||||
| Updated DNCP description from latest DNCP draft. | ||||
| <vspace blankLines="1"/> | ||||
| Editorial improvements.</t> | ||||
| <t>draft-carpenter-anima-gdn-protocol-03, 2015-04-20: | ||||
| <vspace blankLines="1"/> | ||||
| Removed intrinsic security, required external security | ||||
| <vspace blankLines="1"/> | ||||
| Format changes to allow DNCP co-existence | ||||
| <vspace blankLines="1"/> | ||||
| Recognized DNS-SD as alternative discovery method. | ||||
| <vspace blankLines="1"/> | ||||
| Editorial improvements</t> | ||||
| <t>draft-carpenter-anima-gdn-protocol-02, 2015-02-19: | ||||
| <vspace blankLines="1"/> | ||||
| Tuned requirements to clarify scope, | ||||
| <vspace blankLines="1"/> | ||||
| Clarified relationship between types of objective, | ||||
| <vspace blankLines="1"/> | ||||
| Clarified that objectives may be simple values or complex data structures, | ||||
| <vspace blankLines="1"/> | ||||
| Improved description of objective options, | ||||
| <vspace blankLines="1"/> | ||||
| Added loop-avoidance mechanisms (loop count and default timeout, | ||||
| limitations on discovery relaying and on unsolicited responses), | ||||
| <vspace blankLines="1"/> | ||||
| Allow multiple discovery objectives in one response, | ||||
| <vspace blankLines="1"/> | ||||
| Provided for missing or multiple discovery responses, | ||||
| <vspace blankLines="1"/> | ||||
| Indicated how modes such as "dry run" should be supported, | ||||
| <vspace blankLines="1"/> | ||||
| Minor editorial and technical corrections and clarifications, | ||||
| <vspace blankLines="1"/> | ||||
| Reorganized future work list. </t> | ||||
| <t>draft-carpenter-anima-gdn-protocol-01, restructured the logical flow of | ||||
| the document, | ||||
| updated to describe synchronization completely, add unsolicited responses, | ||||
| numerous corrections | ||||
| and clarifications, expanded future work list, 2015-01-06. </t> | ||||
| <t>draft-carpenter-anima-gdn-protocol-00, combination | ||||
| of draft-jiang-config-negotiation-ps-03 and | ||||
| draft-jiang-config-negotiation-protocol-02, 2014-10-08.</t> | ||||
| </section> | ||||
| <section anchor="examples" title="Example Message Formats"> | <section anchor="examples" numbered="true" toc="default"> | |||
| <name>Example Message Formats</name> | ||||
| <t>For readers unfamiliar with CBOR, this appendix shows a number of examp le GRASP | <t>For readers unfamiliar with CBOR, this appendix shows a number of examp le GRASP | |||
| messages conforming to the CDDL syntax given | messages conforming to the CDDL syntax given in <xref target="cddl" forma | |||
| in <xref target="cddl"/>. Each message is shown three times in the follow | t="default"/>. | |||
| ing formats: | Each message is shown three times in the following formats: | |||
| <list style="numbers"> | </t> | |||
| <t>CBOR diagnostic notation.</t> | <ol spacing="normal" type="1"> | |||
| <t>Similar, but showing the names of the constants. (Details of the flag | <li>CBOR diagnostic notation.</li> | |||
| bit encoding are omitted.) </t> | <li>Similar, but showing the names of the constants. (Details of the fla | |||
| <t>Hexadecimal version of the CBOR wire format.</t> | g bit encoding are omitted.) </li> | |||
| </list> | <li>Hexadecimal version of the CBOR wire format.</li> | |||
| </ol> | ||||
| <t> | ||||
| Long lines are split for display purposes only.</t> | Long lines are split for display purposes only.</t> | |||
| <section title="Discovery Example"> | <section numbered="true" toc="default"> | |||
| <name>Discovery Example</name> | ||||
| <t>The initiator (2001:db8:f000:baaa:28cc:dc4c:9703:6781) multicasts a discovery | <t>The initiator (2001:db8:f000:baaa:28cc:dc4c:9703:6781) multicasts a D | |||
| message | iscovery message | |||
| looking for objective EX1:</t> | looking for objective EX1:</t> | |||
| <artwork name="grasp-examples.txt" align="left"><![CDATA[ | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>A peer (2001:0db8:f000:baaa:f000:baaa:f000:baaa) responds with a loca | |||
| tor:</t> | ||||
| <t>A peer (2001:0db8:f000:baaa:f000:baaa:f000:baaa) responds with a locator:</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </section> | |||
| </section> | <section numbered="true" toc="default"> | |||
| <section title="Flood Example"> | <name>Flood Example</name> | |||
| <t>The initiator multicasts a Flood Synchronization message. The single | ||||
| objective has a null locator. There is no response:</t> | ||||
| <t>The initiator multicasts a flood message. The single objective has a null loc | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| ator. There is no response:</t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </section> | |||
| </section> | <section numbered="true" toc="default"> | |||
| <section title="Synchronization Example"> | <name>Synchronization Example</name> | |||
| <t>Following successful discovery of objective EX2, the initiator unicas | ||||
| <t>Following successful discovery of objective EX2, the initiator unicasts a req | ts a Request Synchronization message:</t> | |||
| uest:</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The peer responds with a value:</t> | |||
| <t>The peer responds with a value:</t> | ||||
| <t><figure> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </section> | |||
| </section> | <section numbered="true" toc="default"> | |||
| <section title="Simple Negotiation Example"> | <name>Simple Negotiation Example</name> | |||
| <t>Following successful discovery of objective EX3, the initiator unicas | ||||
| <t>Following successful discovery of objective EX3, the initiator unicasts a req | ts a Request Negotiation message:</t> | |||
| uest:</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The peer responds with immediate acceptance. Note that no objective i | |||
| <t>The peer responds with immediate acceptance. Note that no objective is needed | s needed | |||
| , | ||||
| because the initiator's request was accepted without change:</t> | because the initiator's request was accepted without change:</t> | |||
| <t><figure> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| [6, 802813, [101]] | [6, 802813, [101]] | |||
| [M_END , 802813, [O_ACCEPT]] | [M_END , 802813, [O_ACCEPT]] | |||
| h'83061a000c3ffd811865' | h'83061a000c3ffd811865' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </section> | |||
| </section> | <section numbered="true" toc="default"> | |||
| <section title="Complete Negotiation Example"> | <name>Complete Negotiation Example</name> | |||
| <t>Again the initiator unicasts a Request Negotiation message:</t> | ||||
| <t>Again the initiator unicasts a request:</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The responder starts to negotiate (making an offer):</t> | |||
| <t>The responder starts to negotiate (making an offer):</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The initiator continues to negotiate (reducing its request, and note | |||
| <t>The initiator continues to negotiate (reducing its request, and note that the | that the loop count is decremented):</t> | |||
| loop count is decremented):</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [5, 13767778, ["EX3", 3, 5, ["NZD", 307]]] | [5, 13767778, ["EX3", 3, 5, ["NZD", 307]]] | |||
| [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 5, ["NZD", 307]]] | [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 5, ["NZD", 307]]] | |||
| h'83051a00d214628463455833030582634e5a44190133' | h'83051a00d214628463455833030582634e5a44190133' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The responder asks for more time:</t> | |||
| <t>The responder asks for more time:</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [7, 13767778, 34965] | [7, 13767778, 34965] | |||
| [M_WAIT, 13767778, 34965] | [M_WAIT, 13767778, 34965] | |||
| h'83071a00d21462198895' | h'83071a00d21462198895' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The responder continues to negotiate (increasing its offer):</t> | |||
| <t>The responder continues to negotiate (increasing its offer):</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [5, 13767778, ["EX3", 3, 4, ["NZD", 120]]] | [5, 13767778, ["EX3", 3, 4, ["NZD", 120]]] | |||
| [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 4, ["NZD", 120]]] | [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 4, ["NZD", 120]]] | |||
| h'83051a00d214628463455833030482634e5a441878' | h'83051a00d214628463455833030482634e5a441878' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The initiator continues to negotiate (reducing its request):</t> | |||
| <t>The initiator continues to negotiate (reducing its request):</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [5, 13767778, ["EX3", 3, 3, ["NZD", 246]]] | [5, 13767778, ["EX3", 3, 3, ["NZD", 246]]] | |||
| [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 3, ["NZD", 246]]] | [M_NEGOTIATE, 13767778, ["EX3", F_NEG_bits, 3, ["NZD", 246]]] | |||
| h'83051a00d214628463455833030382634e5a4418f6' | h'83051a00d214628463455833030382634e5a4418f6' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The responder refuses to negotiate further:</t> | |||
| <t>The responder refuses to negotiate further:</t> | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| [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' | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>This negotiation has failed. If either side had sent | |||
| <t>This negotiation has failed. If either side had sent | ||||
| [M_END, 13767778, [O_ACCEPT]] it would have succeeded, converging | [M_END, 13767778, [O_ACCEPT]] it would have succeeded, converging | |||
| on the objective value in the preceding M_NEGOTIATE. Note that apart | on the objective value in the preceding M_NEGOTIATE. Note that apart | |||
| from the initial M_REQ_NEG, the process is symmetrical.</t> | from the initial M_REQ_NEG, the process is symmetrical.</t> | |||
| </section> | </section> | |||
| </section> | ||||
| </section> | <section anchor="reqts" numbered="true" toc="default"> | |||
| <name>Requirement Analysis of Discovery, Synchronization, and Negotiation< | ||||
| <section anchor="reqts" title="Requirement Analysis of Discovery, Synchronizati | /name> | |||
| on and Negotiation"> | <t>This section discusses the requirements for discovery, negotiation, | |||
| <t>This section discusses the requirements for discovery, negotiation | and synchronization capabilities. The primary user of the protocol is an A | |||
| and synchronization capabilities. The primary user of the protocol is an a | utonomic Service | |||
| utonomic service | Agent (ASA), so the requirements are mainly expressed as the features need | |||
| agent (ASA), so the requirements are mainly expressed as the features need | ed by an ASA. | |||
| ed by an ASA. | ||||
| A single physical device might contain several ASAs, and a single ASA migh t manage | A single physical device might contain several ASAs, and a single ASA migh t manage | |||
| several technical objectives. If a technical objective is managed by sever al ASAs, | several technical objectives. If a technical objective is managed by sever al ASAs, | |||
| any necessary coordination is outside the scope of the GRASP signaling pro tocol. | any necessary coordination is outside the scope of GRASP. | |||
| Furthermore, requirements for ASAs themselves, such as the processing of I ntent | Furthermore, requirements for ASAs themselves, such as the processing of I ntent | |||
| <xref target="RFC7575"/>, are out of scope for the present document.</t> | <xref target="RFC7575" format="default"/>, are out of scope for the presen | |||
| t document.</t> | ||||
| <section title="Requirements for Discovery"> | <section numbered="true" toc="default"> | |||
| <t>D1. ASAs may be designed to manage any type of configurable device or | <name>Requirements for Discovery</name> | |||
| software, | <ol type="D%d." indent="6"> | |||
| as required in <xref target="synchreq"/>. A basic requirement | <li> | |||
| <t>ASAs may be designed to manage any type of configurable device or sof | ||||
| tware, | ||||
| as required in <xref target="synchreq" format="default"/>. A basic requi | ||||
| rement | ||||
| is therefore that the protocol can represent and discover any | is therefore that the protocol can represent and discover any | |||
| kind of technical objective (as defined in <xref target="terms"/>) | kind of technical objective (as defined in <xref target="terms" format=" default"/>) | |||
| among arbitrary subsets of participating nodes.</t> | among arbitrary subsets of participating nodes.</t> | |||
| <t>In an Autonomic Network, we must assume that when a device starts up, | ||||
| <t>In an autonomic network we must assume that when a device starts up | ||||
| it has no information about any peer devices, the network structure, | it has no information about any peer devices, the network structure, | |||
| or what specific role it must play. The ASA(s) inside the device are | or the specific role it must play. The ASA(s) inside the device are | |||
| in the same situation. In some cases, when a new application session | in the same situation. In some cases, when a new application session | |||
| starts up within a device, the device or ASA may again lack | starts within a device, the device or ASA may again lack | |||
| information about relevant peers. For example, it might be necessary to set | information about relevant peers. For example, it might be necessary to set | |||
| up resources on multiple other devices, coordinated and matched to | up resources on multiple other devices, coordinated and matched to | |||
| each other so that there is no wasted resource. Security settings | each other so that there is no wasted resource. Security settings | |||
| might also need updating to allow for the new device or user. | might also need updating to allow for the new device or user. | |||
| The relevant peers may be different for different technical | The relevant peers may be different for different technical | |||
| objectives. Therefore discovery needs to be repeated as often as | objectives. Therefore discovery needs to be repeated as often as | |||
| necessary to find peers capable of acting as counterparts for each | necessary to find peers capable of acting as counterparts for each | |||
| objective that a discovery initiator needs to handle. | objective that a discovery initiator needs to handle. | |||
| From this background we derive the next three requirements:</t> | From this background we derive the next three requirements:</t> | |||
| </li> | ||||
| <t>D2. When an ASA first starts up, it may have no knowledge of the spec | <li>When an ASA first starts up, it may have no knowledge of the specifi | |||
| ific network to | c network to | |||
| which it is attached. | which it is attached. | |||
| Therefore the discovery process must be able to support any network scen ario, | Therefore the discovery process must be able to support any network scen ario, | |||
| assuming only that the device concerned is bootstrapped from factory con dition. | assuming only that the device concerned is bootstrapped from factory con dition. | |||
| </t> | </li> | |||
| <li>When an ASA starts up, it must require no configured location inform | ||||
| <t>D3. When an ASA starts up, it must require no configured location inf | ation about any | |||
| ormation about any | peers in order to discover them.</li> | |||
| peers in order to discover them.</t> | <li>If an ASA supports multiple technical objectives, relevant peers may | |||
| be different | ||||
| <t>D4. If an ASA supports multiple technical objectives, relevant peers | ||||
| may be different | ||||
| for different discovery objectives, so discovery needs to be performed s eparately to | for different discovery objectives, so discovery needs to be performed s eparately to | |||
| find counterparts for each objective. Thus, there must be a mechanism by | find counterparts for each objective. Thus, there must be a mechanism by | |||
| which an ASA can separately discover peer ASAs for each of the | which an ASA can separately discover peer ASAs for each of the | |||
| technical objectives that it needs to manage, whenever necessary.</t> | technical objectives that it needs to manage, whenever necessary.</li> | |||
| <li>Following discovery, an ASA will normally perform negotiation | ||||
| <t>D5. Following discovery, an ASA will normally perform negotiation | ||||
| or synchronization for the corresponding objectives. The design | or synchronization for the corresponding objectives. The design | |||
| should allow for this by conveniently linking discovery to negotiation | should allow for this by conveniently linking discovery to negotiation | |||
| and synchronization. It may provide an optional mechanism to | and synchronization. It may provide an optional mechanism to | |||
| combine discovery and negotiation/synchronization in a single protocol e | combine discovery and negotiation/synchronization in a single protocol e | |||
| xchange.</t> | xchange.</li> | |||
| <li>Some objectives may only be significant on the local link, | ||||
| <t>D6. Some objectives may only be significant on the local link, | ||||
| but others may be significant across the routed network and require | but others may be significant across the routed network and require | |||
| off-link operations. Thus, the relevant peers might be immediate | off-link operations. Thus, the relevant peers might be immediate | |||
| neighbors on the same layer 2 link, or they might be more distant and | neighbors on the same layer 2 link, or they might be more distant and | |||
| only accessible via layer 3. The mechanism must therefore provide both | only accessible via layer 3. The mechanism must therefore provide both | |||
| on-link and off-link discovery of ASAs supporting specific technical | on-link and off-link discovery of ASAs supporting specific technical | |||
| objectives.</t> | objectives.</li> | |||
| <li> | ||||
| <t>D7. The discovery process should be flexible enough to allow for | <t>The discovery process should be flexible enough to allow for | |||
| special cases, such as the following: | special cases, such as the following: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>During initialization, a device must be able to establish mutual trus | <li>During initialization, a device must be able to establish mutual t | |||
| t | rust | |||
| with autonomic nodes elsewhere in the network and participate in an | with autonomic nodes elsewhere in the network and participate in an | |||
| authentication mechanism. Although | authentication mechanism. Although | |||
| this will inevitably start with a discovery action, it is a special case | this will inevitably start with a discovery action, it is a special case | |||
| precisely because trust is not yet established. This topic | precisely because trust is not yet established. This topic | |||
| is the subject of <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/> . | is the subject of <xref target="RFC8995" format="default"/>. | |||
| We require that once trust has been established for a device, | We require that once trust has been established for a device, | |||
| all ASAs within the device inherit the device's credentials and are also trusted. | all ASAs within the device inherit the device's credentials and are also trusted. | |||
| This does not preclude the device having multiple credentials.</t> | This does not preclude the device having multiple credentials.</li> | |||
| <t> | <li> | |||
| Depending on the type of network involved, discovery of other | Depending on the type of network involved, discovery of other | |||
| central functions might be needed, such as | central functions might be needed, such as | |||
| the Network Operations Center (NOC) <xref target="I-D.ietf-anima-stable- connectivity"/>. | the Network Operations Center (NOC) <xref target="RFC8368" format="defau lt"/>. | |||
| The protocol must be capable of supporting such discovery during initial ization, | The protocol must be capable of supporting such discovery during initial ization, | |||
| as well as discovery during ongoing operation.</t> | as well as discovery during ongoing operation.</li> | |||
| </list></t> | </ul> | |||
| <t>D8. The discovery process must not generate excessive traffic and | </li> | |||
| must take account of sleeping nodes. </t> | <li>The discovery process must not generate excessive traffic and | |||
| <t>D9. There must be a mechanism for handling stale discovery results.</ | must take account of sleeping nodes. </li> | |||
| t> | <li>There must be a mechanism for handling stale discovery results.</li> | |||
| </ol> | ||||
| </section> | </section> | |||
| <section anchor="synchreq" numbered="true" toc="default"> | ||||
| <section anchor="synchreq" title="Requirements for Synchronization and Neg | <name>Requirements for Synchronization and Negotiation Capability</name> | |||
| otiation Capability"> | <t>Autonomic Networks need to be able to manage many | |||
| <!--<t>As background, consider the example of routing protocols, the clo | different types of parameters and consider many dimensions, | |||
| sest | ||||
| approximation to autonomic networking already in widespread use. Routing | ||||
| protocols use a largely autonomic model based on distributed devices | ||||
| that communicate repeatedly with each other. The focus | ||||
| is reachability, so routing protocols primarily consider simple | ||||
| link status and metrics, and an underlying assumption is that | ||||
| nodes need a consistent, although partial, view of the network topology | ||||
| in order for the routing algorithm to converge. Also, routing is | ||||
| mainly based on simple information synchronization between peers, | ||||
| rather than on bi-directional negotiation.</t>--> | ||||
| <t>Autonomic networks need to be able to manage many | ||||
| different types of parameter and consider many dimensions, | ||||
| such as latency, load, unused or limited resources, | such as latency, load, unused or limited resources, | |||
| conflicting resource requests, | conflicting resource requests, | |||
| security settings, power saving, load balancing, etc. | security settings, power saving, load balancing, etc. | |||
| Status information and resource metrics need to be shared between | Status information and resource metrics need to be shared between | |||
| nodes for dynamic adjustment of resources and for monitoring purposes. | nodes for dynamic adjustment of resources and for monitoring purposes. | |||
| While this might be achieved by existing protocols when they are | While this might be achieved by existing protocols when they are | |||
| available, the new protocol needs to be able to support parameter | available, the new protocol needs to be able to support parameter | |||
| exchange, including mutual synchronization, even when no negotiation | exchange, including mutual synchronization, even when no negotiation | |||
| as such is required. In general, these parameters do not apply to all | as such is required. In general, these parameters do not apply to all | |||
| participating nodes, but only to a subset. </t> | participating nodes, but only to a subset. </t> | |||
| <ol type="SN%d." indent="6"> | ||||
| <t>SN1. A basic requirement for the protocol is therefore the | <li>A basic requirement for the protocol is therefore the | |||
| ability to represent, discover, synchronize and negotiate almost any | ability to represent, discover, synchronize, and negotiate almost any | |||
| kind of network parameter among selected subsets of participating nodes. | kind of network parameter among selected subsets of participating nodes. | |||
| </t> | </li> | |||
| <li>Negotiation is an iterative request/response process that must be gu | ||||
| <t>SN2. Negotiation is an iterative request/response process that must b | aranteed to terminate | |||
| e guaranteed to terminate | ||||
| (with success or failure). While tie-breaking rules must be defined spec ifically | (with success or failure). While tie-breaking rules must be defined spec ifically | |||
| for each use case, the protocol should have some general mechanisms in s upport of loop | for each use case, the protocol should have some general mechanisms in s upport of loop | |||
| and deadlock prevention, such as hop count limits or timeouts.</t> | and deadlock prevention, such as hop-count limits or timeouts.</li> | |||
| <li>Synchronization must be possible for groups of nodes ranging from sm | ||||
| <t>SN3. Synchronization must be possible for groups of nodes ranging fro | all to very large. | |||
| m small to very large. | </li> | |||
| </t> | <li>To avoid "reinventing the wheel", the protocol should be able to enc | |||
| apsulate the | ||||
| <t>SN4. To avoid "reinventing the wheel", the protocol should be able to | data formats used by existing configuration protocols (such as Network C | |||
| encapsulate the | onfiguration Protocol (NETCONF) and YANG) | |||
| data formats used by existing configuration protocols (such as NETCONF/Y | in cases where that is convenient.</li> | |||
| ANG) | <li>Human intervention in complex situations is costly and error prone. | |||
| in cases where that is convenient.</t> | ||||
| <t>SN5. Human intervention in complex situations is costly and error-pro | ||||
| ne. | ||||
| Therefore, synchronization or negotiation of parameters without human | Therefore, synchronization or negotiation of parameters without human | |||
| intervention is desirable whenever the coordination of multiple devices can improve | intervention is desirable whenever the coordination of multiple devices can improve | |||
| overall network performance. It follows that the protocol's resource req uirements | overall network performance. It follows that the protocol's resource req uirements | |||
| must be small enough to fit in any device that would otherwise need huma n intervention. | must be small enough to fit in any device that would otherwise need huma n intervention. | |||
| The issue of running in constrained nodes | The issue of running in constrained nodes | |||
| is discussed in <xref target="I-D.ietf-anima-reference-model"/>.</t> | is discussed in <xref target="RFC8993" format="default"/>.</li> | |||
| <li>Human intervention in large networks is often replaced by use of a | ||||
| <t>SN6. Human intervention in large networks is often replaced by use of | ||||
| a | ||||
| top-down network management system (NMS). It therefore follows that | top-down network management system (NMS). It therefore follows that | |||
| the protocol, as part of the Autonomic Networking Infrastructure, should | the protocol, as part of the Autonomic Networking Infrastructure, should | |||
| be capable of running in any device that would otherwise be managed by | be capable of running in any device that would otherwise be managed by | |||
| an NMS, and that it can co-exist with an NMS, and with protocols | an NMS, and that it can coexist with an NMS and with protocols | |||
| such as SNMP and NETCONF.</t> | such as SNMP and NETCONF.</li> | |||
| <li><t>Specific autonomic features are expected to be implemented by ind | ||||
| <t>SN7. Specific autonomic features are expected to be implemented by in | ividual ASAs, | |||
| dividual ASAs, | ||||
| but the protocol must be general enough to allow them. Some examples fol low: | but the protocol must be general enough to allow them. Some examples fol low: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>Dependencies and conflicts: In order to | <li>Dependencies and conflicts: In order to | |||
| decide upon a configuration for a given device, the device may need | decide upon a configuration for a given device, the device may need | |||
| information from neighbors. This can be established through the | information from neighbors. This can be established through the | |||
| negotiation procedure, or through synchronization if that | negotiation procedure, or through synchronization if that | |||
| is sufficient. However, a given item in a neighbor | is sufficient. However, a given item in a neighbor | |||
| may depend on other information from its own neighbors, which may | may depend on other information from its own neighbors, which may | |||
| need another negotiation or synchronization procedure to obtain or dec ide. | need another negotiation or synchronization procedure to obtain or dec ide. | |||
| Therefore, there are potential dependencies and conflicts among negoti ation or synchronization | Therefore, there are potential dependencies and conflicts among negoti ation or synchronization | |||
| procedures. Resolving dependencies and conflicts is a matter for the i ndividual ASAs involved. | procedures. Resolving dependencies and conflicts is a matter for the i ndividual ASAs involved. | |||
| To allow this, there need to be clear boundaries and convergence | To allow this, there need to be clear boundaries and convergence | |||
| mechanisms for negotiations. Also some mechanisms are needed to avoid | mechanisms for negotiations. Also some mechanisms are needed to avoid | |||
| loop dependencies or uncontrolled growth in a tree of dependencies. | loop dependencies or uncontrolled growth in a tree of dependencies. | |||
| It is the ASA designer's responsibility | It is the ASA designer's responsibility | |||
| to avoid or detect looping dependencies or excessive growth of depende ncy trees. | to avoid or detect looping dependencies or excessive growth of depende ncy trees. | |||
| The protocol's role is limited to bilateral signaling between ASAs, | The protocol's role is limited to bilateral signaling between ASAs | |||
| and the avoidance of loops during bilateral signaling.</t> | and the avoidance of loops during bilateral signaling.</li> | |||
| <li>Recovery from faults and identification of faulty devices should b | ||||
| <t>Recovery from faults and identification of faulty devices should be | e | |||
| as automatic as possible. The protocol's role is limited to discovery, | as automatic as possible. The protocol's role is limited to discovery, | |||
| synchronization and | synchronization, and | |||
| negotiation. These processes can occur at any time, and an ASA may | negotiation. These processes can occur at any time, and an ASA may | |||
| need to repeat any of these steps when the ASA detects an event | need to repeat any of these steps when the ASA detects an event | |||
| such as a negotiation counterpart failing.</t> | such as a negotiation counterpart failing.</li> | |||
| <li>Since a major goal is to minimize human intervention, it is necess | ||||
| <t>Since a major goal is to minimize human intervention, it is necessa | ary that the | |||
| ry that the | ||||
| network can in effect "think ahead" before changing its parameters. On e aspect | network can in effect "think ahead" before changing its parameters. On e aspect | |||
| of this is an ASA that relies on a knowledge base to predict network b ehavior. | of this is an ASA that relies on a knowledge base to predict network b ehavior. | |||
| This is out of scope for the signaling protocol. However, another aspe ct is | This is out of scope for the signaling protocol. However, another aspe ct is | |||
| forecasting the effect of a change by a "dry run" negotiation before a ctually | forecasting the effect of a change by a "dry run" negotiation before a ctually | |||
| installing the change. Signaling a dry run is therefore a desirable fe ature | installing the change. Signaling a dry run is therefore a desirable fe ature | |||
| of the protocol. </t> | of the protocol. </li> | |||
| </list></t> | </ul> | |||
| <t>Note that management logging, monitoring, alerts, and tools for inter | ||||
| <t>Note that management logging, monitoring, alerts and tools for inte | vention are required. | |||
| rvention are required. | ||||
| However, these can only be features of individual ASAs, not of the pro tocol itself. | However, these can only be features of individual ASAs, not of the pro tocol itself. | |||
| Another document <xref target="I-D.ietf-anima-stable-connectivity"/> d | Another document <xref target="RFC8368" format="default"/> discusses h | |||
| iscusses how | ow | |||
| such agents may be linked into conventional OAM systems via an Autonom | such agents may be linked into conventional Operations, Administration | |||
| ic Control Plane | , and Maintenance (OAM) systems via an Autonomic Control Plane | |||
| <xref target="I-D.ietf-anima-autonomic-control-plane"/>. </t> | <xref target="RFC8994" format="default"/>. </t> | |||
| </li> | ||||
| <t>SN8. The protocol will be able to deal with a wide variety of | <li>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 format for | Therefore the protocol will need a flexible and easily extensible format for | |||
| describing objectives. At a later stage it may be desirable to adopt an explicit | describing objectives. At a later stage, it may be desirable to adopt an explicit | |||
| information model. One consideration is whether to adopt an existing | information model. One consideration is whether to adopt an existing | |||
| information model or to design a new one. </t> | information model or to design a new one. </li> | |||
| </ol> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Specific Technical Requirements"> | <name>Specific Technical Requirements</name> | |||
| <ol type="T%d." indent="6"> | ||||
| <t>T1. It should be convenient for ASA designers to define new technical | <li>It should be convenient for ASA designers to define new technical ob | |||
| objectives | jectives | |||
| and for programmers to express them, without excessive impact on | and for programmers to express them, without excessive impact on | |||
| run-time efficiency and footprint. In particular, it should be convenien | runtime efficiency and footprint. In particular, it should be convenient | |||
| t for ASAs | for ASAs | |||
| to be implemented independently of each other as user space programs rat | to be implemented independently of each other as user-space programs rat | |||
| her than as kernel | her than as kernel | |||
| code, where such a programming model is possible. The classes of device in which the protocol | code, where such a programming model is possible. The classes of device in which the protocol | |||
| might run is discussed in <xref target="I-D.ietf-anima-reference-model"/ | might run is discussed in <xref target="RFC8993" format="default"/>. | |||
| >. | </li> | |||
| </t> | <li>The protocol should be easily extensible in case the initially defin | |||
| ed discovery, | ||||
| <t>T2. The protocol should be easily extensible in case the initially de | synchronization, and negotiation mechanisms prove to be insufficient. </ | |||
| fined discovery, | li> | |||
| synchronization and negotiation mechanisms prove to be insufficient. </t | <li>To be a generic platform, the protocol payload format should be | |||
| > | ||||
| <t>T3. To be a generic platform, the protocol payload format should be | ||||
| independent of the transport protocol or IP version. | independent of the transport protocol or IP version. | |||
| In particular, it should be able to run over IPv6 or IPv4. | In particular, it should be able to run over IPv6 or IPv4. | |||
| However, some functions, such as multicasting on | However, some functions, such as multicasting on | |||
| a link, might need to be IP version dependent. By default, IPv6 should | a link, might need to be IP version dependent. By default, IPv6 should | |||
| be preferred.</t> | be preferred.</li> | |||
| <li>The protocol must be able to access off-link counterparts via routab | ||||
| <t>T4. The protocol must be able to access off-link counterparts via rou | le addresses, | |||
| table addresses, | i.e., must not be restricted to link-local operation.</li> | |||
| i.e., must not be restricted to link-local operation.</t> | <li>It must also be possible for an external discovery mechanism | |||
| <t>T5. It must also be possible for an external discovery mechanism | ||||
| to be used, if appropriate for a given technical objective. In other wor ds, GRASP discovery | to be used, if appropriate for a given technical objective. In other wor ds, GRASP discovery | |||
| must not be a prerequisite for GRASP negotiation or synchronization. </t | must not be a prerequisite for GRASP negotiation or synchronization. </l | |||
| > | i> | |||
| <li>The protocol must be capable of distinguishing multiple simultaneous | ||||
| <t>T6. The protocol must be capable of distinguishing multiple simultane | operations with one or more peers, especially when wait states occur.</l | |||
| ous | i> | |||
| operations with one or more peers, especially when wait states occur.</t | <li>Intent: Although the distribution of Intent is out of scope | |||
| > | ||||
| <t>T7. Intent: Although the distribution of Intent is out of scope | ||||
| for this document, the protocol must not by design exclude its | for this document, the protocol must not by design exclude its | |||
| use for Intent distribution. </t> | use for Intent distribution. </li> | |||
| <li>Management monitoring, alerts, and intervention: | ||||
| <t>T8. Management monitoring, alerts and intervention: | ||||
| Devices should be able to report to a monitoring | Devices should be able to report to a monitoring | |||
| system. Some events must be able to generate operator alerts and | system. Some events must be able to generate operator alerts, and | |||
| some provision for emergency intervention must be possible (e.g. | some provision for emergency intervention must be possible (e.g., | |||
| to freeze synchronization or negotiation in a mis-behaving device). Thes | to freeze synchronization or negotiation in a misbehaving device). These | |||
| e features | features | |||
| might not use the signaling protocol itself, but its design should not e | might not use the signaling protocol itself, but its design should not e | |||
| xclude such use.</t> | xclude such use.</li> | |||
| <li>Because this protocol may directly cause changes to device configura | ||||
| <t>T9. Because this protocol may directly cause changes to device config | tions | |||
| urations | ||||
| and have significant impacts on a running network, all protocol exchange s need to be | and have significant impacts on a running network, all protocol exchange s need to be | |||
| fully secured against forged messages and man-in-the middle attacks, and | fully secured against forged messages and man-in-the-middle attacks, and | |||
| secured | secured | |||
| as much as reasonably possible against denial of service attacks. There | as much as reasonably possible against denial-of-service attacks. There | |||
| must also | must also | |||
| be an encryption mechanism to resist unwanted monitoring. However, it is not required | be an encryption mechanism to resist unwanted monitoring. However, it is not required | |||
| that the protocol itself provides these security features; it may depend on an existing | that the protocol itself provides these security features; it may depend on an existing | |||
| secure environment. </t> | secure environment. </li> | |||
| </ol> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <!-- reqts --> | <section anchor="current" numbered="true" toc="default"> | |||
| <name>Capability Analysis of Current Protocols</name> | ||||
| <section anchor="current" title="Capability Analysis of Current Protocols"> | ||||
| <t>This appendix discusses various existing protocols with properties | <t>This appendix discusses various existing protocols with properties | |||
| related to the requirements described in <xref target="reqts"/>. The | related to the requirements described in <xref target="reqts" format="defa ult"/>. The | |||
| purpose is to evaluate whether any existing protocol, or a simple | purpose is to evaluate whether any existing protocol, or a simple | |||
| combination of existing protocols, can meet those requirements.</t> | combination of existing protocols, can meet those requirements.</t> | |||
| <t>Numerous protocols include some form of discovery, but these all appear to be very | <t>Numerous protocols include some form of discovery, but these all appear to be very | |||
| specific in their applicability. Service Location Protocol (SLP) | specific in their applicability. Service Location Protocol (SLP) | |||
| <xref target="RFC2608"/> provides service discovery for managed networks, | <xref target="RFC2608" format="default"/> provides service discovery for m | |||
| but requires configuration of its own servers. DNS-SD <xref target="RFC676 | anaged networks, | |||
| 3"/> | but it requires configuration of its own servers. DNS-Based Service Discov | |||
| combined with mDNS <xref target="RFC6762"/> provides service discovery for | ery (DNS-SD) <xref target="RFC6763" format="default"/> | |||
| small networks with a single link layer. <xref target="RFC7558"/> | combined with Multicast DNS (mDNS) <xref target="RFC6762" format="default" | |||
| aims to extend this to larger autonomous networks but this is not yet | /> provides service discovery for | |||
| small networks with a single link layer. <xref target="RFC7558" format="de | ||||
| fault"/> | ||||
| aims to extend this to larger autonomous networks, but this is not yet | ||||
| standardized. However, both SLP and DNS-SD appear to | standardized. However, both SLP and DNS-SD appear to | |||
| target primarily application layer services, not the layer 2 and 3 objecti ves | target primarily application-layer services, not the layer 2 and 3 objecti ves | |||
| relevant to basic network configuration. Both SLP and DNS-SD are text-base d protocols. </t> | relevant to basic network configuration. Both SLP and DNS-SD are text-base d protocols. </t> | |||
| <!-- <t>Routing protocols are mainly one-way information announcements. Th | <t>Simple Network Management Protocol (SNMP) <xref target="RFC3416" format | |||
| e | ="default"/> uses | |||
| receiver makes independent decisions based on the received information | a command/response model not well suited for peer negotiation. | |||
| and there is no direct feedback information to the announcing peer. This | NETCONF <xref target="RFC6241" format="default"/> uses an RPC model that d | |||
| remains true even though the protocol is used in both directions between | oes allow positive or | |||
| peer routers; there is state synchronization, but no negotiation, and | ||||
| each peer runs its route calculations independently.</t>--> | ||||
| <t>Simple Network Management Protocol (SNMP) <xref target="RFC3416"/> uses | ||||
| a command/response model not well suited for peer negotiation. Network Con | ||||
| figuration | ||||
| Protocol (NETCONF) <xref target="RFC6241"/> uses an RPC model that does al | ||||
| low positive or | ||||
| negative responses from the target system, but this is still not | negative responses from the target system, but this is still not | |||
| adequate for negotiation.</t> | adequate for negotiation.</t> | |||
| <t>There are various existing protocols that have elementary negotiation | <t>There are various existing protocols that have elementary negotiation | |||
| abilities, such as Dynamic Host Configuration Protocol for IPv6 (DHCPv6) | abilities, such as Dynamic Host Configuration Protocol for IPv6 (DHCPv6) | |||
| <xref target="RFC3315"/>, Neighbor Discovery (ND) <xref target="RFC4861"/> | <xref target="RFC8415" format="default"/>, Neighbor Discovery (ND) <xref t | |||
| , | arget="RFC4861" format="default"/>, | |||
| Port Control Protocol (PCP) <xref target="RFC6887"/>, Remote Authenticatio | Port Control Protocol (PCP) <xref target="RFC6887" format="default"/>, Rem | |||
| n | ote Authentication | |||
| Dial In User Service (RADIUS) <xref target="RFC2865"/>, Diameter <xref tar | Dial-In User Service (RADIUS) <xref target="RFC2865" format="default"/>, D | |||
| get="RFC6733"/>, | iameter <xref target="RFC6733" format="default"/>, | |||
| etc. Most of them are configuration or | etc. Most of them are configuration or | |||
| management protocols. However, they either provide only a simple | management protocols. However, they either provide only a simple | |||
| request/response model in a master/slave context or very limited | request/response model in a master/slave context or very limited | |||
| negotiation abilities.</t> | negotiation abilities.</t> | |||
| <t>There are some signaling protocols with an element of negotiation. | <t>There are some signaling protocols with an element of negotiation. | |||
| For example Resource ReSerVation Protocol (RSVP) <xref target="RFC2205"/> | For example, Resource ReSerVation Protocol (RSVP) <xref target="RFC2205" f | |||
| was designed for negotiating quality of service | ormat="default"/> | |||
| was designed for negotiating quality-of-service | ||||
| parameters along the path of a unicast or multicast flow. RSVP is a very | parameters along the path of a unicast or multicast flow. RSVP is a very | |||
| specialised protocol aimed at end-to-end flows. <!--However, it has some | specialized protocol aimed at end-to-end flows. | |||
| flexibility, having been adapted for MPLS label distribution (RSVP-TE, <xr | ||||
| ef target="RFC3209"/>).--> | ||||
| A more generic design is General Internet | A more generic design is General Internet | |||
| Signalling Transport (GIST) <xref target="RFC5971"/>, but it is | Signalling Transport (GIST) <xref target="RFC5971" format="default"/>; how | |||
| complex, tries to solve many problems, and is also aimed at per-flow | ever, it | |||
| tries to solve many problems, making it complex, and is also aimed at per- | ||||
| flow | ||||
| signaling across many hops rather than at device-to-device signaling. | signaling across many hops rather than at device-to-device signaling. | |||
| However, we cannot completely exclude extended RSVP or GIST as a | However, we cannot completely exclude extended RSVP or GIST as a | |||
| synchronization and negotiation protocol. They do not appear to be | synchronization and negotiation protocol. They do not appear to be | |||
| directly useable for peer discovery.</t> | directly usable for peer discovery.</t> | |||
| <t>RESTCONF <xref target="RFC8040" format="default"/> is a protocol intend | ||||
| <t>RESTCONF <xref target="RFC8040"/> is a protocol intended to | ed to | |||
| convey NETCONF information expressed in the YANG language via HTTP, | convey NETCONF information expressed in the YANG language via HTTP, | |||
| including the ability to transit HTML intermediaries. While this is a | including the ability to transit HTML intermediaries. While this is a | |||
| powerful approach in the context of centralised configuration of a | powerful approach in the context of centralized configuration of a | |||
| complex network, it is not well adapted to efficient interactive | complex network, it is not well adapted to efficient interactive | |||
| negotiation between peer devices, especially simple ones that might | negotiation between peer devices, especially simple ones that might | |||
| not include YANG processing already.</t> | not include YANG processing already.</t> | |||
| <t>The Distributed Node Consensus Protocol (DNCP) | <t>The Distributed Node Consensus Protocol (DNCP) | |||
| <xref target="RFC7787"/> is defined as a generic form | <xref target="RFC7787" format="default"/> is defined as a generic form | |||
| of state synchronization protocol, with a proposed usage profile being the | of a state synchronization protocol, with a proposed usage profile being t | |||
| Home Networking Control Protocol (HNCP) <xref target="RFC7788"/> | he | |||
| for configuring Homenet routers. A specific application of DNCP for autono | Home Networking Control Protocol (HNCP) <xref target="RFC7788" format="def | |||
| mic | ault"/> | |||
| networking was proposed in <xref target="I-D.stenberg-anima-adncp"/>. | for configuring Homenet routers. A specific application of DNCP for Autono | |||
| </t> | mic | |||
| <t>DNCP "is designed to provide a way for each participating node to | Networking was proposed in <xref target="I-D.stenberg-anima-adncp" format= | |||
| publish a set of TLV (Type-Length-Value) tuples, and to provide a | "default"/>. | |||
| shared and common view about the data published... DNCP is most suitabl | According to <xref target="RFC7787" format="default"/>:</t> | |||
| e | ||||
| for data that changes only infrequently... If constant rapid | <blockquote><t>DNCP is designed to provide a way for each participating no | |||
| de 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...</t> | ||||
| <t>DNCP is most suitable | ||||
| for data that changes only infrequently...</t> | ||||
| <t>If constant rapid | ||||
| state changes are needed, the preferable choice is to use an | state changes are needed, the preferable choice is to use an | |||
| additional point-to-point channel..."</t> | additional point-to-point channel...</t></blockquote> | |||
| <t>Specific features of DNCP include: | <t>Specific features of DNCP include: | |||
| <list style="symbols"> | </t> | |||
| <t>Every participating node has a unique node identifier.</t> | <ul spacing="normal"> | |||
| <li>Every participating node has a unique node identifier.</li> | ||||
| <t>DNCP messages are encoded as a sequence of TLV objects, sent over | <li>DNCP messages are encoded as a sequence of TLV objects and sent over | |||
| unicast UDP or TCP, with or without (D)TLS security.</t> | unicast UDP or TCP, with or without (D)TLS security.</li> | |||
| <li>Multicast is used only for discovery of DNCP neighbors | ||||
| <t>Multicast is used only for discovery of DNCP neighbors | when lower security is acceptable.</li> | |||
| when lower security is acceptable.</t> | <li>Synchronization of state is maintained by a flooding process using t | |||
| he Trickle algorithm. | ||||
| <t>Synchronization of state is maintained by a flooding process using | There is no bilateral synchronization or negotiation capability.</li> | |||
| the Trickle algorithm. | <li>The HNCP profile of DNCP is designed to operate between directly con | |||
| There is no bilateral synchronization or negotiation capability.</t> | nected neighbors | |||
| on a shared link using UDP and link-local IPv6 addresses.</li> | ||||
| <t>The HNCP profile of DNCP is designed to operate between directly co | </ul> | |||
| nnected neighbors | <t> | |||
| on a shared link using UDP and link-local IPv6 addresses.</t> | DNCP does not meet the needs of a general negotiation protocol because it | |||
| </list> | is designed | |||
| DNCP does not meet the needs of a general negotiation protocol, because it | specifically for flooding synchronization. Also, in its HNCP profile, it i | |||
| is designed | s limited to link-local | |||
| specifically for flooding synchronization. Also, in its HNCP profile it is | messages and to IPv6. However, at the minimum, it is a | |||
| limited to link-local | ||||
| messages and to IPv6. However, at the minimum it is a | ||||
| very interesting test case for this style of interaction between devices | very interesting test case for this style of interaction between devices | |||
| without needing a central authority, and it is a proven method of network- wide state | without needing a central authority, and it is a proven method of network- wide state | |||
| synchronization by flooding.</t> | synchronization by flooding.</t> | |||
| <t>The Server Cache Synchronization Protocol (SCSP) <xref target="RFC2334" | ||||
| <t>The Server Cache Synchronization Protocol (SCSP) <xref target="RFC2334" | format="default"/> also describes | |||
| /> also describes | ||||
| a method for cache synchronization and cache replication among a group of nodes.</t> | a method for cache synchronization and cache replication among a group of nodes.</t> | |||
| <t>A proposal was made some years ago for an IP based Generic Control Prot ocol | <t>A proposal was made some years ago for an IP based Generic Control Prot ocol | |||
| (IGCP) <xref target="I-D.chaparadza-intarea-igcp"/>. This was aimed | (IGCP) <xref target="I-D.chaparadza-intarea-igcp" format="default"/>. This was aimed | |||
| at information exchange and negotiation but not directly at peer | at information exchange and negotiation but not directly at peer | |||
| discovery. However, it has many points in common with the present work.</t > | discovery. However, it has many points in common with the present work.</t > | |||
| <t>None of the above solutions appears to completely meet the needs of | <t>None of the above solutions appears to completely meet the needs of | |||
| generic discovery, state synchronization and negotiation in a single solut ion. | generic discovery, state synchronization, and negotiation in a single solu tion. | |||
| Many of the protocols assume that they are working in a traditional | Many of the protocols assume that they are working in a traditional | |||
| top-down or north-south scenario, rather than a fluid peer-to-peer | top-down or north-south scenario, rather than a fluid peer-to-peer | |||
| scenario. Most of them are specialized in one way or another. As a result, | scenario. Most of them are specialized in one way or another. As a result, | |||
| we have not identified a combination of existing protocols that meets the | we have not identified a combination of existing protocols that meets the | |||
| requirements in <xref target="reqts"/>. Also, we have not identified a pat h | requirements in <xref target="reqts" format="default"/>. Also, we have not identified a path | |||
| by which one of the existing protocols could be extended to meet the | by which one of the existing protocols could be extended to meet the | |||
| requirements. | requirements. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <!-- current --> | <section anchor="ack" numbered="false" toc="default"> | |||
| <name>Acknowledgments</name> | ||||
| <t>A major contribution to the original draft version of this document was | ||||
| made by <contact fullname="Sheng Jiang"/>, | ||||
| and significant contributions were made by <contact fullname="Toerless Eck | ||||
| ert"/>. | ||||
| Significant early review inputs were received from | ||||
| <contact fullname="Joel Halpern"/>, <contact fullname="Barry Leiba"/>, | ||||
| <contact fullname="Charles E. Perkins"/>, and <contact fullname="Michael R | ||||
| ichardson"/>. | ||||
| <contact fullname="William Atwood"/> provided important assistance in | ||||
| debugging a prototype implementation.</t> | ||||
| <t>Valuable comments were received from | ||||
| <contact fullname="Michael Behringer"/>, | ||||
| <contact fullname="Jéferson Campos Nobre"/>, | ||||
| <contact fullname="Laurent Ciavaglia"/>, | ||||
| <contact fullname="Zongpeng Du"/>, | ||||
| <contact fullname="Yu Fu"/>, | ||||
| <contact fullname="Joel Jaeggli"/>, | ||||
| <contact fullname="Zhenbin Li"/>, | ||||
| <contact fullname="Dimitri Papadimitriou"/>, | ||||
| <contact fullname="Pierre Peloso"/>, | ||||
| <contact fullname="Reshad Rahman"/>, | ||||
| <contact fullname="Markus Stenberg"/>, | ||||
| <contact fullname="Martin Stiemerling"/>, | ||||
| <contact fullname="Rene Struik"/>, | ||||
| <contact fullname="Martin Thomson"/>, | ||||
| <contact fullname="Dacheng Zhang"/>, | ||||
| and participants in the Network Management Research Group, | ||||
| the ANIMA Working Group, | ||||
| and the IESG.</t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 518 change blocks. | ||||
| 3239 lines changed or deleted | 2347 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/ | ||||