-- *********************************************************************
-- **
-- ** BATM Advanced Communications.
-- **
-- *********************************************************************
-- ** Filename: PRVT-INTERWORKING-OS-MIB.mib
-- ** Project: T-Metro Switches.
-- ** Purpose: Private MIB
-- *********************************************************************
-- (c) Copyright, 2009, BATM Advanced Communications. All rights reserved.
-- WARNING:
--
-- BY UTILIZING THIS FILE, YOU AGREE TO THE FOLLOWING:
--
-- This file is the property of BATM Advanced Communications and contains
-- proprietary and confidential information. This file is made
-- available to authorized BATM customers on the express
-- condition that neither it, nor any of the information contained
-- therein, shall be disclosed to third parties or be used for any
-- purpose other than to replace, modify or upgrade firmware and/or
-- software components of BATM manufactured equipment within the
-- authorized customer's network, and that such transfer be
-- completed in accordance with the instructions provided by
-- BATM. Any other use is strictly prohibited.
--
-- EXCEPT AS RESTRICTED BY LAW, OR AS PROVIDED IN BATM'S LIMITED
-- WARRANTY, THE SOFTWARE PROGRAMS CONTAINED IN THIS FILE ARE
-- PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES
-- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
--
-- IN NO EVENT SHALL BATM BE LIABLE FOR ANY DAMAGES WHATSOEVER
-- INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
-- PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION OR
-- OTHER CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE, OR INABILITY
-- TO USE, THE SOFTWARE CONTAINED IN THIS FILE.
--
-- ----------------------------------------------------------------------------

PRVT-INTERWORKING-OS-MIB DEFINITIONS ::= BEGIN

IMPORTS
    InetAddress, InetAddressType, InetPortNumber
        FROM INET-ADDRESS-MIB
    software
        FROM PRVT-SWITCH-MIB
    Integer32, MODULE-IDENTITY, OBJECT-TYPE, Unsigned32
        FROM SNMPv2-SMI
    DateAndTime, DisplayString, TEXTUAL-CONVENTION, TestAndIncr
        FROM SNMPv2-TC;

prvtInterworkingOSMIB MODULE-IDENTITY
    LAST-UPDATED "201105120000Z"
    ORGANIZATION 
        "BATM Advanced Communication"
    CONTACT-INFO 
        "BATM/Telco Systems Support team
         Email:
         For North America: techsupport@telco.com
         For North Europe: support@batm.de, info@batm.de
         For the rest of the world: techsupport@telco.com"
    DESCRIPTION 
        "The MIB enables display configuration of the device OS features."
    REVISION    "201105120000Z"
    DESCRIPTION 
        "Clarified behavior of prvtBootConfigUpgrade objects."
    REVISION    "201010140000Z"
    DESCRIPTION 
        "Added prvtConfigFiles."
    REVISION    "200908060000Z"
    DESCRIPTION 
        "Initial version."
    ::= { software 1 }


PrvtFileLocationType ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION 
        "A value that represents a type of a file location interface.
         fileSystem(1)    -- The local file system.
         runningBinary(2) -- The running configuration on RAM, as a binary file interface
         runningScript(3) -- The running configuration on RAM, as a CLI-script file interface
         techSupport(4)   -- The CLI show command output
         tftp(5)          -- A remote file system reached by the TFTP protocol
         ftp(6)           -- A remote file system reached by the FTP protocol."
    SYNTAX      INTEGER { fileSystem(1), runningBinary(2), 
                    runningScript(3), techSupport(4), tftp(5), ftp(6) }

prvtInterworkingOSMIBObjects OBJECT IDENTIFIER
    ::= { prvtInterworkingOSMIB 1 }

version OBJECT IDENTIFIER
    ::= { prvtInterworkingOSMIBObjects 1 }

oSversionNumber OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "This object identifies version number of the OS"
    ::= { version 1 }

oSversionDate OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "This object identifies version date of the OS"
    ::= { version 2 }

bootVersionDate OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "This object identifies boot version date of the OS"
    ::= { version 3 }

management OBJECT IDENTIFIER
    ::= { prvtInterworkingOSMIBObjects 2 }

