-- *****************************************************************
-- CISCO-CONFIG-COPY-MIB.my: MIB for copying a Cisco router's  config
--
-- December 1997, Ramanathan R. Kavasseri
--
-- Copyright (c) 1998 by cisco Systems, Inc.
-- All rights reserved.
-- *****************************************************************
--


CISCO-CONFIG-COPY-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
        IpAddress, Unsigned32
                FROM SNMPv2-SMI
        TEXTUAL-CONVENTION, DisplayString, TimeStamp, RowStatus,
        TruthValue
                FROM SNMPv2-TC
        MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
                FROM SNMPv2-CONF
        ciscoMgmt
                FROM CISCO-SMI;

ciscoConfigCopyMIB  MODULE-IDENTITY
        LAST-UPDATED    "200212170000Z"
        ORGANIZATION        "Cisco Systems, Inc."
        CONTACT-INFO
                "        Cisco Systems
                        Customer Service

                Postal:        170 W. Tasman Drive
                        San Jose, CA  95134
                        USA

                Tel: +1 800 553-NETS

                E-mail:        cs-snmp@cisco.com"
        DESCRIPTION
                "This MIB facilitates writing of configuration files
                of an SNMP Agent running Cisco's IOS in the following 
                ways: to and from the net, copying running 
                configurations to startup configurations and 
                vice-versa, and copying a configuration
                (running or startup) to and from the local 
                IOS file system."
        REVISION        "200212170000Z"
        DESCRIPTION
                "Added a new enumeration value someConfigApplyFailed(7)
                to ConfigCopyFailCause TC."
        REVISION        "200205300000Z"
        DESCRIPTION
                "Added sftp protocol as an option for 
                ConfigCopyProtocol."
        REVISION        "200205070000Z"
        DESCRIPTION
                "Added scp protocol as an option for ConfigCopyProtocol.
                Added unsupportedProtocol(6) as an option for the 
                ConfigCopyFailCause TC."

        REVISION "200203280000Z"
        DESCRIPTION
                "Imported Unsigned32 from SNMPv2-SMI instead of
                CISCO-TC"
        ::= { ciscoMgmt 96 }

-- A config-copy operation is a request to copy a configuration 
-- file of an SNMP Agent running Cisco's IOS in the following ways:
--      1. to or from the net (via a protocol like tftp, ftp, rcp,
--      scp or sftp).
--      2. copying running configurations to startup
--      configurations and vice-versa.
--      3. copy a running or startup config to a file
--      to the local IOS file system and vice versa."
--
-- The term "agent-config" will be used in this MIB to refer to 
-- either the running config or the startup config. It will be 
-- used as a short way of saying "either running config or the 
-- startup config".


ConfigCopyProtocol ::= TEXTUAL-CONVENTION
        STATUS current
        DESCRIPTION
                "The protocol file transfer protocol that should be used
                to copy the configuration file over the network. If the
                config file transfer is to occur locally on the SNMP
                agent, the method of transfer is left upto the 
                implementation, and is not restricted to the 
                protocols below."
        SYNTAX INTEGER {
                tftp(1),
                ftp(2),
                rcp(3),
                scp(4),
                sftp(5)
        }

ConfigCopyState ::= TEXTUAL-CONVENTION
        STATUS current
        DESCRIPTION
                "The state of a tftp config-copy operation. 
                 The description of each state is given below:

                 waiting:     only one config-copy request can run 
                              at any time. A newly activated 
                              config-copy request is placed in this 
                              state if another request has already 
                              been activated.

                 running:     this state signifies that the config-copy
                              request is running.

                 successsful: the state when a config-copy request is
                              successfully completed.

                 failed:      the config-copy request was unsuccesful.
                "
        SYNTAX        INTEGER {
                waiting(1),
                running(2),
                successful(3),
                failed(4)
        }

ConfigCopyFailCause ::= TEXTUAL-CONVENTION
        STATUS current
        DESCRIPTION
                "The reason a config-copy request failed."
        SYNTAX INTEGER {
                unknown(1),     -- very descriptive
                badFileName(2), -- check your file name/path/permissions
                timeout(3),     -- the network may be overloaded, or the
                                -- remote file server may not be 
                                -- responding.
                noMem(4),       -- the Agent wasn't able to allocate 
                                -- memory for the config-copy operation
                noConfig(5),    -- the agent-config selected as the 
                                -- source was non-existant.
                unsupportedProtocol(6),-- The protocol is not supported
                                       -- by the agent.
                someConfigApplyFailed(7) -- applying of some of the 
                                         -- configuration commands 
                                         -- failed. 
        }

