<?xml version='1.0' encoding='utf-8'?> version="1.0" encoding="UTF-8"?>

<?xml-model href="rfc7991bis.rnc"?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  submissionType="IETF"
  category="std"
  consensus="true"
  docName="draft-ietf-pim-rfc8736bis-04"
  number="9436"
  ipr="trust200902"
  obsoletes="8736"
  updates="3973, 5015, 5059, 6754, 7761, 8364"
  submissionType="IETF"
  xml:lang="en"
  version="3"
  consensus="true">
  tocInclude="true"
  symRefs="true" sortRefs="true"
  version="3">

  <front>
    <title abbrev="PIM Type Extension and Reserved Bits">PIM Message Type
    Space Extension and Reserved Bits</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-pim-rfc8736bis-04"/> name="RFC" value="9436"/>
    <author fullname="Stig Venaas" initials="S." surname="Venaas">
      <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Tasman Drive</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95134</code>
          <country>United States of America</country>
        </postal>
        <email>stig@cisco.com</email>
      </address>
    </author>
    <author fullname="Alvaro Retana" initials="A." surname="Retana">
      <organization showOnFrontPage="true">Futurewei Technologies, Inc.</organization>
      <address>
        <postal>
          <street>2330 Central Expressway</street>
          <city>Santa Clara</city>
          <region>CA</region>
          <code>95050</code>
          <country>United States of America</country>
        </postal>
        <phone/>
        <email>alvaro.retana@futurewei.com</email>
        <uri/>
      </address>
    </author>
    <date year="2023"/>
    <area>Routing</area>
    <workgroup>PIM</workgroup> year="2023" month="August" />
    <area>rtg</area>
    <workgroup>pim</workgroup>
    <keyword>Multicast PIM</keyword>
    <abstract>
      <t>
        The PIM version 2 messages share a common message header format. The
        common header definition contains eight reserved bits. This document
        specifies how these bits may be used by individual message types and
        extends the PIM type space.
      </t>
      <t>
        This document updates RFC7761 RFCs 7761 and RFC3973 3973 by defining the use of the
        currently
        Reserved field in the PIM common header. This document
        further updates RFC7761 RFCs 7761 and RFC3973, 3973, along with RFC5015, RFC5059,
        RFC6754, RFCs 5015, 5059, 6754,
        and RFC8364, 8364, by specifying the use of the currently reserved bits for each PIM message.
      </t>
      <t>
        This document obsoletes RFC8736. RFC 8736.
      </t>
    </abstract>
  </front>

  <middle>
    <section numbered="true" toc="include" removeInRFC="false" anchor="intro">
      <name>Introduction</name>
      <t>
        The PIM version 2 messages share a common message header format defined
        in the PIM Sparse Mode specification <xref target="RFC7761"/>. The
        common header definition contains eight reserved bits. While all
        message types use this common header, there is no document formally
        specifying that these bits are to be used per message type.
      </t>
      <t>
        This
      <t>This document refers to updates the bits in definition of the Reserved field of the common
        PIM header <xref target="RFC7761"/> as "PIM message type Flag Bits" or,
        simply, "Flag Bits", and refers
      to it as the "Flag Bits field". It specifies that they the flag bits are to
      be separately used on a per-message-type basis. It updates the "PIM
      Message Types" registry to indicate the per-message-type usage.
      </t>
      <t>
        This document updates <xref target="RFC7761"/> and <xref
        target="RFC3973"/> by defining the use of the currently Reserved field in the
        PIM common header. This document further updates <xref
        target="RFC7761"/> and <xref target="RFC3973"/>, along with <xref
        target="RFC5015"/>, <xref target="RFC5059"/>, <xref
        target="RFC6754"/>, and <xref target="RFC8364"/>, by specifying the
        use of the currently reserved bits for each PIM message.
      </t> message.</t>
      <t>
        The originally defined PIM message types were in the range from 0 to
        15. Message type 15 had been reserved by <xref target="RFC6166"/> for
        type space extension. In <xref target="ext"/>, this document specifies
        the use of the Flag Bits field for message types 13, 14, and 15 in
        order to extend the PIM type space. The type space extension in <xref
        target="RFC6166"/> was made obsolete by <xref target="RFC8736"/>.
        This document obsoletes <xref target="RFC8736"/>.
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false">
      <name>Conventions Used in This Document</name>
      <t>
        The
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
        "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
        NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
        "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
        "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
        are to be interpreted as described in BCP 14 BCP&nbsp;14 <xref
        target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
        appear in all capitals, as shown here.
        </t>

    </section>
    <section numbered="true" toc="include" removeInRFC="false">
      <name>PIM Header Common Format</name>
      <t>
        The common PIM header is defined in <xref target="RFC7761"
        sectionFormat="of" section="4.9" derivedLink="https://rfc-editor.org/rfc/rfc7761#section-4.9"/>. section="4.9"/>.  This document updates the
        definition of the Reserved field and refers to that field it as "PIM message type Flag Bits" or, simply, the "Flag Bits". Bits
        field".  The updated common header format is as below.
      </t>
      <figure align="left" suppress-title="false">
        <name>Updated Common Header</name>
        <artwork name="" type="" align="left" alt=""> alt=""><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type  |   Flag Bits   |           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
]]></artwork>
      </figure>
      <t>
        The Flag Bits field is defined in <xref target="flagbits"/>. All other fields remain unchanged.
      </t>
    </section>
    <section anchor="flagbits" numbered="true" toc="include" removeInRFC="false">
      <name>Flag Bit Definitions</name>
      <t>
        Unless otherwise specified, all the flag bits for each PIM type are
        Unassigned <xref target="RFC8126"/>. They <bcp14>MUST</bcp14> be set to
        zero on transmission, and they <bcp14>MUST</bcp14> be ignored upon
        receipt. The specification of a new PIM type <bcp14>MUST</bcp14>
        indicate whether the bits should be treated differently.
      </t>
      <t>
        When defining flag bits, it is helpful to have a well-defined way of referring to a particular bit. The most significant of the flag bits, the bit immediately following the Type field, is referred to as bit 7. The least significant, the bit right in front of the Checksum field, is referred to as bit 0. This is shown in the diagram below.
      </t>
      <figure align="left" suppress-title="false">
        <name>Flag Bits</name>
        <artwork name="" type="" align="left" alt=""> alt=""><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type  |7 6 5 4 3 2 1 0|           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
]]></artwork>
      </figure>
      <section numbered="true" toc="include" removeInRFC="false">
        <name>Flag Bits for Type 4 (Bootstrap)</name>
        <t>
          PIM message type 4 (Bootstrap) <xref target="RFC5059"/> defines flag
          bit 7 as No-Forward. The usage of the bit is defined in that document. The remaining flag bits are unassigned.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false">
        <name>Flag Bits for Type 10 (DF Election)</name>
        <t>
          PIM message type 10 (DF Election) <xref target="RFC5015"/> specifies
          that the four most significant flag bits (bits 4-7) are to be used as
          a subtype. The usage of those bits is defined in that document. The
          remaining flag bits are unassigned.
        </t>
      </section>

      <section numbered="true" toc="include" removeInRFC="false">
        <name>Flag Bits for Type 12 (PFM)</name> (PIM Flooding Mechanism)</name>
        <t>
          PIM message type 12 (PIM Flooding Mechanism) <xref target="RFC8364"/>
          defines flag bit 7 as No-Forward. The usage of the bit is defined in
          that document. The remaining flag bits are unsassigned. unassigned.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false">
        <name>Flag Bits for Types 13, 14, and 15 (Type Space Extension)</name>
        <t>
          These types and the corresponding flag bits are defined in
          <xref target="ext"/>.
        </t>
      </section>
    </section>
    <section anchor="ext" numbered="true" toc="include" removeInRFC="false">
      <name>PIM Type Space Extension</name>
      <t>
        This document extends types 13, 14, and 15 such that each becomes 16
        new types, resulting in 48 types available for future PIM extensions.
        This extension is achieved by defining a Subtype field (see
        <xref target="subtypes"/>) using the four most significant flag bits
        (bits 4-7). The notation type.subtype is used to reference the new
        extended types. The remaining four flag bits (bits 0-3, abbreviated as
        FB below) are to be defined by each extended type.
      </t>
      <t>
        Each of the extended types is represented by the eight bits
        resulting from the concatenation of the Type and Subtype fields.  No
        relationship is expected or implied between extended type messages with
        a common Type field.
      </t>
      <figure anchor="subtypes" align="left" suppress-title="false">
        <name>Subtypes</name>
        <artwork name="" type="" align="left" alt=""> alt=""><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type  |Subtype|  FB   |           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
]]></artwork>
      </figure>
    </section>
    <section numbered="true" toc="include" removeInRFC="false">
      <name>Security Considerations</name>
      <t>
        This document clarifies the use of the flag bits in the common PIM
        header, and it extends the PIM type space. As such, there is no impact
        on security or changes to the considerations in
        <xref target="RFC7761"/> and <xref target="RFC3973"/>.
      </t>
    </section>

    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false">
      <name>IANA Considerations</name>
      <t>
        This document updates the "PIM Message Types" registry to indicate
        which flag bits are defined for use by each of the PIM message types, types
        and changes their registration status to Unassigned, Unassigned except where the
        bits have already been specified, as shown in
        <xref target="PIM-registry"/>. Table 1. The
        registration policy remains IETF Review <xref
        target="RFC8126"/>. Assignments to this registry <bcp14>MUST</bcp14>
        define any non-default usage (see <xref target="flagbits"/>) of the
        flag bits in addition to the type.
      </t>
      <t>
        Extended type 15.15 is Reserved <xref target="RFC8126"/> for future
        extensions.
      </t>
      <t>
        Because this document obsoletes RFC 8736, <xref target="RFC8736"/>, IANA is asked to change all
        registration information that has
        changed the references to <xref
        target="RFC8736"/> in the registry to
        instead reference [this document]. point to this document instead.
      </t>
      <t>
        The updated "PIM Message Types" registry is shown below.
      </t>
      <table anchor="PIM-registry" align="center">
        <name>Updated PIM Message Types Registry</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Type</th>
            <th align="left" colspan="1" rowspan="1">Name</th>
            <th align="left" colspan="1" rowspan="1">Flag Bits</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0</td>
            <td align="left" colspan="1" rowspan="1">Hello</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3973"/><xref target="RFC3973"/> <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">1</td>
            <td align="left" colspan="1" rowspan="1">Register</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">2</td>
            <td align="left" colspan="1" rowspan="1">Register Stop</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">3</td>
            <td align="left" colspan="1" rowspan="1">Join/Prune</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3973"/><xref target="RFC3973"/> <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td rowspan="2" align="left" colspan="1">4</td>
            <td rowspan="2" align="left" colspan="1">Bootstrap</td>
            <td align="left" colspan="1" rowspan="1">0-6: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5059"/><xref target="RFC5059"/> <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">7: No-Forward</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5059"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">5</td>
            <td align="left" colspan="1" rowspan="1">Assert</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3973"/><xref target="RFC3973"/> <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">6</td>
            <td align="left" colspan="1" rowspan="1">Graft</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3973"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">7</td>
            <td align="left" colspan="1" rowspan="1">Graft-Ack</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3973"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">8</td>
            <td align="left" colspan="1" rowspan="1">Candidate RP Advertisement</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC7761"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">9</td>
            <td align="left" colspan="1" rowspan="1">State Refresh</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3973"/></td>
          </tr>
          <tr>
            <td rowspan="2" align="left" colspan="1">10</td>
            <td rowspan="2" align="left" colspan="1">DF Election</td>
            <td align="left" colspan="1" rowspan="1">0-3: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5015"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">4-7: Subtype</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5015"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">11</td>
            <td align="left" colspan="1" rowspan="1">ECMP Redirect</td>
            <td align="left" colspan="1" rowspan="1">0-7: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC6754"/></td>
          </tr>
          <tr>
            <td rowspan="2" align="left" colspan="1">12</td>
            <td rowspan="2" align="left" colspan="1">PIM Flooding Mechanism</td>
            <td align="left" colspan="1" rowspan="1">0-6: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8364"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">7: No-Forward</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8364"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">13.0-15.14</td>
            <td align="left" colspan="1" rowspan="1">Unassigned</td>
            <td align="left" colspan="1" rowspan="1">0-3: Unassigned</td>
            <td align="left" colspan="1" rowspan="1">[This document]</td> rowspan="1"></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">15.15</td>
            <td align="left" colspan="1" rowspan="1">Reserved</td>
            <td align="left" colspan="1" rowspan="1">0-3: Reserved</td>
            <td align="left" colspan="1" rowspan="1">[This document]</td> rowspan="1">RFC 9436</td>
          </tr>
        </tbody>
      </table>
      <t>
        The unassigned types above, as explained in <xref target="ext"/>, use
        the extended type notation of type.subtype. Each extended type only has
        4 flag bits available. New extended message types should be assigned
        consecutively, starting with 13.0, then 13.1, etc.
      </t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7761.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8126.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3973.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5015.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5059.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6166.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6754.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8364.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8736.xml"/>
      </references>
    </references>
  </back>

</rfc>