<?xml version="1.0" encoding="us-ascii"?>
<!DOCTYPE rfc PUBLIC '' "http://xml.resource.org/authoring/rfc2629.dtd"[
<!ENTITY RFC2119 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2622 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2622.xml">
<!ENTITY RFC4012 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4012.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info"
     docName="draft-snijders-rpsl-via-00"
     ipr="trust200902"
     obsoletes=""
     updates=""
     submissionType="IETF"
     xml:lang="en">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN"
     they will automatically be output with "(if approved)" -->
  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="The 'via' keyword in RPSL">
      The 'via' keyword in RPSL Policy Specifications
    </title>

    <author initials="J" surname="Snijders" fullname="Job Snijders">
      <organization>Atrato IP Networks</organization>
      <address>
        <postal>
          <street>Tupolevlaan 103a</street>
          <city>Schiphol-Rijk</city>
          <code>1119 PA</code>
          <country>NL</country>
        </postal>
        <email>job.snijders@atrato.com</email>
      </address>
    </author>

    <author initials="N" surname="Hilliard" fullname="Nick Hilliard">
      <organization>INEX</organization>
      <address>
        <postal>
          <street>4027 Kingswood Road</street>
          <city>Dublin</city>
          <code>24</code>
          <country>IE</country>
        </postal>
        <email>nick@inex.ie</email>
      </address>
    </author>

    <date year="2013" month="June"/>

    <abstract>
      <t>

This document defines the 'via' keyword which can be used in RPSL
policy specifications to publish desired routing policy regarding
non-adjacent networks. 

      </t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction">
      <t>

The Routing Policy Specification Language <xref target="RFC4012" /> allows
operators to specify routing policies regarding directly adjacent networks
through various import and export attributes.  These attributes only apply
to directly adjacent networks.

      </t>
      <t>

This document proposes to extend RPSL according to the following
goals and requirements:

        <list style='symbols'>
          <t>

Provide a way to describe what an adjacent network could use
as routing policy towards its adjacent networks.

          </t>
          <t>

The extension should be backward compatible with minimal impact on existing
tools and processes, following Section 10 of <xref target="RFC2622" />.

          </t>
        </list>

The addition of a 'via' keyword in import and export related attributes
will especially help participants of Multi-Lateral Peering services to
inform the intermediate autonomous system what routing policy should be
applied towards other participants. 

      </t>
    </section>


    <section title="Notational Conventions">
      <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" />.
      </t>
    </section>


    <section title="Background">
      <t>

The via keyword specifically benefits operators whom were assigned
a 32 bit AS Number and transit providers when participating in
Multi-Lateral Peering Agreements facilitated by a Route Server. 

      </t>
      <t>

Often Route Server operators overload BGP Communities <xref target="RFC1997"
/>) to facilitate signalling of desired routing policy between the participants
and the Route Server. Because BGP Communities have a length of 32 bit,
it is not possible to signal a 32 bit AS Number coupled with an action.
In practise this means Route Server participants whom use a 32 bit AS
Number cannot specifically be included or excluded during path
distribution calculations on the Route Server unless a mapping system
is applied. 

      </t>
      <t>

Transit providers often uphold a routing policy which intents that
the transit provider does not want to exchange paths with its downstream
customers through Route Servers. The via keyword allows transit providers
to participate in Multi-Lateral Peering services while instructing Route
Server operators through a simple routing policy specification that paths 
should not be distributed to downstream customers and reducing the 
likelyhood of Path Hiding on the Route Server.

      </t>
    </section>

    <section title="Import and Export Via Syntax and Semantics">
      <t>

The via keyword can be used with the following policy attributes:

    <list style="empty">
        <t>import:</t>
        <t>export:</t>
        <t>mp-import:</t>
        <t>mp-export:</t>
    </list>

        <figure anchor="vis_syntax">
          <preamble>The syntax for these attributes is as follows:</preamble>
          <artwork>
Attribute  Value                                         Type
import     [protocol &lt;protocol-1&gt;] [into &lt;protocol-2&gt;]   optional,
           [via &lt;peering-1&gt;]                             optional,
           from &lt;peering-2&gt; [action &lt;action-1&gt;]
           . . .
           [via &lt;peering-3&gt;]                             optional,
           from &lt;peering-N&gt; [action &lt;action-N&gt;]
           accept &lt;filter&gt;
export     [protocol &lt;protocol-1&gt;] [into &lt;protocol-2&gt;]   optional,
           [via &lt;peering-1&gt;]                             optional,
           to &lt;peering-2&gt; [action &lt;action-1&gt;]             
           . . .
           [via &lt;peering-3&gt;]                             optional,
           to &lt;peering-N&gt; [action &lt;action-N&gt;]
           announce &lt;filter&gt;

