<?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 RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
	<!ENTITY I-D.boucadair-nmop-rfc3535-20years-later SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.boucadair-nmop-rfc3535-20years-later.xml">
        <!ENTITY IANA_RM_CODE_SEQ "1">
        <!ENTITY IANA_RM_CODE_EXT_FLAGS "2">
        <!ENTITY IANA_RM_CODE_TSTAMP "3">
        <!ENTITY IANA_RM_CODE_GROUP "4">
        <!ENTITY IANA_RM_CODE_VRF "5">
        <!ENTITY IANA_RM_CODE_SP "6">
        <!ENTITY IANA_RM_CODE_BGP_PDU "7">
        <!ENTITY IANA_SR_CODE_STATS "1">
        <!ENTITY IANA_ALL_CODE_TSTAMP "TBD1">
        <!ENTITY IANA_ALL_CODE_SEQ "TBD2">
        <!ENTITY IANA_ALL_CODE_EXT_FLAGS "TBD3">
        ]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<rfc category="std" docName="draft-ietf-grow-bmp-tlv-20"
     ipr="trust200902" submissionType="IETF"
     updates="7854">

    <front>
        <title abbrev="BMP TLV">
	    BMP v4: Extended TLV Support for BGP Monitoring Protocol (BMP)
	</title>

        <author fullname="Paolo Lucente" initials="P" surname="Lucente">
            <organization>NTT</organization>
            <address>
                <postal>
                    <street>Veemweg 23</street>
                    <city>Barneveld</city>
                    <code>3771</code>
                    <region>MT</region>
                    <country>NL</country>
                </postal>
                <email>paolo@ntt.net</email>
            </address>
        </author>
        <author fullname="Yunan Gu" initials="Y" surname="Gu">
            <organization>Huawei</organization>
            <address>
                <postal>
                    <street>Huawei Bld., No.156 Beiqing Rd.</street>
                    <city>Beijing</city>
                    <code>100095</code>
                    <region></region>
                    <country>China</country>
                </postal>
                <email>guyunan@huawei.com</email>
            </address>
        </author>
	<author initials="M." surname="Younsi" fullname="Maxence Younsi">
		<organization>INSA-Lyon</organization>
		<address>
			<postal>
				<street/>
				<country>France</country>
			</postal>
			<email>maxence.younsi@insa-lyon.fr</email>
		</address>
	</author>
	<author initials="P." surname="Francois" fullname="Pierre Francois">
		<organization>INSA-Lyon</organization>
		<address>
			<postal>
				<street/>
				<country>France</country>
			</postal>
			<email>pierre.francois@insa-lyon.fr</email>
		</address>
	</author>

        <date year="2026"/>

        <area>General</area>

        <workgroup>Global Routing Operations</workgroup>
        <keyword>BGP</keyword>
        <keyword>BMP</keyword>
        <keyword>tlv</keyword>

        <abstract>
            <t>
		Most of the BGP Monitoring Protocol (BMP) message types make provision
		for data in Type, Length, Value (TLV) format. However, Route Monitoring
		messages (which provide a snapshot of the monitored Routing Information
		Base) Stats Reports (which supply periodical counters) and Peer Down
		messages (which indicate that a peering session was terminated) do not.
		Supporting (optional) data in TLV format across all BMP message types
		provides consistent and extensible structures that would be useful among
		the various use-cases where conveying additional data to a monitoring
		station is required. This document updates <xref target="RFC7854">RFC
		7854</xref> to support TLV data in all message types and defines some
		essential TLVs.
            </t>
	    <t>
		Additionally, this document introduces support for enterprise-specific
		TLVs in the BGP Monitoring Protocol by defining an Enterprise Bit (E-bit)
		that allows usage of per-vendor Type values.
	    </t>
        </abstract>
    </front>

    <middle>
        <section title="Introduction" anchor="Introduction">
            <t>
		The BGP Monitoring Protocol (BMP) version 3 is defined in <xref target="RFC7854">RFC 7854</xref>.
	    </t>

            <t>
		The Route Monitoring message is defined in <xref target="RFC7854">Section 4.6 of</xref> and consists of:
		<list style="symbols">
			<t>Common Header</t>
			<t>Per-Peer Header</t>
			<t>BGP Update PDU</t>
		</list>
	    </t>

            <t>
		The Stats Reports message is defined in <xref target="RFC7854">Section 4.8 of</xref> and consists of:
		<list style="symbols">
			<t>Common Header</t>
			<t>Per-Peer Header</t>
			<t>Stats Count</t>
			<t>Stats in TLV format</t>
		</list>
	    </t>

	    <t>
		The Peer Down Notification message is defined in <xref target="RFC7854">Section 4.9 of</xref> and consists of:
		<list style="symbols">
			<t>Common Header</t>
			<t>Per-Peer Header</t>
			<t>Reason</t>
			<t>Data (only if Reason code is 1, 2 or 3)</t>
			<t>TLV (only if Reason code is 6)</t>
		</list>
	   </t>

           <t>
		This means that Route Monitoring, Stats Reports and Peer Down messages
		have a non-extensible format (except for the specific case of Peer Down
		Reason Code 6 as specified in <xref target="RFC9069">Section 5.3 of</xref>.
		In the Route Monitoring case, this prevents the transmission of parsing
		characteristics of transported NLRIs (e.g. ADD-PATH, Multi Labels, etc.),
		RIB status of a path (e.g. primary, backup, unused, etc.) or of vendor-
		specific data. In the Stats Resports and Peer Down case, this prevents
		matching with TLVs previously sent in other messages, including the Peer
		Up message. This document:
		<list style="symbols">
			<t>Bumps the BMP version for all message types defined in
			   <xref target="RFC7854">RFC 7854</xref> for backward compatibility</t>
			<t>Changes the structure of Route Monitoring message type so that the BGP
			   Update PDU is enclosed in a TLV. The BGP Message PDU TLV is mandatory</t>
			<t>Allows all defined BMP message types to make provision for optional
			   TLV data.</t>
		</list>
            </t>

	    <t>
		Also, vendors need the ability to define proprietary Information Elements for
		reasons such as delivering pre-standard products, this need aligns with <xref
		target="RFC8126">Section 4.1 of</xref>. The E-bit allows early development
		phases to interoperate among vendors by defining enterprise-specific TLVs
		without conflicting with existing IANA allocations.
	    </t>
	    <t>
		The concept of an E-bit is not new. For example, such mechanism is defined
		in <xref target="RFC7011">Section 3.2 of</xref> for a very similar purpose.
	    </t>
        </section>

        <section title="Terminology">
            <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 14 <xref target="RFC2119">RFC 2119</xref>
		<xref target="RFC8174">RFC 8174</xref> when, and only when, they
		appear in all capitals, as shown here.
            </t>
	    <t>
		The document uses the terms defined in <xref target="RFC7854">RFC 7854</xref>.
            </t>
        </section>

	<section title="Message version">
	    <t>
		For an exporter to flag a receiver that it does comply with this
		specification, the Version field of the BMP Common header, documented
		in <xref target="RFC7854">Section 4.4 of</xref>, MUST be set to 4. This
		applies to every BMP message type.	
	    </t>
	    <t>
		If a BMP station does not support the version indicated in the message,
		it SHOULD close the session and take the procedures described in
		<xref target="ErrHdl">Error Handling</xref>
	    </t>
	</section>

	<section title="TLV Encoding">
	    <t>
		The TLV data type (Information TLV) is defined in <xref target="RFC7854">
		Section 4.4 of</xref> for the Initiation and Peer Up message types. The
		definition is updated as described in <xref target="IANATlv">IANA-registered
		TLV Encoding</xref> and further extended by <xref target="EnterpriseTlv">
		Enterprise-specific TLV Encoding</xref>, <xref target="IANAIndexedTlv"> 
		IANA-registered Indexed TLV Encoding</xref> and <xref target="EnterpriseIndexedTlv">
		Enterprise-specific Indexed TLV Encoding</xref>.
	    </t>

	    <section title="IANA-registered TLV Encoding" anchor="IANATlv">
	        <t>
		    <list style="symbols">
                        <t>
                        	1 bit to flag an enterprise-specific TLV, set to 0. The
                        	TLV Type value must have been defined in <xref target="IANA-BMP">IANA-BMP</xref>
                        </t>
		        <t>
				15 bits of TLV Type,
		        </t>
		        <t>
				2 octets of TLV Length, and
		        </t>
		        <t>
				0 or more octets of TLV Value.
		        </t>
		    </list>
	        </t>

	        <figure anchor="BMP-TLV-header" align="center">
	    	    <artwork align="center">
	    	        <![CDATA[
  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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |E|        Type (15 bits)       |     Length (2 octets)         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ~                      Value (variable)                         ~
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	    	        ]]>
	    	    </artwork>
	        </figure>
	    </section>

            <section title="Enterprise-specific TLV Encoding" anchor="EnterpriseTlv">
            <t>
                Enterprise-specific TLV encoding is defined as follows:
            </t>
            <t>
                <list style="symbols">
                    <t>
                        1 bit to flag an enterprise-specific TLV, set to 1
                    </t>
                    <t>
                        15 bits of TLV Type,
                    </t>
                    <t>
                        2 octets of TLV length. Comprising length of IANA PEN plus TLV value,
                    </t>
                    <t>
                        4 octets of IANA Private Enterprise Number <xref target="IANA-PEN">IANA-PEN</xref>
                    </t>
                    <t>
                        0 or more octets of TLV Value.
                    </t>
                </list>
            </t>
            <figure anchor="BMP-TLV-enterprise-header" align="center">
                <artwork align="center">
                    <![CDATA[
  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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |E|        Type (15 bits)       |     Length (2 octets)         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Enterprise number (4 octets)               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Value (variable)                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                    ]]>
                </artwork>
            </figure>
            <t>
                Stats Report messages are also encoded in a TLV-like fashion, as
                documented in <xref target="RFC7854">Section 4.8 of</xref>. E-bit
                does hence similarly apply to these messages too, with the most
                relevant bit of Stat Type set to 1 in order to flag the presence
		of a 4-bytes PEN field following Stat Len field and preceding
		Stat Data field, i.e.:
            </t>
            <figure anchor="BMP-Stats-Report-enterprise--header" align="center">
                <artwork align="center">
                    <![CDATA[

     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
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |E|     Stat Type (15 bits)     |     Stat Len (2 octets)       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                    Enterprise number (4 octets)               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Stat Data (variable)                   |
     ~                                                               ~
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                    ]]>
                </artwork>
            </figure>
            <t> 
                While the encoding is not per-se backward compatible, there
                is no existing IANA-allocated Type value that makes use of the most
                significant bit (which is being used in this document to define the
                E-bit), except the experimental and reserved ones mentioned in
                <xref target="RFC7854">Section 10.5 of</xref>,
                <xref target="RFC7854">Section 10.6 of</xref> and
                <xref target="RFC7854">Section 10.9 of</xref>. Of these, the
                Experimental values are being suppressed in favor of using the E-bit
                mechanism described in this document; the Reserved value is instead
                excluded by the E-bit mechanism such that no PEN will be included
                as part of the TLV.
            </t>
            <t>
                Future BMP Message Types MUST make use of the TLV encoding defined
                in this document.
            </t>
	    </section>

	    <section title="IANA-registered Indexed TLV Encoding" anchor="IANAIndexedTlv">
	    <t>
	        Route Monitoring messages may require per-NLRI TLVs. That is, there may
		be a need to map TLVs to NLRIs contained in the BGP Update message, for
		example, to express additional characteristics of a specific NLRI. For
		this purpose, TLVs enclosed in a Route Monitoring message MUST be
		indexed, with the index starting at one (1) to refer to the first NLRI.
		Index zero (0) specifies that a TLV does apply to all NLRIs contained in
		the BGP Update message. The Index field is 2-byte long of which the
		top-most bit, G-bit, is used to flag a Group Index (more in <xref
		target="GroupTLVinRM"/>).
		TLVs of the same type and with the same index can be repeated
		as part of the same message, unless specified otherwise by the definition
		of the specific TLV. Indexed TLVs are encoded as in the following figure:
	    </t>

	    <figure anchor="BMP-indexed-TLV-header" align="center">
	    	<artwork align="center">
	    	    <![CDATA[
  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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |E|       Type (15 bits)        |     Length (2 octets)         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |G|      Index (15 bits)        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ~                      Value (variable)                         ~
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	    	    ]]>
	    	</artwork>
	    </figure>

	    <t>
		The reported length in indexed TLVs refers to the total encoded
		TLV value (ie. with the length of the index field excluded).
	    </t>

	    <t>
		A monitoring station can properly match indexed TLVs to the
		corresponding NLRI only if - or as long as - NLRIs are decoded
		successfully. In case of any parsing or error condition that
		prevents full decoding of the BGP PDU, the station MUST stop
		matching indexed TLVs to NLRIs.
	    </t>

	    <t>
	        Of the BMP message types defined so far, indexed TLVs apply only to
		Route Monitoring messages. For example, they do not apply to Route
		Mirroring messages because a sender may not be aware of the payload
		of the transported BGP Update message.
	    </t>
	    </section>
	    <section title="Enterprise-specific Indexed TLV encoding" anchor="EnterpriseIndexedTlv">
	    <t>
	        For completeness, following is an illustration of the structure of
		an Enterprise-specific Indexed TLV.
	    </t>
            <figure anchor="BMP-TLV-enterprise-index-header" align="center">
                <artwork align="center">
                    <![CDATA[
  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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |E|       Type (15 bits)        |     Length (2 octets)         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |G|      Index (15 bits)        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  Enterprise number (4 octets)                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Value (variable)                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                    ]]>
                </artwork>
            </figure>
	    </section>
	</section>

        <section title="BMP Message Format">
            <section title="Common Header" anchor="CommonHeader">
                <t>
			While the structure of the Common header remains unaltered,
			the following two definitions are changed compared to
			<xref section="4.1" sectionFormat="of" target="RFC7854"/>:
		     
		    <list style="symbols">
			<t>
				Version: Indicates the BMP version. This is set
				to '4' for all message types defined in
				<xref target="RFC7854">RFC 7854</xref>.
			</t>
			<t>
				Message Length: Total length of the message in
				bytes (including headers, encapsulated BGP Message
				PDU TLV and optional TLV data).
			</t>
		    </list> 
                </t>
            </section>
	    <section title="TLV Data in Route Monitoring" anchor="TLVinRM">
		<t>
			For consistency with the Route Mirroring type defined in <xref
			section="4.7" sectionFormat="of" target="RFC7854"/>, this document
			extends the encoding of the Route Monitoring message type where the
		    	Per-peer header is followed by mandatory and optional TLVs.  
		</t>
		<t>
		    	The BGP Update PDU (<xref section="4.3" sectionFormat="of"
			target="RFC4271"/>) is encoded itself as part of a BGP Message TLV
			with code point &IANA_RM_CODE_BGP_PDU; and index set to 0.
			A Route Monitoring message MUST contain one BGP Message TLV which
			may be preceded or followed by other optional TLV data.
		</t>
		<t>
		    	Corollary, the BGP Update PDU is not encoded as part of the message
			as it was the case for BMPv3 (<xref target="RFC7854">RFC 7854</xref>)
			but it is rather enclosed in a TLV.
		</t>
	    <section title="Group TLV" anchor="GroupTLVinRM">
		<t>
		    In a Route Monitoring message where a BGP Update PDU carries N
		    NLRIs, indexed TLVs do allow to handle the cases of 1:1 and N:1
		    relationship among TLVs and NLRIs (ie. one TLV applies to one
		    NLRI, N TLVs apply to one same NLRI). The cases of 1:N and M:N
		    relationships (i.e., one TLV applies to N NLRIs and M TLVs apply
		    to N NLRIs) can benefit by a form of grouping. For that purpose,
		    a Group TLV is defined with the aim to limit both verbosity and
		    repetitions.
		</t>
		<t>
		    The 2-byte index defines a new Group Index and the top-most bit
		    (G-bit) MUST be set to 1. The full 2-byte value, that is including
		    the G-bit, MUST be unique to the message
		</t>
		<t>
		    The value carries two or more 2-byte NLRI indexes whose values
		    MUST be less or equal to the amount of NLRIs packed in the BGP
		    Update PDU.
		</t>
		<t>
		    An NLRI index can be listed as part of multiple Group TLVs within
		    the same message. NLRI indexes within a Group TLV SHOULD be sorted
		    by the sender. A Group Index MUST NOT reference an NLRI index 0.
		    A Group TLV MUST NOT include its own or another Group Index.
		    Multiple non-Group TLVs MAY point to the same Group Index, i.e.,
		    a group can be reused within the same Route Monitoring message.
		</t>
		<t>
		    The Group TLV type is &IANA_RM_CODE_GROUP;. It is RECOMMENDED 
		    that this TLV is encoded first in order to ease parsing of the
            	    Route Monitoring message at the BMP station side.
		</t>
	    </section>
	    <section title="VRF/Table Name TLV" anchor="VrfTLVinRM">
		<t>
		    The Information field contains a UTF-8 string whose value MUST
		    be equal to the value of the VRF or table name (i.e., RD instance
		    name) being conveyed. The string size MUST be within the range
		    of 1 to 255 bytes. This is in line with <xref section="5.2.1"
		    sectionFormat="of" target="RFC9069"/>.
		</t>
		<t>
		    The VRF/Table Name TLV type is &IANA_RM_CODE_VRF;
		</t>
	    </section>
	    <section title="Stateless Parsing TLV" anchor="SpTLVinRM">
		<t>
		    Stateless parsing helps scaling the amount of Route Monitoring
		    messages that can be processed at collection time, avoiding to
		    have to correlate them to BGP capabilities received as part of
		    the Peer Up message, for example.
		</t>
		<t>
		    Some BGP capabilities are not per AFI/SAFI, like 4-byte ASN
		    <xref target="RFC6793">RFC 6793</xref>, and hence these can
		    potentially be part of the <xref target="IANA-BPPF">BMP Peer
		    flags</xref> of a Route Monitoring message. Those that are,
		    instead, per AFI/SAFI require finer granularity and hence the
		    need to use an indexed TLV. To maintain the consistency between
		    BGP Capabilities, they are all carried in Stateless Parsing TLVs,
		    regardless of their type.
		</t>
		<t>
		    The encoding of BGP Capabilities is already generically defined 
		    in Section 4 of <xref target="RFC5492"></xref>. It includes every
		    information needed for its understanding, including AFI/SAFI codes.
		    This encoding can be reused in the Stateless Parsing TLV, leveraging 
		    already existing BGP encoders and decoders for implementers. 
		</t>
		<t>
		    The Stateless Parsing TLV type is &IANA_RM_CODE_SP; and its
		    Value is the BGP Capability encoded as exactly as it would be in the 
		    BGP OPEN of the session. It is thus made of all three Capability Code, 
		    Capability Length, and Capability Value fields defined in 
		    <xref target="RFC5492"></xref>.
		</t>
		<t>
		    For example, an ADD-PATH capability, as defined by <xref target="RFC7911">RFC
		    7911</xref>, for IP/Unicast with value Send/Receive would be
		    encoded in the Capability Value as: 
		</t>
		<t>
		    <list style="symbols">
		    	<t>Capability Code, 1 byte, value=69</t>
		    	<t>Capability Length, 1 byte, value=4</t>
		    	<t>AFI, 2 bytes, value=1</t>
		    	<t>SAFI, 1 byte, value=1</t>
	            <t>Value, 1 byte, value=3</t>
		    </list>
		</t>
		<t>
		    The index of the Stateless Parsing TLV MUST be set to 0. 
		</t>
		<t>
		    If no Stateless Parsing TLV is present in a Route Monitoring
		    message, the receiver MUST fall back to use capabilities present
		    in the BGP Open PDU contained in the relevant BMP Peer Up message
		    in order to properly parse BGP Update PDUs. Each BGP capability  
		    is to be encoded in a separate Stateless Parsing TLV.
		</t>
		<t>
		    It is RECOMMENDED that the Stateless Parsing TLV is encoded
		    preceding the BGP Message TLV in order to ease parsing of the
		    Route Monitoring message at the BMP station side.
		</t>
	    </section>
        </section>
	    <section title="TLV Data in Peer Down" anchor="TLVinPD">
		<t>
		    The Peer Down Notification message type (<xref section="4.9"
		    sectionFormat="of" target="RFC7854"/>) is extended following
		    a consistent approach with the Peer Up type (<xref section="4.10"
		    sectionFormat="of" target="RFC7854"/>). That is, the message
		    is extended so that optional TLVs are placed at the end of
		    the message.
		</t>
		<t>
		    This means for Reason codes 1 or 3, a BGP Notification
		    PDU follows; the PDU MAY be further followed by TLV data. 
		    For Reason code 2, a 2-byte field follows to provide
		    additional Finite State Machine (FSM) info; this field MAY
		    be followed by TLV data. For all other Reason codes, TLV
		    data MAY follow the Reason field.
		</t>
	    </section>
	    <section title="TLV Data in Stats Reports" anchor="TLVinSR">
		<t>
		    The Stats Reports message is extended so that the Stats Count
		    and stats data as defined in <xref target="RFC7854">Section
		    4.8 of</xref> are all enclosed inside a Stats TLV with code-
		    point &IANA_SR_CODE_STATS;. The Stats TLV is mandatory and
		    can be followed by optional TLV data. 
		</t>
		<t>
		    While the Stats Count field could be used to discriminate
		    among stats data and trailing optional TLV data, it is felt
		    that enclosing Stats Count and stats data inside a container
		    TLV is cleaner by embracing a fully TLV'd body. 
		</t>
	    </section>
	    <section title="TLV Data in Other BMP Messages" anchor="TLVinOther">
		<t>
		    All other message types defined in <xref target="RFC7854">RFC7854</xref>
		    do already provision for TLV data. It is RECOMMENDED that
		    all future defined BMP message types will also provide for
		    optional TLV data following a consistency model for encoding
		    with existing message types.
		</t>
	    </section>
	    <section title="New TLVs in all BMP Messages" anchor="TLVinAll">
		<t>
			In this section some TLVs are introduced that apply to all
			existing BMP message types and as such will need a code point
			reserved in all TLV registries, namely: BMP Initiation Information TLVs,
			BMP Termination Message TLVs, BMP Route Mirroring TLVs along with
			registries defined in this document BMP Route Monitoring TLVs and
			BMP Peer Up and Peer Down TLVs. We thus request IANA to allocate, for each TLV, 
			the same codepoint value in every TLV codepoint registry of this document, 
			as detailed in their respective sections.

		</t>
		<section title="Timestamp TLV" anchor="timestamp-tlv">
			<t>The Timestamp TLV carries one of multiple types of Timestamp
			for a BMP message. For each TLV registry seeded in this document, 
			the code point of the Timestamp TLV is &IANA_RM_CODE_TSTAMP;.</t>

			<t>The value of the TLV is the Timestamp Type code, defined in
			<xref target="list-timestamp-types"></xref>, followed by the
			timestamp values expressed in seconds and microseconds since
			midnight (zero hour), January 1, 1970 (UTC).</t>

			<t>The encoding of the timestamp is identical to existing BMP
			documents <xref target="RFC7854"></xref>, <xref target="RFC8671">
			</xref>, and <xref target="RFC9069"></xref>, except that the
			timestamp MUST NOT be set to zero to indicate unavailability. The
			Timestamp TLV is optional, a timestamp MUST NOT be included if it
			is not available.</t>

			<t>The value of the Length field is 9 bytes (1 byte for the
			Timestamp Type field plus the length of the Timestamp fields which
			are 4 bytes each). The Index field is not included in the length.</t>

			<t>The TLV structure is illustrated in <xref target="fig-timestamp-tlv">
			</xref>.</t>

<figure anchor="fig-timestamp-tlv"><name>Timestamp TLV
</name>
<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 (2 octets)        |       Length (2 octets)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|G|      Index (2 octets)       | Timestmp Type |               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~              Timestamp (seconds)              |               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~            Timestamp (microseconds)           ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
</figure>

			<t>The <xref target="sec-timestamp-types"></xref> defines the list
			of currently defined Timestamp Types.</t>

			<section title="Timestamp Types" anchor="sec-timestamp-types">
				<t>The <xref target="list-timestamp-types"></xref> defines the list
				of timestamp types that can be carried in the Timestamp TLV.
				Each timestamp type is described in the section associated with its
				name and code in the table.</t>
	
				<table anchor="list-timestamp-types">
					<thead>
					<tr>
					<th>Code</th>
					<th>Name</th>
					<th>Section</th>
					</tr>
					</thead>
	
					<tbody>
					<tr>
					<td>0x00</td>
					<td>Trigger Time</td>
					<td><xref target="sec-timestamp-trigger"></xref></td>
					</tr>
					
					<tr>
					<td>0x01</td>
					<td>Message Export Time</td>
					<td><xref target="sec-timestamp-export"></xref></td>
					</tr>
					
					<tr>
					<td>0x02</td>
					<td>Adj-RIB-In Time</td>
					<td><xref target="sec-timestamp-adjin"></xref></td>
					</tr>
					
					<tr>
					<td>0x03</td>
					<td>Local-RIB Time</td>
					<td><xref target="sec-timestamp-locrib"></xref></td>
					</tr>
					
					<tr>
					<td>0x04</td>
					<td>Adj-RIB-Out Time</td>
					<td><xref target="sec-timestamp-adjout"></xref></td>
					</tr>
					</tbody>
				</table>
	
				<section title="Trigger Time" anchor="sec-timestamp-trigger">
					<t>The Trigger Time is the timestamp of the event which
					triggered BMP to report the event. This might be a
					received message, a BGP peering or a BMP session going
					down or up, etc.</t>
				</section>
	
				<section title="Message Export Time" anchor="sec-timestamp-export">
					<t>The Message Export Time is the time at which BMP
					generates the BMP message.</t>
				</section>
	
				<section title="Adj-RIB-In Time" anchor="sec-timestamp-adjin">
					<t>The Adj-In Time is the time at which the route has been
					installed in the Adj-RIB-In, as per <xref target="RFC7854">
					</xref>.</t>
				</section>
	
				<section title="Local-RIB Time" anchor="sec-timestamp-locrib">
					<t>The Local-RIB Time is the time at which the route has
					been installed in the Local-RIB, as per <xref target="RFC9069">
					</xref>.</t>
				</section>
	
				<section title="Adj-RIB-Out Time" anchor="sec-timestamp-adjout">
					<t>The Adj-Out Time is the time at which the route has been
					installed in the Adj-RIB-Out, as per <xref target="RFC8671">
					</xref>.</t>
				</section>
			</section>
		</section>
		<section title="Sequence Number TLV" anchor="seq-num-tlv">
			<t>The Sequence Number TLV carries the sequence number of a message
			in a BMP session. For each TLV registry seeded in this document, 
			the code point of the Sequence Number TLV is &IANA_RM_CODE_SEQ;.</t>

			<t>Ordering of BMP messages based on timestamp becomes complicated
			when timestamps have conflicting meanings or when they are simply
			unavailable. A Sequence Number on a per BMP session basis allows
			the operator to easily and uniquely identify BMP messages on a BMP
			session.</t>

			<t>The value of the TLV is the sequence number of the BMP message
			in the BMP session, starting at 0, and encoded on 8 bytes. If the
			sequence number would overflow, the BMP session MUST be reset.</t>

			<t>The value of the Length field is 8. The Index field is not
			included in the length.</t>

			<t>The TLV structure is illustrated in <xref target="fig-seqnum-tlv">
			</xref>.</t>

<figure anchor="fig-seqnum-tlv"><name>Sequence Number TLV
</name>
<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 (2 octets)        |       Length (2 octets)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|G|      Index (2 octets)       |                               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
~                   Sequence Number (8 octets)                  ~
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                               | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
</artwork>
</figure>
		</section>
		<section title="Extended Flags TLV" anchor="extended-flags-tlv">
			<t>The Extended Flags TLV carries the Flags field usually present
			in the Per-Peer Header, while extending the length of the field.
			This allows for a larger range of flags to be allocated in the
			future. For each TLV registry seeded in this document, the code 
			point of the Extended Flags TLV is &IANA_RM_CODE_EXT_FLAGS;.</t>

			<t>The value of the TLV is a sequence of bytes of variable size.
			The minimum size of the sequence is one, to fit at least the
			already existing flags. The flags carried in this TLV are defined
			in the BMP Extended Peer Flags IANA registry defined by this
			document. The first byte of the sequence carries all flags
			defined previous to this document, that is Flags V, L, A, O, and F.
			Newly allocated bits will be carried in the following byte of the
			sequence.</t>

			<t>The value of the Length field is the number of bytes in the
			sequence. The Index field is not included in the length.</t>

			<t>The Index field is set to 0 to indicate the global scope of the
			TLV.</t>

			<t>The TLV structure is illustrated in <xref target="fig-flags-tlv">
			</xref>.</t>

<figure anchor="fig-flags-tlv"><name>Extended Flags TLV
</name>
<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 (2 octets)        |       Length (2 octets)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|G|      Index (2 octets)       |        Flags (Variable)       ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
</figure>

			<t>When this TLV is included in a BMP message, the rightmost bit (X
			Flag) of the Per-Peer Header Flags MUST be set to 1 to indicate that
			the flags to consider are carried in this TLV. The flags in the
			Per-Peer Header are still set according to the current specification,
			allowing collectors that do not understand the X Flag and
			Extended Flags TLV to still function.</t>
		</section>
	    </section>
        </section>

        <section title="Error Handling" anchor="ErrHdl">
	    <t>
		<xref target="RFC8654">RFC8654</xref> permits BGP Update and other
		messages to grow to a length of 65535 octets. This may cause a BMP
		PDU that attempts to encapsulate such long messages to overflow.
	    </t>
	    <t>
		A BMP exporter and a BMP station may not support the same version
		of the protocol; being BMP uni-directional, with data flowing only
		from the exporter to the station, the station SHOULD close the BMP
		session and log the condition as a warning; the exporter SHOULD
		retry to connect with a non-aggressitve timer.
	    </t>
	    <t>
 		A BMP station may not support some of the TLVs encoded by the
		exporter; the station MUST ignore unsupported TLV types; additionally,
		in case of indexed TLVs, if the index is invalid (i.e. out of bounds),
		the TLV MUST be ignored. The station SHOULD log the condition as a
		warning.  
	    </t>
        </section>

        <section title="Security Considerations">
            <t>
                It is not believed that this document adds any additional security
		considerations compared to <xref target="RFC7854">RFC7854</xref>.
            </t>
        </section>

        <section title="Operational Considerations">
            <t>
                In Route Monitoring messages, the number of TLVs can be bound to
		the amount of NLRIs carried in the BGP Update message. This may
		degrade the packing of information in such messages and have
		specific impacts on the memory and CPU used in a BMP implementation.
		As a result of that it should always be possible to disable such
		features to mitigate their impact.
            </t>
            <t>
                TLVs SHOULD be sorted by the sender by their type. Multiple
                TLVs of the same type can be repeated as part of the same message;
                it is left to the specific use-cases whether all, any, the
                first or the last TLV should be considered as well as whether
                ordering matters and repeating is allowed.
            </t>
            <t> 
                It is recommended that implementors making use of the Enterprise
                Bit extension have a well-defined internal registry for privately
                assigned code points that is also exposed to the public.
            </t>
        </section>

        <section title="IANA Considerations">
            <t>
		This document requests IANA to rename of the "BMP Peer Up Message TLVs" registry
		defined by <xref target="RFC9736">BMP Peer Up Message Namespace</xref> into
		"BMP Peer Up and Peer Down TLVs" and the definition of one new registry "BMP
		Route Monitoring TLVs". The new "BMP Route Monitoring TLVs" registry is seeded
		with the following new TLV types (<xref target="TLVinRM"/>):

		<list style="symbols">
		    <t>
			Type = &IANA_RM_CODE_SEQ;: Support for Sequence TLV. The value field
			is defined in <xref target="seq-num-tlv"/>.
		    </t>
		    <t>
			Type = &IANA_RM_CODE_EXT_FLAGS;: Support for Extended Flags TLV. The value
			field is defined in <xref target="extended-flags-tlv"/>.
		    </t>
		    <t>
			Type = &IANA_RM_CODE_TSTAMP;: Support for Timestamp TLV. The value
			field is defined in <xref target="timestamp-tlv"/>.
		    </t>
		    <t>
			Type = &IANA_RM_CODE_GROUP;: Support for grouping of TLVs. The value
			field is defined in <xref target="GroupTLVinRM"/>.
		    </t>
		    <t>
			Type = &IANA_RM_CODE_VRF;: Support for VRF/Table Name TLV. The value
			field is defined in <xref target="VrfTLVinRM"/>.
		    </t>
		    <t>
			Type = &IANA_RM_CODE_SP;: Support for Stateless Parsing TLV. The value
			field is defined in <xref target="SpTLVinRM"/>.
		    </t>
		    <t>
			Type = &IANA_RM_CODE_BGP_PDU;: Support for BGP Message TLV. The value
			field is defined in <xref target="TLVinRM"/>.
		    </t>
		</list>
	    </t>

	    <t>
		It is requested the definition of a new "BMP Stats Reports TLVs" registry seeded
                with the following new TLV types (<xref target="TLVinSR"/>):

            <list style="symbols">
                <t>
                    Type = &IANA_SR_CODE_STATS;: Support for Stats TLV to enclose Stats Count
		            and stats data.
                </t>
                <t>
		            Type = &IANA_RM_CODE_SEQ;: Support for Sequence TLV. The value field
		            is defined in <xref target="seq-num-tlv"/>.
	            </t>
	            <t>
		            Type = &IANA_RM_CODE_EXT_FLAGS;: Support for Extended Flags TLV. The value
		            field is defined in <xref target="extended-flags-tlv"/>.
	            </t>
	            <t>
		            Type = &IANA_RM_CODE_TSTAMP;: Support for Timestamp TLV. The value
		            field is defined in <xref target="timestamp-tlv"/>.
	            </t>
	        </list>
	    </t>
		
	    <t>
		Values 0 through 16383 of the "BMP Route Monitoring TLVs" and BMP Stats
		Reports TLVs" registries MUST be assigned using the Standards Action policy
		as defined in <xref target="RFC8126">Section 4.9 of</xref>; values 16384
		through 32767 MUST be assigned using the First Come First Served policy as
		defined in <xref target="RFC8126"> Section 4.4 of</xref>. The upper bound
		of the registry is 65535. Value 65535 is Reserved.
            </t>
            <t>                                 
                The TLV Type values used by BMP are managed by IANA as are the
                Private Enterprise Numbers used by enterprise-specific Type
                values <xref target="IANA-PEN">IANA-PEN</xref>.
            </t>
            <t> 
                For BMP Initiation Information TLVs, BMP Termination Message TLVs,
		BMP Peer Up and Peer Down TLVs and BMP Route Mirroring TLVs registries
		it is requested to make the range 0-16383 as Standards Action (down
		from current 0-32767); it also asks to make the range 16384-32767 as
		First Come First Served (in place of current 32768-65530).
            </t>                
            <t>                         
                This document also requests to remove the Experimental allocation
                from the same registries, the code points now flagged Experimental
                will become Unassigned. The top most bit of each registry will be
                reserved to the E-bit, reducing the Unassigned pool: the maximum
                availble value for assignment for the registries will be 32767
                (ie. as opposed to current 65530).
            </t>
	    <t>
		Finally, for the same registries, this document requests IANA to
		allocate the codepoints for Timestamp TLV (&IANA_ALL_CODE_TSTAMP;),
		Sequence Number TLV (&IANA_ALL_CODE_SEQ;) and Extended Flags TLV
		(&IANA_ALL_CODE_EXT_FLAGS;). It is recommended that the code points
		are assigned consistently to the registry seeded in this document
		(ie. Timestamp TLV = &IANA_RM_CODE_TSTAMP; , etc.).
            </t>

		<t>This document requests that IANA assigns the following new
		parameters to the BMP Peer Flags for Peer Types 0 through 2;
		registry and to the BMP Peer Flags for Loc-RIB Instance Peer Type
		registry:</t>

		<t>* Flag = 7: X Flag (Extended Flags). Set if the Flags are carried
		in the Extended Flags TLV instead of the Per-Peer Header.</t>

		<t>This document also requests the definition of a BMP Extended Peer
		Flags; registry which contains flags contained in the Extended Flags
		TLV The size of this registry is TBD. The registration policy for
		this registry is Standards Action as defined in <xref target="RFC8126"/>.
		</t>
		<t>The registry is seeded as follows:

		<ul spacing="compact">
			<li>Flag 0: V flag <xref target="RFC7854"/></li>
			<li>Flag 1: L flag <xref target="RFC7854"/></li>
			<li>Flag 2: A flag <xref target="RFC7854"/></li>
			<li>Flag 3: O flag <xref target="RFC8671"/></li>
			<li>Flag 4: F flag <xref target="RFC9069"/></li>
		</ul>
		</t>

		<t>This document also requests the definition of a BMP Timestamp
		Types registry. This registry contains type codes for the kinds of
		timestamps carried by the Timestamp TLV. The size of the registry
		matches the size of the Timestamp Type field defined in <xref
		target="fig-timestamp-tlv"/> which is 1 byte.</t>

		<t>The registration policy for this registry is Expert Review as
		defined in <xref target="RFC8126"/>.</t>

		<t>The registry is seeded as follows:</t>

		<ul spacing="compact">
			<li>Type = 0x00: Trigger Time. Set to 0x00 if the timestamp
			corresponds to the event that triggered BMP to report the
			route or state, such as receiving a message or a session
			transition.</li>
			<li>Type = 0x01: Message Export Time. Set to 0x01 if the
			timestamp corresponds to the time when the BMP message was
			generated for export.</li>
			<li>Type = 0x02: Adj-In Time. Set to 0x02 if the timestamp
			corresponds to when the route was installed in the Adj-RIB-In,
			as per <xref target="RFC7854"/>.</li>
			<li>Type = 0x03: Local-RIB Time. Set to 0x03 if the timestamp
			corresponds to when the route was installed in the Local-RIB,
			as per <xref target="RFC9069"/>.</li>
			<li>Type = 0x04: Adj-Out Time. Set to 0x04 if the timestamp
			corresponds to when the route was installed in the Adj-RIB-Out,
			as per <xref target="RFC8671"/>.</li>
		</ul>
        </section>

    </middle>

    <back>

        <references title="Normative References">
		&RFC2119;
		&RFC8174;

		<?rfc include="reference.RFC.4271.xml"?>
		<?rfc include="reference.RFC.7854.xml"?>
		<?rfc include="reference.RFC.8126.xml"?>
		<?rfc include="reference.RFC.8654.xml"?>
		<?rfc include="reference.RFC.8671.xml"?>
		<?rfc include="reference.RFC.9069.xml"?>
		<?rfc include="reference.RFC.9736.xml"?>
		&I-D.boucadair-nmop-rfc3535-20years-later;
        </references>
	<references title="Informative References">
                <?rfc include="reference.RFC.5492.xml"?>
		<?rfc include="reference.RFC.6793.xml"?>
		<?rfc include="reference.RFC.7911.xml"?>
                <reference anchor="IANA-BMP" target="https://www.iana.org/assignments/bmp-parameters/bmp-parameters.xhtml">
                        <front> 
                                <title>
                                        BGP Monitoring Protocol (BMP) Parameters
                                </title>
                                <author>
                                        <organization>
                                                IANA
                                        </organization>
                                </author>
                                <date year="2016" />
                        </front>
                </reference>
                <reference anchor="IANA-BPPF" target="https://www.iana.org/assignments/bmp-parameters/bmp-parameters.xhtml#peer-flags">
                        <front>
                                <title>
                                        BMP Peer Flags
                                </title>
                                <author>
                                        <organization>
                                                IANA
                                        </organization>
                                </author>
                                <date year="2024" />
                        </front>
                </reference>
                <?rfc include="reference.RFC.7011.xml"?>
                <reference anchor="IANA-PEN" target="http://www.iana.org/assignments/enterprise-numbers/">
                        <front>
                                <title>
                                        Private Enterprise Numbers
                                </title>
                                <author>
                                        <organization>
                                                IANA
                                        </organization>
                                </author>
                                <date year="1982" />
                        </front>
                </reference>
        </references>

        <section title="Wire-format Example" anchor="TLVexample">
            <t>
                The diagram in <xref target="BMP-RM-TLVs"/> shows an example of a
                Route Monitoring message carrying a BGP UPDATE containing 10
                NLRIs. The TLVs are comprised of:
                <list style="numbers">
                    <t>
                        a Group TLV with index 0x000b, pointing to NLRI 1, 2, 3
                        and 10
                    </t>
                    <t>
                        a Group TLV with index 0x000c, pointing to NLRI 4, 5 and
                        6
                    </t>
				    <t>
						a Stateless Parsing TLV with index 0x0000, stating that
						the Add-Path Capability is set to Both (Snd/Rcv) for the
						IPv4 Unicast address family in the BGP UPDATE.
				    </t>
                    <t>
						a TLV pertaining to NLRI 7
		    		</t>
                    <t>
                        a TLV pertaining to the NLRIs listed in the Group TLV
                        defined in 1
                    </t>
                    <t>
                        a TLV pertaining to the NLRIs listed in the Group TLV
                        defined in 2
                    </t>
                </list>
            </t>
            <t>
                <figure anchor="BMP-RM-TLVs" align="center">
                    <artwork align="center">
                        <![CDATA[
  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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |        Common Header + Per-Peer Header (6 + 42 bytes)         ~
  ~                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=2             |         length=0x0008         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x0001      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  value={0x0001,   0x0002,                     |
  |                         0x0003,   0x000a}                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=2             |        length=0x0006          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x0002      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  value={0x0004,   0x0005,                     |
  |                         0x0006}                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=4             |         length=0x0005         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|           index=0           |     code=69   |     len=4     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      afi=1    |    safi=1     |     value=3   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=1             |         length=X              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|           index=0           |    value=$BGP_UPDATE_PDU{     ~
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               ~
  ~                                                               ~
  ~                       NLRI_1 .. NLRI_10                       ~
  ~                                                            }  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=SomeTlvX      |         length=0x0004         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x0001      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          value={4 bytes}                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=SomeTlvY      |         length=0x0008         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x0002      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          value={8 bytes}                      ~
  ~                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=SomeTlvZ      |         length=0x0008         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|           index=0x0007      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          value={8 bytes}                      ~
  ~                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                            ]]>
                    </artwork>
                </figure>
            </t>
        </section>

        <section anchor="Acknowledgements" title="Acknowledgements" numbered="no">
            <t>
		The authors would like to thank Jeff Haas, Camilo Cardona, Thomas Graf,
		Pierre Francois, Ben Maddison, Tim Evens, Luuk Hendriks, Maxence Younsi,
		Ahmed Elhassany, Colin Petrie, Dhananjay Pakti and Shunwan Zhuang for
		their valuable input. The authors would also like to thank Greg Skinner,
		Zongpeng Du and Mohamed Boucadair for their review.
            </t>
        </section>

    </back>
</rfc>
