<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
	<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
	<!ENTITY RFC8277 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8277.xml">
	<!ENTITY RFC4271 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4271.xml">
	<!ENTITY RFC4272 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4272.xml">
	<!ENTITY RFC4760 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4760.xml">
	<!ENTITY RFC6790 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6790.xml">
	<!ENTITY RFC7447 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7447.xml">
	<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
	<!ENTITY I-D.ietf-idr-next-hop-capability SYSTEM 
	  "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-idr-next-hop-capability.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<!-- ><?rfc toc="no"?> -->
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-scudder-bgp-entropy-label-00" ipr="trust200902">


  <front>
    <title abbrev="ELCv2">BGP Entropy Label Capability, Version 2</title>

    <author fullname="John G. Scudder" initials="J. G."
            surname="Scudder">
      <organization>Juniper Networks</organization>
      <address>
        <email>jgs@juniper.net</email>
      </address>
    </author>

    <author fullname="Kireeti Kompella" initials="K."
            surname="Kompella">
      <organization>Juniper Networks</organization>
      <address>
        <email>kireeti@juniper.net</email>
      </address>
    </author>

    <date/>

    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>BGP</keyword>
    <keyword>MPLS</keyword>

    <abstract>
		<t>
RFC 6790 defined the Entropy Label Capability Attribute (ELC); RFC 7447
deprecated that attribute.  This specification, dubbed "Entropy Label
Capability Attribute version 2" (ELCv2), was intended to be offered
for standardization, to replace the ELC as a way to signal that a BGP
protocol speaker is capable of processing entropy labels.
	    </t>
	    <t>  
Although ultimately a different specification was chosen for that
purpose, at least one implementation of ELCv2 was shipped by Juniper
Networks and is currently in use in service provider networks.  This
document is published in order to document what was implemented.
	    </t>
    </abstract>
  </front>

<middle>
<section anchor="intro" title="Introduction">
	<t>
<xref target="RFC6790"/> defines the Entropy Label Capability attribute 
(ELC), an optional, transitive BGP path attribute. For correct operation,
it is necessary that any intermediate node modifying the next hop of a 
route must remove the ELC unless the node so doing is able to process
entropy labels. Sadly, these requirements cannot be fulfilled with the 
ELC as specified, because it is an optional, transitive attribute: by
definition, a node that does not support the ELC will propagate the 
attribute. But such a node might be exactly the one that we desire to remove
it.
	</t>
	<t>
Ultimately the IDR working group adopted 
<xref target="I-D.ietf-idr-next-hop-capability"/> as a proposed solution 
for this and similar problems. However, prior to that, at least one 
implementation of this specification was shipped, by Juniper Networks.
The shipping implementation uses the code point that was assigned by 
RFC 6790, and deprecated by RFC 7447. This document explains what was
implemented and deployed, dubbed "Entropy Label Capability Attribute 
version 2" (ELCv2).
	</t>
	<t>
Although <xref target="I-D.ietf-idr-next-hop-capability"/> uses an
optional, non-transitive path attribute, at the time ELCv2 was 
developed it was decided that an optional, non-transitive solution
would over-constrain the
deployment options available -- in many cases (for example, route
reflectors) it's fine that an intermediate node does propagate an
ELC even if it doesn't itself have the ability to process entropy
labels. 
	</t>
	<t>
Instead, in this specification, we take the approach of carrying a
copy of the next hop information in the ELCv2. This allows the node
processing it to know if it can rely on the information carried
therein, while still allowing it to be propagated by all
intermediate nodes.
	</t>

	<section title="Requirements Language">
		<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">BCP 14</xref> <xref
		target="RFC8174"/> when, and only when, they appear in all
		capitals, as shown here.</t>
	</section>
</section>

<section anchor="ELCv2" title="Entropy Label Capability Path Attribute, Version 2">
     <t>
The Entropy Label Capability Path Attribute, Version 2 (ELCv2) is an
optional, transitive BGP attribute (for the attribute type code, see
<xref target="iana"/>). The ELCv2 has as its data a network layer
address, representing the next hop of the route the ELCv2 accompanies. 
The ELCv2 signals a useful optimization, so it is desirable to make it
transitive; the next hop data is to ensure correctness across BGP
speakers that do not understand the ELCv2.   
	</t>
	<t>
The Attribute Data field of the ELCv2 path attribute is encoded as
shown below:
	</t>
	<t>
    	<figure align="center">
    		<artwork align="left"><![CDATA[
   +---------------------------------------------------------+
   | Address Family Identifier (2 octets)                    |
   +---------------------------------------------------------+
   | Subsequent Address Family Identifier (1 octet)          |
   +---------------------------------------------------------+
   | Length of Next Hop Network Address (1 octet)            |
   +---------------------------------------------------------+
   | Network Address of Next Hop (variable)                  |
   +---------------------------------------------------------+
			]]></artwork>
    	</figure>
	</t>
	<t>
The meanings of the fields are as given in Section 3 of <xref
target="RFC4760"/>.
	</t>
	<t>
