<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<rfc category="std" docName="draft-dawra-idr-srv6-vpn-00.txt"
     ipr="trust200902">
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

  <?rfc toc="yes" ?>

  <?rfc symrefs="yes" ?>

  <?rfc sortrefs="yes" ?>

  <?rfc iprnotified="no" ?>

  <?rfc strict="yes" ?>

  <?rfc compact="yes" ?>

  <?rfc subcompact="no" ?>

  <front>
    <title abbrev="BGP Signalling of IPv6-SR VPN Networks">BGP Signaling of
    IPv6-Segment-Routing-based VPN Networks</title>

    <author/>

    <author fullname="Gaurav Dawra" initials="G" role="editor" surname="Dawra">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

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

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

    <author fullname="Clarence Filsfils" initials="C" surname="Filsfils">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <country>Belgium</country>
        </postal>

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

    <author fullname="Darren Dukes" initials="D" surname="Dukes">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <country>Canada</country>
        </postal>

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

    <author fullname="Patrice Brissette" initials="P" surname="Brissette">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <country>Canada</country>
        </postal>

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

    <author fullname="Pablo Camarilo" initials="P" surname="Camarilo">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <country>Spain</country>
        </postal>

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

    <author fullname="Jonn Leddy" initials="J" surname="Leddy">
      <organization>Comcast</organization>

      <address>
        <postal>
          <street/>

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

        <email>john_leddy@cable.comcast.com</email>
      </address>
    </author>

    <author fullname="Daniel Voyer" initials="D" surname="Voyer">
      <organization>Bell Canada</organization>

      <address>
        <postal>
          <street/>

          <country>Canada</country>
        </postal>

        <email>daniel.voyer@bell.ca</email>
      </address>
    </author>

    <author fullname="Daniel Bernier" initials="D" surname="Bernier">
      <organization>Bell Canada</organization>

      <address>
        <postal>
          <street/>

          <country>Canada</country>
        </postal>

        <email>daniel.bernier@bell.ca</email>
      </address>
    </author>

    <author fullname="Dirk Steinberg" initials="D" surname="Steinberg">
      <organization>Steinberg Consulting</organization>

      <address>
        <postal>
          <street/>

          <country>Germany</country>
        </postal>

        <email>dws@steinberg.net</email>
      </address>
    </author>

    <author fullname="Robert Raszuk" initials="R" surname="Raszuk">
      <organization>Bloomberg LP</organization>

      <address>
        <postal>
          <street/>

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

        <email>robert@raszuk.net</email>
      </address>
    </author>

    <author fullname="Bruno Decraene" initials="B" surname="Decraene">
      <organization>Orange</organization>

      <address>
        <postal>
          <street/>

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

        <email>bruno.decraene@orange.com</email>
      </address>
    </author>

    <author fullname="Satoru Matsushima" initials="S" surname="Matsushima">
      <organization>SoftBank</organization>

      <address>
        <postal>
          <street/>

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

        <email>satoru.matsushima@g.softbank.co.jp</email>
      </address>
    </author>

    <date year="2017"/>

    <area>General</area>

    <workgroup>Inter-Domain Routing</workgroup>

    <keyword>BRP SRv6 VPN</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>This draft defines procedures and messages for BGP SRv6-based EVPNs
      and L3 VPNs. It builds on RFC7432 “BGP MPLS-Based Ethernet VPN” and
      RFC4364 “BGP/MPLS IP Virtual Private Networks (VPNs)” to provide a
      migration path from MPLS-based VPNs to SRv6 based VPNs.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>SRv6 refers to Segment Routing instantiated on the IPv6 dataplane
      <xref target="I-D.filsfils-spring-srv6-network-programming"/><xref
      target="I-D.ietf-6man-segment-routing-header"/>.</t>

      <t>SRv6-based VPN (SRv6-VPN) refers to the creation of VPN between PE’s
      leveraging the SRv6 dataplane and more specifically the END.DT*
      (crossconnect to a VRF) and END.DX* (crossconnect to a nexthop)
      functions defined in the SRv6 network programming document <xref
      target="I-D.filsfils-spring-srv6-network-programming"/>. SRv6-L3VPN
      refers to the creation of Layer3 VPN service between PE’s supporting an
      SRv6 data plane.</t>

      <t>SRv6 SID refers to a SRv6 Segment Identifier as defined in <xref
      target="I-D.filsfils-spring-srv6-network-programming"/>.</t>

      <t>SRv6-VPN SID refers to an SRv6 SID that MAY be associated with one of
      the END.DT or END.DX functions as defined in <xref
      target="I-D.filsfils-spring-srv6-network-programming"/>.</t>

      <t>To provide SRv6-VPN service with best-effort connectivity, the egress
      PE signals an SRv6-VPN SID with the VPN route. The ingress PE
      encapsulates the VPN packet in an outer IPv6 header where the
      destination address is the SRv6-VPN SID provided by the egress PE. The
      underlay between the PE’s only need to support plain IPv6 forwarding
      <xref target="RFC2460"/>.</t>

      <t>To provide SRv6-VPN service in conjunction with an underlay SLA from
      the ingress PE to the egress PE, the egress PE colors the VPN route with
      a color extended community. The ingress PE encapsulates the VPN packet
      in an outer IPv6 header with an SRH that contains the SR policy
      associated with the related SLA followed by the SRv6-VPN SID associated
      with the route. The underlay nodes whose SRv6 SID’s are part of the SRH
      must support SRv6 data plane.</t>

      <t>BGP is used to advertise the reachability of prefixes in a particular
      VPN from an egress Provider Edge (egress-PE) to ingress Provider Edge
      (ingress-PE) nodes.</t>

      <t>This document describes how existing BGP messages between PEs may
      carry SRv6 Segment IDs (SIDs) as the means to interconnect PEs and form
      VPNs.</t>
    </section>

    <section 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"/>.</t>
    </section>

    <section title="BGP for SRv6-L3VPN">
      <t>BGP egress nodes (egress-PEs) advertise a set of reachable prefixes.
      Standard BGP update propagation schemes <xref target="RFC4271"/>, which
      MAY make use of route reflectors <xref target="RFC4456"/>, are used to
      propagate these prefixes. BGP ingress nodes (ingress-PE) receive these
      advertisements and may add the prefix to the RIB in an appropriate
      VRF.</t>

      <t>For PEs supporting SRv6 the egress-PE advertises an SRv6-VPN SID with
      VPN routes. This SRv6-VPN SID only has local significance at the
      egress-PE where it is allocated or configured on a per-CE or per-VRF
      basis. In practice the SID encodes a cross-connect to a specific Address
      Family table (END.DT) or next-hop/interface (END.DX) as defined in the
      SRv6 Network Programming Document <xref
      target="I-D.filsfils-spring-srv6-network-programming"/></t>

      <t>The SRv6 VPN SID MAY be routable within the AS of the egress-PE and
      serves the dual purpose of providing reachability between ingress-PE and
      egress-PE while also encoding the VPN identifier.</t>

      <t>For each NLRI, the egress-PE includes a new optional, transitive BGP
      SRv6-VPN SID Path TLV as part of the BGP Prefix-SID Attribute<xref
      target="I-D.ietf-idr-bgp-prefix-sid"/>. It contains a list of SIDs, for
      L3VPN only a single SRv6-VPN SID is necessary. See Section 3.1 below for
      details on the SRv6-VPN SID TLV.</t>

      <t>At an ingress-PE, BGP installs the advertised prefix in the correct
      RIB table, recursive via an SR Policy leveraging the received SRv6-VPN
      SID.</t>

      <t>Assuming best-effort connectivity to the egress PE, the SR policy has
      a single path with a single SID list made of a single SID: the SRv6-VPN
      SID received with the related route.</t>

      <t>When the VPN route is colored with an extended color community C and
      the SID is next-hop N and the ingress PE has a valid SRv6 Policy (N, C)
      associated with SID list &lt;S1,S2, S3&gt; <xref
      target="I-D.filsfils-spring-segment-routing-policy"/> then the SR Policy
      is &lt;S1, S2, S3, SRv6-VPN SID&gt;.</t>

      <t>Multiple VPN routes MAY recurse on the same SR Policy.</t>

      <section anchor="SIDTLV" title="SRv6-VPN SID TLV ">
        <t>The SRv6-VPN SID TLV is defined as another TLV for BGP-Prefix-SID
        Attribute <xref target="I-D.ietf-idr-bgp-prefix-sid"/>. The value
        field of the BGP Prefix SID attribute is defined here to be a set of
        elements encoded as "Type/Length/Value" (i.e., a set of TLVs). Type
        for SRv6-VPN SID TLV is defined to be TBD.</t>

        <t>The IPv6-SID TLV MUST be present in the Prefix-SID attribute
        attached to MP-BGP VPN NLRI defined in <xref target="RFC4659"/><xref
        target="RFC5549"/><xref target="RFC7432"/> when egress-PE is capable
        of SRv6 data-plane.</t>

        <figure>
          <artwork>    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Type    |             Length            |   RESERVED    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  SRv6 SID information(Variable)                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