mp-import  [protocol &lt;protocol-1&gt;] [into &lt;protocol-2&gt;]   optional,
           [afi &lt;afi-list&gt;]                              multi-valued
           [via &lt;peering-1&gt;]                             optional,
           from &lt;mp-peering-2&gt; [action &lt;action-1&gt;; ... &lt;action-N&gt;;]
           . . .
           [via &lt;peering-3&gt;]                             optional,
           from &lt;mp-peering-M&gt; [action &lt;action-1&gt;; ... &lt;action-N&gt;;]
           accept &lt;mp-filter&gt; [;]

mp-export  [protocol &lt;protocol-1&gt;] [into &lt;protocol-2&gt;]   optional,
           [afi &lt;afi-list&gt;]                              multi-valued
           [via peering-1&gt;]                              optional,
           to &lt;mp-peering-2&gt; [action &lt;action-1&gt;; ... &lt;action-N&gt;;]
           . . .
           [via peering-3&gt;]                              optional,
           to &lt;mp-peering-M&gt; [action &lt;action-1&gt;; ... &lt;action-N&gt;;]
           announce &lt;mp-filter&gt; [;]

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

The via keyword is optional, and should be ignored by implementations
which do not support interpretation of the via keyword. 

      </t>
      <t>

In the above example &lt;peering-1&gt; and &lt;peering-3&gt; are directly adjacent
networks, for instance a Multi-Lateral Peering service. &lt;peering-2&gt; is a
non-adjacent network.

      </t>
    </section>

    <section title="Example Usage">
      <t>
   
        <figure anchor='putting_it_all_together'>
          <preamble>Putting it all together:</preamble>
          <artwork>
   aut-num: AS5580
   import: via AS6777
                from AS15562
                action pref = 2;
                accept AS-SNIJDERS
   import: via AS6777
                from AS5580:AS-CUSTOMERS
                accept NOT ANY
   import: via AS6777 from AS15562
                from AS1
                from AS2
                via AS3 from AS4
                accept PeerAS
   mp-import: afi ipv6.unicast via AS6777 
                from AS15562 accept AS-SNIJDERS
   mp-import: via AS6777
                from AS65551 accept AS-SET-FROM-32BIT-ASN
   export: via AS6777
                to AS15562 action community.={5580:40};
                announce AS-ATRATO
   export: via AS5580:AS-ROUTESERVERS
                to AS5580:AS-CUSTOMERS announce NOT ANY
   mp-export: afi ipv6.unicast via AS6777
                to AS15562 announce AS-ATRATO
   mp-export: via AS6777
                to AS65551 announce AS-ATRATO

          </artwork>
        </figure>
      </t>
      <t>
 
In the above examples AS5580 and AS15562 are Route Server participants.
AS65551 is a participant whom has been assigned a 32 bit AS Number.
AS6777 functions as a Route Server and AS-SET AS5580:AS-ROUTESERVERS
contains a list of Route Server AS Numbers. AS-SET AS5580:AS-CUSTOMERS
contains a list of downstream transit customers from AS5580. 

      </t>
    </section>

    <section title="Security Considerations">
      <t>

There are no security considerations for this specification.  

      </t>
    </section>

    <section title="IANA Considerations">
      <t>

The new set of mechanisms for route servers does not require any new
allocations from IANA.

      </t>
    </section>
    <section title="Acknowledgments">
      <t>

The authors would like to thank Remko van Mook for confirming that 'via'
is a better keyword than 'through' or 'thru'.

      </t>
    </section>

  </middle>

  <back>

    <references title="Normative References">
      <?rfc include="reference.RFC.1997"?> <!-- bgp communities -->
      <?rfc include="reference.RFC.2119"?> <!-- keywords -->
      <?rfc include="reference.RFC.2622"?> <!-- Routing Policy Specification Language (RPSL) -->
      <?rfc include="reference.RFC.4012"?> <!-- Routing Policy Specification Language next generation (RPSLng) -->
    </references>

    <references title="Informative References">
      <?rfc include="reference.I-D.hilliard-ix-bgp-route-server-operations"?> <!-- path hiding -->
    </references>

    <section title="Grammar Rules">
      <t>
          
HERE BE DRAGONS

      </t>
    </section>

    <section title="Support and Commitment">
      <t>
          
(RFC Editor - this Appendix can be removed upon publication as RFC)

      </t>
      <t>

Route Server operators whom believe this is a viable solution:
        <list style='symbols'>
          <t>ECIX</t>
          <t>EQUINIX </t>
        </list>

      </t>
      <t>
   
Software projects which will receive patches to support the via keyword:

        <list style='symbols'>
          <t>RADB</t>
          <t>RIPE WHOIS</t>
        </list>

      </t>
      <t>

Software that might need a patch:

        <list style='symbols'>
          <t>irrtoolset</t>
          <t>rpsltools</t>
        </list>

      </t>
    </section>

    <section title="Document Change Log">
      <t>

(RFC Editor - this Appendix can be removed upon publication as RFC)

      </t>
      <t>
        <list style='numbers'>
          <t>

Initial document.

          </t> 
          <t> 

Changes to draft-snijders-rpsl-via-01.txt

            <list style='letters'>
              <t>derp derp</t>
            </list>
          </t>
        </list>
      </t>
    </section>
  </back>

</rfc>

