ELTEX-STORAGE-MIB DEFINITIONS ::= BEGIN

-- Title:   ELTEX STORAGE MIB
-- Version: 1.0
-- Date:    2 May 2017

IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    NOTIFICATION-TYPE,
    Counter64,
    Gauge32,
    Unsigned32
        FROM SNMPv2-SMI

    TEXTUAL-CONVENTION,
    TruthValue,
    RowStatus
        FROM SNMPv2-TC

    PhysicalIndex
        FROM ENTITY-MIB

    eltexLtd
        FROM ELTEX-SMI-ACTUAL
    
    EltexPercent,
    EltexThresholdRelation
        FROM ELTEX-TC

    SyslogSeverity
        FROM SYSLOG-TC-MIB;

eltexStorageMIB MODULE-IDENTITY
    LAST-UPDATED "201705020000Z"
    ORGANIZATION "Eltex Enterprise, Ltd."
    CONTACT-INFO 
        "www.eltex.nsk.ru"
    DESCRIPTION
        "The ELTEX-STORAGE-MIB is used for describing storage devices."
    REVISION     "201705020000Z"
    DESCRIPTION "Initial revision of ELTEX-STORAGE-MIB."
    ::= { eltexLtd 39 }

--
-- Textual Conventions
--

EltexStorageType ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION  "The type of memory storage."
    SYNTAX       INTEGER {
                     ramfs (1),
                     spi (2),
                     raw-nand (3),
                     sata (4),
                     sd-card (5),
                     usb (6)
                 }

-------------------------------------------------------------------------------
eltexStorageMIBObjects  OBJECT IDENTIFIER ::= { eltexStorageMIB 1 }

eltexStorageDevice      OBJECT IDENTIFIER ::= { eltexStorageMIBObjects 1 }
-------------------------------------------------------------------------------

eltexStorageDeviceTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexStorageDeviceEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains information about memory storages."
    ::= { eltexStorageDevice 1 }

eltexStorageDeviceEntry OBJECT-TYPE
    SYNTAX      EltexStorageDeviceEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Information about a particular memory storage."
    INDEX       { eltexStorageDeviceIndex }
    ::= { eltexStorageDeviceTable 1 }

EltexStorageDeviceEntry ::= SEQUENCE {
    eltexStorageDeviceIndex
        Unsigned32,
    eltexStorageDevicePhysicalIndex
        PhysicalIndex,
    eltexStorageDeviceType
        EltexStorageType,
    eltexStorageDeviceSize
        Gauge32,
    eltexStorageDeviceSizeOverflow
        Gauge32,
    eltexStorageDeviceHCSize
        Counter64,
    eltexStorageDeviceRemovable
        TruthValue
}

eltexStorageDeviceIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An index that uniquely represents a storage device
        whose information is reported by a row in this table.
        This index is assigned arbitrarily by the engine
        and is not saved over reboots."
    ::= { eltexStorageDeviceEntry 1 }

eltexStorageDevicePhysicalIndex OBJECT-TYPE
    SYNTAX          PhysicalIndex
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Physical index of a storage device from entPhysicalTable."
    ::= { eltexStorageDeviceEntry 2 }

eltexStorageDeviceType OBJECT-TYPE
    SYNTAX          EltexStorageType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Memory type"
    ::= { eltexStorageDeviceEntry 3 }

eltexStorageDeviceSize OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Available storage memory in bytes."
    ::= { eltexStorageDeviceEntry 4 }

eltexStorageDeviceSizeOverflow OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the upper 32-bit of eltexStorageDeviceSize.
        This object needs to be supported only when the value of
        eltexStorageDeviceSize exceeds 32-bit, otherwise this object value
        would be set to 0."
    ::= { eltexStorageDeviceEntry 5 }

eltexStorageDeviceHCSize OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The overall storage memory which is currently available at device.
        This object is a 64-bit version of eltexStorageDeviceSize."
    ::= { eltexStorageDeviceEntry 6 }

eltexStorageDeviceRemovable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Shows whether storage device is removable or not."
    ::= { eltexStorageDeviceEntry 7 }

----------------------------------------------------------------------------------

eltexStoragePartitionTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF EltexStoragePartitionEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table contains information about partitions on memory storages."
    ::= { eltexStorageDevice 2 }

eltexStoragePartitionEntry OBJECT-TYPE
    SYNTAX          EltexStoragePartitionEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Information about a particular partition on memory storage."
    INDEX           { eltexStorageDeviceIndex, eltexStoragePartitionIndex }
    ::= { eltexStoragePartitionTable 1 }

EltexStoragePartitionEntry ::= SEQUENCE {
    eltexStoragePartitionIndex
        Gauge32,
    eltexStoragePartitionTotal
        Gauge32,
    eltexStoragePartitionTotalOverflow
        Gauge32,
    eltexStoragePartitionHCTotal
        Counter64,
    eltexStoragePartitionFreePercent
        EltexPercent,
    eltexStoragePartitionFree
        Gauge32,
    eltexStoragePartitionFreeOverflow
        Gauge32,
    eltexStoragePartitionHCFree
        Counter64,
    eltexStoragePartitionThresholdFreeIndex
        Unsigned32
}