SRv6 SID information is encoded as follows:

               +---------------------------------------+
               |  SID Type (1 Octet)                   |
               +---------------------------------------+
               |  SRv6 SID (16 octet)                  |
               +---------------------------------------+
</artwork>
        </figure>

        <t>Where: <list style="symbols">
            <t>Type is TBD</t>

            <t>Length: 16bit field. The total length of the value portion of
            the TLV.</t>

            <t>RESERVED: 8 bit field. SHOULD be 0 on transmission and MUST be
            ignored on reception.</t>
          </list></t>

        <t>Current Type of SID defined as: <list style="symbols">
            <t>Type-1 - corresponds to the equivalent functionality provided
            by an VPN MPLS Label attribute when received with a route
            containing a MPLS label<xref target="RFC4364"/>.</t>
          </list></t>
      </section>

      <section title="IPv4 VPN Over SRv6 Core">
        <t>IPv4 VPN Over IPv6 Core is defined in <xref target="RFC5549"/>, the
        MP_REACH_NLRI is encoded as follows for an SRv6 Core: <list
            style="symbols">
            <t>AFI = 1</t>

            <t>SAFI = 128</t>

            <t>Length of Next Hop Network Address = 16 (or 32)</t>

            <t>Network Address of Next Hop = IPv6 address of the egress PE</t>

            <t>NLRI = IPv4-VPN routes</t>

            <t>Label = Implicit-Null</t>
          </list></t>

        <t>SRv6-VPN SID are encoded as part of the SRv6-VPN SID TLV defined in
        <xref target="SIDTLV"/>. The function of the SRv6 SID is entirely up
        to the originator of the advertisement. In practice the function would
        likely be End.DX4 or End.DT4.</t>
      </section>

      <section title="IPv6 VPN Over SRv6 Core ">
        <t>IPv6 VPN over IPv6 Core is defined in <xref target="RFC4659"/>, the
        MP_REACH_NLRI is enclosed as follows for an SRv6 Core: <list
            style="symbols">
            <t>AFI = 2</t>

            <t>SAFI = 128</t>

            <t>Length of Next Hop Network Address = 16 (or 32)</t>

            <t>Network Address of Next Hop = IPv6 address of the egress PE</t>

            <t>NLRI = IPv6-VPN routes</t>

            <t>Label = Implicit-Null</t>
          </list></t>

        <t>SRv6-VPN SID are encoded as part of the SRv6-VPN SID TLV defined in
        <xref target="SIDTLV"/>. The function of the IPv6 SRv6 SID is entirely
        up to the originator of the advertisement. In practice the function
        would likely be End.DX6 or End.DT6.</t>
      </section>
    </section>

    <section title="Migration from L3 MPLS based Segment Routing to SRv6 Segment Routing ">
      <t>Migration from IPv4 MPLS based underlay to an SRv6 underlay with BGP
      speakers is achieved with BGP sessions per BGP instance, one for IPv4
      and a one for IPv6. Migration from IPv4 to IPv6 is independent of SRv6
      BGP endpoints, and the selection of which route to use (received via the
      IPv4 or IPv6 session) is a local configurable decision of the
      ingress-PE, and is outside the scope of this document.</t>

      <t>Migration from IPv6 MPLS based underlay to an SRv6 underlay with BGP
      speakers is achieved with a few simple rules at each BGP speaker.
      <figure>
          <artwork>At Egress-PE
  If BGP offers an SRv6-VPN service
      Then BGP allocates an SRv6-VPN SID for the VPN service 
      and adds the BGP SRv6-VPN SID TLV while advertising VPN prefixes.
  If BGP offers an MPLS VPN service
      Then BGP allocates an MPLS Label for the VPN service and 
      use it in NLRI as normal for MPLS L3 VPNs.

