<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc comments="yes"?>
<?rfc compact="yes"?>
<?rfc inline="yes"?>
<?rfc sortrefs="yes"?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc tocompact="yes"?>

<rfc category="std" docName="draft-ietf-idr-legacy-rtc-09" 
ipr="pre5378Trust200902"> <front>
  <title abbrev="Legacy PE RT Filtering">
    Automatic Route Target Filtering for legacy PEs </title>

  <author fullname="Pradosh Mohapatra" initials="P.M."
            surname="Mohapatra">
      <organization>Sproute Networks</organization>
        <address>
        <email>mpradosh@yahoo.com</email>
         </address>
  </author>

  <author fullname="Arjun Sreekantiah" initials="A.S."
            surname="Sreekantiah">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 W. Tasman Drive</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>asreekan@cisco.com</email>
      </address>
  </author>

  <author fullname="Keyur Patel" initials="K.P."
            surname="Patel">
      <organization>Arrcus Inc</organization>
      <address>
        <postal>
          <street>2077 Gateway Pl</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95110</code>
          <country>USA</country>
	</postal>
        <email>keyur@arrcus.com</email>
      </address>
  </author>

  <author fullname="Burjiz Pithawala" initials="B.P."
            surname="Pithawala">
      <organization></organization>
      <address>
        <email>burjizp@gmail.com</email>
      </address>
  </author>

  <author fullname="Alton Lo" initials="A.L."
            surname="Lo">
      <organization>Arista Networks</organization>
      <address>
        <postal>
          <street>5470 Great America Parkway</street>
          <city>Santa Clara</city>
          <region>CA</region>
          <code>95054</code>
          <country>USA</country>
        </postal>
        <email>altonlo@aristanetworks.com</email>
      </address>
  </author>

