<?xml 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"
  category="std"
  docName="draft-ietf-pim-rfc8736bis-01"
  ipr="trust200902"
  obsoletes="8736"
  updates="3973, 5015, 5059, 6754, 7761, 8364"
  submissionType="IETF"
  xml:lang="en"
  version="3"
  consensus="true">

  <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-01"/>
    <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>
    <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 and RFC3973 by defining the use of the
        currently Reserved field in the PIM common header. This document
        further updates RFC7761 and RFC3973, along with RFC5015, RFC5059,
        RFC6754, and RFC8364, by specifying the use of the currently reserved
        bits for each PIM message.
      </t>
      <t>
        This document obsoletes RFC8736.
      </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 document refers to the bits in the Reserved field of the common
        PIM header <xref target="RFC7761"/> as "PIM message type Flag Bits" or,
        simply, "Flag Bits", and it specifies that they 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>
      <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 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 key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
        "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
        "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
        "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>",
        "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
        "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
        described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
        when, and only when, they appear in all capitals, as shown here.
      </t>
    </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"/>.
        This document updates the definition of the Reserved field and refers
        to that field as "PIM message type Flag Bits" or, simply, "Flag Bits".
        The new common header format is as below.
      </t>
      <figure align="left" suppress-title="false">
        <name>New Common Header</name>
        <artwork name="" type="" align="left" alt="">
    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>
      </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="">
    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>
      </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>
        <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.
        </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 defines types 13, 14, and 15, such that each of these
        types has 16 subtypes, providing a total of 48 subtypes available for
        future PIM extensions. This is achieved by defining a new Subtype field
        (see <xref target="subtypes"/>) using the four most significant flag
        bits (bits 4-7). The notation type.subtype is used to reference these
        new extended types. The remaining four flag bits (bits 0-3, abbreviated
        as FB below) are to be defined by each extended type.
      </t>
      <figure anchor="subtypes" align="left" suppress-title="false">
        <name>Subtypes</name>
        <artwork name="" type="" align="left" alt="">
    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>
      </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.
        The registration policy remains IETF Review <xref target="RFC8126"/>.
        Assignments into 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>
        Because this document obsoletes RFC 8736, IANA is asked to change all
        registration information that references <xref target="RFC8736"/> to
        instead reference [this document].
      </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="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="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="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="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.15</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>
          </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>
