RFC 1657

Definitions of Managed Objects for the Fourth Version of the Border Gateway Protocol (BGP-4) using SMIv2

πŸ“… published July 1994, from ietf

RFC 1657 πŸ’– Definitions of Managed Objects for the Fourth Version of the Border Gateway Protocol (BGP-4) using SMIv2

okay bestie, the title block is giving main character energy πŸ‘‘. This one is a Standards Track doc from July 1994, so it's an actual Internet standard and not just a vibe. It was written by S. Willis and J. Burruss from Wellfleet Communications Inc., and J. Chu, who is the editor, from IBM Corp. ✨ The header doesn't list any RFCs it obsoletes or updates, so it's standing on its own πŸ¦‹

Status of This Memo πŸ“œ

this doc specifies an Internet standards track protocol for the Internet community, and it's literally asking for discussion and suggestions for improvements 🫢 for the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). distribution of this memo is unlimited, so share it with everyone 🌸

1. Introduction ✨

this memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. specifically, it describes managed objects used for managing the Border Gateway Protocol Version 4 or lower [1, 2] πŸŽ€

2. The SNMPv2 Network Management Framework 🧚

okay so the SNMPv2 Network Management Framework is built from four major components πŸ’… here they are:

  • RFC 1442, which defines the SMI, the mechanisms used for describing and naming objects for the purpose of management.
  • STD 17, RFC 1213, which defines MIB-II, the core set of managed objects for the Internet suite of protocols.
  • RFC 1445, which defines the administrative and other architectural aspects of the framework.
  • RFC 1448, which defines the protocol used for network access to managed objects.

the Framework also lets new objects be defined for experimentation and evaluation, which is so iconic of it πŸ”₯

3. Object Definitions 🌈

managed objects are accessed through a virtual information store called the Management Information Base, or MIB πŸ—‚οΈ objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) that's defined in the SMI. each object type gets named by an OBJECT IDENTIFIER, which is an administratively assigned name. the object type plus an object instance together uniquely identify one specific instantiation of the object πŸ’œ and since humans like short names, we often use a textual string called the descriptor to refer to the object type πŸ“

4. Overview πŸ¦‹

these objects are used to control and manage a BGP-4 implementation, bestie πŸ’–

apart from a few system-wide scalar objects, this MIB is broken into three tables ✨

  • the BGP Peer Table, which has information about the state and current activity of connections with BGP peers 🀝
  • the BGP Received Path Attribute Table, which has path attributes received from all peers running BGP version 3 or less πŸ“¦
  • the BGP-4 Received Path Attribute Table, which has path attributes received from all BGP-4 peers 🌸

the attributes actually used when determining a route are a subset of the received attribute tables, but only after local routing policy has been applied. so the policy is the final filter, periodt πŸ’…

5. Definitions πŸ’œ

okay, here's the actual MIB module, copied exactly because implementers are counting on every character πŸ™ˆ