managementMisc OBJECT IDENTIFIER
    ::= { management 1 }

managementMiscReset OBJECT-TYPE
    SYNTAX      INTEGER { noop(1), reset(2), resetToDefaults(3), 
                    saveAndReset(4) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "Physically performs a hardware reset of the unit.
         Use with care. A reset (2) resets the unit, the
         resetToDefaults (3) resets the configuration file
         to factory defaults and then resets the unit, the value of
         saveAndReset (4) saves the config and then resets the unit and
         noop (1) does nothing.
         A value of noop (1) is always returned
         for a GET operation."
    ::= { managementMisc 1 }

managementMiscReload OBJECT-TYPE
    SYNTAX      INTEGER { noop(1), saveAndReload(2) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "Reload the unit software, the unit hardware will not
         be affected. A value of noop (1) is always returned for a
         GET operation."
    ::= { managementMisc 2 }

managementMiscReloadInTime OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(4))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "Indicates time for scheduled reload without save in hour:min.
         octets contents range
         1 day 0x01..0x1f (1-31)
         2 month 0x01..0x0C (1..12)
         where january = 1 december = 12
         3 hour 0x01..0x17 (0..23)
         4 min 0x01..3B (0..59)
         For example: 0x01 0x01 0x01 0x01 means 1 January 01:01.
         To stop scheduled reload set it to 0x00 0x00 0x00 0x00"
    ::= { managementMisc 3 }

managementMiscReloadAtTime OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(4))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "Indicates time for scheduled reload without save at day:month:hour:min.
         octets contents range
         1 day 0x01..0x1f (1-31)
         2 month 0x01..0x0C (1..12)
         where january = 1 december = 12
         3 hour 0x01..0x17 (0..23)
         4 min 0x01..3B (0..59)
         For example: 0x01 0x01 0x01 0x01 means 1 January 01:01.
         To stop scheduled reload set it to 0x00 0x00 0x00 0x00"
    ::= { managementMisc 4 }

prvtBootConfigUpgrade OBJECT IDENTIFIER
    ::= { management 2 }

prvtBootUpgradeSrcURI OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The object represents an address from where the application
         will be copied during an upgrade process initiated using the
         object prvtBootUpgradeCmd.
         The address must be given in a valid URI format.
         
         Examples:
         ftp://myuser:mypass@netaddress/MyApps/Imagev1.5.Z
         tftp://netaddress/MyApps/Imagev1.5.Z"
    REFERENCE   
        "See rfc3986"
    ::= { prvtBootConfigUpgrade 1 }

prvtBootApplicationName OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "This object contains the file name of the application that will
         be loaded upon the next restart.
         Sets to this object must be the file name of an existing OS image.
         A list of existing OS images can be obtained by performing a walk
         of prvtFileSystemFileName.osImage.
         Sets with the name of a non-existing OS image will result in an
         error response.
         Note that no validation of the image is performed when a new image
         is selected by writing to this object."
    ::= { prvtBootConfigUpgrade 2 }

