<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8279 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8279.xml">
<!ENTITY RFC8296 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8296.xml">
<!ENTITY RFC7432 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7432.xml">
<!ENTITY RFC7024 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7024.xml">
<!ENTITY RFC6513 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6513.xml">
<!ENTITY RFC6514 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6514.xml">
<!ENTITY RFC8401 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8401.xml">
<!ENTITY RFC8444 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8444.xml">
<!ENTITY RFC3032 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3032.xml">
<!ENTITY RFC8556 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8556.xml">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc strict="no"?>
<?rfc rfcedstyle="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-bier-php-11" ipr="trust200902">
  <front>
    <title abbrev="bier-php">BIER Penultimate Hop Popping</title>

    <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
      <organization>Juniper Networks</organization>
      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>

    <workgroup>BIER</workgroup>

    <abstract>
      <t>Bit Index Explicit Replication (BIER) can be used as provider
         tunnel for Multicast Virtual Private Network (MVPN),
         Global Table Multicast or Ethernet Virtual Private Network
         (EVPN). It is possible that not all routers in the provider
         network support BIER and there are various methods to handle BIER-incapable transit routers. However those methods assume the MVPN/EVPN
         Provider Edges (PEs) are BIER-capable. This document
         specifies a method to allow BIER-incapable routers to act as MVPN/EVPN
         PEs with BIER as the transport, by having the upstream BIER Forwarding
         Router (BFR) that is connected directly or indirectly via a tunnel to
         a BIER-incapable PE remove the BIER header and send the payload to the
         PE.
      </t>
    </abstract>

    <note title="Requirements Language">
    <t>
          The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
          NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
          "MAY", and "OPTIONAL" 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>
    </note>
  </front>

  <middle>
    <!--section title="Terminologies">
    <t>Familiarity with BIER/MVPN/EVPN protocols and procedures is assumed.
       Some terminologies are listed below for convenience.
    </t>
    <t>[To be added].
    </t>
    </section-->
    <section title="Introduction">
    <t>The BIER architecture includes three layers: the "routing underlay",
       the "BIER layer", and the "multicast flow overlay". The multicast
       flow overlay is responsible for the BIER Forwarding Egress Routers
       (BFERs) to signal to BIER Forwarding Ingress Routers (BFIRs) that
       they are interested in receiving certain multicast flows so that BFIRs
       can encode the correct bitstring for BIER forwarding by the BIER layer.
    </t>
    <t>MVPN <xref target="RFC6513"/> <xref target="RFC6514"/> and EVPN
	   <xref target="RFC7432"/> are two similar overlays where BGP Auto-Discovery routes
       for MVPN/EVPN are exchanged among all PEs to signal which PEs need to
       receive multicast traffic for all or certain flows. Typically the same
       provider tunnel type is used for traffic to reach all receiving PEs.
    </t>
    <t>Consider an MVPN/EVPN deployment where enough provider routers are
       BIER-capable for BIER to become the preferred choice of
       provider tunnel <xref target="RFC8556"/>
	   <xref target="I-D.ietf-bier-evpn"/>. However, some PEs cannot be upgraded to support BIER
       forwarding. While there are ways to allow an ingress PE to send traffic
       to some PEs with one type of tunnel and send traffic to some other PEs
       with a different type of tunnel, the procedure becomes complicated and
       forwarding is not optimized.
    </t>
    <t>One way to solve this problem is to use Penultimate Hop Popping (PHP)
       so that the upstream BFR can pop the BIER header <xref target="RFC8296"/> and send the payload
       "natively" (note that the upstream BFR can be connected directly or
       indirectly via any type of tunnel to the PE). This is similar to
       Multi-Protocol Label Switching (MPLS) PHP though it is the BIER header
       that is popped.
    </t>
    <t>The transition of an existing MVPN/EVPN deployment with traditional
       provider tunnels to using BIER with some PEs not capable of receiving
       BIER packets can be incremental. All PEs are first upgraded to support
       BIER at least in the control plane, with those not capable of BIER
       forwarding requesting PHP. Then BIER-capable ingress PEs independently
       and incrementally switch to BIER transport.
    </t>
    <t>While the above text uses MVPN/EVPN as example, BIER PHP is applicable
       to any scenario where the multicast flow overlay edge router does not
       support BIER, as long as the edge router does not need to know the
       transmitting BFIR or participate in BIER OAM procedures.
    </t>
    <t>This works well if a BIER-incapable PE only needs to receive multicast
       traffic. If it needs to send multicast traffic as well, then it must
       Ingress Replicate to a BIER-capable helper PE, who will in turn relay
       the packet to other PEs. The helper PE is either a Virtual Hub as
       specified in [RFC7024] for MVPN and <xref target="I-D.ietf-bess-evpn-virtual-hub"/>
       for EVPN, or an AR-Replicator as specified in
       <xref target="I-D.ietf-bess-evpn-optimized-ir"/> for EVPN.
    </t>
    </section>
    <section title = "Specifications" anchor="spec">
      <t>The BIER Penultimate Hop Popping is intended only for the scenario
	  where a multicast flow overlay router for a BIER domain does not support
	  BIER forwarding, either entirely or just for some particular
	  BitStringLengths (BSL). In the latter case, PHP is only for BIER packets with
	  those BSL. The flow overlay router would be a BFER if it did
	  support BIER forwarding, and PHP would not be done by its penultimate hop.
	  </t>
    <t>The procedures in this section apply only if, by means outside
    the scope of this document, it is known that all potential penultimate
	hop BFRs support PHP (i.e., able to pop the BIER header when sending
	to a requesting flow overlay router) , and that the payload after BIER
       header is one of the following:
    <list style="symbols">
    <t>MPLS packets with downstream-assigned
       label at top of stack (i.e., the Proto field in the BIER header is 1).
       For example, a label from a Domain-wide Common Block (DCB) is used
       as specified in <xref target="I-D.ietf-bess-mvpn-evpn-aggregation-label"/>.
    </t>
    <t>IPv4/IPv6 multicast packets for which Reverse Path Forwarding check
       is disabled.
    </t>
    </list>
    </t>
	<section title="Signaling">
	<t>With IS-IS signaling, a sub-TLV in another sub-TLV is called sub-sub-TLV
	(and more sub-levels are possible like sub-sub-sub-TLV). With other
	signaling protocols, a sub-TLV in another sub-TLV is still called sub-TLV.
	For convenience, in this document we use sub-TLV even when it is sub-sub-TLV
	in IS-IS, as there is no ambiguity with the name itself (e.g. MPLS Encapsulation).
	</t>
    <t>A BIER-incapable router, if acting as a multicast flow overlay router for BIER,
       MUST signal its BIER information as specified in [RFC8401], [RFC8444],
	   <xref target="I-D.ietf-bier-ospfv3-extensions"/>, or
       <xref target="I-D.ietf-bier-idr-extensions"/>
	   with a PHP sub-TLV included in the
	   BIER sub-TLV (or TLV in case of BGP) attached to the BIER-incapable
	   router's BFR-prefix to request BIER PHP from other BFRs.
	   The type of the sub-TLV or sub-TLV is TBD, and the length is 0.
    </t>
    <t>With MPLS encapsulation, the BIER-incapable multicast flow overlay router
       MAY omit the BIER MPLS Encapsulation sub-LV, or MUST set the Label
       field in BIER MPLS Encapsulation sub-TLV to
       Implicit Null Label [RFC3032].
    </t>
    <t>With MPLS encapsulation, if a BFER (that does support BIER but)
	does not support a certain BSL, it MAY advertise
	a corresponding	BIER MPLS Encapsulation
       sub-TLV with the Label field to Implicit Null Label to request
	   PHP for that BSL. It MUST NOT include the PHP sub-TLV in this case.
    </t>
    <t>With non-MPLS encapsulation
	<xref target="I-D.ietf-bier-lsr-non-mpls-extensions"/>,
	the BIER-incapable multicast flow overlay router
    MAY omit the BIER non-MPLS Encapsulation sub-TLV, or MUST set the
	BIFT-id field in the BIER non-MPLS Encapsulation sub-TLV to 0.
    </t>
    <t>With non-MPLS encapsulation, if a BFER (that does support BIER but)
	does not support certain BSL,
       it MAY advertise a corresponding BIER non-MPLS Encapsulation
       sub-TLV but set the BIFT-id field to 0 to request
	   PHP for that BSL. It MUST NOT include the PHP sub-TLV in this case.
    </t>
	</section>
	<section title="BIRT/BIFT Calculation">
    <t>If a BFR follows section 6.9 of [RFC8279] to handle BIER-incapable
    routers, it MUST treat a router as BIER-incapable for a BSL if the label
    in the corresponding MPLS Encapsulation sub-TLV advertised by the router
	is Implicit Null, or if the BIFT-id in the corresponding non-MPLS
	Encapsulation sub-TLV is 0. It MUST treat the router as BIER-incapable
	for all BSLs if the router advertises a PHP sub-TLV. That way,
	the router will not used as a transit BFR for certain or for all BSLs.
    </t>
    <t>If the downstream neighbor (either resulting in IGP calculation or
	carried in the BIER Nexthop sub-TLV in case of BGP) for a BFR-prefix
	is the one advertising the
       prefix with a PHP sub-TLV or with an Implicit Null Label
       in its BIER MPLS Encapsulation sub-TLV, or with BIFT-id 0 in its BIER
	   non-MPLS Encapsulation sub-TLV, then when the corresponding BIRT
       or BIFT entry is created/updated, the forwarding behavior MUST be that the
       BIER header is removed and the payload be sent to the downstream router
       without the BIER header, either directly or over any type of tunnel.
    </t>
	</section>
	</section>

    <section title="Security Considerations">
    <t>This specification does not introduce additional security concerns
       beyond those already discussed in BIER architecture and OSPF/IS-IS/BGP
       extensions for BIER signaling.
    </t>
    </section>

    <section title="IANA Considerations">
    <t>This document requests a new sub-sub-TLV type value from the
       "Sub-sub-TLVs for BIER Info Sub-TLV" registry within
       the "IS-IS TLV Codepoints" registry:
      <figure>
        <artwork>
     Type    Name
     ----    ----
     TBD     BIER PHP Request
        </artwork>
    </figure>
    </t>
    <t>This document requests a new sub-TLV type value from the
       OSPFv2 Extended Prefix TLV Sub-TLV registry:
      <figure>
        <artwork>
     Type    Name
     ----    ----
     TBD     BIER PHP Request
        </artwork>
    </figure>
    </t>
    <t>This document requests a new sub-TLV type value from the
       OSPFv3 Extended LSA Sub-TLVs registry:
      <figure>
        <artwork>
     Type    Name
     ----    ----
     TBD     BIER PHP Request
        </artwork>
    </figure>
    </t>
    <t>This document requests a new sub-TLV type value from the
       BGP BIER TLV sub-TLV Types registry requested in
       <xref target="I-D.ietf-bier-idr-extensions"/>:
      <figure>
        <artwork>
     Type    Name
     ----    ----
     TBD     BIER PHP Request
        </artwork>
    </figure>
    </t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
    <t>The author wants to thank Eric Rosen and Antonie Przygienda for
       their review, comments and suggestions. The author also wants to thank
       Senthil Dhanaraj for his suggestion of requesting PHP if a BFER
       does not support certain BSL.
    </t>
    </section>
   </middle>

  <back>
    <references title="Normative References">
	  &RFC2119;
	  &RFC8174;
	  &RFC8279;
	  &RFC8296;
	  &RFC8401;
	  &RFC8444;
	  &RFC3032;
	  &RFC8556;
      <?rfc include='reference.I-D.ietf-bier-idr-extensions'?>
      <?rfc include='reference.I-D.ietf-bier-lsr-non-mpls-extensions'?>
      <?rfc include='reference.I-D.ietf-bier-ospfv3-extensions'?>
      <?rfc include='reference.I-D.ietf-bess-mvpn-evpn-aggregation-label'?>
      <?rfc include='reference.I-D.ietf-bier-evpn'?>
    </references>
    <references title="Informative References">
      &RFC7432;
      &RFC7024;
      &RFC6513;
      &RFC6514;
      <?rfc include='reference.I-D.ietf-bess-evpn-virtual-hub'?>
      <?rfc include='reference.I-D.ietf-bess-evpn-optimized-ir'?>
    </references>

  </back>
</rfc>