When BGP <xref target="RFC4271"/> is used for distributing labeled
Network Layer Reachability Information (NLRI) as described in, for
example, <xref target="RFC8277"/>, the route may include the ELCv2 as
part of the Path Attributes.  The inclusion of this attribute with a
route indicates that the egress of the associated Label Switched Path
(LSP) can process entropy labels as an egress Label Switched Router
(LSR) for that route -- see <xref target="RFC6790" section="4.2"/>. 
Below, we refer to this for brevity as being "EL-capable."
	</t>
	
	<section anchor="sending" title="Sending the ELCv2">
	<t>
When a BGP speaker S has a route R it wishes to advertise with next hop
N to its peer, it MUST NOT include the ELCv2 attribute except if it
knows that the egress of the associated LSP L is EL-capable.
Specifically, this will be true if S:
	</t>
	
	<t>
	<list style="symbols">
		<t>
	Is itself the egress, and knows itself to be EL-capable, or
		</t>
		
		<t>
	Is re-advertising a BGP route it received with a valid
	ELCv2 attribute, and is not changing the value of N, or
		</t>
		
		<t>
	Is re-advertising a BGP route it received with a valid ELCv2
	attribute, and is changing the value of N, and knows (for example,
	through configuration) that the router represented by N is either
	the LSP egress and is EL-capable, or that it will process the
	outer label(s) without processing the entropy label below, as 
	with a transit LSR, or
		</t>
		
		<t>
	Is redistributing a route learned from another protocol, and
	that other protocol conveyed the knowledge that the egress of L
	was EL-capable (for example, this might be known through the LDP
	ELC TLV, <xref target="RFC6790" section="5.1"/>).
		</t>
	</list>
	</t>
	
	<t>
In any event, when sending an ELCv2, S MUST set the data portion of the
ELCv2 to be equal to N, using the encoding given in <xref
target="ELCv2"/>.
	</t>
		
	<t>
The ELCv2 MAY be advertised with routes that are labeled,
such as those using SAFI 4 <xref target="RFC8277"/>. It MUST NOT
be advertised with unlabeled routes.
	</t>

	<t>
We note that due to the nature of BGP optional transitive path attributes,
any BGP speaker that does not implement this specification will propagate
the ELCv2, the requirements of this section notwithstanding. However,
such a speaker will not update the data part of the ELCv2.
	</t>
	</section>
	
	<section anchor="receiving" title="Receiving the ELCv2">
	<t>
When a BGP speaker receives an unlabeled route that includes the ELCv2,
it MUST discard the ELCv2.
	</t>
	<t>
When a BGP speaker receives a labeled route that includes the ELCv2, it
MUST compare the ELCv2's data portion to the next hop of the route. If the two
are equal, the egress of the LSP supports entropy labels, which implies
that the receiving BGP speaker, if acting as ingress, MAY insert an
entropy label below the advertised label, as per <xref
target="RFC6790" section="4.2"/>. If the two are not equal, either some
intermediate router that does not implement this specification modified
the next hop, or some router on the path had an incorrect
implementation. In either case, the action taken is the same: the ELCv2
MUST be discarded. The Partial bit MAY be inspected -- if it is equal to
zero, then the mismatch must have been caused by an incorrect
implementation, and the error MAY be logged.
	</t>
	<t>
When a BGP speaker receives a route that includes an ELCv2 whose
Attribute Length is less than 4, whose Attribute Length is not equal to
4 plus the value encoded in the Length of Next Hop Network Address
carried in the Attribute Data, or whose Attribute Data is otherwise
inconsistent with the encoding specified in <xref target="ELCv2"/>, it
MUST discard the ELCv2.
	</t>
	</section>
</section>
	
<section anchor="iana" title="IANA Considerations">
	<t>
As per <xref target="RFC7447"/>, IANA has deprecated BGP attribute
28.  That deprecated type code is used by implementations of this
specification. IANA is requested to update the references for attribute
28 to include this specification.
	</t>
</section>
        
<section title="Security Considerations">
	<t>
Insertion of an ELCv2 by an attacker could cause forwarding to fail.
Deletion of an ELCv2 by an attacker could cause one path in the network
to be overutilized and another to be underutilized. However, we note
that an attacker able to accomplish either of these (below, an "on-path
attacker") could equally insert or remove any other BGP path attribute
or message. The former attack described above denies service for a given
route, which can be accomplished by an on-path attacker in any number of
ways even absent ELCv2. The latter attack defeats an optimization but
nothing more; it seems dubious that an attacker would go to the trouble
of doing so rather than launching some more damaging attack. In sum, the 
ELCv2 attribute creates no significant issues beyond those analyzed in 
<xref target="RFC4272"/>. 
	</t>
</section>

<section title="Acknowledgements">
	<t>
Thanks to Alia Atlas, Bruno Decraene, Martin Djernaes, John Drake,
Adrian Farrell, Keyur Patel, Ravi Singh, and Jim Uttaro for their
discussion of this issue. Particular thanks to Kevin Wang for his
many valuable contributions.
	</t>
</section>
</middle>

<back>
	<references title="Normative References">
      &RFC2119;
      &RFC4271;
      &RFC4760;
      &RFC6790;
	  &RFC7447;
	  &RFC8174;
    </references>

	<references title="Informative References">
      &RFC8277;
      &RFC4272;
      &I-D.ietf-idr-next-hop-capability;
    </references>
</back>
</rfc>