BGP4-MIB DEFINITIONS ::= BEGIN

                IMPORTS
                    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
                    IpAddress, Integer32, Counter32, Gauge32
                        FROM SNMPv2-SMI
                    mib-2
                        FROM RFC1213-MIB;

                bgp MODULE-IDENTITY
                    LAST-UPDATED "9405050000Z"
                    ORGANIZATION "IETF BGP Working Group"
                    CONTACT-INFO
                                "   John Chu  (Editor)
                            Postal: IBM Corp.
                                    P.O.Box 218
                                    Yorktown Heights, NY 10598
                                    US

                               Tel: +1 914 945 3156
                               Fax: +1 914 945 2141
                            E-mail: jychu@watson.ibm.com"
                        DESCRIPTION
                                "The MIB module for BGP-4."
                    ::= { mib-2 15 }

                bgpVersion OBJECT-TYPE
                    SYNTAX     OCTET STRING (SIZE (1..255))
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "Vector of supported BGP protocol version
                            numbers.  Each peer negotiates the version
                            from this vector.  Versions are identified
                            via the string of bits contained within this
                            object.  The first octet contains bits 0 to
                            7, the second octet contains bits 8 to 15,
                            and so on, with the most significant bit
                            referring to the lowest bit number in the
                            octet (e.g., the MSB of the first octet
                            refers to bit 0).  If a bit, i, is present
                            and set, then the version (i+1) of the BGP
                            is supported."
                    ::= { bgp 1 }

                bgpLocalAs OBJECT-TYPE
                    SYNTAX     INTEGER (0..65535)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The local autonomous system number."
                    ::= { bgp 2 }



                -- BGP Peer table.  This table contains, one entry per
                -- BGP peer, information about the BGP peer.

                bgpPeerTable OBJECT-TYPE
                    SYNTAX     SEQUENCE OF BgpPeerEntry
                    MAX-ACCESS not-accessible
                    STATUS     current
                    DESCRIPTION
                            "BGP peer table.  This table contains,
                            one entry per BGP peer, information about
                            the connections with BGP peers."
                    ::= { bgp 3 }

                bgpPeerEntry OBJECT-TYPE
                    SYNTAX     BgpPeerEntry
                    MAX-ACCESS not-accessible
                    STATUS     current
                    DESCRIPTION
                            "Entry containing information about the
                            connection with a BGP peer."
                    INDEX { bgpPeerRemoteAddr }
                    ::= { bgpPeerTable 1 }

                BgpPeerEntry ::= SEQUENCE {
                        bgpPeerIdentifier
                            IpAddress,
                        bgpPeerState
                            INTEGER,
                        bgpPeerAdminStatus
                            INTEGER,
                        bgpPeerNegotiatedVersion
                            Integer32,
                        bgpPeerLocalAddr
                            IpAddress,
                        bgpPeerLocalPort
                            INTEGER,
                        bgpPeerRemoteAddr
                            IpAddress,
                        bgpPeerRemotePort
                            INTEGER,
                        bgpPeerRemoteAs
                            INTEGER,
                        bgpPeerInUpdates
                            Counter32,
                        bgpPeerOutUpdates
                            Counter32,
                        bgpPeerInTotalMessages
                            Counter32,
                        bgpPeerOutTotalMessages
                            Counter32,
                        bgpPeerLastError
                            OCTET STRING,
                        bgpPeerFsmEstablishedTransitions
                            Counter32,
                        bgpPeerFsmEstablishedTime
                            Gauge32,
                        bgpPeerConnectRetryInterval
                            INTEGER,
                        bgpPeerHoldTime
                            INTEGER,
                        bgpPeerKeepAlive

                            INTEGER,
                        bgpPeerHoldTimeConfigured
                            INTEGER,
                        bgpPeerKeepAliveConfigured
                            INTEGER,
                        bgpPeerMinASOriginationInterval
                            INTEGER,
                        bgpPeerMinRouteAdvertisementInterval
                            INTEGER,
                        bgpPeerInUpdateElapsedTime
                            Gauge32
                        }

                bgpPeerIdentifier OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The BGP Identifier of this entry's BGP
                            peer."
                    ::= { bgpPeerEntry 1 }

                bgpPeerState OBJECT-TYPE
                    SYNTAX     INTEGER {
                                        idle(1),
                                        connect(2),
                                        active(3),
                                        opensent(4),
                                        openconfirm(5),
                                        established(6)
                               }
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The BGP peer connection state."
                    ::= { bgpPeerEntry 2 }

                bgpPeerAdminStatus OBJECT-TYPE
                    SYNTAX     INTEGER {
                                        stop(1),
                                        start(2)
                               }
                    MAX-ACCESS read-write
                    STATUS     current
                    DESCRIPTION
                            "The desired state of the BGP connection.
                            A transition from 'stop' to 'start' will
                            cause the BGP Start Event to be generated.

                            A transition from 'start' to 'stop' will
                            cause the BGP Stop Event to be generated.
                            This parameter can be used to restart BGP
                            peer connections.  Care should be used in
                            providing write access to this object
                            without adequate authentication."
                    ::= { bgpPeerEntry 3 }

                bgpPeerNegotiatedVersion OBJECT-TYPE
                    SYNTAX     Integer32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The negotiated version of BGP running
                            between the two peers."
                    ::= { bgpPeerEntry 4 }

                bgpPeerLocalAddr OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The local IP address of this entry's BGP
                            connection."
                    ::= { bgpPeerEntry 5 }

                bgpPeerLocalPort OBJECT-TYPE
                    SYNTAX     INTEGER (0..65535)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The local port for the TCP connection
                            between the BGP peers."
                    ::= { bgpPeerEntry 6 }

