ARISTA-HARDWARE-UTILIZATION-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    Counter32, NOTIFICATION-TYPE      FROM SNMPv2-SMI
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP                FROM SNMPv2-CONF
    TimeStamp, DisplayString          FROM SNMPv2-TC
    aristaMibs                        FROM ARISTA-SMI-MIB;

aristaHardwareUtilizationMIB  MODULE-IDENTITY
    LAST-UPDATED "202404010000Z"
    ORGANIZATION "Arista Networks, Inc."
    CONTACT-INFO
        "Arista Networks, Inc.

         Postal: 5453 Great America Parkway
                 Santa Clara, CA 95054

         Tel: +1 408 547-5500

         E-mail: snmp@arista.com"
    DESCRIPTION
            "This MIB contains information about the capacity and
            utilization of hardware resources on Arista devices.

            Arista ships and supports devices which perform packet
            forwarding decisions in hardware. To make these forwarding
            decisions (L2 bridging, input and output access list, L3
            forwarding based on IP destination etc.), the devices use
            information programmed in various hardware
            resources. Examples of such hardware resources are the
            hash table used for MAC address lookup, TCAM for
            destination IP lookup etc. 

            Each of Arista's devices have different hardware resource
            capacity or size limits. It is extremely useful for a
            Network Management system to be able to query and monitor
            the utilization of these hardware resources. Due to
            unxpected network event or configuration change, it is
            possible that a specific hardware resource is over
            utilized and there is no room to program additional
            entries. For example, a routing mis-configuration can
            result in overflowing the L3 forwarding TCAM. This may
            be detrimental to the network operation. So it's extremely
            useful to monitor the utilization of the various hardware
            resources of a specific device.

            On some devices, due to hardware design considerations,
            several features may have to share a single hardware
            resource. If one feature ends up using more of the same
            resource, it can affect the functionality of another
            feature. This is another reason to have visibility into
            the hardware resource usage.

            The hardware element that makes the forwarding decision is
            frequently referred to as the 'Forwarding ASIC' or
            'Forwarding Chip'. In this MIB document we refer to this
            hardware element as 'Forwarding Element'. Even though a
            device can have multiple forwarding elements, the information
            programmed in each of the forwarding element is typically
            the same. But there are some cases, where this is not the
            case. In such instances, the utilization of relevant
            hardware resource(s) may not be the same across all the
            forwarding elements.

            This MIB module provides the hardware capacity and
            utilization information for various resources in a generic
            manner, that's applicable to all Arista devices."
    REVISION     "202404010000Z"
    DESCRIPTION
           "Added the support for aristaHardwareUtilizationSharedFeatures."
    REVISION     "201605240000Z"
    DESCRIPTION
           "Initial revision of the MIB module."
    ::= { aristaMibs 22 }

aristaHardwareUtilizationMibNotifications OBJECT IDENTIFIER
    ::= { aristaHardwareUtilizationMIB 0 }
  
aristaHardwareUtilizationMibObjects      OBJECT IDENTIFIER
    ::= { aristaHardwareUtilizationMIB 1 }

aristaHardwareUtilizationMibConformance  OBJECT IDENTIFIER
    ::= { aristaHardwareUtilizationMIB 2 }

aristaHardwareUtilizationTable   OBJECT-TYPE
    SYNTAX                     SEQUENCE OF AristaHardwareUtilizationEntry
    MAX-ACCESS                 not-accessible
    STATUS                     current
    DESCRIPTION
        "This table contains information about various hardware
        resources and their utilization."
    ::= { aristaHardwareUtilizationMibObjects 1 }
  
aristaHardwareUtilizationEntry    OBJECT-TYPE
    SYNTAX                     AristaHardwareUtilizationEntry
    MAX-ACCESS                 not-accessible
    STATUS                     current
    DESCRIPTION
        "A single conceptual row containing utilization information
        for a specific hardware resource.

        There are many hardware resources on Arista devices. Each
        resource is identified by a name. Several 'features' can be
        using the same hardware resource. Every feature is identified
        by a name. On several platforms, we have more than one
        forwarding elements which is identified by a name.

        A single conceptual row in the hardware utilization table
        represents utilization of a specific hardware resource by a
        specific feature on the specified forwarding element.

        Note that it is possible to have an entry where feature and
        forwarding element are both empty strings. In these cases, the
        conceptual row describes the overall utilization for the
        particular hardware resource."

    INDEX                  { aristaHardwareUtilizationResource,
                             aristaHardwareUtilizationFeature,
                             aristaHardwareUtilizationForwardingElement
                           }
    ::= { aristaHardwareUtilizationTable 1 }