At Ingress-PE
  *Selection of which encapsulation below (SRv6-VPN or MPLS-VPN) is
   defined by local BGP policy
  If BGP supports SRv6-VPN service, and
  receives a BGP SRv6-VPN SID Attribute with an SRv6 SID
      Then BGP programs the destination prefix in RIB recursive via
      the related SR Policy.
  If BGP supports MPLS VPN service, and
  the MPLS Label is not Implicit-Null
      Then the MPLS label is used as a VPN label and inserted with the
      prefix into RIB via the BGP Nexthop.

  </artwork>
        </figure></t>
    </section>

    <section title="EVPN and SRv6">
      <t>The EVPN SRv6 solution is actively under definition and will be added
      in a later revision.</t>
    </section>

    <section title="Error Handling of BGP SRv6 SID Updates">
      <t>When a BGP Speaker receives a BGP Update message containing a
      malformed SRv6-VPN SID TLV, it MUST ignore the received BGP attributes
      and not pass it to other BGP peers. This is equivalent to the -attribute
      discard- action specified in <xref target="RFC7606"/>. When discarding
      an attribute, a BGP speaker MAY log an error for further analysis.</t>
    </section>

    <section title="IANA Considerations">
      <t>This memo includes no request to IANA.</t>
    </section>

    <section title="Security Considerations">
      <t>This document introduces no new security considerations beyond those
      already specified in <xref target="RFC4271"/> and <xref
      target="RFC3107"/>.</t>
    </section>

    <section title="Conclusions">
      <t>This document proposes extensions to the BGP to allow advertising
      certain attributes and functionalities related to SRv6.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.I-D.filsfils-spring-srv6-network-programming.xml'?>

      <?rfc include='reference.I-D.ietf-6man-segment-routing-header.xml'?>

      <?rfc include='reference.I-D.filsfils-spring-segment-routing-policy.xml'?>

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

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

      <?rfc include='reference.RFC.2460.xml'?>

      <?rfc include='reference.RFC.7606.xml'?>

      <?rfc include='reference.RFC.4456.xml'?>

      <?rfc include='reference.RFC.3107.xml'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.ietf-idr-bgp-prefix-sid.xml'?>

      <?rfc include='reference.I-D.ietf-spring-segment-routing.xml'?>

      <?rfc include='reference.I-D.ietf-isis-segment-routing-extensions.xml' ?>

      <?rfc include='reference.RFC.5549.xml'?>

      <?rfc include='reference.RFC.4271.xml'?>

      <?rfc include='reference.RFC.2119.xml'?>

      <?rfc include='reference.RFC.4659.xml'?>
    </references>

    <section title="Contributors">
      <figure>
        <artwork>Bart Peirens
Proximus
Belgium

Email: bart.peirens@proximus.com</artwork>
      </figure>
    </section>
  </back>
</rfc>
