-- ARISTA-QOS-MIB: Arista MIB module for QoS information
-- Copyright (c) 2013 Arista Networks, Inc.  All rights reserved.

ARISTA-QOS-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-COMPLIANCE, OBJECT-GROUP      FROM SNMPv2-CONF
    MODULE-IDENTITY, OBJECT-TYPE,
    Integer32, Counter64                 FROM SNMPv2-SMI
    TruthValue,
    TEXTUAL-CONVENTION, DisplayString    FROM SNMPv2-TC
    aristaMibs                           FROM ARISTA-SMI-MIB
    InterfaceIndex                       FROM IF-MIB
    PhysicalIndexOrZero                  FROM ENTITY-MIB
    QueueIndex                           FROM ARISTA-QUEUE-MIB;
    
aristaQosMib MODULE-IDENTITY
    LAST-UPDATED "202201110000Z"
    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
	"**********************************
                    Overview
         **********************************
         This MIB provides read access to Quality of Service (QoS) 
         configuration and statistics information for Arista 
         platforms.
 
         Configuration information available through this MIB includes
	 all class-map, policy-map, and service-policy parameters.  The
	 definitions of these object types are given below.
  
         Statistics available through this MIB include dropped, sent and
         matched packet counters per traffic class after any configured
         QoS policies are applied and per chip ECN counters if supported.

	 **********************************
                    Definitions
         **********************************
	 Class map - A data structure that uses access-control lists
	 to define a data stream.
	 
	 Policy map - A data structure that associates class maps identifying 
	 specific data streams with actions that control its transmission.

	 Action - A traffic-management action that is applied to traffic
	 classified as belonging to a particular class. Actions may include
	 modifying CoS or DSCP fields, assigning to traffic-class queues,
	 shaping, or filtering."

    REVISION      "202201110000Z"
    DESCRIPTION   "Added aristaQosPolicerStatsTable"

    REVISION      "202005260000Z"
    DESCRIPTION   "Added additional objects for aristaQosStatsTable."

    REVISION      "201805040000Z"
    DESCRIPTION   "Added aristaEcnQueueCounterTable"
    
    REVISION      "201705240000Z"
    DESCRIPTION   "Added macAccessGroup and mplsTrafficClass to ClassMapMatchType"

    REVISION      "201611110000Z"
    DESCRIPTION   "Added dscpEcn to aristaClassMapMatchType"

    REVISION      "201607220000Z"
    DESCRIPTION   "Added aristaEcnCounterTable"

    REVISION      "201603210000Z"
    DESCRIPTION   "Added vlan to aristaClassMapMatchType"

    REVISION      "201408150000Z"
    DESCRIPTION   "Updated postal address."

    REVISION      "201405220000Z"
    DESCRIPTION   "Updated the upper limit for aristaPolicyMapClassIndex."

    REVISION      "201306010000Z"
    DESCRIPTION   "Initial version of this MIB module."

    ::= { aristaMibs 13 }

AristaQosMapType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The type of a class or policy map.

         controlPlane 
           - The map is applicable only on the control plane of the device.
         dataPlane
           - The map is applicable only on the data plane of the device."
    SYNTAX      INTEGER  {
                   controlPlane(1),
                   dataPlane(2)
                }

AristaQosShortId ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "255a"
    STATUS          current
    DESCRIPTION
        "Identifier with bounded length, derived from a name that may be
	 longer.  It includes the first 30 characters of the name.  If
	 the name is longer than 30 characters, the identifier contains
	 a hash of the remaining characters in the name, expressed as
	 decimal digits.
	 
	 For example:
	   - name 'one-two-three':
	        identifier 'one-two-three'
	   - name 'one-two-three-four-five-six-seven':
	        identifier 'one-two-three-four-five-six-se3877954092'"
    -- Ideally this syntax would be DisplayString (SIZE (1..40)),
    -- but textual conventions cannot be derived from other textual
    -- conventions.
    SYNTAX      OCTET STRING (SIZE (1..40))

aristaQosMibObjects OBJECT IDENTIFIER
    ::= { aristaQosMib 1 }

aristaQosMibConformance OBJECT IDENTIFIER
    ::= { aristaQosMib 2 }

-- Start of aristaClassMapTable

aristaClassMapTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaClassMapEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
	"Lists the class maps configured on the system."
    ::= { aristaQosMibObjects 1 }