part 1 of 4 is done πŸŽ€ part 2 picks up the rest of the MIB definitions from here πŸ’–

Okay, bestie, picking up right where we left off with the bgpPeerRemoteAddr object πŸ’Œ Here's the BGP peer table's next batch of fields, and honestly the TCP-connection stuff is so clean πŸ¦‹

Every object below gets its own little code block, copied exactly from the original so nothing gets lost in translation ✨

The remote IP address of this entry's BGP peer, the far end of the connection 🌸

                bgpPeerRemoteAddr OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The remote IP address of this entry's BGP
                            peer."
                    ::= { bgpPeerEntry 7 }

Now the remote port πŸŽ€ This one is linked to the standard TCP connection table, so the four address and port objects work together as a set 🫢

                bgpPeerRemotePort OBJECT-TYPE
                    SYNTAX     INTEGER (0..65535)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The remote port for the TCP connection
                            between the BGP peers.  Note that the
                            objects bgpPeerLocalAddr,
                            bgpPeerLocalPort, bgpPeerRemoteAddr and
                            bgpPeerRemotePort provide the appropriate
                            reference to the standard MIB TCP
                            connection table."
                    ::= { bgpPeerEntry 8 }

The remote autonomous system number, aka who the peer is in AS terms 🧚

                bgpPeerRemoteAs OBJECT-TYPE
                    SYNTAX     INTEGER (0..65535)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The remote autonomous system number."
                    ::= { bgpPeerEntry 9 }

Next up are the message counters πŸ’œ Inbound UPDATE messages come first. These start at zero once the connection is established πŸ“¬

                bgpPeerInUpdates OBJECT-TYPE
                    SYNTAX     Counter32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The number of BGP UPDATE messages
                            received on this connection.  This object
                            should be initialized to zero (0) when the
                            connection is established."
                    ::= { bgpPeerEntry 10 }

Outbound UPDATE messages, the sent-side twin of the one above 🌈 Same deal: zeroed when the connection is established πŸ“

                bgpPeerOutUpdates OBJECT-TYPE
                    SYNTAX     Counter32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The number of BGP UPDATE messages
                            transmitted on this connection.  This
                            object should be initialized to zero (0)
                            when the connection is established."
                    ::= { bgpPeerEntry 11 }

Total messages received from the peer, not just UPDATEs. Also zeroed on connection setup ✨

                bgpPeerInTotalMessages OBJECT-TYPE
                    SYNTAX     Counter32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The total number of messages received
                            from the remote peer on this connection.
                            This object should be initialized to zero
                            when the connection is established."
                    ::= { bgpPeerEntry 12 }

And the outbound total, same energy but for messages sent to the peer πŸ’…

                bgpPeerOutTotalMessages OBJECT-TYPE
                    SYNTAX     Counter32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The total number of messages transmitted to
                            the remote peer on this connection.  This
                            object should be initialized to zero when
                            the connection is established."
                    ::= { bgpPeerEntry 13 }

Now the error log 😭 This is a two-byte OCTET STRING. The first byte is the error code and the second byte is the subcode. If nothing has gone wrong, it's just zero πŸ™ˆ

                bgpPeerLastError OBJECT-TYPE
                    SYNTAX     OCTET STRING (SIZE (2))
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The last error code and subcode seen by this
                            peer on this connection.  If no error has
                            occurred, this field is zero.  Otherwise, the
                            first byte of this two byte OCTET STRING
                            contains the error code, and the second byte
                            contains the subcode."
                    ::= { bgpPeerEntry 14 }

How many times the BGP FSM has moved into the established state, which is a whole vibe πŸ”₯

                bgpPeerFsmEstablishedTransitions OBJECT-TYPE
                    SYNTAX     Counter32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The total number of times the BGP FSM
                            transitioned into the established state."
                    ::= { bgpPeerEntry 15 }

