<?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-22"
     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 in
		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 Reports 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>, allowing receivers to
			   distinguish BMPv4 from BMPv3 and handle it explicitly</t>
			<t>Changes the structure of Route Monitoring message type so that the
			   BGP Update PDU is enclosed in a TLV. The BGP Message 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 complies 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. This comprises the length of the IANA PEN plus the 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>. the
		E-bit therefore similarly applies to these messages too, with the
		most significant bit of Stat Type set to 1 in order to flag the
		presence of a 4-byte 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 BMPv4 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 applies to all NLRIs contained in the
		BGP Update PDU. TLVs that are message-wide rather than NLRI-specific also
		use Index zero, as specified in their respective definitions.
	    </t>
	    <t> An NLRI Index identifies an NLRI occurrence in the BGP Update PDU. NLRIs
		are numbered sequentially, starting at one (1), in the order in which they
		occur in the BGP Update PDU, as follows:
		<ul spacing="compact">
			<li>Each NLRI in the Withdrawn Routes field, in encoded order.</li>
			<li>For each Path Attribute that carries NLRIs, in the order in
			    which the Path Attributes appear in the UPDATE, each NLRI
			    carried by that attribute, in encoded order. This includes
			    NLRIs in MP_UNREACH_NLRI and MP_REACH_NLRI attributes.</li>
			<li>Each NLRI in the trailing IPv4-unicast NLRI field, in encoded
			    order, if present.</li>
		</ul>
		Each occurrence of an NLRI is indexed independently. In particular, if the
		same prefix appears more than once in the BGP Update PDU, including with
		different Path Identifiers when ADD-PATH is in use, each occurrence
		receives a distinct NLRI Index. Withdrawn NLRIs and advertised NLRIs share
		the same NLRI Index space. 
	    </t>
	    <t>
		The Index field is 2 bytes long, of which the
		top-most bit, G-bit, is used to flag a Group Index (more in <xref
		target="GroupTLVinRM"/>).
	    </t>
	    <t>
		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 (i.e., 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
				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>
		    	Consequently, the BGP Update PDU is not encoded as part of the message
			as 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 allow handling of the cases of 1:1 and N:1
		    relationship among TLVs and NLRIs (i.e., 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 from 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 than or equal to the number 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 Value 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 number of Route Monitoring
		    messages that can be processed at collection time, avoiding having
		    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 as a BGP
		    Capability 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
		    MUST 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">RFC 7854</xref>
		    do already provision for TLV data. It is RECOMMENDED that all future BMPv4
		    message types provide optional TLV data, consistently 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,
			BMP Peer Up and Peer Down TLVs and BMP Stats Reports 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 several timestamp types
			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-byte
			"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-byte 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. For
			the timestamp field in the Per-Peer Header this means that it MUST always
			be populated. 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-byte "Timestamp Seconds"
			field). The value of the 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, i.e., 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)       | Timestamp Type|               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~               Timestamp Seconds               |               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~       Timestamp Microseconds (optional)       ~				
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
</figure>

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

			<section title="Timestamp Types" anchor="sec-timestamp-types">
				<t><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 NLRIs 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 NLRIs 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 NLRIs 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 as an 8-byte integer. 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, i.e., 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 byte, 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 prior 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, i.e., 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.
			</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 (i.e., first bit of the second byte will be 8).
			</t>
		</section>
	    </section>
        </section>

        <section title="Error Handling" anchor="ErrHdl">
	    <t>
		<xref target="RFC8654">RFC 8654</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. Because BMP is unidirectional, 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 connecting with a non-aggressive 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. A Group TLV or an indexed TLV that references
		an undefined Group Index MUST also 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">RFC 7854</xref>.
            </t>
        </section>

        <section title="Operational Considerations">
            <t>
                In Route Monitoring messages, the number of TLVs can be bound to
		the number 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 implementers 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>The Per-Peer Header timestamp MUST NOT be zero</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>
		IANA is requested to create 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 Number 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. Values 32768 through 65534 are enterprise-specific as identified by
		    the E-bit and therefore not IANA-assigned. Value 65535 is Reserved.
                </t>
	    </section>

	    <section title="BMP Stats Reports TLVs">
	        <t>
		IANA is requested to create a new registry "BMP Stats Reports TLVs" seeded with
		the following new TLV types (<xref target="TLVinSR"/>):

                <list style="symbols">
                    <t>
                        Type = &IANA_SR_CODE_STATS;: Stats TLV. It encloses Stats Count and stats
			data. The value field is defined in <xref target="TLVinSR"/>.
                    </t>
                    <t>
		        Type = &IANA_RM_CODE_SEQ;: Sequence Number 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. Values 32768 through 65534 are enterprise-specific as identified by
		    the E-bit and therefore not IANA-assigned. 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).
		    Values 32768 through 65534 are enterprise-specific as identified by
		    the E-bit and therefore not IANA-assigned.
                </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 high-order, or leftmost, bit of
		    each registry will be assigned to the E-bit, hence reducing the
		    Unassigned pool: the maximum available value for assignment for the
		    registries will be 32767 (i.e., as opposed to current 65530).
                </t>
	        <t>
		    For the same registries, this document requests IANA to allocate
		    the code points for Timestamp TLV (&IANA_ALL_CODE_TSTAMP;), Sequence
		    Number TLV (&IANA_ALL_CODE_SEQ;) and Extended Flags TLV
		    (&IANA_ALL_CODE_EXT_FLAGS;). IANA is requested to assign the code
		    points consistently to "BMP Route Monitoring TLVs" and "BMP
		    Stats Reports TLVs" registries seeded in this document (i.e.,
		    Timestamp TLV = &IANA_RM_CODE_TSTAMP;, etc.).
                </t>
		<t>
		    This document requests that IANA assign 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. 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. 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. 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. 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. 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. 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. 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 message contains the following TLVs:
                <list style="numbers">
                    <t>
                        a Group TLV with index 0x800b, pointing to NLRI 1, 2, 3
                        and 10
                    </t>
                    <t>
                        a Group TLV with index 0x800c, 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=0x000b      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  value={0x0001,   0x0002,                     |
  |                         0x0003,   0x000a}                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=2             |        length=0x0006          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x000c      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  value={0x0004,   0x0005,                     |
  |                         0x0006}                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=3             |         length=0x0005         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|           index=0           |     code=69   |     len=4     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      afi=1    |    safi=1     |     value=3   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=4             |         length=X              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|           index=0           |    value=$BGP_UPDATE_PDU{     ~
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               ~
  ~                                                               ~
  ~                       NLRI_1 .. NLRI_10                       ~
  ~                                                            }  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=SomeTlvX      |         length=0x0004         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x000b      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          value={4 bytes}                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0|          type=SomeTlvY      |         length=0x0008         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |1|           index=0x000c      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          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>
