-- *********************************************************************
-- CISCO-IMAGE-LICENSE-MGMT-MIB.my: Cisco MIB to manage image level on
-- Cisco devices.
--   
-- August 2007, Ganesan Rajam
--   
-- Copyright (c) 2006-2007 by Cisco Systems Inc.
-- All rights reserved.
--   
-- ********************************************************************

CISCO-IMAGE-LICENSE-MGMT-MIB DEFINITIONS ::= BEGIN

IMPORTS
    OBJECT-TYPE,
    MODULE-IDENTITY,
    Unsigned32,
    NOTIFICATION-TYPE
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE,
    OBJECT-GROUP,
    NOTIFICATION-GROUP
        FROM SNMPv2-CONF
    TEXTUAL-CONVENTION,
    TruthValue
        FROM SNMPv2-TC
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB
    entPhysicalIndex
        FROM ENTITY-MIB
    ciscoMgmt
        FROM CISCO-SMI;


ciscoImageLicenseMgmtMIB MODULE-IDENTITY
    LAST-UPDATED    "200710160000Z"
    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
        "The MIB module for managing the running image level
        of a Cisco device. Cisco's licensing mechanism provides
        flexibility to run a device on a chosen image level.
        This mechanism is referred to as image level licensing.
        Image level licensing leverages the universal image
        based licensing solution.

        The image level licensing mechanism works as follows - 

        A universal image that contains all levels of software
        packages is loaded on to the device. At boot time, the
        device determines the highest level of license and brings
        up the appropriate software features or subsystems.
        The user can configure the image level with which the
        device has to boot. The system will verify whether the
        appropriate license is available for the configured image
        level. The image level for the next boot will be determined
        based on the availability of the license. The following
        scenarios explains some use-cases of image level licensing:

        Scenario 1:
        - Customer selects advsecurityk9 based image.
        - Manufacturing installs advsecurity license on the device.
        - This device will run all features that are part of the
        base advsecurity license.
        - Customer upgrades to advipservicesk9 license.
        - The next boot level is set to advipservicesk9.
        - The device will run advsecurityk9 feature until the
        next reboot. After reboot the device will run 
        advipservicesk9 features.

        Scenario 2:
        - Customer selects advipservicesk9 based image.
        - Manufacturing installs advipservices and advsecurity
        license on the device.
        - This device will run all features that are part of the
        base advipservices license.
        - No upgrades available for advipservices license.

        The user has to accept the End User License Agreement(EULA)
        before using this MIB to configure the image level. 

        This MIB should be used in conjuntion with
        CISCO-LICENSE-MGMT-MIB module to achieve the image level
        licensing functionality.

        This MIB module defines objects which provides the different
        image levels supported by the device and the license required
        to enable a particular image level. It also defines objects
        to let the user configure the required image level. The MIB 
        module contains notification which will be triggered when
        the user changes the image level for next boot. 

        The CISCO-LICENSE-MGMT-MIB module should be used to export
        the EULA and to configure the required license.

        This MIB module is defined generically so it can be used for
        both stand-alone as well as stackable devices. The
        entPhysicalIndex imported from ENTITY-MIB is used to identify
        the device uniquely."
    REVISION        "200710160000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { ciscoMgmt 640 }


ciscoImageLicenseMgmtMIBNotifs  OBJECT IDENTIFIER
    ::= { ciscoImageLicenseMgmtMIB 0 }

ciscoImageLicenseMgmtMIBObjects  OBJECT IDENTIFIER
    ::= { ciscoImageLicenseMgmtMIB 1 }

ciscoImageLicenseMgmtMIBConform  OBJECT IDENTIFIER
    ::= { ciscoImageLicenseMgmtMIB 2 }


BootImageLevel ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "This textual convention is used to define
        the image level. 

        If the device is running at advipservices 
        image level, then the boot image level will
        be 'advipservices'."
    SYNTAX          OCTET STRING (SIZE (0..255))

LicenseNameList ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "This textual convention is used to define
        the list of license names. If multiple licenses
        are present then this string will contain all
        the licenses seperated by the ',' character.

        If the license required to run a device at
        advipservices image level is advipservices and
        advsecurity, then the license name list will be
        'advipservices,advsecurity'."
    SYNTAX          OCTET STRING (SIZE (0..255))
-- Table for executing license management actions.

cilmBootImageLevelTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CilmBootImageLevelEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table that contains the configuration information of
        current and next boot image level. This table contains
        entries for each software module running in an image 
        loaded in the device. The software module is identified by
        cilmModuleName and the device is identified by 
        entPhysicalIndex."
    ::= { ciscoImageLicenseMgmtMIBObjects 1 }