eltexStoragePartitionIndex OBJECT-TYPE
    SYNTAX          Gauge32
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Index of the partition on a storage device."
    ::= { eltexStoragePartitionEntry 1 }

eltexStoragePartitionTotal OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Shows information about total memory in bytes."
    ::= { eltexStoragePartitionEntry 2 }

eltexStoragePartitionTotalOverflow OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Represents the upper 32-bit of eltexStoragePartitionTotal.

        This object needs to be supported only when the value of
        eltexStoragePartitionTotal exceeds 32-bit, otherwise this object value
        would be set to 0."
    ::= { eltexStoragePartitionEntry 3 }

eltexStoragePartitionHCTotal OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Shows information about total memory size in the partition in bytes.

        This object is a 64-bit version of eltexStoragePartitionTotal."
    ::= { eltexStoragePartitionEntry 4 }

eltexStoragePartitionFreePercent OBJECT-TYPE
    SYNTAX          EltexPercent
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Shows information about currently available free memory in the
        partition in percents."
    ::= { eltexStoragePartitionEntry 5 }

eltexStoragePartitionFree OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Shows information about currently available free memory in the
        partition in bytes."
    ::= { eltexStoragePartitionEntry 6 }

eltexStoragePartitionFreeOverflow OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Represents the upper 32-bit of eltexStoragePartitionFree.

        This object needs to be supported only when the value of
        eltexStoragePartitionFree exceeds 32-bit, otherwise this object value
        would be set to 0."
    ::= { eltexStoragePartitionEntry 7 }

eltexStoragePartitionHCFree OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "bytes"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Shows information about currently available free memory in the
        partition in bytes.

        This object is a 64-bit version of eltexStoragePartitionFree."
    ::= { eltexStoragePartitionEntry 8 }

eltexStoragePartitionThresholdFreeIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This field indicates the minimal value of eltexStorageThresholdIndex
        that isn't in use by any threshold configured in eltexStorageThresholdTable
        and which can be used as index to create a new eltexStorageThresholdEntry instance."
    ::= { eltexStoragePartitionEntry 9 }

----------------------------------------------------------------------------------------
--THRESHOLDS
----------------------------------------------------------------------------------------
eltexStorageThreshold OBJECT IDENTIFIER ::= { eltexStorageMIBObjects 2 }
----------------------------------------------------------------------------------------

eltexStorageThresholdNotificationGlobalEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This field enables the generation of eltexStorageThresholdNotification
        globally on the device.

        If this object value is 'false', then no eltexStorageThresholdNotification
        will be generated on this device. If this object value is 'true', then
        notification will be generated."
    DEFVAL          { false }
    ::= { eltexStorageThreshold 1 }

eltexStorageThresholdRecoveryNotificationGlobalEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This field enables the generation of eltexStorageThresholdRecoveryNotification
        globally on the device.

        If this object value is 'false', then no eltexStorageThresholdRecoveryNotification
        will be generated on this device. If this object value is 'true', then
        notification will be generated."
    DEFVAL          { false }
    ::= { eltexStorageThreshold 2 }

----------------------------------------------------------------------------------------

eltexStorageThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexStorageThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table lists the thresholds severity, relation, and comparison value
        for a storage device.

        List of notification sending conditions:

        Val - eltexStoragePartitionFreePercent
        Thr - eltexStorageThresholdValue
        Int - eltexStorageThresholdFlappingInterval
        abs - absolute value

        +----------------+------------------------+------------------------+
        | Relation       | Notification Condition |   Recovery Condition   |
        +----------------+------------------------+------------------------+
        | greaterThan    |       Val >  Thr       |   Val <  (Thr - Int)   |
        | greaterOrEqual |       Val >= Thr       |   Val <= (Thr - Int)   |
        | lessThan       |       Val <  Thr       |   Val >  (Thr + Int)   |
        | lessOrEqual    |       Val <= Thr       |   Val >= (Thr + Int)   |
        | equalTo        |       Val == Thr       |  abs(Val - Thr) > Int  |
        | notEqualTo     |  abs(Val - Thr) > Int  |       Val == Thr       |
        +----------------+------------------------+------------------------+
        "
    ::= { eltexStorageThreshold 3 }

eltexStorageThresholdEntry OBJECT-TYPE
    SYNTAX      EltexStorageThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry describes the threshold for a storage device."
    INDEX       { eltexStorageDeviceIndex, eltexStoragePartitionIndex, eltexStorageThresholdIndex }
    ::= { eltexStorageThresholdTable 1 }