AristaHardwareUtilizationEntry     ::= SEQUENCE {
    aristaHardwareUtilizationResource            DisplayString,
    aristaHardwareUtilizationFeature             DisplayString,
    aristaHardwareUtilizationForwardingElement   DisplayString,
    aristaHardwareUtilizationInUseEntries        Counter32,
    aristaHardwareUtilizationFreeEntries         Counter32,
    aristaHardwareUtilizationCommittedEntries    Counter32,
    aristaHardwareUtilizationMaxEntries          Counter32,
    aristaHardwareUtilizationHighWatermark       Counter32,
    aristaHardwareUtilizationHighWatermarkTime   TimeStamp,
    aristaHardwareUtilizationSharedFeatures      OCTET STRING
}

aristaHardwareUtilizationResource         OBJECT-TYPE
    SYNTAX                             DisplayString (SIZE(0..35))
    MAX-ACCESS                         not-accessible
    STATUS                             current
    DESCRIPTION
        "The name that identifies the specific hardware resource."
    ::= { aristaHardwareUtilizationEntry 1 }

aristaHardwareUtilizationFeature          OBJECT-TYPE
    SYNTAX                             DisplayString (SIZE(0..35))
    MAX-ACCESS                         not-accessible
    STATUS                             current
    DESCRIPTION
        "The name that identifies the specific feature which is using
        the hardware resource in question. As noted in the description
        of this MIB module, multiple features can share a specific
        hardware resource."
    ::= { aristaHardwareUtilizationEntry 2 }

aristaHardwareUtilizationForwardingElement  OBJECT-TYPE
    SYNTAX                               DisplayString (SIZE(0..35))
    MAX-ACCESS                           not-accessible
    STATUS                               current
    DESCRIPTION
        "The name that identifies the specific forwarding element on
        the device that this hardware resource belongs to. As noted in
        the description of this MIB module, for some features
        information is programmed differently across various
        forwarding elements. In such cases, this MIB object represents
        the forwarding element that corresponds to this entry's
        hardware resource utilization. Otherwise this MIB object will
        just be an empty string."
    ::= { aristaHardwareUtilizationEntry 3 }

aristaHardwareUtilizationInUseEntries  OBJECT-TYPE
    SYNTAX                          Counter32
    MAX-ACCESS                      read-only
    STATUS                          current
    DESCRIPTION
        "This MIB object represents the number of entries in the
        specific hardware resource that is currently consumed by
        a feature."
    ::= { aristaHardwareUtilizationEntry 4 }

aristaHardwareUtilizationFreeEntries   OBJECT-TYPE
    SYNTAX                          Counter32
    MAX-ACCESS                      read-only
    STATUS                          current
    DESCRIPTION
        "This MIB object represents the number of free entries in the
        specific hardware resource."
    ::= { aristaHardwareUtilizationEntry 5 }

aristaHardwareUtilizationCommittedEntries   OBJECT-TYPE
    SYNTAX                               Counter32
    MAX-ACCESS                           read-only
    STATUS                               current
    DESCRIPTION
        "This MIB object represents the number of entries of a
        hardware resource that have been dedicated ('reserved') for a
        particular feature. When features 'request' for a specific
        hardware resource, entries are 'reserved' for the feature. It
        is possible that the actual number of entries used is less
        than what has been reserved for the feature."
    ::= { aristaHardwareUtilizationEntry 6 }