ConfigFileType ::= TEXTUAL-CONVENTION
        STATUS current
        DESCRIPTION
                "The various types of files on which a config-copy
                operation can be performed."
        SYNTAX INTEGER {
                networkFile(1), -- file on another network device, e.g.
                                -- a file-server on the net
                iosFile(2),     -- a file on the local agent, other than
                                -- startup or running config
                startupConfig(3),
                runningConfig(4),
                terminal(5)     -- a terminal (e.g. the console window)
                                -- on which the config is to be 
                                -- displayed.
        }

ciscoConfigCopyMIBObjects OBJECT IDENTIFIER ::= { ciscoConfigCopyMIB 1 }

ccCopy        OBJECT IDENTIFIER ::= { ciscoConfigCopyMIBObjects 1 }

ccCopyTable OBJECT-TYPE
        SYNTAX SEQUENCE OF CcCopyEntry
        MAX-ACCESS not-accessible
        STATUS current
        DESCRIPTION
                "A table of config-copy requests."
        ::= { ccCopy 1 }

ccCopyEntry OBJECT-TYPE
        SYNTAX CcCopyEntry
        MAX-ACCESS not-accessible
        STATUS current
        DESCRIPTION
                "A config-copy request.

                A management station wishing to create an entry should
                first generate a random serial number to be used
                as the index to this sparse table.  The station should
                then create the associated instance of the row status
                and row index objects.  It must also, either in the same
                or in successive PDUs, create an instance of
                ccCopySourceFileType and ccCopyDestFileType.
                At least one of the FileTypes must be an agent-config
                file type (i.e.        startupConfig or runningConfig).
                If one of the file types is a networkFile, a valid
                ccCopyServerAddress and ccCopyFileName must be
                created as well. For a file type of iosFile, only
                a valid fileName needs to be created as an extra 
                parameter.

                It should also modify the default values for the other
                configuration objects if the defaults are not 
                appropriate.
                
                Once the appropriate instance of all the configuration
                objects have been created, either by an explicit SNMP
                set request or by default, the row status should be set
                to active to initiate the request. Note that this entire
                procedure may be initiated via a single set request 
                which specifies a row status of createAndGo as well as
                specifies valid values for the non-defaulted 
                configuration objects.

                Once the config-copy request has been created (i.e. the
                ccCopyEntryRowStatus has been made active), the entry
                cannot be modified - the only operation possible
                after this is to delete the row.

                Once the request completes, the management station 
                should retrieve the values of the status objects of 
                interest, and should then delete the entry.  In order 
                to prevent old entries from clogging the table, 
                entries will be aged out, but an entry will never be 
                deleted within 5 minutes of completing."
        INDEX { ccCopyIndex }
        ::= { ccCopyTable 1 }

CcCopyEntry ::=
        SEQUENCE {
                ccCopyIndex                       Unsigned32,
                -- configuration items
                ccCopyProtocol                    ConfigCopyProtocol,
                ccCopySourceFileType              ConfigFileType,
                ccCopyDestFileType                ConfigFileType,
                ccCopyServerAddress               IpAddress,
                ccCopyFileName                    DisplayString,
                ccCopyUserName                    DisplayString,
                ccCopyUserPassword                DisplayString,
                ccCopyNotificationOnCompletion    TruthValue,
                -- status items
                ccCopyState                       ConfigCopyState,
                ccCopyTimeStarted                 TimeStamp,
                ccCopyTimeCompleted               TimeStamp,
                ccCopyFailCause                   ConfigCopyFailCause,
                ccCopyEntryRowStatus              RowStatus
        }

ccCopyIndex OBJECT-TYPE
        SYNTAX           Unsigned32(1..2147483647)
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "Object which specifies a unique entry in the
                ccCopyTable.  A management station wishing
                to initiate a config-copy operation should use a
                random value for this object when creating
                or modifying an instance of a ccCopyEntry.
                The RowStatus semantics of the ccCopyEntryRowStatus
                object will prevent access conflicts."
        ::= { ccCopyEntry 1 }