EltexStorageThresholdEntry ::= SEQUENCE {
    eltexStorageThresholdIndex
        Unsigned32,
    eltexStorageThresholdRowStatus
        RowStatus,
    eltexStorageThresholdValue
        EltexPercent,
    eltexStorageThresholdFlappingInterval
        EltexPercent,
    eltexStorageThresholdSeverity
        SyslogSeverity,
    eltexStorageThresholdRelation
        EltexThresholdRelation,
    eltexStorageThresholdNotificationEnable
        TruthValue,
    eltexStorageThresholdRecoveryNotificationEnable
        TruthValue,
    eltexStorageThresholdEvaluation
        TruthValue
}

eltexStorageThresholdIndex OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An index unique within a partition entity. This index permits
        partition to have thresholds with the same index.

        The first free index can be obtained from the field
        eltexStoragePartitionThresholdFreeIndex in the table
        eltexStoragePartitionTable."
    ::= { eltexStorageThresholdEntry 1 }

eltexStorageThresholdRowStatus OBJECT-TYPE
    SYNTAX      RowStatus
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This object indicates the RowStatus of this entry."
    ::= { eltexStorageThresholdEntry 2 }

eltexStorageThresholdValue OBJECT-TYPE
    SYNTAX      EltexPercent
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This field indicates the value of the threshold in percents."
    ::= { eltexStorageThresholdEntry 3 }

eltexStorageThresholdFlappingInterval OBJECT-TYPE
    SYNTAX      EltexPercent
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This field indicates the value of flapping interval. This field is
        necessary for determining the moment of sending 
        eltexStorageFreeMemoryThresholdRecoveryNotification."
    DEFVAL      { 0 }
    ::= { eltexStorageThresholdEntry 4 }

eltexStorageThresholdSeverity OBJECT-TYPE
    SYNTAX      SyslogSeverity
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This field indicates the severity of this threshold."
    DEFVAL      { alert }
    ::= { eltexStorageThresholdEntry 5 }

eltexStorageThresholdRelation OBJECT-TYPE
    SYNTAX      EltexThresholdRelation
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This field indicates the relation between storage value
        and threshold value, required to trigger the alarm."
    ::= { eltexStorageThresholdEntry 6 }

eltexStorageThresholdNotificationEnable OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This field controls generation of notifications for this
        threshold.

        When this field is 'true', generation of notifications is enabled
        for this threshold. When this field is 'false', generation of
        notifications is disabled for this threshold."
    DEFVAL      { true }
    ::= { eltexStorageThresholdEntry 7 }

eltexStorageThresholdRecoveryNotificationEnable OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This field controls generation of notifications for this
        threshold.

        When this field is 'true', generation of notifications is enabled
        for this threshold. When this field is 'false', generation of
        notifications is disabled for this threshold."
    DEFVAL      { true }
    ::= { eltexStorageThresholdEntry 8 }

eltexStorageThresholdEvaluation OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "This field indicates the result of the most recent evaluation of
        the threshold."
    ::= { eltexStorageThresholdEntry 9 }

------------------------------------------------------------------------------------------
--Notifications
------------------------------------------------------------------------------------------
eltexStorageMIBNotification         OBJECT IDENTIFIER ::= { eltexStorageMIB 2 }

eltexStorageMIBNotificationPrefix   OBJECT IDENTIFIER ::= { eltexStorageMIBNotification 0 }
------------------------------------------------------------------------------------------

eltexStorageFreeMemoryThresholdNotification NOTIFICATION-TYPE
    OBJECTS {
        eltexStoragePartitionFreePercent,
        eltexStorageThresholdSeverity,
        eltexStorageThresholdRelation,
        eltexStorageThresholdValue
    }
    STATUS current
    DESCRIPTION
        "The notification is generated when the value of eltexStoragePartitionFreePercent
        satisfies the condition eltexStorageFreeMemoryThresholdRelation. Notifications
        can be disabled for a threshold by eltexStorageFreeMemoryThresholdNotificationEnable
        field or globally by eltexStorageFreeMemoryThresholdNotificationGlobalEnable.

        The notification is generated when the value of 
        eltexStorageThresholdEvaluation changes from false to true. 

        Notifications can be disabled for a threshold by 
        eltexStorageThresholdNotificationEnable field or globally by 
        eltexStorageThresholdNotificationGlobalEnable."
    ::= { eltexStorageMIBNotificationPrefix 1 }

eltexStorageFreeMemoryThresholdRecoveryNotification NOTIFICATION-TYPE
    OBJECTS {
        eltexStoragePartitionFreePercent,
        eltexStorageThresholdSeverity,
        eltexStorageThresholdRelation,
        eltexStorageThresholdValue
    }
    STATUS current
    DESCRIPTION
        "The notification is generated when the value of 
        eltexStorageThresholdEvaluation changes from true to false. 

        Notifications can be disabled for a threshold by 
        eltexStorageThresholdRecoveryNotificationEnable field or globally by 
        eltexStorageThresholdRecoveryNotificationGlobalEnable."
    ::= { eltexStorageMIBNotificationPrefix 2 }

END