<?xml version="1.0" encoding="utf-8"?>
<!--
    draft-brissette-idr-dc-origin-leaf-id-00

    An Informational Internet-Draft describing operational practice for
    identifying the originating leaf of a prefix in a plain IPv4/IPv6
    unicast eBGP data-center underlay, using BGP Large Communities
    (RFC 8092).
-->
<?xml-model href="rfc7991bis.rnc"?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="info"
  docName="draft-brissette-idr-dc-origin-leaf-id-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">

  <front>
    <title abbrev="DC eBGP Origin-Leaf Identification">Origin-Leaf Identification in Data-Center eBGP Underlays using BGP Large Communities</title>

    <seriesInfo name="Internet-Draft" value="draft-brissette-idr-dc-origin-leaf-id-00"/>

    <author fullname="Patrice Brissette" initials="P." surname="Brissette" role="editor">
      <organization>Cisco Systems</organization>
      <address>
        <email>pbrisset@cisco.com</email>
      </address>
    </author>

    <author fullname="Ketan Talaulikar" initials="K." surname="Talaulikar">
      <organization>Cisco Systems</organization>
      <address>
        <email>ketant@cisco.com</email>
      </address>
    </author>

    <author fullname="Krishnaswamy Ananthamurthy" initials="K." surname="Ananthamurthy">
      <organization>Cisco Systems</organization>
      <address>
        <email>kriswamy@cisco.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="30"/>

    <area>Routing</area>
    <workgroup>Inter-Domain Routing</workgroup>

    <keyword>BGP</keyword>
    <keyword>Large Community</keyword>
    <keyword>data center</keyword>
    <keyword>eBGP</keyword>
    <keyword>underlay</keyword>
    <keyword>origin identification</keyword>
    <keyword>spine-leaf</keyword>
    <keyword>Clos</keyword>

    <abstract>
      <t>Data-center fabrics that run hop-by-hop eBGP routing frequently
      need to identify the originating node (leaf) of a prefix as it is
      propagated through the fabric. The BGP AS_PATH attribute provides
      loop prevention and identifies the originating Autonomous System (AS),
      but under common AS numbering models an AS does not map to a single
      leaf. While several BGP community mechanisms
      could carry such an identifier, there is no documented practice
      describing the mechanism and encoding choices for underlay
      origin-leaf tagging.</t>

      <t>This document analyzes the problem, states the requirements, and
      surveys candidate BGP mechanisms for carrying an origin-leaf
      identifier. It recommends encoding the identifier in a BGP Large
      Community (RFC 8092), describes how the identifier is allocated within
      the Large Community namespace, and describes how it is originated,
      propagated unchanged across the fabric, and consumed at receiving
      leaves. It also describes an optional profile for locally significant
      route-attachment metadata. This document is Informational and defines
      no new protocol elements.</t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction">
      <name>Introduction</name>
      <t>Modern data-center (DC) networks commonly use eBGP as the routing
      protocol for the IP underlay, carrying plain IPv4 and IPv6 unicast
      prefixes across a spine-leaf (Clos) or super-spine/spine/leaf fabric
      <xref target="RFC7938"/>. Each leaf advertises its locally
      originated prefixes upward toward the spines, which propagate them to
      all other leaves.</t>

      <t>A number of operational functions - such as origin-leaf-aware
      forwarding and routing policy, traffic isolation, and operational
      visibility - benefit from knowing which leaf originated a given
      prefix. However, eBGP does not natively provide a structured, reliable
      way to convey the originating leaf's identity to receiving
      leaves.</t>

      <t>This document describes the problem, the use cases, and the
      requirements for origin-leaf identification in a plain unicast eBGP
      underlay. It then surveys candidate BGP mechanisms and recommends a
      concrete, interoperable practice based on BGP Large Communities
      <xref target="RFC8092"/>. Two namespace allocation models and their
      corresponding encodings are described, of which a deployment uses
      exactly one encoding consistently (see <xref target="encoding"/>).
      The document is Informational: it documents an operational practice
      built entirely from existing, standardized BGP capabilities and does
      not define any new protocol element or IANA registration.</t>

      <section anchor="scope">
        <name>Scope</name>
        <t>This document is limited to plain IPv4 and IPv6 unicast eBGP
        underlays. Overlay technologies such as EVPN/VXLAN are discussed
        only insofar as they affect the choice of underlay mechanism (see
        <xref target="coexistence"/>). Implementation-specific data-plane
        programming details (for example, how a particular routing stack
        propagates metadata to an ASIC) are out of scope; this document
        focuses on the control-plane encoding and its propagation
        properties.</t>
        <t>The primary focus is origin-leaf identification;
        <xref target="attachment-metadata"/> describes an optional profile
        for locally significant route-attachment metadata using the same
        Large Community construction.</t>
      </section>

      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <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 BCP&nbsp;14 <xref target="RFC2119"/>
        <xref target="RFC8174"/> when, and only when, they appear in
        all capitals, as shown here.</t>
        <t>This document is Informational and defines no new protocol
        elements. Where these key words appear, they express requirements
        and recommendations for deployments that follow the operational
        practice described here; they do not impose conformance
        requirements on BGP protocol implementations.</t>
      </section>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <dl newline="false">
        <dt>Fabric:</dt>
        <dd>A DC network built as a folded Clos topology of leaves and
        spines (and, optionally, super-spines).</dd>
        <dt>Leaf:</dt>
        <dd>A top-of-rack (ToR) or equivalent BGP speaker that originates
        prefixes into the fabric and receives prefixes from other
        leaves.</dd>
        <dt>Spine:</dt>
        <dd>An aggregation-tier BGP speaker that interconnects leaves
        within a pod.</dd>
        <dt>Super-spine:</dt>
        <dd>A BGP speaker that interconnects pods in a three-tier
        fabric.</dd>
        <dt>Pod:</dt>
        <dd>A group of leaves and spines forming a repeatable unit of the
        fabric.</dd>
        <dt>Originating leaf:</dt>
        <dd>The leaf that first advertises a given prefix into the
        fabric. "Origin" refers to the control-plane origin of the route;
        in the forwarding plane, the originating leaf is the egress
        (destination) leaf for traffic sent toward the prefix.</dd>
        <dt>Receiving leaf:</dt>
        <dd>Any leaf that learns a prefix originated by another leaf.</dd>
        <dt>Origin-leaf identifier:</dt>
        <dd>A structured value that unambiguously identifies the
        originating leaf and pod (and, optionally, port) of a prefix.</dd>
        <dt>Assigning ASN:</dt>
        <dd>The ASN carried in the Global Administrator field of a Large
        Community, acting as the authority that defines the meaning of its
        Local Data fields <xref target="RFC8092"/>.</dd>
      </dl>
    </section>

    <section anchor="problem-statement">
      <name>Problem Statement</name>
      <t>Each leaf advertises its locally originated prefixes upward toward
      the spines, which propagate them to all other leaves. A receiving
      leaf that wishes to apply origin-based policy needs to know which
      leaf originated each prefix. The following subsections examine why
      eBGP does not reliably provide this information today.</t>

      <section anchor="as-path-limits">
        <name>What the AS_PATH Provides</name>
        <t>The BGP AS_PATH attribute records every Autonomous System a
        route has traversed and serves two purposes: loop prevention, and
        identification of the AS from which a prefix originated. Origin
        identification is therefore at AS granularity; whether it also
        identifies the originating leaf depends entirely on the
        AS-numbering model in use:</t>

        <table anchor="as-model-table">
          <name>Leaf Identity Recoverable from AS_PATH by AS-Numbering Model</name>
          <thead>
            <tr>
              <th>AS assignment model</th>
              <th>Leaf identity in AS_PATH</th>
              <th>Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Unique private ASN per leaf</td>
              <td>Directly readable</td>
              <td>e.g. Leaf-1 = AS 65101, Leaf-2 = AS 65102</td>
            </tr>
            <tr>
              <td>Unique ASN per tier (all leaves share one ASN)</td>
              <td>Lost - all leaves appear identical</td>
              <td>Common in large fabrics to simplify policy</td>
            </tr>
            <tr>
              <td>Shared ASN pool (ASNs reused across pods)</td>
              <td>Ambiguous</td>
              <td>Pod A Leaf-1 and Pod B Leaf-1 may share the same ASN</td>
            </tr>
          </tbody>
        </table>

        <t>Even in the best case (a unique ASN per leaf), the AS_PATH is a
        path descriptor rather than a structured tag. Extracting leaf
        identity from it requires matching specific ASN values, which is
        brittle when ASN assignment changes and provides no room for
        structured metadata such as pod, rack, or role.</t>
      </section>

      <section anchor="no-established-practice">
        <name>Lack of an Established Practice</name>
        <t>BGP offers several community mechanisms - Standard Communities
        <xref target="RFC1997"/>, Extended Communities
        <xref target="RFC4360"/>, and Large Communities
        <xref target="RFC8092"/> - any of which could, in principle,
        carry an origin identifier. However, there is no documented,
        interoperable practice describing which mechanism to use for
        DC underlay origin-leaf tagging, nor how to encode the identifier.
        The result is ad hoc, per-operator solutions that do not
        interoperate and that are difficult to reason about
        operationally.</t>
      </section>

      <section anchor="hop-survival">
        <name>Multi-Hop Survival Requirement</name>
        <t>An origin-leaf identifier must survive every eBGP hop between the
        originating and receiving leaf. In a two-tier spine-leaf fabric a
        prefix crosses at least two eBGP hops (leaf to spine, spine to
        leaf). In a three-tier fabric with super-spines a prefix crosses at
        least four eBGP hops (leaf to spine to super-spine to spine to
        leaf). The chosen mechanism must therefore be preserved, unmodified,
        across all intermediate BGP speakers, without per-hop strip and
        re-add, when community advertisement is enabled across the
        propagation path.</t>
      </section>
    </section>

    <section anchor="use-cases">
      <name>Use Cases</name>

      <section anchor="uc-primary">
        <name>Origin-Leaf-Aware Policy</name>
        <t>At a receiving leaf, BGP learns routes carrying the originating
        leaf's identifier. The operator extracts this identifier and uses it
        to drive behavior that depends on the leaf at which traffic toward
        the prefix exits the fabric, for example:</t>
        <ul>
          <li>programming forwarding policy that depends on the originating
          leaf or pod;</li>
          <li>applying Quality of Service (QoS), Access Control List (ACL),
          or traffic-steering rules per originating leaf, for example to
          support asymmetric routing or service-level objectives;</li>
          <li>implementing pod-aware Equal-Cost Multi-Path (ECMP) or
          traffic isolation;</li>
          <li>applying BGP policy that targets a specific originating leaf
          (for example, adjusting LOCAL_PREF on, or rejecting, routes from a
          leaf under maintenance). Coarser location-based preference (for
          example, per site or region) is commonly handled with location
          communities and is not the focus of this document.</li>
        </ul>
        <t>The key requirement is that the origin-leaf identity be
        recoverable as structured metadata rather than being buried in an
        attribute that is expensive or ambiguous to parse.</t>
      </section>

      <section anchor="uc-visibility">
        <name>Operational Visibility</name>
        <t>Operators can identify the originating leaf of a prefix directly
        from BGP route attributes, using an identifier that is independent
        of the fabric's AS-numbering model, rather than inferring it
        indirectly (for example, from AS_PATH contents).</t>
      </section>
    </section>

    <section anchor="requirements">
      <name>Requirements</name>
      <t>AS_PATH retains its loop-prevention and origin-AS roles (see
      <xref target="as-path-limits"/>); the requirements below concern
      leaf-level origin identification, which AS_PATH does not provide in
      general. The following requirements guide the selection of a
      mechanism.</t>
      <table anchor="req-table">
        <name>Requirements for an Origin-Leaf Identification Mechanism</name>
        <thead>
          <tr><th>ID</th><th>Requirement</th></tr>
        </thead>
        <tbody>
          <tr><td>R1</td><td>The identifier MUST be unique per originating leaf across the entire fabric.</td></tr>
          <tr><td>R2</td><td>The identifier MUST be preserved across all eBGP hops (spine, super-spine) without explicit strip and re-add.</td></tr>
          <tr><td>R3</td><td>The mechanism itself MUST NOT alter standard eBGP behavior (loop prevention, best-path selection, ECMP), independent of any explicit operator policy applied to the identifier.</td></tr>
          <tr><td>R4</td><td>The mechanism MUST work for both IPv4 unicast and IPv6 unicast Address Families (AFs).</td></tr>
          <tr><td>R5</td><td>The mechanism MUST be expressible using widely available BGP policy constructs.</td></tr>
          <tr><td>R6</td><td>The identifier encoding SHOULD be structured enough to carry pod, leaf, and (optionally) port granularity.</td></tr>
          <tr><td>R7</td><td>At the receiving leaf, the identifier MUST be matchable by inbound BGP policy (for example, by community or large-community matching).</td></tr>
          <tr><td>R8</td><td>The identifier SHOULD be mappable to local, implementation-specific metadata (for example, a route tag) for use by policy and the forwarding plane. This is a deployment and implementation consideration rather than a BGP protocol property.</td></tr>
          <tr><td>R9</td><td>The mechanism SHOULD coexist with a future VXLAN/EVPN overlay deployment without conflict or migration.</td></tr>
          <tr><td>R10</td><td>The mechanism SHOULD be extensible to carry other route-associated attachment metadata, such as a locally assigned switch or interface identifier, without defining a new BGP path attribute or community type.</td></tr>
          <tr><td>R11</td><td>The identifier SHOULD be independent of the fabric's ASN assignment and remain stable when ASNs are renumbered.</td></tr>
          <tr><td>R12</td><td>The identifier MUST NOT collide with other uses of the same community namespace.</td></tr>
          <tr><td>R13</td><td>The identifier MUST be removable by routing policy (for example, an export policy at the fabric boundary) so that it is not advertised beyond the fabric.</td></tr>
        </tbody>
      </table>
    </section>

    <section anchor="candidate-mechanisms">
      <name>Candidate Mechanisms</name>
      <t>This section surveys the mechanisms that could carry an origin-leaf
      identifier and evaluates each against the requirements in
      <xref target="requirements"/>.</t>
      <t>Identifying the originator of a route is not new in BGP, but the
      existing mechanisms are tied to contexts that a plain unicast eBGP
      underlay does not use, and are therefore not considered further. The
      ORIGINATOR_ID attribute <xref target="RFC4456"/> is set by route
      reflectors and is not carried over eBGP. Route Distinguishers of
      Type 1 <xref target="RFC4364"/>, which embed the originating router's
      IP address and on which EVPN <xref target="RFC7432"/> and inter-AS
      Option B deployments rely, exist only in VPN address families.
      BGP-based VPLS <xref target="RFC4761"/> identifies sites by a VE ID
      carried in the L2VPN NLRI. The VRF Route Import Extended Community
      <xref target="RFC6514"/> carries the originating PE's address but is
      defined for MVPN procedures on VPN-IP routes. Each of these fails R2
      or R4 for plain IPv4/IPv6 unicast.</t>

      <section anchor="cm-asn">
        <name>Per-Leaf Unique Private ASN (AS_PATH Encoding)</name>
        <t>Each leaf is assigned a unique private ASN, so that the origin
        AS conveyed by the AS_PATH (<xref target="as-path-limits"/>)
        identifies the originating leaf, and policy can match on it.</t>
        <t>Advantages: no additional configuration beyond ASN assignment;
        works with standard eBGP; survives an unlimited number of hops.</t>
        <t>Drawbacks: no structured encoding (pod/rack relationships require
        an external mapping); matching on AS_PATH is brittle when ASN
        assignment changes; it fails entirely when leaves share an ASN
        (the per-tier model); the private-ASN pool is finite; and it
        carries no semantic metadata. It therefore does not satisfy R1, R5,
        R6, or R11 in the general case.</t>
      </section>

      <section anchor="cm-std">
        <name>BGP Standard Community</name>
        <t>At the originating leaf, a Standard Community "AA:NN"
        <xref target="RFC1997"/> encodes a fabric identifier and a leaf
        identifier.</t>
        <t>Advantages: universally supported; survives eBGP hops when not
        stripped; simple to configure and well understood.</t>
        <t>Drawbacks: each field is only 16 bits. Operators do build
        hierarchical encodings within that space, but 16 bits is too small
        to carry pod, leaf, and port at DC scale without aggressive packing.
        The namespace is also shared with other policy uses (QoS marking,
        blackholing, and so on), creating a risk of collision (R12). It
        satisfies R6 only for small fabrics.</t>
      </section>

      <section anchor="cm-large">
        <name>BGP Large Community</name>
        <t>A Large Community <xref target="RFC8092"/> is three 32-bit
        integers, "global-administrator:local-data-1:local-data-2". The
        Global Administrator field carries an ASN that acts as the
        assigning authority, and the two Local Data fields carry
        operator-defined values.</t>
        <t>Advantages: 32 bits per field (ample scale); a namespace separate
        from Standard Communities and partitioned by assigning ASN;
        standardized and widely supported; and no effect on BGP best-path
        selection. It satisfies R1 through R8, R9 (see
        <xref target="coexistence"/>), R11 (subject to the caveat for the
        per-pod-ASN encoding in <xref target="dedicated-asn"/>), R12
        (see <xref target="encoding"/>), and R13 (see
        <xref target="security"/>).</t>
        <t>The same mechanism can also encode route-associated switch/port
        metadata using operator-defined local identifiers, avoiding the
        need for a new type-specific BGP community when the information is
        consumed within a single administrative domain (see
        <xref target="attachment-metadata"/>); this addresses R10.</t>
        <t>Considerations: Large Communities are widely used for other
        purposes (for example, informational and action communities
        <xref target="RFC8195"/>), possibly under the same ASN an operator
        would choose as assigning authority. An origin-leaf encoding
        therefore cannot assume that it owns the entire Large Community
        space of that ASN; it either uses an ASN dedicated to this purpose
        or reserves a function value within a shared ASN (see
        <xref target="encoding"/>). Like other communities, a Large
        Community is not sent to a peer unless the sender is configured to
        advertise Large Communities, and it is less universally deployed on
        legacy equipment than Standard Communities.</t>
      </section>

      <section anchor="cm-soo">
        <name>BGP Site-of-Origin (SoO) Extended Community</name>
        <t>The Site-of-Origin (SoO) Extended Community
        <xref target="RFC4364"/> is a transitive Extended Community used by
        BGP VPN deployments, and some EVPN deployments and implementations,
        to prevent routing loops by identifying the site from which a route
        originated. When a route carrying an SoO is received in a context
        configured with the same site-origin value, the route is typically
        rejected or suppressed to avoid re-advertising it back into the
        originating site. In L3VPN this is the classic multihomed CE/site
        loop-prevention case of <xref target="RFC4364"/>; in EVPN and
        symmetric L3VNI designs SoO is likewise used to prevent
        re-advertisement loops across multihomed sites. Each leaf could set
        a unique SoO value on its originated routes.</t>
        <t>Advantages: standardized and transitive; can be matched in
        policy and extracted to local metadata; and it aligns with EVPN
        deployments that already use SoO.</t>
        <t>Drawbacks: SoO's loop-prevention behavior is useful for its
        intended VPN/EVPN use case, but it makes SoO a less clean fit for
        plain unicast underlay metadata, where the desired property is
        passive origin identification without any implicit loop-prevention
        semantics. Where an operator does configure SoO-based procedures on
        the underlay, a route whose SoO matches the local site-origin
        context may be rejected or suppressed; in a correctly numbered
        fabric this does not trigger, but misconfiguration or unexpected
        reflection can cause hard-to-diagnose route loss (relevant to R3).
        Finally, SoO provides only two fields with a 16-bit value, so it
        cannot cleanly encode pod, leaf, and port (weak on R6). SoO may be
        an acceptable choice when an EVPN overlay is already deployed and a
        single mechanism is preferred; see <xref target="coexistence"/>.</t>
      </section>

      <section anchor="cm-generic-ec">
        <name>Generic (Opaque) Extended Community</name>
        <t>A transitive opaque Extended Community <xref target="RFC4360"/>
        could carry an opaque leaf identifier in its value bits.</t>
        <t>Advantages: transitive across eBGP; type-coded.</t>
        <t>Drawbacks: the encoding is opaque with no standardized semantic
        meaning, configuration is more complex, and operational visibility
        is poor compared with Large Communities or SoO. It is not
        recommended for this use case.</t>
      </section>

      <section anchor="cm-future">
        <name>Future: Path-Recording Attributes</name>
        <t>Work-in-progress BGP extensions that record the set of nodes a
        route has traversed could, in the future, expose the originating
        leaf as the first node in a recorded path, in addition to full
        hop-by-hop path visibility. Such mechanisms are broader than the
        origin-only requirement addressed here, are not yet standardized,
        and have uncertain deployment timelines. They may become relevant
        for use cases requiring full path visibility (for example, advanced
        traffic engineering or SLA monitoring) but are not recommended for
        origin-leaf-only identification today.</t>
      </section>

      <section anchor="cm-comparison">
        <name>Comparison</name>
        <table anchor="comparison-table">
          <name>Comparison of Candidate Mechanisms</name>
          <thead>
            <tr>
              <th>Criterion</th>
              <th>Unique ASN</th>
              <th>Standard Community</th>
              <th>Large Community</th>
              <th>SoO Ext. Community</th>
              <th>Generic Ext. Community</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Value space</td>
              <td>Finite ASN pool</td>
              <td>16-bit per field</td>
              <td>32-bit per field</td>
              <td>ASN:16-bit or IP:16-bit</td>
              <td>48-bit opaque</td>
            </tr>
            <tr>
              <td>Structured encoding</td>
              <td>No</td>
              <td>Partial (2 fields)</td>
              <td>Yes (3 fields; packing depends on encoding)</td>
              <td>Partial (2 fields)</td>
              <td>Opaque</td>
            </tr>
            <tr>
              <td>Survives N eBGP hops</td>
              <td>Yes</td>
              <td>Yes (if not stripped)</td>
              <td>Yes (if not stripped)</td>
              <td>Yes (transitive)</td>
              <td>Yes</td>
            </tr>
            <tr>
              <td>IPv4 and IPv6 unicast</td>
              <td>Yes</td>
              <td>Yes</td>
              <td>Yes</td>
              <td>Yes</td>
              <td>Yes</td>
            </tr>
            <tr>
              <td>Operational clarity</td>
              <td>Requires ASN lookup</td>
              <td>Readable</td>
              <td>Readable; per-field matching depends on encoding</td>
              <td>Readable</td>
              <td>Opaque/hex</td>
            </tr>
            <tr>
              <td>BGP selection impact</td>
              <td>AS_PATH length</td>
              <td>None</td>
              <td>None</td>
              <td>Loop-prevention rejection (VPN/EVPN procedures)</td>
              <td>None</td>
            </tr>
            <tr>
              <td>Namespace isolation</td>
              <td>None</td>
              <td>Shared with policy</td>
              <td>Per assigning ASN; partitioned by dedicated ASN or function value</td>
              <td>Dedicated (VPN semantics)</td>
              <td>Dedicated</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC 4271</td>
              <td>RFC 1997</td>
              <td>RFC 8092</td>
              <td>RFC 4364</td>
              <td>RFC 4360</td>
            </tr>
            <tr>
              <td>Plain unicast (no EVPN)</td>
              <td>Works</td>
              <td>Works</td>
              <td>Recommended</td>
              <td>Works, VPN semantics</td>
              <td>Not recommended</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>

    <section anchor="recommended-solution">
      <name>Recommended Solution</name>
      <t>For plain IPv4/IPv6 unicast eBGP underlays this document
      RECOMMENDS encoding the origin-leaf identifier in a BGP Large
      Community <xref target="RFC8092"/>. Large Communities satisfy the
      requirements in <xref target="requirements"/>: each field is 32 bits
      (ample scale); they occupy a namespace separate from Standard
      Communities that can be partitioned per assigning ASN or per function
      value; they have no effect on BGP best-path selection; they are
      matchable by inbound policy; and they are preserved across eBGP hops
      when advertisement of Large Communities is enabled.</t>

      <section anchor="encoding">
        <name>Encoding</name>
        <t>The Global Administrator field of the Large Community carries an
        assigning ASN that serves as the authority for the origin
        identifier, preserving its RFC 8092 meaning. Because the same ASN
        may also be the Global Administrator of other Large Communities (for
        example, those following <xref target="RFC8195"/>), the origin-leaf
        identifier MUST NOT overlap with any other Large Community defined
        under the same assigning ASN. Two namespace allocation models
        achieve this: a dedicated assigning ASN
        (<xref target="dedicated-asn"/>) or a reserved function value within
        a shared ASN (<xref target="function-based"/>).</t>

        <t>A deployment MUST use exactly one of the encodings below
        consistently within a given fabric, so that every receiver
        interprets origin-leaf Large Communities the same way. Any packing
        constants (N, and L in the function-based encoding) and any
        function value MUST also be consistent across the fabric and
        documented, so that receivers decode the identifier
        identically.</t>

        <section anchor="dedicated-asn">
          <name>Dedicated Assigning ASN</name>
          <t>In this model, the assigning ASN is reserved exclusively for
          origin-leaf identification within the fabric: no other Large
          Community is defined under it. Both Local Data fields are
          therefore available to the identifier. Two encodings are
          possible, depending on the fabric's ASN model.</t>

          <t>In deployments where each pod has a distinct ASN that serves
          as the assigning authority for origin identifiers within that pod,
          and that carries no other Large Communities, the Global
          Administrator field MAY be set to the pod ASN, yielding:</t>
          <artwork name="encoding-pod-asn.txt"><![CDATA[
   <pod-asn> : <leaf-id> : <port-id>
]]></artwork>
          <t>For this encoding to be unambiguous, the pod ASN MUST be unique
          within the administrative domain in which the origin identifier is
          interpreted. If the same ASN is reused across pods, the resulting
          identifiers are ambiguous and the fabric-wide encoding below MUST
          be used instead. Because the pod component is the pod ASN itself,
          this encoding satisfies R11 only as long as pod ASNs are
          stable.</t>
          <t>Otherwise, deployments SHOULD use a fabric-wide ASN as the
          Global Administrator and carry the pod identifier in a Local Data
          field, yielding:</t>
          <artwork name="encoding-fabric-asn.txt"><![CDATA[
   <fabric-asn> : <pod-id> : <leaf-port-id>

   leaf-port-id = (leaf << N) | port
]]></artwork>

          <t>In the per-pod-ASN encoding, pod, leaf, and port are all
          directly matchable (the pod via the Global Administrator ASN, the
          leaf and port via their own Local Data fields). In the fabric-wide
          encoding, the pod is directly matchable but the leaf and port
          share a Local Data field, so matching on them requires decoding or
          precomputed values.</t>
        </section>

        <section anchor="function-based">
          <name>Function-Based Allocation</name>
          <t>In this model, the assigning ASN is shared with other Large
          Communities. Following the "ASN:Function:Parameter" convention of
          <xref target="RFC8195"/>, the first Local Data field carries an
          operator-reserved function value that identifies the community as
          an origin-leaf identifier, and the second Local Data field carries
          the pod, leaf, and port packed together:</t>
          <artwork name="encoding-function.txt"><![CDATA[
   <fabric-asn> : <function-id> : <pod-leaf-port-id>

   pod-leaf-port-id = (pod << (L + N)) | (leaf << N) | port
]]></artwork>
          <t>L and N are fabric-wide constants giving the widths of the leaf
          and port components; the pod component occupies the remaining
          32 - (L + N) bits. The function value is chosen by the operator
          from values not otherwise used under the assigning ASN. Other
          profiles, such as route-attachment metadata
          (<xref target="attachment-metadata"/>), can coexist under the same
          ASN by reserving distinct function values.</t>
          <t>The function value is directly matchable; matching on
          individual pod, leaf, or port components requires decoding or
          precomputed values.</t>
        </section>

        <section anchor="encoding-fields">
          <name>Field Definitions and Examples</name>
          <dl newline="false">
            <dt>pod-asn / fabric-asn:</dt>
            <dd>The Global Administrator field, set to the assigning ASN: the
            ASN of the originating pod in the per-pod-ASN encoding, or a
            single fabric-wide ASN otherwise. This keeps the encoding within
            the namespace delegated to that ASN, avoiding collisions with
            Large Communities defined by other administrations. The chosen
            ASN need not be used by every BGP speaker in the fabric. If a
            private ASN is used, the resulting Large Community is only
            meaningful within the administrative domain and SHOULD be
            stripped at its boundaries (see
            <xref target="security"/>).</dd>
            <dt>leaf-id / pod-id / function-id:</dt>
            <dd>The first Local Data field. In the per-pod-ASN encoding it
            identifies the leaf that originated the prefix; in the
            fabric-wide encoding it identifies the originating pod; in the
            function-based encoding it carries the reserved function
            value.</dd>
            <dt>port-id / leaf-port-id / pod-leaf-port-id:</dt>
            <dd>The second Local Data field. In the per-pod-ASN encoding it
            optionally identifies the originating port and MAY be set to a
            fixed value (for example 0) where only pod- and leaf-level
            granularity is required. In the fabric-wide encoding it carries
            the leaf and port packed as shown above. In the function-based
            encoding it carries the pod, leaf, and port packed as shown
            above.</dd>
          </dl>
          <t>For example, for pod 2, leaf 7, port 1:</t>
          <ul>
            <li>Per-pod-ASN encoding with pod ASN 65002: "65002:7:1".</li>
            <li>Fabric-wide encoding with fabric ASN 65000 and N = 10:
            "65000:2:7169" (7169 = (7 &lt;&lt; 10) | 1).</li>
            <li>Function-based encoding with fabric ASN 65000, function
            value 100, L = 12, and N = 10: "65000:100:8395777"
            (8395777 = (2 &lt;&lt; 22) | (7 &lt;&lt; 10) | 1).</li>
          </ul>
          <t>The port component is OPTIONAL. Operators MAY constrain field
          ranges to match their fabric dimensions. The specific values of
          the assigning ASN, function value, pods, leaves, and ports, and the
          choice of L and N, are fabric-management concerns and are out of
          scope for this document (see
          <xref target="deployment-considerations"/>).</t>
        </section>

        <section anchor="encoding-choice">
          <name>Choosing an Allocation Model</name>
          <t>The two models trade identifier space against namespace
          flexibility:</t>
          <table anchor="allocation-table">
            <name>Comparison of Namespace Allocation Models</name>
            <thead>
              <tr>
                <th>Criterion</th>
                <th>Dedicated assigning ASN</th>
                <th>Function-based allocation</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Identifier space</td>
                <td>64 bits (both Local Data fields)</td>
                <td>32 bits (e.g., 10/12/10 bits: 1024 pods, 4096 leaves, 1024 ports)</td>
              </tr>
              <tr>
                <td>Namespace requirement</td>
                <td>An ASN (or one per pod) carrying no other Large Communities</td>
                <td>One function value under an ASN shared with other uses</td>
              </tr>
              <tr>
                <td>Additional profiles</td>
                <td>Each requires another dedicated ASN</td>
                <td>Each requires another function value</td>
              </tr>
              <tr>
                <td>Per-component matching</td>
                <td>Direct in per-pod-ASN encoding; partial in fabric-wide encoding</td>
                <td>Requires decoding or precomputed values</td>
              </tr>
              <tr>
                <td>Local metadata mapping</td>
                <td>Requires repacking (<xref target="mapping-to-local-metadata"/>)</td>
                <td>On-wire value can be used directly when layouts agree</td>
              </tr>
            </tbody>
          </table>
          <t>The dedicated-ASN model offers the larger identifier space and
          simpler matching; it is appropriate where an ASN can be reserved
          for this purpose. The function-based model scales better in terms
          of namespace usage, since it coexists with any other Large
          Community use under the same ASN and accommodates further profiles
          without consuming additional ASNs; its 32-bit identifier space is
          ample for current fabric sizes.</t>
        </section>
      </section>

      <section anchor="attachment-metadata">
        <name>Route-Attachment Metadata Profile</name>
        <t>Although this document focuses on identifying the originating
        pod, leaf, and optionally port of a prefix, the same Large Community
        construction can represent other route-associated attachment
        identifiers within the same administrative domain. For example, an
        operator MAY encode a locally assigned switch identifier and port
        identifier, under a dedicated assigning ASN, as:</t>
        <artwork name="attachment-switch-port.txt"><![CDATA[
   <fabric-asn> : <switch-id> : <port-id>
]]></artwork>
        <t>or, where pod scoping is required:</t>
        <artwork name="attachment-pod-switch-port.txt"><![CDATA[
   <fabric-asn> : <pod-id> : <switch-port-id>
]]></artwork>
        <t>or, under function-based allocation:</t>
        <artwork name="attachment-function.txt"><![CDATA[
   <fabric-asn> : <function-id> : <switch-port-id>
]]></artwork>
        <t>where switch-port-id is a deployment-defined packed value. The
        namespace rules of <xref target="encoding"/> apply: an ASN dedicated
        to origin-leaf identification MUST NOT also carry attachment
        metadata, and under function-based allocation the attachment profile
        MUST use a function value distinct from the origin-leaf one. This
        profile is useful when the receiver needs to associate a route with
        the fabric attachment point used for forwarding, admission control,
        traffic placement, or congestion-avoidance policy.</t>
        <t>Such identifiers are locally significant unless otherwise
        specified by the operator. The mapping from switch-id to a device
        address, router ID, or inventory object is a fabric-management
        concern and is out of scope for this document.</t>
        <t>For locally significant route-attachment metadata consumed within
        a single administrative domain, the same information can be
        represented using existing BGP Large Communities without defining a
        new BGP path attribute or community type.</t>
      </section>

      <section anchor="propagation">
        <name>Propagation Model</name>
        <t>The operational model is as follows:</t>
        <ol>
          <li><t>Origination: The originating leaf attaches the Large
          Community carrying its origin-leaf identifier, in the encoding
          chosen for the fabric (<xref target="encoding"/>), to each prefix
          it originates.</t></li>
          <li><t>Transit: Spines and super-spines advertise the prefix
          unchanged, preserving the Large Community. Intermediate speakers
          MUST NOT strip or overwrite the Large Community; where policy adds
          communities at intermediate nodes, additive semantics MUST be
          used so the origin community is preserved.</t></li>
          <li><t>Reception: Each receiving leaf matches the Large Community
          in inbound policy and extracts the origin-leaf identity into
          local metadata for use in policy and, where applicable, for
          programming the forwarding plane.</t></li>
        </ol>
        <t>Advertisement of Large Communities is not implied by
        advertisement of Standard Communities; operators MUST explicitly
        enable Large Community advertisement on every eBGP session in the
        propagation path. This applies per Address Family, including the
        IPv6 unicast AF.</t>

        <t>The origin-leaf identifier is meaningful only within the fabric
        in which it is assigned. At DC boundaries, such as data-center
        interconnect (DCI) points, it is normally removed by export policy
        (R13; see <xref target="security"/>), and inter-DC advertisements commonly use
        aggregate routes, which do not identify a single originating leaf. A
        BGP speaker that aggregates routes within the fabric SHOULD NOT copy
        origin-leaf Large Communities from the contributing routes onto the
        aggregate; otherwise the aggregate carries multiple origin-leaf
        communities (see below).</t>

        <t>Receiving leaves need well-defined handling for origin-leaf
        Large Communities that are unexpected, duplicated, or malformed.
        Deployments using the route-attachment metadata profile
        (<xref target="attachment-metadata"/>) SHOULD apply analogous
        validation rules for assigning authority, duplicate matching
        communities, and out-of-range attachment identifiers.</t>
        <ul>
          <li><t>Unexpected assigning authority: A receiver SHOULD ignore,
          for the purpose of origin-leaf identification, any Large
          Community whose Global Administrator field does not match a
          configured assigning ASN (a fabric-wide ASN, or one of the pod
          ASNs in the per-pod-ASN encoding) or, in the function-based
          encoding, whose first Local Data field does not match the
          configured function value. Such communities are treated as
          ordinary Large Communities and are not mapped to origin-leaf
          metadata.</t></li>
          <li><t>Multiple matching communities: A route MAY carry more than
          one origin-leaf Large Community (for example, following an
          unexpected re-advertisement, an aggregation that inherits
          communities, a misconfiguration, or a malicious injection). The
          RECOMMENDED default is to treat the origin identity as ambiguous,
          map no origin-leaf metadata, and log the condition, so that a
          wrong identity is never silently programmed into the forwarding
          plane. A deployment MAY instead select a single community by a
          documented, repeatable rule (for example, the numerically lowest
          value); if it does, that rule MUST be deterministic and the
          condition SHOULD be logged.</t></li>
          <li><t>Malformed or out-of-range values: If the pod, leaf, or
          port value decoded from a matching community falls outside the
          ranges defined for the deployment (including any local metadata
          packing described in <xref target="mapping-to-local-metadata"/>),
          the receiver MUST NOT map it to forwarding-plane metadata. The
          route SHOULD still be installed and forwarded normally, without
          origin-leaf metadata, and the condition SHOULD be logged.</t></li>
        </ul>
      </section>

      <section anchor="mapping-to-local-metadata">
        <name>Mapping to Local Metadata</name>
        <t>At the receiving leaf, the pod, leaf, and port values carried in
        the Large Community can be mapped to a single fixed-width local
        metadata value for compact storage and efficient forwarding-plane
        use. This local packing is distinct from the on-wire
        "leaf-port-id = (leaf &lt;&lt; N) | port" packing of the fabric-wide
        encoding (see <xref target="dedicated-asn"/>): it is receiver-local,
        is not carried in BGP, and combines all three values. The example
        below uses the fabric-wide encoding, whose pod-id is a small
        integer. One convenient mapping packs the three values into a
        32-bit value using disjoint bit ranges, for example a 10-bit pod
        field, a 12-bit leaf field, and a 10-bit port field:</t>
        <artwork name="bitpack.txt"><![CDATA[
   value = (asn-pod << 22) | (leaf << 10) | port

   Bit layout (32-bit value):
     [31:22] = Pod  (10 bits; asn-pod index)
     [21:10] = Leaf (12 bits)
     [9:0]   = Port (10 bits)
]]></artwork>
        <t>The exact width and layout of such a packed value is a local
        implementation choice and is not carried on the wire; only the
        Large Community itself is propagated between BGP speakers. Operators
        SHOULD document the chosen layout so that it can be interpreted
        consistently across the fabric and across software versions.</t>
        <t>In the function-based encoding (<xref target="function-based"/>),
        the on-wire pod-leaf-port-id already has this form; when the local
        layout uses the same L and N, it can be used directly as the local
        value without repacking.</t>
        <t>The "asn-pod" field above is a compact pod index. In the
        fabric-wide and function-based encodings it is the small-integer pod
        identifier directly. In the per-pod-ASN encoding the pod is
        represented by the pod ASN, which does not fit in a small pod field;
        deployments using that encoding first translate the pod ASN to a
        compact local pod index (for example via a configured pod-ASN to
        pod-index table) before packing, or choose a local layout wide
        enough to hold the ASN.</t>
      </section>
    </section>

    <section anchor="coexistence">
      <name>Coexistence with EVPN/VXLAN Overlays</name>
      <t>The recommended Large Community mechanism is orthogonal to overlay
      loop-prevention mechanisms. When a VXLAN/EVPN overlay is later added,
      some EVPN deployments - particularly symmetric L3VNI, multihoming, or
      interconnect designs - use the SoO Extended Community
      <xref target="RFC7432"/> <xref target="RFC9136"/> to prevent
      re-advertisement loops. The underlay Large Community continues to
      convey origin-leaf metadata independently. A route may therefore
      carry both a Large Community (underlay origin metadata) and an SoO
      Extended Community (overlay loop prevention) without conflict; no
      migration of the underlay tagging is required. This satisfies
      R9.</t>
      <t>Where an EVPN overlay is already deployed and operators strongly
      prefer a single mechanism for both underlay and overlay, SoO MAY be
      used for underlay origin identification instead, accepting the
      encoding and side-effect limitations described in
      <xref target="cm-soo"/>. For new plain-unicast fabrics, the Large
      Community approach remains RECOMMENDED.</t>
    </section>

    <section anchor="operational">
      <name>Operational Considerations</name>
      <ul>
        <li><t>Community preservation: Any BGP speaker in the path that
        applies non-additive community-setting policy can inadvertently
        erase the origin community. All fabric devices SHOULD be audited to
        confirm pass-through behavior.</t></li>
        <li><t>Heterogeneous fabrics: If the fabric includes BGP speakers
        from multiple implementations, Large Community support
        <xref target="RFC8092"/> SHOULD be verified on all of them.</t></li>
        <li><t>ECMP and best-path: Large Communities have no effect on
        best-path selection. Multiple equal-cost paths from different
        leaves each carry their own identifier; any preference among them
        MUST be expressed with explicit policy.</t></li>
        <li><t>Fabric changes: When a leaf is renumbered or replaced, only
        the originating leaf's policy needs to change; no other device
        requires reconfiguration.</t></li>
        <li><t>IPv6: The same encoding and policy apply identically to the
        IPv6 unicast AF; Large Community advertisement MUST be enabled per
        AF.</t></li>
      </ul>
    </section>

    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <ul>
        <li>Standardizing the pod, leaf, and port numbering scheme within a
        fabric is a fabric-management concern and is out of scope for this
        document.</li>
        <li>Whether the community is attached at redistribution time, at
        prefix-origination time, or via per-neighbor outbound policy is an
        operational choice.</li>
        <li>Whether to strip the community at the fabric border toward
        external peers is discussed in <xref target="security"/>.</li>
        <li>When the identifier represents a switch or port rather than an
        originating leaf (see <xref target="attachment-metadata"/>), operators
        SHOULD ensure that the identifier namespace is stable across device
        replacement, interface renumbering, and software upgrades. The
        identifier SHOULD refer to a fabric-management object rather than an
        implementation-specific ifIndex unless the deployment explicitly
        accepts ifIndex churn.</li>
      </ul>
    </section>

    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. It defines no new BGP path
      attribute, community, or code point; it describes an operational use
      of the existing BGP Large Communities attribute
      <xref target="RFC8092"/>.</t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>The mechanism described here reuses existing BGP capabilities and
      introduces no new protocol machinery, so it does not change the
      fundamental security properties of BGP <xref target="RFC4271"/>.
      The following operational considerations apply.</t>
      <t>The origin-leaf or route-attachment Large Community reveals
      internal fabric topology (pod, leaf, port, or switch structure). To
      avoid leaking this information to parties outside the administrative
      domain, operators SHOULD apply export policy at the fabric border
      that removes the origin-leaf or route-attachment Large Community on
      advertisement toward external peers (R13). These communities are identified by their assigning ASN and,
      in the function-based encoding, their function value.</t>
      <t>Conversely, an origin-leaf or route-attachment Large Community
      received from outside the fabric could be used to inject a forged
      origin identity, which might mislead origin-leaf-aware policy.
      Operators SHOULD therefore remove or sanitize these Large Communities
      on ingress from external peers at all border devices, so that only
      communities set by trusted fabric devices are honored. The identifier
      is not cryptographically authenticated; its trustworthiness depends
      entirely on border filtering and on trust in the fabric's BGP
      speakers.</t>
      <t>Because the mechanism relies on Large Communities being preserved
      across eBGP hops, operators should be aware that a compromised or
      misconfigured intermediate speaker could alter or remove the
      identifier; standard BGP hardening and configuration-audit practices
      apply.</t>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8092.xml"/>
      </references>

      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1997.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4271.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4360.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4364.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4456.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4761.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6514.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7432.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7938.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8195.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9136.xml"/>
      </references>
    </references>

    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Stephane Litkowski for his review
      and comments.</t>
    </section>

  </back>
</rfc>