cilmBootImageLevelEntry OBJECT-TYPE
    SYNTAX          CilmBootImageLevelEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An entry in the table for each module containing the
        list of objects that define the configuration of next
        boot level. The following information is specified by
        the objects present in the table.

        - Current image level.
        - Configured image level for the next boot.
        - Actual image level for the next boot.
        - License store index for the current license.
        - License index of the current license.
        - License store index for the next boot license.
        - License index of the next boot license."
    INDEX           {
                        entPhysicalIndex,
                        cilmModuleName
                    } 
    ::= { cilmBootImageLevelTable 1 }

CilmBootImageLevelEntry ::= SEQUENCE {
        cilmModuleName                SnmpAdminString,
        cilmCurrentImageLevel         BootImageLevel,
        cilmConfiguredBootImageLevel  BootImageLevel,
        cilmNextBootImageLevel        BootImageLevel,
        cilmCurrentLicenseStoreIndex  Unsigned32,
        cilmCurrentLicenseIndex       Unsigned32,
        cilmNextBootLicenseStoreIndex Unsigned32,
        cilmNextBootLicenseIndex      Unsigned32
}

cilmModuleName OBJECT-TYPE
    SYNTAX          SnmpAdminString
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object is used as one of the two indices in
        cilmBootImageLevelTable. This object indicates the module
        name of the software package. There can be multiple
        modules in an image performing specific functionality.
        For example, in a wireless image there can be two modules
        - a base image module and a wireless module." 
    ::= { cilmBootImageLevelEntry 1 }

cilmCurrentImageLevel OBJECT-TYPE
    SYNTAX          BootImageLevel
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the current image level that
        the module is running." 
    ::= { cilmBootImageLevelEntry 2 }

cilmConfiguredBootImageLevel OBJECT-TYPE
    SYNTAX          BootImageLevel
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object indicates the configured image level
        of the module for the next boot.

        Note: The configured next boot image level may not 
        be the actual next boot image level. The actual next
        boot image level is denoted by cilmNextBootImageLevel
        which is determined based on the license availability." 
    ::= { cilmBootImageLevelEntry 3 }

cilmNextBootImageLevel OBJECT-TYPE
    SYNTAX          BootImageLevel
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the next boot image level. The
        next boot image level can be different from configured
        level. The next boot image level is determined based
        on the availability of required license." 
    ::= { cilmBootImageLevelEntry 4 }

cilmCurrentLicenseStoreIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the license store index where the
        currently used license is stored. This object has the same
        value as clmgmtLicenseStoreIndex object and uniquely
        identifies an entry in clmgmtLicenseStoreInfoTable in
        CISCO-LICENSE-MGMT-MIB.

        Note: The license store index can be '0' if no license is
        installed and device is running base image." 
    ::= { cilmBootImageLevelEntry 5 }

cilmCurrentLicenseIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the license index of the currently used
        license. This object has the same value as clmgmtLicenseIndex and
        uniquely identifies an entry in clmgmtLicenseInfoTable in
        CISCO-LICENSE-MGMT-MIB.

        Note: The license index can be '0' if no license is
        installed and device is running base image." 
    ::= { cilmBootImageLevelEntry 6 }

cilmNextBootLicenseStoreIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the license store index where the
        next boot license is stored. This object has the same
        value as clmgmtLicenseStoreIndex object and uniquely
        identifies an entry in clmgmtLicenseStoreInfoTable in
        CISCO-LICENSE-MGMT-MIB.

        Note: The license store index can be '0' if no license is
        installed for the next boot." 
    ::= { cilmBootImageLevelEntry 7 }

cilmNextBootLicenseIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the license index of the next boot
        license. This object has the same value as clmgmtLicenseIndex
        and uniquely identifies an entry in clmgmtLicenseInfoTable in
        CISCO-LICENSE-MGMT-MIB.

        Note: The license index can be '0' if no license is
        installed for the next boot." 
    ::= { cilmBootImageLevelEntry 8 }
 


cilmImageLevelToLicenseMapTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CilmImageLevelToLicenseMapEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table contains the mapping between different
        image levels of each modules in the image and the
        license required to run the modules at a particular
        image level. This table can be used to identify the
        different image levels and the appropriate licenses 
        required for each."
    ::= { ciscoImageLicenseMgmtMIBObjects 2 }

cilmImageLevelToLicenseMapEntry OBJECT-TYPE
    SYNTAX          CilmImageLevelToLicenseMapEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An entry in the table containing the following
        information.
        - The image levels at the which the modules can be run.
        - The license required to the run a module at a
        particular image level.
        - The priority of the license."
    INDEX           {
                        entPhysicalIndex,
                        cilmModuleName,
                        cilmImageLicenseMapIndex
                    } 
    ::= { cilmImageLevelToLicenseMapTable 1 }

CilmImageLevelToLicenseMapEntry ::= SEQUENCE {
        cilmImageLicenseMapIndex   Unsigned32,
        cilmImageLicenseImageLevel BootImageLevel,
        cilmImageLicenseName       LicenseNameList,
        cilmImageLicensePriority   Unsigned32
}

cilmImageLicenseMapIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This is a running index used to identify an entry
        of this table." 
    ::= { cilmImageLevelToLicenseMapEntry 1 }

cilmImageLicenseImageLevel OBJECT-TYPE
    SYNTAX          BootImageLevel
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the image level at which
        a module can be run. A module can be run at
        different image levels. An entry will be created
        in this table for every module and image level
        combination." 
    ::= { cilmImageLevelToLicenseMapEntry 2 }

cilmImageLicenseName OBJECT-TYPE
    SYNTAX          LicenseNameList
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the list of licenses needed to
        be installed for the module to run at the image level
        mentioned by cilmImageLicenseImageLevel object of this
        entry." 
    ::= { cilmImageLevelToLicenseMapEntry 3 }

cilmImageLicensePriority OBJECT-TYPE
    SYNTAX          Unsigned32 (1..255)
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the priority of the image level
        mentioned by cilmImageLicenseImageLevel object of this
        entry. The image level with the highest priority license
        will be considered as the default level in the absense of
        next boot image level configuration. For example if there
        are three licenses l1, l2 and l3 in the ascending order of
        priority, then by default l1 will be the level at which the
        module will be running. If the next boot level is configured
        then the configuration will override the priority. The highest
        priority license supports a feature set which is a super set of
        all other licenses." 
    ::= { cilmImageLevelToLicenseMapEntry 4 }
 


-- Global Objects

cilmEULAAccepted OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object when set to TRUE means that the user has
        accepted the END USER LICENSE AGREEMENT. This object
        has to be set to TRUE by the user before using the
        objects in the cilmBootImageLevelTable to configure
        the license."
    DEFVAL          { false } 
    ::= { ciscoImageLicenseMgmtMIBObjects 3 }
-- Notification control

cilmNotifCntl  OBJECT IDENTIFIER
    ::= { ciscoImageLicenseMgmtMIBObjects 4 }


cilmImageLevelChangedNotif OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Specify whether or not a notification should be
        generated on the detection of change in next boot
        image level.

        If set to TRUE, cilmBootImageLevelChanged notification
        will be generated. 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."
    REFERENCE
        "See also RFC3413 for explanation that notifications
        are under the ultimate control of the MIB module in
        this document."
    DEFVAL          { false } 
    ::= { cilmNotifCntl 1 }

-- Notifications

cilmBootImageLevelChanged NOTIFICATION-TYPE
    OBJECTS         {
                        cilmCurrentImageLevel,
                        cilmConfiguredBootImageLevel
                    }
    STATUS          current
    DESCRIPTION
        "This notification is triggered when next boot image level
        is changed in the management entity. The current and 
        configured image level are indicated by cilmCurrentImageLevel
        and cilmConfiguredBootImageLevel objects respectively."
   ::= { ciscoImageLicenseMgmtMIBNotifs 1 }
-- Conformance

cilmModuleCompliances  OBJECT IDENTIFIER
    ::= { ciscoImageLicenseMgmtMIBConform 1 }

cilmModuleGroups  OBJECT IDENTIFIER
    ::= { ciscoImageLicenseMgmtMIBConform 2 }


cilmModuleCompliance MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "Compliance statement for Cisco Image level license mgmt MIB."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        cilmAdminGroup,
                        cilmNotifGroup
                    }

    GROUP           cilmOperGroup
    DESCRIPTION
        "This group is mandatory for all devices where
        multiple license are supported."
    ::= { cilmModuleCompliances 1 }

-- Units of Conformance

cilmAdminGroup OBJECT-GROUP
    OBJECTS         {
                        cilmCurrentImageLevel,
                        cilmConfiguredBootImageLevel,
                        cilmNextBootImageLevel,
                        cilmCurrentLicenseStoreIndex,
                        cilmCurrentLicenseIndex,
                        cilmNextBootLicenseStoreIndex,
                        cilmNextBootLicenseIndex,
                        cilmEULAAccepted,
                        cilmImageLevelChangedNotif
                    }
    STATUS          current
    DESCRIPTION
        "Objects for performing license set operation for setting
        next boot level."
    ::= { cilmModuleGroups 1 }

cilmOperGroup OBJECT-GROUP
    OBJECTS         {
                        cilmImageLicenseImageLevel,
                        cilmImageLicenseName,
                        cilmImageLicensePriority
                    }
    STATUS          current
    DESCRIPTION
        "Objects for getting current image level configuration data."
    ::= { cilmModuleGroups 2 }

cilmNotifGroup NOTIFICATION-GROUP
   NOTIFICATIONS    { cilmBootImageLevelChanged }
    STATUS          current
    DESCRIPTION
        "Objects for getting current image level configuration data."
    ::= { cilmModuleGroups 3 }

END


































