<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" submissionType="IETF" docName="draft-ietf-mpls-1stnibble-13" number="9790" consensus="true" category="std" ipr="trust200902" obsoletes="" updates="4928" xml:lang="en" symRefs="true" sortRefs="true" tocInclude="true" prepTime="2025-07-10T08:53:54" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-mpls-1stnibble-13" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9790" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="First Nibble Following Label Stack">IANA Registry and Processing Recommendations for the First Nibble Following a Label Stack</title>
    <seriesInfo name="RFC" value="9790" stream="IETF"/>
    <author initials="K." surname="Kompella" fullname="Kireeti Kompella">
      <organization showOnFrontPage="true">Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>United States of America</country>
        </postal>
        <email>kireeti.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="S." surname="Bryant" fullname="Stewart Bryant">
      <organization showOnFrontPage="true">University of Surrey 5GIC</organization>
      <address>
        <email>sb@stewartbryant.com</email>
      </address>
    </author>
    <author initials="M." surname="Bocci" fullname="Matthew Bocci">
      <organization showOnFrontPage="true">Nokia</organization>
      <address>
        <email>matthew.bocci@nokia.com</email>
      </address>
    </author>
    <author initials="G." surname="Mirsky" fullname="Greg Mirsky" role="editor">
      <organization showOnFrontPage="true">Ericsson</organization>
      <address>
        <email>gregimirsky@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Andersson" fullname="Loa Andersson">
      <organization showOnFrontPage="true">Huawei Technologies</organization>
      <address>
        <email>loa@pi.nu</email>
      </address>
    </author>
    <author initials="J." surname="Dong" fullname="Jie Dong">
      <organization showOnFrontPage="true">Huawei Technologies</organization>
      <address>
        <postal>
          <street>Huawei Campus, No. 156 Beiqing Rd.</street>
          <city>Beijing</city>
          <code>100095</code>
          <country>China</country>
        </postal>
        <email>jie.dong@huawei.com</email>
      </address>
    </author>
    <date month="07" year="2025"/>
    <area>RTG</area>
    <workgroup>mpls</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
   This document creates a new IANA registry (called the
   "Post-Stack First Nibble" registry) for the first nibble (4-bit field)
   immediately following an MPLS label stack. Furthermore, this document
   presents some requirements for registering new values
   and making the processing of MPLS
   packets easier and more robust.
      </t>
      <t indent="0" pn="section-abstract-2">The relationship between the IANA "Post-Stack First Nibble" registry and the "IP Version Numbers" registry (RFC 2780)
is described in this document.</t>
      <t indent="0" pn="section-abstract-3">This document updates RFC 4928 by deprecating
   the heuristic method for identifying the type of packet encapsulated
   in MPLS.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9790" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2025 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-definitions">Definitions</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.3">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.3.1"><xref derivedContent="1.3" format="counter" sectionFormat="of" target="section-1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-abbreviations">Abbreviations</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.4">
                <t indent="0" pn="section-toc.1-1.1.2.4.1"><xref derivedContent="1.4" format="counter" sectionFormat="of" target="section-1.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-reference-figures">Reference Figures</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rationale">Rationale</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-why-look-at-the-first-nibbl">Why Look at the First Nibble</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.1.2">
                  <li pn="section-toc.1-1.2.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.2.2.1.2.1.1"><xref derivedContent="2.1.1" format="counter" sectionFormat="of" target="section-2.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ecmp-load-balancing">ECMP Load Balancing</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-updates-to-rfc-4928">Updates to RFC 4928</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-why-create-a-registry">Why Create a Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.4">
                <t indent="0" pn="section-toc.1-1.2.2.4.1"><xref derivedContent="2.4" format="counter" sectionFormat="of" target="section-2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ip-version-numbers-versus-p">IP Version Numbers Versus Post-Stack First Nibble Values</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.5">
                <t indent="0" pn="section-toc.1-1.2.2.5.1"><xref derivedContent="2.5" format="counter" sectionFormat="of" target="section-2.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-next-step-to-more-determini">Next Step to More Deterministic Load Balancing in MPLS Networks</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
  An MPLS packet consists of a label stack, an optional Post-Stack Header (PSH), and an optional embedded packet (in that order). Examples of PSHs include existing headers such as control words <xref target="RFC4385" format="default" sectionFormat="of" derivedContent="RFC4385"/>, BIER (Bit Index Explicit Replication) headers <xref target="RFC8296" format="default" sectionFormat="of" derivedContent="RFC8296"/> and the like, as well as new types of PSH being discussed by the MPLS Working Group. 
   However, in the data plane, there are
   very few clues regarding the PSH and no clue as to the type of embedded
   packet; this information is communicated via other means, such as the
   routing protocols that signal the labels in the stack.  Nonetheless,
   in order to better handle an MPLS packet in the data plane, it is
   common practice for network equipment to "guess" the type of embedded
   packet.  Such equipment may also need to process the PSH.
  Both of these require parsing the data after the label
   stack. To do this, the "first nibble" (the top four bits of the
   first octet following the label stack) is often used.
    Although some existing network
   devices may use such a method, it needs to be stressed that the
   correct interpretation of the Post-stack First Nibble (PFN) in a PSH
   can be made only in the context established through the control or
   management plane with the Label Stack Entry (LSE) or group of LSEs
   in the preceding label stack that characterizes the type of the PSH.
   Any attempt to rely on the value in any other context is
   unreliable.
    Because the PFN value
    should not be used to deduce the type of PSH by itself and the space of PFN values is limited,
    the reuse of PFN values is encouraged when possible.</t>
      <t indent="0" pn="section-1-2">
   The semantics and usage of the first nibble are not well documented,
   nor are the assignments of values.  This document serves four purposes:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-3">
        <li pn="section-1-3.1">To document the values already in use.</li>
        <li pn="section-1-3.2">To provide a mechanism to document future assignments through the
        creation of a new IANA "Post-Stack First Nibble" registry and
        describe the relationship between it and the IANA "IP Version Numbers" registry
        <xref target="RFC2780" format="default" sectionFormat="of" derivedContent="RFC2780"/>.</li>
        <li pn="section-1-3.3">Provide a method for tracking usage by requiring more detailed
        documentation.</li>
        <li pn="section-1-3.4">To stress that any MPLS packet not carrying plain
      IPv4 or IPv6 packets contains a PSH. This also applies to packets of
      any new version of IP
        (see <xref target="sect-2.3" format="default" sectionFormat="of" derivedContent="Section 2.4"/>).</li>
      </ul>
      <t indent="0" pn="section-1-4">
   <xref target="sect-2.1.1" format="default" sectionFormat="of" derivedContent="Section 2.1.1"/> of this document includes an analysis of load-balancing techniques; based on this,
   <xref target="sect-2.1.1.1" format="default" sectionFormat="of" derivedContent="Section 2.1.1.1"/> introduces a requirement that deprecates the
    use of the heuristic method for identifying the type
   of packet encapsulated in MPLS and recommends using a dedicated label value for load balancing. The intent is for
   legacy routers to continue operating as they have, with no new problems
   introduced as a result of this document.  However, new implementations
   that follow this document enable more robust network operation.
      </t>
      <t indent="0" pn="section-1-5">Furthermore, this document updates <xref target="RFC4928" format="default" sectionFormat="of" derivedContent="RFC4928"/>
   by deprecating the heuristic method for identifying the type of packet
   encapsulated in MPLS. This document clearly states that the type of
   encapsulated packet cannot be determined based on the PFN alone.</t>
      <section anchor="req-lang" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
      <section anchor="definitions" numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-definitions">Definitions</name>
        <dl newline="false" spacing="normal" indent="3" pn="section-1.2-1">
          <dt pn="section-1.2-1.1">Deprecation:</dt>
          <dd pn="section-1.2-1.2">Regardless of how the deprecation is understood in other IETF
          documents, the interpretation in this document is that if a practice
          has been deprecated, that practice should not be included in new
          implementations or deployed in new deployments.</dd>
          <dt pn="section-1.2-1.3">Embedded Packet:</dt>
          <dd pn="section-1.2-1.4">A packet that follows immediately after the MPLS label
          stack and an optional PSH.  The embedded packet could be an IPv4 or IPv6 packet, an
          Ethernet packet (for Virtual Private LAN Service (VPLS) <xref target="RFC4761" format="default" sectionFormat="of" derivedContent="RFC4761"/> <xref target="RFC4762" format="default" sectionFormat="of" derivedContent="RFC4762"/> or
          EVPN <xref target="RFC7432" format="default" sectionFormat="of" derivedContent="RFC7432"/>), or some other type
          of Layer 2 frame <xref target="RFC4446" format="default" sectionFormat="of" derivedContent="RFC4446"/>. </dd>
          <dt pn="section-1.2-1.5">Label Stack:</dt>
          <dd pn="section-1.2-1.6">A label stack is represented as a consecutive sequence of "label stack entries" (four-octet fields) after the Layer 2 header but before any network layer header. The last label stack entry of a label stack has its Bottom of Stack bit set.
