rfc8990v4.xml | rfc8990.xml | |||
---|---|---|---|---|
skipping to change at line 1183 ¶ | skipping to change at line 1183 ¶ | |||
<xref target="RFC8949" format="default"/>. In this specification, they are described | <xref target="RFC8949" format="default"/>. In this specification, they are described | |||
using Concise Data Definition Language (CDDL) | using Concise Data Definition Language (CDDL) | |||
<xref target="RFC8610" format="default"/>. | <xref target="RFC8610" format="default"/>. | |||
Fragmentary CDDL is used to describe each item in this section. A complete and normative | Fragmentary CDDL is used to describe each item in this section. A complete and normative | |||
CDDL specification of GRASP is given in <xref target="cddl" format="default"/>, including constants such | CDDL specification of GRASP is given in <xref target="cddl" format="default"/>, including constants such | |||
as message types. | as message types. | |||
</t> | </t> | |||
<t>Every GRASP message, except the No Operation message, carries a Session ID (<xref target="SessionID" format="default"/>). | <t>Every GRASP message, except the No Operation message, carries a Session ID (<xref target="SessionID" format="default"/>). | |||
Options are then presented serially.</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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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 = 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 | |||
]]></artwork> | ]]></sourcecode> | |||
<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 with | the expected options. Any options received that are not consistent with | |||
the MESSAGE_TYPE <bcp14>SHOULD</bcp14> 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" format="default"/>.</t> | <t>The No Operation (noop) message is described in <xref target="noop" format="default"/>.</t> | |||
<t>The various MESSAGE_TYPE values are defined in <xref target="cddl" format="default"/>.</t> | <t>The various MESSAGE_TYPE values are defined in <xref target="cddl" format="default"/>.</t> | |||
<t>All other message elements are described below and formally defined in <xref target="cddl" format="default"/>.</t> | <t>All other message elements are described below and formally defined in <xref target="cddl" format="default"/>.</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" format="default"/>) <bcp14>MAY</bcp14> be returned. Otherwise, the message | an Invalid message (<xref target="invalid" format="default"/>) <bcp14>MAY</bcp14> be returned. Otherwise, the message | |||
<bcp14>MAY</bcp14> be logged and <bcp14>MUST</bcp14> be discarded. If an unrecognized MESSAGE_TYPE is received | <bcp14>MAY</bcp14> be logged and <bcp14>MUST</bcp14> be discarded. If an unrecognized MESSAGE_TYPE is received | |||
skipping to change at line 1220 ¶ | skipping to change at line 1220 ¶ | |||
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 the 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) depends on the link-layer | <t>The maximum size of multicast messages (M_DISCOVERY and M_FLOOD) depends on the link-layer | |||
technology or the link-adaptation layer in use.</t> | technology or the link-adaptation layer in use.</t> | |||
</section> | </section> | |||
<section anchor="DiscoveryMessage" numbered="true" toc="default"> | <section anchor="DiscoveryMessage" numbered="true" toc="default"> | |||
<name>Discovery Message</name> | <name>Discovery Message</name> | |||
<t>In fragmentary CDDL, a Discovery message follows the pattern:</t> | <t>In fragmentary CDDL, a Discovery message follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
discovery-message = [M_DISCOVERY, session-id, initiator, objective] | discovery-message = [M_DISCOVERY, session-id, initiator, objective] | |||
]]></artwork> | ]]></sourcecode> | |||
<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 interface in use by GRASP. | ALL_GRASP_NEIGHBORS multicast address on each link-layer interface in use by GRASP. | |||
skipping to change at line 1286 ¶ | skipping to change at line 1286 ¶ | |||
loops (default value is GRASP_DEF_LOOPCT).</li> | loops (default value is GRASP_DEF_LOOPCT).</li> | |||
</ul> | </ul> | |||
<t>As mentioned in <xref target="discovw" format="default"/>, a Discovery message <bcp14>MAY</bcp14> be sent unicast to a peer node, | <t>As mentioned in <xref target="discovw" format="default"/>, a Discovery message <bcp14>MAY</bcp14> be sent unicast to a peer node, | |||
which <bcp14>SHOULD</bcp14> then proceed exactly as if the message had been multicast. | which <bcp14>SHOULD</bcp14> then proceed exactly as if the message had been multicast. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="ResponseMessage" numbered="true" toc="default"> | <section anchor="ResponseMessage" numbered="true" toc="default"> | |||
<name>Discovery Response Message</name> | <name>Discovery Response Message</name> | |||
<t>In fragmentary CDDL, a Discovery Response message follows the pattern:</t> | <t>In fragmentary CDDL, a Discovery Response message follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<t> | <t> | |||
A node that receives a Discovery message <bcp14>SHOULD</bcp14> 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 discovery. | Discovery Response message if and only if it can respond to the discovery. | |||
</t> | </t> | |||
<ul spacing="normal" empty="true"> | <ul spacing="normal" empty="true"> | |||
<li>It <bcp14>MUST</bcp14> contain the same Session ID and initiator as the Discovery message. | <li>It <bcp14>MUST</bcp14> contain the same Session ID and initiator as the Discovery message. | |||
</li> | </li> | |||
<li>It <bcp14>MUST</bcp14> contain a time-to-live (ttl) for the validity of the response, given | <li>It <bcp14>MUST</bcp14> contain a time-to-live (ttl) for the validity of the response, given | |||
as a positive integer value in milliseconds. Zero implies a value significantly | as a positive integer value in milliseconds. Zero implies a value significantly | |||
skipping to change at line 1343 ¶ | skipping to change at line 1343 ¶ | |||
option or a combination of multiple kinds of locator | option or a combination of multiple kinds of locator | |||
options that 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" format="default"/>.</t> | <xref target="discmech" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="RequestMessage" numbered="true" toc="default"> | <section anchor="RequestMessage" numbered="true" toc="default"> | |||
<name>Request Messages</name> | <name>Request Messages</name> | |||
<t>In fragmentary CDDL, Request Negotiation and Request Synchronization messages follow the patterns:</t> | <t>In fragmentary CDDL, Request Negotiation and Request Synchronization messages follow the patterns:</t> | |||
<artwork><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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] | |||
]]></artwork> | ]]></sourcecode> | |||
<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 negotiation or | sends the appropriate Request message to the unicast address of the negotiation or | |||
synchronization counterpart, using the appropriate protocol and port numbers | synchronization counterpart, using the appropriate protocol and port numbers | |||
(selected from the discovery result). If the discovery result is an FQDN, | (selected from the discovery result). If the discovery result is an FQDN, | |||
it will be resolved first.</t> | it will be resolved first.</t> | |||
<t>A Request message <bcp14>MUST</bcp14> include the relevant objective option. In the case of | <t>A Request message <bcp14>MUST</bcp14> include the relevant objective option. In the case of | |||
Request Negotiation, the objective option <bcp14>MUST</bcp14> include the requested value. </t> | Request Negotiation, the objective option <bcp14>MUST</bcp14> include the requested value. </t> | |||
<t>When an initiator sends a Request Negotiation message, it <bcp14>MUST</bcp14> initialize a negotiation timer | <t>When an initiator sends a Request Negotiation message, it <bcp14>MUST</bcp14> initialize a negotiation timer | |||
skipping to change at line 1382 ¶ | skipping to change at line 1382 ¶ | |||
<t>To avoid the highly unlikely race condition in which two nodes simultaneously request | <t>To avoid the highly unlikely race condition in which two nodes simultaneously request | |||
sessions with each other using the same Session ID (<xref target="SessionID" format="default"/>), | sessions with each other using the same Session ID (<xref target="SessionID" format="default"/>), | |||
a node <bcp14>MUST</bcp14> verify that the received Session ID is not already locally active | a node <bcp14>MUST</bcp14> verify that the received Session ID is not already locally active | |||
when it receives a Request message. In case of a clash, | when it receives a Request message. In case of a clash, | |||
it <bcp14>MUST</bcp14> discard the Request message, in which case the initiator will 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" numbered="true" toc="default"> | |||
<name>Negotiation Message</name> | <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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
negotiation-message = [M_NEGOTIATE, session-id, objective] | negotiation-message = [M_NEGOTIATE, session-id, objective] | |||
]]></artwork> | ]]></sourcecode> | |||
<t>A negotiation counterpart sends a Negotiation message in response | <t>A negotiation counterpart sends a Negotiation message in response | |||
to a Request Negotiation message, a Negotiation message, or a | to a Request Negotiation message, a Negotiation message, or a | |||
Discovery message in rapid mode. A negotiation process | Discovery message in rapid mode. A negotiation process | |||
<bcp14>MAY</bcp14> include multiple steps.</t> | <bcp14>MAY</bcp14> include multiple steps.</t> | |||
<t>The Negotiation message <bcp14>MUST</bcp14> include the relevant | <t>The Negotiation message <bcp14>MUST</bcp14> include the relevant | |||
Negotiation Objective option, with its value updated according to | Negotiation Objective option, with its value updated according to | |||
progress in the negotiation. The sender <bcp14>MUST</bcp14> | progress in the negotiation. The sender <bcp14>MUST</bcp14> | |||
decrement the loop count by 1. If the loop count becomes zero, the | decrement the loop count by 1. If the loop count becomes zero, the | |||
message <bcp14>MUST NOT</bcp14> be sent. In this case, the | message <bcp14>MUST NOT</bcp14> be sent. In this case, the | |||
negotiation session has failed and will time out.</t> | negotiation session has failed and will time out.</t> | |||
</section> | </section> | |||
<section anchor="NegotiationEndingMessage" numbered="true" toc="default"> | <section anchor="NegotiationEndingMessage" numbered="true" toc="default"> | |||
<name>Negotiation End Message</name> | <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:</t> | pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
end-message = [M_END, session-id, accept-option / decline-option] | end-message = [M_END, session-id, accept-option / decline-option] | |||
]]></artwork> | ]]></sourcecode> | |||
<t> | <t> | |||
A negotiation counterpart sends a Negotiation End message to close | A negotiation counterpart sends a Negotiation End message to close | |||
the negotiation. It <bcp14>MUST</bcp14> contain either an Accept option or | the negotiation. It <bcp14>MUST</bcp14> contain either an Accept option or | |||
a Decline option, defined in <xref target="AcceptOption" format="default"/> and <xref target="DeclineOption" format="default"/>. It could be sent either by the requesting node | a Decline option, defined in <xref target="AcceptOption" format="default"/> and <xref target="DeclineOption" format="default"/>. It could be sent either by the requesting node | |||
or the responding node.</t> | or the responding node.</t> | |||
</section> | </section> | |||
<section anchor="ConfirmWaitingMessage" numbered="true" toc="default"> | <section anchor="ConfirmWaitingMessage" numbered="true" toc="default"> | |||
<name>Confirm Waiting Message</name> | <name>Confirm Waiting Message</name> | |||
<t>In fragmentary CDDL, a Confirm Waiting message follows the pattern:</t> | <t>In fragmentary CDDL, a Confirm Waiting message follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<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 <bcp14>MUST NOT</bcp14> 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" format="default"/>).</t> | (<xref target="RequestMessage" format="default"/>).</t> | |||
<t>The responding node <bcp14>SHOULD</bcp14> send a Negotiation, Negotiation End, or another | <t>The responding node <bcp14>SHOULD</bcp14> send a Negotiation, Negotiation End, or another | |||
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 <bcp14>MUST</bcp14> treat | not, when the initiator's timer expires, the initiator <bcp14>MUST</bcp14> 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" numbered="true" toc="default"> | |||
<name>Synchronization Message</name> | <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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
synch-message = [M_SYNCH, session-id, objective] | synch-message = [M_SYNCH, session-id, objective] | |||
]]></artwork> | ]]></sourcecode> | |||
<t>A node that receives a Request Synchronization, or | <t>A node that receives a Request Synchronization, or | |||
a Discovery message in rapid mode, sends back a unicast Synchronization | a Discovery message in rapid mode, sends back a unicast Synchronization | |||
message with the synchronization data, in the form of a GRASP option for the specific | message with the synchronization data, in the form of a GRASP option 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" numbered="true" toc="default"> | |||
<name>Flood Synchronization Message</name> | <name>Flood Synchronization Message</name> | |||
<t>In fragmentary CDDL, a Flood Synchronization message follows the pattern:</t> | <t>In fragmentary CDDL, a Flood Synchronization message follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<t> | <t> | |||
A node <bcp14>MAY</bcp14> initiate flooding by sending an | A node <bcp14>MAY</bcp14> initiate flooding by sending an | |||
unsolicited Flood Synchronization message with synchronization | unsolicited Flood Synchronization message with synchronization | |||
data. This <bcp14>MAY</bcp14> be sent to port GRASP_LISTEN_PORT at | data. This <bcp14>MAY</bcp14> be sent to port GRASP_LISTEN_PORT at | |||
the link-local ALL_GRASP_NEIGHBORS multicast address, in accordance | the 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" format="default"/>. | |||
</t> | </t> | |||
<ul empty="true" spacing="normal"> | <ul empty="true" spacing="normal"> | |||
skipping to change at line 1508 ¶ | skipping to change at line 1508 ¶ | |||
objective, and if necessary communicate with them using the locator, | objective, and if necessary communicate with them using the locator, | |||
protocol, and port included in the locator option. Many objectives | protocol, and port included in the locator option. Many objectives | |||
will not need this mechanism, so they will be flooded with a null | will not need this mechanism, so they will be flooded with a null | |||
locator.</t> | locator.</t> | |||
<t>Cached entries <bcp14>MUST</bcp14> be ignored or deleted after | <t>Cached entries <bcp14>MUST</bcp14> be ignored or deleted after | |||
their lifetime expires.</t> | their lifetime expires.</t> | |||
</section> | </section> | |||
<section anchor="invalid" numbered="true" toc="default"> | <section anchor="invalid" numbered="true" toc="default"> | |||
<name>Invalid Message</name> | <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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
invalid-message = [M_INVALID, session-id, ?any] | invalid-message = [M_INVALID, session-id, ?any] | |||
]]></artwork> | ]]></sourcecode> | |||
<t> | <t> | |||
This message <bcp14>MAY</bcp14> be sent by an implementation in | This message <bcp14>MAY</bcp14> be sent by an implementation in | |||
response to an incoming unicast message that it considers | response to an incoming unicast message that it considers | |||
invalid. The Session ID value <bcp14>MUST</bcp14> be copied from the | invalid. The Session ID value <bcp14>MUST</bcp14> be copied from the | |||
incoming message. The content <bcp14>SHOULD</bcp14> be diagnostic | incoming message. The content <bcp14>SHOULD</bcp14> be diagnostic | |||
information such as a partial copy of the invalid message up to the | information such as a partial copy of the invalid message up to the | |||
maximum message size. An M_INVALID message <bcp14>MAY</bcp14> be | maximum message size. An M_INVALID message <bcp14>MAY</bcp14> be | |||
silently ignored by a recipient. However, it could be used in | silently ignored by a recipient. However, it could be used in | |||
support of extensibility, since it indicates that the remote node | support of extensibility, since it indicates that the remote node | |||
does not support a new or obsolete message or option.</t> | does not support a new or obsolete message or option.</t> | |||
<t>An M_INVALID message <bcp14>MUST NOT</bcp14> be sent in response to an M_INVALID message.</t> | <t>An M_INVALID message <bcp14>MUST NOT</bcp14> be sent in response to an M_INVALID message.</t> | |||
</section> | </section> | |||
<section anchor="noop" numbered="true" toc="default"> | <section anchor="noop" numbered="true" toc="default"> | |||
<name>No Operation Message</name> | <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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
noop-message = [M_NOOP] | noop-message = [M_NOOP] | |||
]]></artwork> | ]]></sourcecode> | |||
<t> | <t> | |||
This message <bcp14>MAY</bcp14> be sent by an implementation that for practical reasons needs to | This message <bcp14>MAY</bcp14> be sent by an implementation that for practical reasons needs to | |||
initialize a socket. It <bcp14>MUST</bcp14> be silently ignored by a recipient.</t> | initialize a socket. It <bcp14>MUST</bcp14> be silently ignored by a recipient.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="GRASPOptions" numbered="true" toc="default"> | <section anchor="GRASPOptions" numbered="true" toc="default"> | |||
<name>GRASP Options</name> | <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 | |||
skipping to change at line 1559 ¶ | skipping to change at line 1559 ¶ | |||
<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 synchronization. It | node, which may be more appropriate for the intended negotiation or synchronization. It | |||
may redirect to an entity that is known as a specific negotiation or synchronization | may redirect to an entity that is known as a specific negotiation or synchronization | |||
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 <bcp14>MUST</bcp14> only be encapsulated in Discovery Response messages. | option <bcp14>MUST</bcp14> only be encapsulated in Discovery Response messages. | |||
If found elsewhere, it <bcp14>SHOULD</bcp14> be silently ignored.</t> | If found elsewhere, it <bcp14>SHOULD</bcp14> be silently ignored.</t> | |||
<t>A discovery initiator <bcp14>MAY</bcp14> ignore a Divert option if it only requires direct | <t>A discovery initiator <bcp14>MAY</bcp14> ignore a Divert option if it only requires direct | |||
Discovery Responses. </t> | 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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
divert-option = [O_DIVERT, +locator-option] | divert-option = [O_DIVERT, +locator-option] | |||
]]></artwork> | ]]></sourcecode> | |||
<t>The embedded locator option(s) (<xref target="LocatorOption" format="default"/>) | <t>The embedded locator option(s) (<xref target="LocatorOption" format="default"/>) | |||
point to diverted destination target(s) in response to a Discovery message. </t> | point to diverted destination target(s) in response to a Discovery message. </t> | |||
</section> | </section> | |||
<section anchor="AcceptOption" numbered="true" toc="default"> | <section anchor="AcceptOption" numbered="true" toc="default"> | |||
<name>Accept Option</name> | <name>Accept Option</name> | |||
<t>The Accept option is used to indicate to the negotiation counterpart | <t>The Accept option is used to indicate to the negotiation counterpart | |||
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 Negotiation End | <t>The Accept option <bcp14>MUST</bcp14> only be encapsulated in Negotiation End | |||
messages. If found elsewhere, it <bcp14>SHOULD</bcp14> be silently ignored.</t> | messages. If found elsewhere, it <bcp14>SHOULD</bcp14> be silently ignored.</t> | |||
<t>In fragmentary CDDL, the Accept option follows the pattern:</t> | <t>In fragmentary CDDL, the Accept option follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
accept-option = [O_ACCEPT] | accept-option = [O_ACCEPT] | |||
]]></artwork> | ]]></sourcecode> | |||
</section> | </section> | |||
<section anchor="DeclineOption" numbered="true" toc="default"> | <section anchor="DeclineOption" numbered="true" toc="default"> | |||
<name>Decline Option</name> | <name>Decline Option</name> | |||
<t>The Decline option is used to indicate to the negotiation | <t>The Decline option is used to indicate to the negotiation | |||
counterpart the proposed negotiation content is declined and to end the | counterpart the proposed negotiation content is declined and to end the | |||
negotiation process.</t> | negotiation process.</t> | |||
<t>The Decline option <bcp14>MUST</bcp14> only be encapsulated in | <t>The Decline option <bcp14>MUST</bcp14> only be encapsulated in | |||
Negotiation End messages. If found elsewhere, it <bcp14>SHOULD</bcp14> be | Negotiation End messages. If found elsewhere, it <bcp14>SHOULD</bcp14> 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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<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 Negotiation 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" numbered="true" toc="default"> | |||
<name>Locator Options</name> | <name>Locator Options</name> | |||
skipping to change at line 1620 ¶ | skipping to change at line 1620 ¶ | |||
and FQDNs include this information explicitly. In the case of the Locator URI option, | and FQDNs include this information explicitly. In the case of the Locator 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 in scope throughout | <t>Note: It is assumed that all locators used in locator options are in scope throughout | |||
the GRASP domain. As stated in <xref target="hilev" format="default"/>, | 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"> | <section numbered="true" toc="default"> | |||
<name>Locator IPv6 Address Option</name> | <name>Locator IPv6 Address Option</name> | |||
<t>In fragmentary CDDL, the Locator IPv6 Address option follows the pattern:</t> | <t>In fragmentary CDDL, the Locator IPv6 Address option follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<t>The content of this option is a binary IPv6 address followed by | <t>The content of this option is a binary IPv6 address followed by | |||
the protocol number and port number to be used.</t> | the protocol number and port number to be used.</t> | |||
<t>Note 1: The IPv6 address <bcp14>MUST</bcp14> normally have | <t>Note 1: The IPv6 address <bcp14>MUST</bcp14> normally have | |||
global scope. However, during initialization, a link-local address | global scope. However, during initialization, a link-local address | |||
<bcp14>MAY</bcp14> be used for specific objectives only (<xref target="secinst" format="default"/>). In this case, the | <bcp14>MAY</bcp14> be used for specific objectives only (<xref target="secinst" format="default"/>). In this case, the | |||
corresponding Discovery Response message <bcp14>MUST</bcp14> be | corresponding Discovery Response message <bcp14>MUST</bcp14> be | |||
sent via the interface to which the link-local address | sent via the interface to which the link-local address | |||
applies.</t> | applies.</t> | |||
<t>Note 2: A link-local IPv6 address <bcp14>MUST NOT</bcp14> be | <t>Note 2: A link-local IPv6 address <bcp14>MUST NOT</bcp14> be | |||
used when this option is included in a Divert option.</t> | used when this option is included in a Divert option.</t> | |||
<t>Note 3: The IPPROTO values are taken from the existing IANA | <t>Note 3: The IPPROTO values are taken from the existing IANA | |||
Protocol Numbers registry in order to specify TCP or UDP. If GRASP | Protocol Numbers registry in order to specify TCP or UDP. If GRASP | |||
requires future values that are not in that registry, a new | requires future values that are not in that registry, a new | |||
registry for values outside the range 0..255 will be needed.</t> | registry for values outside the range 0..255 will be needed.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Locator IPv4 Address Option</name> | <name>Locator IPv4 Address Option</name> | |||
<t>In fragmentary CDDL, the Locator IPv4 Address option follows the pattern:</t> | <t>In fragmentary CDDL, the Locator IPv4 Address option follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<t>The content of this option is a binary IPv4 address followed by | <t>The content of this option is a binary IPv4 address followed by | |||
the protocol number and port number to be used.</t> | the protocol number and port number to be used.</t> | |||
<t>Note: If an operator has internal network address translation for IPv4, | <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> | this option <bcp14>MUST NOT</bcp14> be used within the Divert option.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Locator FQDN Option</name> | <name>Locator FQDN Option</name> | |||
<t>In fragmentary CDDL, the Locator FQDN option follows the pattern:</t> | <t>In fragmentary CDDL, the Locator FQDN option follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![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> | |||
<t>The content of this option is the FQDN | <t>The content of this option is the FQDN | |||
of the target followed by the protocol number and port number to | of the target followed by the protocol number and port number to | |||
be used. | be used. | |||
</t> | </t> | |||
<t>Note 1: Any FQDN that might not be valid throughout the | <t>Note 1: Any FQDN that might not be valid throughout the | |||
network in question, such as a Multicast DNS name <xref target="RFC6762" format="default"/>, <bcp14>MUST NOT</bcp14> be | network in question, such as a Multicast DNS name <xref target="RFC6762" format="default"/>, <bcp14>MUST NOT</bcp14> be | |||
used when 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. It is intended for | <t>Note 2: Normal GRASP operations are not expected to use this option. 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 numbered="true" toc="default"> | |||
<name>Locator URI Option</name> | <name>Locator URI Option</name> | |||
<t>In fragmentary CDDL, the Locator URI option follows the pattern:</t> | <t>In fragmentary CDDL, the Locator URI option follows the pattern:</t> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
uri-locator-option = [O_URI_LOCATOR, text, | uri-locator-option = [O_URI_LOCATOR, text, | |||
transport-proto / null, port-number / null] | transport-proto / null, port-number / null] | |||
]]></artwork> | ]]></sourcecode> | |||
<t>The content of this option is the URI of the target | <t>The content of this option is the URI of the 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" format="default"/>. | <xref target="RFC3986" format="default"/>. | |||
</t> | </t> | |||
<t>Note 1: Any URI which might not be valid throughout the network in question, | <t>Note 1: Any URI which might not be valid throughout the network in question, | |||
such as one based on a Multicast DNS name <xref target="RFC6762" format="default"/>, <bcp14>MUST NOT</bcp14> be used when | such as one based on a Multicast DNS name <xref target="RFC6762" format="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. It is intended for | <t>Note 2: Normal GRASP operations are not expected to use this option. It is intended for | |||
special purposes such as discovering external services. Therefore, its use is not further | special purposes such as discovering external services. Therefore, its use is not further | |||
described in this specification.</t> | described in this specification.</t> | |||
skipping to change at line 1709 ¶ | skipping to change at line 1709 ¶ | |||
</section> | </section> | |||
<section anchor="ObjOption" numbered="true" toc="default"> | <section anchor="ObjOption" numbered="true" toc="default"> | |||
<name>Objective Options</name> | <name>Objective Options</name> | |||
<section anchor="ObjForm" numbered="true" toc="default"> | <section anchor="ObjForm" numbered="true" toc="default"> | |||
<name>Format of Objective Options</name> | <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 <bcp14>MUST</bcp14> 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> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="cddl" name="grasp-fragments.cddl"><![CDATA[ | |||
objective = [objective-name, objective-flags, | objective = [objective-name, objective-flags, | |||
loop-count, ?objective-value] | loop-count, ?objective-value] | |||
objective-name = text | objective-name = text | |||
objective-value = any | objective-value = any | |||
loop-count = 0..255 | loop-count = 0..255 | |||
]]></artwork> | ]]></sourcecode> | |||
<t>All objectives are identified by a unique name that is a UTF-8 | <t>All objectives are identified by a unique name that is a UTF-8 | |||
string <xref target="RFC3629" format="default"/>, to be compared | string <xref target="RFC3629" format="default"/>, to be compared | |||
byte by byte. </t> | byte by byte. </t> | |||
<t>The names of generic objectives <bcp14>MUST NOT</bcp14> include a colon (":") | <t>The names of generic objectives <bcp14>MUST NOT</bcp14> include a colon (":") | |||
and <bcp14>MUST</bcp14> be registered with IANA (<xref target="iana" format="default"/>).</t> | and <bcp14>MUST</bcp14> be registered with IANA (<xref target="iana" format="default"/>).</t> | |||
<t>The names of privately defined objectives <bcp14>MUST</bcp14> include at least one colon (":"). | <t>The names of privately defined objectives <bcp14>MUST</bcp14> include at least one colon (":"). | |||
The string preceding the last colon in the name <bcp14>MUST</bcp14> be globally unique and in some | 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 following three methods | way identify the entity or person defining the objective. The following three methods | |||
<bcp14>MAY</bcp14> be used to create such a globally unique string: | <bcp14>MAY</bcp14> be used to create such a globally unique string: | |||
skipping to change at line 1761 ¶ | skipping to change at line 1761 ¶ | |||
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 CBOR. | or a data structure of any kind, as long as it can be represented in CBOR. | |||
It is optional only in a Discovery or Discovery Response message.</t> | It is optional only in a Discovery or Discovery Response message.</t> | |||
</section> | </section> | |||
<section anchor="objective_flags" numbered="true" toc="default"> | <section anchor="objective_flags" numbered="true" toc="default"> | |||
<name>Objective Flags</name> | <name>Objective Flags</name> | |||
<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 negotiation, or | |||
for discovery and synchronization. This is expressed in the objective by logical flag bits:</t> | for discovery and synchronization. This is expressed in the objective by logical flag bits:</t> | |||
<artwork align="left"><![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 a dry run | F_NEG_DRY: 3 ; negotiation is a dry run | |||
)]]> | )]]> | |||
</artwork> | </sourcecode> | |||
<t>These bits are independent and may be combined appropriately, e.g., (F_DISC and F_SYNCH) or | <t>These bits are independent and may be combined appropriately, e.g., (F_DISC and F_SYNCH) or | |||
(F_DISC and F_NEG) or (F_DISC and F_NEG and F_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 used either for negotiation or for | <t>Note that for a given negotiation session, an objective must be used either for negotiation or for | |||
dry-run negotiation. Mixing the two modes in a single negotiation is not possible.</t> | dry-run negotiation. Mixing the two modes in a single negotiation is not possible.</t> | |||
</section> | </section> | |||
<section anchor="ConsOption" numbered="true" toc="default"> | <section anchor="ConsOption" numbered="true" toc="default"> | |||
<name>General Considerations for Objective Options</name> | <name>General Considerations for Objective Options</name> | |||
<t>As mentioned above, objective options <bcp14>MUST</bcp14> be assigned a unique name. | <t>As mentioned above, objective options <bcp14>MUST</bcp14> be assigned a unique name. | |||
As long as privately defined objective options obey the rules above, this document | As long as privately defined objective options obey the rules above, this document | |||
skipping to change at line 2019 ¶ | skipping to change at line 2019 ¶ | |||
</dt> | </dt> | |||
<dd><t>When GRASP discovery returns an IP address, it <bcp14>MUST</bcp14> be that of a node | <dd><t>When GRASP discovery returns an IP address, it <bcp14>MUST</bcp14> be that of a node | |||
within the secure environment (<xref target="reqsec" format="default"/>). If it returns | within the secure environment (<xref target="reqsec" format="default"/>). If it returns | |||
an FQDN or a URI, the ASA that receives it <bcp14>MUST NOT</bcp14> assume that the | an FQDN or a URI, the ASA that receives it <bcp14>MUST NOT</bcp14> assume that the | |||
target of the locator is within the secure environment.</t></dd> | target of the locator is within the secure environment.</t></dd> | |||
</dl> | </dl> | |||
</section> | </section> | |||
<section anchor="cddl" numbered="true" toc="default"> | <section anchor="cddl" numbered="true" toc="default"> | |||
<name>CDDL Specification of GRASP</name> | <name>CDDL Specification of GRASP</name> | |||
<sourcecode name="" type="cddl" markers="true"><![CDATA[ | <sourcecode name="grasp.cddl" type="cddl" markers="true"><![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 = 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 | |||
skipping to change at line 2503 ¶ | skipping to change at line 2503 ¶ | |||
<li>CBOR diagnostic notation.</li> | <li>CBOR diagnostic notation.</li> | |||
<li>Similar, but showing the names of the constants. (Details of the flag bit encoding are omitted.) </li> | <li>Similar, but showing the names of the constants. (Details of the flag bit encoding are omitted.) </li> | |||
<li>Hexadecimal version of the CBOR wire format.</li> | <li>Hexadecimal version of the CBOR wire format.</li> | |||
</ol> | </ol> | |||
<t> | <t> | |||
Long lines are split for display purposes only.</t> | Long lines are split for display purposes only.</t> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Discovery Example</name> | <name>Discovery Example</name> | |||
<t>The initiator (2001:db8:f000:baaa:28cc:dc4c:9703:6781) multicasts a Discovery message | <t>The initiator (2001:db8:f000:baaa:28cc:dc4c:9703:6781) multicasts a Discovery message | |||
looking for objective EX1:</t> | looking for objective EX1:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>A peer (2001:0db8:f000:baaa:f000:baaa:f000:baaa) responds with a locator:</t> | <t>A peer (2001:0db8:f000:baaa:f000:baaa:f000:baaa) responds with a locator:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Flood Example</name> | <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 Synchronization message. The single objective has a null locator. There is no response:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Synchronization Example</name> | <name>Synchronization Example</name> | |||
<t>Following successful discovery of objective EX2, the initiator unicasts a Request Synchronization message:</t> | <t>Following successful discovery of objective EX2, the initiator unicasts a Request Synchronization message:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The peer responds with a value:</t> | <t>The peer responds with a value:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Simple Negotiation Example</name> | <name>Simple Negotiation Example</name> | |||
<t>Following successful discovery of objective EX3, the initiator unicasts a Request Negotiation message:</t> | <t>Following successful discovery of objective EX3, the initiator unicasts a Request Negotiation message:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The peer responds with immediate acceptance. Note that no objective is needed | <t>The peer responds with immediate acceptance. Note that no objective is needed | |||
because the initiator's request was accepted without change:</t> | because the initiator's request was accepted without change:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
[6, 802813, [101]] | [6, 802813, [101]] | |||
[M_END , 802813, [O_ACCEPT]] | [M_END , 802813, [O_ACCEPT]] | |||
h'83061a000c3ffd811865' | h'83061a000c3ffd811865' | |||
]]></artwork> | ]]></artwork> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Complete Negotiation Example</name> | <name>Complete Negotiation Example</name> | |||
<t>Again the initiator unicasts a Request Negotiation message:</t> | <t>Again the initiator unicasts a Request Negotiation message:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The responder starts to negotiate (making an offer):</t> | <t>The responder starts to negotiate (making an offer):</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The initiator continues to negotiate (reducing its request, and note that the loop count is decremented):</t> | <t>The initiator continues to negotiate (reducing its request, and note that the loop count is decremented):</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The responder asks for more time:</t> | <t>The responder asks for more time:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![CDATA[ | |||
[7, 13767778, 34965] | [7, 13767778, 34965] | |||
[M_WAIT, 13767778, 34965] | [M_WAIT, 13767778, 34965] | |||
h'83071a00d21462198895' | h'83071a00d21462198895' | |||
]]></artwork> | ]]></artwork> | |||
<t>The responder continues to negotiate (increasing its offer):</t> | <t>The responder continues to negotiate (increasing its offer):</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The initiator continues to negotiate (reducing its request):</t> | <t>The initiator continues to negotiate (reducing its request):</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<t>The responder refuses to negotiate further:</t> | <t>The responder refuses to negotiate further:</t> | |||
<artwork><![CDATA[ | <artwork name="grasp-examples.txt" align="left"><![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> | |||
<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> | |||
End of changes. 56 change blocks. | ||||
56 lines changed or deleted | 56 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/ |