<?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-ietf-idr-large-community-01" ipr="trust200902">
  <front>
    <title abbrev="Large BGP Communities">Large BGP Communities</title>

    <author fullname="Jakob Heitz" initials="J." surname="Heitz">
        <organization>Cisco</organization>
        <address>
            <postal>
                <street>170 West Tasman Drive</street>
                <city>San Jose</city>
                <region>CA</region>
                <code>95054</code>
                <country>USA</country>
            </postal>
            <email>jheitz@cisco.com</email>
        </address>
    </author>

    <author fullname="Keyur Patel" initials="K." surname="Patel">
        <organization abbrev="Arrcus">Arrcus, Inc</organization>
        <address>
            <email>keyur@arrcus.com</email>
        </address>
    </author>

    <author fullname="Job Snijders" initials="J." surname="Snijders">
        <organization abbrev="NTT">NTT Communications</organization>
        <address>
            <postal>
                <street>Theodorus Majofskistraat 100</street>
                <code>1065 SZ</code>
                <city>Amsterdam</city>
                <country>NL</country>
            </postal>
            <email>job@ntt.net</email>
        </address>
    </author>

    <author fullname="Ignas Bagdonas" initials="I." surname="Bagdonas">
        <organization>Equinix</organization>
        <address>
            <postal>
                <street></street>
                <city>London</city>
                <country>UK</country>
            </postal>
            <email>ibagdona.ietf@gmail.com</email>
        </address>
    </author>

    <author fullname="Adam Simpson" initials="A." surname="Simpson">
        <organization>Nokia</organization>
        <address>
            <postal>
                <street>600 March Road</street>
                <city>Ottawa</city>
                <code>Ontario K2K 2E6</code>
                <country>Canada</country>
            </postal>
            <email>adam.1.simpson@nokia.com</email>
        </address>
    </author>

    <date/>

    <area>Routing</area>
    <workgroup>IDR</workgroup>
    <keyword>BGP</keyword>
    <keyword>communities</keyword>

    <abstract>
        <t>
            This document describes the Large BGP Community attribute, an
            extension to BGP (RFC 4271). This attribute provides a mechanism to
            signal opaque information within separate namespaces to aid in
            routing management. The attribute is suitable for use in 4-byte
            ASNs (RFC 6793).
        </t>
    </abstract>

    <note 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>
    </note>

  </front>

  <middle>
      <section title="Introduction">
          <t>
              BGP implementations typically support a routing policy language
              to control the distribution of routing information.  Network
              operators attach BGP communities to routes to identify intrinsic
              properties of these routes.  These properties may include
              information such as the route origin location, or specification
              of a routing policy action to be taken, or one that has been
              taken, and may apply to an individual route or to a group of
              routes. Because BGP communities are optional transitive BGP
              attributes, BGP communities may be acted upon or otherwise used
              by routing policies in other Autonomous Systems (ASes) on the
              Internet.
          </t>
          <t>
              <xref target="RFC1997"/> BGP Communities Attributes are
              four-octet values split into two individual two-octet words.
              The most significant word is usually interpreted as an
              Autonomous System Number (ASN) and the least significant word
              is a locally defined value whose meaning is assigned by
              the operator of the Autonomous System in the most significant
              word.
          </t>
          <t>
              Since the adoption of four-octet ASNs <xref
              target="RFC6793"/>, the BGP Communities Attribute can no
              longer accommodate this encoding, as the specification in
              <xref target="RFC1997"/> contains only four octets.  This does
              not allow operators to specify any locally significant values.
              <!-- NOTE: need to mention Extended Communities here  -->
          </t>
          <t>
              To address these shortcomings, this document defines a Large
              Community BGP Attribute encoded as one or more 12-octet values,
              each consisting of a four-octet ASN and two four-octet
              operator-defined values, each of which can be used to denote
              properties or actions significant to that ASN.
          </t>
    </section>

    <section title="Large BGP Communities Attribute">
        <t>
            This document creates the Large Communities BGP path attribute
            as an optional transitive attribute of variable length.  All
            routes with the Large Communities attribute belong to the
            community specified in the attribute.
        </t>
        <t>
            The attribute consists of one or more 12-octet values. Each
            12-octet Large Communities value represents three 4-octet values, as
            follows:
<figure align="center"><artwork><![CDATA[
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Global Administrator                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Local Data Part 1                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Local Data Part 2                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>
        </t>
        <t>
            <list style="hanging">
                <t hangText="Global Administrator:">
                    A four-octet namespace identifier.  This SHOULD be an Autonomous
                    System Number assigned by IANA.
                </t>
                <t hangText="Local Data Part 1:">A four-octet operator-defined value.</t>
                <t hangText="Local Data Part 2:">A four-octet operator-defined value.</t>
            </list>
        </t>
        <t>
            The Global Administrator field is intended to allow different
            Autonomous Systems to define Large Communities without collision.
            Implementations MUST allow the operator to specify any value for
            the Global Administrator field.
        </t>
        <t>
            There is no significance to the order in which Large Communities
            are encoded in a path attributes field and a receiving speaker
            MAY retransmit them in an order different from which it received
            them.
        </t>
        <t>
            Duplicate Large Communities SHOULD NOT be transmitted.  A
            receiving speaker SHOULD silently remove duplicate Large
            Communities from a BGP UPDATE message.
        </t>
        <t>
            There are no routing semantics implied by the Global
            Administrator field.
        </t>

    </section>

    <section title="Aggregation">
        <t>
            If a range of routes is aggregated and the resulting aggregates
            attribute section does not carry the ATOMIC_AGGREGATE attribute,
            then the resulting aggregate should have a Large Communities path
            attribute which contains all of the large communities from all of
            the aggregated routes.
        </t>

    </section>

    <section title="Textual Representation">
        <t>
            BGP Communities <xref target="RFC1997"/> are usually represented
            in routing policy languages as two individual two-octet unsigned
            integers separated by a colon; for example, 64496:12345.
        </t>
        <t>
            BGP Large Communities implementations MUST represent Large
            Communities in a manner similar to their representation of BGP
            Communities <xref target="RFC1997"/>.  Large Communities MUST be
            represented as three separate four-octet unsigned integers in
            decimal format with no leading zeros.  These integers MUST NOT
            be omitted, even when zero.  For example, 64496:4294967295:2 or
            64496:0:0.
        </t>
        <t>
            Vendors MAY provide other textual representations.  For example,
            a vendor's routing policy language may use a separator other
            than a colon or may require keywords or characters prepending or
            postpending the Large Communities attribute.  Such differences
            are permitted.  However, each implementation MUST make a
            representation available that depicts the integers in decimal
            and in the following order: Global Administrator, Local Data
            Part 1, Local Data Part 2.
        </t>

    </section>

    <section title="Reserved Large BGP Community values" anchor="reserved_vals">
        <t>
            The Large BGP Community attribute values in the following ranges
            are reserved:
<figure align="center"><artwork><![CDATA[
         0:0:0 -          0:4294967295:4294967295
     65535:0:0 -      65535:4294967295:4294967295
4294967295:0:0 - 4294967295:4294967295:4294967295
]]></artwork></figure>
        </t>
    </section>

    <section title="Error Handling">
        <t>
            The error handling of Large Communities is as follows:
        </t>
        <t>
            <list style="symbols">
                <t>
                    A Large Communities BGP Path Attribute with a length of zero
                    MUST be ignored upon receipt and removed when sending.
                </t>
                <t>
                    A Large Communities attribute SHALL be considered malformed
                    if its length is not a non-zero multiple of 12 bytes.
                </t>
                <t>
                    A BGP UPDATE message with a malformed Large Communities
                    attribute SHALL be handled using the approach of
		    "treat-as-withdraw" as described in
		    <xref target="RFC7606">section 2</xref>.
                </t>
            </list>
        </t>
        <t>
            The BGP Large Communities Global Administrator field may contain
            any value, and a Large Communities attribute MUST NOT be
            considered malformed if the Global Administrator field contains
            an unallocated, unassigned or reserved ASN or is set to one of
            the reserved Large BGP Community values defined in <xref
            target="reserved_vals" />.
        </t>
        <t>
            A receiving speaker MUST NOT consider duplicate Large
            Communities attributes in a BGP UPDATE message to be malformed.
        </t>
    </section>

    <section title="Security Considerations">
        <t>
            This extension to BGP has similar security implications as BGP
            Communities <xref target="RFC1997"/> and BGP Extended
            Communities <xref target="RFC4360"/>.
        </t>
        <t>
            This document does not change any underlying security issues
            associated with any other BGP Communities mechanism.  Specifically,
            an AS relying on the Large BGP Community attribute carried in BGP
            must have trust in every other AS in the path, as any intermediate
            Autonomous System in the path may have added, deleted or altered
            the Large BGP Community attribute. Specifying the mechanism to
            provide such trust is beyond the scope of this document.
        </t>
        <t>
            Network administrators should note the recommendations in
            Section 11 of BGP Operations and Security <xref
            target="RFC7454"/>.
        </t>
   </section>
   
   <section title="Implementation status - RFC EDITOR: REMOVE BEFORE PUBLICATION">
       <t>
           This section records the status of known implementations of the
           protocol defined by this specification at the time of posting of
           this Internet-Draft, and is based on a proposal described in
           <xref target="RFC7942" />. The description of implementations in this
           section is intended to assist the IETF in its decision processes in
           progressing drafts to RFCs.  Please note that the listing of any
           individual implementation here does not imply endorsement by the
           IETF.  Furthermore, no effort has been spent to verify the
           information presented here that was supplied by IETF contributors.
           This is not intended as, and must not be construed to be, a catalog
           of available implementations or their features.  Readers are advised
           to note that other implementations may exist.
       </t>
       <t>
           As of today these vendors have produced an implementation of Large
           BGP Community:
           <list style="symbols">
               <t>Cisco IOS XR</t>
               <t>ExaBGP</t>
               <t>GoBGP</t>
               <t>BIRD</t>
            </list>
       </t>
       <t>
           The latest implementation news is tracked at
           <eref target="https://largebgpcommunities.net">http://largebgpcommunities.net/</eref>.
       </t>
   </section>

    <section title="IANA Considerations">
        <t>
            IANA has assigned value 30 (LARGE_COMMUNITY Attribute) in the "BGP
            Path Attributes" sub-registry under the "Border Gateway Protocol
            (BGP) Parameters" registry.
        </t>
    </section>

    <section title="Acknowledgments">
        <t>
            The authors would like to thank Ruediger Volk, Russ White, Acee
            Lindem, Shyam Sethuram, Jared Mauch, Joel M. Halpern, Nick
            Hilliard, Jeffrey Haas, John Heasley, Gunter van de Velde, Marco
            Marzetti, Eduardo Ascenco Reis, Mark Schouten, Paul Hoogsteder,
            Martijn Schmidt, Greg Hankins, Acee Lindem, Bertrand Duvivier,
            Barry O'Donovan, Grzegorz Janoszka, Linda Dunbar, Marco Davids,
            Gaurab Raj Upadhaya, Jeff Tantsura, Teun Vink, Adam Davenport,
            Theodore Baschak, Pier Carlo Chiodi, Nabeel Cocker, Ian Dickinson,
            Jan Baggen, Duncan Lockwood, David Farmer, Randy Bush, Wim
            Henderickx, Stefan Plug, Kay Rechthien, Rob Shakir, Warren Kumari,
            Gert Doering, Thomas King, Mikael Abrahamsson, Wesley Steehouwer,
            Sander Steffann, Brad Dreisbach, Martin Millnert, Christopher
            Morrow, Jay Borkenhagen, Arnold Nipper, Joe Provo, Niels Bakker,
            Bill Fenner, Tom Daly, Ben Maddison, Alexander Azimov, Brian
            Dickson, Peter van Dijk, Julian Seifert, Tom Petch and Tom Scholl
            for their support, insightful review and comments.
        </t>
    </section>

  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.1997"?>
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.6793"?>
      <?rfc include="reference.RFC.7606"?>
    </references>
    <references title="Informative References">
      <?rfc include="reference.RFC.4360"?>
      <?rfc include="reference.RFC.7454"?>
      <?rfc include="reference.RFC.7942"?>
    </references>


  </back>
</rfc>