ccCopyProtocol        OBJECT-TYPE
        SYNTAX           ConfigCopyProtocol
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "The protocol to be used for any copy. 
                Will default to tftp if not specified.

                If the copy operation occurs locally on the SNMP agent
                (e.g. runningCOnfigToStartupConfig), this object may
                be ignored by the implementation."
        DEFVAL        { tftp }
        ::= { ccCopyEntry 2 }

ccCopySourceFileType OBJECT-TYPE
        SYNTAX     ConfigFileType
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "specifies the type of file to copy from. Either the
                ccCopySourceFileType or the ccCopyDestFileType (or both)
                must be of type runningConfig or startupConfig. Also,
                the ccCopySourceFileType must be different from the
                ccCopyDestFileType.
        
                If the ccCopySourceFileType has the value of 
                networkFile, the ccCopyServerAddress and
                ccCopyFileName must also be created, and these 3 
                objects together (ccCopySourceFileType, 
                ccCopyServerAddress, ccCopyFileName) will uniquely 
                identify the source file.

                If the ccCopySourceFileType is iosFile, the 
                ccCopyFileName must also be created, and the 
                2 objects together (ccCopySourceFileType,
                ccCopyFileName) will uniquely identify the source 
                file.
                "
        ::= { ccCopyEntry 3 }

ccCopyDestFileType OBJECT-TYPE
        SYNTAX     ConfigFileType
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "specifies the type of file to copy to. Either the
                ccCopySourceFileType or the ccCopyDestFileType (or both)
                must be of type runningConfig or startupConfig. Also,
                the ccCopySourceFileType must be different from the
                ccCopyDestFileType.
        
                If the ccCopyDestFileType has the value of 
                networkFile, the ccCopyServerAddress and 
                ccCopyFileName must also be created, and these 
                3 objects together
                (ccCopyDestFileType, ccCopyServerAddress, 
                ccCopyFileName) will uniquely identify the 
                destination file.

                If the ccCopyDestFileType is iosFile, the ccCopyFileName
                must also be created, and the 2 objects together
                (ccCopyDestFileType, ccCopyFileName) will uniquely 
                identify the destination file."
        ::= { ccCopyEntry 4 }

ccCopyServerAddress OBJECT-TYPE
        SYNTAX     IpAddress
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "The ip address of the tftp server from (or to) 
                which to copy the configuration file. This object must
                be created when either the ccCopySourceFileType 
                or ccCopyDestFileType has the value networkFile. 
                Values of 0.0.0.0 or FF.FF.FF.FF for
                ccCopyServerAddress are not allowed."
        ::= { ccCopyEntry 5 }

ccCopyFileName OBJECT-TYPE
        SYNTAX     DisplayString
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "The file name (including the path, if applicable) of
                the file. This object must be created when either the
                ccCopySourceFileType or ccCopyDestFileType has the value
                networkFile or iosFile."
        ::= { ccCopyEntry 6 }

ccCopyUserName OBJECT-TYPE
        SYNTAX     DisplayString(SIZE (1..40))
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "Remote user name for copy via ftp, rcp, sftp or 
                scp protocol.
                This object must be created when the ccCopyProtocol
                is rcp, scp, ftp or sftp.
                If the protocol is rcp, it will override the remote 
                user-name configured through the 
                        rcmd remote-username <username>
                configuration command. 
                The remote user-name is sent as the server user-name 
                in an rcp command request sent by the system to a
                remote rcp server."
        ::= { ccCopyEntry 7 }

ccCopyUserPassword OBJECT-TYPE
        SYNTAX     DisplayString(SIZE (1..40))
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "Password used by ftp, sftp or scp for copying a 
                file to/from an ftp/sftp/scp server. This object must 
                be created when the ccCopyProtocol is ftp or scp. 
                Reading it returns a zero-length string for security 
                reasons."
        ::= { ccCopyEntry 8 }

ccCopyNotificationOnCompletion OBJECT-TYPE
        SYNTAX     TruthValue
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "Specifies whether or not a ccCopyCompletion
                notification should be issued on completion of the tftp
                transfer. If such a notification is desired, it is the
                responsibility of the management entity to ensure 
                that the SNMP administrative model is configured in 
                such a way as to allow the notification to be 
                delivered."
        DEFVAL { false }
        ::= { ccCopyEntry 9 }