prvtBootUpgradeCmd OBJECT-TYPE
    SYNTAX      INTEGER { none(0), ready(1), apply(2), applyExec(3) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "This field is used to initiate an upgrade process.
         The object prvtBootUpgradeSrcURI is to contain the source URI of where
         to obtain the new image.
         When a get request is executed, the returned value will be always ready.
         When a set with the value applyExec is made to this object, the upgrade
         process is started."
    ::= { prvtBootConfigUpgrade 4 }

prvtBootOperStatus OBJECT-TYPE
    SYNTAX      INTEGER { unknown(0), ready(1), notReady(2), 
                    upgradeInProgress(3) }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "The object is used to show the current status of the upgrading process. The
         default value is ready(1), indicating that the process is idle.
         upgradeInProgress(3) indicates an upgrade process has started and has not finished
         yet."
    ::= { prvtBootConfigUpgrade 5 }

prvtBootErrorCondition OBJECT-TYPE
    SYNTAX      INTEGER { noError(0), genericError(1), copyFailed(2), 
                    downloadFailed(3), freeSpaceError(4), 
                    validationFailed(5), backupFailed(6), 
                    inProgressError(7), consistencyError(8), 
                    fileSystemError(9), profileNameError(10), 
                    profileError(11), fileNameError(12), pathError(13), 
                    zFileError(14), cannotFindFile(15), 
                    defApplicationProfileError(16), 
                    configProfileError(17), bootDevProfileError(18), 
                    ftpServerProfileError(19), ftpUserProfileError(20), 
                    ftpPassProfileError(21) }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "This object gives the error condition of the most recent upgrade process initiated
         using the object prvtBootUpgradeCmd."
    ::= { prvtBootConfigUpgrade 6 }

prvtConfigFiles OBJECT IDENTIFIER
    ::= { management 3 }

prvtConfigFileAction OBJECT IDENTIFIER
    ::= { prvtConfigFiles 1 }

prvtConfigFileSource OBJECT IDENTIFIER
    ::= { prvtConfigFileAction 1 }

prvtConfigSourceType OBJECT-TYPE
    SYNTAX      PrvtFileLocationType
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The type of the location of the source file used by prvtConfigAction."
    ::= { prvtConfigFileSource 1 }

prvtConfigSourceFileName OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The name of the file intended to be copied if prvtConfigAction='copy';
         or the file whose name is to be changed if prvtConfigFileAction='rename';
         or the file to be merged to running configuration if prvtConfigAction='merge'.
         Otherwise, has no significance."
    ::= { prvtConfigFileSource 2 }

prvtConfigFileTarget OBJECT IDENTIFIER
    ::= { prvtConfigFileAction 2 }

prvtConfigTargetType OBJECT-TYPE
    SYNTAX      PrvtFileLocationType
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The type of the location of the destination file used by prvtConfigAction."
    ::= { prvtConfigFileTarget 1 }

prvtConfigTargetFileName OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The name of the file intended to be copied to if prvtConfigAction='copy';
         or the new file name if prvtConfigFileAction='rename'. Otherwise, has no significance."
    ::= { prvtConfigFileTarget 2 }

prvtConfigFileRemote OBJECT IDENTIFIER
    ::= { prvtConfigFileAction 3 }

prvtConfigRemoteAddressType OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The address type of prvtConfigRemoteAddress.
         Note that prvtConfigAction currently only support actions that use IPv4 address types."
    REFERENCE   
        "prvtConfigAction"
    ::= { prvtConfigFileRemote 1 }

prvtConfigRemoteAddress OBJECT-TYPE
    SYNTAX      InetAddress
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The IP address of the remote file server to use for the upload or download request."
    REFERENCE   
        "prvtConfigAction"
    ::= { prvtConfigFileRemote 2 }

prvtConfigRemotePort OBJECT-TYPE
    SYNTAX      InetPortNumber
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The transport protocol port to use for the upload or download request.
         The value '0' indicates to use the IANA default port number for the selected protocol."
    REFERENCE   
        "prvtConfigAction"
    ::= { prvtConfigFileRemote 3 }

prvtConfigRemoteUser OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The user name to use for the upload or download request."
    REFERENCE   
        "prvtConfigAction"
    ::= { prvtConfigFileRemote 4 }

prvtConfigRemotePassword OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "The user password to use for the upload or download request."
    REFERENCE   
        "prvtConfigAction"
    ::= { prvtConfigFileRemote 5 }

prvtConfigActionSpinLock OBJECT-TYPE
    SYNTAX      TestAndIncr
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "This object is used to facilitate prvtConfigAction
         sets by multiple managers, specifically sets that transitions
         prvtConfigAction from 'idle' to 'prepare'.
         
         The procedure for performing this transition is as follows:
           1. Retrieve the value of prvtConfigAction. If value is not 'idle',
              then wait until prvtConfigAction returns to 'idle'.
           2. Retrieve the value of prvtConfigActionSpinLock.
           3. Within a single set request packet, set the value of prvtConfigActionSpinLock
              to the retrieved value, and the value of prvtConfigAction to 'prepare'.
              If the set fails for the prvtConfigActionSpinLock object, go back to step 1.
         
         Note that the use of the prvtConfigActionSpinLock object is optional
         (prvtConfigAction can be set without using prvtConfigActionSpinLock)."
    ::= { prvtConfigFileAction 4 }

prvtConfigAction OBJECT-TYPE
    SYNTAX      INTEGER { idle(1), prepare(2), copy(3), rename(4), 
                    merge(5) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "Represents a file action request to be committed immediately (with set request) or that
         is being commited (with get request).
         
         idle = there is no action being performed or prepared
         prepare = parameters of an action are being edited. This is used by the manager to
           willingly avoid editing parameters while another manager does so.
         copy = copy a file from source to target, where source and target have a broad meaning
          (local/remote file system or running configuration). See details below.
         rename = rename a local file (see details below)
         merge = merge a local file to running configuration
         
         Allowed Transitions:
         * idle to prepare
         * prepare to any other
         
         Automatic Transitions:
         * copy to idle, when action is done
         * rename to idle, when action is done
         * merge to idle, when action is done
         
         ******************************
         *       Action = copy        *
         ******************************
         The following table gives the corresponding CLI command for each combination of source and target type.
         
         +--------------+----------------------+----------------------+---------------+----------------------+
         |      \ Target|fileSystem            |runningBinary         |runningScript  |ftp                   |
         |Source \      |                      |                      |               |                      |
         +--------------+----------------------+----------------------+---------------+----------------------+
         |fileSystem    |file cp from          |file restore          |file replace   |file cp from          |
         |              |SRC                   |binary-running-config |SRC            |SRC                   |
         |              |TRG                   |flash                 |               |FTP_TRG               |
         +--------------+----------------------+----------------------+---------------+----------------------+
         |techSupport   |file cp               |-- not legal --       |-- not legal --|file cp               |
         |              |technical-support     |                      |               |technical-support     |
         |              |TRG                   |                      |               |FTP_TRG               |
         +--------------+----------------------+----------------------+---------------+----------------------+
         |runningBinary |file backup           |-- not legal --       |-- not legal --|file backup           |
         |              |binary-running-config |                      |               |binary-running-config |
         |              |flash                 |                      |               |FTP_TRG               |
         +--------------+----------------------+----------------------+---------------+----------------------+
         |runningScript |file cp               |-- not legal --       |-- not legal --|file cp               |
         |              |running-configuration |                      |               |running-configuration |
         |              |TRG                   |                      |               |FTP_TRG               |
         +--------------+----------------------+----------------------+---------------+----------------------+
         |ftp           |file cp from          |file restore          |-- not legal --|-- not legal --       |
         |              |FTP_SRC               |binary-running-config |               |                      |
         |              |TRG                   |FTP_SRC               |               |                      |
         +--------------+----------------------+----------------------+---------------+----------------------+
         Comments:
         (a) FTP_SRC denotes ftp://[USER[:PSW]@]ADR[:PORT]/SRC
            FTP_TRG denotes ftp://[USER[:PSW]@]ADR[:PORT]/TRG
         (b) SRC, TRG, USER, PSW, ADR and PORT are respectively the values of prvtConfigSourceFileName,
            prvtConfigTargetFileName, prvtConfigRemoteUser, prvtConfigRemotePassword,
            prvtConfigRemoteAddress and prvtConfigRemotePort.
            When any of these are not mentioned in the command, then the value is not relevant.
         (c) tftp is the same as ftp, except that USER, PSW are not used
         (d) the error 'inconsistentValue' is returned for any combination marked 'not legal'
         (e) a successful execution of a copy action when target type is 'runningBinary' (equivalent CLI
            command is 'file restore binary-running config ...') results in a system reload
         (f) The above comments are also applicable to the other actions explained below.
         
         ******************************
         *       Action = rename      *
         ******************************
         equivalent to CLI command: file mv SRC TRG
         prvtConfigTargetType and prvtConfigSourceType must equal to 'fileSystem'
         
         ******************************
         *       Action = merge       *
         ******************************
         equivalent to CLI command: file merge SRC
         prvtConfigSourceType must equal 'fileSystem'
         prvtConfigTargetType must equal 'runningScript'
         
         ******************************
         *       Examples             *
         ******************************
         [1] To save the binary of the running configuration to a remote ftp server, with default username,
            default password, default port, IP = 10.2.144.20, and target file name 'example.bin', the
            procedure would be (assuming that prvtConfigAction is initially in 'idle' state):
         set prvtConfigAction <- 'prepare'
         set prvtConfigSourceType <- 'runningBinary'
         set prvtConfigTargetType <- 'ftp'
         set prvtConfigTargetFileName <- 'example.bin'
         set prvtConfigRemoteAddress  <- '10.2.144.20'
         set prvtConfigAction <- 'copy'
         
         [2] To rename a file named 'first.txt' to 'second.txt', the procedure would be
            (assuming that prvtConfigAction is initially in 'idle' state):
         set prvtConfigAction <- 'prepare'
         set prvtConfigSourceType <- 'fileSystem'
         set prvtConfigTargetType <- 'fileSystem'
         set prvtConfigSourceFileName <- 'first.txt'
         set prvtConfigTargetFileName <- 'second.txt'
         set prvtConfigAction <- 'rename'"
    ::= { prvtConfigFileAction 5 }

prvtFileSystem OBJECT IDENTIFIER
    ::= { management 4 }

prvtFileSystemSize OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "Bytes"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "The size of the file system flash."
    ::= { prvtFileSystem 1 }

prvtFileSystemUsedSize OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "Bytes"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "The size of the currently used part of the file system flash."
    ::= { prvtFileSystem 2 }

prvtFileSystemFreeSize OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "Bytes"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "The size of the currently free to use part of the file system flash."
    ::= { prvtFileSystem 3 }

prvtFileSystemFileTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF PrvtFileSystemFileEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION 
        "A table of files existing in the device's file system."
    ::= { prvtFileSystem 4 }

prvtFileSystemFileEntry OBJECT-TYPE
    SYNTAX      PrvtFileSystemFileEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION 
        "An entry of prvtFileSystemFileTable."
    INDEX       { prvtFileSystemFileType, prvtFileSystemFileIndex }
    ::= { prvtFileSystemFileTable 1 }

PrvtFileSystemFileEntry ::= SEQUENCE {
    prvtFileSystemFileType      INTEGER,
    prvtFileSystemFileIndex     Unsigned32,
    prvtFileSystemFileCreated   DateAndTime,
    prvtFileSystemFileSize      Unsigned32,
    prvtFileSystemFileName      DisplayString,
    prvtFileSystemFileDelete    DisplayString
}

prvtFileSystemFileType OBJECT-TYPE
    SYNTAX      INTEGER { other(1), osImage(2) }
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION 
        "The file type.
         The value 'osImage' signals that this file is a software image
         file for possible use by the device."
    ::= { prvtFileSystemFileEntry 1 }

prvtFileSystemFileIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION 
        "An index uniquely identifying a file.
         This value does not change through-out the lifetime of a file,
         but may change after system restarts.
         Note that after a file has been deleted, this value may be re-used
         by a newly created file with the same or a different file name."
    ::= { prvtFileSystemFileEntry 2 }

prvtFileSystemFileCreated OBJECT-TYPE
    SYNTAX      DateAndTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "Represents the date and time this file was created."
    ::= { prvtFileSystemFileEntry 3 }

prvtFileSystemFileSize OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "Bytes"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "Represents the size of this file."
    ::= { prvtFileSystemFileEntry 4 }

prvtFileSystemFileName OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "Represents the name of this file."
    ::= { prvtFileSystemFileEntry 5 }

prvtFileSystemFileDelete OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION 
        "May be used to delete a file.
         To delete a file, this object must be set equal to the value of
         prvtFileSystemFileName of the same row.
         Note that some files are protected from being deleted.
         Reads of this object always return a zero-length string."
    ::= { prvtFileSystemFileEntry 6 }

cpu OBJECT IDENTIFIER
    ::= { prvtInterworkingOSMIBObjects 3 }

cpuMonitoring OBJECT IDENTIFIER
    ::= { cpu 1 }

cpuMonitoringUtilization OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "The object shows the current CPU utilization"
    ::= { cpuMonitoring 1 }

END -- end of module PRVT-INTERWORKING-OS-MIB.