The established timer πŸ•°οΈ It counts seconds that the peer has been in Established, or how long it's been since the peer was last there. It gets reset to zero when a new peer is configured or the router boots πŸ‘‘

                bgpPeerFsmEstablishedTime OBJECT-TYPE
                    SYNTAX     Gauge32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "This timer indicates how long (in
                            seconds) this peer has been in the
                            Established state or how long
                            since this peer was last in the
                            Established state.  It is set to zero when
                            a new peer is configured or the router is
                            booted."

                    ::= { bgpPeerEntry 16 }

Time interval for the ConnectRetry timer, which is writable. The suggested value is 120 seconds 🌸

                bgpPeerConnectRetryInterval OBJECT-TYPE
                    SYNTAX     INTEGER (1..65535)
                    MAX-ACCESS read-write
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the
                            ConnectRetry timer.  The suggested value
                            for this timer is 120 seconds."
                    ::= { bgpPeerEntry 17 }

The Hold Time that was agreed with the peer. This one's calculated, not configured. It uses the smaller of the configured value and the Hold Time received in the OPEN message. There are rules here about when it's zero and when it has to be at least three seconds 🧐

                bgpPeerHoldTime OBJECT-TYPE
                    SYNTAX     INTEGER  ( 0 | 3..65535 )
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the Hold
                            Timer established with the peer.  The
                            value of this object is calculated by this
                            BGP speaker by using the smaller of the
                            value in bgpPeerHoldTimeConfigured and the
                            Hold Time received in the OPEN message.
                            This value must be at lease three seconds
                            if it is not zero (0) in which case the
                            Hold Timer has not been established with
                            the peer, or, the value of
                            bgpPeerHoldTimeConfigured is zero (0)."
                    ::= { bgpPeerEntry 18 }

The KeepAlive timer that was agreed with the peer. It's calculated so it keeps the same proportion to the Hold Time as the configured KeepAlive does to the configured Hold Time 🫧 A zero value means the KeepAlive timer isn't established, or the configured value is zero πŸ™ƒ

                bgpPeerKeepAlive OBJECT-TYPE
                    SYNTAX     INTEGER ( 0 | 1..21845 )
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the KeepAlive
                            timer established with the peer.  The value
                            of this object is calculated by this BGP
                            speaker such that, when compared with
                            bgpPeerHoldTime, it has the same
                            proportion as what
                            bgpPeerKeepAliveConfigured has when
                            compared with bgpPeerHoldTimeConfigured.
                            If the value of this object is zero (0),
                            it indicates that the KeepAlive timer has
                            not been established with the peer, or,
                            the value of bgpPeerKeepAliveConfigured is
                            zero (0)."

                    ::= { bgpPeerEntry 19 }

The Hold Time you configure for this peer, which is writable. It gets sent in your OPEN message and gets compared with the peer's Hold Time to work out the real one. It can't be less than three seconds unless it's zero, and zero means the Hold Time doesn't get established with the peer. Suggested value is 90 seconds ⏰

                bgpPeerHoldTimeConfigured OBJECT-TYPE
                    SYNTAX     INTEGER ( 0 | 3..65535 )
                    MAX-ACCESS read-write
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the Hold Time
                            configured for this BGP speaker with this
                            peer.  This value is placed in an OPEN
                            message sent to this peer by this BGP
                            speaker, and is compared with the Hold
                            Time field in an OPEN message received
                            from the peer when determining the Hold
                            Time (bgpPeerHoldTime) with the peer.
                            This value must not be less than three
                            seconds if it is not zero (0) in which
                            case the Hold Time is NOT to be
                            established with the peer.  The suggested
                            value for this timer is 90 seconds."
                    ::= { bgpPeerEntry 20 }

