<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-boucadair-tcpm-rst-diagnostic-payload-16" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="RST Diagnostic Payload">TCP RST Diagnostic Payload</title>
    <seriesInfo name="Internet-Draft" value="draft-boucadair-tcpm-rst-diagnostic-payload-16"/>
    <author fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author fullname="Jason Xing">
      <organization>Tencent</organization>
      <address>
        <email>kerneljasonxing@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="01"/>
    <area/>
    <workgroup>TCP Maintenance and Minor Extensions</workgroup>
    <keyword>Service diagnostic</keyword>
    <abstract>
      <?line 54?>
<t>This document specifies two experimental diagnostic payload formats returned in TCP
   RST segments. Such payloads are used to share with an endpoint the
   reasons for which a TCP connection has been reset.  Sharing this
   information is meant to ease diagnostic and troubleshooting.</t>
      <t>This specification builds on provisions that are already present in RFC 9293 "Transmission Control Protocol (TCP)".
   As such, this document does not require any change to RFC 9293.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    TCP Maintenance and Minor Extensions  mailing list (tcpm@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tcpm/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/draft-boucadair-tcpm-rst-diagnostic-payload"/>.</t>
    </note>
  </front>
  <middle>
    <?line 63?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A TCP connection <xref target="RFC9293"/> can be reset by a peer for various
   reasons, e.g., received data does not correspond to an active
   connection.  Also, a TCP connection can be reset by an on-path
   service function (e.g., Carrier Grade NAT (CGN) <xref target="RFC6888"/>, NAT64
   <xref target="RFC6146"/>, or firewall) for several reasons.  Typically, a Network
   Address Translator (NAT) function can generate an RST segment to
   notify an endpoint upon the expiry of the lifetime of the
   corresponding mapping entry or because an RST segment was received
   from a peer (<xref section="2.2" sectionFormat="of" target="RFC7857"/>).</t>
      <t>A TCP connection can also be
   closed by a user or an application at any time.  However, the peer
   that receives an RST segment does not have any hint about the reason
   that led to terminating the connection.  Likewise, the application
   that relies upon such a TCP connection may not easily identify the
   reason for the connection reset. Troubleshooting such events at
   the remote side of the connection that receives the RST segment may
   not be trivial.</t>
      <t>This document fills this void by specifying experimental formats of the
   diagnostic payload returned in an RST segment. This design is
   backward compatible with TCP as further clarified in <xref target="bc"/>.</t>
      <t>The generic procedure for processing an RST segment is specified in
   <xref section="3.5.3" sectionFormat="of" target="RFC9293"/>. Only the deviations from that procedure
   to insert and validate a diagnostic payload is provided in <xref target="payload"/>.</t>
      <t>This document specifies the formats and the overall approach to ease
   maintaining the list of codes while allowing for adding new codes as
   needed in the future and accommodating any existing vendor-specific
   codes.  An initial version of error codes is available in <xref target="initial"/>.
   However, the authoritative source to retrieve the full list of error
   codes is the IANA-maintained registry (<xref target="causes"/>).</t>
      <t><xref target="examples"/> provides a set of examples to illustrate the use of TCP RST
   diagnostic payloads.</t>
      <t><xref target="socket-api"/> provides an informative discussion of socket API considerations.
   Implementation and experimental validation are detailed in <xref target="sec-validation"/>.</t>
      <t>Experiment goals are listed in <xref target="sec-goals"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<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>
      <?line -18?>

<t>This document makes use of the terms defined in <xref section="4" sectionFormat="of" target="RFC9293"/>.</t>
      <t>SEG.LEN is defined in <xref section="3.3.1" sectionFormat="of" target="RFC9293"/>.</t>
      <t>This document uses the following terms:</t>
      <dl>
        <dt>RST diagnostic payload:</dt>
        <dd>
          <t>The payload of an RST message that conveys diagnostic data.</t>
        </dd>
        <dt>RST with diagnostic payload:</dt>
        <dd>
          <t>An RST segment that includes diagnostic payload.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sec-goals">
      <name>Experiment Description &amp; Goals</name>
      <t>The main objective of this experiment is to have a common format
  of RST diagnostic payload that would be used as basis for consistent
  testing and evaluation in a variety of deployment contexts
  (Internet, data centers, application clients/servers provided and managed by the same entity,
  clients and servers software owned by distinct entities, etc.).</t>
      <t>Experiments reports are encouraged to share the main lessons
  learned in these experimentations. Specifically, the following items are of interest:</t>
      <dl>
        <dt>Delivery &amp; on-path device interference:</dt>
        <dd>
          <t>Identify and share issues or lack thereof related to the delivery of RST with diagnostic payload.</t>
        </dd>
        <dt>CPU/load impact:</dt>
        <dd>
          <t>Assess CPU/load impact (or lack thereof) of handling RSTs, including when a mix of RSTs with and without diagnostic payload are sent.</t>
        </dd>
        <dt>Standard reset reasons:</dt>
        <dd>
          <t>Assess whether the list of code reasons (<xref target="causes"/>) reflects most of reset cases.</t>
        </dd>
        <dt>Free-description need:</dt>
        <dd>
          <t>Assess the need/use of free-description format (<xref target="free"/>).</t>
        </dd>
        <dt>Integration of socket API extensions:</dt>
        <dd>
          <t>Excercise the socket API extensions and identify any required adjustement (<xref target="socket-api"/>).</t>
        </dd>
        <dt>Operational guidance:</dt>
        <dd>
          <t>Strengthen the operationnal guidance for deploying RSTs with diagnostic payload.</t>
        </dd>
      </dl>
    </section>
    <section anchor="payload">
      <name>RST Diagnostic Payload</name>
      <t>This section defines two message formats to convey RST diagnostic payload:</t>
      <ul spacing="normal">
        <li>
          <t>Compact format (<xref target="compact"/>): This format is designed to minimize the length of the payload.</t>
        </li>
        <li>
          <t>Free-description format (<xref target="free"/>): This format is designed to accommodate, in particular, applications that don't maintain a reset cause registry but need sharing reason codes not covered in IANA-maintained registry (<xref target="causes"/>).</t>
        </li>
      </ul>
      <section anchor="compact">
        <name>Compact Format</name>
        <t>The format of the compact RST diagnostic payload is shown in <xref target="format-1"/>.</t>
        <figure anchor="format-1">
          <name>Structure of the Compact RST Diagnostic Payload</name>
          <artwork><![CDATA[
    0                   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |          reason-code          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              pen                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>The RST diagnostic payload comprises a magic number that is used to
   unambiguously identify an RST payload that follows this
   specification.  It <bcp14>MUST</bcp14> be set to 0x33AA for the compact encoding shown in <xref target="format-1"/>.</t>
        <t>The descriptions of other fields shown in <xref target="format-1"/> are as follows:</t>
        <dl>
          <dt>reason-code:</dt>
          <dd>
            <t>This field takes a value from an available registry (IANA or vendor-specific).</t>
          </dd>
          <dt/>
          <dd>
            <t>Value 0 is reserved and <bcp14>MUST NOT</bcp14> be used.</t>
          </dd>
          <dt/>
          <dd>
            <t>The reason code is taken from the "TCP Failure Causes" registry (<xref target="causes"/>) if "pen" is set to 0.</t>
          </dd>
          <dt/>
          <dd>
            <t>If the "pen" is not set to 0, then the reason code refers to the registry of the entity specified by the "pen" parameter.</t>
          </dd>
          <dt>pen:</dt>
          <dd>
            <t>Includes a Private Enterprise Number (PEN) <xref target="Private-Enterprise-Numbers"/>.</t>
          </dd>
          <dt/>
          <dd>
            <t>The reserved PEN value "0" is used to indicate that the reason code refers to the IANA-maintained registry (<xref target="causes"/>).</t>
          </dd>
        </dl>
        <t>SEG.LEN <bcp14>MUST</bcp14> be 8 for an RST with compact diagnostic payload.</t>
      </section>
      <section anchor="free">
        <name>Free-description Format</name>
        <t>The format of the RST diagnostic payload with a reason description is shown in <xref target="format-2"/>. This format is useful
   to convey reset reasons that are not yet registered or for application-specific reset reasons.</t>
        <figure anchor="format-2">
          <name>Structure of the RST Diagnostic Payload with Reason Description</name>
          <artwork><![CDATA[
    0                   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0xF317            |                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               :
   :                     reason-description                        :
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>The RST diagnostic payload comprises a magic number that is used to
   unambiguously identify an RST payload that follows this
   specification. It <bcp14>MUST</bcp14> be set to 0xF317 when the free-description format is used.</t>
        <t>The description of the other field shown in <xref target="format-2"/> is as follows:</t>
        <dl>
          <dt>reason-description:</dt>
          <dd>
            <t>Includes a brief description of the reset reason encoded as UTF-8 <xref target="RFC3629"/>.</t>
          </dd>
        </dl>
        <t>The length of the reason-description is "SEG.LEN - 2".</t>
      </section>
      <section anchor="behavior">
        <name>Behavior</name>
        <t>Senders are <bcp14>RECOMMENDED</bcp14> to use the compact format. It is <bcp14>RECOMMENDED</bcp14> that both formats are supported at the receiver side.</t>
        <t>Malformed RST diagnostic payloads that include the magic
   numbers (0x33AA or 0xF317) <bcp14>MUST</bcp14> be silently ignored by the receiver.
   RSTs that carry such malformed diagnostic payloads are handled like an RST without payload.</t>
        <t>A peer that receives a valid diagnostic payload may pass the reset
   reason information to the local application in addition to the
   information (<bcp14>MUST</bcp14>-12) described in <xref section="3.6" sectionFormat="of" target="RFC9293"/>.  That
   information may also be logged locally, unless a local policy
   specifies otherwise.  How the information is passed to an application
   and how it is stored locally is implementation-specific.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Some Examples</name>
      <t><xref target="fig-1"/> depicts an example of an RST diagnostic payload that is
   generated to inform the peer that the TCP connection is reset because
   an ACK was received from that peer while the connection is still in
   the LISTEN state (<xref section="3.10.7.2" sectionFormat="of" target="RFC9293"/>).</t>
      <figure anchor="fig-1">
        <name>Example of an RST Diagnostic Payload with Reason Code</name>
        <artwork><![CDATA[
    0                   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |               0x02            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              0x00                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>An RST diagnostic payload may also be sent by an on-path service
   function.  For example, the following diagnostic payload is returned
   by a NAT function upon expiry of the mapping entry to which the TCP
   connection is bound (<xref target="fig-2"/>).</t>
      <figure anchor="fig-2">
        <name>Example of an RST Diagnostic Payload to Report Connection Timeout</name>
        <artwork><![CDATA[
    0                   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |              0x0E             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              0x00                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t><xref target="fig-3"/> illustrates an RST diagnostic payload that is returned by a
   peer that resets a TCP connection for a reason code 1234 defined by a
   vendor with the private enterprise number 32473 (0x7D9).</t>
      <figure anchor="fig-3">
        <name>Example of an RST Diagnostic Payload to Report Vendor-Specific Reason Code</name>
        <artwork><![CDATA[
    0                   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |              0x4DE            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             0x7D9                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t><xref target="fig-3"/> uses the Enterprise Number 32473 defined for documentation
   use <xref target="RFC5612"/>.</t>
    </section>
    <section anchor="ops-cons">
      <name>Operational Considerations</name>
      <section anchor="bc">
        <name>Backward Compatibility</name>
        <t>Returning diagnostic data in an RST segment is consistent with
   the provision in <xref section="3.5.3" sectionFormat="of" target="RFC9293"/> for RST segments, especially:</t>
        <blockquote>
          <t>"TCP implementations <bcp14>SHOULD</bcp14> allow a received RST segment to
 include data (SHLD-2)."</t>
        </blockquote>
        <t>Also, this document does not change the conditions under which an RST
   segment is generated (<xref section="3.5.2" sectionFormat="of" target="RFC9293"/>).</t>
      </section>
      <section anchor="multiple-rsts">
        <name>Multiple RSTs</name>
        <t>Per <xref section="3.6" sectionFormat="of" target="RFC9293"/>, one or more RST segments can be sent
   to reset a connection.</t>
        <t>Sending more RST segments to reset a connection can be used
   to mitigate deployment contexts where some on-path devices may
   discard RSTs with payload data.</t>
        <t>Whether a TCP endpoint elects to send more
   than one RST with only a subset of them that include the diagnostic
   payload is implementation-specific.</t>
      </section>
      <section anchor="manageability">
        <name>Manageability</name>
        <t>TCP server implementations should support the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>A parameter to control the activation of RSTs with diagnostic payload.</t>
          </li>
          <li>
            <t>A parameter to accept/deny RSTs with the format defined in <xref target="free"/>).</t>
          </li>
          <li>
            <t>A parameter to set a maximum length of acceptable reason description (<xref target="free"/>), when enabled.</t>
          </li>
          <li>
            <t>A parameter to control whether "empty" RSTs are also sent together with an RST with diagnostic payload.</t>
          </li>
          <li>
            <t>A rate-limit of RSTs with diagnostic payload.</t>
          </li>
          <li>
            <t>Counters to track sent/received RSTs with diagnostic payload. These counters should be structured per encoding format described in Sections <xref format="counter" target="compact"/> and <xref format="counter" target="free"/>.</t>
          </li>
          <li>
            <t>Counters to track received invalid RSTs with diagnostic payload.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="socket-api">
      <name>Socket API Considerations (Informative)</name>
      <t>This section describes how the socket API  can  be extended to provide a way
for an application to use the functionality described in this document.</t>
      <t>This section is informational only.</t>
      <t>The API described in this section can change in a non-backwards compatible way
during the evolution of this document due to changed functionality or gained
experience during the implementation.</t>
      <section anchor="socket-options">
        <name>Socket Options</name>
        <t><xref target="socket-options-table"/> provides an overview of the <tt>IPPROTO_TCP</tt>-level socket
options defined in this section.</t>
        <table anchor="socket-options-table">
          <name>Socket Options</name>
          <thead>
            <tr>
              <th align="left">Option Name</th>
              <th align="left">Data Type</th>
              <th align="left">Set</th>
              <th align="left">Get</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>TCP_RST_REASON_ENABLE</tt></td>
              <td align="left">
                <tt>uint32_t</tt></td>
              <td align="left">X</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">
                <tt>TCP_RST_REASON_CODE</tt></td>
              <td align="left">
                <tt>struct tcp_rst_reason</tt></td>
              <td align="left">X</td>
              <td align="left">X</td>
            </tr>
            <tr>
              <td align="left">
                <tt>TCP_RST_REASON_DESC</tt></td>
              <td align="left">
                <tt>char[]</tt></td>
              <td align="left">X</td>
              <td align="left">X</td>
            </tr>
          </tbody>
        </table>
        <section anchor="enable-the-sending-of-the-diagnostic-payload-tcprstreasonenable">
          <name>Enable the Sending of the Diagnostic Payload (<tt>TCP_RST_REASON_ENABLE</tt>)</name>
          <t>Using <tt>setsockopt()</tt> with the <tt>IPPROTO_TCP</tt>-level socket option with the
name <tt>TCP_RST_REASON_ENABLE</tt> enables or disabled the sending of the
diagnostic payload using a reason-code and pen.
The <tt>option_value</tt> of type <tt>uint32_t</tt> specifies the pen in host byte order
to use.
When 0 is used (<xref section="3" sectionFormat="of" target="RFC9371"/>), the reason-codes from the registry
specified in <xref target="causes"/> are used.
When 0xffffffff is used (<xref section="3" sectionFormat="of" target="RFC9371"/>), the sending is disabled.
The default is that the sending of a diagnostic payload is disabled.
An implementation might not support the use of PENs different from zero and
0xffffffff.</t>
        </section>
        <section anchor="get-or-set-the-diagnostic-payload-as-code-tcprstreasoncode">
          <name>Get or Set the Diagnostic Payload as Code (<tt>TCP_RST_REASON_CODE</tt>)</name>
          <t>Using <tt>getsockopt()</tt> with the <tt>IPPROTO_TCP</tt>-level socket option with the
name <tt>TCP_RST_REASON_CODE</tt> allows the caller to retrieve the reason-code and
the pen of the diagnostic payload in the received RST segment, which terminated
the corresponding TCP connection.</t>
          <t>Using <tt>setsockopt()</tt> with this socket option allows the caller to provide
reason-code and pen to be sent as part of the diagnostic payload when the
application triggers the sending of a RST segment by using <tt>close()</tt>.
In addition to using <tt>close()</tt> in combination with the <tt>SOL_SOCKET</tt>-level
socket option with name <tt>SO_LINGER</tt>, the application can just provide the
<tt>TCP_RR_RST_ON_CLOSE</tt> flag in <tt>trr_flags</tt>. This way the application can
trigger the sending of a RST segment by calling <tt>setsockopt()</tt> once followed
by <tt>close()</tt>.</t>
          <t>For accepted sockets, this socket option is inherited from the listening socket.</t>
          <t>The following structure is used as the <tt>option_value</tt>:</t>
          <sourcecode type="c"><![CDATA[
struct tcp_rst_reason {
        uint16_t trr_flags;
        uint16_t trr_code;
        uint32_t trr_pen;
};
]]></sourcecode>
          <dl>
            <dt><tt>trr_flags</tt>:</dt>
            <dd>
              <dl>
                <dt>This field is reported as 0 for <tt>getsockopt()</tt> calls. For <tt>setsockopt()</tt></dt>
                <dd>
                  <t/>
                </dd>
                <dt>calls, the following flag can be used:</dt>
                <dd>
                  <t/>
                </dd>
                <dt><tt>TCP_RR_RST_ON_CLOSE</tt>:</dt>
                <dd>
                  <t>When this flag is set, calling <tt>close()</tt> triggers the sending of a RST segment
similar to case, where the <tt>SOL_SOCKET</tt>-level socket option with name
<tt>SO_LINGER</tt> is used to enable lingering with the linger time of 0.
When this flag is cleared, the corresponding functionality is disabled.</t>
                </dd>
              </dl>
            </dd>
            <dt><tt>trr_code</tt>:</dt>
            <dd>
              <t>The reason-code in host byte order to be interpreted in combination with
the PEN provided in <tt>trr_pen</tt>. In case of <tt>trr_pen</tt> being
zero, <tt>trr_code</tt> refers to a value in the registry defined in
<xref target="causes"/>.</t>
            </dd>
            <dt><tt>trr_pen</tt>:</dt>
            <dd>
              <t>The PEN in host byte order to is used in combination with the reason-code
specified in <tt>trr_code</tt>.
When this socket option is used with <tt>setsockopt()</tt>, it is an error to use
zero as a value for <tt>trr_pen</tt> as long as <tt>trr_code</tt> is not
zero.</t>
            </dd>
          </dl>
          <t>When <tt>getsockopt()</tt> with this socket option is performed on a socket, which
has not received a RST with a diagnostic payload containing a reason-code and
pen, zero is provided as the <tt>trr_code</tt> and <tt>trr_pen</tt>.
When <tt>setsockopt()</tt> with a <tt>trr_code</tt> and <tt>trr_pen</tt> of zero
is performed, the special handling of RST segments sent during the ungraceful
termination of the TCP connection is disabled.</t>
        </section>
        <section anchor="get-or-set-the-diagnostic-payload-as-description-tcprstreasondesc">
          <name>Get or Set the Diagnostic Payload as Description (<tt>TCP_RST_REASON_DESC</tt>)</name>
          <t>Some implementations might not support the sending and receiving of the
reason in description form. In this case this socket option is not implemented.</t>
          <t>Using <tt>getsockopt()</tt> with the <tt>IPPROTO_TCP</tt>-level socket option with the
name <tt>TCP_RST_REASON_DESC</tt> allows the caller to retrieve the reason-description
of the diagnostic payload in the RST segment, which terminated the corresponding
TCP connection.</t>
          <t>Using <tt>setsockopt()</tt> with this socket option allows the caller to provide a
reason-description to be sent as part of the diagnostic payload when the
application triggers the sending of a RST segment by using <tt>close()</tt> in
combination with the <tt>SOL_SOCKET</tt>-level socket option with name <tt>SO_LINGER</tt>.
Providing an empty character array disables the sending of a reason-description
in this case.
For accepted sockets, this socket option is inherited from the listening socket.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t><xref target="RFC9293"/> discusses TCP-related security considerations. In
   particular, RST-specific attacks and their mitigations are discussed
   in <xref section="3.10.7.3" sectionFormat="of" target="RFC9293"/>.</t>
      <t>The following subsections discuss considerations specific to each encoding format.</t>
      <section anchor="compact-format">
        <name>Compact Format</name>
        <t>The presence of vendor-specific reason codes may be used
   to fingerprint hosts.  Such a concern does not apply if the reason
   codes are taken from the IANA-maintained registry.  Implementers are,
   thus, encouraged to register new codes within IANA instead of
   maintaining specific registries.</t>
      </section>
      <section anchor="free-description-format">
        <name>Free-description Format</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> to control the
   size of acceptable diagnostic payload and keep it as brief as
   possible. The <bcp14>RECOMMENDED</bcp14> acceptable maximum size of the RST
   diagnostic payload is 255 octets.</t>
        <t>Also, it is <bcp14>RECOMMENDED</bcp14> to avoid leaking privacy-related information
   as part of the diagnostic payload (e.g., including a description such
   as "user X resets explicitly the connection" is not recommended).
   The "reason-description" string, when present, <bcp14>MUST NOT</bcp14> include any
   private information that an observer would not otherwise have access
   to.</t>
        <t>The reason description, when present, <bcp14>MUST NOT</bcp14> be displayed
   to end users but is intended to be consumed by applications. Such a description
   may carry a malicious message to mislead the end-user.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="causes">
        <name>New Registry for TCP Failure Causes</name>
        <t>This document requests IANA to create a new registry entitled "TCP
   Failure Causes" under the "Transmission Control Protocol (TCP)
   Parameters" registry group <xref target="IANA-TCP"/>.</t>
        <t>Values are taken from the 1-65535 range.</t>
        <t>The assignment policy for this registry is "Expert Review"
   (<xref section="4.5" sectionFormat="of" target="RFC8126"/>). See more guidance at <xref target="de"/>.</t>
        <t>The registry is initially populated with the values listed in
   <xref target="initial"/>.</t>
        <table anchor="initial">
          <name>Initial TCP Failure Causes</name>
          <thead>
            <tr>
              <th align="center">Value</th>
              <th align="left">Description</th>
              <th align="left">Specification (if available)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">0</td>
              <td align="left">Reserved</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">1</td>
              <td align="left">Illegal Option</td>
              <td align="left">
                <xref section="3.1" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">2</td>
              <td align="left">Desynchronized state</td>
              <td align="left">
                <xref section="3.5.1" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">3</td>
              <td align="left">New data is received after CLOSE is called</td>
              <td align="left">Sections 3.6.1 and  3.10.7.1 of <xref target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">4</td>
              <td align="left">ABORT Process</td>
              <td align="left">
                <xref section="3.10.5" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">5</td>
              <td align="left">Unexpected ACK received by non-synchronized state connection</td>
              <td align="left">
                <xref section="3.10.7" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">6</td>
              <td align="left">Unexpected SYN in the window</td>
              <td align="left">
                <xref section="3.10.7" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">7</td>
              <td align="left">Unexpected security compartment</td>
              <td align="left">
                <xref section="A.1" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">8</td>
              <td align="left">Malformed Message</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">9</td>
              <td align="left">Not Authorized</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">10</td>
              <td align="left">Resource Exceeded</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">11</td>
              <td align="left">Network Failure</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">12</td>
              <td align="left">Reset received from the peer</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">13</td>
              <td align="left">Destination Unreachable</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">14</td>
              <td align="left">Connection Timeout</td>
              <td align="left">ThisDocument</td>
            </tr>
            <tr>
              <td align="center">15</td>
              <td align="left">Too much outstanding data</td>
              <td align="left">
                <xref section="3.6" sectionFormat="of" target="RFC8684"/></td>
            </tr>
            <tr>
              <td align="center">16</td>
              <td align="left">Unacceptable performance</td>
              <td align="left">
                <xref section="3.6" sectionFormat="of" target="RFC8684"/></td>
            </tr>
            <tr>
              <td align="center">17</td>
              <td align="left">Middlebox interference</td>
              <td align="left">
                <xref section="3.6" sectionFormat="of" target="RFC8684"/></td>
            </tr>
          </tbody>
        </table>
        <t>Note that codes in the 8-14 range can be used by service functions (CGN, firewall, proxy, etc.).</t>
        <ul empty="true">
          <li>
            <t>Note to the RFC Editor: Please replace ThisDocument with the RFC number assigned to this document.</t>
          </li>
        </ul>
      </section>
      <section anchor="de">
        <name>Guidelines for the Designated Experts</name>
        <t>Criteria that should be applied by the designated experts include
   determining whether the proposed registration duplicates existing
   entries and whether the registration description is clear and fits
   the purpose of this registry.</t>
        <t>The designated experts may approve registration once they checked
   that the new requested code is not covered by an existing code and if
   the provided reasoning to register the new code is acceptable.  A
   registration request may supply a pointer to a specification where
   that code is defined.  However, a registration may be accepted even
   if no permanent and readily available public specification is
   available.</t>
        <t>Registration requests are to be sent to <eref target="mailto:rst-diag-review@ietf.org">rst-diag-review@ietf.org</eref>
   and are evaluated within a three-week review period on the advice of
   one or more designated experts.  Within the review period, the
   designated experts will either approve or deny the registration
   request, communicating this decision to the review list and IANA.
   Denials should include an explanation and, if applicable, suggestions
   as to how to make the request successful.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9293">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8684">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <author fullname="A. Ford" initials="A." surname="Ford"/>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure"/>
            <author fullname="C. Paasch" initials="C." surname="Paasch"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
              <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
              <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8684"/>
          <seriesInfo name="DOI" value="10.17487/RFC8684"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA-TCP" target="https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#">
          <front>
            <title>Transmission Control Protocol (TCP) Parameters</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Private-Enterprise-Numbers" target="https://www.iana.org/assignments/enterprise-numbers">
          <front>
            <title>Private Enterprise Numbers</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC6888">
          <front>
            <title>Common Requirements for Carrier-Grade NATs (CGNs)</title>
            <author fullname="S. Perreault" initials="S." role="editor" surname="Perreault"/>
            <author fullname="I. Yamagata" initials="I." surname="Yamagata"/>
            <author fullname="S. Miyakawa" initials="S." surname="Miyakawa"/>
            <author fullname="A. Nakagawa" initials="A." surname="Nakagawa"/>
            <author fullname="H. Ashida" initials="H." surname="Ashida"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines common requirements for Carrier-Grade NATs (CGNs). It updates RFC 4787.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="127"/>
          <seriesInfo name="RFC" value="6888"/>
          <seriesInfo name="DOI" value="10.17487/RFC6888"/>
        </reference>
        <reference anchor="RFC6146">
          <front>
            <title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document describes stateful NAT64 translation, which allows IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP. One or more public IPv4 addresses assigned to a NAT64 translator are shared among several IPv6-only clients. When stateful NAT64 is used in conjunction with DNS64, no changes are usually required in the IPv6 client or the IPv4 server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </reference>
        <reference anchor="RFC7857">
          <front>
            <title>Updates to Network Address Translation (NAT) Behavioral Requirements</title>
            <author fullname="R. Penno" initials="R." surname="Penno"/>
            <author fullname="S. Perreault" initials="S." surname="Perreault"/>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair"/>
            <author fullname="S. Sivakumar" initials="S." surname="Sivakumar"/>
            <author fullname="K. Naito" initials="K." surname="Naito"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document clarifies and updates several requirements of RFCs 4787, 5382, and 5508 based on operational and development experience. The focus of this document is Network Address Translation from IPv4 to IPv4 (NAT44).</t>
              <t>This document updates RFCs 4787, 5382, and 5508.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="127"/>
          <seriesInfo name="RFC" value="7857"/>
          <seriesInfo name="DOI" value="10.17487/RFC7857"/>
        </reference>
        <reference anchor="RFC5612">
          <front>
            <title>Enterprise Number for Documentation Use</title>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="D. Harrington" initials="D." surname="Harrington"/>
            <date month="August" year="2009"/>
            <abstract>
              <t>This document describes an Enterprise Number (also known as SMI Network Management Private Enterprise Code) for use in documentation. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5612"/>
          <seriesInfo name="DOI" value="10.17487/RFC5612"/>
        </reference>
        <reference anchor="RFC9371">
          <front>
            <title>Registration Procedures for Private Enterprise Numbers (PENs)</title>
            <author fullname="A. Baber" initials="A." surname="Baber"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="March" year="2023"/>
            <abstract>
              <t>This document describes how Private Enterprise Numbers (PENs) are registered by IANA. It shows how to request a new PEN and how to modify a current PEN. It also gives a brief overview of PEN uses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9371"/>
          <seriesInfo name="DOI" value="10.17487/RFC9371"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
      </references>
    </references>
    <?line 556?>

<section anchor="sec-validation">
      <name>Implementation and Experimental Validation in Linux</name>
      <t>Questions and concerns have been raised regarding whether RST with payload affects the normal termination of flows across different software platforms, operating systems, middleboxes, etc. Even though <xref section="3.5.3" sectionFormat="of" target="RFC9293"/> explicitly allows this behavior, a full implementation is needed to widely verify if unexpected cases can happen in the real world.</t>
      <t>The overall design in Linux is to pre-allocate a large enough zeroed buffer, put a reset reason code in the first byte and sent it out to verify whether the RST with payload can be possibly declined by any equipment in between two sides and the other side successfully parses the RST with payload.</t>
      <section anchor="implementation">
        <name>Implementation</name>
        <t>The following implementation is accomplished on top of Linux 6.16:</t>
        <dl>
          <dt><strong>Payload Attachment</strong>:</dt>
          <dd>
            <t>Allocate a 1000-byte data payload attached to all generated RST packets.</t>
          </dd>
          <dt><strong>Reason Code Encoding</strong>:</dt>
          <dd>
            <t>The first byte of the payload is used to store a predefined reset reason code that is listed in include/net/rstreason.h file, while the remainder of the payload is zero-padded. The reason code is generated by the existing mechanism called <eref target="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d5115a55ffb52">TCP reset reasons</eref>.</t>
          </dd>
          <dt><strong>Handling of Reset Types</strong>:</dt>
          <dd>
            <t>The implementation distinguishes between the two primary reset scenarios in <tt>tcp_send_active_reset()</tt> and <tt>tcp_v4_send_reset()</tt> respectively:
</t>
            <ul spacing="normal">
              <li>
                <t>For an <strong>Active Reset</strong>, initiated proactively by the local system, the payload is placed in the linear area of the socket buffer (<tt>sk_buff</tt>).</t>
              </li>
              <li>
                <t>For a <strong>Passive Reset</strong>, sent in response to an unexpected or invalid incoming packet, the payload is stored in the non-linear (paged) area of the <tt>sk_buff</tt>.</t>
              </li>
            </ul>
          </dd>
        </dl>
        <t>Complete patch is shown in <xref target="patch"/>.</t>
        <figure anchor="patch">
          <name>Complete Patch</name>
          <artwork><![CDATA[
diff --git a/include/net/tcp.h b/include/net/tcp.h
index b3815d104340..0b32257774c8 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -62,6 +62,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo);
 #define MAX_TCP_OPTION_SPACE 40
 #define TCP_MIN_SND_MSS                48
 #define TCP_MIN_GSO_SIZE       (TCP_MIN_SND_MSS - MAX_TCP_OPTION_SPACE)
+#define PAYLOAD_LEN 1000

 /*
  * Never offer a window over 32767 without using window scaling. Some
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 84d3d556ed80..49250e6bd6a1 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -741,6 +741,7 @@ static bool tcp_v4_ao_sign_reset(const struct sock *sk, struct sk_buff *skb,
 static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
                              enum sk_rst_reason reason)
 {
+       u32 len = sizeof(struct tcphdr) + REPLY_OPTIONS_LEN + PAYLOAD_LEN;
        const struct tcphdr *th = tcp_hdr(skb);
        struct {
                struct tcphdr th;
@@ -757,6 +758,7 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
 #endif
        u64 transmit_time = 0;
        struct sock *ctl_sk;
+       char buffer[len];
        struct net *net;
        u32 txhash = 0;

@@ -786,7 +788,8 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
        }

        memset(&arg, 0, sizeof(arg));
-       arg.iov[0].iov_base = (unsigned char *)&rep;
+       memset(&buffer, 0, len);
+       arg.iov[0].iov_base = (unsigned char *)buffer;
        arg.iov[0].iov_len  = sizeof(rep.th);

        net = sk ? sock_net(sk) : skb_dst_dev_net_rcu(skb);
@@ -911,6 +914,10 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
                ctl_sk->sk_mark = 0;
                ctl_sk->sk_priority = 0;
        }
+       memcpy(buffer, (char *)&rep, arg.iov[0].iov_len);
+       /* put rst reason into the first byte in payload */
+       buffer[arg.iov[0].iov_len] = reason;
+       arg.iov[0].iov_len += PAYLOAD_LEN;
        ip_send_unicast_reply(ctl_sk, sk,
                              skb, &TCP_SKB_CB(skb)->header.h4.opt,
                              ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index b616776e3354..c07dd009a0de 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -3628,12 +3628,14 @@ void tcp_send_fin(struct sock *sk)
 void tcp_send_active_reset(struct sock *sk, gfp_t priority,
                           enum sk_rst_reason reason)
 {
+       u32 len = MAX_TCP_HEADER + PAYLOAD_LEN;
+       char payload[PAYLOAD_LEN];
        struct sk_buff *skb;

        TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTRSTS);

        /* NOTE: No TCP options attached and we never retransmit this. */
-       skb = alloc_skb(MAX_TCP_HEADER, priority);
+       skb = alloc_skb(len, priority);
        if (!skb) {
                NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTFAILED);
                return;
@@ -3641,8 +3643,13 @@ void tcp_send_active_reset(struct sock *sk, gfp_t priority,

        /* Reserve space for headers and prepare control bits. */
        skb_reserve(skb, MAX_TCP_HEADER);
+       skb_put(skb, PAYLOAD_LEN);
        tcp_init_nondata_skb(skb, tcp_acceptable_seq(sk),
                             TCPHDR_ACK | TCPHDR_RST);
+       memset(payload, 0, PAYLOAD_LEN);
+       payload[0] = reason;
+       skb_store_bits(skb, 0, payload, PAYLOAD_LEN);
+       TCP_SKB_CB(skb)->end_seq += PAYLOAD_LEN;
        tcp_mstamp_refresh(tcp_sk(sk));
        /* Send it off. */
        if (tcp_transmit_skb(sk, skb, 0, priority))
]]></artwork>
        </figure>
      </section>
      <section anchor="experimental-validation">
        <name>Experimental Validation</name>
        <t>To ensure a thorough evaluation, a multi-layered experimental methodology was designed, progressing from basic functional checks to complex, real-world compatibility and stability tests. The whole implementation has been deployed in Tencent's production environment for almost six months.</t>
        <section anchor="functional-verification">
          <name>Functional Verification</name>
          <t>The basic functionality test is using iperf or iperf3 to construct a normal termination senario. The <tt>tcpdump</tt> tool with <tt>-X</tt> option effectively helps to show the <tt>[RST+]</tt> flag and the 1000-byte payload, confirming that the kernel correctly generated and transmitted the augmented RST packets.</t>
          <t>Two servers, designated as Client A and Server B. The test is conducted as following:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start the <tt>iperf3</tt> server on Server B (<tt>iperf3 -s</tt>).</t>
            </li>
            <li>
              <t>Initiate a connection from Client A to Server B (<tt>iperf3 -c [IP_of_B]</tt>).</t>
            </li>
            <li>
              <t>After the connection is established, one of the <tt>iperf3</tt> processes is terminated using the <tt>kill</tt> command, triggering the kernel to send an RST packet.</t>
            </li>
            <li>
              <t>Simultaneously, <tt>tcpdump</tt> is run on either host to capture the reset packet using the filter: <tt>'tcp[tcpflags] &amp; tcp-rst != 0' -X -nn -vv -S</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="compatibility-verification">
          <name>Compatibility Verification</name>
          <dl>
            <dt><strong>Hardwares and Kernels</strong>:</dt>
            <dd>
              <t>Tests were conducted on various Linux distributions (e.g., Ubuntu or CentOS) with different kernel versions. The physical hosts were equipped with a range of network interface cards (NICs), including Intel <tt>i40e</tt>, <tt>ixgbe</tt>, and Mellanox <tt>mlx5</tt>.</t>
            </dd>
            <dt><strong>Virtualization</strong>:</dt>
            <dd>
              <t>The mechanism was tested in a virtualized environment where the VM used a <tt>virtio_net</tt> driver and the host employed DPDK to redirect packets in the host.</t>
            </dd>
            <dt><strong>Middleboxes</strong>:</dt>
            <dd>
              <t>Tests were performed with Layer 4 (L4) and Layer 7 (L7) gateways placed between the client and server to verify correct packet parsing and forwarding.</t>
            </dd>
            <dt><strong>Wide Area Network (WAN)</strong>:</dt>
            <dd>
              <t>The setup was tested over long-haul international links to simulate complex conditions, including China-to-Singapore (RTT &gt; 30ms) and China-to-Germany (RTT &gt; 200ms).</t>
            </dd>
          </dl>
          <t>In conclusion, across all complex environment tests, the RST packets with payloads were successfully received by the peer. No instances of packets being dropped or mishandled by intermediate middleboxes, gateways, or diverse hardware and software configurations were observed.</t>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The "diagnostic payload" name is inspired by <xref section="5.5.2" sectionFormat="of" target="RFC7252"/>
  that was cited by Carsten Bormann in the tcpm mailing list.</t>
      <t>Thanks to Jon Shallow, Neal Cardwell, Lars Eggert, Eric Dumazet, Rick Jones, Yoshifumi Nishida, Li Jinghui, Gleb Smirnoff, and Michael Tuexen for the reveiw and comments.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Michael Tüxen">
        <organization/>
        <address>
          <email>tuexen@fh-muenster.de</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196XLbSJbufzxFthxRJdkkrV2yqmuRJVWVumRJY8m1XIdD
AoEkiRYIsLFIYtm+z3If5P6682JzvnMygQQJysu0e27EDCvKIoFELifPlmdD
t9v1iqiI9Z5aujw4Vy8vLtVh5A+TNC+iQJ370zj1wyXP7/czfUuNFjUI/EIP
02y6p/T9xPPCNEj8MfUaZv6g6PbTMvBDP8q6RTAZd7O86IZVJ92JdNJd2/by
sj+O8jxKk2I6ocePjy5/9JJy3NfZnhfSGHtekCa5TvIy31NFVmqPZrXh+Zn2
aXZL3l2a3QyztJyYBb3wo6TQiZ8EWvlJqF5ESZqpo3u6hlHyJe9GT+mhcM9T
XXWhs9uIWtaT8zzPL4tRmuG+p+gzKONY1vYiHdHfUD23q+P7aTb0k+hPv6Du
99RZ5idDzTf02I/iPTWWp3oVTH5IuU0vSMfe/CCXUVaO/Vjnd36mXuownLaM
cpreRD5fD9IyKbANx0loLplxb9IkLGi0IX4uGOxvfp4m6vcoGbYMcqkJiEnR
6FNniY7/jqfu6SG3b+xTkUX9smiHXRSMfB2ry3//v/c6cfssSk1XfhiMuuOS
NqnQWS/UnkfbNqaJ3BIGeFEyqH8pdbx/ut+lzd7jbgw6XxJQc4NL6gBzSWN1
nqVFGtCXZWq+Qtib0WRohJyfZPxSAz/OZcMKPxvqYk+NimKS7z19end314v8
xO8RXJ761PMwGRNA8qeE1ITEtq+Zn737UTGOHxG0afjolsboHhFKZpMsynX3
lHE7b0zdNFN1M2Wa/eemqethE9Of1+12ld/Pi8wPeGcvR1GuiHpLPKLyiQ6i
QaRzVdyloGydRbjhxw6JKEO/SjYlV5kuSsKLUEWJIjijW7CNXA95Hj11UQYj
+1SuiHZVmVPzIlX5CL/uomJE1Kp0Ek5Sol9VjHipROSEaTkGUncjwiDlYwBC
+iTRAbBUjfxc9bVOqG2ui55SF9QjoSZ1ETH4KtyhxrTUsfbRPy3Oz126Z2ZB
OFP2ifRGaVpQHz2vgpABTCD99MsopoXQt0mW3kbMWGhAv+C1+THNO5zSPZoS
DUZQefnjgXq2/myDeNSH0XSph2H3aVACW4cXUu9QmNLmJGlB6/1HGWG0ZKqI
tIihYFV2oJ7s9DgKw5iI6RGxBxopLBlovKz9WUi+ffsXehoPv3+vAtqNvhag
qv6U4D7ROuONuCX4pmXu7E9H6d6w16GfgSYSDYGxfj3TIM2on0ma8I5Tx4R6
1Mxj7mWHp53bj/O0M7/Dc1NJCPBEb8UIPeSGgw/KRJovy1wO/CyLaMY/ZX5I
5LR/qZYPfjpdoVV+T6vc3t3dff++g+vbm+jGXF7b3MZlWuWAYHvnx/EKrznX
tzojIjALpsleTieEDXE8xYxPdQE5xGANQ5ppLuwo9okZqmUaZaWeINYz1An1
V2D3XFIh+KAPAlo0mDYIoiTwgSpAk1E2VemAf8XRQBdEoea3gNRCG1Qw9icT
/NUQElhXXwc+Ed/swHd+Xm0fehlk6dhu+vLbtxdmL9Z76xgKsNrZ3dp5/36l
145MWCQxrJTG40nFKQieEYlGzzATtJhMYktTIB5CZayGwPtzegeQd3iVmAV6
YQozs8xnV1Ch28i/FaoYAXA+iV3mJ2bvqn5iYUDEIcdR4hfCMnQTI0+iG31H
7FOm4czWmU0MbsnbA3KdR9+xP+Vp0ehRPFVRSJPF7jZYHCNZc3jL0C6bPElG
IdgQYyWYyUSwuHFK6JRT9xY3nK6agMNNF3I0Q4N1oDOS4beRHzu8r+I9gyiO
c+FHt2nE2yl8ccoo5koLKxpqvGyRH67caO5mz4ysIcyUMPK+H9yQThTSwsZE
/REBRQQHAE7oOygzGiojXCMGRTKMu337th+8f28Xo4XwMIUsDXRYEv8E5PkX
sWRaxQxW1ayf+xNWYalho7fV28ASa8bZU2dJzJtLkyc4FiwamJp4E6pxeeNS
6pKooWDhc+vHUcg8oQ1WNBGWNaFdl7lRL26BHB/pajNYxNHvlJlZDITOUp/Q
yYhD9DOG/kz/W3qIo7zAEoOUNgNCOIaAi9M7NADs/JAZTaLvTBufdyvR2kyV
Z1AWZSYKuR/Q/o3TUEgOdKrvaQz8IKQO06xrZa1wM+oSsoGwIIkKQkxqlbHw
pEnpLKMZyLC0fP+WFEofeMEQMg8AQmqGo4iKHxWsUqo8LbOAxSdhJEkNuiST
JhjZ9fNQ1YwwGpqwJmpBpoHRQ2pPnJZ4JvPZvGKRb9/qe388iXHJbiVNWUGq
oX9zk5EijktoaIXMA+yaWpjjWjst5XaQPA1udNH1J1FjmEQ5OjQ9nwdlbqEo
j6j982PwDLCQTPCW4XaMaTFVC5umLWxQukFbvpcB6wkUsUXSXAfduoHF1aPq
eTVMSUrwgwC0+xjf4SceQU8Cw2NawgQO9YA3l357HsiaznQKh7pcLb14dXG5
1JG/6vSMv788+rdXxy+PDvH94uf9k5Pqi2daXPx89urksP5WP3lw9uLF0emh
PExXVeOSt/Ri/w+6g1ktnZ1fHp+d7p8sCdq7BIkVFpCGKhKlXGOxRCq0OwGd
mmTlzw/O/9//Wds0qtj62toz2kT5sbu2s0k/7kY6kdFS8Bn5SUgy9YiYNZ0Y
wUoJbQNCANodUs2IM5LsuCNNWWeaoPn4NSDzZk/9tR9M1ja/Mxew4MZFC7PG
RYbZ/JW5hwWILZdahqmg2bg+A+nmfPf/aPy2cHcu/vX7mAhSddd2v//Oa2GQ
Y/8GYjuvpCX0AAicQZRYLLRsfnOGxXN3F0c/9U6OTlW04KGN3kZvre3B5jzA
IgyPtkyVZ7Ln2VPUPK3z2XGPxZmVDjSOEVxjkmM+zgKQNgHoZpq7fUA171Wd
s/xcOML+jHKKLqMkiEuwlPmnmFQd2j5k1J4wOL5SPzGlv31U0zZmgUWAf6q0
/3fNxwLZEIJRzWWY26ZGsVMsPhIj1KgLat8OJ5nwXVrGIQiPj5w4LZIiJkdK
5nbEddjGUejcSCRicMSzSnNkJHriI48uWOsO9SROpzwrGDz0fQFxt3wMqk50
0ZGzT8BHb1Cfo+EGpCriWI4jC92s5TmGHNMBfigqMtAh90mpB8srph1P2Ue5
pX08TwfFHfgKEbc8GLIcDQp5kKQ/HcyKoCcCqN4YaPqTNCuE7+okIPHHY1fn
8cLuCgkknHfo8ZiYS1IJ9Fy7QkCEhbqwZ2Q+FTWROir0WMYjGDILJHATkh+S
/kyrmRKCmEMd602B4ZMDapcEes/bU8dWcWYY8DTpFF0SJtJOxqQbYsRMU/ek
k/uF0e5ZDzNDGERZgPMEpIPzV09F2SIFMygw6n6e4zQ3c0ctz4y5gs7pEB7G
WCyNQqAXSsFvcGnConF0b+aQW4tHyF9wQmlBXywRBgSa2UVBbaH7yinYHEOd
CdIQrPzOqmyVCcVVSOjiICZqy9U4labSbUA6IBSJHzOtu6FDvVDmnMEwCC49
NfxzMNteaBNj4paoQKCQoSgWM0qHroyzGOPoPtBZABsY00FbMwZcVOPD1BpD
CGbh30l1Yn0Fw7vaECZxNjG6DSkuw5LUEoNcFwXh2bDAPrGCbJu57ZhlCPnb
TX4Alx6pBbZ1YoFWdYfuggOGERkiR8T0Ztm4Vd0Jl4WZL5QJ3mNSkwQ7a/AH
coUWvyeCx9yqzlZCJnQCjsbRnwLymCFh5WK1osdqDi3mtvnBQWrFX4M4qOeM
FlDSaa3BJo0hLUyTr4vqNELUY1EUOFep2X2iHGAiMwTsijlOi5IuxieifeFb
H6usP3pUQfJHWcnbRxaQ1UHSrLE6a0v7BYIosjoYqwjyaHeNNYL/TR+26q6q
+c9ay7X1lmsbpoc1urtB+sqW2lY7alc9+5Rr6ONJ9z/5Hzp515jb6v3Gxv6+
e8W5L9vVZU5V3/9CM5n7TIjcH/z8k2bCe/x2Tz2yOy+G/2+/JrZTBnwyNnh0
4ODRPOv4uka/BYgGPIS9HwfLsT+kO2L4N7pbbu3u6KZM/HE/GpZpmbt2KaNH
NnQokeN5ZVNvWMPpdH5cKD5D9DUfZ4nYza7XZi1ZF5QNFomLyMEsz+EybENK
WbgNIg2ze+uzYnnP7VRFf3bQq1KawZ/Qjyr4CADlLi61MXgmjg2hZg9gHNAy
ZuwTKz3p81fuYBXgBZPKbo1KZ49VVvns1Xq7w6ZYuaWpJNZKpMWR+SPNA5hx
wJxpqZ1bqWiglgiNl5jFGNCbcY4Fparb4Ia2CatniWMWtcrCAJqlUZyqEQ1y
ijrq2MOMriojVA4w2UW6ZkB+bE8M/mJHl1o+PzpdUa8XO8zeNKBnoEwPme1b
Wl1y0JuQIwR2mmPQw8v8BBuOPfRZZN8VC1hS65UW0dt1gkfzMrSSMCxCF4iX
BdQuSqRdmttrq8BZh3lyRkDT8gZlbIyRRsNo6Ji1Wwv4M+UbgA8L1VQ8Qo70
roij2ct/D0H348baTkN8PCxdPlK8fKATQ2VtH8P+XMR4qJMPTfdDny8kLdcX
SssFCjaTxUshCscG8f+r9GwTnoxJd5ZFLzpfmRm1ik0LI0dytrMENpy3y02n
O4tlDjPvZ5EetA3pUr5IfDG8vLr8sbtrzJkb2+vPXIHfPHS0IC7Ncsmy365a
XxJ2+lyP/NsozYQ7k3gGXwezckyHgGhpjpNB44TEsKeOG42xY32CWu01wTG8
nMBignVYccLOtIw9brKMF36MR6hNO3rlDQOasbEMxc1hwjPUstGbiKkKEqzU
uBERjArgGvWb1dLXzqRnbHpmmMDPSISxs3BcTaxtUlgeWy7ofhzdaFecwTBR
iy8FPy97hGccseIDaKMoOD8nvjEZMF44Pk83MsPI4jgN/LhhNMPZLwwjp9Fs
UMcyINRdW19RDVu6a4rdnnXSEc6J79TtCJM1PmuayBAWMZ4PrFllAlMYLVVm
OElpglOHmGGGAqXBWyzua17PTPAJQKGrKIimOxkaI9GnisTpWPAem/FxJWr4
YSo5K6aGi3RMWpV1Ib19VLmajFdoEA1ZSQ71JArYjmgdTo7peJEFVbiWDVkw
+hXWVTnnazVrxvltVOLChh3IQtX+wS+NiAPXQYruxM0448RmqERxbNywuHty
fHFJ/CAvoOotuzu+ttrbqWMVZNtX/ntoIQ8ct02L1cai/mXHbRq4Der/9JnU
CgSw3moPR3P4/gHV4YDkltEZ9hcSiMszONirEaBko5M4osbE/xB3IJ3fkt+s
nbzdeGQDJTgMAjE0iGeqAoo4+KQZF9QM+yGCleg5Q6HNyCsM0E9LYj/LwijW
/4dUKoQ9+hIIOj/S7Oe/hFTWP4lUEGzIbiR45y0qXUZjTUrD167cQThhHdGQ
f1ja1HFBwHUxJtRKB0mTfD7Kio+hjUP+2vrGZuWatR2JBUfInIWXMUjUkbJW
5d9Y39zZgD62c/jsf6hBGmweNsjhX0UNvAcPtvgS1LDxmdTwqxgJrTO0RZrU
ZFF5/+cNYoJ/Fn/Z9WRiBiqNEYcaiVvd2l5bN6EyynVxHTTCeUgvTCd5F17v
93J6shF1ByaiLoph4Hv7qB/ITF8yIc7IJXZwz0XsgW5rfzpTmNXSqhjpWbV8
LnqO1+mGjneUZkUXSrAcTWl7/lGmhX6PH9+xpbSpGefKRJpwlBozBaNkzgfa
fqeq4xivavni55PD7vpKb0nEPgckL4i/tjHXoqTKCYXO4ziC2lj1xMZrOTCq
1ejlJijWm6AwjqgXZVxEwD6c7HhS59T/A2ebDukeGufHcZo1wjxzG0idm5wO
DneDbu67Qa/VSZqjh+f6aH3I9gxjhOl5TPAYgrO2xEvAsIEzNc4sTad/bmNR
EaAGxKydrFZG1PErvxmXt8iCKlJai2cbsQwacRWpibUcsVqma1MtB1D5dETu
mxA86m08f0Z3UoOoG0cpe+BARvvG4Ry+UBQHutAcJXJjDl/zEYeoGBvDjEJY
55Uw/j/GEdxeMjZbTiHgqEYE0FQe9ocd1C1d+UGgJ8XTUCdT5+E6gLQZ6FR5
9lt6EgQZ+/fRuBw7th0ZwXhX5ozWtR+5I7YvnaBp+2Ttum3gw5IeT4rpkkxc
sjDyVFTyIh1KG5tm8mAUiIwFEu3GEaHxx4HyAGlY1qmQITIEQz91ec/iHmAB
y7WkcnFkz8jGLOXW5BmSDpTV7rNqQxyDh2EJxObf/rXy+7NZgS4IYBfNtZpm
lIgp54PBDRd1XMaMkFk+rgNNVxDvVYdgzMU7yOxztnvMRHswTwEIOOwjFLOD
iZgi3LojPjGYTyJwTH32eOSzTGtAqsHRezOzAmXXVhsSouATPQkzxcTme8od
LmikAkcsJMQVbNB63ohap8mHZWZDrPVtGpe1AbUhbUoOG5Vew5k10fKH7LLy
JBYLkVLK6bfJZ4QvmX07m5jg2SpEJpUrXabOmdBhhFDcRvrOni6vr4/Pz1+e
XZ5dEVe7vu7G+lbHZvM805HLLFwo0TTemeHVKYLcZjQ5dQhBfDmdzN7BvQua
+jv1E/6lXq6vafgrQtWrl0f7F2enV0en+89Pjq6vFe6VJAw21q8K+jnTy++V
xtnay8HZ4RE/hHtCgKoIJldZXlwJ1+IRfq/7auvl8OjioOqF9i97/WZ2Jmqm
F2iebbthFNGl5t4tEUbF+bdLseL/llile0SapDxC22SluNm1Fq11eSEIVzzv
FedDEAjowEUj05SWV2gJlVB4CAuULKBq7CEJ9IENE07PoXwk+pnrC0NoLMFr
OTOWkrXRiCQBz5toQrVLnqbM5YodxTQW+gJ6NVCkmTCBwBDC2xGi4/rTAvoU
MThPuEvP+w3CabVyCLmKXGVx3NhZY0HmuDMkKKny8ls/s+cmmKja51zlSdoB
7wfm8/EjW/iBpxi4ClSIOn1SLSWPwdhuHWAvSkGpO0FCRjMzYBwNR4VEGTia
jAkRPD86xdMDDugsBAh/6gyG8NCrV9YTJAaFEyqA3Bdgrp/ziaoFg4V8Hfwd
fjn8NazCt/49kuH0XRSURirJDHZ6FskMabYB20ZnzB9eOtaaZ1LXtPTXTPxr
2kd6HyJnMOjGylvXZISC10JsJruBFS4/5+C+B1ZnXZteQ3hn0XDIesksMron
t/7U0DyxVWQVYhU977jpJpprAXiSBO5zqp+zsdTm4uzk6uLs4JejS4sEXgsS
GAS4OLs6OT796ejl9fVcUiArAAg/rfQUrNAgzUvGG+DMydkFkGYQ+0PM6vq6
yLIr/MppIRKfQQpCW+eegdAHAYQda93tVOJYsbeENdSyAUQPhmnR0RFSyUDI
O23YwUoSqdRRUTtvTAoPmwuktdGa6sNMpc5WHMzPzS40mfQeG9xU4LXKX/XW
sxIULHxt+4paWCB+034PuNq8Bc7Ptwh7v/Hef4MRPa+xHQgNdiLGIhs5LxNf
ZXPFHIMB8PMeG/ln4Y9IftydtfozLjiHaHjbF+ANbu2p34R+MDNGIw7+6jj7
XiP+R1EVAyan407sy+nKR9KrnNMXUUkbqwSVcF8NSnEjs0TSK0xTs6ZaUaJc
UjadWcLYWlYaIBVBhx01z/Sa+nFDXpmNBRrYfW2y5Xl535Kw1cJFPDFyIRTN
TdCU4Qi1QNTHCUMUy3KuU+dSeAOCsKPcCTohajZAsRIIJjqt1q895WgN1Up5
CLtQzK59gXZrFvFHB0SeauTCNiaMzaq3ao5Z8BDc5yxJdIzDGx5pzuYUJctA
BWRWRWgyQdXQo1txCt0vb4JOQh1NBwQOnlaTSBdKPfjodWaiJSAFzX0jcj1U
m5DiC0Ys+7UxoVVngpnCZNPO6ajeBMl7vEw3u7diic6aIGRdjDKLyucX5T/4
IDAQA3ruQo2qKHbWOovFpMtUpr9cDqTV8bJMhpkfcPhglURfBwHNBwI4tPjR
Op6bQjav6skZi1Q9Dn+YNau166OWAwIwsovO+aIKTFGz0VZMw4wwTMjtqIOx
qlnwQv8FOqg5aH60DuqszPug+vmg1jnPgL0vqXUq32uJC/uvVDvBez9aqVwk
Lpuisued82pNKQI2asL8g3I9sHVnmT+1lNQy45Y9jhy87X0BDQ/RRzogtkAT
bZoCjbPLce+YvHOaOSFK1+bp5fbxmexzIjkxudd5QrQjdYSxXxR+cFOVNYgy
63WQHLGsynMXr8SM84kjhGarNzjx15XOCv+Asaya/mYmWgV0Sh0FlOdo2mnb
coqqkaRKUMDKwUyCQTObCaEmTSfLgDWmSQa3B0Q7CiVcSBGSAJp+ltTuKmD8
FOkCNSuQMBC28UHNa+YgLIqK7zkVAUywZUf8KyW8dY1kUhsp7hSHANqbVCzU
vig0Jy+jA7fwhAMAHjXitMTF4fMMzJZYzoZ7hB1xSHJrOiLaEi8JoW60nkA1
QcIwB7pKWYtJmuew4fYkjtgZzOnSOj7saIaTimOrzayyvrWlUiLwwpRxEMdj
1LYgnyuvkAp8w94hxC8E04qUHMs1h9p9kCOaakl1rqrfEH2IHzUdLXHdnt9t
BIa+BweNClPspGb6Va4JSdd0PGbbvWTKAGJL8xxqCcdCGto4fUzVrE6dPmO9
cX7CvkEbs9EIH+UkBWSRGx+bZH1jGlVYpskfD1DpRQioJvd5b9TC2fSZrUxi
f1rRIfyMgE7O+YjMOWufRZ+Bk5djE4biZDr2LLW6/JpJYWrid+FEA5jTMq8z
++FdzWPtiwCmgboYnFkx09UsFya6UadEgS/t0QGa9HyKEbIc5RDRUqcACbaa
OIyMAMIikHGtGtB2dSjhFCEYb5dMmNlsFpP4xwtOcvpwJTT2d1cOUCcHiis+
Eju3lQAt6+ZUrFZ+ttbd3tra2FJSerHa+LpcnonpNSlrfNQ3gyH0nLPnCwIh
/CBLeNqxvW72tqwc2V1b34ZXlGSiFvd5lT6MLJ+3oXaljDuEqVZD9DRJJ6WQ
c6VQ3Mq6qhopIlmdAjeeemfy0N41lObP+LyrE/lF7yahUWXFrcw2poH3uvjs
mb+f//mkDjCwicV6R9tiEsI+7/OOkf3Q4voHGmPgNfPcMemoQzo0nX0etN81
NZKZYJi2gdfNc7TH0yQYZWlCMiY0EdCfO/DWw0PzwBvmOTASiQBywrf9AaQ8
W6jYQgPVvX0z3tVu6o3eNo0LWWu1MZ5FQ2GUsTfNo/vPz15egkWAhX/CalsX
TSNuPbBqHnjLPPcqgYc1AO0hdL1ad3/KTt6WrXCOvi0D73xo4O35gS/+OLWn
MtJLw/Tuc1b8wYF35gd21PMxtImPoJHGwPsfhdi75rk6i+aFkXef9Pl0Un5m
njslXWFfyoL9+Rmc5DN4yKo8R8xL6o+h8gUXTfvSA6/Jc6ZqZSWjP/HzGQOv
y3MvTYJYM/nDpJJ8kYE35LlDrvEjYu1VkuGsxgr7R34+Y+BNeW4+RPpjx/zc
gbfMcylpi1AyacgcRWQ4mBP8+yMHbg013N3e3VxAx2vb8tyrxDkQGVMjq0Ff
bOAdee4Fl7ztp/eNCkIfOeynD4ygDVuZ0AQMH5uf8yq2CQA+TYuqQBcXExS2
vtsldGH91PUFcZXNmSK3ORez7VRFajuwkd1P3XJP6jszjCTWoS7wURihNrc6
j7n2cabpEEOdNlCr0jjxgAmFFx3ZFlRqhk7BkEsKro65co0t93DIZV9YhRXF
GYeL0KS3H8CmlEW+QKCOdeOTUZ3XGNZ9aNOHOQjyOVqLHdKUVyps7SOCw4RL
zRrVWmg9LOXQpfOq2CQ6QXZMpMWA5HbSfLaZhMreJ35iEBV5FeJcZhi2CuCq
rCVuau7scjh3CCU4b2eGZC8tdQvLnw5uzDnThmnIgYuPYzqsSki4tW4kB6kq
q1m56aNBIyQ7ZDDh4MsmfcdeY4exndekjFKcksLpzNfMhhcEWzvH1XI0rgks
nSmfzX7Fak12EOPQcov/+s1xjAWssl+iCi5b9ga0fDAZ4jBsCGbbvh+i3m5d
z2NS9gkJZqYiuY1VI1MZr2VxuVPC0USVqr/a9xp0Mz4X/hDpYoAq7N/ZhE4u
sCbF5MxxjiMDixHsWHdaI/SSI+sQv5eyy4n9/iGTuxjG3HjueSwicP0m3Qrm
Or11rNWrBffukEipIwmgNjjI5a2S6RwJyH4zFDpcfa9MGHymyDo9FEh4f1U3
hCfBZcgABBzS2QB0qJMIRQANzdd2HbYm+UlVYbSDLTWWkj6S5PJyOITsllp0
7CJLJWo05VKOZlxBw7xkG8+gjE0VdARhsqG6pZbpkVvL9Ne6likB9CRKyntT
sdApYup5/1aauXAPxtSai31JatH7keFBfha6LKpyFlamxsFAwtVBcRCRsZpx
pg3YI+IHWZq7EVRV9T8CXAHhmnds2TIYUKcogkaXxlYa2mKA6uiWfSBpORx9
IBnDMfH5dQUDWqHk3IM8uUTuTBwYmJHoscg7hGyYomYvqiPQrpb1wYLLzbGo
G6F4aVK7uAkKpJnGoQkgsfWKbTlouzVSFnKS6S7mF4g9KsbbEYi18wLh6wRD
LAE2kpJlUVUSa5TgMXUWosz6x6XQIlI2CsUFxFO7BldQzG2nkdvGSgwnfRBX
CWgodfyPMpqMzUsB+qR/A1tQ7y03sbamQDOPwMW8a2SGZcjPbMbQ7NAii5sI
Pht+M79RXJONdjkfib+7SCdAAgEvHc+3UVfusXXI7sPhMkIHjx9zOcAa6mur
q6tdhhwrlxV68xMm5Z12sM5+kSoZ7H9CUdrHTpqUOjLuExnlsrkzzbp0bmgJ
58xD8pAMNMER81ttcwzrcsOGDT1NdPGURpHGvRGqnXMMjE1Fz/C+EjZfzk8B
eNad+GGoJZp/tsBTvW6j3VTCeawR3B3lY2s1eQ21sVE8582yfdPHMCp68goW
ftcHSbSneTB+GmO7nsoNtHlKgCCGFeZyp4dL4Nv05/so/DbcWlvb8re2BoP+
1voKQ/9n1+nPYyMCO683YAZ1pNLosATi5DUiU0Mg84QYqp/ZQkJ5oBO8MoL1
3GtEcsFleSUvgbjiNohe4EgF3L3dlAbVnYxzwNDaJoE94egqorXHj/elaCxP
+vHjjjGjAtJc21yeslCX4g3CHDuze8jacOX5BtlC0aM9sPttHKTCTNTydX5z
he/X4t0wc1IgF6J+d072LSDiKM+1KQDhsMI0q1IvCB3TsWT+SOTJzDRNZQgz
TZifzFSXJ/C7rTSmXM0R1U1B6aQ2U2cFHQibJaL4Wl2QEHJGdbtDOMCeugRC
G0Sk0Z+/5oE07lV/Y3dtK1xb3dzYXO31Vvsb6+tbOzs7m8EuWMT25qa8gKbl
+SdPnrT2+8MPqru93tlWT+jfHUU/2QMGTEGo2NWdHxXLJkwQO6Qe5zdAg0Is
cfIVLdOVbzz1SDiDerH/O0IurqR09NXF+f7BkdpcrRvg5otjunN6ePXi4mL2
5Le5O9/0p4uzq4vj/2VzZJdnu+i2jrriPbEdne//cXK2f3iFGjdgqITrTx9z
ys4p9GHa1AHnuxn7H8Si2ljf2d6pirVIiIK5nxOy4y02XB2kuaUAbzS53QSM
r/ClFxDwW66abd3dDDfCra1tHe7Stm4+W99a1dv9cNtfa25rWw+ysW13sLU7
m2vYW/zhzcWmkZbeT+G0FW7gp1eQ+4YhwJlWqLkNtxcE33Gt3/FsbxXGNHnL
J3X14EcncPfeuDGq8mfFU289W8Kr3FhHMpz6lj3D6WC5jm4dhdkKsZCXR+cn
fxj0uGA8eOJiRR3A2pi6PK8ekzbwLS+Tfi3TrFfq9qbl27l1NLsoRt/Irmzt
8K5s7TZ25Z8Bx0eIVxnUkbjbm0hCgyewYIKmJazOzVs6DYr4Kr/5poIn4mIM
O35NcH0z9xghnXpM/ziBv7QFxf3Iz0cyjqx2d5uW+WRnd7ez+09erfmI5YM/
Y9LLqZevSE3toBCjQQX6uUL71TWt6GcvSm9fr77Bn6s+DDbfquUyMaYYXvrj
la8yPanhYbu26i71TmBZqRt8ZK/yfA20mceAwjUO0wx6xYgGqZoD6nT7Rn3P
4Lmi34SNK2qPrvWvQiKRUN/i6lUWlAZPsQ3P1pgVPFvb7Kytfpl9qMiHMan7
HbUiTeWmiXMtjUijSdkH0mj43oV8MJkuW8AvO9vTaQGfsyVPH/OpBOptFX1o
ztGO0svlkkUFePy0etag/nz/b2ie0tvCvccmPvm2nblERkXjcz5ztEk8XRZw
EIBvPsQNAXL1FQTdxS/Prw6e8x53vxtpn7Tn3mizl06KD/UR1VyMdoA0awJr
41rI1x4QayQPCbLzgs1etxrL9tr2zs623tjY2uz1gtWdMFxdfeavooTIQtFW
9dEi3Kp7wOmN7fXdztq6eiJfNhv6CwOZJP+s+kJCo9mmoSvPYfxwQKqQsij6
IGA/VU5ZheXno/3Do5ezwqjBhw1+vnZazDNklyodjoEhjk8Pri4u9y8vll2m
0THa1fOrs1eXdGa8cBkN0c7p2eURXofJxnabelqdOtmwC1MmNCUEw4qcYTtG
D5Rk2S1Nh1bLVgTC8f5yc92dCrgO4c4+EiOY22lXIfJALf8FKNsifE+PLheu
++T49NXvvHKaCHu+f9w/Pjk6XJlnVFIv5xuDcKRJ7QLfNjc6axvz+PZpuOTC
2kRZqHzim2r4QtFit6BT9wT2KBtx148KgXGFAsT8TeXeZeYQTSA3QXtFJCSt
HHxyls5aJB31rugABIsDbwG3x53aXk1r/gfD82F2Q9P4+fDlFZz77+wPwraV
OdlqsJxla3NmtqGlg9U2JoyV8QHuCuCRCVNPVa/tXc5xUuwjLWwhAwcMxiQ9
xxOC+ICAPlrm/b8BKBwo0qYiSZiNXINBY7eAtnzGsrqZALijqjlbVF+p6+bI
ydK4warz5jmufi0lZxaYWz3vEmF0Ob8kDNbJjM139XtYYGwcoxZKF4F3mZ55
CdVY0zNhGqfDKRcWtO8dYMfYMDPvdmNHM17/EjiZQuJjMW9YwIzvO2yB7LIF
skrbl9I4bBYsTFkPfmVMLvaeu1Eaz1lJqneTShEUObWbt+p+zRkf5oWctPTb
KEslDo3LGsT8Zo48uldjoqdRbpImfqyn/SvMkbZ+JBv6Zldmpyg2MjYAwhHL
xgZ82TABsoYJ+G0G6FxsN7JImGfCcjy5pgdReoPzebq/X9uYcc3GbLG4jHQ8
kSostrjD9WuiqCdvTOajNXXWhsOKCGhKpPqMxb9gnF5i3JJsgwAW6dqiJi9u
FSy1WQl+OZQcjBk74yVMrfL+nI7rFkE6Mb9iR+1zfxcSRfpc1m2BiDo/ZWDa
V2bVPc9bQ+B14ZsUk2uB7rWt95ImVX9q2dxU3Rx2o3WEUxuLVbOkDuNqNSeC
Y0sXgXp9fH6VDq6ev0FnG3DODaz/rpl8o4G1Yuc1FYIGzbmaVyCaV9vVOR6C
ONz0Jorja3YAsYvG5E3Y22aHbN2dqhCypAlsAkIRKNhPNNdM7jjoBI9pCb+n
dUlxohrnIU44XVTsr7AmSofOtAZRTNPdU9dfU3ev6X/O3XyjvgIXxJvH1V9I
af9adX9X3SRR3dtb1b24NvTULHzVJClYRbMQPhYRcL/wAq1NlF2Cd1oEnsEK
mr95Oa6xoIccvN4vjc9eYq1f9cukKEGFB7S5ZxcrttCKde0YSJr3HBoGMxlN
c7xaSQL9ZWT2Jkx0XQieYwdoZxMT2SMREJDWAdcgWT49PshX3HBvvJUnJizY
XNXXtCPR/bCPL/z6Ah3HfpLeq+txfL91zXbiX6OsKImzyCvCa/NwbcUG9y20
ta376tY+AZbtcLk6t/TXFyYVWF2jcZRCB7pWYcb1lS2fYIzQY8NHD88PfxGP
dRiBIVgSt2ZRtOYJv6j9X3MbV2f6MfxOIFjUplo+2VzhYeXCDl3YWVEoZnXn
TyszsWvzlrdzOS/nctxFhmNZvIUHx6af0eB34h/kqf4Gd88+jLc2MGv5t/3T
lRrIhP7lxAUwGwCRA9kd+WUsu53YsjVxlIhUy0F2EpPI4s0pV+ZiwsGIKL5b
pN0L+uVP4EpZfnl5qb5TG6vjXCBStfmJfe1T22J9FU34JU/sDo3LXGS2eC35
hYRmcBcHWH52KneW3UPXrWW2quEFc8MvbdhYD2cAJJQgxohfGWJ74yRbwqaU
KQWOdOKCpt41dcBAIxxgDtzwltod70hVEpAjcgiEJchmWx8sS6xhafOBeMom
FUHKJe0HN0l6R0NKLiUpSxJbo8Nvl/jF7kt1cfql+TSNJckU4yjxfBKZGI/a
e7tl68fJm5nXt9bfv/dMeAXwJYiM6+mA0K8grH3O0ViVx5U45RgJOOwCgmfM
xq34Bof+Bhk2Yi9wh9ATpQUBCI3QoxPqUx1BFBQddYSX6x6WY/9PuC5eRnSu
oGcBzj/SfBQNynGkTmkDSO+jJyP1NxpxVEYd9RPBXV2MoywhTdQwoIiYCnGn
y1Lf6/oVyRmd5qI743ofyxvmvf8AbITWUtiCAAA=

-->

</rfc>
