<?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 IANA_RM_CODE_SEQ "5">
        <!ENTITY IANA_RM_CODE_EXT_FLAGS "6">
        <!ENTITY IANA_RM_CODE_TSTAMP "7">
        <!ENTITY IANA_RM_CODE_GROUP "1">
        <!ENTITY IANA_RM_CODE_VRF "2">
        <!ENTITY IANA_RM_CODE_SP "3">
        <!ENTITY IANA_RM_CODE_BGP_PDU "4">
        <!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">

        <!ENTITY IANA_TIMESTAMP_CODE_ADJINPRE "TBD4">
        <!ENTITY IANA_TIMESTAMP_CODE_ADJINPOST "TBD5">
        <!ENTITY IANA_TIMESTAMP_CODE_LOCRIB "TBD6">
        <!ENTITY IANA_TIMESTAMP_CODE_ADJOUTPRE "TBD7">
        <!ENTITY IANA_TIMESTAMP_CODE_ADJOUTPOST "TBD8">
        <!ENTITY IANA_TIMESTAMP_CODE_EXPORT "TBD9">
        <!ENTITY IANA_TIMESTAMP_CODE_TRIGGER "TBD10">
        ]>

<?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-21"
     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>
                    <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 a 4 bytes 
			"Timestamp Seconds" field representing the number of seconds 
			since midnight (zero hour), January 1, 1970 (UTC).</t>

			<t>The Timestamp TLV also optionally supports microseconds precision. 
			If available, the subsecond microseconds of the timestamp follow 
			the "Timestamp Seconds" as a 4 bytes field called "Timestamp Microseconds".
			</t>

			<t>When using microseconds precision, the encoding of the timestamp 
			is identical to existing BMP documents <xref target="RFC7854"></xref>, 
			<xref target="RFC8671"> </xref>, and <xref target="RFC9069"></xref>.
			</t>

			<t>
			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 5 bytes (1 byte for the
			Timestamp Type field plus the length of the 4 bytes "Timestamp Seconds"
			field). The value of Length field is 9 bytes when microseconds are
			included as the "Timestamp Microseconds" field. The Index field is not
			included in the length.</t>

			<t>The TLV structure including the index, ie. suitable for the Route
			Monitoring message type, 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 (optional)       ~				
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</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>&IANA_TIMESTAMP_CODE_TRIGGER;</td>
					<td>Trigger Time</td>
					<td><xref target="sec-timestamp-trigger"></xref></td>
					</tr>
					
					<tr>
					<td>&IANA_TIMESTAMP_CODE_EXPORT;</td>
					<td>Message Export Time</td>
					<td><xref target="sec-timestamp-export"></xref></td>
					</tr>
					
					<tr>
					<td>&IANA_TIMESTAMP_CODE_ADJINPRE;</td>
					<td>Adj-RIB-In Pre-Policy Time</td>
					<td><xref target="sec-timestamp-adjin"></xref></td>
					</tr>
						
					<tr>
					<td>&IANA_TIMESTAMP_CODE_ADJINPOST;</td>
					<td>Adj-RIB-In Post-Policy Time</td>
					<td><xref target="sec-timestamp-adjin"></xref></td>
					</tr>

					<tr>
					<td>&IANA_TIMESTAMP_CODE_LOCRIB;</td>
					<td>Local-RIB Time</td>
					<td><xref target="sec-timestamp-locrib"></xref></td>
					</tr>
					
					<tr>
					<td>&IANA_TIMESTAMP_CODE_ADJOUTPRE;</td>
					<td>Adj-RIB-Out Pre-Policy Time</td>
					<td><xref target="sec-timestamp-adjout"></xref></td>
					</tr>
					
					<tr>
					<td>&IANA_TIMESTAMP_CODE_ADJOUTPOST;</td>
					<td>Adj-RIB-Out Post-Policy 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>
					<t>This type applies to all BMP messages and is unique 
					within a BMP message. In message types that require 
					indexing the index field must be included and set to zero.</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. This type applies to all BMP
					messages and is unique within a BMP message. In message
					types that require indexing the index field must be
					included and set to zero.</t>
				</section>
	
				<section title="Adj-RIB-In Time" anchor="sec-timestamp-adjin">
					<t>The Adj-RIB-In Pre-Policy and Adj-RIB-In Post-Policy
					Times are the times at which the route has been installed
					in the Adj-RIB-In Pre-Policy and Post-Policy, as per
					<xref target="RFC7854"></xref>. This type is per NLRI
					and hence applies only to message types supporting
					indexing. If the timestamp applies to all prefixes in
					a BGP PDU, index must be zero.</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>. This type is per NLRI and hence applies only to
					message types supporting indexing. If the timestamp
					applies to all prefixes in a BGP PDU, index must be
					zero.</t>
				</section>
	
				<section title="Adj-RIB-Out Time" anchor="sec-timestamp-adjout">
					<t>The Adj-RIB-Out Pre-Policy and Adj-RIB-Out Post-Policy
					Times are the times at which the route has been installed
					in the Adj-RIB-Out Pre-Policy and Post-Policy, as per
					<xref target="RFC8671"></xref>. This type is per NLRI
                                        and hence applies only to message types supporting
                                        indexing. If the timestamp applies to all prefixes in
                                        a BGP PDU, index must be zero.</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>In BMP message types that require indexing, for example Route
			Monitoring, the index field must be included and set to zero. This
			TLV MUST NOT be repeated within the same message.</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 including the index, ie. suitable for the Route
                        Monitoring message type, 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>In BMP message types that require indexing, for example Route
			Monitoring, the index field must be included and set to zero. This
			TLV MUST NOT be repeated within the same message.</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 as defined in <xref target="RFC7854">Section 10.3
			    of</xref>, <xref target="RFC8671">Section 9.1 of</xref> and
			    <xref target="RFC9069"> Section 4.2 of</xref>.
			</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 TLV structure including the index, ie. suitable for the
			Route Monitoring message type, 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. For consistency,
			    the X Flag MUST always be set in the Extended Flags TLV.
			</t>
			<t>
			    Unused bits of the first byte are declared as reserved, newly
			    allocated bits will be carried in the following byte(s) of the
			    sequence and counting of the bits will always start at bit zero
			    of the first byte (ie. first bit of the second byte will be 8).
			</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>
                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="Upgrading an exporter from BMPv3" anchor="UpgradeFromV3">
		<t>
		    Minimum compliance when upgrading a BMP exporter from BMPv3 to
		    BMPv4:

		    <ul spacing="compact">
			<li>Version change from 3 to 4 in the Common Header</li>
			<li>Timestamp can't be zero in the Per-Peer Header</li>
			<li>BGP Message TLV in Route Monitoring message</li>
			<li>Stats TLV container in Stats Report message</li>
		    </ul>
		</t>
        </section>

        <section title="IANA Considerations">
            <t>
		This document asks IANA to rename, create, change registration procedures and
		available values for, and add assignments to registries.
	    </t>

	    <section title="BMP Route Monitoring TLVs">
		<t>
		It is requested the definition of a new registry "BMP Route Monitoring TLVs"
		which is to be seeded with the following new TLV types (<xref target="TLVinRM"/>):

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

                <t>
		    Values 0 through 16383 of the "BMP Route Monitoring TLVs" registry 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>
	    </section>

	    <section title="BMP Stats Reports TLVs">
	        <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;: Stats TLV. It enclose Stats Count and stats
			data. The value field is defined in <xref target="TLVinSR"/>
                    </t>
                    <t>
		        Type = &IANA_RM_CODE_SEQ;: Sequence TLV. The value field is defined in
			<xref target="seq-num-tlv"/>.
	            </t>
	            <t>
		        Type = &IANA_RM_CODE_EXT_FLAGS;: Extended Flags TLV. The value field is
			defined in <xref target="extended-flags-tlv"/>.
	            </t>
	            <t>
		        Type = &IANA_RM_CODE_TSTAMP;: Timestamp TLV. The value field is defined
			in <xref target="timestamp-tlv"/>.
	            </t>
	        </list>
	        </t>

                <t>
		    Values 0 through 16383 of the "BMP Stats Reports TLVs" registry 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>
	    </section>

	    <section title="Changes to existing registries">
                <t>     
                    The "BMP Peer Up Message TLVs" registry defined by <xref target="RFC9736">
		    BMP Peer Up Message Namespace</xref> is to be renamed "BMP Peer Up and Peer
		    Down TLVs".  
                </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 the high-order, or leftmost, bit of
		    each registry will be assigned to the E-bit, hence reducing the
		    Unassigned pool: the maximum availble value for assignment for the
		    registries will be 32767 (ie. as opposed to current 65530).
                </t>
	        <t>
		    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 "BMP Route Monitoring TLVs" and "BMP
		    Stats Reports TLVs" registries seeded in this document (ie.
		    Timestamp TLV = &IANA_RM_CODE_TSTAMP; , etc.).
                </t>
		<t>
		    This document requests that IANA assigns the following new code
		    points to the "BMP Peer Flags for Peer Types 0 through 2" and the
		    "BMP Peer Flags for Loc-RIB Instance Peer Type" registries:
		</t>
		<t>
		   <ul spacing="compact">
		       <li>Flag 5: Reserved</li>
		       <li>Flag 6: Reserved</li>
		       <li>Flag 7: X Flag (Extended Flags). Set if the Flags are carried
		           in the Extended Flags TLV instead of the Per-Peer Header.</li>
		    </ul>
		</t>
	    </section>

	    <section title="BMP Extended Peer Flags">
		<t>
		    This document also requests the definition of a "BMP Extended Peer
		    Flags" registry which allocates 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>
			<li>Flag 5: Reserved</li>
			<li>Flag 6: Reserved</li>
			<li>Flag 7: X flag defined in this document</li>
		    </ul>
		</t>
	    </section>

	    <section title="BMP Timestamp Types">
		<t>
		    This document also requests the definition of a "BMP Timestamp
		    Types" registry. This registry contains code points for the type
		    of timestamp 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:

		    <ul spacing="compact">
			<li>Type = 0: Reserved.</li>
			<li>Type = &IANA_TIMESTAMP_CODE_TRIGGER;: Trigger Time. Set to 1 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 = &IANA_TIMESTAMP_CODE_EXPORT;: Message Export Time. Set to 2 if the timestamp
			corresponds to the time when the BMP message was generated
			for export.</li>
			<li>Type = &IANA_TIMESTAMP_CODE_ADJINPRE;: Adj-RIB-In Pre-Policy Time. Set to 3 if the timestamp
			corresponds to when the route was installed in the Adj-RIB-In Pre-Policy,
			as per <xref target="RFC7854"/>.</li>
			<li>Type = &IANA_TIMESTAMP_CODE_ADJINPOST;: Adj-RIB-In Post-Policy Time. Set to 3 if the timestamp
			corresponds to when the route was installed in the Adj-RIB-In Post-Policy,
			as per <xref target="RFC7854"/>.</li>
			<li>Type = &IANA_TIMESTAMP_CODE_LOCRIB;: Local-RIB Time. Set to 4 if the timestamp
			corresponds to when the route was installed in the Local-RIB,
			as per <xref target="RFC9069"/>.</li>
			<li>Type = &IANA_TIMESTAMP_CODE_ADJOUTPRE;: Adj-RIB-Out Pre-Policy Time. Set to 5 if the timestamp
			corresponds to when the route was installed in the Adj-RIB-Out Pre-Policy,
			as per <xref target="RFC8671"/>.</li>			
			<li>Type = &IANA_TIMESTAMP_CODE_ADJOUTPOST;: Adj-RIB-Out Post-Policy Time. Set to 5 if the timestamp
			corresponds to when the route was installed in the Adj-RIB-Out Post-Policy,
			as per <xref target="RFC8671"/>.</li>
		    </ul>
		</t>
	    </section>

	    <section title="Miscellaneous">
                <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>
	    </section>
        </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"?>
        </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>