<date/>
  <abstract>
   <t>This document describes a  simple procedure that allows "legacy"
    BGP speakers  to exchange  route target membership  information in
    BGP        without        using        mechanisms        specified
    in <xref target="RFC4684"></xref>.   The intention of the proposed
    technique is  to help in  partial deployment scenarios and  is not
    meant to replace <xref target="RFC4684"></xref>.</t>
  </abstract>

 </front>

 <middle>

  <section title="Introduction">
   <t><xref target="RFC4684"></xref>  provides a powerful  and general
    means  for BGP  speakers to  exchange and  propagate  Route Target
    reachability information  and constrain VPN  route distribution to
    achieve  high  scale.   However,  it  requires that  all  the  BGP
    speakers   in   the  network   are   upgraded   to  support   this
    functionality.  For  example, in  a network with  route reflectors
    (RR), if one PE client  in the cluster doesn't support constrained
    distribution, the cluster  degenerates into storing and processing
    all  the VPN  routes.  The  route reflectors  need to  request and
    store  all the  network routes  since  they do  not receive  route
    target membership  information from the  legacy PEs.  The  RR will
    also generate  all those routes to  the legacy PEs  and the legacy
    PEs will end  up filtering the routes and store  the subset of VPN
    routes that are of interest.</t>

   <t>This document  specifies a mechanism for such  legacy PE devices
    using  existing  configuration  and  toolset  to  provide  similar
    benefits as <xref target="RFC4684"></xref>.   At the same time, it
    is    backward-compatible     with    the    procedures    defined
    in  <xref  target="RFC4684"></xref>.    It  also  allows  graceful
    upgrade of the legacy  router to be <xref target="RFC4684"></xref>
    capable.</t>

   <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">RFC 2119</xref>.</t>
   </section>
  </section> <!-- Introduction -->

  <section anchor="idea"
     title="Basic Idea">
   <t>The basic idea is to make use of VPN unicast route exchange from
    the legacy  PEs to  a new BGP  speaker (e.g.  an RR) to  signal RT
    membership.   The legacy PEs  announce a  set of  "special" routes
    with mapped RTs to the RR along with a standard community (defined
    in this document).  The presence  of the community triggers the RR
    to extract the RTs and build RT membership information.</t>
  </section> <!-- Basic Idea -->

  <section anchor="oper"
     title="Detailed Operation">
   <section anchor="PE_behave"
      title="Legacy PE Behavior">
    <t>The following simple steps are performed on the legacy PE
     device:
     <list style="symbols">
      <t>Collect  the "import  route  targets" of  all the  configured
       customer VRFs.  Let's call this set 'IRTS'.</t>

      <t>Create   a   special   "route-filter   VRF"  with   a   route
       distinguisher(RD) that's configured  with the same value across
       the network  for all legacy PE devices.   Note: the equivalence
       of the RD  value is for optimization -  the operator may choose
       to use different values.</t>

      <t>Originate one or more routes  in this VRF and attach a subset
       of  'IRTS' as  "translated  route-target extended  communities"
       with each route so as to evenly distribute the RTs (and to make
       sure they can fit  into one BGP UPDATE message).  Collectively,
       the union of the "translated route-target extended communities"
       of all these routes is equal to the set 'IRTS'.  The translated
       RTs  are  attached  as  export  route-targets  for  the  routes
       originated in the route-filter VRF.</t>

      <t>The translation of the IRTs  is necessary in order to refrain
       from  importing "route-filter"  VRF routes  into VPN  VRFs that
       would import  the same  route-targets.  The translation  of the
       IRTS  is done  as follows.   For  a given  IRT, the  equivalent
       translated  RT (TRT) is  constructed by  means of  swapping the
       value of  the high- order octet  of the Type field  for the IRT
       (as defined in <xref target="RFC4360"></xref>).

       <figure align="center">
        <artwork align="left"><![CDATA[

    0                   1              0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      0x00     |     0x02      |   |      0x01     |     0x02      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |2B AS                          |   |2B AS => IP(high)              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<=>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Local Admin(high)              |   |Local Admin(high) => IP(low)   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Local Admin(low)               |   |Local Admin(low) => Local Admin|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    0                   1              0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      0x01     |     0x02      |   |      0x02     |     0x02      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |IP(high)                       |   |IP(high) => 4B AS(high)        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<=>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |IP(low)                        |   |IP(low) => 4B AS(low)          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Local Admin                    |   |Local Admin => Local Admin     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    0                   1              0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      0x02     |     0x02      |   |      0x00     |     0x02      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |4B AS(high)                    |   |4B AS(high) => 2B AS           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<=>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |4B AS(low)                     |   |4B AS(low) => Local Admin(high)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Local Admin                    |   |Local Admin => Local Admin(low)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

        ]]></artwork>
       </figure>
       As  an   example,  if  IRT  R=  65500:12244(hex:
       0x0002ffdc00002fd4),      equivalent      route-filter     TRT:
       255.220.0.0:12244(hex: 0x0102ffdc00002fd4).  One shortcoming of
       the translation mechanism is  a possible collision between IRTs
       and  TRTs  if the  network  has  been  configured with  RTs  of
       multiple higher  order octet types (2-byte AS,  IP address, and
       4-byte AS).  It  is expected that such a  configuration is rare
       in practice.</t>

      <t>As an alternative to the  translation of the IRTS, the subset
       of the 'IRTS' can be  attached as-is (without swapping the type
       field  as described earlier)  as "export  route-target extended
       communities" with each route so as to evenly distribute the RTs
       (and to  make sure they can  fit into one  BGP UPDATE message).
       In  this case,  the IRT  subsets  can be  attached in  outbound
       policy to avoid the  route-filter VRFs from being imported into
       VPN VRFs.  Also in this  case, the route-filter VRF routes must
       be  tagged  with  a  different  special  community  (from  that
       associated    with   the    translated   RTs)    as   described
       in <xref  target="community"></xref> so that  the receiving BGP
       speaker can distinguish the two cases.</t>

      <t>The  routes  are   marked  with  NO_ADVERTISE  and  NO_EXPORT
       well-known communities as well as the appropriate new community
       that's               defined               in              this
       document <xref target="community"></xref>.   Note that there is
       no  specific  provision   made  to  disallow  configuration  of
       subsequent route policies that can potentially alter the set of
       communities  attached   to  "route-filter"  VRF   routes.   The
       protocol behavior  in such a case  is undefined and  the use of
       those policy statements is discouraged.</t>
     </list>
    </t>
   </section> <!-- Legacy PE Behavior -->
   <section title="RR Behavior">
    <t>Upon receiving the "route-filter"  routes, the BGP speaker does
     its  usual  processing  to  store  them in  its  local  RIB.   It
     recognizes them  as route-filter routes based  on the association
     of the  new standard community  as defined in this  document.  If
     required (as indicated by the community value), it translates the
     attached  route-target extended  communities (TRT)  to equivalent
     import route-targets (IRT).   Finally it creates the route-target
     filter list for  each legacy client by collecting  the entire set
     of  route targets.   From  this point  onwards,  the behavior  is
     similar to  that defined in  <xref target="RFC4684"></xref>.  The
     RR  does  not  propagate  the  routes further  because  of  their
     association with  NO_ADVERTISE community.  Also the  VPN EoR that
     is sent  by the legacy  PE should also  be used as  an indication
     that the  legacy PE is done sending  the route-filter information
     as per  the procedures defined  in <xref target="RFC4684"></xref>
     for  implementing a  EoR mechanism  to signal  the  completion of
     initial RT membership exchange.</t>
    <section title="Generating Route Target Membership NLRIs for the
     legacy PE clients">
     <t>The RR  MAY also  translate the received  extended communities
      from legacy clients into route  target membership NLRIs as if it
      had received those NLRIs from the client itself.  This is useful
      for further propagation  of the NLRIs to rest  of the network to
      create  RT  membership flooding  graph.   When the  route_filter
      routes are received with same  RD (from all legacy PE speakers),
      processing  of the  paths to  generate equivalent  NLRIs becomes
      fairly easy.</t>
    </section>
   </section> <!-- RR Behavior -->

  </section> <!-- Detailed Operation -->

  <section anchor="community" title="ROUTE_FILTER Community">
   <t>This memo defines four BGP  communities that are attached to BGP
    UPDATE  messages at  the legacy  PE devices  and processed  by the
    route reflectors as defined above.  They are as follows:
    <figure align="center">
     <artwork align="left"><![CDATA[

   +----------------------------+--------------------------------------+
   |          Community         | Meaning                              |
   +----------------------------+--------------------------------------+
   |       ROUTE_FILTER_v4      | RTs are attached as-is for VPNv4     |
   |                            | route filtering                      |
   |             ...            | ...                                  |
   |       ROUTE_FILTER_v6      | RTs are attached as-is for VPNv6     |
   |                            | route filtering                      |
   |             ...            | ...                                  |
   | ROUTE_FILTER_TRANSLATED_v4 | Translated RTs are attached for      |
   |                            | VPNv4 route filtering                |
   |             ...            | ...                                  |
   | ROUTE_FILTER_TRANSLATED_v6 | Translated RTs are attached for      |
   |                            | VPNv6 route filtering                |
   +----------------------------+--------------------------------------+

     ]]></artwork>
    </figure>

    In the absence of (or  lack of support of) AF specific communities
    (ROUTE_FILTER_v6, ROUTE_FILTER_TRANSLATED_v6), the ROUTE_FILTER_v4
    or ROUTE_FILTER_TRANSLATED_v4 MAY  be treated by an implementation
    as a default VPN route-filter community to build a combination VPN
    filter for all VPN AFs (VPNv4,  VPNv6) present on the RR.  This is
    in         accordance          with         the         procedures
    in    <xref   target="RFC4684"></xref>   to    build   combination
    route-filters for  VPN AFs  and AF specific  route-filters defined
    in <xref target="I-D.keyur-bgp-af-specific-rt-constrain"></xref>. If
    this is  the case, then  subsequent receipt of  any "route-filter"
    routes    with   AF    specific    communities   (ROUTE_FILTER_v6,
    ROUTE_FILTER_TRANSLATED_v6) will override the default filters sent
    with ROUTE_FILTER_v4  or ROUTE_FILTER_TRANSLATED_v4 for  the VPNv6
    AFI when support for the AF specific communities exists. Suggested 
    values for ROUTE_FILTER_v4 and ROUTE_FILTER_TRANSLATED_v4 are 
    0xFFFF0002 (65535:2) and 0xFFFF0003 (65535:3) respectively</t>
  </section>

  <section anchor="deploy" title="Deployment Considerations">
   <t>When both  the legacy PE  and the RR support  extended community
    based         Outbound          Route         Filtering         as
    in <xref  target="I-D.chen-bgp-ext-community-orf"></xref> this may
    be used  as a alternate  solution for the  legacy PE to  signal RT
    membership  information, in  order  to realize  the same  benefits
    as  <xref target="RFC4684"></xref>.   Also extended  community ORF
    can      be     used     amongst      the     RRs      in     lieu
    of <xref target="RFC4684"></xref> to realize similar benefits.</t>
  </section>

  <section title="Contributors">
   <t>Significant contributions were  made by Stephane Litkowski, Luis
    M  Tomotaki and  James  Uttaro  which the  authors  would like  to
    acknowledge.</t>
  </section>

  <section title="Acknowledgments">
   <t>The authors  would like to thank  Rob Shakir for  his review and
    comments.</t>
  </section>

  <section anchor="IANA" title="IANA Considerations">
   <t>IANA  shall   assign  new   code  points  from   BGP  first-come
    first-serve  communities  for   the  four  communities  as  listed
    in <xref target="community"></xref>.</t>
  </section>

  <section anchor="Security" title="Security Considerations">
   <t>There  are  no  additional  security risks  introduced  by  this
    design.</t>
  </section>

 </middle>

 <back>
  <references title="Normative References">
     <?rfc include="reference.RFC.2119"?>
     <?rfc include="reference.RFC.4271"?>
     <?rfc include="reference.RFC.4360"?>
     <?rfc include="reference.RFC.4364"?>
     <?rfc include="reference.RFC.4684"?>
  </references>
  <references title="Informational References">
     <?rfc include="reference.I-D.keyur-bgp-af-specific-rt-constrain"?>
     <?rfc include="reference.I-D.chen-bgp-ext-community-orf"?>
  </references>
 </back>

</rfc>