The configured KeepAlive value. This one doesn't set how often KEEPALIVE messages actually go out. It only sets their frequency relative to the configured Hold Time. The real interval is in bgpPeerKeepAlive. There's a reasonable max, which is one third of the configured Hold Time. Zero means no periodic KEEPALIVE messages get sent after the connection is up. The suggested value is 30 seconds 🌼

                bgpPeerKeepAliveConfigured OBJECT-TYPE
                    SYNTAX     INTEGER ( 0 | 1..21845 )
                    MAX-ACCESS read-write
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the
                            KeepAlive timer configured for this BGP
                            speaker with this peer.  The value of this
                            object will only determine the
                            KEEPALIVE messages' frequency relative to
                            the value specified in
                            bgpPeerHoldTimeConfigured; the actual
                            time interval for the KEEPALIVE messages
                            is indicated by bgpPeerKeepAlive.  A
                            reasonable maximum value for this timer
                            would be configured to be one
                            third of that of
                            bgpPeerHoldTimeConfigured.
                            If the value of this object is zero (0),
                            no periodical KEEPALIVE messages are sent
                            to the peer after the BGP connection has
                            been established.  The suggested value for
                            this timer is 30 seconds."
                    ::= { bgpPeerEntry 21 }

The MinASOriginationInterval timer, writable, with a suggested value of 15 seconds πŸ’«

                bgpPeerMinASOriginationInterval OBJECT-TYPE
                    SYNTAX     INTEGER (1..65535)
                    MAX-ACCESS read-write
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the
                            MinASOriginationInterval timer.
                            The suggested value for this timer is 15
                            seconds."
                    ::= { bgpPeerEntry 22 }

The MinRouteAdvertisementInterval timer, also writable, suggested at 30 seconds πŸ“£

                bgpPeerMinRouteAdvertisementInterval OBJECT-TYPE
                    SYNTAX     INTEGER (1..65535)
                    MAX-ACCESS read-write
                    STATUS     current
                    DESCRIPTION
                            "Time interval in seconds for the
                            MinRouteAdvertisementInterval timer.
                            The suggested value for this timer is 30
                            seconds."
                    ::= { bgpPeerEntry 23 }

Last one in this batch, and it's a good one ⏳ It's how many seconds have passed since the last UPDATE came in from the peer. Every time bgpPeerInUpdates goes up, this resets to zero πŸŽ‰

                bgpPeerInUpdateElapsedTime OBJECT-TYPE
                    SYNTAX     Gauge32
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "Elapsed time in seconds since the last BGP
                            UPDATE message was received from the peer.
                            Each time bgpPeerInUpdates is incremented,
                            the value of this object is set to zero
                            (0)."
                    ::= { bgpPeerEntry 24 }

Part 3 is coming up next, so stay tuned! πŸŒˆπŸ’–