ccCopyState OBJECT-TYPE
        SYNTAX     ConfigCopyState
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "Specifies the state of this config-copy request.
                This value of this object is instantiated only after 
                the row has been instantiated, i.e. after the 
                ccCopyEntryRowStatus has been made active."
        ::= { ccCopyEntry 10 }

ccCopyTimeStarted OBJECT-TYPE
        SYNTAX     TimeStamp
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "Specifies the time the ccCopyState last transitioned
                to running, or 0 if the state has never transitioned to
                running        (for e.g., stuck in waiting state).
                This object is instantiated only after the row has been
                instantiated."
        ::= { ccCopyEntry 11 }

ccCopyTimeCompleted OBJECT-TYPE
        SYNTAX     TimeStamp
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "Specifies the time the ccCopyState last transitioned
                from running to successful or failed states. This
                object is instantiated only after the row has been 
                instantiated.
                Its value will remain 0 until he request has completed."
        ::= { ccCopyEntry 12 }

ccCopyFailCause OBJECT-TYPE
        SYNTAX     ConfigCopyFailCause
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The reason why the config-copy operation failed.
                This object is instantiated only when the ccCopyState 
                for this entry is in the failed state."
        ::= { ccCopyEntry 13 }

ccCopyEntryRowStatus OBJECT-TYPE
        SYNTAX     RowStatus
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "The status of this table entry.  Once the entry 
                status is set to active, the associated entry cannot 
                be modified until the request completes (ccCopyState 
                transitions to successful or failed state)."
        ::= { ccCopyEntry 14 }

ciscoConfigCopyMIBTrapPrefix OBJECT IDENTIFIER 
                              ::= { ciscoConfigCopyMIB 2 }
ccCopyMIBTraps OBJECT IDENTIFIER 
                              ::= { ciscoConfigCopyMIBTrapPrefix 1 }

ccCopyCompletion NOTIFICATION-TYPE
        OBJECTS           {        ccCopyServerAddress,
                        ccCopyFileName,
                        ccCopyState,
                        ccCopyTimeStarted,
                        ccCopyTimeCompleted,
                        ccCopyFailCause
                   }
        STATUS           current
        DESCRIPTION
                "A ccCopyCompletion trap is sent at the completion
                of a config-copy request. The ccCopyFailCause is not
                instantiated, and hence not included in a trap, when 
                the ccCopyState is success."
        ::= { ccCopyMIBTraps 1 }

ciscoConfigCopyMIBConformance   
              OBJECT IDENTIFIER ::= { ciscoConfigCopyMIB 3 }
ccCopyMIBCompliances 
              OBJECT IDENTIFIER ::= { ciscoConfigCopyMIBConformance 1 }
ccCopyMIBGroups    
              OBJECT IDENTIFIER ::= { ciscoConfigCopyMIBConformance 2 }

ccCopyMIBCompliance MODULE-COMPLIANCE
        STATUS        current
        DESCRIPTION
                "The compliance statement for Cisco agents which 
                implement the Cisco ConfigCopy MIB. This MIB should 
                be implemented on all Cisco agents that support 
                copying of configs via the CLI."
        MODULE
                MANDATORY-GROUPS { ccCopyGroup,
                                   ccCopyNotificationsGroup
                  }
        ::= {ccCopyMIBCompliances 1 }

-- units of conformance

ccCopyGroup OBJECT-GROUP
        OBJECTS {
                ccCopyProtocol,
                ccCopySourceFileType,
                ccCopyDestFileType,
                ccCopyServerAddress,
                ccCopyFileName,
                ccCopyUserName,
                ccCopyUserPassword,
                ccCopyNotificationOnCompletion,
                ccCopyState,
                ccCopyTimeStarted,
                ccCopyTimeCompleted,
                ccCopyFailCause,
                ccCopyEntryRowStatus
        }
        STATUS        current
        DESCRIPTION
                "A collection of objects providing the ability to
                copy an agent-configuration file."
        ::= { ccCopyMIBGroups 1 }

ccCopyNotificationsGroup NOTIFICATION-GROUP
     NOTIFICATIONS { ccCopyCompletion
        }
     STATUS        current
     DESCRIPTION
             "The notification used to indicate that a config-copy
             operation to or from the agent has been completed."
     ::= { ccCopyMIBGroups 2 }

END
