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/ |