okay so this is where the MIB gets really fun πŸ’… the BGP identifier is up first, and then we get the old-school received path attribute table (deprecated, bye πŸ₯€) and the newer BGP-4 one that's giving main character πŸ‘‘

                bgpIdentifier OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The BGP Identifier of local system."
                    ::= { bgp 4 }

                -- Received Path Attribute Table.  This table contains,
                -- one entry per path to a network, path attributes
                -- received from all peers running BGP version 3 or
                -- less.  This table is deprecated.

                bgpRcvdPathAttrTable OBJECT-TYPE
                    SYNTAX     SEQUENCE OF BgpPathAttrEntry
                    MAX-ACCESS not-accessible
                    STATUS     obsolete
                    DESCRIPTION
                            "The BGP Received Path Attribute Table
                            contains information about paths to
                            destination networks received from all
                            peers running BGP version 3 or less."
                    ::= { bgp 5 }

                bgpPathAttrEntry OBJECT-TYPE
                    SYNTAX     BgpPathAttrEntry
                    MAX-ACCESS not-accessible
                    STATUS     obsolete
                    DESCRIPTION
                            "Information about a path to a network."
                    INDEX { bgpPathAttrDestNetwork,
                            bgpPathAttrPeer        }
                    ::= { bgpRcvdPathAttrTable 1 }

                BgpPathAttrEntry ::= SEQUENCE {
                    bgpPathAttrPeer
                         IpAddress,
                    bgpPathAttrDestNetwork
                         IpAddress,
                    bgpPathAttrOrigin
                         INTEGER,
                    bgpPathAttrASPath
                         OCTET STRING,
                    bgpPathAttrNextHop
                         IpAddress,
                    bgpPathAttrInterASMetric
                         Integer32
                }

                bgpPathAttrPeer OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     obsolete
                    DESCRIPTION
                            "The IP address of the peer where the path
                            information was learned."

                    ::= { bgpPathAttrEntry 1 }

                bgpPathAttrDestNetwork OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     obsolete
                    DESCRIPTION
                            "The address of the destination network."
                    ::= { bgpPathAttrEntry 2 }

                bgpPathAttrOrigin OBJECT-TYPE
                    SYNTAX     INTEGER {
                                   igp(1),-- networks are interior
                                   egp(2),-- networks learned via EGP
                                   incomplete(3) -- undetermined
                               }
                    MAX-ACCESS read-only
                    STATUS     obsolete
                    DESCRIPTION
                         "The ultimate origin of the path information."
                    ::= { bgpPathAttrEntry 3 }

                bgpPathAttrASPath OBJECT-TYPE
                    SYNTAX     OCTET STRING (SIZE (2..255))
                    MAX-ACCESS read-only
                    STATUS     obsolete
                    DESCRIPTION
                            "The set of ASs that must be traversed to
                            reach the network.  This object is
                            probably best represented as SEQUENCE OF
                            INTEGER.  For SMI compatibility, though,
                            it is represented as OCTET STRING.  Each
                            AS is represented as a pair of octets
                            according to the following algorithm:

                                first-byte-of-pair = ASNumber / 256;
                                second-byte-of-pair = ASNumber & 255;"
                    ::= { bgpPathAttrEntry 4 }

                bgpPathAttrNextHop OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     obsolete
                    DESCRIPTION
                            "The address of the border router that
                            should be used for the destination
                            network."
                    ::= { bgpPathAttrEntry 5 }

                bgpPathAttrInterASMetric OBJECT-TYPE
                    SYNTAX     Integer32
                    MAX-ACCESS read-only
                    STATUS     obsolete
                    DESCRIPTION
                            "The optional inter-AS metric.  If this
                            attribute has not been provided for this
                            route, the value for this object is 0."
                    ::= { bgpPathAttrEntry 6 }



                -- BGP-4 Received Path Attribute Table.  This table
                -- contains, one entry per path to a network, path
                -- attributes received from all peers running BGP-4.

                bgp4PathAttrTable OBJECT-TYPE
                    SYNTAX     SEQUENCE OF Bgp4PathAttrEntry
                    MAX-ACCESS not-accessible
                    STATUS     current
                    DESCRIPTION
                            "The BGP-4 Received Path Attribute Table
                            contains information about paths to
                            destination networks received from all
                            BGP4 peers."
                    ::= { bgp 6 }

                bgp4PathAttrEntry OBJECT-TYPE
                    SYNTAX     Bgp4PathAttrEntry
                    MAX-ACCESS not-accessible
                    STATUS     current
                    DESCRIPTION
                            "Information about a path to a network."
                    INDEX { bgp4PathAttrIpAddrPrefix,
                            bgp4PathAttrIpAddrPrefixLen,
                            bgp4PathAttrPeer            }
                    ::= { bgp4PathAttrTable 1 }

                Bgp4PathAttrEntry ::= SEQUENCE {
                    bgp4PathAttrPeer
                         IpAddress,
                    bgp4PathAttrIpAddrPrefixLen
                         INTEGER,
                    bgp4PathAttrIpAddrPrefix
                         IpAddress,
                    bgp4PathAttrOrigin
                         INTEGER,
                    bgp4PathAttrASPathSegment

                         OCTET STRING,
                    bgp4PathAttrNextHop
                         IpAddress,
                    bgp4PathAttrMultiExitDisc
                         INTEGER,
                    bgp4PathAttrLocalPref
                         INTEGER,
                    bgp4PathAttrAtomicAggregate
                         INTEGER,
                    bgp4PathAttrAggregatorAS
                         INTEGER,
                    bgp4PathAttrAggregatorAddr
                         IpAddress,
                    bgp4PathAttrCalcLocalPref
                         INTEGER,
                    bgp4PathAttrBest
                         INTEGER,
                    bgp4PathAttrUnknown
                         OCTET STRING

                }

                bgp4PathAttrPeer OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The IP address of the peer where the path
                            information was learned."
                    ::= { bgp4PathAttrEntry 1 }

                bgp4PathAttrIpAddrPrefixLen OBJECT-TYPE
                    SYNTAX     INTEGER (0..32)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "Length in bits of the IP address prefix
                            in the Network Layer Reachability
                            Information field."
                    ::= { bgp4PathAttrEntry 2 }

                bgp4PathAttrIpAddrPrefix OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "An IP address prefix in the Network Layer
                            Reachability Information field.  This object
                            is an IP address containing the prefix with
                            length specified by
                            bgp4PathAttrIpAddrPrefixLen.
                            Any bits beyond the length specified by
                            bgp4PathAttrIpAddrPrefixLen are zeroed."
                    ::= { bgp4PathAttrEntry 3 }

                bgp4PathAttrOrigin OBJECT-TYPE
                    SYNTAX     INTEGER {
                                         igp(1),-- networks are interior
                                         egp(2),-- networks learned
                                                -- via EGP
                                         incomplete(3) -- undetermined
                                       }
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The ultimate origin of the path
                            information."
                    ::= { bgp4PathAttrEntry 4 }

                bgp4PathAttrASPathSegment OBJECT-TYPE
                    SYNTAX     OCTET STRING (SIZE (2..255))
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The sequence of AS path segments.  Each AS
                            path segment is represented by a triple
                            <type, length, value>.

                            The type is a 1-octet field which has two
                            possible values:
                                 1      AS_SET: unordered set of ASs a
                                             route in the UPDATE
                                             message has traversed
                                 2      AS_SEQUENCE: ordered set of ASs
                                             a route in the UPDATE
                                             message has traversed.

                            The length is a 1-octet field containing the
                            number of ASs in the value field.

                            The value field contains one or more AS
                            numbers, each AS is represented in the octet
                            string as a pair of octets according to the
                            following algorithm:

                                first-byte-of-pair = ASNumber / 256;
                                second-byte-of-pair = ASNumber & 255;"
                    ::= { bgp4PathAttrEntry 5 }

                bgp4PathAttrNextHop OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The address of the border router that
                            should be used for the destination
                            network."
                    ::= { bgp4PathAttrEntry 6 }
                bgp4PathAttrMultiExitDisc OBJECT-TYPE
                    SYNTAX     INTEGER (-1..2147483647)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "This metric is used to discriminate
                            between multiple exit points to an
                            adjacent autonomous system.  A value of -1
                            indicates the absence of this attribute."
                    ::= { bgp4PathAttrEntry 7 }

                bgp4PathAttrLocalPref OBJECT-TYPE
                    SYNTAX     INTEGER (-1..2147483647)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The originating BGP4 speaker's degree of
                            preference for an advertised route.  A
                            value of -1 indicates the absence of this
                            attribute."
                    ::= { bgp4PathAttrEntry 8 }

                bgp4PathAttrAtomicAggregate OBJECT-TYPE
                    SYNTAX     INTEGER {
                                   lessSpecificRrouteNotSelected(1),
                                   lessSpecificRouteSelected(2)
                               }
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "Whether or not the local system has
                            selected a less specific route without
                            selecting a more specific route."
                    ::= { bgp4PathAttrEntry 9 }

                bgp4PathAttrAggregatorAS OBJECT-TYPE
                    SYNTAX     INTEGER (0..65535)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The AS number of the last BGP4 speaker that
                            performed route aggregation.  A value of
                            zero (0) indicates the absence of this
                            attribute."
                    ::= { bgp4PathAttrEntry 10 }

                bgp4PathAttrAggregatorAddr OBJECT-TYPE
                    SYNTAX     IpAddress
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The IP address of the last BGP4 speaker
                            that performed route aggregation.  A value
                            of 0.0.0.0 indicates the absence of this
                            attribute."
                    ::= { bgp4PathAttrEntry 11 }

                bgp4PathAttrCalcLocalPref OBJECT-TYPE
                    SYNTAX     INTEGER (-1..2147483647)
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "The degree of preference calculated by the
                            receiving BGP4 speaker for an advertised
                            route.  A value of -1 indicates the
                            absence of this attribute."
                    ::= { bgp4PathAttrEntry 12 }

                bgp4PathAttrBest OBJECT-TYPE
                    SYNTAX     INTEGER {
                                   false(1),-- not chosen as best route
                                   true(2) -- chosen as best route
                               }
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "An indication of whether or not this route
                            was chosen as the best BGP4 route."
                    ::= { bgp4PathAttrEntry 13 }

               bgp4PathAttrUnknown OBJECT-TYPE
                    SYNTAX     OCTET STRING (SIZE(0..255))
                    MAX-ACCESS read-only
                    STATUS     current
                    DESCRIPTION
                            "One or more path attributes not understood
                             by this BGP4 speaker.  Size zero (0)
                             indicates the absence of such
                             attribute(s).  Octets beyond the maximum
                             size, if any, are not recorded by this
                             object."
                    ::= { bgp4PathAttrEntry 14 }


                -- Traps.

                bgpTraps                OBJECT IDENTIFIER ::= { bgp 7 }

                bgpEstablished NOTIFICATION-TYPE
                    OBJECTS { bgpPeerLastError,
                              bgpPeerState      }
                    STATUS  current
                    DESCRIPTION
                            "The BGP Established event is generated when
                            the BGP FSM enters the ESTABLISHED state."
                    ::= { bgpTraps 1 }

                bgpBackwardTransition NOTIFICATION-TYPE
                    OBJECTS { bgpPeerLastError,
                              bgpPeerState      }
                    STATUS  current
                    DESCRIPTION
                            "The BGPBackwardTransition Event is generated
                            when the BGP FSM moves from a higher numbered
                            state to a lower numbered state."
                    ::= { bgpTraps 2 }

