<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" docName="draft-lamparter-isis-p2mp-00" ipr="trust200902">
  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="IS-IS Point-to-Multipoint operation"
                  >IS-IS Point-to-Multipoint operation</title>
    <author fullname="Christian Franke" initials="C."
            surname="Franke">
      <organization>NetDEF</organization>

      <address>
        <postal>
          <street></street>
          <!-- Reorder these if your country does things differently -->
          <code></code>
          <city>Leipzig</city>
          <region></region>
          <country>DE</country>
        </postal>

        <email>chris@opensourcerouting.org</email>
      </address>
    </author>
    <author fullname="David Lamparter" initials="D." surname="Lamparter">
      <organization>NetDEF</organization>
      <address>
        <postal>
          <street/>
          <code>04103</code>
          <city>Leipzig</city>
          <country>Germany</country>
        </postal>
        <email>david@opensourcerouting.org</email>
      </address>
    </author>

    <date day="3" month="July" year="2015" />

    <area>Routing</area>

    <workgroup>Network Working Group</workgroup>
    <keyword>IS-IS Multipoint Multicast</keyword>

    <abstract>
      <t>
        This document describes a new mode operation for IS-IS. In addition
        to the existing LAN and point-to-point modes of operation, a point-to-multipoint
        mode is defined. This mode is useful for operation both on networks with more than
        two routers where multicast is expensive in comparison to unicast, as well on
        networks where creating a LAN pseudonode cannot adequately
        reflect metrics.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>The core functionality of the protocol outlined in this document
        consists of an additional Subnetwork dependent function per <xref
          target="IS-IS">Section 8 of ISO/IEC 10589:2002</xref>.
        In that regard, the next section can be understood as new section "8.5
        Point-to-multipoint networks".</t>
      <t>The outlined protocol is remotely similar to the derelict section
        "8.3 ISO 8208 subnetworks" <xref target="X.25"/> in that multiple
        point-to-point adjacencies are established on an interface.</t>
      <t>Point-to-multipoint operation of IS-IS is thus not a new idea; in
        fact section 6.2 already mentions "multipoint links."  This document
        re-enables the concept.</t>
    </section>

    <?rfc needLines="5" ?>

    <section anchor="pseudocirc" title="P2MP Pseudocircuits">
      <t>In place of <xref target="CLNS">ISO 8473 call management</xref>
        establishing sessions, this document establishes pairwise
        "pseudocircuits" between two IS on a common medium.  Multiple such
        pseudocircuits can normally exist on one P2MP interface.</t>
      <t>Each pseudocircuit operates, aside from subnetwork attachment
        procedures, exactly as a PtP link.</t>
      <t>It should be noted that while the Multicast autodiscovery
        mechanism requires broadcast capability, no other part of the
        protocol does.  The P2MP interface type can be used on
        non-transitive and/or non-broadcast interfaces.</t>

      <section title="Pseudocircuit behaviour">
        <t>An implementation maintains a set of pseudocircuits per P2MP
          interface.  Each pseudocircuit is uniquely identified by the local
          interface and peer's SNPA address.</t>
        <t>Each participating system MUST use a consistent SNPA address per
          local interface.  A change in SNPA address results in all neighbors
          treating the interface as distinct from the previous one.  A system
          MAY support multiple SNPA addresses per interface by treating them as
          distinct interfaces.</t>
        <t>Unnumbered media are not supported by this protocol.  Each
          participant on a link MUST have an unique SNPA address on that
          link.</t>

        <t>As pseudocircuits are dynamic in nature, they must be created and
          destroyed as needed.</t>

        <section title="Representation in LSPs">
          <t>Pseudocircuits are represented in LSPs as a regular PtP circuit
            would be.  As a result, their treatment in SPF calculations is also
            identical to PtP circuits.</t>
        </section>

        <section title="Forwarding">
          <t>In scenarios where pseudocircuits do not form a full mesh of all
            participants on a medium, the best path for a packet may be
            through the same interface as the one it was received on.</t>
          <t>Systems implementing this specification MUST therefore support
            forwarding packets on the same interface that they were received
            on.  This applies only to interfaces configured for P2MP
            operation.</t>
        </section>
      </section>

      <section title="Neighbor IS discovery">
        <t>The discovery machinery produces as output a "candidate neighbor
          list," which is a list of possible neighbor's SNPAs and is
          maintained per P2MP interface.  Additional information (metric,
          etc.) MAY be associated with the SNPA, but this is not part of the
          discovery mechanism.</t>
        <t>The candidate neighbor list is conceptual in nature; adding and
          removing entries results in pseudocircuit creation and deletion.  It
          need not be implemented as an actual list.</t>
        <t>The list is the union of the result of each of the following sources
          of neighbor information. A neighbor may be listed by multiple
          sources: it MUST NOT be removed while any source still lists it.</t>
        <t>The IS-IS implementation SHOULD provide user configuration to
          disable individual mechanisms and/or filter candidate neighbors both
          as a security and as misconfiguration preventing measure.</t>

        <section title="Manual configuration">
          <t>A list of neighbor IS MAY be configured by the user, providing
            possible neighbor's SNPAs on an interface.</t>
        </section>

        <section title="Lower layer autodiscovery">
          <t>Lower protocol layers (VPLS, IEEE 802.11) may be able to provide
            a list of attached neighbors.  This list MAY be fed into the
            candidate neighbor list.</t>
        </section>

        <section title="Multicast autodiscovery">
          <t>For broadcast capable networks, this document defines an
            autodiscovery mechanism based on multicasting Hello packets.
            This mechanism MAY be disabled by the user, but MUST be
            implemented for all lower layer link types with (limited or full)
            broadcast capability.</t>
          <t>Multicast autodiscovery P2MP Hello PDUs are distinguished by not
            containing a RFC5303 Three-Way Adjacency TLV.  Receiving such a
            Hello places the sending IS on the candidate list for as long as
            the PDU's holdtime indicates.</t>
          <t>A system MAY implement a receive-only passive multicast
            autodiscovery mode where it adds candidates (forms pseudocircuits)
            on receiving P2MP Hello PDUs, but does not send such PDUs
            itself.</t>
          <t>If either passive or full multicast autodiscovery is enabled,
            receiving a P2MP Hello PDU with a Three-Way Adjacency TLV also adds
            the neighbor to the candidate list.</t>
        </section>
      </section>

      <section title="Adjacency formation">
        <t>Since there is no underlying protocol layer
          partitioning the link into actual PtP circuits in this case, additional handling
          is required on bringing up the individual pseudocircuit
          adjacencies.</t>
        <t>To prevent different pseudocircuits from "bleeding" into each other,
          implementations of this protocol MUST enable <xref target="RFC5303"/>
          on all P2MP pseudocircuits, with changes as follows:
          <list style="symbols">
            <t>Received IIH PDUs on P2MP pseudocircuits without the
              Point-to-Point Three-Way Adjacency option MUST be discarded.  The
              TLV is not optional on pseudocircuit adjacencies but rather
              mandatory.</t>
          </list>
        </t>
      </section>

      <section title="Pseudocircuit teardown">
        <t>Pseudocircuits are destroyed when their PtP state machine has
          transitioned into "Down" state and they are no longer listed as
          candidates by any discovery mechanism.  The conditions for
          pseudocircuit removal are thus:
          <list style="symbols">
            <t>PtP adjacency timeout functionality (<xref target="IS-IS">IS-IS
                section 8.2.6</xref>) has moved the pseudocircuit to Down
              state, or it never moved out of Down state</t>
            <t>The holdtime of any multicast autodiscovery P2MP Hello PDUs has
              expired.</t>
            <t>Manual configuration or lower layer autodiscovery no longer
              lists the neighbor.</t>
          </list>
          As long as a pseudocircuit is present, its PtP state machine
          will, as expected for PtP circuits, trigger transmission of further
          Hello PDUs, even when it is in Down state.</t>
      </section>
    </section>

    <section anchor="processing" title="PDU generation and processing">
      <section title="LSP, CSNP, PSNP and all other non-Hello PDU types">
        <t>All PDU types that are not Hello PDUs, e.g. L1/L2 LSP PDUs, L1/L2
          CSNP/PSNP PDUs, FS-LSP, FS-CSNP and FS-PSNP PDUs are processed on
          P2MP interfaces by dispatching them to an individual pseudocircuit
          by looking up the PDU's source address in the interface's list of
          P2MP pseudocircuits.  This includes all functions defined
          in <xref target="IS-IS">Section 7 of ISO/IEC 10589:2002</xref> and
          PDUs added in <xref target="RFC7176"/> and <xref
            target="RFC7356"/>.</t>
        <t>While possible, this document does not suggest sending such PDUs to
          multicast destinations.  All systems MUST send these PDUs to unicast
          lower layer destinations so that they are received only by the
          pseudocircuit's neighbor system.  However, systems SHOULD NOT check
          the destination address on receipt to allow future optimisations.</t>
      </section>
      <section title="LAN and P2P Hellos">
        <t>Received LAN and P2P Hello PDUs MUST be discarded when received on
          an interface configured for P2MP operation.  The system MAY notify
          the operator of such a misconfiguration.</t>
        <t>TODO: hitless migration possible?</t>
      </section>
      <section title="P2MP Hello PDUs">
        <t>P2MP Hello PDUs are divided in two categories depending on the
          presence of a RFC5303 Three-way Adjacency TLV.</t>
        <section title="Without Three-way Adjacency TLV">
          <t>For each P2MP interface that has the multicast autodiscovery
            mechanism enabled, a system periodically sends P2MP Hello PDUs
            without Three-way Adjacency TLV to a lower layer specific multicast
            address.
            The periodic timer SHOULD be configurable and is subject to jitter
            per <xref target="IS-IS">Section 10.1 of ISO/IEC 10589:2002</xref>.
          </t>
          <t>On receipt, such PDUs are not processed on any pseudocircuit's PtP 
            state machine.  They are processed on pseudocircuit management
            level as described in <!-- xref target=""/ -->:
            <list style="symbols">
              <t>If no pseudocircuit matches the PDU's lower layer source
                address, one is created for that address</t>
              <t>The pseudocircuit is held in existence at least until the
                PDU's holdtime expires.</t>
            </list>
          </t>
          <t>No information other than the neighbor's SNPA is carried from the
            PDU onto the pseudocircuit, thus most TLVs that are normally valid
            in Hellos become pointless.  However, all TLVs that affect PDU
            processing (in particular authentication TLVs) are processed
            normally.</t>
          <t>On IEEE 802 lower layers that support 48bit MAC addresses, the
            AllIntermediateSystems multicast address (09-00-2B-00-00-05) is
            used as destination when sending these PDUs.</t>
        </section>
        <section title="With Three-way Adjacency TLV">
          <t>P2MP Hello PDUs with a RFC5303 Three-way Adjacency TLV are both
            processed and generated by the PtP Hello state machine (<xref
              target="IS-IS">Section 8.2 of ISO/IEC 10589:2002</xref>) of their
            associated pseudocircuit.</t>
          <t>This implies that received PDUs are dispatched by looking up their
            source SNPA address among the pseudocircuits associated with the
            receiving interface (possibly creating a pseudocircuit).</t>
          <t>For Hello PDUs sent by the pseudocircuit's PtP Hello state
            machine, the destination SNPA address is set to the pseudocircuit's
            neighbor SNPA address.</t>
          <t>TLV validity and processing is exactly as for PtP Hellos.</t>
        </section>
      </section>
    </section>

    <section anchor="encoding" title="PDU encoding">
      <t>(Note this section follows ISO 10589 section 9, particularly in
        numbering bits starting at 1 for the LSB.)</t>
      <section title="P2MP Hello PDU">
        <figure><preamble>Figure 1: P2MP Hello PDU format</preamble>
          <artwork>
 MSB                         LSB MSB                         LSB
  8   7   6   5   4   3   2   1   8   7   6   5   4   3   2   1