</dd>
          <dt pn="section-1.2-1.7">MPLS Packet:</dt>
          <dd pn="section-1.2-1.8">A packet whose Layer 2 header declares the type to be MPLS.  For
          example, the Ethertype is 0x8847 or 0x8848 for Ethernet, and 
          the Protocol field is 0x0281 or 0x0283 for PPP.</dd>
          <dt pn="section-1.2-1.9">MPLS Payload:</dt>
          <dd pn="section-1.2-1.10">All data after the label stack and any optional PSHs. It
     is possible that more than one type of PSH may be present in a
     packet, and some PSH specifications might allow multiple PSHs of
     the same type. The presence rules for multiple PSHs are a matter
     for the documents that define those PSHs, e.g.,
     <xref target="I-D.ietf-mpls-mna-ps-hdr" format="default" sectionFormat="of" derivedContent="MNA-PS-HDR"/>.</dd>
          <dt pn="section-1.2-1.11">Post-stack First Nibble (PFN):</dt>
          <dd pn="section-1.2-1.12">The most significant four bits of the first octet following the
          label stack.</dd>
          <dt pn="section-1.2-1.13">Post-Stack Header (PSH):</dt>
          <dd pn="section-1.2-1.14">A field containing information that may be
     of interest to the egress Label Switching Router (LSR) or transit
     LSRs.  Examples include a control word
	  <xref target="RFC4385" format="default" sectionFormat="of" derivedContent="RFC4385"/> <xref target="RFC8964" format="default" sectionFormat="of" derivedContent="RFC8964"/> or an
     associated channel header <xref target="RFC4385" format="default" sectionFormat="of" derivedContent="RFC4385"/> <xref target="RFC5586" format="default" sectionFormat="of" derivedContent="RFC5586"/> <xref target="RFC9546" format="default" sectionFormat="of" derivedContent="RFC9546"/>.
	  </dd>
        </dl>
      </section>
      <section anchor="abbrev-sec" numbered="true" toc="include" removeInRFC="false" pn="section-1.3">
        <name slugifiedName="name-abbreviations">Abbreviations</name>
        <dl spacing="normal" newline="false" indent="7" pn="section-1.3-1">
          <dt pn="section-1.3-1.1">BIER:</dt>
          <dd pn="section-1.3-1.2">Bit Index Explicit Replication</dd>
          <dt pn="section-1.3-1.3">FAT:</dt>
          <dd pn="section-1.3-1.4">Flow-Aware Transport</dd>
          <dt pn="section-1.3-1.5">LSE:</dt>
          <dd pn="section-1.3-1.6">Label Stack Entry</dd>
          <dt pn="section-1.3-1.7">LSR:</dt>
          <dd pn="section-1.3-1.8">Label Switching Router</dd>
          <dt pn="section-1.3-1.9">MNA:</dt>
          <dd pn="section-1.3-1.10">MPLS Network Action</dd>
          <dt pn="section-1.3-1.11">PFN:</dt>
          <dd pn="section-1.3-1.12">Post-stack First Nibble</dd>
          <dt pn="section-1.3-1.13">PSH:</dt>
          <dd pn="section-1.3-1.14">Post-Stack Header</dd>
          <dt pn="section-1.3-1.15">PW:</dt>
          <dd pn="section-1.3-1.16">Pseudowire</dd>
          <dt pn="section-1.3-1.17">SPL:</dt>
          <dd pn="section-1.3-1.18">Special-Purpose Label</dd>
        </dl>
      </section>
      <section anchor="sect-figs" numbered="true" toc="include" removeInRFC="false" pn="section-1.4">
        <name slugifiedName="name-reference-figures">Reference Figures</name>
        <t indent="0" pn="section-1.4-1"><xref target="mpls-packet-fig" format="default" sectionFormat="of" derivedContent="Figure 1"/> echoes the format of MPLS packets as defined in
           <xref target="RFC3032" format="default" sectionFormat="of" derivedContent="RFC3032"/> where TC indicates the Traffic Class field <xref target="RFC5462" format="default" sectionFormat="of" derivedContent="RFC5462"/>
           that replaced the EXP (Experimental Use) field, S is the Bottom of Stack flag, and TTL
           is the Time to Live field.</t>
        <figure anchor="mpls-packet-fig" align="left" suppress-title="false" pn="figure-1">
          <name slugifiedName="name-example-of-an-mpls-packet-w">Example of an MPLS Packet with Label Stack</name>
          <artwork name="" type="" align="left" alt="" pn="section-1.4-2.1">
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\
X |                        Layer 2 Header                         | |
  |                                                               | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/
                                            TC   S       TTL
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\
Y |             Label-1                   | TC  |0|      TTL      | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |             Label-2                   | TC  |0|      TTL      | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               ...                     | TC  |0|      TTL      | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |             Label-n                   | TC  |1|      TTL      | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/
</artwork>
        </figure>
        <figure anchor="examples-fig" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-examples-of-an-mpls-packet-">Examples of an MPLS Packet Payload With and Without a Preceding Post‑Stack Header</name>
          <artwork name="" type="" align="left" alt="" pn="section-1.4-3.1">
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\
A | (PFN) |                   IP header                           | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                             data                              | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                 ...                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        end of IP packet                       | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/


  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\
B | (PFN) |                 non-IP packet                         | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                             data                              | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                 ...                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      end of non-IP packet                     | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/


  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\
