| rfc8990v1.txt | rfc8990.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) C. Bormann | Internet Engineering Task Force (IETF) C. Bormann | |||
| Request for Comments: 8990 Universität Bremen TZI | Request for Comments: 8990 Universität Bremen TZI | |||
| Category: Standards Track B. Carpenter, Ed. | Category: Standards Track B. Carpenter, Ed. | |||
| ISSN: 2070-1721 Univ. of Auckland | ISSN: 2070-1721 Univ. of Auckland | |||
| B. Liu, Ed. | B. Liu, Ed. | |||
| Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
| April 2021 | April 2021 | |||
| A GeneRic Autonomic Signaling Protocol (GRASP) | GeneRic Autonomic Signaling Protocol (GRASP) | |||
| Abstract | Abstract | |||
| This document specifies the GeneRic Autonomic Signaling Protocol | This document specifies the GeneRic Autonomic Signaling Protocol | |||
| (GRASP), which enables autonomic nodes and Autonomic Service Agents | (GRASP), which enables autonomic nodes and Autonomic Service Agents | |||
| to dynamically discover peers, to synchronize state with each other, | to dynamically discover peers, to synchronize state with each other, | |||
| and to negotiate parameter settings with each other. GRASP depends | and to negotiate parameter settings with each other. GRASP depends | |||
| on an external security environment that is described elsewhere. The | on an external security environment that is described elsewhere. The | |||
| technical objectives and parameters for specific application | technical objectives and parameters for specific application | |||
| scenarios are to be described in separate documents. Appendices | scenarios are to be described in separate documents. Appendices | |||
| skipping to change at line 131 ¶ | skipping to change at line 131 ¶ | |||
| become more and more problematic for human-based management. Also, | become more and more problematic for human-based management. Also, | |||
| operational costs are growing quickly. Consequently, there are | operational costs are growing quickly. Consequently, there are | |||
| increased requirements for autonomic behavior in the networks. | increased requirements for autonomic behavior in the networks. | |||
| General aspects of autonomic networks are discussed in [RFC7575] and | General aspects of autonomic networks are discussed in [RFC7575] and | |||
| [RFC7576]. | [RFC7576]. | |||
| One approach is to largely decentralize the logic of network | One approach is to largely decentralize the logic of network | |||
| management by migrating it into network elements. A reference model | management by migrating it into network elements. A reference model | |||
| for Autonomic Networking on this basis is given in [RFC8993]. The | for Autonomic Networking on this basis is given in [RFC8993]. The | |||
| reader should consult this document to understand how various | reader should consult this document to understand how various | |||
| autonomic components fit together. In order to fulfill autonomy, | autonomic components fit together. In order to achieve autonomy, | |||
| devices that embody Autonomic Service Agents (ASAs, [RFC7575]) have | devices that embody Autonomic Service Agents (ASAs, [RFC7575]) have | |||
| specific signaling requirements. In particular, they need to | specific signaling requirements. In particular, they need to | |||
| discover each other, to synchronize state with each other, and to | discover each other, to synchronize state with each other, and to | |||
| negotiate parameters and resources directly with each other. There | negotiate parameters and resources directly with each other. There | |||
| is no limitation on the types of parameters and resources concerned, | is no limitation on the types of parameters and resources concerned, | |||
| which can include very basic information needed for addressing and | which can include very basic information needed for addressing and | |||
| routing, as well as anything else that might be configured in a | routing, as well as anything else that might be configured in a | |||
| conventional non-autonomic network. The atomic unit of discovery, | conventional non-autonomic network. The atomic unit of discovery, | |||
| synchronization, or negotiation is referred to as a technical | synchronization, or negotiation is referred to as a technical | |||
| objective, i.e, a configurable parameter or set of parameters | objective, i.e, a configurable parameter or set of parameters | |||
| skipping to change at line 272 ¶ | skipping to change at line 272 ¶ | |||
| Negotiation Initiator: | Negotiation Initiator: | |||
| An ASA that starts negotiation by sending a request message | An ASA that starts negotiation by sending a request message | |||
| referring to a specific negotiation objective. | referring to a specific negotiation objective. | |||
| Negotiation Counterpart: | Negotiation Counterpart: | |||
| A peer with which the Negotiation Initiator negotiates a specific | A peer with which the Negotiation Initiator negotiates a specific | |||
| negotiation objective. | negotiation objective. | |||
| GRASP Instance: | GRASP Instance: | |||
| This refers to an instantiation of a GRASP engine, likely | This refers to an instantiation of a GRASP protocol engine, likely | |||
| including multiple threads or processes as well as dynamic data | including multiple threads or processes as well as dynamic data | |||
| structures such as a discovery cache, running in a given security | structures such as a discovery cache, running in a given security | |||
| environment on a single device. | environment on a single device. | |||
| GRASP Core: | GRASP Core: | |||
| This refers to the code and shared data structures of a GRASP | This refers to the code and shared data structures of a GRASP | |||
| instance, which will communicate with individual ASAs via a | instance, which will communicate with individual ASAs via a | |||
| suitable Application Programming Interface (API). | suitable Application Programming Interface (API). | |||
| Interface or GRASP Interface: | Interface or GRASP Interface: | |||
| Unless otherwise stated, this refer to a network interface, which | Unless otherwise stated, this refers to a network interface, which | |||
| might be physical or virtual, that a specific instance of GRASP is | might be physical or virtual, that a specific instance of GRASP is | |||
| currently using. A device might have other interfaces that are | currently using. A device might have other interfaces that are | |||
| not used by GRASP and which are outside the scope of the Autonomic | not used by GRASP and which are outside the scope of the Autonomic | |||
| Network. | Network. | |||
| 2.2. High-Level Deployment Model | 2.2. High-Level Deployment Model | |||
| A GRASP implementation will be part of the Autonomic Networking | A GRASP implementation will be part of the Autonomic Networking | |||
| Infrastructure (ANI) in an autonomic node, which must also provide an | Infrastructure (ANI) in an autonomic node, which must also provide an | |||
| appropriate security environment. In accordance with [RFC8993], this | appropriate security environment. In accordance with [RFC8993], this | |||
| skipping to change at line 366 ¶ | skipping to change at line 366 ¶ | |||
| This section describes the behavior model and general design of | This section describes the behavior model and general design of | |||
| GRASP, supporting discovery, synchronization, and negotiation, to act | GRASP, supporting discovery, synchronization, and negotiation, to act | |||
| as a platform for different technical objectives. | as a platform for different technical objectives. | |||
| A generic platform: | A generic platform: | |||
| The protocol design is generic and independent of the | The protocol design is generic and independent of the | |||
| synchronization or negotiation contents. The technical contents | synchronization or negotiation contents. The technical contents | |||
| will vary according to the various technical objectives and the | will vary according to the various technical objectives and the | |||
| different pairs of counterparts. | different pairs of counterparts. | |||
| Normally, a single main instance of the GRASP engine will exist in | Multiple instances: | |||
| an autonomic node, and each ASA will run as an independent | Normally, a single main instance of the GRASP protocol engine will | |||
| asynchronous process. However, scenarios where multiple instances | exist in an autonomic node, and each ASA will run as an | |||
| of GRASP run in a single node, perhaps with different security | independent asynchronous process. However, scenarios where | |||
| properties, are possible (Section 2.5.2). In this case, each | multiple instances of GRASP run in a single node, perhaps with | |||
| instance MUST listen independently for GRASP link-local | different security properties, are possible (Section 2.5.2). In | |||
| multicasts, and all instances MUST be woken by each such multicast | this case, each instance MUST listen independently for GRASP link- | |||
| in order for discovery and flooding to work correctly. | local multicasts, and all instances MUST be woken by each such | |||
| multicast in order for discovery and flooding to work correctly. | ||||
| Security infrastructure: | Security infrastructure: | |||
| As noted above, the protocol itself has no built-in security | As noted above, the protocol itself has no built-in security | |||
| functionality and relies on a separate secure infrastructure. | functionality and relies on a separate secure infrastructure. | |||
| Discovery, synchronization, and negotiation are designed together: | Discovery, synchronization, and negotiation are designed together: | |||
| The discovery method and the synchronization and negotiation | The discovery method and the synchronization and negotiation | |||
| methods are designed in the same way and can be combined when this | methods are designed in the same way and can be combined when this | |||
| is useful, allowing a rapid mode of operation described in | is useful, allowing a rapid mode of operation described in | |||
| Section 2.5.4. These processes can also be performed | Section 2.5.4. These processes can also be performed | |||
| independently when appropriate. | independently when appropriate. | |||
| Thus, for some objectives, especially those concerned with | Thus, for some objectives, especially those concerned with | |||
| application-layer services, another discovery mechanism such as | application-layer services, another discovery mechanism such as | |||
| the future DNS Service Discovery [RFC7558] MAY be used. The | DNS-based Service Discovery [RFC7558] MAY be used. The choice | |||
| choice is left to the designers of individual ASAs. | is left to the designers of individual ASAs. | |||
| A uniform pattern for technical objectives: | A uniform pattern for technical objectives: | |||
| The synchronization and negotiation objectives are defined | The synchronization and negotiation objectives are defined | |||
| according to a uniform pattern. The values that they contain | according to a uniform pattern. The values that they contain | |||
| could be carried either in a simple binary format or in a complex | could be carried either in a simple binary format or in a complex | |||
| object format. The basic protocol design uses the Concise Binary | object format. The basic protocol design uses the Concise Binary | |||
| Object Representation (CBOR) [RFC8949], which is readily | Object Representation (CBOR) [RFC8949], which is readily | |||
| extensible for unknown, future requirements. | extensible for unknown, future requirements. | |||
| A flexible model for synchronization: | A flexible model for synchronization: | |||
| skipping to change at line 623 ¶ | skipping to change at line 624 ¶ | |||
| between adjacent GRASP nodes. The GRASP security and transport | between adjacent GRASP nodes. The GRASP security and transport | |||
| substrate needs to specify how these link-local multicasts are | substrate needs to specify how these link-local multicasts are | |||
| transported. This can be unreliable transport (UDP) but it SHOULD be | transported. This can be unreliable transport (UDP) but it SHOULD be | |||
| reliable transport (e.g., TCP). | reliable transport (e.g., TCP). | |||
| If the substrate specifies an unreliable transport such as UDP for | If the substrate specifies an unreliable transport such as UDP for | |||
| discovery and flooding messages, then it MUST NOT use IP | discovery and flooding messages, then it MUST NOT use IP | |||
| fragmentation because of its loss characteristic, especially in | fragmentation because of its loss characteristic, especially in | |||
| multi-hop flooding. GRASP MUST then enforce at the user API level a | multi-hop flooding. GRASP MUST then enforce at the user API level a | |||
| limit to the size of discovery and flooding messages, so that no | limit to the size of discovery and flooding messages, so that no | |||
| fragmentation can occur. For IPv6 transport, this means that those | fragmentation can occur. For IPv6 transport, this means that the | |||
| messages must be at most 1280 bytes sized IPv6 packets (unless there | size of those messages' IPv6 packets must be at most 1280 bytes | |||
| is a known larger minimum link MTU across the whole GRASP domain). | (unless there is a known larger minimum link MTU across the whole | |||
| GRASP domain). | ||||
| All other GRASP messages are unicast between group members of the | All other GRASP messages are unicast between group members of the | |||
| GRASP domain. These MUST use a reliable transport protocol because | GRASP domain. These MUST use a reliable transport protocol because | |||
| GRASP itself does not provide for error detection, retransmission, or | GRASP itself does not provide for error detection, retransmission, or | |||
| flow control. Unless otherwise specified by the security and | flow control. Unless otherwise specified by the security and | |||
| transport substrate, TCP MUST be used. | transport substrate, TCP MUST be used. | |||
| The security and transport substrate for GRASP in the ANI is the ACP. | The security and transport substrate for GRASP in the ANI is the ACP. | |||
| Unless otherwise noted, we assume this security and transport | Unless otherwise noted, we assume this security and transport | |||
| substrate in the remainder of this document when describing GRASP's | substrate in the remainder of this document when describing GRASP's | |||
| message transport. In the ACP, TCP is used for GRASP unicast | message transport. In the ACP, TCP is used for GRASP unicast | |||
| messages. GRASP discovery and flooding messages also use TCP: these | messages. GRASP discovery and flooding messages also use TCP: these | |||
| link-local messages are forwarded by replicating them to all adjacent | link-local messages are forwarded by replicating them to all adjacent | |||
| GRASP nodes on the link via TCP connections. Because of this, GRASP | GRASP nodes on the link via TCP connections to those adjacent GRASP | |||
| in the ANI has no limitations on the size of discovery and flooding | nodes. Because of this, GRASP in the ANI has no limitations on the | |||
| messages with respect to fragmentation issues. UDP is used in the | size of discovery and flooding messages with respect to fragmentation | |||
| ANI with GRASP only with DULL when the ACP is built to discover ACP/ | issues. While the ACP is being built using a DULL instance of GRASP, | |||
| GRASP neighbors on links. | native UDP multicast is used to discover ACP/GRASP neighbors on | |||
| links. | ||||
| For link-local UDP multicast, GRASP listens to the well-known GRASP | For link-local UDP multicast, GRASP listens to the well-known GRASP | |||
| Listen Port (Section 2.6). Transport connections for discovery and | Listen Port (Section 2.6). Transport connections for discovery and | |||
| flooding on relay nodes must terminate in GRASP instances (e.g., | flooding on relay nodes must terminate in GRASP instances (e.g., | |||
| GRASP ASAs) so that link-local multicast, hop-by-hop flooding of | GRASP ASAs) so that link-local multicast, hop-by-hop flooding of | |||
| M_DISCOVERY and M_FLOOD messages and hop-by-hop forwarding of | M_DISCOVERY and M_FLOOD messages and hop-by-hop forwarding of | |||
| M_RESPONSE responses and caching of those responses along the path | M_RESPONSE responses and caching of those responses along the path | |||
| work correctly. | work correctly. | |||
| Unicast transport connections used for synchronization and | Unicast transport connections used for synchronization and | |||
| skipping to change at line 864 ¶ | skipping to change at line 867 ¶ | |||
| A Discovery message MAY include an objective option. This allows a | A Discovery message MAY include an objective option. This allows a | |||
| rapid mode of negotiation (Section 2.5.5.1) or synchronization | rapid mode of negotiation (Section 2.5.5.1) or synchronization | |||
| (Section 2.5.6.3). Rapid mode is currently limited to a single | (Section 2.5.6.3). Rapid mode is currently limited to a single | |||
| objective for simplicity of design and implementation. A possible | objective for simplicity of design and implementation. A possible | |||
| future extension is to allow multiple objectives in rapid mode for | future extension is to allow multiple objectives in rapid mode for | |||
| greater efficiency. | greater efficiency. | |||
| 2.5.5. Negotiation Procedures | 2.5.5. Negotiation Procedures | |||
| A negotiation initiator opens a transport connection to a counterpart | A negotiation initiator opens a transport connection to a counterpart | |||
| ASA using the address, protocol,and port obtained during discovery. | ASA using the address, protocol, and port obtained during discovery. | |||
| It then sends a negotiation request (using M_REQ_NEG) to the | It then sends a negotiation request (using M_REQ_NEG) to the | |||
| counterpart, including a specific negotiation objective. It may | counterpart, including a specific negotiation objective. It may | |||
| request the negotiation counterpart to make a specific configuration. | request the negotiation counterpart to make a specific configuration. | |||
| Alternatively, it may request a certain simulation or forecast result | Alternatively, it may request a certain simulation or forecast result | |||
| by sending a dry-run configuration. The details, including the | by sending a dry-run configuration. The details, including the | |||
| distinction between a dry run and a live configuration change, will | distinction between a dry run and a live configuration change, will | |||
| be defined separately for each type of negotiation objective. Any | be defined separately for each type of negotiation objective. Any | |||
| state associated with a dry-run operation, such as temporarily | state associated with a dry-run operation, such as temporarily | |||
| reserving a resource for subsequent use in a live run, is entirely a | reserving a resource for subsequent use in a live run, is entirely a | |||
| matter for the designer of the ASA concerned. | matter for the designer of the ASA concerned. | |||
| skipping to change at line 1062 ¶ | skipping to change at line 1065 ¶ | |||
| or off by Intent. | or off by Intent. | |||
| 2.6. GRASP Constants | 2.6. GRASP Constants | |||
| ALL_GRASP_NEIGHBORS | ALL_GRASP_NEIGHBORS | |||
| A link-local scope multicast address used by a GRASP-enabled | A link-local scope multicast address used by a GRASP-enabled | |||
| device to discover GRASP-enabled neighbor (i.e., on-link) devices. | device to discover GRASP-enabled neighbor (i.e., on-link) devices. | |||
| All devices that support GRASP are members of this multicast | All devices that support GRASP are members of this multicast | |||
| group. | group. | |||
| * IPv6 multicast address: FF02::13 | * IPv6 multicast address: ff02::13 | |||
| * IPv4 multicast address: 224.0.0.119 | * IPv4 multicast address: 224.0.0.119 | |||
| GRASP_LISTEN_PORT (7017) | GRASP_LISTEN_PORT (7017) | |||
| A well-known UDP user port that every GRASP-enabled network device | A well-known UDP user port that every GRASP-enabled network device | |||
| MUST listen to for link-local multicasts when UDP is used for | MUST listen to for link-local multicasts when UDP is used for | |||
| M_DISCOVERY or M_FLOOD messages in the GRASP instance. This user | M_DISCOVERY or M_FLOOD messages in the GRASP instance. This user | |||
| port MAY also be used to listen for TCP or UDP unicast messages in | port MAY also be used to listen for TCP or UDP unicast messages in | |||
| a simple implementation of GRASP (Section 2.5.3). | a simple implementation of GRASP (Section 2.5.3). | |||
| skipping to change at line 1150 ¶ | skipping to change at line 1153 ¶ | |||
| GRASP messages share an identical header format and a variable format | GRASP messages share an identical header format and a variable format | |||
| area for options. GRASP message headers and options are transmitted | area for options. GRASP message headers and options are transmitted | |||
| in Concise Binary Object Representation (CBOR) [RFC8949]. In this | in Concise Binary Object Representation (CBOR) [RFC8949]. In this | |||
| specification, they are described using Concise Data Definition | specification, they are described using Concise Data Definition | |||
| Language (CDDL) [RFC8610]. Fragmentary CDDL is used to describe each | Language (CDDL) [RFC8610]. Fragmentary CDDL is used to describe each | |||
| item in this section. A complete and normative CDDL specification of | item in this section. A complete and normative CDDL specification of | |||
| GRASP is given in Section 4, including constants such as message | GRASP is given in Section 4, including constants such as message | |||
| types. | types. | |||
| Every GRASP message, except the No Operation message, carries a | Every GRASP message, except the No Operation message, carries a | |||
| Session ID (Section 2.7). Options are then presented serially in the | Session ID (Section 2.7). Options are then presented serially. | |||
| options field. | ||||
| In fragmentary CDDL, every GRASP message follows the pattern: | In fragmentary CDDL, every GRASP message follows the pattern: | |||
| grasp-message = (message .within message-structure) / noop-message | grasp-message = (message .within message-structure) / noop-message | |||
| message-structure = [MESSAGE_TYPE, session-id, ?initiator, | message-structure = [MESSAGE_TYPE, session-id, ?initiator, | |||
| *grasp-option] | *grasp-option] | |||
| MESSAGE_TYPE = 1..255 | MESSAGE_TYPE = 0..255 | |||
| session-id = 0..4294967295 ; up to 32 bits | session-id = 0..4294967295 ; up to 32 bits | |||
| grasp-option = any | grasp-option = any | |||
| The MESSAGE_TYPE indicates the type of the message and thus defines | The MESSAGE_TYPE indicates the type of the message and thus defines | |||
| the expected options. Any options received that are not consistent | the expected options. Any options received that are not consistent | |||
| with the MESSAGE_TYPE SHOULD be silently discarded. | with the MESSAGE_TYPE SHOULD be silently discarded. | |||
| The No Operation (noop) message is described in Section 2.8.13. | The No Operation (noop) message is described in Section 2.8.13. | |||
| The various MESSAGE_TYPE values are defined in Section 4. | The various MESSAGE_TYPE values are defined in Section 4. | |||
| skipping to change at line 1264 ¶ | skipping to change at line 1266 ¶ | |||
| As mentioned in Section 2.5.4.2, a Discovery message MAY be sent | As mentioned in Section 2.5.4.2, a Discovery message MAY be sent | |||
| unicast to a peer node, which SHOULD then proceed exactly as if the | unicast to a peer node, which SHOULD then proceed exactly as if the | |||
| message had been multicast. | message had been multicast. | |||
| 2.8.5. Discovery Response Message | 2.8.5. Discovery Response Message | |||
| In fragmentary CDDL, a Discovery Response message follows the | In fragmentary CDDL, a Discovery Response message follows the | |||
| pattern: | pattern: | |||
| response-message = [M_RESPONSE, session-id, initiator, ttl, | response-message = [M_RESPONSE, session-id, initiator, ttl, | |||
| (+locator-option // divert-option), ?objective)] | (+locator-option // divert-option, ?objective)] | |||
| ttl = 0..4294967295 ; in milliseconds | ttl = 0..4294967295 ; in milliseconds | |||
| A node that receives a Discovery message SHOULD send a Discovery | A node that receives a Discovery message SHOULD send a Discovery | |||
| Response message if and only if it can respond to the discovery. | Response message if and only if it can respond to the discovery. | |||
| It MUST contain the same Session ID and initiator as the Discovery | It MUST contain the same Session ID and initiator as the Discovery | |||
| message. | message. | |||
| It MUST contain a time-to-live (ttl) for the validity of the | It MUST contain a time-to-live (ttl) for the validity of the | |||
| skipping to change at line 1361 ¶ | skipping to change at line 1363 ¶ | |||
| simultaneously request sessions with each other using the same | simultaneously request sessions with each other using the same | |||
| Session ID (Section 2.7), a node MUST verify that the received | Session ID (Section 2.7), a node MUST verify that the received | |||
| Session ID is not already locally active when it receives a Request | Session ID is not already locally active when it receives a Request | |||
| message. In case of a clash, it MUST discard the Request message, in | message. In case of a clash, it MUST discard the Request message, in | |||
| which case the initiator will detect a timeout. | which case the initiator will detect a timeout. | |||
| 2.8.7. Negotiation Message | 2.8.7. Negotiation Message | |||
| In fragmentary CDDL, a Negotiation message follows the pattern: | In fragmentary CDDL, a Negotiation message follows the pattern: | |||
| negotiate-message = [M_NEGOTIATE, session-id, objective] | negotiation-message = [M_NEGOTIATE, session-id, objective] | |||
| A negotiation counterpart sends a Negotiation message in response to | A negotiation counterpart sends a Negotiation message in response to | |||
| a Request Negotiation message, a Negotiation message, or a Discovery | a Request Negotiation message, a Negotiation message, or a Discovery | |||
| message in rapid mode. A negotiation process MAY include multiple | message in rapid mode. A negotiation process MAY include multiple | |||
| steps. | steps. | |||
| The Negotiation message MUST include the relevant Negotiation | The Negotiation message MUST include the relevant Negotiation | |||
| Objective option, with its value updated according to progress in the | Objective option, with its value updated according to progress in the | |||
| negotiation. The sender MUST decrement the loop count by 1. If the | negotiation. The sender MUST decrement the loop count by 1. If the | |||
| loop count becomes zero, the message MUST NOT be sent. In this case, | loop count becomes zero, the message MUST NOT be sent. In this case, | |||
| skipping to change at line 1476 ¶ | skipping to change at line 1478 ¶ | |||
| Cached entries MUST be ignored or deleted after their lifetime | Cached entries MUST be ignored or deleted after their lifetime | |||
| expires. | expires. | |||
| 2.8.12. Invalid Message | 2.8.12. Invalid Message | |||
| In fragmentary CDDL, an Invalid message follows the pattern: | In fragmentary CDDL, an Invalid message follows the pattern: | |||
| invalid-message = [M_INVALID, session-id, ?any] | invalid-message = [M_INVALID, session-id, ?any] | |||
| This message MAY be sent by an implementation in response to an | This message MAY be sent by an implementation in response to an | |||
| incoming unicast message that it considers invalid. The session-id | incoming unicast message that it considers invalid. The Session ID | |||
| MUST be copied from the incoming message. The content SHOULD be | value MUST be copied from the incoming message. The content SHOULD | |||
| diagnostic information such as a partial copy of the invalid message | be diagnostic information such as a partial copy of the invalid | |||
| up to the maximum message size. An M_INVALID message MAY be silently | message up to the maximum message size. An M_INVALID message MAY be | |||
| ignored by a recipient. However, it could be used in support of | silently ignored by a recipient. However, it could be used in | |||
| extensibility, since it indicates that the remote node does not | support of extensibility, since it indicates that the remote node | |||
| support a new or obsolete message or option. | does not support a new or obsolete message or option. | |||
| An M_INVALID message MUST NOT be sent in response to an M_INVALID | An M_INVALID message MUST NOT be sent in response to an M_INVALID | |||
| message. | message. | |||
| 2.8.13. No Operation Message | 2.8.13. No Operation Message | |||
| In fragmentary CDDL, a No Operation message follows the pattern: | In fragmentary CDDL, a No Operation message follows the pattern: | |||
| noop-message = [M_NOOP] | noop-message = [M_NOOP] | |||
| skipping to change at line 1505 ¶ | skipping to change at line 1507 ¶ | |||
| a recipient. | a recipient. | |||
| 2.9. GRASP Options | 2.9. GRASP Options | |||
| This section defines the GRASP options for the negotiation and | This section defines the GRASP options for the negotiation and | |||
| synchronization protocol signaling. Additional options may be | synchronization protocol signaling. Additional options may be | |||
| defined in the future. | defined in the future. | |||
| 2.9.1. Format of GRASP Options | 2.9.1. Format of GRASP Options | |||
| GRASP options are CBOR objects that MUST start with an unsigned | GRASP options SHOULD be CBOR arrays that MUST start with an unsigned | |||
| integer identifying the specific option type carried in this option. | integer identifying the specific option type carried in this option. | |||
| These option types are formally defined in Section 4. Apart from | These option types are formally defined in Section 4. | |||
| that, the only format requirement is that each option MUST be a well- | ||||
| formed CBOR object. In general, a CBOR array format is RECOMMENDED | ||||
| to limit overhead. | ||||
| GRASP options may be defined to include encapsulated GRASP options. | GRASP options may be defined to include encapsulated GRASP options. | |||
| 2.9.2. Divert Option | 2.9.2. Divert Option | |||
| The Divert option is used to redirect a GRASP request to another | The Divert option is used to redirect a GRASP request to another | |||
| node, which may be more appropriate for the intended negotiation or | node, which may be more appropriate for the intended negotiation or | |||
| synchronization. It may redirect to an entity that is known as a | synchronization. It may redirect to an entity that is known as a | |||
| specific negotiation or synchronization counterpart (on-link or off- | specific negotiation or synchronization counterpart (on-link or off- | |||
| link) or a default gateway. The Divert option MUST only be | link) or a default gateway. The Divert option MUST only be | |||
| skipping to change at line 1653 ¶ | skipping to change at line 1652 ¶ | |||
| when this option is used within the Divert option. | when this option is used within the Divert option. | |||
| Note 2: Normal GRASP operations are not expected to use this option. | Note 2: Normal GRASP operations are not expected to use this option. | |||
| It is intended for special purposes such as discovering external | It is intended for special purposes such as discovering external | |||
| services. | services. | |||
| 2.9.5.4. Locator URI Option | 2.9.5.4. Locator URI Option | |||
| In fragmentary CDDL, the Locator URI option follows the pattern: | In fragmentary CDDL, the Locator URI option follows the pattern: | |||
| uri-locator = [O_URI_LOCATOR, text, | uri-locator-option = [O_URI_LOCATOR, text, | |||
| transport-proto / null, port-number / null] | transport-proto / null, port-number / null] | |||
| The content of this option is the URI of the target followed by the | 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 | protocol number and port number to be used (or by null values if not | |||
| required) [RFC3986]. | required) [RFC3986]. | |||
| Note 1: Any URI which might not be valid throughout the network in | Note 1: Any URI which might not be valid throughout the network in | |||
| question, such as one based on a Multicast DNS name [RFC6762], MUST | question, such as one based on a Multicast DNS name [RFC6762], MUST | |||
| NOT be used when this option is used within the Divert option. | NOT be used when this option is used within the Divert option. | |||
| Note 2: Normal GRASP operations are not expected to use this option. | Note 2: Normal GRASP operations are not expected to use this option. | |||
| skipping to change at line 1723 ¶ | skipping to change at line 1722 ¶ | |||
| described in Section 2.8.7. It is also used for terminating | described in Section 2.8.7. It is also used for terminating | |||
| discovery as described in Section 2.5.4 and for terminating flooding | discovery as described in Section 2.5.4 and for terminating flooding | |||
| as described in Section 2.5.6.2. It is placed in the objective | as described in Section 2.5.6.2. It is placed in the objective | |||
| rather than in the GRASP message format because, as far as the ASA is | rather than in the GRASP message format because, as far as the ASA is | |||
| concerned, it is a property of the objective itself. | concerned, it is a property of the objective itself. | |||
| The 'objective-value' field expresses the actual value of a | The 'objective-value' field expresses the actual value of a | |||
| negotiation or synchronization objective. Its format is defined in | negotiation or synchronization objective. Its format is defined in | |||
| the specification of the objective and may be a simple value or a | the specification of the objective and may be a simple value or a | |||
| data structure of any kind, as long as it can be represented in CBOR. | data structure of any kind, as long as it can be represented in CBOR. | |||
| It is optional because it is optional in a Discovery or Discovery | It is optional only in a Discovery or Discovery Response message. | |||
| Response message. | ||||
| 2.10.2. Objective Flags | 2.10.2. Objective Flags | |||
| An objective may be relevant for discovery only, for discovery and | An objective may be relevant for discovery only, for discovery and | |||
| negotiation, or for discovery and synchronization. This is expressed | negotiation, or for discovery and synchronization. This is expressed | |||
| in the objective by logical flag bits: | in the objective by logical flag bits: | |||
| objective-flags = uint .bits objective-flag | objective-flags = uint .bits objective-flag | |||
| objective-flag = &( | objective-flag = &( | |||
| F_DISC: 0 ; valid for discovery | F_DISC: 0 ; valid for discovery | |||
| skipping to change at line 1759 ¶ | skipping to change at line 1757 ¶ | |||
| As mentioned above, objective options MUST be assigned a unique name. | As mentioned above, objective options MUST be assigned a unique name. | |||
| As long as privately defined objective options obey the rules above, | As long as privately defined objective options obey the rules above, | |||
| this document does not restrict their choice of name, but the entity | this document does not restrict their choice of name, but the entity | |||
| or person concerned SHOULD publish the names in use. | or person concerned SHOULD publish the names in use. | |||
| Names are expressed as UTF-8 strings for convenience in designing | Names are expressed as UTF-8 strings for convenience in designing | |||
| objective options for localized use. For generic usage, names | objective options for localized use. For generic usage, names | |||
| expressed in the ASCII subset of UTF-8 are RECOMMENDED. Designers | expressed in the ASCII subset of UTF-8 are RECOMMENDED. Designers | |||
| planning to use non-ASCII names are strongly advised to consult | planning to use non-ASCII names are strongly advised to consult | |||
| [RFC7564] or its successor to understand the complexities involved. | [RFC8264] or its successor to understand the complexities involved. | |||
| Since GRASP compares names byte by byte, all issues of Unicode | Since GRASP compares names byte by byte, all issues of Unicode | |||
| profiling and canonicalization MUST be specified in the design of the | profiling and canonicalization MUST be specified in the design of the | |||
| objective option. | objective option. | |||
| All objective options MUST respect the CBOR patterns defined above as | All objective options MUST respect the CBOR patterns defined above as | |||
| "objective" and MUST replace the 'any' field with a valid CBOR data | "objective" and MUST replace the 'any' field with a valid CBOR data | |||
| definition for the relevant use case and application. | definition for the relevant use case and application. | |||
| An objective option that contains no additional fields beyond its | An objective option that contains no additional fields beyond its | |||
| 'loop-count' can only be a discovery objective and MUST only be used | 'loop-count' can only be a discovery objective and MUST only be used | |||
| skipping to change at line 2002 ¶ | skipping to change at line 2000 ¶ | |||
| 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] | |||
| skipping to change at line 2114 ¶ | skipping to change at line 2112 ¶ | |||
| This document defines the GeneRic Autonomic Signaling Protocol | This document defines the GeneRic Autonomic Signaling Protocol | |||
| (GRASP). | (GRASP). | |||
| Section 2.6 explains the following link-local multicast addresses | Section 2.6 explains the following link-local multicast addresses | |||
| that IANA has assigned for use by GRASP. | that IANA has assigned for use by GRASP. | |||
| Assigned in the "Link-Local Scope Multicast Addresses" subregistry of | Assigned in the "Link-Local Scope Multicast Addresses" subregistry of | |||
| the "IPv6 Multicast Address Space Registry": | the "IPv6 Multicast Address Space Registry": | |||
| Address(es): FF02::13 | Address(es): ff02::13 | |||
| Description: ALL_GRASP_NEIGHBORS | Description: ALL_GRASP_NEIGHBORS | |||
| Reference: RFC 8990 | Reference: RFC 8990 | |||
| Assigned in the "Local Network Control Block (224.0.0.0 - 224.0.0.255 | Assigned in the "Local Network Control Block (224.0.0.0 - 224.0.0.255 | |||
| (224.0.0/24))" subregistry of the "IPv4 Multicast Address Space | (224.0.0/24))" subregistry of the "IPv4 Multicast Address Space | |||
| Registry": | Registry": | |||
| Address(es): 224.0.0.119 | Address(es): 224.0.0.119 | |||
| Description: ALL_GRASP_NEIGHBORS | Description: ALL_GRASP_NEIGHBORS | |||
| Reference: RFC 8990 | Reference: RFC 8990 | |||
| skipping to change at line 2329 ¶ | skipping to change at line 2327 ¶ | |||
| [RFC2608] Guttman, E., Perkins, C., Veizades, J., and M. Day, | [RFC2608] Guttman, E., Perkins, C., Veizades, J., and M. Day, | |||
| "Service Location Protocol, Version 2", RFC 2608, | "Service Location Protocol, Version 2", RFC 2608, | |||
| DOI 10.17487/RFC2608, June 1999, | DOI 10.17487/RFC2608, June 1999, | |||
| <https://www.rfc-editor.org/info/rfc2608>. | <https://www.rfc-editor.org/info/rfc2608>. | |||
| [RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | [RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | |||
| "Remote Authentication Dial In User Service (RADIUS)", | "Remote Authentication Dial In User Service (RADIUS)", | |||
| RFC 2865, DOI 10.17487/RFC2865, June 2000, | RFC 2865, DOI 10.17487/RFC2865, June 2000, | |||
| <https://www.rfc-editor.org/info/rfc2865>. | <https://www.rfc-editor.org/info/rfc2865>. | |||
| [RFC3315] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins, | ||||
| C., and M. Carney, "Dynamic Host Configuration Protocol | ||||
| for IPv6 (DHCPv6)", RFC 3315, DOI 10.17487/RFC3315, July | ||||
| 2003, <https://www.rfc-editor.org/info/rfc3315>. | ||||
| [RFC3416] Presuhn, R., Ed., "Version 2 of the Protocol Operations | [RFC3416] Presuhn, R., Ed., "Version 2 of the Protocol Operations | |||
| for the Simple Network Management Protocol (SNMP)", | for the Simple Network Management Protocol (SNMP)", | |||
| STD 62, RFC 3416, DOI 10.17487/RFC3416, December 2002, | STD 62, RFC 3416, DOI 10.17487/RFC3416, December 2002, | |||
| <https://www.rfc-editor.org/info/rfc3416>. | <https://www.rfc-editor.org/info/rfc3416>. | |||
| [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | |||
| Stevens, "Basic Socket Interface Extensions for IPv6", | Stevens, "Basic Socket Interface Extensions for IPv6", | |||
| RFC 3493, DOI 10.17487/RFC3493, February 2003, | RFC 3493, DOI 10.17487/RFC3493, February 2003, | |||
| <https://www.rfc-editor.org/info/rfc3493>. | <https://www.rfc-editor.org/info/rfc3493>. | |||
| skipping to change at line 2390 ¶ | skipping to change at line 2383 ¶ | |||
| P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | |||
| DOI 10.17487/RFC6887, April 2013, | DOI 10.17487/RFC6887, April 2013, | |||
| <https://www.rfc-editor.org/info/rfc6887>. | <https://www.rfc-editor.org/info/rfc6887>. | |||
| [RFC7558] Lynn, K., Cheshire, S., Blanchet, M., and D. Migault, | [RFC7558] Lynn, K., Cheshire, S., Blanchet, M., and D. Migault, | |||
| "Requirements for Scalable DNS-Based Service Discovery | "Requirements for Scalable DNS-Based Service Discovery | |||
| (DNS-SD) / Multicast DNS (mDNS) Extensions", RFC 7558, | (DNS-SD) / Multicast DNS (mDNS) Extensions", RFC 7558, | |||
| DOI 10.17487/RFC7558, July 2015, | DOI 10.17487/RFC7558, July 2015, | |||
| <https://www.rfc-editor.org/info/rfc7558>. | <https://www.rfc-editor.org/info/rfc7558>. | |||
| [RFC7564] Saint-Andre, P. and M. Blanchet, "PRECIS Framework: | ||||
| Preparation, Enforcement, and Comparison of | ||||
| Internationalized Strings in Application Protocols", | ||||
| RFC 7564, DOI 10.17487/RFC7564, May 2015, | ||||
| <https://www.rfc-editor.org/info/rfc7564>. | ||||
| [RFC7575] Behringer, M., Pritikin, M., Bjarnason, S., Clemm, A., | [RFC7575] Behringer, M., Pritikin, M., Bjarnason, S., Clemm, A., | |||
| Carpenter, B., Jiang, S., and L. Ciavaglia, "Autonomic | Carpenter, B., Jiang, S., and L. Ciavaglia, "Autonomic | |||
| Networking: Definitions and Design Goals", RFC 7575, | Networking: Definitions and Design Goals", RFC 7575, | |||
| DOI 10.17487/RFC7575, June 2015, | DOI 10.17487/RFC7575, June 2015, | |||
| <https://www.rfc-editor.org/info/rfc7575>. | <https://www.rfc-editor.org/info/rfc7575>. | |||
| [RFC7576] Jiang, S., Carpenter, B., and M. Behringer, "General Gap | [RFC7576] Jiang, S., Carpenter, B., and M. Behringer, "General Gap | |||
| Analysis for Autonomic Networking", RFC 7576, | Analysis for Autonomic Networking", RFC 7576, | |||
| DOI 10.17487/RFC7576, June 2015, | DOI 10.17487/RFC7576, June 2015, | |||
| <https://www.rfc-editor.org/info/rfc7576>. | <https://www.rfc-editor.org/info/rfc7576>. | |||
| skipping to change at line 2424 ¶ | skipping to change at line 2411 ¶ | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
| <https://www.rfc-editor.org/info/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8264] Saint-Andre, P. and M. Blanchet, "PRECIS Framework: | ||||
| Preparation, Enforcement, and Comparison of | ||||
| Internationalized Strings in Application Protocols", | ||||
| RFC 8264, DOI 10.17487/RFC8264, October 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8264>. | ||||
| [RFC8368] Eckert, T., Ed. and M. Behringer, "Using an Autonomic | [RFC8368] Eckert, T., Ed. and M. Behringer, "Using an Autonomic | |||
| Control Plane for Stable Connectivity of Network | Control Plane for Stable Connectivity of Network | |||
| Operations, Administration, and Maintenance (OAM)", | Operations, Administration, and Maintenance (OAM)", | |||
| RFC 8368, DOI 10.17487/RFC8368, May 2018, | RFC 8368, DOI 10.17487/RFC8368, May 2018, | |||
| <https://www.rfc-editor.org/info/rfc8368>. | <https://www.rfc-editor.org/info/rfc8368>. | |||
| [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | ||||
| Richardson, M., Jiang, S., Lemon, T., and T. Winters, | ||||
| "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | ||||
| RFC 8415, DOI 10.17487/RFC8415, November 2018, | ||||
| <https://www.rfc-editor.org/info/rfc8415>. | ||||
| [RFC8991] Carpenter, B., Liu, B., Ed., Wang, W., and X. Gong, | [RFC8991] Carpenter, B., Liu, B., Ed., Wang, W., and X. Gong, | |||
| "GeneRic Autonomic Signaling Protocol Application Program | "GeneRic Autonomic Signaling Protocol Application Program | |||
| Interface (GRASP API)", RFC 8991, DOI 10.17487/RFC8991, | Interface (GRASP API)", RFC 8991, DOI 10.17487/RFC8991, | |||
| April 2021, <https://www.rfc-editor.org/info/rfc8991>. | April 2021, <https://www.rfc-editor.org/info/rfc8991>. | |||
| [RFC8993] Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia, | [RFC8993] Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia, | |||
| L., and J. Nobre, "A Reference Model for Autonomic | L., and J. Nobre, "A Reference Model for Autonomic | |||
| Networking", RFC 8993, DOI 10.17487/RFC8993, April 2021, | Networking", RFC 8993, DOI 10.17487/RFC8993, April 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc8993>. | <https://www.rfc-editor.org/rfc/rfc8993>. | |||
| skipping to change at line 2860 ¶ | skipping to change at line 2859 ¶ | |||
| configuration. Both SLP and DNS-SD are text-based protocols. | configuration. Both SLP and DNS-SD are text-based protocols. | |||
| Simple Network Management Protocol (SNMP) [RFC3416] uses a command/ | Simple Network Management Protocol (SNMP) [RFC3416] uses a command/ | |||
| response model not well suited for peer negotiation. NETCONF | response model not well suited for peer negotiation. NETCONF | |||
| [RFC6241] uses an RPC model that does allow positive or negative | [RFC6241] uses an RPC model that does allow positive or negative | |||
| responses from the target system, but this is still not adequate for | responses from the target system, but this is still not adequate for | |||
| negotiation. | negotiation. | |||
| There are various existing protocols that have elementary negotiation | There are various existing protocols that have elementary negotiation | |||
| abilities, such as Dynamic Host Configuration Protocol for IPv6 | abilities, such as Dynamic Host Configuration Protocol for IPv6 | |||
| (DHCPv6) [RFC3315], Neighbor Discovery (ND) [RFC4861], Port Control | (DHCPv6) [RFC8415], Neighbor Discovery (ND) [RFC4861], Port Control | |||
| Protocol (PCP) [RFC6887], Remote Authentication Dial-In User Service | Protocol (PCP) [RFC6887], Remote Authentication Dial-In User Service | |||
| (RADIUS) [RFC2865], Diameter [RFC6733], etc. Most of them are | (RADIUS) [RFC2865], Diameter [RFC6733], etc. Most of them are | |||
| configuration or management protocols. However, they either provide | configuration or management protocols. However, they either provide | |||
| only a simple request/response model in a master/slave context or | only a simple request/response model in a master/slave context or | |||
| very limited negotiation abilities. | very limited negotiation abilities. | |||
| There are some signaling protocols with an element of negotiation. | There are some signaling protocols with an element of negotiation. | |||
| For example, Resource ReSerVation Protocol (RSVP) [RFC2205] was | For example, Resource ReSerVation Protocol (RSVP) [RFC2205] was | |||
| designed for negotiating quality-of-service parameters along the path | designed for negotiating quality-of-service parameters along the path | |||
| of a unicast or multicast flow. RSVP is a very specialized protocol | of a unicast or multicast flow. RSVP is a very specialized protocol | |||
| skipping to change at line 2976 ¶ | skipping to change at line 2975 ¶ | |||
| Carsten Bormann | Carsten Bormann | |||
| Universität Bremen TZI | Universität Bremen TZI | |||
| Postfach 330440 | Postfach 330440 | |||
| D-28359 Bremen | D-28359 Bremen | |||
| Germany | Germany | |||
| Email: cabo@tzi.org | Email: cabo@tzi.org | |||
| Brian Carpenter (editor) | Brian Carpenter (editor) | |||
| Department of Computer Science | School of Computer Science | |||
| University of Auckland | University of Auckland | |||
| PB 92019 | PB 92019 | |||
| Auckland 1142 | Auckland 1142 | |||
| New Zealand | New Zealand | |||
| Email: brian.e.carpenter@gmail.com | Email: brian.e.carpenter@gmail.com | |||
| Bing Liu (editor) | Bing Liu (editor) | |||
| Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
| Q14, Huawei Campus | Q14, Huawei Campus | |||
| End of changes. 29 change blocks. | ||||
| 62 lines changed or deleted | 61 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/ | ||||