<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<!-- Alterations to I-D/RFC boilerplate -->
<?rfc private="" ?>
<!-- Default private="" Produce an internal memo 2.5pp shorter than an I-D or RFC -->
<?rfc rfcprocack="yes" ?>
<!-- Default rfcprocack="no" add a short sentence acknowledging xml2rfc -->
<?rfc strict="no" ?>
<!-- Default strict="no" Don't check I-D nits -->
<?rfc rfcedstyle="yes" ?>
<!-- Default rfcedstyle="yes" attempt to closely follow finer details from the latest observable RFC-Editor style -->
<!-- IETF process -->
<?rfc iprnotified="no" ?>
<!-- Default iprnotified="no" I haven't disclosed existence of IPR to IETF -->
<!-- ToC format -->
<?rfc toc="yes" ?>
<!-- Default toc="no" No Table of Contents -->
<!-- Cross referencing, footnotes, comments -->
<?rfc symrefs="yes"?>
<!-- Default symrefs="no" Don't use anchors, but use numbers for refs -->
<?rfc sortrefs="yes"?>
<!-- Default sortrefs="no" Don't sort references into order -->
<?rfc comments="yes" ?>
<!-- Default comments="no" Don't render comments -->
<?rfc inline="no" ?>
<!-- Default inline="no" if comments is "yes", then render comments inline; otherwise render them in an `Editorial Comments' section -->
<!-- Pagination control -->
<?rfc compact="yes"?>
<!-- Default compact="no" Start sections on new pages -->
<?rfc subcompact="no"?>
<!-- Default subcompact="(as compact setting)" yes/no is not quite as compact as yes/yes -->
<!-- HTML formatting control -->
<?rfc emoticonic="yes" ?>
<!-- Default emoticonic="no" Doesn't prettify HTML format -->
<rfc category="std" docName="draft-ietf-tsvwg-rfc6040update-shim-11"
     ipr="trust200902" updates="6040, 2661, 2784, 3931, 4380, 7450">
  <front>
    <title abbrev="ECN over IP-shim-(L2)-IP Tunnels">Propagating Explicit
    Congestion Notification Across IP Tunnel Headers Separated by a
    Shim</title>

    <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
      <organization>Independent</organization>

      <address>
        <postal>
          <street/>

          <country>UK</country>
        </postal>

        <email>ietf@bobbriscoe.net</email>

        <uri>http://bobbriscoe.net/</uri>
      </address>
    </author>

    <date year="2020"/>

    <area>Transport</area>

    <workgroup>Transport Area Working Group</workgroup>

    <keyword>Congestion Control and Management</keyword>

    <keyword>Congestion Notification</keyword>

    <keyword>Information Security</keyword>

    <keyword>Tunnelling</keyword>

    <keyword>Encapsulation &amp; Decapsulation</keyword>

    <keyword>Protocol</keyword>

    <keyword>ECN</keyword>

    <keyword>Layering</keyword>

    <abstract>
      <t>RFC 6040 on "Tunnelling of Explicit Congestion Notification" made the
      rules for propagation of ECN consistent for all forms of IP in IP
      tunnel. This specification updates RFC 6040 to clarify that its scope
      includes tunnels where two IP headers are separated by at least one shim
      header that is not sufficient on its own for wide area packet
      forwarding. It surveys widely deployed IP tunnelling protocols that use
      such shim header(s) and updates the specifications of those that do not
      mention ECN propagation (L2TPv2, L2TPv3, GRE, Teredo and AMT). This
      specification also updates RFC 6040 with configuration requirements
      needed to make any legacy tunnel ingress safe.</t>
    </abstract>
  </front>

  <!-- ================================================================ -->

  <middle>
    <!-- ================================================================ -->

    <section anchor="rfc6040up_Introduction" title="Introduction">
      <t>RFC 6040 on "Tunnelling of Explicit Congestion Notification" <xref
      target="RFC6040"/> made the rules for propagation of Explicit Congestion
      Notification (ECN <xref target="RFC3168"/>) consistent for all forms of
      IP in IP tunnel.</t>

      <t>A common pattern for many tunnelling protocols is to encapsulate an
      inner IP header (v4 or v6) with shim header(s) then an outer IP header
      (v4 or v6). Some of these shim headers are designed as generic
      encapsulations, so they do not necessarily directly encapsulate an inner
      IP header. Instead they can encapsulate headers such as link-layer (L2)
      protocols that in turn often encapsulate IP.</t>

      <t>To clear up confusion, this specification clarifies that the scope of
      RFC 6040 includes any IP-in-IP tunnel, including those with shim
      header(s) and other encapsulations between the IP headers. Where
      necessary, it updates the specifications of the relevant encapsulation
      protocols with the specific text necessary to comply with RFC 6040.</t>

      <t>This specification also updates RFC 6040 to state how operators ought
      to configure a legacy tunnel ingress to avoid unsafe system
      configurations.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="rfc6040up_Reqs_Language" title="Terminology">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in RFC 2119 <xref
      target="RFC2119"/> when, and only when, they appear in all capitals, as
      shown here.</t>

      <t>This specification uses the terminology defined in RFC 6040 <xref
      target="RFC6040"/>.</t>
    </section>

    <section anchor="rfc6040up_scope" title="Scope of RFC 6040">
      <t>In section 1.1 of RFC 6040, its scope is defined as: <list
          style="empty">
          <t>"...ECN field processing at encapsulation and decapsulation for
          any IP-in-IP tunnelling, whether IPsec or non-IPsec tunnels. It
          applies irrespective of whether IPv4 or IPv6 is used for either the
          inner or outer headers. ..."</t>
        </list></t>

      <t>This was intended to include cases where shim header(s) sit between
      the IP headers. Many tunnelling implementers have interpreted the scope
      of RFC 6040 as it was intended, but it is ambiguous. Therefore, this
      specification updates RFC 6040 by adding the following scoping text
      after the sentences quoted above:<list style="empty">
          <t>It applies in cases where an outer IP header encapsulates an
          inner IP header either directly or indirectly by encapsulating other
          headers that in turn encapsulate (or might encapsulate) an inner IP
          header.</t>
        </list></t>

      <t>There is another problem with the scope of RFC 6040. Like many IETF
      specifications, RFC 6040 is written as a specification that
      implementations can choose to claim compliance with. This means it does
      not cover two important cases:<list style="numbers">
          <t>those cases where it is infeasible for an implementation to
          access an inner IP header when adding or removing an outer IP
          header;</t>

          <t>those implementations that choose not to propagate ECN between IP
          headers.</t>
        </list></t>

      <t>However, the ECN field is a non-optional part of the IP header (v4
      and v6). So any implementation that creates an outer IP header has to
      give the ECN field some value. There is only one safe value a tunnel
      ingress can use if it does not know whether the egress supports
      propagation of the ECN field; it has to clear the ECN field in any outer
      IP header to 0b00.</t>

      <t>However, an RFC has no jurisdiction over implementations that choose
      not to comply with it or cannot comply with it, including all those
      implementations that pre-dated the RFC. Therefore it would have been
      unreasonable to add such a requirement to RFC 6040. Nonetheless, to
      ensure safe propagation of the ECN field over tunnels, it is reasonable
      to add requirements on operators, to ensure they configure their tunnels
      safely (where possible). Before stating these configuration requirements
      in <xref target="rfc6040up_sec_safe"/>, the factors that determine
      whether propagating ECN is feasible or desirable will be briefly
      introduced.</t>

      <section anchor="rfc6040up_feasibility"
               title="Feasibility of ECN Propagation between Tunnel Headers">
        <t>In many cases shim header(s) and an outer IP header are always
        added to (or removed from) an inner IP packet as part of the same
        procedure. We call this a tightly coupled shim header. Processing the
        shim and outer together is often necessary because the shim(s) are not
        sufficient for packet forwarding in their own right; not unless
        complemented by an outer header. In these cases it will often be
        feasible for an implementation to propagate the ECN field between the
        IP headers.</t>

        <t>In some cases a tunnel adds an outer IP header and a tightly
        coupled shim header to an inner header that is not an IP header, but
        that in turn encapsulates an IP header (or might encapsulate an IP
        header). For instance an inner Ethernet (or other link layer) header
        might encapsulate an inner IP header as its payload. We call this a
        tightly coupled shim over an encapsulating header.</t>

        <t>Digging to arbitrary depths to find an inner IP header within an
        encapsulation is strictly a layering violation so it cannot be a
        required behaviour. Nonetheless, some tunnel endpoints already look
        within a L2 header for an IP header, for instance to map the Diffserv
        codepoint between an encapsulated IP header and an outer IP header
        <xref target="RFC2983"/>. In such cases at least, it should be
        feasible to also (independently) propagate the ECN field between the
        same IP headers. Thus, access to the ECN field within an encapsulating
        header can be a useful and benign optimization. The guidelines in
        section 5 of <xref target="I-D.ietf-tsvwg-ecn-encap-guidelines"/> give
        the conditions for this layering violation to be benign.</t>
      </section>

      <section anchor="rfc6040up_desirability"
               title="Desirability of ECN Propagation between Tunnel Headers">
        <t>Developers and network operators are encouraged to implement and
        deploy tunnel endpoints compliant with RFC 6040 (as updated by the
        present specification) in order to provide the benefits of wider ECN
        deployment <xref target="RFC8087"/>. Nonetheless, propagation of ECN
        between IP headers, whether separated by shim headers or not, has to
        be optional to implement and to use, because:<list style="symbols">
            <t>Legacy implementations of tunnels without any ECN support
            already exist</t>

            <t>A network might be designed so that there is usually no
            bottleneck within the tunnel</t>

            <t>If the tunnel endpoints would have to search within an L2
            header to find an encapsulated IP header, it might not be worth
            the potential performance hit</t>
          </list></t>
      </section>
    </section>

    <section anchor="rfc6040up_sec_safe"
             title="Making a non-ECN Tunnel Ingress Safe by Configuration">
      <t>Even when no specific attempt has been made to implement propagation
      of the ECN field at a tunnel ingress, it ought to be possible for the
      operator to render a tunnel ingress safe by configuration. The main
      safety concern is to disable (clear to zero) the ECN capability in the
      outer IP header at the ingress if the egress of the tunnel does not
      implement ECN logic to propagate any ECN markings into the packet
      forwarded beyond the tunnel. Otherwise the non-ECN egress could discard
      any ECN marking introduced within the tunnel, which would break all the
      ECN-based control loops that regulate the traffic load over the
      tunnel.</t>

      <t>Therefore this specification updates RFC 6040 by inserting the
      following text at the end of section 4.3:<list style="empty">
          <t>"<vspace blankLines="0"/>Whether or not an ingress implementation
          claims compliance with RFC 6040, RFC 4301 or RFC3168, when the outer
          tunnel header is IP (v4 or v6), if possible, the operator MUST
          configure the ingress to zero the outer ECN field in any of the
          following cases:<list style="symbols">
              <t>if it is known that the tunnel egress does not support any of
              the RFCs that define propagation of the ECN field (RFC 6040, RFC
              4301 or the full functionality mode of RFC 3168)</t>

              <!--...from the outer to any forwarded IP header (which might be the forwarded header itself, or it might be encapsulated within a forwarded non-IP header).-->

              <t>or if the behaviour of the egress is not known or an egress
              with unknown behaviour might be dynamically paired with the
              ingress.</t>

              <t>or if an IP header might be encapsulated within a non-IP
              header that the tunnel ingress is encapsulating, but the ingress
              does not inspect within the encapsulation.</t>

              <!--Not sure this last bullet is needed. The above commented addition to the first bullet would be better.-->
            </list>For the avoidance of doubt, the above only concerns the
          outer IP header. The ingress MUST NOT alter the ECN field of the
          arriving IP header that will become the inner IP header.</t>

          <t>In order that the network operator can comply with the above
          safety rules, even if an implementation of a tunnel ingress does not
          claim to support RFC 6040, RFC 4301 or the full functionality mode
          of RFC 3168:<list style="symbols">
              <t>it MUST NOT treat the former ToS octet (IPv4) or the former
              Traffic Class octet (IPv6) as a single 8-bit field, as the
              resulting linkage of ECN and Diffserv field propagation between
              inner and outer is not consistent with the definition of the
              6-bit Diffserv field in <xref target="RFC2474"/> and <xref
              target="RFC3260"/>;</t>

              <t>it SHOULD be able to be configured to zero the ECN field of
              the outer header.</t>
            </list>"</t>
        </list></t>

      <t>For instance, if a tunnel ingress with no ECN-specific logic had a
      configuration capability to refer to the last 2 bits of the old ToS Byte
      of the outer (e.g. with a 0x3 mask) and set them to zero, while also
      being able to allow the DSCP to be re-mapped independently, that would
      be sufficient to satisfy both the above implementation requirements.</t>

      <t>There might be concern that the above "MUST NOT" makes compliant
      implementations non-compliant at a stroke. However, by definition it
      solely applies to equipment that provides Diffserv configuration. Any
      such Diffserv equipment that is configuring treatment of the former ToS
      octet (IPv4) or the former Traffic Class octet (IPv6) as a single 8-bit
      field must have always been non-compliant with the definition of the
      6-bit Diffserv field in <xref target="RFC2474"/> and <xref
      target="RFC3260"/>. If a tunnel ingress does not have any ECN logic,
      copying the ECN field as a side-effect of copying the DSCP is a
      seriously unsafe bug that risks breaking the feedback loops that
      regulate load on a tunnel.</t>

      <t>Zeroing the outer ECN field of all packets in all circumstances would
      be safe, but it would not be sufficient to claim compliance with RFC
      6040 because it would not meet the aim of introducing ECN support to
      tunnels (see Section 4.3 of <xref target="RFC6040"/>).</t>
    </section>

    <section title="ECN Propagation and Fragmentation/Reassembly">
      <t>The following requirements update RFC6040, which omitted handling of
      the ECN field during fragmentation or reassembly. These changes might
      alter how many ECN-marked packets are propagated by a tunnel that
      fragments packets, but this would not raise any backward compatibility
      issues:</t>

      <t>If a tunnel ingress fragments a packet, it MUST set the outer ECN
      field of all the fragments to the same value as it would have set if it
      had not fragmented the packet.</t>

      <t>During reassembly of outer fragments <xref
      target="I-D.ietf-intarea-tunnels"/>, if the ECN fields of the outer
      headers being reassembled into a single packet consist of a mixture of
      Not-ECT and other ECN codepoints, the packet MUST be discarded.</t>

      <t>As a tunnel egress reassembles sets of outer fragments <xref
      target="I-D.ietf-intarea-tunnels"/> into packets, it is required to
      comply with the reassembly requirements in Section 5.3 of <xref
      target="RFC3168"/>.</t>
    </section>

    <section anchor="rfc6040up_IP-IP_Coupled_Shim_Tunnels"
             title="IP-in-IP Tunnels with Tightly Coupled Shim Headers">
      <t>There follows a list of specifications of encapsulations with tightly
      coupled shim header(s), in rough chronological order. The list is
      confined to standards track or widely deployed protocols. The list is
      not necessarily exhaustive so, for the avoidance of doubt, the scope of
      RFC 6040 is defined in <xref target="rfc6040up_scope"/> and is not
      limited to this list. <list style="symbols">
          <t>PPTP (Point-to-Point Tunneling Protocol) <xref
          target="RFC2637"/>;</t>

          <t>L2TP (Layer 2 Tunnelling Protocol), specifically L2TPv2 <xref
          target="RFC2661"/> and L2TPv3 <xref target="RFC3931"/>, which not
          only includes all the L2-specific specializations of L2TP, but also
          derivatives such as the Keyed IPv6 Tunnel <xref
          target="RFC8159"/>;</t>

          <t>GRE (Generic Routing Encapsulation) <xref target="RFC2784"/> and
          NVGRE (Network Virtualization using GRE) <xref
          target="RFC7637"/>;</t>

          <t>GTP (GPRS Tunnelling Protocol), specifically GTPv1 <xref
          target="GTPv1"/>, GTP v1 User Plane <xref target="GTPv1-U"/>, GTP v2
          Control Plane <xref target="GTPv2-C"/>;</t>

          <t>Teredo <xref target="RFC4380"/>;</t>

          <t>CAPWAP (Control And Provisioning of Wireless Access Points) <xref
          target="RFC5415"/>;</t>

          <t>LISP (Locator/Identifier Separation Protocol) <xref
          target="RFC6830"/>;</t>

          <t>AMT (Automatic Multicast Tunneling) <xref target="RFC7450"/>;</t>

          <t>VXLAN (Virtual eXtensible Local Area Network) <xref
          target="RFC7348"/> and VXLAN-GPE <xref
          target="I-D.ietf-nvo3-vxlan-gpe"/>;</t>

          <t>The Network Service Header (NSH <xref target="RFC8300"/>) for
          Service Function Chaining (SFC);</t>

          <t>Geneve <xref target="I-D.ietf-nvo3-geneve"/>;</t>

          <t>GUE (Generic UDP Encapsulation) <xref
          target="I-D.ietf-intarea-gue"/>;</t>

          <t>Direct tunnelling of an IP packet within a UDP/IP datagram (see
          Section 3.1.11 of <xref target="RFC8085"/>);</t>

          <t>TCP Encapsulation of IKE and IPsec Packets (see Section 12.5 of
          <xref target="RFC8229"/>).</t>
        </list></t>

      <t>Some of the listed protocols enable encapsulation of a variety of
      network layer protocols as inner and/or outer. This specification
      applies in the cases where there is an inner and outer IP header as
      described in <xref target="rfc6040up_scope"/>. Otherwise <xref
      target="I-D.ietf-tsvwg-ecn-encap-guidelines"/> gives guidance on how to
      design propagation of ECN into other protocols that might encapsulate
      IP.</t>

      <t>Where protocols in the above list need to be updated to specify ECN
      propagation and they are under IETF change control, update text is given
      in the following subsections. For those not under IETF control, it is
      RECOMMENDED that implementations of encapsulation and decapsulation
      comply with RFC 6040. It is also RECOMMENDED that their specifications
      are updated to add a requirement to comply with RFC 6040 (as updated by
      the present document).</t>

      <t>PPTP is not under the change control of the IETF, but it has been
      documented in an informational RFC <xref target="RFC2637"/>. However,
      there is no need for the present specification to update PPTP because
      L2TP has been developed as a standardized replacement.</t>

      <t>NVGRE is not under the change control of the IETF, but it has been
      documented in an informational RFC <xref target="RFC7637"/>. NVGRE is a
      specific use-case of GRE (it re-purposes the key field from the initial
      specification of GRE <xref target="RFC1701"/> as a Virtual Subnet ID).
      Therefore the text that updates GRE in <xref target="rfc6040up_GRE"/>
      below is also intended to update NVGRE.</t>

      <t>Although the definition of the various GTP shim headers is under the
      control of the 3GPP, it is hard to determine whether the 3GPP or the
      IETF controls standardization of the <spanx style="emph">process</spanx>
      of adding both a GTP and an IP header to an inner IP header.
      Nonetheless, the present specification is provided so that the 3GPP can
      refer to it from any of its own specifications of GTP and IP header
      processing.</t>

      <t>The specification of CAPWAP already specifies RFC 3168 ECN
      propagation and ECN capability negotiation. Without modification the
      CAPWAP specification already interworks with the backward compatible
      updates to RFC 3168 in RFC 6040.</t>

      <t>LISP made the ECN propagation procedures in RFC 3168 mandatory from
      the start. RFC 3168 has since been updated by RFC 6040, but the changes
      are backwards compatible so there is still no need for LISP tunnel
      endpoints to negotiate their ECN capabilities.</t>

      <t>VXLAN is not under the change control of the IETF but it has been
      documented in an informational RFC. In contrast, VXLAN-GPE (Generic
      Protocol Extension) is being documented under IETF change control. It is
      RECOMMENDED that VXLAN and VXLAN-GPE implementations comply with RFC
      6040 when the VXLAN header is inserted between (or removed from between)
      IP headers. The authors of any future update to these specifications are
      encouraged to add a requirement to comply with RFC 6040 as updated by
      the present specification.<!--{ToDo: Update this text if the VXLAN-GPE draft gets updated before the present draft reaches the RFC Editor.}--></t>

      <t>The Network Service Header (NSH <xref target="RFC8300"/>) has been
      defined as a shim-based encapsulation to identify the Service Function
      Path (SFP) in the Service Function Chaining (SFC) architecture <xref
      target="RFC7665"/>. A proposal has been made for the processing of ECN
      when handling transport encapsulation <xref
      target="I-D.ietf-sfc-nsh-ecn-support"/>.</t>

      <t>The specifications of Geneve and GUE already refer to RFC 6040 for
      ECN encapsulation.</t>

      <t>Section 3.1.11 of RFC 8085 already explains that a tunnel that
      encapsulates an IP header within a UDP/IP datagram needs to follow RFC
      6040 when propagating the ECN field between inner and outer IP headers.
      The requirements in <xref target="rfc6040up_sec_safe"/> update RFC 6040,
      and hence implicitly update the UDP usage guidelines in RFC 8085 to add
      the important but previously unstated requirement that, if the UDP
      tunnel egress does not, or might not, support ECN propagation, a UDP
      tunnel ingress has to clear the outer IP ECN field to 0b00, e.g. by
      configuration.</t>

      <t>Section 12.5 of TCP Encapsulation of IKE and IPsec Packets <xref
      target="RFC8229"/> already recommends the compatibility mode of RFC 6040
      in this case, because there is not a one-to-one mapping between inner
      and outer packets.</t>

      <section anchor="rfc6040up_rfc-updates"
               title="Specific Updates to Protocols under IETF Change Control">
        <section anchor="rfc6040up_L2TPv3"
                 title="L2TP (v2 and v3) ECN Extension">
          <t>The L2TP terminology used here is defined in <xref
          target="RFC2661"/> and <xref target="RFC3931"/>.</t>

          <t>L2TPv3 <xref target="RFC3931"/> is used as a shim header between
          any packet-switched network (PSN) header (e.g. IPv4, IPv6, MPLS) and
          many types of layer 2 (L2) header. The L2TPv3 shim header
          encapsulates an L2-specific sub-layer then an L2 header that is
          likely to contain an inner IP header (v4 or v6). Then this whole
          stack of headers can be encapsulated optionally within an outer UDP
          header then an outer PSN header that is typically IP (v4 or v6).</t>

          <t>L2TPv2 is used as a shim header between any PSN header and a PPP
          header, which is in turn likely to encapsulate an IP header.</t>

          <t>Even though these shims are rather fat (particularly in the case
          of L2TPv3), they still fit the definition of a tightly coupled shim
          header over an encapsulating header (<xref
          target="rfc6040up_feasibility"/>), because all the headers
          encapsulating the L2 header are added (or removed) together. L2TPv2
          and L2TPv3 are therefore within the scope of RFC 6040, as updated by
          <xref target="rfc6040up_scope"/> above.</t>

          <t>L2TP maintainers are RECOMMENDED to implement the ECN extension
          to L2TPv2 and L2TPv3 defined in <xref target="rfc6040up_L2TP_ECN"/>
          below, in order to provide the benefits of ECN <xref
          target="RFC8087"/>, whenever a node within an L2TP tunnel becomes
          the bottleneck for an end-to-end traffic flow.</t>

          <section anchor="rfc6040up_L2TP_Safe"
                   title="Safe Configuration of a 'Non-ECN' Ingress LCCE">
            <t>The following text is appended to both Section 5.3 of <xref
            target="RFC2661"/> and Section 4.5 of <xref target="RFC3931"/> as
            an update to the base L2TPv2 and L2TPv3 specifications:<list
                style="empty">
                <t>The operator of an LCCE that does not support the ECN
                Extension in <xref target="rfc6040up_L2TP_ECN"/> of RFCXXXX
                MUST follow the configuration requirements in <xref
                target="rfc6040up_sec_safe"/> of RFCXXXX to ensure it clears
                the outer IP ECN field to 0b00 when the outer PSN header is IP
                (v4 or v6). {RFCXXXX refers to the present document so it will
                need to be inserted by the RFC Editor}</t>
              </list></t>

            <t>In particular, for an LCCE implementation that does not support
            the ECN Extension, this means that configuration of how it
            propagates the ECN field between inner and outer IP headers MUST
            be independent of any configuration of the Diffserv extension of
            L2TP <xref target="RFC3308"/>.</t>
          </section>

          <section anchor="rfc6040up_L2TP_ECN"
                   title="ECN Extension for L2TP (v2 or v3)">
            <t>When the outer PSN header and the payload inside the L2 header
            are both IP (v4 or v6), to comply with RFC 6040, an LCCE will
            follow the rules for propagation of the ECN field at ingress and
            egress in Section 4 of RFC 6040 <xref target="RFC6040"/>.</t>

            <t>Before encapsulating any data packets, RFC 6040 requires an
            ingress LCCE to check that the egress LCCE supports ECN
            propagation as defined in RFC 6040 or one of its compatible
            predecessors (<xref target="RFC4301"/> or the full functionality
            mode of <xref target="RFC3168"/>). If the egress supports ECN
            propagation, the ingress LCCE can use the normal mode of
            encapsulation (copying the ECN field from inner to outer).
            Otherwise, the ingress LCCE has to use compatibility mode <xref
            target="RFC6040"/> (clearing the outer IP ECN field to 0b00).</t>

            <t>An LCCE can determine the remote LCCE's support for ECN either
            statically (by configuration) or by dynamic discovery during setup
            of each control connection between the LCCEs, using the Capability
            AVP defined in <xref target="rfc6040up_L2TP_Capability_AVP"/>
            below.</t>

            <t>Where the outer PSN header is some protocol other than IP that
            supports ECN, the appropriate ECN propagation specification will
            need to be followed, e.g. "Explicit Congestion Marking in MPLS"
            <xref target="RFC5129"/>. Where no specification exists for ECN
            propagation by a particular PSN, <xref
            target="I-D.ietf-tsvwg-ecn-encap-guidelines"/> gives general
            guidance on how to design ECN propagation into a protocol that
            encapsulates IP.</t>

            <section anchor="rfc6040up_L2TP_Capability_AVP"
                     title="LCCE Capability AVP for ECN Capability Negotiation">
              <t>The LCCE Capability Attribute-Value Pair (AVP) defined here
              has Attribute Type ZZ. The Attribute Value field for this AVP is
              a bit-mask with the following 16-bit format:</t>

              <figure align="center" anchor="Fig_rfc6040up_LCCE_Capabiliy_AVP"
                      title="Value Field for the LCCE Capability Attribute">
                <artwork><![CDATA[       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |X X X X X X X X X X X X X X X E|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
              </figure>

              <t>This AVP MAY be present in the following message types: SCCRQ
              and SCCRP (Start-Control-Connection-Request and
              Start-Control-Connection-Reply). This AVP MAY be hidden (the
              H-bit set to 0 or 1) and is optional (M-bit not set). The length
              (before hiding) of this AVP MUST be 8 octets. The Vendor ID is
              the IETF Vendor ID of 0.</t>

              <t>Bit 15 of the Value field of the LCCE Capability AVP is
              defined as the ECN Capability flag (E). When the ECN Capability
              flag is set to 1, it indicates that the sender supports ECN
              propagation. When the ECN Capability flag is cleared to zero, or
              when no LCCE Capabiliy AVP is present, it indicates that the
              sender does not support ECN propagation. All the other bits are
              reserved. They MUST be cleared to zero when sent and ignored
              when received or forwarded.</t>

              <t>An LCCE initiating a control connection will send a
              Start-Control-Connection-Request (SCCRQ) containing an LCCE
              Capability AVP with the ECN Capability flag set to 1. If the
              tunnel terminator supports ECN, it will return a
              Start-Control-Connection-Reply (SCCRP) that also includes an
              LCCE Capability AVP with the ECN Capability flag set to 1. Then,
              for any sessions created by that control connection, both ends
              of the tunnel can use the normal mode of RFC 6040, i.e. it can
              copy the IP ECN field from inner to outer when encapsulating
              data packets.</t>

              <t>If, on the other hand, the tunnel terminator does not support
              ECN it will ignore the ECN flag in the LCCE Capability AVP and
              send an SCCRP to the tunnel initiator without a Capability AVP
              (or with a Capability AVP but with the ECN Capability flag
              cleared to zero). The tunnel initiator interprets the absence of
              the ECN Capability flag in the SCCRP as an indication that the
              tunnel terminator is incapable of supporting ECN. When
              encapsulating data packets for any sessions created by that
              control connection, the tunnel initiator will then use the
              compatibility mode of RFC 6040 to clear the ECN field of the
              outer IP header to 0b00.</t>

              <t>If the tunnel terminator does not support this ECN extension,
              the network operator is still expected to configure it to comply
              with the safety provisions set out in <xref
              target="rfc6040up_L2TP_Safe"/> above, when it acts as an ingress
              LCCE.</t>
            </section>
          </section>
        </section>

        <section anchor="rfc6040up_GRE" title="GRE">
          <t>The GRE terminology used here is defined in <xref
          target="RFC2784"/>. GRE is often used as a tightly coupled shim
          header between IP headers. Sometimes the GRE shim header
          encapsulates an L2 header, which might in turn encapsulate an IP
          header. Therefore GRE is within the scope of RFC 6040 as updated by
          <xref target="rfc6040up_scope"/> above.</t>

          <t>GRE tunnel endpoint maintainers are RECOMMENDED to support <xref
          target="RFC6040"/> as updated by the present specification, in order
          to provide the benefits of ECN <xref target="RFC8087"/> whenever a
          node within a GRE tunnel becomes the bottleneck for an end-to-end IP
          traffic flow tunnelled over GRE using IP as the delivery protocol
          (outer header).</t>

          <t>GRE itself does not support dynamic set-up and configuration of
          tunnels. However, control plane protocols such as Mobile IPv4 (MIP4)
          <xref target="RFC5944"/>, Mobile IPv6 (MIP6) <xref
          target="RFC6275"/>, Proxy Mobile IP (PMIP) <xref target="RFC5845"/>
          and IKEv2 <xref target="RFC7296"/> are sometimes used to set up GRE
          tunnels dynamically.</t>

          <t>When these control protocols set up IP-in-IP or IPSec tunnels, it
          is likely that they propagate the ECN field as defined in RFC 6040
          or one of its compatible predecessors (RFC 4301 or the full
          functionality mode of RFC 3168). However, if they use a GRE
          encapsulation, this presumption is less sound.</t>

          <t>Therefore, If the outer delivery protocol is IP (v4 or v6) the
          operator is obliged to follow the safe configuration requirements in
          <xref target="rfc6040up_sec_safe"/> above. <xref
          target="rfc6040up_GRE_Safe"/> below updates the base GRE
          specification with this requirement, to emphasize its
          importance.</t>

          <t>Where the delivery protocol is some protocol other than IP that
          supports ECN, the appropriate ECN propagation specification will
          need to be followed, e.g Explicit Congestion Marking in MPLS <xref
          target="RFC5129"/>. Where no specification exists for ECN
          propagation by a particular PSN, <xref
          target="I-D.ietf-tsvwg-ecn-encap-guidelines"/> gives more general
          guidance on how to propagate ECN to and from protocols that
          encapsulate IP.</t>

          <section anchor="rfc6040up_GRE_Safe"
                   title="Safe Configuration of a 'Non-ECN' GRE Ingress">
            <t>The following text is appended to Section 3 of <xref
            target="RFC2784"/> as an update to the base GRE
            specification:<list style="empty">
                <t>The operator of a GRE tunnel ingress MUST follow the
                configuration requirements in <xref
                target="rfc6040up_sec_safe"/> of RFCXXXX when the outer
                delivery protocol is IP (v4 or v6). {RFCXXXX refers to the
                present document so it will need to be inserted by the RFC
                Editor}</t>
              </list></t>
          </section>
        </section>

        <section title="Teredo">
          <t>Teredo <xref target="RFC4380"/> provides a way to tunnel IPv6
          over an IPv4 network, with a UDP-based shim header between the
          two.</t>

          <t>For Teredo tunnel endpoints to provide the benefits of ECN, the
          Teredo specification would have to be updated to include negotiation
          of the ECN capability between Teredo tunnel endpoints. Otherwise it
          would be unsafe for a Teredo tunnel ingress to copy the ECN field to
          the IPv6 outer.</t>

          <t>It is believed that current implementations do not support
          propagation of ECN, but that they do safely zero the ECN field in
          the outer IPv6 header. However the specification does not mention
          anything about this.</t>

          <t>To make existing Teredo deployments safe, it would be possible to
          add ECN capability negotiation to those that are subject to remote
          OS update. However, for those implementations not subject to remote
          OS update, it will not be feasible to require them to be configured
          correctly, because Teredo tunnel endpoints are generally deployed on
          hosts.</t>

          <t>Therefore, until ECN support is added to the specification of
          Teredo, the only feasible further safety precaution available here
          is to update the specification of Teredo implementations with the
          following text, as a new section 5.1.3:<list style="empty">
              <t>"5.1.3 Safe 'Non-ECN' Teredo Encapsulation<vspace
              blankLines="1"/>A Teredo tunnel ingress implementation that does
              not support ECN propagation as defined in RFC 6040 or one of its
              compatible predecessors (RFC 4301 or the full functionality mode
              of RFC 3168) MUST zero the ECN field in the outer IPv6
              header."</t>
            </list></t>
        </section>

        <section anchor="rfc6040up_AMT" title="AMT">
          <t>Automatic Multicast Tunneling (AMT <xref target="RFC7450"/>) is a
          tightly coupled shim header that encapsulates an IP packet and is
          itself encapsulated within a UDP/IP datagram. Therefore AMT is
          within the scope of RFC 6040 as updated by <xref
          target="rfc6040up_scope"/> above.</t>

          <t>AMT tunnel endpoint maintainers are RECOMMENDED to support <xref
          target="RFC6040"/> as updated by the present specification, in order
          to provide the benefits of ECN <xref target="RFC8087"/> whenever a
          node within an AMT tunnel becomes the bottleneck for an IP traffic
          flow tunnelled over AMT.</t>

          <t>To comply with RFC 6040, an AMT relay and gateway will follow the
          rules for propagation of the ECN field at ingress and egress
          respectively, as described in Section 4 of RFC 6040 <xref
          target="RFC6040"/>.</t>

          <t>Before encapsulating any data packets, RFC 6040 requires an
          ingress AMT relay to check that the egress AMT gateway supports ECN
          propagation as defined in RFC 6040 or one of its compatible
          predecessors (RFC 4301 or the full functionality mode of RFC 3168).
          If the egress gateway supports ECN, the ingress relay can use the
          normal mode of encapsulation (copying the IP ECN field from inner to
          outer). Otherwise, the ingress relay has to use compatibility mode,
          which means it has to clear the outer ECN field to zero <xref
          target="RFC6040"/>.</t>

          <t>An AMT tunnel is created dynamically (not manually), so the relay
          will need to determine the remote gateway's support for ECN using
          the ECN capability declaration defined in <xref
          target="rfc6040up_AMT_ECN_Capability"/> below.</t>

          <section anchor="rfc6040up_AMT_Safe"
                   title="Safe Configuration of a 'Non-ECN' Ingress AMT Relay">
            <t>The following text is appended to Section 4.2.2 of <xref
            target="RFC7450"/> as an update to the AMT specification:<list
                style="empty">
                <t>The operator of an AMT relay that does not support RFC 6040
                or one of its compatible predecessors (RFC 4301 or the full
                functionality mode of RFC 3168) MUST follow the configuration
                requirements in <xref target="rfc6040up_sec_safe"/> of RFCXXXX
                to ensure it clears the outer IP ECN field to zero. {RFCXXXX
                refers to the present document so it will need to be inserted
                by the RFC Editor}</t>
              </list></t>
          </section>

          <section anchor="rfc6040up_AMT_ECN_Capability"
                   title="ECN Capability Declaration of an AMT Gateway">
            <figure anchor="Fig_rfc6040up_AMT_ECN_Capability_Declaration"
                    title="Updated AMT Request Message Format">
              <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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  V=0  |Type=3 |  Reserved |E|P|            Reserved           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Request Nonce                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
            </figure>

            <t>Bit 14 of the AMT Request Message counting from 0 (or bit 7 of
            the Reserved field counting from 1) is defined here as the AMT
            Gateway ECN Capability flag (E), as shown in <xref
            target="Fig_rfc6040up_AMT_ECN_Capability_Declaration"/>. The
            definitions of all other fields in the AMT Request Message are
            unchanged from RFC 7450.</t>

            <t>When the E flag is set to 1, it indicates that the sender of
            the message supports RFC 6040 ECN propagation. When it is cleared
            to zero, it indicates the sender of the message does not support
            RFC 6040 ECN propagation. An AMT gateway "that supports RFC 6040
            ECN propagation" means one that propagates the ECN field to the
            forwarded data packet based on the combination of arriving inner
            and outer ECN fields, as defined in Section 4 of RFC 6040.</t>

            <t>The other bits of the Reserved field remain reserved. They will
            continue to be cleared to zero when sent and ignored when either
            received or forwarded, as specified in Section 5.1.3.3. of RFC
            7450.</t>

            <t>An AMT gateway that does not support RFC 6040 MUST NOT set the
            E flag of its Request Message to 1.</t>

            <t>An AMT gateway that supports RFC 6040 ECN propagation MUST set
            the E flag of its Relay Discovery Message to 1.</t>

            <t>The action of the corresponding AMT relay that receives a
            Request message with the E flag set to 1 depends on whether the
            relay itself supports RFC 6040 ECN propagation:<list
                style="symbols">
                <t>If the relay supports RFC 6040 ECN propagation, it will
                store the ECN capability of the gateway along with its
                address. Then whenever it tunnels datagrams towards this
                gateway, it MUST use the normal mode of RFC 6040 to propagate
                the ECN field when encapsulating datagrams (i.e. it copies the
                IP ECN field from inner to outer).</t>

                <t>If the discovered AMT relay does not support RFC 6040 ECN
                propagation, it will ignore the E flag in the Reserved field,
                as per section 5.1.3.3. of RFC 7450. <vspace
                blankLines="1"/>If the AMT relay does not support RFC 6040 ECN
                propagation, the network operator is still expected to
                configure it to comply with the safety provisions set out in
                <xref target="rfc6040up_AMT_Safe"/> above.</t>
              </list></t>
          </section>
        </section>
      </section>
    </section>

    <!-- ================================================================ -->

    <section anchor="rfc6040up_IANA_Considerations"
             title="IANA Considerations">
      <t>IANA is requested to assign the following L2TP Control Message
      Attribute Value Pair:</t>

      <texttable>
        <ttcol>Attribute Type</ttcol>

        <ttcol>Description</ttcol>

        <ttcol>Reference</ttcol>

        <c>ZZ</c>

        <c>ECN Capability</c>

        <c>RFCXXXX</c>
      </texttable>

      <t>[TO BE REMOVED: This registration should take place at the following
      location:
      https://www.iana.org/assignments/l2tp-parameters/l2tp-parameters.xhtml
      ]</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="rfc6040up_Security_Considerations"
             title="Security Considerations">
      <t>The Security Considerations in <xref target="RFC6040"/> and <xref
      target="I-D.ietf-tsvwg-ecn-encap-guidelines"/> apply equally to the
      scope defined for the present specification.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="rfc6040up_Comments_Solicited" title="Comments Solicited">
      <t>Comments and questions are encouraged and very welcome. They can be
      addressed to the IETF Transport Area working group mailing list
      &lt;tsvwg@ietf.org&gt;, and/or to the authors.</t>
    </section>

    <!-- ================================================================ -->

    <section title="Acknowledgements">
      <t>Thanks to Ing-jyh (Inton) Tsang for initial discussions on the need
      for ECN propagation in L2TP and its applicability. Thanks also to Carlos
      Pignataro, Tom Herbert, Ignacio Goyret, Alia Atlas, Praveen
      Balasubramanian, Joe Touch, Mohamed Boucadair, David Black, Jake Holland
      and Sri Gundavelli for helpful advice and comments. "A Comparison of
      IPv6-over-IPv4 Tunnel Mechanisms" <xref target="RFC7059"/> helped to
      identify a number of tunnelling protocols to include within the scope of
      this document.</t>

      <t>Bob Briscoe was part-funded by the Research Council of Norway through
      the TimeIn project. The views expressed here are solely those of the
      authors.</t>
    </section>
  </middle>

  <back>
    <!-- ================================================================ -->

    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.2474'?>

      <?rfc include='reference.RFC.2661'?>

      <?rfc include='reference.RFC.2784'?>

      <?rfc include='reference.RFC.3168'?>

      <?rfc include='reference.RFC.3931'?>

      <?rfc include='reference.RFC.4301'?>

      <?rfc include='reference.RFC.4380'?>

      <?rfc include='reference.RFC.5129'?>

      <?rfc include='reference.RFC.6040'?>

      <?rfc include='reference.I-D.ietf-tsvwg-ecn-encap-guidelines'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.1701'?>

      <?rfc include='reference.RFC.2637'?>

      <?rfc include='reference.RFC.2983'?>

      <?rfc include='reference.RFC.3260'?>

      <?rfc include='reference.RFC.3308'?>

      <?rfc include='reference.RFC.5415'?>

      <?rfc include='reference.RFC.5944'?>

      <?rfc include='reference.RFC.6275'?>

      <?rfc include='reference.RFC.5845'?>

      <?rfc include='reference.RFC.7296'?>

      <?rfc include='reference.RFC.6830'?>

      <?rfc include='reference.RFC.7059'?>

      <?rfc include='reference.RFC.7348'?>

      <?rfc include='reference.RFC.7450'?>

      <?rfc include='reference.RFC.7637'?>

      <?rfc include='reference.RFC.7665'?>

      <?rfc include='reference.RFC.8085'?>

      <?rfc include='reference.RFC.8087'?>

      <?rfc include='reference.RFC.8159'?>

      <?rfc include='reference.I-D.ietf-nvo3-vxlan-gpe'?>

      <?rfc include='reference.I-D.ietf-nvo3-geneve'?>

      <?rfc include='reference.I-D.ietf-intarea-gue'?>

      <?rfc include='reference.I-D.ietf-sfc-nsh-ecn-support'?>

      <?rfc include='reference.I-D.ietf-intarea-tunnels'?>

      <?rfc include='reference.RFC.8229'?>

      <?rfc include='reference.RFC.8300'?>

      <reference anchor="GTPv1">
        <front>
          <title>GPRS Tunnelling Protocol (GTP) across the Gn and Gp
          interface</title>

          <author>
            <organization>3GPP</organization>
          </author>

          <date/>
        </front>

        <seriesInfo name="Technical Specification" value="TS 29.060"/>
      </reference>

      <reference anchor="GTPv1-U">
        <front>
          <title>General Packet Radio System (GPRS) Tunnelling Protocol User
          Plane (GTPv1-U)</title>

          <author>
            <organization>3GPP</organization>
          </author>

          <date/>
        </front>

        <seriesInfo name="Technical Specification" value="TS 29.281"/>
      </reference>

      <reference anchor="GTPv2-C">
        <front>
          <title>Evolved General Packet Radio Service (GPRS) Tunnelling
          Protocol for Control plane (GTPv2-C)</title>

          <author>
            <organization>3GPP</organization>
          </author>

          <date year=""/>
        </front>

        <seriesInfo name="Technical Specification" value="TS 29.274"/>
      </reference>
    </references>
  </back>
</rfc>