aristaClassMapEntry  OBJECT-TYPE
    SYNTAX          AristaClassMapEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in aristaClassMapTable."
    INDEX           { aristaClassMapId, aristaClassMapType }
    ::= { aristaClassMapTable 1 }

AristaClassMapEntry ::= SEQUENCE {
    aristaClassMapId              AristaQosShortId,
    aristaClassMapType            AristaQosMapType,
    aristaClassMapName            DisplayString,
    aristaClassMapMatchCondition  INTEGER
}

aristaClassMapId  OBJECT-TYPE
    SYNTAX          AristaQosShortId
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Bounded-length identifier for a given class map, derived from
	 the class map's name."
    ::= { aristaClassMapEntry 1 }

aristaClassMapType  OBJECT-TYPE
    SYNTAX          AristaQosMapType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Type of a given class map."
    ::= { aristaClassMapEntry 2 }

aristaClassMapName  OBJECT-TYPE
    SYNTAX          DisplayString (SIZE (0..255))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Name of a given class map."
    ::= { aristaClassMapEntry 3 }

aristaClassMapMatchCondition  OBJECT-TYPE
    SYNTAX          INTEGER {
                       matchConditionAny(1),
                       matchConditionAll(2)
		    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates how many match criteria traffic must match in order to
 	 belong to a class with multiple match critera."
    ::= { aristaClassMapEntry 4 }

-- Start of aristaClassMapMatchTable

aristaClassMapMatchTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaClassMapMatchEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
	"Describes the match criteria used to classify traffic as belonging
         to a class map."
    ::= { aristaQosMibObjects 2 }

aristaClassMapMatchEntry  OBJECT-TYPE
    SYNTAX          AristaClassMapMatchEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in the aristaClassMapMatchTable."
    INDEX           { aristaClassMapId, aristaClassMapType, 
                      aristaClassMapMatchIndex }
    ::= { aristaClassMapMatchTable 1 }

AristaClassMapMatchEntry ::= SEQUENCE {
    aristaClassMapMatchIndex      Integer32,
    aristaClassMapMatchType       INTEGER,
    aristaClassMapMatchName       DisplayString
}

aristaClassMapMatchIndex  OBJECT-TYPE
    SYNTAX          Integer32 (1..255)
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This index identifies the position of a match criterion among all the
	 criteria for a class map."
    ::= { aristaClassMapMatchEntry 1 }

aristaClassMapMatchType  OBJECT-TYPE
    SYNTAX          INTEGER {
                     ipv4AccessGroup(1),
                     ipv6AccessGroup(2),
                     vlan(3),
                     dscpEcn(4),
                     mplsTrafficClass(5),
                     macAccessGroup(6)
		    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
         "Indicates the type of a match criterion for a class map.
          ipv4AccessGroup(1) means that it is an IPv4 access-control list.
          ipv6AccessGroup(2) means that it is an IPv6 access-control list.
          vlan(3) means that it is a VLAN-based match criterion.
          dscpEcn(4) means that it is a match criteron based on DSCP+ECN (TOS).
          mplsTrafficClass(5) means that it is a match criteron based on MPLS TC.
          macAccessGroup(6) measn that it is a MAC access-control list."
    ::= { aristaClassMapMatchEntry 2 }

aristaClassMapMatchName  OBJECT-TYPE
    SYNTAX          DisplayString (SIZE (0..100))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the name of the access-control list if aristaClassMapMatchType
         is ipv4AccessGroup(1) or ipv6AccessGroup(2) or macAccessGroup(6). 
         It indicates the masked VLAN value or the comma-separated 
         list of VLAN range values if aristaClassMapMatchType is vlan(3).
         It indicates the DSCP and/or ECN value or comma-separated 
         list of DSCP range value with or without ECN if aristaClassMapMatchType is
         dscpEcn(4). It indicates the MPLS traffic class value
         or comma-separated list of traffic class values if aristaClassMapMatchType
         mplsTrafficClass(5)."
    ::= { aristaClassMapMatchEntry 3 }

-- Start of aristaPolicyMapTable

aristaPolicyMapTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaPolicyMapEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
        "Lists the policy maps configured on the system."
    ::= { aristaQosMibObjects 3 }

aristaPolicyMapEntry  OBJECT-TYPE
    SYNTAX          AristaPolicyMapEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
        "A conceptual row in aristaPolicyMapTable."
    INDEX           { aristaPolicyMapId, aristaPolicyMapType }
    ::= { aristaPolicyMapTable 1 }

AristaPolicyMapEntry ::= SEQUENCE {
    aristaPolicyMapId            AristaQosShortId,
    aristaPolicyMapType          AristaQosMapType,
    aristaPolicyMapName          DisplayString
}

aristaPolicyMapId  OBJECT-TYPE
    SYNTAX          AristaQosShortId
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Bounded-length identifier for a given policy map, derived from
	 the policy map's name."
    ::= { aristaPolicyMapEntry 1 }

aristaPolicyMapType  OBJECT-TYPE
    SYNTAX          AristaQosMapType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Type of a given policy map."
    ::= { aristaPolicyMapEntry 2 }

aristaPolicyMapName  OBJECT-TYPE
    SYNTAX          DisplayString (SIZE (0..255))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Name of a given policy map."
    ::= { aristaPolicyMapEntry 3 }

-- Start of aristaPolicyMapClassTable

aristaPolicyMapClassTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaPolicyMapClassEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
        "Lists the classes associated with a given policy map." 
    ::= { aristaQosMibObjects 4 }

aristaPolicyMapClassEntry  OBJECT-TYPE
    SYNTAX          AristaPolicyMapClassEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in aristaPolicyMapClassTable."
    INDEX           { aristaPolicyMapId, aristaPolicyMapType, 
                      aristaPolicyMapClassIndex }
    ::= { aristaPolicyMapClassTable 1 }

AristaPolicyMapClassEntry ::= SEQUENCE {
    aristaPolicyMapClassIndex    Integer32,
    aristaPolicyMapClassId       AristaQosShortId
}

aristaPolicyMapClassIndex  OBJECT-TYPE
    SYNTAX          Integer32 (1..2147483647)
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Determines the sequence in which traffic is matched
         to classes within a policy map. The class with the smallest
         aristaPolicyMapClassIndex is given the first preference.
         Class Index values may not be consecutive."
    ::= { aristaPolicyMapClassEntry 1 }

aristaPolicyMapClassId  OBJECT-TYPE
    SYNTAX          AristaQosShortId
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Identifier of the class map for a given class in a policy map."
    ::= { aristaPolicyMapClassEntry 2 }

-- Start of aristaPolicyMapActionTable

aristaPolicyMapActionTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaPolicyMapActionEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
        "Lists the actions that are applied to traffic classified
	 as belonging to a particular class in a policy map."
    ::= { aristaQosMibObjects 5 }

aristaPolicyMapActionEntry  OBJECT-TYPE
    SYNTAX          AristaPolicyMapActionEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in the aristaPolicyMapActionTable."
    INDEX           { aristaPolicyMapId, aristaPolicyMapType, 
                      aristaClassMapId, aristaPolicyMapActionType }
    ::= { aristaPolicyMapActionTable 1 }

AristaPolicyMapActionEntry ::= SEQUENCE {
    aristaPolicyMapActionType        INTEGER,
    aristaPolicyMapActionRateUnit    INTEGER,
    aristaPolicyMapActionValue       Integer32
}

aristaPolicyMapActionType  OBJECT-TYPE
    SYNTAX          INTEGER {
    	               actionSetShape(1),
	               actionSetBandwidth(2),
	               actionSetCos(3),
	               actionSetDscp(4),
	               actionSetTc(5),
                       actionSetDrop(6),
                       actionSetDropPrecedence(7)
                    }
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Type of a traffic-management action.
         For example: If the action is 'set cos 5', then
         the action type is 'actionSetCos'."
    ::= { aristaPolicyMapActionEntry 1 }

aristaPolicyMapActionRateUnit  OBJECT-TYPE
    SYNTAX          INTEGER {
                       rateUnitNone(0),
                       rateUnitPps(1),
                       rateUnitKbps(2)
                    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the rate unit of shaping/bandwidth actions.

	 rateUnitNone
	   - This action is not a shaping or bandwidth action.
         rateUnitPps
	   - Packets per second
         rateUnitKbps
	   - Kilobits per second"
    ::= { aristaPolicyMapActionEntry 2 }

aristaPolicyMapActionValue  OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Value applied in a traffic-management action.
	 For example: If the action is 'set cos 5', then
	 aristaPolicyMapActionValue is 5."
    ::= { aristaPolicyMapActionEntry 3 }

-- Start of aristaServicePolicyTable

aristaServicePolicyTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaServicePolicyEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
        "Lists the policy maps currently applied to interfaces."
    ::= { aristaQosMibObjects 6 }

aristaServicePolicyEntry  OBJECT-TYPE
    SYNTAX          AristaServicePolicyEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in the aristaServicePolicyTable."
    INDEX           { aristaServicePolicyIfIndex, aristaServicePolicyDirection }
    ::= { aristaServicePolicyTable 1 }

AristaServicePolicyEntry ::= SEQUENCE {
    aristaServicePolicyIfIndex   InterfaceIndex,
    aristaServicePolicyDirection INTEGER,
    aristaServicePolicyMapId     AristaQosShortId,
    aristaServicePolicyMapType   AristaQosMapType
}

aristaServicePolicyIfIndex  OBJECT-TYPE
    SYNTAX          InterfaceIndex
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "The index of interface to which a policy map is applied."
    REFERENCE       "RFC 2863, ifIndex"
    ::= { aristaServicePolicyEntry 1 }

aristaServicePolicyDirection  OBJECT-TYPE
    SYNTAX          INTEGER {
                       input(1),
		       output(2)
		    }
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "The direction of traffic for which the service policy applies.
	
	 input
           - The service policy applies to inbound traffic.
         output
	   - The service policy applies to outbound traffic."
    ::= { aristaServicePolicyEntry 2 }

aristaServicePolicyMapId  OBJECT-TYPE
    SYNTAX          AristaQosShortId
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Identifier of the policy map applied to the interface."
    ::= { aristaServicePolicyEntry 3 }

aristaServicePolicyMapType  OBJECT-TYPE
    SYNTAX          AristaQosMapType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Type of the policy map applied to the interface."
    ::= { aristaServicePolicyEntry 4 }

-- Start of aristaQosStatsTable

aristaQosStatsTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaQosStatsEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     
	"An entry in this table contains dropped, sent and matched packet
         and byte counters for a given class of a policy map applied in a given
         direction. Counts are aggregated for all interfaces.

         Byte counters are not supported for all types of policy-maps. On some 
         of the Arista hardware platforms, byte counters are entirely unsupported.

         When byte counters are unavailable, the value of the corresponding 
         MIB objects will be zero."
    ::= { aristaQosMibObjects 7 }

aristaQosStatsEntry  OBJECT-TYPE
    SYNTAX          AristaQosStatsEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION         
        "A conceptual row in the aristaQosStatsTable."
    INDEX           { aristaPolicyMapId, aristaPolicyMapType,
                      aristaClassMapId, aristaServicePolicyDirection }
    ::= { aristaQosStatsTable 1 }

AristaQosStatsEntry ::= SEQUENCE {
    aristaQosPktsDropped            Counter64,
    aristaQosPktsSent               Counter64,
    aristaQosPktsMatched            Counter64,
    aristaQosBytesDropped           Counter64,
    aristaQosBytesSent              Counter64,
    aristaQosBytesMatched           Counter64
}

aristaQosPktsDropped  OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets dropped by a service policy.
         This number is zero for classes of type dataPlane, 
         with the exception of those that are associated with
         a policer."
    ::= { aristaQosStatsEntry 1 }

aristaQosPktsSent  OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets classified by a service policy and allowed
	through."
    ::= { aristaQosStatsEntry 2 }

aristaQosPktsMatched  OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets classified by a service policy.
         Equal to the sum of aristaQosPktsDropped and aristaQosPktsSent."
    ::= { aristaQosStatsEntry 3 }

aristaQosBytesDropped  OBJECT-TYPE
    SYNTAX             Counter64
    MAX-ACCESS         read-only
    STATUS             current
    DESCRIPTION
        "The number of bytes dropped by a service policy."
    ::= { aristaQosStatsEntry 4 }

aristaQosBytesSent  OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of bytes classified by a service policy and
        allowed through."
    ::= { aristaQosStatsEntry 5 }

aristaQosBytesMatched  OBJECT-TYPE
    SYNTAX             Counter64
    MAX-ACCESS         read-only
    STATUS             current
    DESCRIPTION
        "The number of bytes classified by a service policy.
         Equal to the sum of aristaQosBytesDropped and
         aristaQosBytesSent."
    ::= { aristaQosStatsEntry 6 }

-- Start of aristaEcnCounterTable

aristaEcnCounterTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaEcnCounterEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Lists the ECN Counter Value per unit as supported.
         Since different Arista devices have different capabilities 
         for ECN counters, the table would contain the counter information 
         per entity. This includes both packets that were received with 
         congestion marked (ECN bits set) as well as packets that this 
         Arista device marked with ECN bits before transmission. In cases 
         where the platform is unable to count the already marked packets,
         the counter will only reflect the ones being marked by this specific
         device on the transmit side."
    ::= { aristaQosMibObjects 8 }

aristaEcnCounterEntry  OBJECT-TYPE
    SYNTAX          AristaEcnCounterEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in the aristaEcnCounterTable."
    INDEX           { aristaEcnCounterDescriptor }
    ::= { aristaEcnCounterTable 1 }

AristaEcnCounterEntry ::= SEQUENCE {
    aristaEcnCounterDescriptor     DisplayString,
    aristaEcnCounterValue          Counter64,
    aristaEcnCounterEntity         PhysicalIndexOrZero
}

aristaEcnCounterDescriptor  OBJECT-TYPE
    SYNTAX          DisplayString (SIZE (0..32))
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     "Describes the entity that the counter corresponds to.
                    For instance, devices supporting ECN counters per forwarding
                    element (or per chip) will have descriptor containing information
                    like <ChipName>"
    ::= { aristaEcnCounterEntry 1 }

aristaEcnCounterValue OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION     "The number of packets above average threshhold"
    ::= { aristaEcnCounterEntry 2 }

aristaEcnCounterEntity OBJECT-TYPE
    SYNTAX          PhysicalIndexOrZero
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION     "The physical index corresponding to the entity which
                    is a non zero value used to identify a physical entity. 
                    This value will be zero if the entity does not have a 
                    physical index"
    ::= { aristaEcnCounterEntry 3 }

aristaEcnQueueCounterTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaEcnQueueCounterEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Lists the ECN Counter Value per port per egress queue as supported.
         Since different Arista devices have different capabilities 
         for ECN counters, the table would contain the counter information 
         per entity. This includes both packets that were received with 
         congestion marked (ECN bits set) as well as packets that this 
         Arista device marked with ECN bits before transmission. In cases 
         where the platform is unable to count the already marked packets,
         the counter will only reflect the ones being marked by this specific
         device on the transmit side."
    ::= { aristaQosMibObjects 9 }

aristaEcnQueueCounterEntry  OBJECT-TYPE
    SYNTAX          AristaEcnQueueCounterEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in the aristaEcnQueueCounterTable."
    INDEX           { aristaEcnIfIndex, aristaEcnEgressQueueIndex }
    ::= { aristaEcnQueueCounterTable 1 }

AristaEcnQueueCounterEntry ::= SEQUENCE {
    aristaEcnIfIndex               InterfaceIndex,
    aristaEcnEgressQueueIndex      QueueIndex,
    aristaEcnQueueCounterEnabled   TruthValue,
    aristaEcnQueuePktsMarked       Counter64
}
    
aristaEcnIfIndex OBJECT-TYPE
    SYNTAX      InterfaceIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
	"The index of an interface"
    ::= { aristaEcnQueueCounterEntry 1 }

aristaEcnEgressQueueIndex OBJECT-TYPE
    SYNTAX      QueueIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
	"The index of egress queue in the interface."
    ::= { aristaEcnQueueCounterEntry 2 }

aristaEcnQueueCounterEnabled OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "This attribute has value 'true(1)' if Ecn counter is enabled
        for the interface and queue; otherwise, the value is
        'false(2)'."
    ::= { aristaEcnQueueCounterEntry 3 }
    
aristaEcnQueuePktsMarked OBJECT-TYPE
    SYNTAX      Counter64
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION    
	"The number of Ecn marked packets from this egress queue. if
	Ecn counter is not enabled, the counter value is 0"
    ::= { aristaEcnQueueCounterEntry 4 }

-- Start of aristaQosPolicerStatsTable

aristaQosPolicerStatsTable  OBJECT-TYPE
    SYNTAX          SEQUENCE OF AristaQosPolicerStatsEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An entry in this table contains dropped, sent packet
        counters of policer for a given class of a policy map
        applied in a given direction."
    ::= { aristaQosMibObjects 10 }

aristaQosPolicerStatsEntry  OBJECT-TYPE
    SYNTAX          AristaQosPolicerStatsEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual row in the aristaQosPolicerStatsTable."
    INDEX           { aristaPolicyMapId, aristaPolicyMapType,
                      aristaClassMapId, aristaServicePolicyDirection,
                      aristaServicePolicyIfIndex }
    ::= { aristaQosPolicerStatsTable 1 }

AristaQosPolicerStatsEntry ::= SEQUENCE {
    aristaQosPolicerPktsDropped            Counter64,
    aristaQosPolicerPktsSent               Counter64
}

aristaQosPolicerPktsDropped  OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets dropped by a service policy.
        This number is zero for classes of type dataPlane."
    ::= { aristaQosPolicerStatsEntry 1 }

aristaQosPolicerPktsSent  OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets classified by a service policy
        and allowed through."
    ::= { aristaQosPolicerStatsEntry 2 }

-- Compliance, MIB groups

aristaQosMibCompliances OBJECT IDENTIFIER
   ::= { aristaQosMibConformance 1 }

aristaQosMibGroups OBJECT IDENTIFIER 
    ::= { aristaQosMibConformance 2 }

aristaQosMibCompliance  MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION     
        "The compliance statement for Arista switches that
         support ARISTA-QOS-MIB."
    MODULE          -- this module
    MANDATORY-GROUPS {
                         aristaClassMapGroup,
                         aristaPolicyMapGroup,
                         aristaPolicyMapActionGroup,
                         aristaServicePolicyGroup,
                         aristaEcnCounterGroup,
                         aristaEcnQueueCounterGroup
                     }
    ::= { aristaQosMibCompliances 1 }

aristaClassMapGroup  OBJECT-GROUP
    OBJECTS         {
    		         aristaClassMapName,
                         aristaClassMapMatchCondition,
                         aristaClassMapMatchType,
                         aristaClassMapMatchName,
                         aristaPolicyMapClassId,
		         aristaQosPktsDropped,
		         aristaQosPktsMatched,
		         aristaQosPktsSent,
		         aristaQosPolicerPktsDropped,
		         aristaQosPolicerPktsSent,
		         aristaQosBytesDropped,
		         aristaQosBytesMatched,
		         aristaQosBytesSent
                    }
    STATUS       current
    DESCRIPTION
        "The collection of objects that represent QoS configuration and
         statistics information for class maps."
    ::= { aristaQosMibGroups 1 }

aristaPolicyMapGroup  OBJECT-GROUP
    OBJECTS         {
    		         aristaPolicyMapName
                    }
    STATUS       current
    DESCRIPTION
        "The collection of objects that represent QoS configuration
         information for policy maps."
    ::= { aristaQosMibGroups 2 }

aristaPolicyMapActionGroup  OBJECT-GROUP
    OBJECTS         {
                         aristaPolicyMapActionRateUnit,
                         aristaPolicyMapActionValue
                    }
    STATUS       current
    DESCRIPTION
        "The collection of objects that represent configuration
         information for QoS actions."
    ::= { aristaQosMibGroups 3 }

aristaServicePolicyGroup  OBJECT-GROUP
    OBJECTS         {
    		         aristaServicePolicyMapId,
                         aristaServicePolicyMapType
                    }
    STATUS       current
    DESCRIPTION
        "The collection of objects that represent QoS configuration
         information for service policies."
    ::= { aristaQosMibGroups 4 }

aristaEcnCounterGroup OBJECT-GROUP
   OBJECTS          {
                        aristaEcnCounterValue,
                        aristaEcnCounterEntity
                    }
   STATUS       current
   DESCRIPTION
        "The objects that represent ECN counter information"
   ::= { aristaQosMibGroups 5 }

aristaEcnQueueCounterGroup OBJECT-GROUP
   OBJECTS          {
                        aristaEcnQueueCounterEnabled,
                        aristaEcnQueuePktsMarked
                    }
   STATUS       current
   DESCRIPTION
        "The objects that represent ECN queue counter information"
   ::= { aristaQosMibGroups 6 }

END
