<?xml version="1.0" encoding="US-ASCII"?> version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> "rfc2629-xhtml.ent">
<rfc number="8736" consensus="true" xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std" docName="draft-ietf-pim-reserved-bits-04"
     ipr="trust200902" obsoletes="6166"
     updates="3973, 5015, 5059, 6754, 7761, 8364">
  <?rfc toc="yes"?>

  <?rfc compact="yes"?>

  <?rfc subcompact="no"?>

  <?rfc symrefs="yes"?> 8364"
     submissionType="IETF"
     xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.36.0 -->
  <front>
    <title abbrev="PIM Type Extension and Reserved Bits">PIM Message Type
    Space Extension and Reserved Bits</title>
    <seriesInfo name="RFC" value="8736"/>
    <author fullname="Stig Venaas" initials="S." surname="Venaas">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Tasman Drive</street>
          <city>San Jose</city>

          <code>CA 95134</code>

          <country>USA</country>
          <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>Futurewei Technologies, Inc.</organization>
      <address>
        <postal>
          <street>2330 Central Expressway</street>
          <city>Santa Clara</city>

          <region/>

          <code>CA 95050</code>

          <country>USA</country>
          <region>CA</region>
          <code>95050</code>
          <country>United States of America</country>
        </postal>
        <phone/>

        <facsimile/>
        <email>alvaro.retana@futurewei.com</email>
        <uri/>
      </address>
    </author>
    <date day="19" month="September" year="2019"/> month="February" year="2020"/>
    <area>Routing</area>
    <keyword>Multicast</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, types and
      creates a registry containing the per-message-type usage. This document
      also extends the PIM type space by defining three new message types. For
      each of the new types, four of the previously reserved bits are used to
      form an extended type range.</t>

      <t>This document Updates RFC updates RFCs 7761 and RFC 3973 by defining the use of
      the currently Reserved field in the PIM common header. This document
      further updates RFC RFCs 7761 and RFC 3973, along with RFC RFCs 5015, RFC 5059,
      RFC 6754
      6754, and RFC 8364, by specifying the use of the currently Reserved reserved
      bits for each PIM message.</t>
      <t>This document obsoletes RFC 6166.</t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction"> numbered="true" toc="default">
      <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"/> specification. target="RFC7761" format="default"/>.
      The common header definition contains eight Reserved 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 specified as Reserved "reserved" in the common
      PIM header <xref target="RFC7761"/> target="RFC7761" format="default"/> as PIM "PIM message type Flag Bits, or
      simply Flag Bits, Bits" or,
      simply, "Flag Bits", and it specifies that they are to be separately used
      on a per-message-type basis. It creates a registry containing the
      per-message-type usage. </t>
      <t>This document Updates updates <xref target="RFC7761"/> target="RFC7761" format="default"/> and
      <xref
      target="RFC3973"/> target="RFC3973" format="default"/> by defining the use of the
      currently Reserved field
      in the PIM common header. This document further updates <xref
      target="RFC7761"/>
      target="RFC7761" format="default"/> and <xref target="RFC3973"/>, target="RFC3973"
      format="default"/>, along with <xref
      target="RFC5015"/>, target="RFC5015"
      format="default"/>, <xref target="RFC5059"/>, target="RFC5059" format="default"/>, <xref target="RFC6754"/>
      target="RFC6754" format="default"/>,
      and <xref target="RFC8364"/>, target="RFC8364" format="default"/>, by specifying the use of the currently
      Reserved
      reserved bits for each PIM message.</t>
      <t>The currently defined PIM message types are in the range from 0 to
      15. That type space is almost exhausted. Message type 15 was reserved by
      <xref target="RFC6166"/> target="RFC6166" format="default"/> for type space extension. In
      <xref
      target="ext"/>, target="ext" format="default"/>, this document specifies the use
      of the Flag Bits for
      message types 13, 14 14, and 15 in order to extend the PIM type space. This
      document Obsoletes obsoletes <xref target="RFC6166"/>.</t> target="RFC6166" format="default"/>.</t>
    </section>
    <section title="Conventions used numbered="true" toc="default">
      <name>Conventions Used in this document">
      <t>The This Document</name>
    <t>
    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", "<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
      "OPTIONAL" "<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 title="PIM header common format"> numbered="true" toc="default">
      <name>PIM Header Common Format</name>
      <t>The common PIM header is defined in section 4.9 of <xref
      target="RFC7761"/>.
      target="RFC7761" sectionFormat="of" section="4.9"/>. This document
      updates the definition of the Reserved
      field and refers to that field as PIM "PIM message type Flag Bits, or simply
      Flag Bits. Bits" or, simply,
      "Flag Bits". The new common header format is as below. <figure
          title="Figure 1: New </t>
      <figure>
        <name>New Common Header">
          <artwork><![CDATA[ Header</name>
        <artwork name="" type="" align="left" 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>
        </figure></t>
      </figure>
      <t>The Flag Bits field is defined in <xref target="flagbits"/>. target="flagbits" format="default"/>. All
      other fields remain unchanged.</t>
    </section>
    <section anchor="flagbits" title="Flag numbered="true" toc="default">
      <name>Flag Bit definitions"> Definitions</name>
      <t>Unless otherwise specified, all the Flag Bits flag bits for each PIM type are
      Reserved <xref target="RFC8126"/>. target="RFC8126" format="default"/>.
      They MUST <bcp14>MUST</bcp14> be set to zero on
      transmission, and they MUST <bcp14>MUST</bcp14> be ignored upon receipt. The specification
      of a new PIM type MUST <bcp14>MUST</bcp14> indicate whether the bits should be treated
      differently.</t>
      <t>When defining Flag Bits, flag bits, it is helpful to have a well-defined way of
      referring to a particular bit. The most significant of the Flag Bits, flag bits,
      the bit immediately following the type field Type field, is referred to as bit 7.
      The least significant, the bit right in front of the checksum field Checksum field, is
      referred to as bit 0. This is shown in the diagram below.</t>

      <t><figure title="Figure 2: Flag Bits">
          <artwork><![CDATA[
      <figure>
        <name>Flag Bits</name>
        <artwork name="" type="" align="left" 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>
        </figure></t>
      </figure>
      <section title="Flag numbered="true" toc="default">
        <name>Flag Bits for Type 4 (Bootstrap)"> (Bootstrap)</name>
        <t>PIM message type 4 (Bootstrap) <xref target="RFC5059"/> target="RFC5059" format="default"/> defines
        Flag Bit
        flag bit 7 as No-Forward. The usage of the bit is defined in that
        document. The remaining Flag Bits flag bits are Reserved.</t> reserved.</t>
      </section>
      <section title="Flag numbered="true" toc="default">
        <name>Flag Bits for Type 10 (DF Election)"> Election)</name>
        <t>PIM message type 10 (DF Election) <xref target="RFC5015"/>
	target="RFC5015" format="default"/>
        specifies that the four most significant Flag Bits flag bits (bits 4-7) are to
        be used as a Subtype. subtype. The usage of those bits is defined in that
        document. The remaining Flag Bits flag bits are Reserved.</t> reserved.</t>
      </section>
      <section title="Flag numbered="true" toc="default">
        <name>Flag Bits for Type 12 (PFM)"> (PFM)</name>
        <t>PIM message type 12 (PFM) (PIM Flooding Mechanism) <xref target="RFC8364"/>
	target="RFC8364" format="default"/> defines Flag Bit flag bit
        7 as No-Forward. The usage of the bit is defined in that document. The
        remaining Flag Bits flag bits are Reserved.</t> reserved.</t>
      </section>
      <section title="Flag numbered="true" toc="default">
        <name>Flag Bits for Types 13, 14 14, and 15 (Type Space Extension)"> Extension)</name>
        <t>These types and the corresponding Flag Bits flag bits are defined in <xref
        target="ext"/>.</t>
	target="ext" format="default"/>.</t>
      </section>
    </section>
    <section anchor="ext" title="PIM numbered="true" toc="default">
      <name>PIM Type Space Extension"> Extension</name>
      <t>This document defines types 13, 14 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 Subtype field
      (see Figure 3) using the four most significant Flag Bits flag bits (bits 4-7). The
      notation type.subtype is used to reference these new extended types. The
      remaining four Flag Bits flag bits (bits 0-3) are Reserved reserved to be used by each
      extended type (abbreviated as FB below). </t>

      <t><figure title="Figure 3: Sub-Types">
          <artwork><![CDATA[
      <figure>
        <name>Subtypes</name>
        <artwork name="" type="" align="left" 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|  |Subtype|  FB   |           Checksum            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure></t>
      </figure>
    </section>
    <section title="Security Considerations"> numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document clarifies the use of the Flag Bits flag bits in the common PIM
      header
      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"/> target="RFC7761" format="default"/>
      and <xref target="RFC3973"/>.</t> target="RFC3973" format="default"/>.</t>
    </section>
    <section anchor="IANA" title="IANA Considerations"> numbered="true" toc="default">
      <name>IANA Considerations</name>

      <t>This document updates the PIM "PIM Message Types Types" registry to indicate
      which Flag Bits flag bits are defined for use by each of the PIM message types.
      The Registry should registry now reference references this document instead of <xref
      target="RFC6166"/>. document. The Registration Policy registration policy remains
      IETF Review <xref
      target="RFC8126"/>. target="RFC8126" format="default"/>. Assignments into
      this registry MUST <bcp14>MUST</bcp14> define any
      non-default usage (see <xref target="flagbits"/>) target="flagbits" format="default"/>) of
      the Flag Bits flag bits in addition to defining the Type.</t> type.</t>

      <t>The updated PIM "PIM Message Types Types" registry is shown below.</t>

      <t><figure title="Table 1: Updated
      <table anchor="PIM-registry">
  <name>Updated PIM Message Types Registry">
          <artwork><![CDATA[
 Type         Name                   Flag Bits        Reference
---------------------------------------------------------------------
  0         Hello                  0-7: Reserved   [RFC3973][RFC7761]

  1         Register               0-7: Reserved   [RFC7761]

  2         Register Stop          0-7: Reserved   [RFC7761]

  3         Join/Prune             0-7: Reserved   [RFC3973][RFC7761]

  4         Bootstrap              0-6: Reserved   [RFC5059][RFC7761]
                                   7: No-Forward   [RFC5059]

  5         Assert                 0-7: Reserved   [RFC3973][RFC7761]

  6         Graft                  0-7: Reserved   [RFC3973]

  7         Graft-Ack              0-7: Reserved   [RFC3973]

  8         Candidate Registry</name>
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Flag Bits</th>
      <th>Reference</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>0</td>
      <td>Hello</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC3973" format="default"/><xref target="RFC7761" format="default"/></td>
    </tr>
    <tr>
      <td>1</td>
      <td>Register</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC7761" format="default"/></td>
    </tr>
    <tr>
      <td>2</td>
      <td>Register Stop</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC7761" format="default"/></td>
    </tr>
    <tr>
      <td>3</td>
      <td>Join/Prune</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC3973" format="default"/><xref target="RFC7761" format="default"/></td>
    </tr>
    <tr>
      <td rowspan="2">4</td>
      <td rowspan="2">Bootstrap</td>
      <td>0-6: Reserved</td>
      <td><xref target="RFC5059" format="default"/><xref target="RFC7761"
      format="default"/></td>
    </tr>
    <tr>
      <td>7: No-Forward</td>
      <td><xref target="RFC5059" format="default"/></td>
    </tr>
    <tr>
      <td>5</td>
      <td>Assert</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC3973" format="default"/><xref target="RFC7761" format="default"/></td>
    </tr>
    <tr>
      <td>6</td>
      <td>Graft</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC3973" format="default"/></td>
    </tr>
    <tr>
      <td>7</td>
      <td>Graft-Ack</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC3973" format="default"/></td>
    </tr>
    <tr>
      <td>8</td>
      <td>Candidate RP           0-7: Reserved   [RFC7761]
              Advertisement

  9         State Refresh          0-7: Reserved   [RFC3973]

 10         DF Election            0-3: Reserved   [RFC5015]
                                   4-7: Subtype    [RFC5015]

 11         ECMP Redirect          0-7: Reserved   [RFC6754]

 12         PIM Advertisement</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC7761" format="default"/></td>
    </tr>
    <tr>
      <td>9</td>
      <td>State Refresh</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC3973" format="default"/></td>
    </tr>
    <tr>
      <td rowspan="2">10</td>
      <td rowspan="2">DF Election</td>
      <td>0-3: Reserved</td>
      <td><xref target="RFC5015" format="default"/></td>
    </tr>
    <tr>
      <td>4-7: Subtype</td>
      <td><xref target="RFC5015" format="default"/></td>
    </tr>
    <tr>
      <td>11</td>
      <td>ECMP Redirect</td>
      <td>0-7: Reserved</td>
      <td><xref target="RFC6754" format="default"/></td>
    </tr>
    <tr>
      <td rowspan="2">12</td>
      <td rowspan="2">PIM Flooding Mechanism 0-6: Reserved   [RFC8364]
                                   7: No-Forward   [RFC8364]

 13.0-15.15 Unassigned             0-3: Unassigned [this document]
]]></artwork>
        </figure>The Unassigned Mechanism</td>
      <td>0-6: Reserved</td>
      <td><xref target="RFC8364" format="default"/></td>
    </tr>
    <tr>
      <td>7: No-Forward</td>
      <td><xref target="RFC8364" format="default"/></td>
    </tr>
    <tr>
      <td>13.0-15.15</td>
      <td>Unassigned</td>
      <td>0-3: Unassigned</td>
      <td>RFC 8736</td>
    </tr>
  </tbody>
      </table>
      <t>The unassigned types above, as explained in <xref
      target="ext"/>, target="ext"
      format="default"/>, use the extended type notation of type.subtype. Each
      extended type only has 4 Flag Bits flag bits available. New extended message types
      should be assigned conscutively, consecutively, starting with 13.0, then 13.1, etc.</t>
    </section>
  </middle>
  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119' ?>

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

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

      <?rfc include='reference.RFC.8174'?>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7761.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6166.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3973.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6754.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8364.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5059.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5015.xml"/>
      </references>

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

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

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

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

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

      <?rfc include='reference.RFC.5015' ?>
    </references>
  </back>
</rfc>