-- iVN Core Component MIB (Draft)

IVN-CORE-COMPONENT-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Unsigned32, TimeTicks
        FROM SNMPv2-SMI                 -- [RFC2578]
    DateAndTime, TruthValue
        FROM SNMPv2-TC                  -- [RFC2579]
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB         -- [RFC3411]
    MODULE-COMPLIANCE, OBJECT-GROUP
        FROM SNMPv2-CONF                -- [RFC2580]
    iPhoiVNManagement
        FROM IPHOTONIX-SMI-MIB;

coreComponentMIB MODULE-IDENTITY
    LAST-UPDATED "201710040000Z"  -- October 4, 2017
    ORGANIZATION "iPhotonix"
    CONTACT-INFO
          "support@iphotonix.com"
    DESCRIPTION
        "The Core Component module provides SNMP access to passively
         monitor any existing iVN core components,"
    REVISION    "201710040000Z"  -- October 4, 2017
    DESCRIPTION
        "Initial version."
    ::= { iPhoiVNManagement 4 }

coreObjects OBJECT IDENTIFIER ::= { coreComponentMIB 1 }

coreComponents  OBJECT IDENTIFIER ::= { coreObjects 1 }

-- Core Components Table --

coreComponentTableLastChanged  OBJECT-TYPE
   SYNTAX      TimeTicks
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The value of sysUpTime at the time the table was last updated."
   ::= { coreComponents 1 }

coreComponentTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF CoreComponentEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "A table of CoreComponent entries"
   ::= { coreComponents 2 }

coreComponentEntry OBJECT-TYPE
   SYNTAX      CoreComponentEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Entries appear in this table when components appear.  They
        are removed when the component is removed."
   INDEX       { coreComponentIndex }
   ::= { coreComponentTable 1 }

CoreComponentEntry ::= SEQUENCE {
   coreComponentIndex                 Unsigned32,
   coreComponentDateAndTime           DateAndTime,
   coreComponentName                  SnmpAdminString,
   coreComponentEnabled               TruthValue,
   coreComponentStatus                INTEGER
   }

coreComponentIndex OBJECT-TYPE
   SYNTAX     Unsigned32 (1..4294967295)
   MAX-ACCESS not-accessible
   STATUS     current
   DESCRIPTION
       "A strictly monotonically increasing integer which
       acts as the index of entries within the component
       list.  It wraps back to 1 after it reaches its
       maximum value."
   ::= { coreComponentEntry 1 }

coreComponentDateAndTime OBJECT-TYPE
   SYNTAX      DateAndTime
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The local date and time when the component first appeared.

       Implementations MUST include the offset from UTC,
       if available.  Implementation in environments in which
       the UTC offset is not available is NOT RECOMMENDED."
   ::= { coreComponentEntry 2 }

coreComponentName    OBJECT-TYPE
   SYNTAX      SnmpAdminString
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Component name."
  ::= { coreComponentEntry 3 }

coreComponentEnabled    OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Component is enabled"
  ::= { coreComponentEntry 4 }

coreComponentStatus    OBJECT-TYPE
   SYNTAX      INTEGER { unknown(1), up(2), down(3) }
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Component status (unknown/up/down)"
  ::= { coreComponentEntry 5 }

-- Conformance

coreComponentConformance OBJECT IDENTIFIER ::= { coreComponentMIB 2 }

coreComponentCompliances OBJECT IDENTIFIER ::= { coreComponentConformance 1 }

coreComponentCompliance MODULE-COMPLIANCE
      STATUS  current
      DESCRIPTION
          "The compliance statement for systems supporting
          the iVN Core Component MIB."
      MODULE -- this module
          MANDATORY-GROUPS {
          coreComponentObjectGroup
          }
   ::= { coreComponentCompliances 1 }

coreComponentGroups OBJECT IDENTIFIER ::= { coreComponentConformance 2 }

coreComponentObjectGroup OBJECT-GROUP
    OBJECTS {
        coreComponentTableLastChanged,
        coreComponentDateAndTime,
        coreComponentName,
        coreComponentEnabled,
        coreComponentStatus
        }
        STATUS   current
        DESCRIPTION
            "Core component list object group."
        ::= { coreComponentGroups 1}

END