C | (PFN) |                      PSH                              | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                              PSH                              | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                 ...                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          end of PSH                           | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        embedded packet                        | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/
</artwork>
        </figure>
        <t indent="0" pn="section-1.4-4">
	  <xref target="mpls-packet-fig" format="default" sectionFormat="of" derivedContent="Figure 1"/> shows an MPLS packet with a Layer 2 header X and a label stack
   Y ending with Label-n.  <xref target="examples-fig" format="default" sectionFormat="of" derivedContent="Figure 2"/> displays three examples of an MPLS
   payload:</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-1.4-5">
          <dt pn="section-1.4-5.1">Example A:</dt>
          <dd pn="section-1.4-5.2">The first payload is a bare IP packet, i.e., no PSH.  The
     PFN in this case overlaps with the IP version number.</dd>
          <dt pn="section-1.4-5.3">Example B:</dt>
          <dd pn="section-1.4-5.4">The next payload is a bare non-IP packet; again, no PSH.
     The PFN here is the first nibble of the payload, whatever it happens to
     be.</dd>
          <dt pn="section-1.4-5.5">Example C: </dt>
          <dd pn="section-1.4-5.6">This example is an MPLS Payload that follows a PSH. Here, the embedded packet could be IP or non-IP.
   </dd>
        </dl>
        <t indent="0" pn="section-1.4-6">Thus, the complete MPLS packet would consist of [X Y A], [X Y B], or [X Y C].</t>
      </section>
    </section>
    <section anchor="sect-2" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-rationale">Rationale</name>
      <section anchor="sect-2.1" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-why-look-at-the-first-nibbl">Why Look at the First Nibble</name>
        <t indent="0" pn="section-2.1-1">
   An MPLS packet can contain one of many types of embedded packets. Three common types are:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-2.1-2">
          <li pn="section-2.1-2.1" derivedCounter="1.">An IPv4 packet (whose IP header has version number 4).</li>
          <li pn="section-2.1-2.2" derivedCounter="2.">An IPv6 packet (whose IP header has version number 6).</li>
          <li pn="section-2.1-2.3" derivedCounter="3.">A Layer 2 Ethernet frame (i.e., not including the Preamble or the
       Start frame delimiter), starting with the destination Media Access Control (MAC) address.</li>
        </ol>
        <t indent="0" pn="section-2.1-3">
 Many other packet types are possible; in principle, any Layer 2 embedded packet is permissible.
 Indeed, at some points in time, packets of the Point-to-Point Protocol, Frame Relay,
 and Asynchronous Transfer Mode were reasonably common and may become so again.
        </t>
        <t indent="0" pn="section-2.1-4">
   In addition, there may be a PSH ahead of the embedded packet.
   The value of PFN is considered to ensure that the PSH can be correctly parsed.
        </t>
        <section anchor="sect-2.1.1" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.1">
          <name slugifiedName="name-ecmp-load-balancing">ECMP Load Balancing</name>
          <t indent="0" pn="section-2.1.1-1">
   There are four common ways to load balance an MPLS packet:</t>
          <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-2.1.1-2">
            <li pn="section-2.1.1-2.1" derivedCounter="1.">Use the top label alone.</li>
            <li pn="section-2.1.1-2.2" derivedCounter="2.">Use all of the non-SPLs <xref target="RFC7274" format="default" sectionFormat="of" derivedContent="RFC7274"/> in the stack. This is better than using the
       top label alone.</li>
            <li pn="section-2.1.1-2.3" derivedCounter="3.">"Divine" the type of embedded packet
       and use fields from the guessed header. The ramifications of using this load-balancing technique
       are discussed in detail in <xref target="sect-2.1.1.1" format="default" sectionFormat="of" derivedContent="Section 2.1.1.1"/>. This way is better than the two ways above.</li>
            <li pn="section-2.1.1-2.4" derivedCounter="4.">Use either an Entropy Label <xref target="RFC6790" format="default" sectionFormat="of" derivedContent="RFC6790"/> or a
       Flow-Aware Transport (FAT) Pseudowire Label <xref target="RFC6391" format="default" sectionFormat="of" derivedContent="RFC6391"/> (see <xref target="sect-2.1.1.1" format="default" sectionFormat="of" derivedContent="Section 2.1.1.1"/>). This is the best way.</li>
          </ol>
          <t indent="0" pn="section-2.1.1-3">
   Load balancing based on just the top label means that all packets
   with that top label will go the same way, which is far from ideal.
   Load balancing based on the entire label stack (not including SPLs)
   is better, but it may still be uneven.  However, if the embedded packet
   is an IP packet, then the combination of (&lt;source IP address&gt;, &lt;dest IP address&gt;, &lt;transport protocol&gt;, &lt;source port&gt;, and &lt;dest port&gt;)
   from the IP header of the embedded packet forms an excellent basis
   for load balancing.  This is what is typically used for load balancing IP packets.</t>
          <t indent="0" pn="section-2.1.1-4">
   An MPLS packet doesn't, however, carry a payload type identifier.
   There is a simple (but risky) heuristic that is commonly used to
   guess the type of the embedded packet.  The first nibble of an IP header, i.e., the
   four most significant bits of the first octet,
   contains the IP version number.  That, in turn, indicates where to find
   the relevant fields for load balancing. The heuristic goes roughly
   as described in <xref target="sect-2.1.1.1" format="default" sectionFormat="of" derivedContent="Section 2.1.1.1"/>.</t>
          <section anchor="sect-2.1.1.1" numbered="true" toc="exclude" removeInRFC="false" pn="section-2.1.1.1">
            <name slugifiedName="name-heuristic-for-ecmp-load-bal">Heuristic for ECMP Load Balancing</name>
            <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-2.1.1.1-1">
              <li pn="section-2.1.1.1-1.1" derivedCounter="1.">If the PFN is 0x4 (0100b), treat the payload as an IPv4 packet,
       and find the relevant fields for load balancing on that basis.</li>
              <li pn="section-2.1.1.1-1.2" derivedCounter="2.">If the PFN is 0x6 (0110b), treat the payload as an IPv6 packet,
       and find the relevant fields for load balancing on that basis.</li>
              <li pn="section-2.1.1.1-1.3" derivedCounter="3.">If the PFN is anything else, the MPLS payload is not an IP
       packet; fall back to load balancing using the label stack.</li>
            </ol>
            <t indent="0" pn="section-2.1.1.1-2">
   This heuristic has been implemented in many (legacy) routers and
   performs well in the case of example A in <xref target="examples-fig" format="default" sectionFormat="of" derivedContent="Figure 2"/>.  However, this heuristic
   can work very badly for the non-IP packet as shown in example B in <xref target="examples-fig" format="default" sectionFormat="of" derivedContent="Figure 2"/>.  For example, if payload B is an
   Ethernet frame, then the PFN is the first nibble of the Organizationally Unique Identifier of the
   destination MAC address, which can be 0x4 or 0x6. This would lead to the packet being treated as an IPv4 or IPv6 packet such
   that data at the offsets of specific relevant fields would be used as
   input to the load-balancing heuristic, resulting in unpredictable load
   balancing. This behavior can happen to other
   types of non-IP payloads as well.</t>
            <t indent="0" pn="section-2.1.1.1-3">
   That, in turn, led to the idea of inserting a PSH (e.g., a pseudowire
   control word <xref target="RFC4385" format="default" sectionFormat="of" derivedContent="RFC4385"/>, a Deterministic Networking (DetNet) control word <xref target="RFC8964" format="default" sectionFormat="of" derivedContent="RFC8964"/>,
   a Network Service Header (NSH) <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/>, or a BIER
   header <xref target="RFC8296" format="default" sectionFormat="of" derivedContent="RFC8296"/>) where the PFN is not 0x4 or 0x6; this
   explicitly prevents forwarding engines from confusing the MPLS payload
   with an IP packet.  <xref target="RFC8469" format="default" sectionFormat="of" derivedContent="RFC8469"/> recommends the use of a control word
   when the embedded packet is an Ethernet frame.  <xref target="RFC8469" format="default" sectionFormat="of" derivedContent="RFC8469"/> was
   published at the request of the operator community and the IEEE Registration Authority Committee
   as a result of operational difficulties with pseudowires that did not
   contain the control word.</t>
            <t indent="0" pn="section-2.1.1.1-4">
   Where load balancing of MPLS
   packets is desired, it is <bcp14>RECOMMENDED</bcp14> that the load-balancing mechanism use the value of a dedicated label, for example,
   either an Entropy Label <xref target="RFC6790" format="default" sectionFormat="of" derivedContent="RFC6790"/> or a FAT Pseudowire Label <xref target="RFC6391" format="default" sectionFormat="of" derivedContent="RFC6391"/>.
   Furthermore, the heuristic of guessing the type of the embedded packet,
   as discussed above, <bcp14>SHOULD NOT</bcp14> be used.</t>
            <t indent="0" pn="section-2.1.1.1-5">
   A consequence of the heuristic approach is that while legacy routers may
   look for a PFN of 0x4 <xref target="RFC0791" format="default" sectionFormat="of" derivedContent="RFC0791"/> or 0x6 <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/>, no legacy router will
    look for any other PFN for load-balancing purposes, regardless of what future IP version numbers
    will be. This means that the values 0x4 and
   0x6 are used to (sometimes incorrectly) identify IPv4 and IPv6
   packets, but no other PFN values will be used to identify IP
   packets.</t>
            <t indent="0" pn="section-2.1.1.1-6">This document creates a new registry for all 16 possible values (see <xref target="sect-3" format="default" sectionFormat="of" derivedContent="Section 3"/>).</t>
          </section>
        </section>
      </section>
      <section anchor="sect-2.1.2" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-updates-to-rfc-4928">Updates to RFC 4928</name>
        <t indent="0" pn="section-2.2-1">The text in RFC 4928 <xref target="RFC4928" format="default" sectionFormat="of" derivedContent="RFC4928"/> concerning the first
        nibble after the MPLS label stack has been updated by this document,
        and the heuristic for snooping this nibble has been deprecated.  <xref section="3" sectionFormat="of" target="RFC4928" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4928#section-3" derivedContent="RFC4928"/> is updated as follows:</t>
        <t indent="0" pn="section-2.2-2">OLD TEXT:</t>
        <blockquote pn="section-2.2-3">
          <t indent="0" pn="section-2.2-3.1">It is <bcp14>REQUIRED</bcp14>, however, that applications
          depend upon in-order packet delivery restrict the first nibble
          values to 0x0 and 0x1.  This will ensure that their traffic flows
          will not be affected if some future routing equipment does similar
          snooping on some future version(s) of IP.</t>
        </blockquote>
        <t indent="0" pn="section-2.2-4">NEW TEXT:</t>
        <blockquote pn="section-2.2-5">
          <t indent="0" pn="section-2.2-5.1">Network equipment <bcp14>MUST</bcp14> use a PSH (Post-Stack Header)
       with a PFN (Post-stack First Nibble) value that is neither 0x4 nor 0x6
       in all cases where the MPLS payload is neither an IPv6 nor an IPv4
       packet.</t>
        </blockquote>
        <t indent="0" pn="section-2.2-6">The following requirement (discussed is <xref target="sect-2.1.1.1" format="default" sectionFormat="of" derivedContent="Section 2.1.1.1"/>) replaces
          paragraph 4 in <xref section="3" sectionFormat="of" target="RFC4928" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4928#section-3" derivedContent="RFC4928"/> as follows:</t>
        <t indent="0" pn="section-2.2-7">OLD TEXT:</t>
        <blockquote pn="section-2.2-8">
          <t indent="0" pn="section-2.2-8.1">This behavior implies that if in the future an IP version is defined
      with a version number of 0x0 or 0x1, then equipment complying with this
      BCP would be unable to look past one or more MPLS headers, and
      loadsplit traffic from a single LSP across multiple paths based on a
      hash of specific fields in the IPv0 or IPv1 headers.  That is, IP
      traffic employing these version numbers would be safe from disturbances
      caused by inappropriate loadsplitting, but would also not be able to
      get the performance benefits.</t>
        </blockquote>
        <t indent="0" pn="section-2.2-9">NEW TEXT:</t>
        <blockquote pn="section-2.2-10">
          <t indent="0" pn="section-2.2-10.1">The practice of deducing the payload type based on the PFN value is
     deprecated to avoid inaccurate load balancing.  This <bcp14>MUST NOT</bcp14> be part of new implementations or deployments.  This also means
     that concerns about load balancing for future IP versions with a version
     number of 0x0 or 0x1 are no longer relevant.</t>
        </blockquote>
        <t indent="0" pn="section-2.2-11">Furthermore, the following text is appended to <xref section="1.1" sectionFormat="of" target="RFC4928" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4928#section-1.1" derivedContent="RFC4928"/>:</t>
        <t indent="0" pn="section-2.2-12">NEW TEXT:</t>
        <blockquote pn="section-2.2-13">
          <dl spacing="normal" newline="false" indent="3" pn="section-2.2-13.1">
            <dt pn="section-2.2-13.1.1">PSH:</dt>
            <dd pn="section-2.2-13.1.2">Post-Stack Header</dd>
            <dt pn="section-2.2-13.1.3">PFN:</dt>
            <dd pn="section-2.2-13.1.4">Post-stack First Nibble</dd>
          </dl>
        </blockquote>
      </section>
      <section anchor="sect-2.2" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-why-create-a-registry">Why Create a Registry</name>
        <t indent="0" pn="section-2.3-1">
   The framework for MPLS Network Actions (MNAs) is described in
   <xref target="RFC9789" format="default" sectionFormat="of" derivedContent="RFC9789"/> and is an enhancement to the MPLS
   architecture.  The use of Post-Stack Data (PSD) to encode the MNA
   indicators and ancillary data (described in <xref section="3.6" sectionFormat="of" target="RFC9789" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9789#section-3.6" derivedContent="RFC9789"/>) might place
   data in the PFN, which could conflict with other uses of that nibble.
   This issue is described in <xref section="3.6.1" sectionFormat="of" target="RFC9789" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9789#section-3.6.1" derivedContent="RFC9789"/>
   and is further illustrated by the PFN value of 0x0, which has two
   different formats depending on whether the PSH is a pseudowire
   control word or a DetNet control word; disambiguation requires the
   context of the service label.
        </t>
        <t indent="0" pn="section-2.3-2">
    With a registry, PSHs become easier to identify and parse. In addition, they do not need a means
   outside the data plane to interpret them correctly, and their
   semantics and usage are documented and referenced in the registry.
        </t>
      </section>
      <section anchor="sect-2.3" numbered="true" toc="include" removeInRFC="false" pn="section-2.4">
        <name slugifiedName="name-ip-version-numbers-versus-p">IP Version Numbers Versus Post-Stack First Nibble Values</name>
        <t indent="0" pn="section-2.4-1">
   The use of the PFN stemmed from the desire to
   heuristically identify IP packets for load-balancing purposes.  It
   was then discovered that non-IP packets, misidentified as IP when the
   heuristic failed, were being badly load balanced, leading to the scenario described in
   <xref target="RFC4928" format="default" sectionFormat="of" derivedContent="RFC4928"/>.  This situation may confuse some as to the relationship
   between the "Post-Stack First Nibble" registry and the "IP Version Numbers"
   registry.  These registries are quite different:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-2.4-2">
        <li pn="section-2.4-2.1" derivedCounter="1.">The explicit purpose of the "IP Version Numbers" registry is to track IP
       version numbers in an IP header.</li>
          <li pn="section-2.4-2.2" derivedCounter="2.">The purpose of the "Post-Stack First Nibble" registry is to track PSH types.</li>
        </ol>
        <t indent="0" pn="section-2.4-3">
   The only intersection points between the two registries are the values
   0x4 and 0x6 (for backward compatibility).
        </t>
      </section>
      <section anchor="sect-2.5" numbered="true" toc="include" removeInRFC="false" pn="section-2.5">
        <name slugifiedName="name-next-step-to-more-determini">Next Step to More Deterministic Load Balancing in MPLS Networks</name>
        <t indent="0" pn="section-2.5-1">Network evolution is impossible to control, but it develops over a period of time determined by various factors.</t>
        <t indent="0" pn="section-2.5-2">This document discourages further proliferation of the implementations that could lead to undesired effects on data flows.
In doing so, it limits the scope of future protocol developments and thus helps to ensure that future network evolution will be smoother.</t>
        <t indent="0" pn="section-2.5-3"><xref target="RFC4385" sectionFormat="of" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4385#section-2" derivedContent="RFC4385"/> suggests the use of a PSH solely for the purpose
   of avoiding IP ECMP treatment of non-IP payloads encapsulated in MPLS.
   Obsoleting this use of a PSH would assist with the progress toward a 
   simpler, more coherent system of MPLS data encapsulation.  (Other uses
   of a PSH may still be valid.)  However, before that can be done, it is
important to collect
sufficient evidence that there are no marketed or deployed implementations
using the heuristic practice to load balance MPLS data flows.</t>
        <t indent="0" pn="section-2.5-4">Therefore, the next steps toward more deterministic load balancing in MPLS networks are to gradually deprecate non-PSH MPLS encapsulations
of non-IP data, to cease using heuristic load balancing, and to survey the available and deployed implementations to determine when obsoletion
may be achieved.</t>
      </section>
    </section>
    <section anchor="sect-3" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-3-1">
   Per this document, IANA has created a registry group called "Post-Stack First Nibble"
   that consists of a single registry called the "Post-Stack First Nibble" registry.
   The initial contents of the registry are shown in <xref target="iana-pfn-value-tbl" format="default" sectionFormat="of" derivedContent="Table 1"/>.
   The assignment policy is Standards Action <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>. It is important to note that
   the same PFN value can be used in more than one protocol. The correct interpretation of the PFN in a PSH
   can be made only in the context of the LSE or group of LSEs in the preceding label stack that characterizes the type
   of the PSH and, consequently, the PFN.
      </t>
      <table anchor="iana-pfn-value-tbl" align="center" pn="table-1">
        <name slugifiedName="name-post-stack-first-nibble-reg">Post-Stack First Nibble Registry</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Protocol</th>
            <th align="left" colspan="1" rowspan="1">Value</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">DetNet</td>
            <td align="left" colspan="1" rowspan="1">0x0</td>
            <td align="left" colspan="1" rowspan="1">DetNet Control Word</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8964" format="default" sectionFormat="of" derivedContent="RFC8964"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">NSH</td>
            <td align="left" colspan="1" rowspan="1">0x0</td>
            <td align="left" colspan="1" rowspan="1">NSH Base Header, payload</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">PW</td>
            <td align="left" colspan="1" rowspan="1">0x0</td>
            <td align="left" colspan="1" rowspan="1">PW Control Word</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4385" format="default" sectionFormat="of" derivedContent="RFC4385"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">DetNet</td>
            <td align="left" colspan="1" rowspan="1">0x1</td>
            <td align="left" colspan="1" rowspan="1">DetNet Associated Channel</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC9546" format="default" sectionFormat="of" derivedContent="RFC9546"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">MPLS</td>
            <td align="left" colspan="1" rowspan="1">0x1</td>
            <td align="left" colspan="1" rowspan="1">MPLS Generic Associated Channel</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5586" format="default" sectionFormat="of" derivedContent="RFC5586"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">PW</td>
            <td align="left" colspan="1" rowspan="1">0x1</td>
            <td align="left" colspan="1" rowspan="1">PW Associated Channel</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4385" format="default" sectionFormat="of" derivedContent="RFC4385"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">NSH</td>
            <td align="left" colspan="1" rowspan="1">0x2</td>
            <td align="left" colspan="1" rowspan="1">NSH Base Header, OAM</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1"/>
            <td align="left" colspan="1" rowspan="1">0x3</td>
            <td align="left" colspan="1" rowspan="1">Unassigned</td>
            <td align="left" colspan="1" rowspan="1"/>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1"/>
            <td align="left" colspan="1" rowspan="1">0x4</td>
            <td align="left" colspan="1" rowspan="1">Reserved</td>
            <td align="left" colspan="1" rowspan="1">RFC 9790</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">BIER</td>
            <td align="left" colspan="1" rowspan="1">0x5</td>
            <td align="left" colspan="1" rowspan="1">BIER Header</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8296" format="default" sectionFormat="of" derivedContent="RFC8296"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1"/>
            <td align="left" colspan="1" rowspan="1">0x6</td>
            <td align="left" colspan="1" rowspan="1">Reserved</td>
            <td align="left" colspan="1" rowspan="1">RFC 9790</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1"/>
            <td align="left" colspan="1" rowspan="1">0x7 - 0xF</td>
            <td align="left" colspan="1" rowspan="1">Unassigned</td>
            <td align="left" colspan="1" rowspan="1"/>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sec-sect" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-4-1">
This document creates a new IANA registry for PFNs and specifies changes to the treatment of packets in the data plane
 based on the first nibble of data beyond the MPLS label stack. One intent of this is to reduce
or eliminate errors in determining whether or not a packet being transported by MPLS is IP.
While such errors have primarily caused unbalanced, and thus inefficient, multipathing,
they have the potential to cause more severe security problems.
      </t>
      <t indent="0" pn="section-4-2">
     For general security considerations involving the MPLS label stack, see <xref target="RFC3032" format="default" sectionFormat="of" derivedContent="RFC3032"/>.
      </t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-mpls-mna-ps-hdr" to="MNA-PS-HDR"/>
    <references pn="section-5">
      <name slugifiedName="name-references">References</name>
      <references pn="section-5.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC0791" target="https://www.rfc-editor.org/info/rfc791" quoteTitle="true" derivedAnchor="RFC0791">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC2780" target="https://www.rfc-editor.org/info/rfc2780" quoteTitle="true" derivedAnchor="RFC2780">
          <front>
            <title>IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <date month="March" year="2000"/>
            <abstract>
              <t indent="0">This memo provides guidance for the IANA to use in assigning parameters for fields in the IPv4, IPv6, ICMP, UDP and TCP protocol headers. 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="37"/>
          <seriesInfo name="RFC" value="2780"/>
          <seriesInfo name="DOI" value="10.17487/RFC2780"/>
        </reference>
        <reference anchor="RFC3032" target="https://www.rfc-editor.org/info/rfc3032" quoteTitle="true" derivedAnchor="RFC3032">
          <front>
            <title>MPLS Label Stack Encoding</title>
            <author fullname="E. Rosen" initials="E." surname="Rosen"/>
            <author fullname="D. Tappan" initials="D." surname="Tappan"/>
            <author fullname="G. Fedorkow" initials="G." surname="Fedorkow"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="D. Farinacci" initials="D." surname="Farinacci"/>
            <author fullname="T. Li" initials="T." surname="Li"/>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <date month="January" year="2001"/>
            <abstract>
              <t indent="0">This document specifies the encoding to be used by an LSR in order to transmit labeled packets on Point-to-Point Protocol (PPP) data links, on LAN data links, and possibly on other data links as well. This document also specifies rules and procedures for processing the various fields of the label stack encoding. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3032"/>
          <seriesInfo name="DOI" value="10.17487/RFC3032"/>
        </reference>
        <reference anchor="RFC4385" target="https://www.rfc-editor.org/info/rfc4385" quoteTitle="true" derivedAnchor="RFC4385">
          <front>
            <title>Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over an MPLS PSN</title>
            <author fullname="S. Bryant" initials="S." surname="Bryant"/>
            <author fullname="G. Swallow" initials="G." surname="Swallow"/>
            <author fullname="L. Martini" initials="L." surname="Martini"/>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <date month="February" year="2006"/>
            <abstract>
              <t indent="0">This document describes the preferred design of a Pseudowire Emulation Edge-to-Edge (PWE3) Control Word to be used over an MPLS packet switched network, and the Pseudowire Associated Channel Header. The design of these fields is chosen so that an MPLS Label Switching Router performing MPLS payload inspection will not confuse a PWE3 payload with an IP payload. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4385"/>
          <seriesInfo name="DOI" value="10.17487/RFC4385"/>
        </reference>
        <reference anchor="RFC4928" target="https://www.rfc-editor.org/info/rfc4928" quoteTitle="true" derivedAnchor="RFC4928">
          <front>
            <title>Avoiding Equal Cost Multipath Treatment in MPLS Networks</title>
            <author fullname="G. Swallow" initials="G." surname="Swallow"/>
            <author fullname="S. Bryant" initials="S." surname="Bryant"/>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <date month="June" year="2007"/>
            <abstract>
              <t indent="0">This document describes the Equal Cost Multipath (ECMP) behavior of currently deployed MPLS networks. This document makes best practice recommendations for anyone defining an application to run over an MPLS network that wishes to avoid the reordering that can result from transmission of different packets from the same flow over multiple different equal cost paths. These recommendations rely on inspection of the IP version number field in packets. Despite the heuristic nature of the recommendations, they provide a relatively safe way to operate MPLS networks, even if future allocations of IP version numbers were made for some purpose. 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="128"/>
          <seriesInfo name="RFC" value="4928"/>
          <seriesInfo name="DOI" value="10.17487/RFC4928"/>
        </reference>
        <reference anchor="RFC5462" target="https://www.rfc-editor.org/info/rfc5462" quoteTitle="true" derivedAnchor="RFC5462">
          <front>
            <title>Multiprotocol Label Switching (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic Class" Field</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="R. Asati" initials="R." surname="Asati"/>
            <date month="February" year="2009"/>
            <abstract>
              <t indent="0">The early Multiprotocol Label Switching (MPLS) documents defined the form of the MPLS label stack entry. This includes a three-bit field called the "EXP field". The exact use of this field was not defined by these documents, except to state that it was to be "reserved for experimental use".</t>
              <t indent="0">Although the intended use of the EXP field was as a "Class of Service" (CoS) field, it was not named a CoS field by these early documents because the use of such a CoS field was not considered to be sufficiently defined. Today a number of standards documents define its usage as a CoS field.</t>
              <t indent="0">To avoid misunderstanding about how this field may be used, it has become increasingly necessary to rename this field. This document changes the name of the field to the "Traffic Class field" ("TC field"). In doing so, it also updates documents that define the current use of the EXP field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5462"/>
          <seriesInfo name="DOI" value="10.17487/RFC5462"/>
        </reference>
        <reference anchor="RFC6391" target="https://www.rfc-editor.org/info/rfc6391" quoteTitle="true" derivedAnchor="RFC6391">
          <front>
            <title>Flow-Aware Transport of Pseudowires over an MPLS Packet Switched Network</title>
            <author fullname="S. Bryant" initials="S." role="editor" surname="Bryant"/>
            <author fullname="C. Filsfils" initials="C." surname="Filsfils"/>
            <author fullname="U. Drafz" initials="U." surname="Drafz"/>
            <author fullname="V. Kompella" initials="V." surname="Kompella"/>
            <author fullname="J. Regan" initials="J." surname="Regan"/>
            <author fullname="S. Amante" initials="S." surname="Amante"/>
            <date month="November" year="2011"/>
            <abstract>
              <t indent="0">Where the payload of a pseudowire comprises a number of distinct flows, it can be desirable to carry those flows over the Equal Cost Multiple Paths (ECMPs) that exist in the packet switched network. Most forwarding engines are able to generate a hash of the MPLS label stack and use this mechanism to balance MPLS flows over ECMPs.</t>
              <t indent="0">This document describes a method of identifying the flows, or flow groups, within pseudowires such that Label Switching Routers can balance flows at a finer granularity than individual pseudowires. The mechanism uses an additional label in the MPLS label stack. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6391"/>
          <seriesInfo name="DOI" value="10.17487/RFC6391"/>
        </reference>
        <reference anchor="RFC6790" target="https://www.rfc-editor.org/info/rfc6790" quoteTitle="true" derivedAnchor="RFC6790">
          <front>
            <title>The Use of Entropy Labels in MPLS Forwarding</title>
            <author fullname="K. Kompella" initials="K." surname="Kompella"/>
            <author fullname="J. Drake" initials="J." surname="Drake"/>
            <author fullname="S. Amante" initials="S." surname="Amante"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <author fullname="L. Yong" initials="L." surname="Yong"/>
            <date month="November" year="2012"/>
            <abstract>
              <t indent="0">Load balancing is a powerful tool for engineering traffic across a network. This memo suggests ways of improving load balancing across MPLS networks using the concept of "entropy labels". It defines the concept, describes why entropy labels are useful, enumerates properties of entropy labels that allow maximal benefit, and shows how they can be signaled and used for various applications. This document updates RFCs 3031, 3107, 3209, and 5036. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6790"/>
          <seriesInfo name="DOI" value="10.17487/RFC6790"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC8200" target="https://www.rfc-editor.org/info/rfc8200" quoteTitle="true" derivedAnchor="RFC8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t indent="0">This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="RFC8296" target="https://www.rfc-editor.org/info/rfc8296" quoteTitle="true" derivedAnchor="RFC8296">
          <front>
            <title>Encapsulation for Bit Index Explicit Replication (BIER) in MPLS and Non-MPLS Networks</title>
            <author fullname="IJ. Wijnands" initials="IJ." role="editor" surname="Wijnands"/>
            <author fullname="E. Rosen" initials="E." role="editor" surname="Rosen"/>
            <author fullname="A. Dolganow" initials="A." surname="Dolganow"/>
            <author fullname="J. Tantsura" initials="J." surname="Tantsura"/>
            <author fullname="S. Aldrin" initials="S." surname="Aldrin"/>
            <author fullname="I. Meilik" initials="I." surname="Meilik"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">Bit Index Explicit Replication (BIER) is an architecture that provides optimal multicast forwarding through a "multicast domain", without requiring intermediate routers to maintain any per-flow state or to engage in an explicit tree-building protocol. When a multicast data packet enters the domain, the ingress router determines the set of egress routers to which the packet needs to be sent. The ingress router then encapsulates the packet in a BIER header. The BIER header contains a bit string in which each bit represents exactly one egress router in the domain; to forward the packet to a given set of egress routers, the bits corresponding to those routers are set in the BIER header. The details of the encapsulation depend on the type of network used to realize the multicast domain. This document specifies a BIER encapsulation that can be used in an MPLS network or, with slight differences, in a non-MPLS network.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8296"/>
          <seriesInfo name="DOI" value="10.17487/RFC8296"/>
        </reference>
        <reference anchor="RFC8469" target="https://www.rfc-editor.org/info/rfc8469" quoteTitle="true" derivedAnchor="RFC8469">
          <front>
            <title>Recommendation to Use the Ethernet Control Word</title>
            <author fullname="S. Bryant" initials="S." surname="Bryant"/>
            <author fullname="A. Malis" initials="A." surname="Malis"/>
            <author fullname="I. Bagdonas" initials="I." surname="Bagdonas"/>
            <date month="November" year="2018"/>
            <abstract>
              <t indent="0">The pseudowire (PW) encapsulation of Ethernet, as defined in RFC 4448, specifies that the use of the control word (CW) is optional. In the absence of the CW, an Ethernet PW packet can be misidentified as an IP packet by a label switching router (LSR). This may lead to the selection of the wrong equal-cost multipath (ECMP) path for the packet, leading in turn to the misordering of packets. This problem has become more serious due to the deployment of equipment with Ethernet Media Access Control (MAC) addresses that start with 0x4 or 0x6. The use of the Ethernet PW CW addresses this problem. This document RECOMMENDS the use of the Ethernet PW CW in all but exceptional circumstances.</t>
              <t indent="0">This document updates RFC 4448.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8469"/>
          <seriesInfo name="DOI" value="10.17487/RFC8469"/>
        </reference>
        <reference anchor="RFC8964" target="https://www.rfc-editor.org/info/rfc8964" quoteTitle="true" derivedAnchor="RFC8964">
          <front>
            <title>Deterministic Networking (DetNet) Data Plane: MPLS</title>
            <author fullname="B. Varga" initials="B." role="editor" surname="Varga"/>
            <author fullname="J. Farkas" initials="J." surname="Farkas"/>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <author fullname="A. Malis" initials="A." surname="Malis"/>
            <author fullname="S. Bryant" initials="S." surname="Bryant"/>
            <author fullname="J. Korhonen" initials="J." surname="Korhonen"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">This document specifies the Deterministic Networking (DetNet) data plane when operating over an MPLS Packet Switched Network. It leverages existing pseudowire (PW) encapsulations and MPLS Traffic Engineering (MPLS-TE) encapsulations and mechanisms. This document builds on the DetNet architecture and data plane framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8964"/>
          <seriesInfo name="DOI" value="10.17487/RFC8964"/>
        </reference>
        <reference anchor="RFC9789" target="https://www.rfc-editor.org/info/rfc9789" quoteTitle="true" derivedAnchor="RFC9789">
          <front>
            <title>MPLS Network Actions (MNAs) Framework</title>
            <author initials="L." surname="Andersson" fullname="Loa Andersson">
              <organization showOnFrontPage="true">Huawei Technologies</organization>
            </author>
            <author initials="S." surname="Bryant" fullname="Stewart Bryant">
              <organization showOnFrontPage="true">University of Surrey 5GIC</organization>
            </author>
            <author initials="M." surname="Bocci" fullname="Matthew Bocci">
              <organization showOnFrontPage="true">Nokia</organization>
            </author>
            <author initials="T." surname="Li" fullname="Tony Li">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <date month="July" year="2025"/>
          </front>
          <seriesInfo name="RFC" value="9789"/>
          <seriesInfo name="DOI" value="10.17487/RFC9789"/>
        </reference>
      </references>
      <references pn="section-5.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-mpls-mna-ps-hdr" target="https://datatracker.ietf.org/doc/html/draft-ietf-mpls-mna-ps-hdr-01" quoteTitle="true" derivedAnchor="MNA-PS-HDR">
          <front>
            <title>Post-Stack MPLS Network Action (MNA) Solution</title>
            <author fullname="Jaganbabu Rajamanickam" initials="J." surname="Rajamanickam" role="editor">
              <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Rakesh Gandhi" initials="R." surname="Gandhi" role="editor">
              <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Royi Zigler" initials="R." surname="Zigler">
              <organization showOnFrontPage="true">Broadcom</organization>
            </author>
            <author fullname="Tony Li" initials="T." surname="Li">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <author fullname="Jie Dong" initials="J." surname="Dong">
              <organization showOnFrontPage="true">Huawei Technologies</organization>
            </author>
            <date day="30" month="May" year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mpls-mna-ps-hdr-01"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC4446" target="https://www.rfc-editor.org/info/rfc4446" quoteTitle="true" derivedAnchor="RFC4446">
          <front>
            <title>IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)</title>
            <author fullname="L. Martini" initials="L." surname="Martini"/>
            <date month="April" year="2006"/>
            <abstract>
              <t indent="0">This document allocates the fixed pseudowire identifier and other fixed protocol values for protocols that have been defined in the Pseudo Wire Edge to Edge (PWE3) working group. Detailed IANA allocation instructions are also included in this document. 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="116"/>
          <seriesInfo name="RFC" value="4446"/>
          <seriesInfo name="DOI" value="10.17487/RFC4446"/>
        </reference>
        <reference anchor="RFC4761" target="https://www.rfc-editor.org/info/rfc4761" quoteTitle="true" derivedAnchor="RFC4761">
          <front>
            <title>Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signaling</title>
            <author fullname="K. Kompella" initials="K." role="editor" surname="Kompella"/>
            <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
            <date month="January" year="2007"/>
            <abstract>
              <t indent="0">Virtual Private LAN Service (VPLS), also known as Transparent LAN Service and Virtual Private Switched Network service, is a useful Service Provider offering. The service offers a Layer 2 Virtual Private Network (VPN); however, in the case of VPLS, the customers in the VPN are connected by a multipoint Ethernet LAN, in contrast to the usual Layer 2 VPNs, which are point-to-point in nature.</t>
              <t indent="0">This document describes the functions required to offer VPLS, a mechanism for signaling a VPLS, and rules for forwarding VPLS frames across a packet switched network. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4761"/>
          <seriesInfo name="DOI" value="10.17487/RFC4761"/>
        </reference>
        <reference anchor="RFC4762" target="https://www.rfc-editor.org/info/rfc4762" quoteTitle="true" derivedAnchor="RFC4762">
          <front>
            <title>Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signaling</title>
            <author fullname="M. Lasserre" initials="M." role="editor" surname="Lasserre"/>
            <author fullname="V. Kompella" initials="V." role="editor" surname="Kompella"/>
            <date month="January" year="2007"/>
            <abstract>
              <t indent="0">This document describes a Virtual Private LAN Service (VPLS) solution using pseudowires, a service previously implemented over other tunneling technologies and known as Transparent LAN Services (TLS). A VPLS creates an emulated LAN segment for a given set of users; i.e., it creates a Layer 2 broadcast domain that is fully capable of learning and forwarding on Ethernet MAC addresses and that is closed to a given set of users. Multiple VPLS services can be supported from a single Provider Edge (PE) node.</t>
              <t indent="0">This document describes the control plane functions of signaling pseudowire labels using Label Distribution Protocol (LDP), extending RFC 4447. It is agnostic to discovery protocols. The data plane functions of forwarding are also described, focusing in particular on the learning of MAC addresses. The encapsulation of VPLS packets is described by RFC 4448. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4762"/>
          <seriesInfo name="DOI" value="10.17487/RFC4762"/>
        </reference>
        <reference anchor="RFC5586" target="https://www.rfc-editor.org/info/rfc5586" quoteTitle="true" derivedAnchor="RFC5586">
          <front>
            <title>MPLS Generic Associated Channel</title>
            <author fullname="M. Bocci" initials="M." role="editor" surname="Bocci"/>
            <author fullname="M. Vigoureux" initials="M." role="editor" surname="Vigoureux"/>
            <author fullname="S. Bryant" initials="S." role="editor" surname="Bryant"/>
            <date month="June" year="2009"/>
            <abstract>
              <t indent="0">This document generalizes the applicability of the pseudowire (PW) Associated Channel Header (ACH), enabling the realization of a control channel associated to MPLS Label Switched Paths (LSPs) and MPLS Sections in addition to MPLS pseudowires. In order to identify the presence of this Associated Channel Header in the label stack, this document also assigns one of the reserved MPLS label values to the Generic Associated Channel Label (GAL), to be used as a label based exception mechanism.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5586"/>
          <seriesInfo name="DOI" value="10.17487/RFC5586"/>
        </reference>
        <reference anchor="RFC7274" target="https://www.rfc-editor.org/info/rfc7274" quoteTitle="true" derivedAnchor="RFC7274">
          <front>
            <title>Allocating and Retiring Special-Purpose MPLS Labels</title>
            <author fullname="K. Kompella" initials="K." surname="Kompella"/>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="June" year="2014"/>
            <abstract>
              <t indent="0">Some MPLS labels have been allocated for specific purposes. A block of labels (0-15) has been set aside to this end; these labels are commonly called "reserved labels". They will be called "special-purpose labels" in this document.</t>
              <t indent="0">As there are only 16 of these special-purpose labels, caution is needed in the allocation of new special-purpose labels; yet, at the same time, forward progress should be allowed when one is called for.</t>
              <t indent="0">This memo defines new procedures for the allocation and retirement of special-purpose labels, as well as a method to extend the special-purpose label space and a description of how to handle extended special-purpose labels in the data plane. Finally, this memo renames the IANA registry for special-purpose labels to "Special-Purpose MPLS Label Values" and creates a new registry called the "Extended Special-Purpose MPLS Label Values" registry.</t>
              <t indent="0">This document updates a number of previous RFCs that use the term "reserved label". Specifically, this document updates RFCs 3032, 3038, 3209, 3811, 4182, 4928, 5331, 5586, 5921, 5960, 6391, 6478, and 6790.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7274"/>
          <seriesInfo name="DOI" value="10.17487/RFC7274"/>
        </reference>
        <reference anchor="RFC7432" target="https://www.rfc-editor.org/info/rfc7432" quoteTitle="true" derivedAnchor="RFC7432">
          <front>
            <title>BGP MPLS-Based Ethernet VPN</title>
            <author fullname="A. Sajassi" initials="A." role="editor" surname="Sajassi"/>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="A. Isaac" initials="A." surname="Isaac"/>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro"/>
            <author fullname="J. Drake" initials="J." surname="Drake"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <date month="February" year="2015"/>
            <abstract>
              <t indent="0">This document describes procedures for BGP MPLS-based Ethernet VPNs (EVPN). The procedures described here meet the requirements specified in RFC 7209 -- "Requirements for Ethernet VPN (EVPN)".</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7432"/>
          <seriesInfo name="DOI" value="10.17487/RFC7432"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="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 indent="0">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 indent="0">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 indent="0">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="RFC8300" target="https://www.rfc-editor.org/info/rfc8300" quoteTitle="true" derivedAnchor="RFC8300">
          <front>
            <title>Network Service Header (NSH)</title>
            <author fullname="P. Quinn" initials="P." role="editor" surname="Quinn"/>
            <author fullname="U. Elzur" initials="U." role="editor" surname="Elzur"/>
            <author fullname="C. Pignataro" initials="C." role="editor" surname="Pignataro"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">This document describes a Network Service Header (NSH) imposed on packets or frames to realize Service Function Paths (SFPs). The NSH also provides a mechanism for metadata exchange along the instantiated service paths. The NSH is the Service Function Chaining (SFC) encapsulation required to support the SFC architecture (defined in RFC 7665).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8300"/>
          <seriesInfo name="DOI" value="10.17487/RFC8300"/>
        </reference>
        <reference anchor="RFC9546" target="https://www.rfc-editor.org/info/rfc9546" quoteTitle="true" derivedAnchor="RFC9546">
          <front>
            <title>Operations, Administration, and Maintenance (OAM) for Deterministic Networking (DetNet) with the MPLS Data Plane</title>
            <author fullname="G. Mirsky" initials="G." surname="Mirsky"/>
            <author fullname="M. Chen" initials="M." surname="Chen"/>
            <author fullname="B. Varga" initials="B." surname="Varga"/>
            <date month="February" year="2024"/>
            <abstract>
              <t indent="0">This document defines format and usage principles of the Deterministic Networking (DetNet) service Associated Channel over a DetNet network with the MPLS data plane. The DetNet service Associated Channel can be used to carry test packets of active Operations, Administration, and Maintenance (OAM) protocols that are used to detect DetNet failures and measure performance metrics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9546"/>
          <seriesInfo name="DOI" value="10.17487/RFC9546"/>
        </reference>
      </references>
    </references>
    <section anchor="Ack-sec" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">The authors express their appreciation and gratitude to <contact fullname="Donald E. Eastlake 3rd"/> for the review, insightful
      questions, and helpful comments.  Also, the authors are grateful to
      <contact fullname="Amanda Baber"/> for helping organize the IANA
      registry in a clear and concise manner.</t>
      <t indent="0" pn="section-appendix.a-2"><contact fullname="Éric Vyncke"/>, <contact fullname="John       Scudder"/>, <contact fullname="Warren Kumari"/>, <contact fullname="Murray Kucherawy"/>, and <contact fullname="Gunter Van de       Velde"/> provided helpful comments during IESG review.</t>
      <t indent="0" pn="section-appendix.a-3">The authors would also like to thank <contact fullname="Adrian Farrel"/> for his patient and careful shepherding and for helping to
  finalize the text.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="K." surname="Kompella" fullname="Kireeti Kompella">
        <organization showOnFrontPage="true">Juniper Networks</organization>
        <address>
          <postal>
            <street>1133 Innovation Way</street>
            <city>Sunnyvale</city>
            <region>CA</region>
            <code>94089</code>
            <country>United States of America</country>
          </postal>
          <email>kireeti.ietf@gmail.com</email>
        </address>
      </author>
      <author initials="S." surname="Bryant" fullname="Stewart Bryant">
        <organization showOnFrontPage="true">University of Surrey 5GIC</organization>
        <address>
          <email>sb@stewartbryant.com</email>
        </address>
      </author>
      <author initials="M." surname="Bocci" fullname="Matthew Bocci">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <email>matthew.bocci@nokia.com</email>
        </address>
      </author>
      <author initials="G." surname="Mirsky" fullname="Greg Mirsky" role="editor">
        <organization showOnFrontPage="true">Ericsson</organization>
        <address>
          <email>gregimirsky@gmail.com</email>
        </address>
      </author>
      <author initials="L." surname="Andersson" fullname="Loa Andersson">
        <organization showOnFrontPage="true">Huawei Technologies</organization>
        <address>
          <email>loa@pi.nu</email>
        </address>
      </author>
      <author initials="J." surname="Dong" fullname="Jie Dong">
        <organization showOnFrontPage="true">Huawei Technologies</organization>
        <address>
          <postal>
            <street>Huawei Campus, No. 156 Beiqing Rd.</street>
            <city>Beijing</city>
            <code>100095</code>
            <country>China</country>
          </postal>
          <email>jie.dong@huawei.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
