| rfc9611xml2.original.xml | rfc9611.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!DOCTYPE rfc [ | |||
| .2119.xml"> | <!ENTITY nbsp " "> | |||
| <!ENTITY RFC2367 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!ENTITY zwsp "​"> | |||
| .2367.xml"> | <!ENTITY nbhy "‑"> | |||
| <!ENTITY RFC4034 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!ENTITY wj "⁠"> | |||
| .4034.xml"> | ||||
| <!ENTITY RFC4301 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4301.xml"> | ||||
| <!ENTITY RFC5890 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5890.xml"> | ||||
| <!ENTITY RFC6698 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6698.xml"> | ||||
| <!ENTITY RFC7296 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7296.xml"> | ||||
| <!ENTITY RFC7942 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7942.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8174.xml"> | ||||
| ]> | ]> | |||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <?rfc strict="yes" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" updates="" obs | |||
| <?rfc toc="yes"?> | oletes="" category="std" docName="draft-ietf-ipsecme-multi-sa-performance-09" nu | |||
| <?rfc tocdepth="4"?> | mber="9611" consensus="true" submissionType="IETF" tocInclude="true" tocDepth="4 | |||
| <?rfc symrefs="yes"?> | " symRefs="true" sortRefs="true" version="3"> | |||
| <?rfc sortrefs="yes" ?> | ||||
| <?rfc compact="yes" ?> | ||||
| <?rfc subcompact="no" ?> | ||||
| <rfc ipr="trust200902" updates="" obsoletes="" category="std" docName="draft-iet | ||||
| f-ipsecme-multi-sa-performance-09"> | ||||
| <front> | <front> | |||
| <title>IKEv2 support for per-resource Child SAs</title> | <title abbrev="IKEv2 Support for Per-Resource Child SAs">Internet Key Exchan | |||
| ge Protocol Version 2 (IKEv2) Support for Per&nbhy;Resource Child Security Assoc | ||||
| iations (SAs)</title> | ||||
| <seriesInfo name="RFC" value="9611"/> | ||||
| <author fullname="Antony Antony" initials="A." surname="Antony"> | <author fullname="Antony Antony" initials="A." surname="Antony"> | |||
| <organization abbrev="secunet">secunet Security Networks AG</organization> | <organization abbrev="secunet">secunet Security Networks AG</organization> | |||
| <address> | <address> | |||
| <email>antony.antony@secunet.com</email> | <email>antony.antony@secunet.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="T." surname="Brunner" fullname="Tobias Brunner"> | <author initials="T." surname="Brunner" fullname="Tobias Brunner"> | |||
| <organization abbrev="codelabs">codelabs GmbH</organization> | <organization abbrev="codelabs">codelabs GmbH</organization> | |||
| <address> | <address> | |||
| <email>tobias@codelabs.ch</email> | <email>tobias@codelabs.ch</email> | |||
| skipping to change at line 48 ¶ | skipping to change at line 39 ¶ | |||
| <address> | <address> | |||
| <email>steffen.klassert@secunet.com</email> | <email>steffen.klassert@secunet.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="P." surname="Wouters" fullname="Paul Wouters"> | <author initials="P." surname="Wouters" fullname="Paul Wouters"> | |||
| <organization>Aiven</organization> | <organization>Aiven</organization> | |||
| <address> | <address> | |||
| <email>paul.wouters@aiven.io</email> | <email>paul.wouters@aiven.io</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date/> | <date month="July" year="2024"/> | |||
| <area>General</area> | <area>SEC</area> | |||
| <workgroup>Network</workgroup> | <workgroup>ipsecme</workgroup> | |||
| <keyword>IKEv2</keyword> | <keyword>IKEv2</keyword> | |||
| <keyword>IPsec</keyword> | <keyword>IPsec</keyword> | |||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| This document defines one Notify Message Status Types and one Notify Mess | In order to increase the bandwidth of IPsec traffic between peers, | |||
| age | this document defines one Notify Message Status Types and one Notify | |||
| Error Types payload for the Internet Key Exchange Protocol Version 2 (IKE | Message Error Types payload for the Internet Key Exchange Protocol | |||
| v2) | Version 2 (IKEv2) to support the negotiation of multiple Child | |||
| to support the negotiation of multiple Child Security Associations (SAs) | Security Associations (SAs) with the same Traffic Selectors used on | |||
| with | different resources, such as CPUs. | |||
| the same Traffic Selectors used on different resources, such as CPUs, to | ||||
| increase bandwidth of IPsec traffic between peers. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The SA_RESOURCE_INFO notification is used to convey information that the | The SA_RESOURCE_INFO notification is used to convey information that the | |||
| negotiated Child SA and subsequent new Child SAs with the same Traffic Se lectors | negotiated Child SA and subsequent new Child SAs with the same Traffic Se lectors | |||
| are a logical group of Child SAs where most or all of the Child SAs are | are a logical group of Child SAs where most or all of the Child SAs are | |||
| bound to a specific resource, such as a specific CPU. The TS_MAX_QUEUE | bound to a specific resource, such as a specific CPU. The TS_MAX_QUEUE | |||
| notify conveys that the peer is unwilling to create more additional Child | notify conveys that the peer is unwilling to create more additional Child | |||
| SAs for this particular negotiated Traffic Selector combination. | SAs for this particular negotiated Traffic Selector combination. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Using multiple Child SAs with the same Traffic Selectors has the benefit | Using multiple Child SAs with the same Traffic Selectors has the benefit | |||
| that each resource holding the Child SA has its own Sequence Number Count er, | that each resource holding the Child SA has its own Sequence Number Count er, | |||
| ensuring that CPUs don't have to synchronize their cryptographic state or disable | ensuring that CPUs don't have to synchronize their cryptographic state or disable | |||
| their packet replay protection. | their packet replay protection. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction"> | <section numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <t> | <t> | |||
| Most IPsec implementations are currently limited to using one | Most IPsec implementations are currently limited to using one | |||
| hardware queue or a single CPU resource for a Child SA. Running | hardware queue or a single CPU resource for a Child SA. | |||
| Running | ||||
| packet stream encryption in parallel can be done, but there is a bottlene ck of | packet stream encryption in parallel can be done, but there is a bottlene ck of | |||
| different parts of the hardware locking or waiting to get their | different parts of the hardware locking or waiting to get their | |||
| sequence number assigned for the packet it is encrypting. The | sequence number assigned for the packet being encrypted. The | |||
| result is that a machine with many such resources is limited to | result is that a machine with many such resources is limited to | |||
| only using one of these resources per Child SA. This severely | using only one of these resources per Child SA. This severely | |||
| limits the throughput that can be attained. For example, at the | limits the throughput that can be attained. For example, at the | |||
| time of writing, an unencrypted link of 10Gbps or more is commonly | time of writing, an unencrypted link of 10 Gbps or more is commonly | |||
| reduced to 2-5Gbps when IPsec is used to encrypt the link using | reduced to 2-5 Gbps when IPsec is used to encrypt the link using | |||
| AES-GCM. By using the implementation specified in this document, | AES-GCM. By using the implementation specified in this document, | |||
| aggregate throughput increased from 5Gbps using 1 CPU to 40-60 | aggregate throughput increased from 5Gbps using 1 CPU to 40-60 | |||
| Gbps using 25-30 CPUs. | Gbps using 25-30 CPUs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| While this could be (partially) mitigated by setting up multiple | While this could be (partially) mitigated by setting up multiple | |||
| narrowed Child SAs, for example using Populate From Packet (PFP) | narrowed Child SAs (for example, using Populate From Packet (PFP) | |||
| as specified in IPsec Architecture <xref target="RFC4301"/>, this | as specified in IPsec architecture <xref target="RFC4301" format="default | |||
| "/>), this | ||||
| IPsec feature would cause too many Child SAs (one per network flow) | IPsec feature would cause too many Child SAs (one per network flow) | |||
| or too few Child SAs (one network flow used on multiple CPUs). PFP is | or too few Child SAs (one network flow used on multiple CPUs). PFP is | |||
| also not widely implemented. | also not widely implemented. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To make better use of multiple network queues and CPUs, it can | To make better use of multiple network queues and CPUs, it can | |||
| be beneficial to negotiate and install multiple Child | be beneficial to negotiate and install multiple Child | |||
| SAs with identical Traffic Selectors. IKEv2 <xref target="RFC7296"/> | SAs with identical Traffic Selectors. IKEv2 <xref target="RFC7296" format ="default"/> | |||
| already allows installing multiple Child SAs with identical Traffic | already allows installing multiple Child SAs with identical Traffic | |||
| Selectors, but it offers no method to indicate that the additional Child | Selectors, but it offers no method to indicate that the additional Child | |||
| SA is being requested for performance increase reasons and is restricted | SA is being requested for performance increase reasons and is restricted | |||
| to some resource (queue or CPU). | to some resource (queue or CPU). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When an IKEv2 peer is receiving more additional Child SA's for a single | When an IKEv2 peer is receiving more additional Child SAs for a single | |||
| set of Traffic Selectors than it is willing to create, it can return an | set of Traffic Selectors than it is willing to create, it can return an | |||
| error notify of TS_MAX_QUEUE. | error notify of TS_MAX_QUEUE. | |||
| </t> | </t> | |||
| <section title="Requirements Language"> | <section numbered="true" toc="default"> | |||
| <name>Requirements Language</name> | ||||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | ", | |||
| 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| when, they appear in all capitals, as shown here. | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| </t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| be | ||||
| interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | ||||
| target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
| shown here. | ||||
| </t> | ||||
| </section> | </section> | |||
| <section title="Terminology"> | <section numbered="true" toc="default"> | |||
| <t>This document uses the following terms defined in IKEv2 <xref target=" | <name>Terminology</name> | |||
| RFC7296"/>: | <t>This document uses the following terms defined in IKEv2 <xref target= | |||
| Notification Data, Traffic Selectors (TS), TSi/TSr, Child SA, | "RFC7296" format="default"/>: | |||
| Configuration Payload (CP), IKE SA, CREATE_CHILD_SA and NO_ADDITIONAL_ | Notification Data, Traffic Selector (TS), Traffic Selector initiator ( | |||
| SAS. | TSi), Traffic Selector responder (TSr), Child SA, | |||
| </t> | Configuration Payload (CP), IKE SA, CREATE_CHILD_SA, and NO_ADDITIONAL | |||
| <t>This document also uses the following terms defined in <xref target="R | _SAS. | |||
| FC4301"/>: | </t> | |||
| SPD, SA. | <t>This document also uses the following terms defined in <xref target=" | |||
| </t> | RFC4301" format="default"/>: | |||
| Security Policy Database (SPD), SA. | ||||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Performance bottlenecks" anchor="performance"> | <section anchor="performance" numbered="true" toc="default"> | |||
| <name>Performance Bottlenecks</name> | ||||
| <t> | <t> | |||
| There are several pragmatic reasons why most implementations must restrict a | There are several pragmatic reasons why most implementations must restrict a | |||
| Child Security Association (SA) to a single specific hardware resource. A | Child Security Association (SA) to a single specific hardware resource. A | |||
| primary limitation arises from the challenges associated with sharing | primary limitation arises from the challenges associated with sharing | |||
| cryptographic states, counters, and sequence numbers among multiple CPUs. When | cryptographic states, counters, and sequence numbers among multiple CPUs. When | |||
| these CPUs attempt to simultaneously utilize shared states, it becomes | these CPUs attempt to simultaneously utilize shared states, it becomes | |||
| impractical to do so without incurring a significant performance penalty. It is | impractical to do so without incurring a significant performance penalty. It is | |||
| necessary to negotiate and establish multiple Child Security Associations (SAs) | necessary to negotiate and establish multiple Child SAs | |||
| with identical Traffic Selector initiator (TSi) and Traffic Selector respo nder | with identical Traffic Selector initiator (TSi) and Traffic Selector respo nder | |||
| (TSr) on a per-resource basis." | (TSr) on a per-resource basis. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Negotiation of CPU specific Child SAs" anchor="neg_cpu"> | <section anchor="neg_cpu" numbered="true" toc="default"> | |||
| <name>Negotiation of Resource-Specific Child SAs</name> | ||||
| <t> | <t> | |||
| An initial IKEv2 exchange is used to setup an IKE SA and the | An initial IKEv2 exchange is used to set up an IKE SA and the | |||
| initial Child SA. If multiple Child SAs with the same Traffic | initial Child SA. If multiple Child SAs with the same Traffic | |||
| Selectors that are bound to a single resource are desired, the | Selectors that are bound to a single resource are desired, the | |||
| initiator will add the SA_RESOURCE_INFO notify payload to the | initiator will add the SA_RESOURCE_INFO notify payload to the | |||
| Exchange negotiating the Child SA (e.g. IKE_AUTH or CREATE_CHILD_SA). | Exchange negotiating the Child SA (e.g., IKE_AUTH or CREATE_CHILD_SA). | |||
| If this initial Child SA will be tied to a specific resource, it | If this initial Child SA will be tied to a specific resource, it | |||
| MAY indicate this by including an identifier in the Notification | <bcp14>MAY</bcp14> indicate this by including an identifier in the Notifi | |||
| Data. A responder that is willing to have multiple Child SAs | cation | |||
| Data. | ||||
| <!--[rfed] Should "Notify Data" be "Notification Data" here? | ||||
| There are zero instance of "Notify Data" in RFCs, and | ||||
| "Notification Data" is used in the preceding sentence. | ||||
| Also, may the article "a" be removed? | ||||
| Original: | ||||
| A responder that | ||||
| is willing to have multiple Child SAs for the same Traffic Selectors | ||||
| will respond by also adding the SA_RESOURCE_INFO notify payload in | ||||
| which it MAY add a non-zero Notify Data. | ||||
| Perhaps: | ||||
| A responder that | ||||
| is willing to have multiple Child SAs for the same Traffic Selectors | ||||
| will respond by also adding the SA_RESOURCE_INFO notify payload in | ||||
| which it MAY add non-zero Notification Data. | ||||
| Similarly, should "notify data" be updated in the Security Considerations sectio | ||||
| n? | ||||
| Original: The notify data SHOULD NOT be an identifier ... | ||||
| Perhaps: The Notification Data SHOULD NOT be an identifier ... | ||||
| --> | ||||
| A responder that is willing to have multiple Child SAs | ||||
| for the same Traffic Selectors will respond by also adding the | for the same Traffic Selectors will respond by also adding the | |||
| SA_RESOURCE_INFO notify payload in which it MAY add a non-zero | SA_RESOURCE_INFO notify payload in which it <bcp14>MAY</bcp14> add a non- | |||
| Notify Data. | zero | |||
| Notification Data. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Additional resource-specific Child SAs are negotiated as regular Child | Additional resource-specific Child SAs are negotiated as regular Child | |||
| SAs using the CREATE_CHILD_SA exchange and are similarly identified by an | SAs using the CREATE_CHILD_SA exchange and are similarly identified by an | |||
| accompanying SA_RESOURCE_INFO notification.</t> | accompanying SA_RESOURCE_INFO notification.</t> | |||
| <t> | <t> | |||
| Upon installation, each resource-specific Child SA is | Upon installation, each resource-specific Child SA is | |||
| associated with an additional local selector, such as the CPU. | associated with an additional local selector, such as the CPU. | |||
| These resource-specific Child SAs MUST be negotiated with identical | These resource-specific Child SAs <bcp14>MUST</bcp14> be negotiated with identical | |||
| Child SA properties that were negotiated for the initial Child | Child SA properties that were negotiated for the initial Child | |||
| SA. This includes cryptographic algorithms, Traffic Selectors, | SA. This includes cryptographic algorithms, Traffic Selectors, | |||
| Mode (e.g. transport mode), compression usage, etc. However, each | Mode (e.g., transport mode), compression usage, etc. However, each | |||
| Child SA does have its own keying material that is individually derived | Child SA does have its own keying material that is individually derived | |||
| according to the regular IKEv2 process. The SA_RESOURCE_INFO | according to the regular IKEv2 process. The SA_RESOURCE_INFO | |||
| notify payload MAY be empty or MAY contain some identifying data. | notify payload <bcp14>MAY</bcp14> be empty or <bcp14>MAY</bcp14> contain | |||
| This identifying data SHOULD be a unique identifier within all | some identifying data. | |||
| the Child SAs with the same TS payloads and the peer MUST only | This identifying data <bcp14>SHOULD</bcp14> be a unique identifier within | |||
| all | ||||
| the Child SAs with the same TS payloads, and the peer <bcp14>MUST</bcp14> | ||||
| only | ||||
| use it for debugging purposes. | use it for debugging purposes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Additional Child SAs can be started on-demand or can be started | Additional Child SAs can be started on demand or can be started | |||
| all at once. Peers may also delete specific per-resource Child | all at once. Peers may also delete specific per-resource Child | |||
| SAs if they deem the associated resource to be idle. | SAs if they deem the associated resource to be idle. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| During the CREATE_CHILD_SA rekey for the Child SA, the | During the CREATE_CHILD_SA rekey for the Child SA, the | |||
| SA_RESOURCE_INFO notification MAY be included, but regardless of | SA_RESOURCE_INFO notification <bcp14>MAY</bcp14> be included, but regardl ess of | |||
| whether or not it is included, the rekeyed Child SA should be bound | whether or not it is included, the rekeyed Child SA should be bound | |||
| to the same resource(s) as the Child SA that is being rekeyed. | to the same resource(s) as the Child SA that is being rekeyed. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Implementation Considerations" anchor="impl_consider"> | <section anchor="impl_consider" numbered="true" toc="default"> | |||
| <name>Implementation Considerations</name> | ||||
| <t> | <t> | |||
| There are various considerations that an implementation can | There are various considerations that an implementation can | |||
| use to determine the best procedure to install multiple Child SAs. | use to determine the best procedure to install multiple Child SAs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A simple procedure could be to install one additional Child SA | A simple procedure could be to install one additional Child SA | |||
| on each CPU. An implementation can ensure that one Child SA can be | on each CPU. An implementation can ensure that one Child SA can be | |||
| used by all CPUs, so that while negotiating a new per-CPU Child SA, | used by all CPUs, so that while negotiating a new per-CPU Child SA, | |||
| which typically takes 1 RTT delay, the CPU with no CPU-specific | which typically takes 1 RTT delay, the CPU with no CPU-specific | |||
| Child SA can still encrypt its packets using the Child SA that is | Child SA can still encrypt its packets using the Child SA that is | |||
| available for all CPUs. Alternatively, if an implementation finds | available for all CPUs. Alternatively, if an implementation finds | |||
| it needs to encrypt a packet but the current CPU does not have | it needs to encrypt a packet but the current CPU does not have | |||
| the resources to encrypt this packet, it can relay that packet | the resources to encrypt this packet, it can relay that packet | |||
| to a specific CPU that does have the capability to encrypt the | to a specific CPU that does have the capability to encrypt the | |||
| packet, although this will come with a performance penalty. | packet, although this will come with a performance penalty. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Performing per-CPU Child SA negotiations can result in both peers | Performing per-CPU Child SA negotiations can result in both peers | |||
| initiating additional Child SAs at once. This is especially likely | initiating additional Child SAs simultaneously. This is especially likely | |||
| if per-CPU Child SAs are triggered by individual SADB_ACQUIRE | if per-CPU Child SAs are triggered by individual SADB_ACQUIRE messages | |||
| <xref target="RFC2367"/> messages. Responders should install the | <xref target="RFC2367" format="default"/>. Responders should install the | |||
| additional Child SA on a CPU with the least amount of additional | additional Child SA on a CPU with the least amount of additional | |||
| Child SAs for this TSi/TSr pair. | Child SAs for this TSi/TSr pair. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When the number of queue or CPU resources are different between the | When the number of queue or CPU resources are different between the | |||
| peers, the peer with the least amount of resources may decide to | peers, the peer with the least amount of resources may decide to | |||
| not install a second outbound Child SA for the same resource as | not install a second outbound Child SA for the same resource, as | |||
| it will never use it to send traffic. However, it must install | it will never use it to send traffic. However, it must install | |||
| all inbound Child SAs as it has committed to receiving traffic | all inbound Child SAs because it has committed to receiving traffic | |||
| on these negotiated Child SAs. | on these negotiated Child SAs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If per-CPU packet trigger (e.g. SADB_ACQUIRE) messages are implemented | If per-CPU packet trigger (e.g., SADB_ACQUIRE) messages are implemented | |||
| (see <xref target="Operations"/>), | (see <xref target="Operations" format="default"/>), | |||
| the Traffic Selector (TSi) entry containing the information of the | the Traffic Selector (TSi) entry containing the information of the | |||
| trigger packet should be included in the TS set similarly to | trigger packet should be included in the TS set similarly to | |||
| regular Child SAs as specified in IKEv2 <xref target="RFC7296"/> Section | regular Child SAs as specified in IKEv2 <xref target="RFC7296" format="de | |||
| 2.9. | fault" section="2.9" | |||
| sectionFormat="comma"/>. | ||||
| Based on the trigger TSi entry, an implementation can select the most | Based on the trigger TSi entry, an implementation can select the most | |||
| optimal target CPU to install the additional Child SA on. For example, | optimal target CPU to install the additional Child SA on. For example, | |||
| if the trigger packet was for a TCP destination to port 25 (SMTP), it | if the trigger packet was for a TCP destination to port 25 (SMTP), it | |||
| might be able to install the Child SA on the CPU that is also running | might be able to install the Child SA on the CPU that is also running | |||
| the mail server process. Trigger packet Traffic Selectors are | the mail server process. Trigger packet Traffic Selectors are | |||
| documented in IKEv2 <xref target="RFC7296"/> Section 2.9. | documented in IKEv2 <xref target="RFC7296" format="default" section="2.9" sectionFormat="comma"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As per IKEv2, rekeying a Child SA SHOULD use the same (or | As per IKEv2, rekeying a Child SA <bcp14>SHOULD</bcp14> use the same (or | |||
| wider) Traffic Selectors to ensure that the new Child SA covers | wider) Traffic Selectors to ensure that the new Child SA covers | |||
| everything that the rekeyed Child SA covers. This includes | everything that the rekeyed Child SA covers. | |||
| Traffic Selectors negotiated via Configuration Payloads (CP) | This includes | |||
| such as INTERNAL_IP4_ADDRESS which may use the original wide TS | Traffic Selectors negotiated via Configuration Payloads | |||
| such as INTERNAL_IP4_ADDRESS, which may use the original wide TS | ||||
| set or use the narrowed TS set. | set or use the narrowed TS set. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Payload Format" anchor="payload_formats"> | <section anchor="payload_formats" numbered="true" toc="default"> | |||
| <name>Payload Format</name> | ||||
| <t> | <t> | |||
| The Notify Payload format is defined in IKEv2 <xref target="RFC7296"/> | The Notify Payload format is defined in IKEv2 <xref target="RFC7296" form | |||
| section 3.10, and is copied here for convenience. | at="default" section="3.10" sectionFormat="comma"/>, and is copied here for conv | |||
| enience. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| All multi-octet fields representing integers are laid out in big | All multi-octet fields representing integers are laid out in big | |||
| endian order (also known as "most significant byte first", or | endian order (also known as "most significant byte first", or | |||
| "network byte order"). | "network byte order"). | |||
| </t> | </t> | |||
| <section title="SA_RESOURCE_INFO Notify Message Status Type payload" ancho | <section anchor="payload_info_cpu" numbered="true" toc="default"> | |||
| r="payload_info_cpu"> | <name>SA_RESOURCE_INFO Notify Message Status Type Payload</name> | |||
| <figure align="center"> | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-----------------------------+-------------------------------+ | +-------------------------------+-------------------------------+ | |||
| ! Next Payload !C! RESERVED ! Payload Length ! | | Next Payload |C| RESERVED | Payload Length | | |||
| +---------------+---------------+-------------------------------+ | +---------------+---------------+-------------------------------+ | |||
| ! Protocol ID ! SPI Size ! Notify Message Type ! | | Protocol ID | SPI Size | Notify Message Type | | |||
| +---------------+---------------+-------------------------------+ | +---------------+---------------+-------------------------------+ | |||
| ! ! | | | | |||
| ~ Resource Identifier (optional) ~ | ~ Resource Identifier (optional) ~ | |||
| ! ! | | | | |||
| +-------------------------------+-------------------------------+ | +-------------------------------+-------------------------------+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | ||||
| <t> | <dl> | |||
| <list style="symbols"> | <dt>(C)ritical flag -</dt><dd><bcp14>MUST</bcp14> be 0.</dd> | |||
| <t>Protocol ID (1 octet) - MUST be 0. MUST be ignored if not 0.</t> | <dt>Protocol ID (1 octet) -</dt><dd><bcp14>MUST</bcp14> be 0. <bcp14>M | |||
| <t>SPI Size (1 octet) - MUST be 0. MUST be ignored if not 0.</t> | UST</bcp14> be ignored if not 0.</dd> | |||
| <t>Notify Status Message Type value (2 octets) - set to [TBD1].</t> | <dt>SPI Size (1 octet) -</dt><dd><bcp14>MUST</bcp14> be 0. <bcp14>MUST | |||
| <t>Resource Identifier (optional). This opaque data may be set to co | </bcp14> be ignored if not 0.</dd> | |||
| nvey the local identity of the resource.</t> | <dt>Notify Status Message Type value (2 octets) -</dt><dd>set to 16444 | |||
| </list> | .</dd> | |||
| </t> | <dt>Resource Identifier (optional) -</dt><dd>This opaque data may be s | |||
| et to convey the local identity of the resource.</dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| <section title="TS_MAX_QUEUE Notify Message Error Type Payload" anchor="pa | <section anchor="payload_max_q" numbered="true" toc="default"> | |||
| yload_max_q"> | <name>TS_MAX_QUEUE Notify Message Error Type Payload</name> | |||
| <figure align="center"> | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +---------------+---------------+-------------------------------+ | +---------------+---------------+-------------------------------+ | |||
| ! Next Payload !C! RESERVED ! Payload Length ! | | Next Payload |C| RESERVED | Payload Length | | |||
| +---------------+---------------+-------------------------------+ | +---------------+---------------+-------------------------------+ | |||
| ! Protocol ID ! SPI Size ! Notify Message Type ! | | Protocol ID | SPI Size | Notify Message Type | | |||
| +---------------+---------------+-------------------------------+ | +---------------+---------------+-------------------------------+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | <dl> | |||
| <t> | <dt>(C)ritical flag -</dt><dd><bcp14>MUST</bcp14> be 0.</dd> | |||
| <list style="symbols"> | <dt>Protocol ID (1 octet) -</dt><dd><bcp14>MUST</bcp14> be 0. <bcp14>M | |||
| <t>Protocol ID (1 octet) - MUST be 0. MUST be ignored if not 0.</t> | UST</bcp14> be ignored if not 0.</dd> | |||
| <t>SPI Size (1 octet) - MUST be 0. MUST be ignored if not 0.</t> | <dt>SPI Size (1 octet) -</dt><dd><bcp14>MUST</bcp14> be 0. <bcp14>MUST | |||
| <t>Notify Message Error Type (2 octets) - set to [TBD2]</t> | </bcp14> be ignored if not 0.</dd> | |||
| <dt>Notify Message Error Type (2 octets) -</dt><dd>set to 48.</dd> | ||||
| </dl> | ||||
| <t>There is no data associated with this Notify type.</t> | <t>There is no data associated with this Notify type.</t> | |||
| </list> | ||||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="Operations" title="Operational Considerations"> | <section anchor="Operations" numbered="true" toc="default"> | |||
| <t> | <name>Operational Considerations</name> | |||
| Implementations supporting per-CPU SAs SHOULD extend their local | <t> | |||
| Implementations supporting per-CPU SAs <bcp14>SHOULD</bcp14> extend their | ||||
| local | ||||
| SPD selector, and the mechanism of on-demand negotiation that is | SPD selector, and the mechanism of on-demand negotiation that is | |||
| triggered by traffic to include a CPU (or queue) identifier in | triggered by traffic to include a CPU (or queue) identifier in | |||
| their packet trigger (e.g. SADB_ACQUIRE) message from the SPD to | their packet trigger (e.g., SADB_ACQUIRE) message from the SPD to | |||
| the IKE daemon. An implementation which does not support | the IKE daemon. An implementation that does not support | |||
| receiving per-CPU packet trigger messages MAY initiate all its Child | receiving per-CPU packet trigger messages <bcp14>MAY</bcp14> initiate all | |||
| its Child | ||||
| SAs immediately upon receiving the (only) packet trigger message it | SAs immediately upon receiving the (only) packet trigger message it | |||
| will receive from the IPsec stack. Such implementations also need | will receive from the IPsec stack. Such an implementation also needs | |||
| to be careful when receiving a Delete Notify request for a per-CPU | to be careful when receiving a Delete Notify request for a per-CPU | |||
| Child SA, as it has no method to detect when it should bring up such | Child SA, as it has no method to detect when it should bring up such | |||
| a per-CPU Child SA again later. And bringing the deleted per-CPU | a per-CPU Child SA again later. Also, bringing the deleted per-CPU | |||
| Child SA up again immediately after receiving the Delete Notify | Child SA up again immediately after receiving the Delete Notify | |||
| might cause an infinite loop between the peers. Another issue of | might cause an infinite loop between the peers. Another issue with | |||
| not bringing up all its per-CPU Child SAs is that if the peer acts | not bringing up all its per-CPU Child SAs is that if the peer acts | |||
| similarly, the two peers might end up with only the first Child | similarly, the two peers might end up with only the first Child | |||
| SA without ever activating any per-CPU Child SAs. It is therefor | SA without ever activating any per-CPU Child SAs. It is therefore | |||
| RECOMMENDED to implement per-CPU packet trigger messages. | <bcp14>RECOMMENDED</bcp14> to implement per-CPU packet trigger messages. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Peers SHOULD be flexible with the maximum number of Child SAs they | Peers <bcp14>SHOULD</bcp14> be flexible with the maximum number of Child S | |||
| allow for a given TSi/TSr combination to account for corner cases. For | As they | |||
| allow for a given TSi/TSr combination in order to account for corner cases | ||||
| . For | ||||
| example, during Child SA rekeying, there might be a large number | example, during Child SA rekeying, there might be a large number | |||
| of additional Child SAs created before the old Child SAs are torn | of additional Child SAs created before the old Child SAs are torn | |||
| down. Similarly, when using on-demand Child SAs, both ends could | down. Similarly, when using on-demand Child SAs, both ends could | |||
| trigger multiple Child SA requests as the initial packet causing | trigger multiple Child SA requests as the initial packet causing | |||
| the Child SA negotiation might have been transported to the peer | the Child SA negotiation might have been transported to the peer | |||
| via the first Child SA where its reply packet might also trigger an | via the first Child SA, where its reply packet might also trigger an | |||
| on-demand Child SA negotiation to start. As additional Child SAs | on-demand Child SA negotiation to start. As additional Child SAs | |||
| consume little additional resources, allowing at the very least double | consume little additional resources, allowing at the very least double | |||
| the number of available CPUs is RECOMMENDED. An implementation MAY allow | the number of available CPUs is <bcp14>RECOMMENDED</bcp14>. An implementat ion <bcp14>MAY</bcp14> allow | |||
| unlimited additional Child SAs and only limit this number based on its | unlimited additional Child SAs and only limit this number based on its | |||
| generic resource protection strategies that are used to require COOKIES | generic resource protection strategies that are used to require COOKIES | |||
| or refuse new IKE or Child SA negotiations. Although having a very large | or refuse new IKE or Child SA negotiations. Although having a very large | |||
| number (e.g. hundreds or thousands) of SAs may slow down per-packet SAD lo | number (e.g., hundreds or thousands) of SAs may slow down per-packet SAD l | |||
| okup. | ookup. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Implementations might support dynamically moving a per-CPU Child | Implementations might support dynamically moving a per-CPU Child | |||
| SAs from one CPU to another CPU. If this method is supported, | SA from one CPU to another CPU. If this method is supported, | |||
| implementations must be careful to move both the inbound and outbound | implementations must be careful to move both the inbound and outbound | |||
| SAs. If the IPsec endpoint is a gateway, it can move the inbound SA | SAs. If the IPsec endpoint is a gateway, it can move the inbound SA | |||
| and outbound SA independently of each other. It is likely that | and outbound SA independently of each other. It is likely that | |||
| for a gateway, IPsec traffic would be asymmetric. If the IPsec | for a gateway, IPsec traffic would be asymmetric. If the IPsec | |||
| endpoint is the same host responsible for generating the traffic, | endpoint is the same host responsible for generating the traffic, | |||
| the inbound and outbound SAs SHOULD remain as a pair on the same CPU. | the inbound and outbound SAs <bcp14>SHOULD</bcp14> remain as a pair on the same CPU. | |||
| If a host previously skipped installing an outbound SA because it | If a host previously skipped installing an outbound SA because it | |||
| would be an unused duplicate outbound SA, it will have to create | would be an unused duplicate outbound SA, it will have to create | |||
| and add the previously skipped outbound SA to the SAD with the new | and add the previously skipped outbound SA to the SAD with the new | |||
| CPU ID. The inbound SA may not have CPU ID in the SAD. Adding the | CPU ID. The inbound SA may not have a CPU ID in the SAD. Adding the | |||
| outbound SA to the SAD requires access to the key material, whereas | outbound SA to the SAD requires access to the key material, whereas | |||
| for updating the CPU selector on an existing outbound SAs access | updating the CPU selector on an existing outbound SAs might not require acc | |||
| to key material might not be needed. To support this, the IKE | ess | |||
| to key material. To support this, the IKE | ||||
| software might have to hold on to the key material longer than it | software might have to hold on to the key material longer than it | |||
| normally would, as it might actively attempt to destroy key material | normally would, as it might actively attempt to destroy key material | |||
| from memory that the IKE daemon no longer needs access to. | from memory that the IKE daemon no longer needs access to. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An implementation that does not accept any further resource specific | An implementation that does not accept any further resource-specific | |||
| Child SAs MUST NOT return the NO_ADDITIONAL_SAS error because this | Child SAs <bcp14>MUST NOT</bcp14> return the NO_ADDITIONAL_SAS error because | |||
| can be interpreted by the peer that no other Child SAs with different | it | |||
| TSi/TSr are allowed either. Instead, it MUST return TS_MAX_QUEUE. | could be misinterpreted by the peer to mean that no other Child SA with | |||
| </t> | a different TSi and/or TSr is allowed either. Instead, it <bcp14>MUST</bcp14> | |||
| return TS_MAX_QUEUE. | ||||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="Security" title="Security Considerations"> | <section anchor="Security" numbered="true" toc="default"> | |||
| <t> | <name>Security Considerations</name> | |||
| <t> | ||||
| Similar to how an implementation should limit the number of | Similar to how an implementation should limit the number of | |||
| half-open SAs to limit the impact of a denial of service attack, | half-open SAs to limit the impact of a denial-of-service attack, | |||
| it is RECOMMENDED that an implementation limits the maximum number of addi | it is <bcp14>RECOMMENDED</bcp14> that an implementation limits the maximum | |||
| tional | number of additional | |||
| Child SAs allowed per unique TSi/TSr. | Child SAs allowed per unique TSi/TSr. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Using multiple resource specific child SAs makes sense for | Using multiple resource-specific child SAs makes sense for | |||
| high volume IPsec connections on IPsec gateway machines where the | high-volume IPsec connections on IPsec gateway machines where the | |||
| administrator has a trust relationship with the peer's | administrator has a trust relationship with the peer's | |||
| administrator and abuse is unlikely and easily escalated to resolve. | administrator and abuse is unlikely and easily escalated to resolve. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This trust relationship is usually not present for the Remote | This trust relationship is usually not present for the deployments of remo | |||
| Access VPN type deployments, and allowing per-CPU Child SA's | te | |||
| is NOT RECOMMENDED in these scenarios. Therefore, it is also NOT | access VPNs, and allowing per-CPU Child SAs | |||
| RECOMMENDED to allow per-CPU Child SAs per default. | is <bcp14>NOT RECOMMENDED</bcp14> in these scenarios. Therefore, it is als | |||
| </t> | o <bcp14>NOT | |||
| <t> | RECOMMENDED</bcp14> to allow per-CPU Child SAs by default. | |||
| </t> | ||||
| <t> | ||||
| The SA_RESOURCE_INFO notify contains an optional data payload that | The SA_RESOURCE_INFO notify contains an optional data payload that | |||
| can be used by the peer to identify the Child SA belonging to a | can be used by the peer to identify the Child SA belonging to a | |||
| specific resource. The notify data SHOULD NOT be an identifier that | specific resource. Notification data <bcp14>SHOULD NOT</bcp14> be an iden tifier that | |||
| can be used to gain information about the hardware. For example, | can be used to gain information about the hardware. For example, | |||
| using the CPU number itself as identifier might give an attacker | using the CPU number itself as the identifier might give an attacker | |||
| knowledge which packets are handled by which CPU ID and it might | knowledge of which packets are handled by which CPU ID, and it might | |||
| optimize a brute force attack against the system. | optimize a brute-force attack against the system. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Implementation Status" anchor="impl_status"> | <section anchor="IANA" numbered="true" toc="default"> | |||
| <t> | <name>IANA Considerations</name> | |||
| [Note to RFC Editor: Please remove this section and the reference to | ||||
| <xref target="RFC7942"/> before publication.] | ||||
| </t> | ||||
| <t> | ||||
| This section records the status of known implementations of the | ||||
| protocol defined by this specification at the time of posting of | ||||
| this Internet-Draft, and is based on a proposal described in | ||||
| <xref target="RFC7942"/>. The description of implementations in this | ||||
| section is intended to assist the IETF in its decision processes | ||||
| in progressing drafts to RFCs. Please note that the listing of | ||||
| any individual implementation here does not imply endorsement | ||||
| by the IETF. Furthermore, no effort has been spent to verify the | ||||
| information presented here that was supplied by IETF contributors. | ||||
| This is not intended as, and must not be construed to be, a catalog | ||||
| of available implementations or their features. Readers are advised | ||||
| to note that other implementations may exist. | ||||
| </t> | ||||
| <t> | ||||
| According to <xref target="RFC7942"/>, "this will allow reviewers | ||||
| and working groups to assign due consideration to documents that | ||||
| have the benefit of running code, which may serve as evidence of | ||||
| valuable experimentation and feedback that have made the implemented | ||||
| protocols more mature. It is up to the individual working groups | ||||
| to use this information as they see fit". | ||||
| </t> | ||||
| <t> | <t> | |||
| Authors are requested to add a note to the RFC Editor at the | IANA has registered one new value in the "IKEv2 Notify Message Status Ty | |||
| top of this section, advising the Editor to remove the entire | pes" registry. | |||
| section before publication, as well as the reference to <xref target="RFC7 | </t> | |||
| 942"/>. | <table anchor="iana_requests_i"> | |||
| </t> | <thead> | |||
| <section anchor="section.impl-status.xfrm" title="Linux XFRM"> | <tr> | |||
| <t> | <th>Value</th> | |||
| <list style="hanging"> | <th>Notify Message Status Type</th> | |||
| <t hangText="Organization: ">Linux kernel XFRM</t> | <th>Reference</th> | |||
| <t hangText="Name: ">XFRM-PCPU-v7 https://git.kernel.org/pub/scm/lin | </tr> | |||
| ux/kernel/git/klassert/linux-stk.git/log/?h=xfrm-pcpu-v7</t> | </thead> | |||
| <t hangText="Description: "> An initial Kernel IPsec implementation | <tbody> | |||
| of the per-CPU method.</t> | <tr> | |||
| <t hangText="Level of maturity: ">Alpha</t> | <td>16444</td> | |||
| <t hangText="Coverage: "> | <td>SA_RESOURCE_INFO</td> | |||
| Implements a general Child SA and per-CPU Child SAs. It only support | <td>RFC 9611</td> | |||
| s | </tr> | |||
| the NETLINK API. The PFKEYv2 API is not supported.</t> | </tbody> | |||
| <t hangText="Licensing: ">GPLv2</t> | </table> | |||
| <t hangText="Implementation experience: "> The Linux XFRM | ||||
| implementation added two additional attributes to support per-CPU S | ||||
| As. | ||||
| There is a new attribute XFRMA_SA_PCPU, u32, for the SAD entry. | ||||
| This attribute should present on the outgoing SA, per-CPU Child SAs | ||||
| , | ||||
| starting from 0. This attribute MUST NOT be present on the first | ||||
| XFRM SA. It is used by the kernel only for the outgoing traffic, | ||||
| (clear to encrypted). | ||||
| The incoming SAs do not need XFRMA_SA_PCPU attribute. XFRM stack ca | ||||
| n not | ||||
| use CPU id on the incoming SA. The kernel internally sets the valu | ||||
| e to | ||||
| 0xFFFFFF for the incoming SA and the initial Child SA that can be u | ||||
| sed by | ||||
| any CPU. | ||||
| However, one may add XFRMA_SA_PCPU to the incoming per-CPU SA to s | ||||
| teer | ||||
| the ESP flow, to a specific Q or CPU e.g ethtool ntuple configurati | ||||
| on. | ||||
| The SPD entry has new flag XFRM_POLICY_CPU_ACQUIRE. | ||||
| It should be set only on the "out" policy. The flag should | ||||
| be disabled when the policy is a trap policy, without SPD entries. | ||||
| After a successful negotiation of SA_RESOURCE_INFO, while adding th | ||||
| e | ||||
| first Child SA, the SPD entry can be updated with the | ||||
| XFRM_POLICY_CPU_ACQUIRE flag. | ||||
| When XFRM_POLICY_CPU_ACQUIRE is set, the XFRM_MSG_ACQUIRE generated | ||||
| will include the XFRMA_SA_PCPU attribute. | ||||
| </t> | ||||
| <t hangText="Contact: ">Steffen Klassert steffen.klassert@secunet.co | ||||
| m</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="section.impl-status.libreswan" title="Libreswan"> | ||||
| <t> | ||||
| <list style="hanging"> | ||||
| <t hangText="Organization: ">The Libreswan Project</t> | ||||
| <t hangText="Name: ">pcpu-3 https://libreswan.org/wiki/XFRM_pCPU</t> | ||||
| <t hangText="Description: "> | ||||
| An initial IKE implementation of the per-CPU method.</t> | ||||
| <t hangText="Level of maturity: ">Alpha</t> | ||||
| <t hangText="Coverage: "> | ||||
| implements combining a regular (all-CPUs) Child SA and per-CPU addit | ||||
| ional Child SAs</t> | ||||
| <t hangText="Licensing: ">GPLv2</t> | ||||
| <t hangText="Implementation experience: ">TBD</t> | ||||
| <t hangText="Contact: ">Libreswan Development: swan-dev@libreswan.or | ||||
| g</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="section.impl-status.strongswan" title="strongSwan"> | ||||
| <t> | ||||
| <list style="hanging"> | ||||
| <t hangText="Organization: ">The StrongSwan Project</t> | ||||
| <t hangText="Name: ">StrongSwan https://github.com/strongswan/strong | ||||
| swan/tree/per-cpu-sas-poc/</t> | ||||
| <t hangText="Description: "> | ||||
| An initial IKE implementation of the per-CPU method.</t> | ||||
| <t hangText="Level of maturity: ">Alpha</t> | ||||
| <t hangText="Coverage: "> implements combining a regular (all-CPUs) | ||||
| Child SA and per-CPU additional Child SAs</t> | ||||
| <t hangText="Licensing: ">GPLv2</t> | ||||
| <t hangText="Implementation experience: "> | ||||
| StrongSwan use private space values for notifications | ||||
| SA_RESOURCE_INFO (40970). | ||||
| </t> | ||||
| <t hangText="Contact: ">Tobias Brunner tobias@strongswan.org</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="section.impl-status.iproute2" title="iproute2"> | ||||
| <t> | ||||
| <list style="hanging"> | ||||
| <t hangText="Organization: ">The iproute2 Project</t> | ||||
| <t hangText="Name: "> iproute2 https://github.com/antonyantony/iproute2 | ||||
| /tree/pcpu-v1</t> | ||||
| <t hangText="Description: ">Implemented the per-CPU attributes for the | ||||
| "ip xfrm" command.</t> | ||||
| <t hangText="Level of maturity: ">Alpha</t> | ||||
| <t hangText="Licensing: ">GPLv2</t> | ||||
| <t hangText="Implementation experience: ">TBD</t> | ||||
| <t hangText="Contact: ">Antony Antony antony.antony@secunet.com</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="IANA" title="IANA Considerations"> | ||||
| <t> | <t> | |||
| This document defines one new registration for the IANA "IKEv2 Notify Me | IANA has registered one new value in the "IKEv2 Notify Message Error Typ | |||
| ssage Status Types" registry. | es" registry. | |||
| </t> | </t> | |||
| <figure align="center" anchor="iana_requests_i"> | <table anchor="iana_requests_e"> | |||
| <artwork align="left"><![CDATA[ | <thead> | |||
| Value Notify Message Status Type Reference | <tr> | |||
| ----- ------------------------------ --------------- | <th>Value</th> | |||
| [TBD1] SA_RESOURCE_INFO [this document] | <th>Notify Message Error Type</th> | |||
| ]]></artwork> | <th>Reference</th> | |||
| </figure> | </tr> | |||
| <t> | </thead> | |||
| This document defines one new registration for the IANA "IKEv2 Notify Me | <tbody> | |||
| ssage Error Types" registry. | <tr> | |||
| </t> | <td>48</td> | |||
| <figure align="center" anchor="iana_requests_e"> | <td>TS_MAX_QUEUE</td> | |||
| <artwork align="left"><![CDATA[ | <td>RFC 9611</td> | |||
| Value Notify Message Error Type Reference | </tr> | |||
| ----- ------------------------------ --------------- | </tbody> | |||
| [TBD2] TS_MAX_QUEUE [this document] | </table> | |||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="Acknowledgements" anchor="acks"> | ||||
| <t>The following people provided reviews and valuable feedback: Roman Danyl | ||||
| iw, Warren Kumari | ||||
| Tero Kivinen, Murray Kucherawy, John Scudder, Valery Smyslov, Gunter van | ||||
| de Velde and Eric Vyncke. | ||||
| </t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <references> | |||
| &RFC2119; | <name>References</name> | |||
| &RFC7296; | <references> | |||
| &RFC8174; | <name>Normative References</name> | |||
| </references> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
| <references title="Informative References"> | 119.xml"/> | |||
| &RFC2367; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | |||
| &RFC4301; | 296.xml"/> | |||
| &RFC7942; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
| 174.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | ||||
| 367.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | ||||
| 301.xml"/> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section anchor="acks" numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t>The following people provided reviews and valuable feedback: | ||||
| <contact fullname="Roman Danyliw" />, <contact fullname="Warren Kumari" /> | ||||
| , | ||||
| <contact fullname="Tero Kivinen" />, <contact fullname="Murray Kucherawy" | ||||
| />, | ||||
| <contact fullname="John Scudder" />, <contact fullname="Valery Smyslov" /> | ||||
| , | ||||
| <contact fullname="Gunter van de Velde" />, and <contact fullname="Éric Vy | ||||
| ncke" />. | ||||
| </t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 78 change blocks. | ||||
| 371 lines changed or deleted | 314 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||