+---+---+---+---+---+---+---+---+ - + - + - + - + - + - + - + - +
| 0x83 (Protocol Discriminator) |
+---+---+---+---+---+---+---+---+
|       Length Indicator        |
+---+---+---+---+---+---+---+---+
|  0x01 (Version/ID Extension)  |
+---+---+---+---+---+---+---+---+
|           ID Length           |
+---+---+---+---+---+---+---+---+
| R   R   R | TBD-PDU (PDU Type)|
+---+---+---+---+---+---+---+---+
|        0x01 (Version)         |
+---+---+---+---+---+---+---+---+
| R   R   R   R   R   R   R   R |
+---+---+---+---+---+---+---+---+
|    Maximum Area Addresses     |
+---+---+---+---+---+---+---+---+
| R   R   R   R   R   R |CircTyp|
+---+---+---+---+---+---+---+---+
|           Source ID           |
:          (ID Length)          :
:                               :
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|                          Holding Time                         |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|                           PDU Length                          |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
:                   Variable Length Fields (TLVs)               :
:                                                               :
</artwork>
        </figure>
        <t>All fields function exactly as for Point-to-Point IS-IS hello PDUs,
          as specified in <xref target="IS-IS">Section 9.7 of ISO/IEC
            10589:2002</xref>.</t>
        <t>Note the Local Circuit ID field is absent.  Its function is replaced
          by <xref target="RFC5303"/>.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to allocate a value from the "IS-IS PDU Registry" as
        follows:</t>
      <t><list style="hanging">
          <t hangText="Type:">TBD-PDU</t>
          <t hangText="Description:">P2MP-HELLO-PDU</t>
          <t hangText="Reference:">This document</t>
      </list></t>
      <t>Applicability of sub-TLVs for this PDU (per "TLV Codepoints Registry")
        is per the "IIH" column.</t>
    </section>

    <section anchor="model" title="Configuration model">
      <t>TODO: YANG model.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>TODO.</t>
    </section>

    <section anchor="Privacy" title="Privacy Considerations">
      <t>TODO.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>TODO.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <reference anchor="IS-IS">
        <front>
          <!--   [IS-IS]    ISO/IEC 10589:2002, Second Edition, "", 2002. -->
          <title>Intermediate System to Intermediate System Intra-Domain
            Routing Exchange Protocol for use in Conjunction with the Protocol
            for Providing the Connectionless-mode Network Service (ISO
            8473)</title>
          <author>
            <organization>ISO/IEC</organization>
          </author>
          <date year="2002"/>
        </front>
        <seriesInfo name="ISO/IEC" value="10589:2002, Second Edition"/>
      </reference>

      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.5303"?>
    </references>

    <references title="Informative References">
      <reference anchor="X.25">
        <front>
          <title>X.25 Packet Layer Protocol for Data Terminal Equipment</title>
          <author>
            <organization>ISO/IEC</organization>
          </author>
          <date year="2000"/>
        </front>
        <seriesInfo name="ISO/IEC" value="8208:2000"/>
      </reference>
      <reference anchor="CLNS">
        <front>
          <title>Protocol for providing the connectionless-mode network
            service: Protocol specification</title>
          <author>
            <organization>ISO/IEC</organization>
          </author>
          <date year="1998"/>
        </front>
        <seriesInfo name="ISO/IEC" value="8473-1:1998"/>
      </reference>

      <?rfc include="reference.RFC.7176"?>
      <?rfc include="reference.RFC.7356"?>
    </references>
  </back>
</rfc>
<!-- vim: sw=2 ts=2 et
-->
