<?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-10" ipr="trust200902">
  <front>
    <title abbrev="BGP Large Communities">BGP Large Communities</title>

    <author fullname="Jakob Heitz" initials="J." surname="Heitz" role="editor">
        <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="Job Snijders" initials="J." surname="Snijders" role="editor">
        <organization abbrev="NTT">NTT Communications</organization>
        <address>
            <postal>
                <street>Theodorus Majofskistraat 100</street>
                <code>1065 SZ</code>
                <city>Amsterdam</city>
                <country>The Netherlands</country>
            </postal>
            <email>job@ntt.net</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="Ignas Bagdonas" initials="I." surname="Bagdonas">
        <organization>Equinix</organization>
        <address>
            <postal>
                <street>80 Cheapside</street>
                <code>EC2V 6EE</code>
                <city>London</city>
                <country>United Kingdom</country>
            </postal>
            <email>ibagdona.ietf@gmail.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/>

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

    <abstract>
        <t>
            This document describes the BGP Large Communities attribute, an
            extension to BGP-4. This attribute provides a mechanism to
            signal opaque information within separate namespaces to aid in
            routing management. The attribute is suitable for use with
            four-octet Autonomous System Numbers. 
        </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 <xref target="RFC4271" /> implementations typically support a routing
              policy language to control the distribution of routing information. Network
              operators attach BGP communities to routes to associate particular properties
              with 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 is applied to all routes contained in a BGP
              Update Message where the Communities Attribute is included. 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>
              BGP Communities attributes are a variable length attribute
              consisting of a set of one or more four-octet values, each of
              which specify a community <xref target="RFC1997"/>.  Common use
              of the individual values of this attribute type split this single
              32-bit value into two 16-bit values. The most significant word is
              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 the above
              encoding, as a two-octet word cannot fit a four-octet ASN.
              The BGP Extended Communities attribute <xref target="RFC4360"/>
              is also unsuitable. The six-octet length of the Extended
              Community value precludes the common operational practise of
              encoding four-octet ASNs in both the Global Administrator and the
              Local Administrator sub-fields.
          </t>
          <t>
              To address these shortcomings, this document defines a BGP Large
              Communities attribute encoded as an unordered set of one or more
              twelve-octet values, each consisting of a four-octet Global
              Administrator field and two four-octet operator-defined fields,
              each of which can be used to denote properties or actions
              significant to the operator of the Autonomous System assigning
              the values.
          </t>
    </section>

    <section anchor="attribute" title="BGP Large Communities Attribute">
        <t>
            This document defines the BGP Large Communities attribute
            as an optional transitive path attribute of variable length. All
            routes with the BGP Large Communities attribute belong to the
            communities specified in the attribute.
        </t>
        <t>
            Each BGP Large Community value is encoded as a 12-octet quantity,
            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.
                </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 BGP Large Communities without
            collision. This field SHOULD be an Autonomous System Number (ASN).
            The use of Reserved ASNs (0 <xref target="RFC7607" />, 65535 and
            4294967295 <xref target="RFC7300" />) is NOT RECOMMENDED.
        </t>
        <t>
            There is no significance to the order in which twelve-octet Large
            Community Attribute values are encoded in a Large Communities
            attribute,  A BGP speaker can transmit them in any order.
        </t>
        <t>
            Duplicate BGP Large Community values MUST NOT be transmitted. A
            receiving speaker MUST silently remove redundant BGP Large
            Community values from a BGP Large Community attribute.
        </t>
    </section>

    <section title="Aggregation">
        <t>
            If a range of routes is aggregated, then the resulting aggregate
            should have a BGP Large Communities attribute which contains all
            of the BGP Large Communities attributes from all of the
            aggregated routes.
        </t>
    </section>

	<section title="Canonical Representation">
        <t>
            The canonical representation of BGP Large Communities is three
            separate unsigned integers in decimal notation in the following
            order: Global Administrator, Local Data 1, Local Data 2. Numbers
            MUST NOT contain leading zeros; a zero value MUST be represented
            with a single zero. Each number is separated from the next by a
            single colon. For example: 64496:4294967295:2, 64496:0:0.
        </t>
        <t>
            BGP Large Communities SHOULD be represented in the canonical
            representation.
        </t>
    </section>

    <section title="Error Handling">
        <t>
            The error handling of BGP Large Communities is as follows:
        </t>
        <t>
            <list style="symbols">
                <t>
                    A BGP Large Communities attribute SHALL be considered
                    malformed if the length of the BGP Large Communities
                    Attribute value, expressed in octets, is not a non-zero
                    multiple of 12.
                </t>
                <t>
                    A BGP Large Communities attribute SHALL NOT be considered
                    malformed due solely to presence of duplicate community
                    values.
                </t>
                <t>
                    A BGP UPDATE message with a malformed BGP 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 BGP Large Communities attribute MUST NOT be
            considered malformed if the Global Administrator field contains an
            unallocated, unassigned or reserved ASN.
        </t>
    </section>

    <section title="Security Considerations">
        <t>
            This extension to BGP has similar security implications as BGP
            Communities <xref target="RFC1997"/>.
        </t>
        <t>
            This document does not change any underlying security issues
            associated with any other BGP Communities mechanism.  Specifically,
            an AS relying on the BGP Large Communities 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 BGP Large Communities attribute. Specifying the mechanism to
            provide such trust is beyond the scope of this document.
        </t>
        <t>
            BGP Large Communities do not protect the integrity of each
            community value. Operators should be aware that it is possible for
            a BGP speaker to alter BGP Large Community Attribute values in a
            BGP Update Message. Protecting the integrity of the transitive
            handling of BGP Large Community attributes in a manner consistent
            with the intent of expressed BGP routing policies falls within the
            broader scope of securing BGP, and is not specifically addressed
            here.
        </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 BGP Large
           Communities:
           <list style="symbols">
               <t>Cisco IOS XR</t>
               <t>ExaBGP</t>
               <t>GoBGP</t>
               <t>BIRD</t>
               <t>OpenBGPD</t>
               <t>pmacct</t>
               <t>Quagga</t>
           </list>
       </t>
       <t>
           The latest implementation news is tracked at
           <eref target="http://largebgpcommunities.net">http://largebgpcommunities.net/</eref>.
       </t>
   </section>

    <section title="IANA Considerations">
        <t>
            IANA has made an Early Allocation of the value 32 (LARGE_COMMUNITY)
            in the "BGP Path Attributes" registry under the "Border Gateway
            Protocol (BGP) Parameters" group and is now asked to make that
            Permanent.
        </t>
    </section>

    <section title="Contributors">
        <t>
            The following people contributed significantly to the content of
            the document:
        </t>
            <figure>
            <preamble></preamble>
            <artwork>
John Heasley
NTT Communications
Email: heas@shrubbery.net
</artwork>
</figure>

        <figure>
            <preamble></preamble>
            <artwork>
Adam Simpson
Nokia
Email: adam.1.simpson@nokia.com
</artwork>
</figure>
</section>

    <section title="Acknowledgments">
        <t>
            The authors would like to thank Ruediger Volk, Russ White, Acee
            Lindem, Shyam Sethuram, Jared Mauch, Joel M. Halpern, Jeffrey Haas,
            Gunter van de Velde, Marco Marzetti, Eduardo Ascenco Reis, Mark
            Schouten, Paul Hoogsteder, Martijn Schmidt, Greg Hankins, 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,
            Tom Scholl, Arjen Zonneveld, Remco van Mook, Adam Chappell, Jussi
            Peltola, Kristian Larsson, Markus Hauschild, Richard Steenbergen,
            David Freedman, Richard Hartmann, Geoff Huston, Mach Chen, and
            Alvaro Retana for their support, insightful review and comments.
        </t>
    </section>

  </middle>

  <back>
      <references title="Normative References">

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