aristaHardwareUtilizationMaxEntries      OBJECT-TYPE
    SYNTAX                               Counter32
    MAX-ACCESS                           read-only
    STATUS                               current
    DESCRIPTION
        "This MIB object represents the maximum number of 'logical'
        entries that can be allocated for the given hardware resource
        by the specific feature (assuming it is not being shared with
        any other feature).

        Even though the raw number of maximum entries is fixed for a
        given hardware resource, the logical entries available to a
        specific feature may vary. 

        An example: Consider a device where the width ('number of
        bits') of a single TCAM entry is 128. It is possible to store an
        IPv4 access control list (matching both source and destination
        addresses) using a single entry of this TCAM. But given that
        IPv6 addresses are 128 bits long, 2 TCAM entries will be
        required to store an equivalent IPv6 access control list.

        In this example above, the 'maximum number of entries'
        available for the IPv4 feature is twice the number for
        the IPv6 feature."      
    ::= { aristaHardwareUtilizationEntry 7 }

aristaHardwareUtilizationHighWatermark      OBJECT-TYPE
    SYNTAX                               Counter32
    MAX-ACCESS                           read-only
    STATUS                               current
    DESCRIPTION
        "This MIB object represents the maximum number of entries that
        the specific feature has used up at any point in time. This
        allows the Network Management system to monitor the hardware
        resource utilization pattern for a given feature allowing the
        operator to potentially take some action."
    ::= { aristaHardwareUtilizationEntry 8 }

aristaHardwareUtilizationHighWatermarkTime  OBJECT-TYPE
    SYNTAX                               TimeStamp
    MAX-ACCESS                           read-only
    STATUS                               current
    DESCRIPTION
        "This MIB object represents the last time when a specific
        feature hit the high watermark (number of entries of the given
        hardware resource)."
    ::= { aristaHardwareUtilizationEntry 9 }

aristaHardwareUtilizationSharedFeatures  OBJECT-TYPE
    SYNTAX                               OCTET STRING (SIZE(0..2048))
    MAX-ACCESS                           read-only
    STATUS                               current
    DESCRIPTION
        "When multiple features share the specific hardware resource
        represented by this conceptual row, this MIB object provides
        a colon-separated list of the names of the features that share
        the hardware resource."
    ::= { aristaHardwareUtilizationEntry 10 }


-- Notifications 

aristaHardwareUtilizationAlert NOTIFICATION-TYPE
    OBJECTS { aristaHardwareUtilizationInUseEntries, 
              aristaHardwareUtilizationHighWatermark,
              aristaHardwareUtilizationHighWatermarkTime
            }
    STATUS  current
    DESCRIPTION
        "This notification is generated when the hardware utilization
        crosses the specified threshold."
    ::= { aristaHardwareUtilizationMibNotifications 1 }

-- Conformance and Compliance

aristaHardwareUtilizationMibCompliances OBJECT IDENTIFIER
    ::= { aristaHardwareUtilizationMibConformance 1 }

aristaHardwareUtilizationMibGroups      OBJECT IDENTIFIER
    ::= { aristaHardwareUtilizationMibConformance 2 }

aristaHardwareUtilizationMibCompliance  MODULE-COMPLIANCE
    STATUS        current
    DESCRIPTION
        "The compliance statement for Arista switches that implement
        the ARISTA-HARDWARE-CAPACITY-MIB."
    MODULE        -- this module
    MANDATORY-GROUPS {
        aristaHardwareUtilizationTableGroup,
        aristaHardwareUtilizationNotificationsGroup
    }
    ::= { aristaHardwareUtilizationMibCompliances 1 }

aristaHardwareUtilizationTableGroup  OBJECT-GROUP
    OBJECTS {
        aristaHardwareUtilizationInUseEntries,
        aristaHardwareUtilizationFreeEntries,
        aristaHardwareUtilizationCommittedEntries,
        aristaHardwareUtilizationMaxEntries,
        aristaHardwareUtilizationHighWatermark,
        aristaHardwareUtilizationHighWatermarkTime,
        aristaHardwareUtilizationSharedFeatures
    }
    STATUS  current
    DESCRIPTION
        "The collection of objects that provide counter information
        for hardware resource utilization."
    ::= { aristaHardwareUtilizationMibGroups 1 }

aristaHardwareUtilizationNotificationsGroup NOTIFICATION-GROUP
    NOTIFICATIONS {
        aristaHardwareUtilizationAlert
    }
    STATUS  current
    DESCRIPTION
        "The notification(s) generated by the system if the hardware
        utilization of a specific resource exceeds configured
        threshold." 
    ::= { aristaHardwareUtilizationMibGroups 2 }
END                                     
