<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-6man-multicast-addr-arch-update-04"
     ipr="trust200902" updates="3306,3956,4291">
  <front>
    <title abbrev="Multicast Flag bits">Updates to the IPv6 Multicast
    Addressing Architecture</title>

    <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
      <organization>France Telecom</organization>

      <address>
        <postal>
          <street></street>

          <city>Rennes</city>

          <region></region>

          <code>35000</code>

          <country>France</country>
        </postal>

        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>

    <author fullname="Stig Venaas" initials="S." surname="Venaas">
      <organization>Cisco</organization>

      <address>
        <postal>
          <street></street>

          <city></city>

          <country>USA</country>
        </postal>

        <email>stig@cisco.com</email>
      </address>
    </author>

    <date day="12" month="March" year="2014" />

    <workgroup>6man Working Group</workgroup>

    <abstract>
      <t>This document updates the IPv6 multicast addressing architecture by
      defining the 17-20 reserved bits as generic flag bits. The document
      provides also some clarifications related to the use of these flag
      bits.</t>

      <t>This document updates RFC 3956, RFC 3306 and RFC 4291.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document updates the IPv6 multicast addressing architecture
      <xref target="RFC4291"></xref> by defining the 17-20 reserved bits as
      generic flag bits (<xref target="flag"></xref>). The document provides
      also some clarifications related to the use of these flag bits (<xref
      target="reco"></xref>).</t>

      <t>This document updates <xref target="RFC3956"></xref>, <xref
      target="RFC3306"></xref>, and <xref target="RFC4291"></xref>. These
      updates are logical consequences of the recommendation on the flag bits
      (<xref target="reco"></xref>).</t>

      <t>Textual representation of IPv6 addresses included in the RFC updates
      follows the recommendation in <xref target="RFC5952"></xref>.</t>
    </section>

    <section anchor="flag" title="Addressing Architecture Update">
      <t>Bits 17-20 of a multicast address are defined in <xref
      target="RFC3956"></xref> and <xref target="RFC3306"></xref> as reserved
      bits. This document defines these bits as generic flag bits so that they
      apply to any multicast address. <xref target="newarch4291"></xref> and
      <xref target="newarch3956"></xref> show the updated structure of the
      addressing architecture. The first diagram shows the update of the base
      IPv6 addressing architecture, and the second shows the update of
      so-called Embedded-RP.</t>

      <t><figure align="center" anchor="newarch4291"
          title="Updated IPv6 Multicast Addressing Architecture">
          <artwork><![CDATA[OLD: 
|   8    |  4 |  4 |                  112 bits                    |
+--------+----+----+----------------------------------------------+
|11111111|flgs|scop|                  group ID                    |
+--------+----+----+----------------------------------------------+

NEW:
|   8    |  4 |  4 |  4 |             108 bits                    |
+--------+----+----+----------------------------------------------+
|11111111|ff1 |scop|ff2 |             group ID                    |
+--------+----+----+----+-----------------------------------------+

     * ff1 refers to "flag field 1"
     * ff2 refers to "flag field 2"
     * flag bits denote both ff1 and ff2.

]]></artwork>
        </figure></t>

      <t><figure align="center" anchor="newarch3956"
          title="Embedded-RP with Updated IPv6 Multicast Address Arch.">
          <artwork><![CDATA[OLD (RFC 3956):
|   8    |  4 |  4 |  4 |  4 |   8    |       64       |    32    |
+--------+----+----+----+----+--------+----------------+----------+
|11111111|flgs|scop|rsvd|RIID|  plen  | network prefix | group ID |
+--------+----+----+----+----+--------+----------------+----------+

NEW:
|   8    |  4 |  4 |  4 |  4 |   8    |       64       |    32    |
+--------+----+----+----+----+--------+----------------+----------+
|11111111|ff1 |scop|ff2 |RIID|  plen  | network prefix | group ID |
+--------+----+----+----+----+--------+----------------+----------+
]]></artwork>
        </figure></t>

      <t>Further specification documents may define a meaning for these flag
      bits. Defining the bits 17-20 as flags for all IPv6 multicast addresses
      allows addresses to be treated in a more uniform and generic way, and
      allows for these bits to be defined in the future for different
      purposes, irrespective of the specific type of multicast address.</t>
    </section>

    <section anchor="reco" title="Flag Bits: A Recommendation">
      <t>Some implementations and specification documents do not treat the
      flag bits as separate bits but tend to use their combined value as a
      4-bit integer. This practice is a hurdle for assigning a meaning to the
      remaining flag bits. Below are listed some examples for illustration
      purposes:<list style="symbols">
          <t>the reading of <xref target="RFC3306"></xref> may lead to
          conclude that ff3x::/32 is the only allowed SSM IPv6 prefix
          block.</t>

          <t><xref target="RFC3956"></xref> states only ff70::/12 applies to
          Embedded-RP. Particularly, implementations should not treat the
          fff0::/12 range as Embedded-RP.</t>
        </list></t>

      <t>To avoid such confusion and to unambiguously associate a meaning with
      the remaining flags, the following requirement is made</t>

      <t><list style="empty">
          <t>Implementations MUST treat flag bits as separate bits.</t>
        </list></t>

      <t></t>
    </section>

    <section title="RFC Updates">
      <t></t>

      <section title="RFC 3306">
        <t>This document changes Section 4 of <xref target="RFC3306"></xref>
        as follows:</t>

        <t>OLD:</t>

        <figure>
          <artwork><![CDATA[      |   8    |  4 |  4 |   8    |    8   |       64       |    32    |
      +--------+----+----+--------+--------+----------------+----------+
      |11111111|flgs|scop|reserved|  plen  | network prefix | group ID |
      +--------+----+----+--------+--------+----------------+----------+

                                   +-+-+-+-+
   flgs is a set of 4 flags:       |0|0|P|T|
                                   +-+-+-+-+

         o  P = 0 indicates a multicast address that is not assigned
            based on the network prefix.  This indicates a multicast
            address as defined in [ADDRARCH].

         o  P = 1 indicates a multicast address that is assigned based
            on the network prefix.

         o  If P = 1, T MUST be set to 1, otherwise the setting of the T
            bit is defined in Section 2.7 of [ADDRARCH].

   The reserved field MUST be zero.
]]></artwork>
        </figure>

        <t>NEW:</t>

        <figure>
          <artwork><![CDATA[      |   8    |  4 |  4 |  4 |  4 |    8   |       64       |    32    |
      +--------+----+----+----+----+--------+----------------+----------+
      |11111111|ff1 |scop|ff2 |rsvd|  plen  | network prefix | group ID |
      +--------+----+----+----+----+--------+----------------+----------+

                                                  +-+-+-+-+
   ff1 (flag field 1) is a set of 4 flags:        |X|Y|P|T|  
                                                  +-+-+-+-+

   X and Y may each be set to 0 or 1.

         o  P = 0 indicates a multicast address that is not assigned
            based on the network prefix.  This indicates a multicast
            address as defined in [RFC4291].

         o  P = 1 indicates a multicast address that is assigned based
            on the network prefix.

         o  If P = 1, T MUST be set to 1, otherwise the setting of the T
            bit is defined in Section 2.7 of [RFC4291].

                                                  +-+-+-+-+
   ff2 (flag field 2) is a set of 4 flags:        |r|r|r|r|  
                                                  +-+-+-+-+

   where "rrrr" are for future assignment as additional flag bits.

   Flag bits denote both ff1 and ff2.
]]></artwork>
        </figure>

        <t></t>

        <t>This document changes Section 6 of <xref target="RFC3306"></xref>
        as follows:</t>

        <t>OLD:<list style="empty">
            <t>These settings create an SSM range of FF3x::/32 (where 'x' is
            any valid scope value). The source address field in the IPv6
            header identifies the owner of the multicast address.</t>
          </list></t>

        <t>NEW:<list style="empty">
            <t>If the flag bits in ff1 are set to 0011, these settings create
            an SSM range of ff3x::/32 (where 'x' is any valid scope value).
            The source address field in the IPv6 header identifies the owner
            of the multicast address. ff3x::/32 is not the only allowed SSM
            prefix range. For example if the most significant flag bit in ff1
            is set, then we would get the SSM range ffbx::/32.</t>
          </list></t>

        <t></t>
      </section>

      <section title="RFC 3956">
        <t>This document changes Section 2 of <xref target="RFC3956"></xref>
        as follows:</t>

        <t>OLD:</t>

        <t><figure>
            <artwork><![CDATA[   As described in [RFC3306], the multicast address format is as
   follows:

      |   8    |  4 |  4 |   8    | 8  |       64       |    32    |
      +--------+----+----+--------+----+----------------+----------+
      |11111111|flgs|scop|reserved|plen| network prefix | group ID |
      +--------+----+----+--------+----+----------------+----------+

   Where flgs are "0011".  (The first two bits are as yet undefined,
   sent as zero and ignored on receipt.)]]></artwork>
          </figure>NEW:</t>

        <t><figure>
            <artwork><![CDATA[   The multicast address format is as
   follows:

      |   8    |  4 |  4 |  4 |  4 | 8  |       64       |    32    |
      +--------+----+----+----+----+----+----------------+----------+
      |11111111|ff1 |scop|ff2 |rsvd|plen| network prefix | group ID |
      +--------+----+----+----+----+----+----------------+----------+

                                                     +-+-+-+-+
      ff1 (flag field 1) is a set of four flags:     |X|R|P|T|
                                                     +-+-+-+-+
      X may be set to 0 or 1.

                                                     +-+-+-+-+
      ff2 (flag field 2) is a set of 4 flags:        |r|r|r|r|  
                                                     +-+-+-+-+
      where "rrrr" are for future assignment as additional flag bits.

      Flag bits denote both ff1 and ff2.]]></artwork>
          </figure></t>

        <t></t>

        <t>This document changes Section 3 of <xref target="RFC3956"></xref>
        as follows:</t>

        <t>OLD:</t>

        <figure>
          <artwork><![CDATA[      |   8    |  4 |  4 |  4 |  4 | 8  |       64       |    32    |
      +--------+----+----+----+----+----+----------------+----------+
      |11111111|flgs|scop|rsvd|RIID|plen| network prefix | group ID |
      +--------+----+----+----+----+----+----------------+----------+
                                      +-+-+-+-+
      flgs is a set of four flags:    |0|R|P|T|
                                      +-+-+-+-+

   When the highest-order bit is 0, R = 1 indicates a multicast address
   that embeds the address on the RP.  Then P MUST be set to 1, and
   consequently T MUST be set to 1, as specified in [RFC3306].  In
   effect, this implies the prefix FF70::/12.  In this case, the last 4
   bits of the previously reserved field are interpreted as embedding
   the RP interface ID, as specified in this memo.

   The behavior is unspecified if P or T is not set to 1, as then the
   prefix would not be FF70::/12.  Likewise, the encoding and the
   protocol mode used when the two high-order bits in "flgs" are set to
   11 ("FFF0::/12") is intentionally unspecified until such time that
   the highest-order bit is defined.  Without further IETF
   specification, implementations SHOULD NOT treat the FFF0::/12 range
   as Embedded-RP.
]]></artwork>
        </figure>

        <t>NEW:</t>

        <figure>
          <artwork><![CDATA[      |   8    |  4 |  4 |  4 |  4 | 8  |       64       |    32    |
      +--------+----+----+----+----+----+----------------+----------+
      |11111111|ff1 |scop|ff2 |RIID|plen| network prefix | group ID |
      +--------+----+----+----+----+----+----------------+----------+
                                      +-+-+-+-+
      ff1 is a set of four flags:     |X|R|P|T|
                                      +-+-+-+-+
      X may be set to 0 or 1.

   R = 1 indicates a multicast address that embeds the address of the
   RP.  P MUST be set to 1, and consequently T MUST be set to 1,
   according to [RFC3306], as this is a special case of unicast-prefix
   based addresses.  This implies that for instance prefixes ff70::/12
   and fff0::/12 are embedded RP prefixes.  The behavior is unspecified
   if P or T is not set to 1.  When the R-bit is set, the last 4 bits of
   the field that were reserved in [RFC3306] are interpreted as
   embedding the RP interface ID, as specified in this memo.

]]></artwork>
        </figure>

        <t></t>

        <t>This document changes Section 4 of <xref target="RFC3956"></xref>
        as follows:</t>

        <t>OLD:<list style="empty">
            <t>It MUST be a multicast address with "flgs" set to 0111, that
            is, to be of the prefix FF70::/12,</t>
          </list></t>

        <t>NEW:<list style="empty">
            <t>It MUST be a multicast address with R-bit set to 1.</t>

            <t>It MUST have P-bit and T-bit both set to 1 when using the
            embedding in this document as it is a prefix-based address.</t>
          </list></t>

        <t>This document changes Section 7.1 of <xref target="RFC3956"></xref>
        as follows:</t>

        <t>OLD:<list style="empty">
            <t>To avoid loops and inconsistencies, for addresses in the range
            FF70::/12, the Embedded-RP mapping MUST be considered the longest
            possible match and higher priority than any other mechanism.</t>
          </list></t>

        <t>NEW:<list style="empty">
            <t>To avoid loops and inconsistencies, for addresses with R-bit
            set to 1, the Embedded-RP mapping MUST be considered the longest
            possible match and higher priority than any other mechanism.</t>
          </list></t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document does not require any action from IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Security considerations discussed in <xref target="RFC3956"></xref>,
      <xref target="RFC3306"></xref> and <xref target="RFC4291"></xref> MUST
      be taken into account.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Special thanks to B. Haberman for the discussions prior to the
      publication of this document.</t>

      <t>Many thanks to J. Korhonen and T. Jinmei their comments.</t>
    </section>
  </middle>

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

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

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

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

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