END

6. Acknowledgements πŸ™Œ

Huge shoutout to everyone in the Interconnectivity Working Group for helping out, and especially these legends:

        Yakov Rekhter, IBM
        Rob Coltun, University of Maryland
        Guy Almes, ANS
        Jeff Honig, Cornell Theory Center
        Marshall T. Rose, Dover Beach Consulting, Inc.
        Dennis Ferguson, ANS
        Mike Mathis, PSC
        John Krawczyk, Wellfleet Communications Inc.
        Curtis Villamizar, ANS
        Dave LeRoy, Pencom Systems
        Paul Traina, cisco Systems
        Andrew Partan, UUNET
        Robert Snyder, cisco Systems
        Dimitry Haskin, Wellfleet Communications Inc.
        Peder Chr Norgaard, Telebit Communications A/S
        Joel Halpern, Network Systems Corporation

7. References πŸ“š

These are the two RFCs this one leans on, and yes, you need to read them πŸ€“

   [1] Rekhter, Y., and T. Li, "A Border Gateway Protocol 4 (BGP-4)",
       RFC 1654,  T.J. Watson Research Center, IBM Corp., cisco Systems,
       July 1994.

   [2] Rekhter, Y., and P. Gross, Editors, "Application of the Border
       Gateway Protocol in the Internet", RFC 1655 T.J. Watson Research
       Center, IBM Corp., MCI, July 1994.

8. Security Considerations πŸ”’

Security issues are not discussed in this memo. Zero. None. Nada. πŸ’€ This one is a no-go zone for security talk, so don't go looking for it here 🫣

9. Authors' Addresses πŸ’Œ

Here are the brains behind it, with their addresses and contact info so you can slide into their inbox πŸ’…

   Steven Willis
   Wellfleet Communications Inc.
   15 Crosby Drive
   Bedford, MA 01730

   Phone: (617) 275-2400
   EMail: swillis@wellfleet.com


   John Burruss
   Wellfleet Communications Inc.
   15 Crosby Drive
   Bedford, MA 01730

   Phone: (617) 275-2400
   EMail: jburruss@wellfleet.com


   John Chu
   IBM Corp.
   P.O.Box 218
   Yorktown Heights, NY 10598

   Phone: (914) 945-3156
   EMail: jychu@watson.ibm.com

That's the whole MIB, bestie! 🌈✨ You made it through every single bit πŸ‘‘

πŸ“¦ where this page comes from