CUMULUS-BGPUN-MIB DEFINITIONS ::= BEGIN

--
-- BGP Unnumbered attributes in the Cumulus enterprise MIB --
--

IMPORTS
    OBJECT-TYPE, MODULE-IDENTITY,
    Integer32                           FROM SNMPv2-SMI
    ifIndex                             FROM IF-MIB
    cumulusMib                          FROM CUMULUS-SNMP-MIB
    DisplayString,
    TEXTUAL-CONVENTION, TimeStamp       FROM SNMPv2-TC
    InetAddressIPv6,
    InetAddress                     FROM INET-ADDRESS-MIB;

bgp MODULE-IDENTITY
    LAST-UPDATED "202010120000Z"
    ORGANIZATION "Cumulus Networks/Nvidia"
    CONTACT-INFO
         "postal:   Cumulus Networks
                    185 E. Dana Street,
                    Mountain View, CA 94041
          web:      http://www.cumulusnetworks.com"
    DESCRIPTION
        ""
    REVISION     "202010120000Z"
    DESCRIPTION
        "Initial version."
    ::= { cumulusMib 4 }

    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 }

    bgpOuterTable OBJECT IDENTIFIER ::= {bgp 3}   
    -- 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."
        ::= { bgpOuterTable 1 }

    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
                InetAddress,
            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,
            bgpPeerIface
                OCTET STRING,
            bgpPeerDesc
                OCTET STRING
            }

    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     InetAddress
        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 }

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

    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 }

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

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    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 }

    bgpPeerIface OBJECT-TYPE
        SYNTAX  OCTET STRING (SIZE (2..255)) 
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "For BGP unnumbered neighbors routes are 
                 using interfaces as nexthop interfaces.
                 This is the inteface from which nexthop 
                 route"
        ::= { bgpPeerEntry 25 }

    bgpPeerDesc OBJECT-TYPE
        SYNTAX  OCTET STRING (SIZE (2..255))
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is neighbour or peer description 
                field. It provides human readable info 
                about neighbour or peer"
        ::= { bgpPeerEntry 26 }

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

    -- 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 5 }

    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
             InetAddress,
        bgp4PathAttrIpAddrPrefixLen
             INTEGER,
        bgp4PathAttrIpAddrPrefix
             IpAddress,
        bgp4PathAttrOrigin
             INTEGER,
        bgp4PathAttrASPathSegment
             OCTET STRING,
        bgp4PathAttrNextHop
             InetAddress,
        bgp4PathAttrMultiExitDisc
             INTEGER,
        bgp4PathAttrLocalPref
             INTEGER,
        bgp4PathAttrAtomicAggregate
             INTEGER,
        bgp4PathAttrAggregatorAS
             INTEGER,
        bgp4PathAttrAggregatorAddr
             IpAddress,
        bgp4PathAttrCalcLocalPref
             INTEGER,
        bgp4PathAttrBest
             INTEGER,
        bgp4PathAttrUnknown
             OCTET STRING

    }

    bgp4PathAttrPeer OBJECT-TYPE
        SYNTAX     InetAddress
        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     InetAddress
        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
