<?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 RFC2385 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2385.xml">
<!ENTITY RFC4271 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4271.xml">
<!ENTITY RFC5925 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5925.xml">
<!ENTITY I-D.keyupate-i2rs-bgp-usecases SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.keyupate-i2rs-bgp-usecases.xml">
<!ENTITY I-D.ietf-idr-custom-decision SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-idr-custom-decision.xml">
<!ENTITY I-D.ietf-mpls-seamless-mpls SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-mpls-seamless-mpls">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="no" ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<rfc category="std" docName="draft-zhang-idr-nexthop-path-record-00"
     ipr="trust200902">
  <front>
    <title abbrev="BGP NEXTHOP_PATH_RECORD">NEXTHOP_PATH_RECORD ATTIBUTE for BGP</title>

    <author fullname="Zhenbin Li" initials="Z. " surname="Li">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>

        <email>lizhenbin@huawei.com</email>
      </address>
    </author>

    <author fullname="Li Zhang" initials="L." surname="Zhang ">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>
        <email>monica.zhangli@huawei.com</email>
      </address>
    </author>
	<author fullname="Susan Hares" initials="S." surname="Hares ">
      <organization>Huawei Technologies</organization>
	  <address>
		<postal>
          <street>7453 Hickory Hill</street>

          <city>Saline</city>

          <region>MI</region>

          <code>48176</code>

          <country>USA</country>
        </postal>
        <email>shares@ndzh.com</email>
     </address> 
    </author>

    <date year="2014"/>

    <abstract>
      <t>As the BGP is deployed in a single Autonomous System using 
	  converged networks such as Seamless MPLS, it is desirable for BGP
	  to carry more IGP nexthop pathway information to help select
	  routing more intelligently. One example of a Seamless MPLS
	  deployment is the Mobile BackHaul (MBH) deployment with multiple
	  IGPs Areas per ASN. This document describes a new optional
      transitive path attribute, NEXTHOP_PATH_RECORD ATTRIBUTE for BGP 
	  that records the next hop path which can be used 
	  by BGP network management to monitor and manage the
	  BGP infrastructure via management interfaces (such as I2RS). 
	  </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">RFC 2119</xref>.</t>
    </note>
  </front>
  <middle>
    <section title="Introduction" >
	<t> Network topologies have become more densely interconnected
	at the network level. Examples of this mesh topologies can
    be a data center or the converged carrier network that 
	<xref target="I-D.ietf-mpls-seamless-mpls"></xref> architecture supports. 
	In these mesh topologies, there may be multiple highly meshed IGPs connected
	by IBGP into a single AS. Scalability and redundancy may require
	exterior processes to calculate a better way through the 
   	array of next-hop pathways attached to BGP Routes of any AFI/SAFI pairing. </t>  
    <t>This document proposes a new path attribute that can record the next
      hop path of the route to help BGP route election and network
      management. In the deployment considerations section, this
	  draft provides a deployment scenario linked to the 
	  use of I2RS and BGP Cost Community attribute.	</t>  
    </section>
    <section title="Definition of NEXTHOP_PATH_RECORD ATTRIBUTE">
      <t>The NEXTHOP_PATH_RECORD ATTRIBUTE is an optional transitive BGP Path
      Attribute. The NEXTHOP_PATH_RECORD ATTRIBUTE type is defined as below (refer to
       <xref target="RFC4271"></xref> ):</t>

      <t><figure>
          <artwork>
               0                   1
               0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |  Attr. Flags  |Attr. Type Code|
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

         Figure 2 NEXTHOP_PATH_RECORD Type definition
		 </artwork>
        </figure>Attr. Flags</t>

      <t>SHOULD be optional transitive</t>

      <t>Attr. Type Code</t>

      <t>SHOULD be allocated by IANA</t>

      <t>NEXTHOP_PATH_RECORD is composed of a sequence of next hop path segments.
      Each next hop path segment is represented by a triple &lt;path segment
      type, path segment length, path segment value&gt;. The format of the
      next hop path segment is shown in the figure 3.</t>
      <t>
      <figure align="center">
        <artwork>
        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
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |   Type        |   Length                      |  Reserved     |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                        Next Hop                               |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 3  NH_SEQUENCE_V4 TLV
	  </artwork>
      </figure>
	  </t>
      <t>- Type: A single octet encoding the TLV Type. 
	  
	  The Type of
      "NH_SEQUENCE_V4" is defined in this document, which needs to be
      allocated by IANA. The procedure for next hop path segment usage for
      IPv6 or other extensions will be described in the future revisions
	  of this document. </t>

      <t>Length: Two octets encoding the length in octets of the TLV,
      including the type and length fields. The length is encoded as an
      unsigned binary integer.</t>

      <t>Reserved: A single octet that must be zero now.</t>

      <t>NextHop: four octets encoding for the route next hop address.</t>
    </section>
    <section title="Process of NEXTHOP_PATH_RECORD ATTRIBUTE" >
	
	<t> The NEXTHOP_PATH_RECORD attribute defined in this section is an
		optional transitive BGP Path Attribute as described in 
		<xref target="RFC4271"> </xref>.</t>
      <section title="Creating and Modifying the NEXTHOP_PATH_RECORD Attribute">
        <t>When a BGP speaker distributes a route to its BGP peer within
        UPDATE message, the NEXTHOP_PATH_RECORD ATTRIBUTE should be processed based
        on different route states:</t>

        <t><list style="numbers">
            <t>If the route is originated in this BGP speaker
			<list style="symbols">
                <t>If the NEXTHOP_PATH_RECORD ATTRIBUTE is supported, the
                NEXTHOP_PATH_RECORD ATTRIBUTE SHOULD be originated including the BGP
                speaker's own next hop address in a next hop path segment. In
                this case, the next hop address of the originating BGP speaker
                will be the only entry of the next hop path segment, and this
                path segment will be the only segment in NEXTHOP_PATH_RECORD
                ATTRIBUTE.</t>

                <t>If the NEXTHOP_PATH_RECORD ATTRIBUTE is not supported, the route
                will be distributed without NEXTHOP_PATH_RECORD ATTRIBUTE.</t>
              </list></t>

            <t>if the route is received from one BGP speaker's UPDATE
            message
			<list style="symbols">
                <t>If the NEXTHOP_PATH_RECORD ATTRIBUTE is NULL and the local BGP
                speaker supports NEXTHOP_PATH_RECORD ATTRIBUTE, when the route is
                propagated to another IBGP speaker with next hop self (NHS ),
                the NEXTHOP_PATH_RECORD ATTRIBUTE SHOULD be originated including the
                BGP speaker's own next hop address in a next hop path segment.
                In this case, the next hop address of this BGP speaker will be
                the only entry to the next hop path segment, and this path
                segment will be the only segment in NEXTHOP_PATH_RECORD ATTRIBUTE</t>

                <t>If the NEXTHOP_PATH_RECORD ATTRIBUTE is non-NULL and the local BGP
                speaker support NEXTHOP_PATH_RECORD ATTRIBUTE, when the route is
                propagated to another IBGP speaker with next hop self (NHS ),
                the BGP speaker MUST appends its own next hop address as the
                last one of the next hop path segments.</t>

                <t>If the NEXTHOP_PATH_RECORD ATTRIBUTE is NULL and the local BGP
                speaker support NEXTHOP_PATH_RECORD ATTRIBUTE, when the route is
                propagated to another BGP speaker without changing the next
                hop by the BGP speaker, the BGP speaker MUST NOT originate the
                NEXTHOP_PATH_RECORD ATTRIBUTE.</t>

                <t>If the NEXTHOP_PATH_RECORD ATTRIBUTE is non-NULL and the local BGP
                speaker support NEXTHOP_PATH_RECORD ATTRIBUTE, when the route is
                propagated to another BGP speaker without changing the next
                hop by the BGP speaker, the BGP speaker MUST NOT change the
                next hop path sequence.</t>

                <t>If the BGP speaker does not support NEXTHOP_PATH_RECORD ATTRIBUTE,
                it SHOULD keep the NEXTHOP_PATH_RECORD ATTRIBUTE unchanged whether
                the route is distribute with next hop self or not.</t>
              </list></t>
          </list></t>
      </section>
	  </section> 
      <section title="Deployment considerations">
	  <t>Two deployment examples are given to demonstrate how the 
	  nexthop information can be deployed in existing BGP technologies to 
	  monitor and tune the IBGP cloud to provide better operation. 
      maintenance. This attribute has records information.</t>
	  
	  <section title="Customized Best Path Selection"> 
	  <t> The next_hop information gathered on an IBGP or EBP route could be
	  used by off-line decision processing to select paths, and 
	  re-inserted as policy to affect the decision making via I2RS. 
	  The I2RS BGP use case draft <xref target="I-D.keyupate-i2rs-bgp-usecases"></xref>
	  describes this its section on customized best path selection (section 4.1)
	  which uses the BGP feature <xref target="I-D.ietf-idr-custom-decision"></xref>
	  to set a custom decision community. </t> 	  
	  </section> 

      <section title="Use in Seamless MPLS case with PE-RR ">
        <t>In a Seamless MPLS network <xref target="I-D.ietf-mpls-seamless-mpls"></xref>, 
		the Area Border Routers (ABRs) which run IBGP may act RR-clients
		or be part of RR mesh as described in section 5.1.7.
        Seamless MPLS places restrictions on the BGP NEXT_HOP
        to make Seamless MPLS work in the general case. 
		With the transmittal of the next-hop-path attribute
		offline calculation can insert a better pathway decision
		using the BGP customer.  A sample description of
		in a seamless MPLS is included below.</t>

        <t><figure align="center">
            <artwork>
                  Inline RR       Inline RR       Inline RR
                  +------+         +------+        +------+
               /  |ABR-a |---------|ABR-b |--------|ABR-c |
             /    +------+         +------+        +------+\
           /         |              |               |        \
  +-----+/           |              |               |          \
  |PE1  |  IGP area1 |   IGP area2  |   IGP area3   | IGP area4  \+-----+
  +-----+\           |              |               |             |  PE2|
            \        |              |               |            /+-----+
              \   +------+         +------+        +---- -+    /
                 \|ABR-a'|---------|ABR-b'|--------|ABR-c'|  /
                  +------+         +------+        +---- -+/ 
                   Inline RR       Inline RR      Inline RR


          Figure 1 Seamless MPLS Network with Multiple IGP Areas
		  </artwork>
          </figure></t>
		  <t> 
		  Just like Figure 1 shown, PE1 and PE2 are BGP VPN service
        end-point. IBGP peers runs contiguously between ABRs in different IGP
        areas, and each ABR works as inline RR. When labeled BGP routes or BGP
        VPN routes originated from PE1 is distributed to the other service
        end-point PE2, the route can be reflected by the ABRs one by one with
        next hop self (NHS).</t>

        <t>The inline RR will distribute the route to all of the IBGP peers
        except the IBGP peer from which the route was received. As a result,
        an ABR may receive routes of the same prefix from different IBGP peers
        with different next hop. Traditionally the BGP RR should select the
        best route to reflect to other IBGP peers. But in this network the
        route selection process will be more complex which needs to introduce
        complex route policy. </t>
		<t> The NEXTHOP_PATH ATTRIBUTE can optionally collect information on the 
		pathway the routes are taking through the IBGP mesh.  This information 
		may aid in monitoring paths in this complex path or in offline processing
		that reduces complex policy to simple instantiation of community policy or
		the BGP Custom Cost community to allow specialized pathways through the MPLS mesh. </t>
      </section>
      </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA need to assign the codepoint in the "BGP Path Attributes"
      registry to the NEXTHOP_PATH_RECORD ATTRIBUTE.</t>

      <t>IANA shall create a registry for "next hop path segment". The type
      field consists of a single octet, with possible values from 0 to 255.
      The allocation policy for this field is to be "Standards Action with
      Early Allocation". A new Type should be defined as "NH_SEQUENCE_V4".</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Note that, the NEXTHOP_PATH_RECORD ATTRIBUTE is defined as a optional
      transitive BGP Path attribute. Both the IBGP and EBGP speaker can use
      this attribute. When an ASBR propagates the route receive from a IBGP
      peer to an EBGP peer, the NEXTHOP_PATH_RECORD ATTRIBUTE will be distribute to
      the EBGP Speaker which may be controlled by other Service Provider. 
	  If the EBGP speaker can support the NEXTHOP_PATH_RECORD ATTRIBUTE, it can parse
      the NEXTHOP_PATH_RECORD ATTRIBUTE to get the inner network architecture of the
      other network.</t>
	  <t> BGP requires the use of TCP-MD5 <xref target="RFC2385">TCP-MD5</xref>
	  or <xref target="RFC5925">TCP-AO</xref>). Use of encryption will prevent
	  unauthorized view of the NEXTHOP_PATH_RECORD attribute.  For those not supporting
	  the required TCP-MD5 or TCP-AO, the NEXTHOP_PATH_RECORD
      ATTRIBUTE capability SHOULD disabled for specific BGP speaker to
	  prevent this attack. </t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
	   &RFC2119;
	   &RFC2385;
	   &RFC4271;
	   &RFC5925;
    </references>

    <references title="Informative References">
	  &I-D.ietf-mpls-seamless-mpls;
	  &I-D.ietf-idr-custom-decision;
	  &I-D.keyupate-i2rs-bgp-usecases; 
    </references>
  </back>
</rfc>
