<?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-bonica-6man-vpn-dest-opt-06"
     ipr="trust200902">
  <front>
    <title abbrev="Per-Path Service Instruction Opt">The Per-Path Service
    Instruction (PPSI) Option</title>

    <author fullname="Ron Bonica" initials="R." surname="Bonica">
      <organization>Juniper Networks</organization>

      <address>
        <postal>
          <street>2251 Corporate Park Drive</street>

          <city>Herndon</city>

          <code>20171</code>

          <region>Virginia</region>

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

        <email>rbonica@juniper.net</email>
      </address>
    </author>

    <author fullname="Yuji Kamite" initials="Y. " surname="Kamite">
      <organization>NTT Communications Corporation</organization>

      <address>
        <postal>
          <street>3-4-1 Shibaura, Minato-ku</street>

          <city>Tokyo</city>

          <code>108-8118</code>

          <country>Japan</country>
        </postal>

        <email>: y.kamite@ntt.com</email>
      </address>
    </author>

    <author fullname="Chris Lenart" initials="C." surname="Lenart">
      <organization>Verizon</organization>

      <address>
        <postal>
          <street>22001 Loudoun County Parkway</street>

          <city>Ashburn</city>

          <region>Virginia</region>

          <code>20147</code>

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

        <email>chris.lenart@verizon.com</email>
      </address>
    </author>

    <author fullname="Ning So" initials="N." surname="So">
      <organization>Reliance Jio</organization>

      <address>
        <postal>
          <street>3010 Gaylord PKWY, Suite 150</street>

          <city>Frisco</city>

          <region>Texas</region>

          <code>75034</code>

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

        <email>Ning.So@ril.com</email>
      </address>
    </author>

    <author fullname="Fengman Xu" initials="F." surname="Xu">
      <organization>Reliance Jio</organization>

      <address>
        <postal>
          <street>3010 Gaylord PKWY, Suite 150</street>

          <city>Frisco</city>

          <region>Texas</region>

          <code>75034</code>

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

        <email>Fengman.Xu@ril.com</email>
      </address>
    </author>

    <author fullname="Greg Presbury" initials="G." surname="Presbury">
      <organization>Hughes Network Systems</organization>

      <address>
        <postal>
          <street>11717 Exploration Lane</street>

          <city>Germantown</city>

          <region>Maryland</region>

          <code>20876</code>

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

        <email>greg.presbury@hughes.com</email>
      </address>
    </author>

    <author fullname="Gang Chen" initials="G." surname="Chen">
      <organization>Baidu</organization>

      <address>
        <postal>
          <street>No.10 Xibeiwang East Road Haidian District</street>

          <city>Beijing</city>

          <code>100193</code>

          <country>P.R. China</country>
        </postal>

        <email>phdgang@gmail.com</email>
      </address>
    </author>

    <author fullname="Yongqing Zhu" initials="Y." surname="Zhu">
      <organization>China Telecom</organization>

      <address>
        <postal>
          <street>109 West Zhongshan Ave, Tianhe District</street>

          <city>Guangzhou</city>

          <country>P.R. China</country>
        </postal>

        <email>zhuyq.gd@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Guangming Yang" initials="G." surname="Yang">
      <organization>China Telecom</organization>

      <address>
        <postal>
          <street>109 West Zhongshan Ave, Tianhe District</street>

          <city>Guangzhou</city>

          <country>P.R. China</country>
        </postal>

        <email>yanggm.gd@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Yifeng Zhou" initials="Y. " surname="Zhou">
      <organization>ByteDance</organization>

      <address>
        <postal>
          <street>Building 1, AVIC Plaza, 43 N 3rd Ring W Rd Haidian
          District</street>

          <city>Beijing</city>

          <code>100000</code>

          <country>P.R. China</country>
        </postal>

        <email>yifeng.zhou@bytedance.com</email>
      </address>
    </author>

    <date day="6" month="July" year="2019"/>

    <area>INT Area</area>

    <workgroup>6man</workgroup>

    <keyword>IPv6</keyword>

    <keyword>VPN</keyword>

    <keyword>Destination Option</keyword>

    <abstract>
      <t>SRv6+ encodes Per-Path Service Instructions (PPSI) in a new IPv6
      option, called the PPSI Option. This document describes the PPSI
      Option.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="sectIntro" title="Introduction">
      <t>An <xref target="I-D.bonica-spring-srv6-plus">SRv6+ </xref> path
      provides unidirectional connectivity from its ingress node to its egress
      node. While an SRv6+ path can follow the least cost path from ingress to
      egress, it can also follow any other path.</t>

      <t>SRv6+ paths are encoded as <xref target="RFC8200">IPv6 </xref> header
      chains. When an SRv6+ ingress node receives a packet, it encapsulates
      the packet in an IPv6 header chain. It then forwards the encapsulated
      packet to the path's egress node. When the egress node receives the
      packet, it processes the SRv6+ payload (i.e., the original packet).</t>

      <t>SRv6+ paths are programmable. They support several instruction types,
      including Per-Path Service Instructions (PPSI). PPSIs determine how path
      egress nodes process SRv6+ payloads. In the absence of a PPSI, the
      egress node processes SRv6+ payloads as described in <xref
      target="RFC8200"/>.</t>

      <t>The following are examples of PPSIs:</t>

      <t><list style="symbols">
          <t>Remove any SRv6+ encapsulation and forward the SRv6+ payload
          through a specified interface.</t>

          <t>Remove any SRv6+ encapsulation and forward the SRv6+ payload
          using a specified routing table.</t>
        </list></t>

      <t>SRv6+ encodes PPSIs in a new IPv6 option, called the PPSI Option.
      This document describes the PPSI Option.</t>

      <t>PPSIs can be used to support Virtual Private Networks (VPN).
      Therefore, <xref target="AppendixVPN"/> of this document describes VPN
      technology and how PPSIs can be used to support a VPN.</t>
    </section>

    <section anchor="ReqLang" 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 <xref
      target="RFC2119">BCP 14</xref> <xref target="RFC8174"/> when, and only
      when, they appear in all capitals, as shown here.</t>
    </section>

    <section title="PPSI Identifiers">
      <t>PPSI Identifiers identify PPSIs. When a path egress node instantiates
      a PPSI, it also allocates a PPSI Identifier and associates the PPSI with
      the identifier.</t>

      <t>PPSI Identifiers have node-local significance. This means that a path
      egress node must assign a unique PPSI Identifier to each PPSI that it
      instantiates. However, one path egress node can assign a PPSI Identifier
      to an instruction that it instantiates, while another path egress node
      can assign the same PPSI Identifier to a different PPSI that it
      instantiates.</t>
    </section>

    <section anchor="VPNContextOption" title="The PPSI Option">
      <t>The PPSI Option contains the following fields:</t>

      <t><list style="symbols">
          <t>Option Type: 8-bit selector. PPSI option. Value TBD by IANA.
          (Suggested value: 144). See Note below.</t>

          <t>Opt Data Len - 8-bit unsigned integer. Length of the option, in
          octets, excluding the Option Type and Option Length fields. This
          field MUST be set to 4.</t>

          <t>PPSI identifier - (32-bit selector). Identifies a PPSI.</t>
        </list></t>

      <t>The SRv6+ PPSI option MAY appear in a Destination Options header that
      precedes an upper-layer header. It MUST NOT appear in a Hop-by-hop
      Options header or in a Destination Options header that precedes a
      Routing header.</t>

      <t>When the SRv6+ PPSI option appears in a Destination Options header,
      it MUST be the only option listed in the header. This is because the
      PPSI defines all path egress node behaviors.</t>

      <t>NOTE : The highest-order two bits of the Option Type (i.e., the "act"
      bits) are 10. These bits specify the action taken by a destination node
      that does not recognize the option. The required action is to discard
      the packet and, regardless of whether or not the packet's Destination
      Address was a multicast address, send an <xref
      target="RFC4443">ICMPv6</xref> Parameter Problem, Code 2, message to the
      packet's Source Address, pointing to the unrecognized Option Type.</t>

      <t>The third highest-order bit of the Option Type (i.e., the "chg" bit)
      is 0. This indicates that Option Data cannot be modified along the path
      between the packet's source and its destination.</t>
    </section>

    <section title="Destination Option Header Considerations">
      <t>As per <xref target="RFC8200"/>, the Destination Options header
      includes a Next Header field. The Next Header field identifies the
      header following the Destination Options header.</t>

      <t>SRv6+ can carry Ethernet payload after a Destination option header.
      Therefore, this document requests IANA to assign a protocol number for
      Ethernet. (The suggested value is 143.)</t>
    </section>

    <section title="Security Considerations">
      <t>SRv6+ domains MUST NOT span security domains. In order to enforce
      this requirement, security domain edge routers MUST do one of the
      following:</t>

      <t><list style="symbols">
          <t>Discard all inbound SRv6+ packets</t>

          <t><xref target="RFC4302">Authenticate </xref> <xref
          target="RFC4303"/> all inbound SRv6+ packets</t>
        </list></t>
    </section>

    <section title="IANA Considerations">
      <t>IANA is requested to allocate a code point from the Destination
      Options and Hop-by-hop Options registry
      (https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2).
      This option is called "Per-Path Service Instruction Option". The "act"
      bits are 10 and the "chg" bit is 0. The suggested value is 144.</t>

      <t>IANA is also requested to allocate a code point for Ethernet from the
      Assigned Internet Protocol Numbers registry
      (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml).
      The suggested value is 143.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Thanks to Brian Carpenter, Adrian Farrel, Tom Herbert, John Leddy and
      Tony Li for their comments.</t>
    </section>
  </middle>

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

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

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

      <?rfc include='reference.RFC.0791"?>

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

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

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

      <?rfc include='reference.I-D.bonica-spring-srv6-plus'?>
    </references>

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

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

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

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

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

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

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

      <?rfc ?>

      <?rfc ?>

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

      <?rfc ?>

      <?rfc ?>

      <?rfc ?>
    </references>

    <section anchor="AppendixVPN" title="Virtual Private Networks (VPN)">
      <t/>

      <t>Virtual Private Network (VPN) technologies allow network providers to
      emulate private networks with shared infrastructure. For example, assume
      that red sites and blue sites connect to a provider network. The
      provider network facilitates communication among red sites and
      facilitates communication among blue sites. However, it prevents
      communication between red sites and blue sites.</t>

      <t>The IETF has standardized many VPN technologies, including:</t>

      <t><list style="symbols">
          <t><xref target="RFC6624">Layer 2 VPN (L2VPN)</xref>.</t>

          <t><xref target="RFC4364">Layer 3 VPN (L3VPN) </xref>.</t>

          <t><xref target="RFC4761">Virtual Private LAN Service (VPLS)
          </xref><xref target="RFC4762"/>.</t>

          <t><xref target="RFC7432">Ethernet VPN (EVPN) </xref>.</t>

          <t><xref target="RFC8077">Pseudowires </xref>.</t>
        </list>The above-mentioned technologies include the following
      components:</t>

      <t><list style="symbols">
          <t>Customer Edge (CE) devices.</t>

          <t>Provider Edge (PE) devices.</t>

          <t>Routing Instances.</t>

          <t>Service Instructions.</t>

          <t>Service Instruction Identifiers.</t>

          <t>Transport tunnels.</t>
        </list></t>

      <t>CE devices participate in closed communities called VPNs. CEs that
      participate in one VPN can communicate with one another but cannot
      communicate with CEs that participate in another VPN.</t>

      <t>CE devices connect to provider networks through PE devices. Each PE
      maintains one Routing Instance for each VPN that it supports. A Routing
      Instance is a VPN specific Forwarding Information Base (FIB). In EVPN,
      Routing Instances are called Ethernet Virtual Instances (EVI).</t>

      <t>Assume that one CE sends a packet through a provider network to
      another CE. The packet enters the provider network through an ingress PE
      and leaves the provider network through an egress PE. The packet may
      traverse one or more intermediate nodes on route from PE to PE.</t>

      <t>When the ingress PE receives the packet, it:</t>

      <t><list style="symbols">
          <t>Identifies the Routing Instance that supports the originating
          CE's VPN.</t>

          <t>Searches that Routing Instance for the packet's destination.</t>
        </list></t>

      <t>If the search fails, the ingress PE discards the packet. If the
      search succeeds, it yields the following:</t>

      <t><list style="symbols">
          <t>A Service Instruction Identifier.</t>

          <t>The egress PE's IP address.</t>
        </list>The ingress PE prepends the Service Instruction Identifier and
      a transport header to the packet, in that order. It then forwards the
      packet through a transport tunnel to the egress PE.</t>

      <t>The egress PE removes the transport header, if it has not already
      been removed by an upstream device. It then examines and removes the
      Service Instruction Identifier. Finally, it executes a service
      instruction that is associated with the Service Instruction Identifier.
      The service instruction causes the egress PE to forward the packet to
      its destination (i.e., a directly connected CE).</t>

      <t>In the above-mentioned VPN technologies, the ingress PE encodes
      Service Instruction Identifiers in <xref target="RFC3031">Multiprotocol
      Label Switching (MPLS)</xref> labels. Depending upon the transport
      tunnel type, the transport header can be:</t>

      <t><list style="symbols">
          <t>A MPLS label or label stack.</t>

          <t>An <xref target="RFC0791">IPv4</xref> header.</t>

          <t>An <xref target="RFC8200">IPv6 </xref> header.</t>

          <t>A <xref target="RFC2784">Generic Routing Encapsulation (GRE)
          </xref> header encapsulated in IPv4 or IPv6.</t>
        </list></t>

      <t>Some PE devices cannot process MPLS headers. While these devices have
      several alternatives to MPLS-based transport tunnels, they require an
      alternative to MPLS-based encoding of Service Instruction Identifiers.
      The PPSI Option can be used to encode Service Instruction Identifiers .
      It is applicable when VPN payload is transported over IPv6.</t>
    </section>
  </back>
</rfc>
