F5-OS-TENANT-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Integer32, IpAddress, Counter32
        FROM SNMPv2-SMI
    TEXTUAL-CONVENTION, DisplayString, TruthValue, PhysAddress
        FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP
        FROM SNMPv2-CONF
    platform, f5Compliance
        FROM F5-COMMON-SMI-MIB
    ;

--================================================================
f5TenantStats MODULE-IDENTITY
    LAST-UPDATED "202404220000Z"
    ORGANIZATION "F5 Networks, Inc."
    CONTACT-INFO
         "postal: F5 Networks, Inc.
                  801 Fifth Avenue
                  Seattle, WA 98104
          phone:  (206) 272-6500
          email:  support@f5.com"
    DESCRIPTION
        "Top-level infrastructure of the F5 enterprise Tenant MIB tree."

    REVISION      "202404220000Z"
    DESCRIPTION
             "Added generic tenant support."
    REVISION      "202402260000Z"
    DESCRIPTION
             "Added new tenantInstanceSlot field for tenantInstancesState."

    REVISION      "202402190000Z"
    DESCRIPTION
            "Changed tenantUpgradeEventStatus type to string(length 1024),
             added new tenantImageVersion field and
             removed extra fields tenantDeploymentSpecification 
             and tenantReservedCPUs."

    ::= { platform 5 }

--================================================================
f5TenantStatsObjects           OBJECT IDENTIFIER ::= { f5TenantStats 1 }
tenantState                    OBJECT IDENTIFIER ::= { f5TenantStatsObjects 1 }
tenantVirtualWires             OBJECT IDENTIFIER ::= { f5TenantStatsObjects 2 }
tenantVlans                    OBJECT IDENTIFIER ::= { f5TenantStatsObjects 3 }
tenantNodes                    OBJECT IDENTIFIER ::= { f5TenantStatsObjects 4 }
tenantCPUAllocationsState      OBJECT IDENTIFIER ::= { f5TenantStatsObjects 5 }
tenantFeatureFlagsState        OBJECT IDENTIFIER ::= { f5TenantStatsObjects 6 }
tenantInstancesState           OBJECT IDENTIFIER ::= { f5TenantStatsObjects 7 }
tenantMacBlockState            OBJECT IDENTIFIER ::= { f5TenantStatsObjects 8 }
tenantSubModulesState          OBJECT IDENTIFIER ::= { f5TenantStatsObjects 9 }
tenantSubModuleVlansState      OBJECT IDENTIFIER ::= { f5TenantStatsObjects 10 }
tenantSubModuleHugepagesState  OBJECT IDENTIFIER ::= { f5TenantStatsObjects 11 }
tenantUpgradeEventsState       OBJECT IDENTIFIER ::= { f5TenantStatsObjects 12 }

--
-- Textual Conventions
--
TenantIndex ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "1t"
    STATUS       current
    DESCRIPTION
            "A unique name, not null, for each tenant component
            in the managed system."
    SYNTAX       OCTET STRING(SIZE(1..255))

String ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "1t"
    STATUS       current
    DESCRIPTION  "Textual-convention for DisplayString"
    SYNTAX       DisplayString(SIZE(1..1023))
--
-- tenant state table
--
tenantStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant state data."
    ::= { tenantState 1 }

tenantStateEntry OBJECT-TYPE
    SYNTAX       TenantStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant state data."
    INDEX   { tenantName }
    ::= { tenantStateTable 1 }

TenantStateEntry ::=
    SEQUENCE {
        tenantName                    TenantIndex,
        tenantType                    INTEGER,
        tenantImage                   DisplayString,
        tenantDeploymentFile          DisplayString,
        tenantMgmtIP                  IpAddress,
        tenantPrefixLength            Integer32,
        tenantDagIPv6PrefixLength     Integer32,
        tenantGateway                 IpAddress,
        tenantCryptos                 INTEGER,
        tenantVcpuCoresPerNode        Counter32,
        tenantMemory                  Counter32,
        tenantStorageSize             Counter32,
        tenantRunningState            INTEGER,
        tenantMacDataSize             Counter32,
        tenantApplianceMode           INTEGER,
        tenantUnitKeyHash             DisplayString,
        tenantFloatingAddress         IpAddress,
        tenantHAState                 INTEGER,
        tenantNameSpace               DisplayString,
        tenantPrimarySlot             Integer32,
        tenantQatVFCount              Integer32,
        tenantImageVersion            DisplayString,
        tenantStatus                  DisplayString,
        tenantTargetDeploymentFile    DisplayString,
        tenantTargetImage             DisplayString,
        tenantUpgradeStatus           INTEGER,
        tenantBaseMac                 PhysAddress,
        tenantMgmtMac                 PhysAddress
    }

tenantName OBJECT-TYPE
    SYNTAX         TenantIndex
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Primary index of Tenant Configuration Table"
    ::= { tenantStateEntry 1 }

tenantType OBJECT-TYPE
    SYNTAX         INTEGER { bigip(0), bigipnext(1), generic(2) }
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Tenant type"
    ::= { tenantStateEntry 2 }

tenantImage OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified image for tenant"
    ::= { tenantStateEntry 3 }

tenantDeploymentFile OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified deployment specification for the tenant"
    ::= { tenantStateEntry 4 }

tenantMgmtIP OBJECT-TYPE
    SYNTAX         IpAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified mgmt-ip for the tenant management access"
    ::= { tenantStateEntry 5 }

tenantPrefixLength OBJECT-TYPE
    SYNTAX         Integer32 (0..32)
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified prefix-length for the tenant mgmt-ip"
    ::= { tenantStateEntry 6 }

tenantDagIPv6PrefixLength OBJECT-TYPE
    SYNTAX         Integer32 (0..128)
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Tenant default value of IPv6 networking mask used by disaggregator algorithms"
    ::= { tenantStateEntry 7 }

tenantGateway OBJECT-TYPE
    SYNTAX         IpAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified gateway for the tenant mgmt-ip"
    ::= { tenantStateEntry 8 }

tenantCryptos OBJECT-TYPE
    SYNTAX         INTEGER { disabled(0), enabled(1) }
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Enable crypto devices for the tenant"
    ::= { tenantStateEntry 9 }

tenantVcpuCoresPerNode OBJECT-TYPE
    SYNTAX         Counter32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified number of logical cpu cores for the tenant"
    ::= { tenantStateEntry 10 }

tenantMemory OBJECT-TYPE
    SYNTAX         Counter32
    UNITS          "MB"
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified memory in MBs for the tenant"
    ::= { tenantStateEntry 11 }

tenantStorageSize OBJECT-TYPE
    SYNTAX         Counter32
    UNITS          "GB"
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified storage information"
    ::= { tenantStateEntry 12 }

tenantRunningState OBJECT-TYPE
    SYNTAX         INTEGER { configured(0), provisioned(1), deployed(2) } 
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified desired state for the tenant"
    ::= { tenantStateEntry 13 }

tenantMacDataSize OBJECT-TYPE
    SYNTAX         Counter32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Configuration data for MAC block size per tenant"
    ::= { tenantStateEntry 14 }

tenantApplianceMode OBJECT-TYPE
    SYNTAX         INTEGER { disabled(0), enabled(1) }
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Appliance mode can be enabled/disabled at tenant level"
    ::= { tenantStateEntry 15 }

tenantUnitKeyHash OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "The sha512 hash of the unit key assigned to the tenant"
    ::= { tenantStateEntry 16 }

tenantFloatingAddress OBJECT-TYPE
    SYNTAX         IpAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Tenant HA floating management IP"
    ::= { tenantStateEntry 17 }

tenantHAState OBJECT-TYPE
    SYNTAX         INTEGER { unknown(0), standalone(1), active(2), standby(3) }
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "HA state reported by the tenant"
    ::= { tenantStateEntry 18 }

tenantNameSpace OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Tenant namespace"
    ::= { tenantStateEntry 19 }

tenantPrimarySlot OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Indicates which slot is the primary if this is a multi-blade tenant"
    ::= { tenantStateEntry 20 }

tenantQatVFCount OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Populate qat vf count based on number of logical cpu cores for the tenant"
    ::= { tenantStateEntry 21 }

tenantImageVersion OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Image version of tenant"
    ::= { tenantStateEntry 22 }

tenantStatus OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide status of the tenant"
    ::= { tenantStateEntry 23 }

tenantTargetDeploymentFile OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Target deployment file for the tenant"
    ::= { tenantStateEntry 24 }

tenantTargetImage OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Target deployment specification for the tenant"
    ::= { tenantStateEntry 25 }

tenantUpgradeStatus OBJECT-TYPE
    SYNTAX         INTEGER { notstarted(0), inprogress(1), success(2), failed(3) }
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Upgrade status of tenant"
    ::= { tenantStateEntry 26 }

tenantBaseMac OBJECT-TYPE
    SYNTAX         PhysAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's base MAC"
    ::= { tenantStateEntry 27 }

tenantMgmtMac OBJECT-TYPE
    SYNTAX         PhysAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's mgmt MAC"
    ::= { tenantStateEntry 28 }

--
-- tenant virtual wires table
--
tenantVirtualWiresTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantVirtualWiresEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant virtual wires configuration."
    ::= { tenantVirtualWires 1 }

tenantVirtualWiresEntry OBJECT-TYPE
    SYNTAX       TenantVirtualWiresEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant virtual wires configuration."
    INDEX   { tenantName, tenantVirtualWire }
    ::= { tenantVirtualWiresTable 1 }

TenantVirtualWiresEntry ::=
    SEQUENCE {
        tenantVirtualWire       DisplayString
    }

tenantVirtualWire OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified virtual-wire for the tenant"
    ::= { tenantVirtualWiresEntry 2 }

--
-- tenant vlans table
--
tenantVlansTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantVlansEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant vlan configuration."
    ::= { tenantVlans 1 }

tenantVlansEntry OBJECT-TYPE
    SYNTAX       TenantVlansEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant vlan configuration."
    INDEX   { tenantName, tenantVlan }
    ::= { tenantVlansTable 1 }

TenantVlansEntry ::=
    SEQUENCE {
        tenantVlan        Counter32
    }

tenantVlan OBJECT-TYPE
    SYNTAX         Counter32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified vlan-id from vlan table for the tenant"
    ::= { tenantVlansEntry 2 }

--
-- tenant nodes table
--              
tenantNodesTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantNodesEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant node configuration."
    ::= { tenantNodes 1 }

tenantNodesEntry OBJECT-TYPE
    SYNTAX       TenantNodesEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant node configuration."
    INDEX   { tenantName, tenantNode }
    ::= { tenantNodesTable 1 }

TenantNodesEntry ::=
    SEQUENCE {
        tenantNode        Integer32
    }

tenantNode OBJECT-TYPE
    SYNTAX         Integer32 (1..32)
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "User-specified node-number(s) in the partition to schedule the tenant"
    ::= { tenantNodesEntry 2 }

--
-- tenant cpu allocation table
--
tenantCPUAllocationsStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantCPUAllocationsStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant CPU allocations"
    ::= { tenantCPUAllocationsState 1 }

tenantCPUAllocationsStateEntry OBJECT-TYPE
    SYNTAX       TenantCPUAllocationsStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant CPU allocations"
    INDEX   { tenantName, tenantNode, tenantCPU }
    ::= { tenantCPUAllocationsStateTable 1 }

TenantCPUAllocationsStateEntry ::=
    SEQUENCE {
        tenantCPU        Integer32
    }

tenantCPU OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Allocated CPU for specific node"
    ::= { tenantCPUAllocationsStateEntry 3 }

--
-- tenant feature flags table
--
tenantFeatureFlagsStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantFeatureFlagsStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Flags describing various features the tenant uses or supports"
    ::= { tenantFeatureFlagsState 1 }

tenantFeatureFlagsStateEntry OBJECT-TYPE
    SYNTAX       TenantFeatureFlagsStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Flags describing various features the tenant uses or supports"
    INDEX   { tenantName }
    ::= { tenantFeatureFlagsStateTable 1 }

TenantFeatureFlagsStateEntry ::=
    SEQUENCE {
        tenantClusteringAsServiceFlag     TruthValue,
        tenantStatsStreamCapableFlag      TruthValue
    }

tenantClusteringAsServiceFlag OBJECT-TYPE
    SYNTAX         TruthValue
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Clustering as a partition service on/off"
    ::= { tenantFeatureFlagsStateEntry 2 }

tenantStatsStreamCapableFlag OBJECT-TYPE
    SYNTAX         TruthValue
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Tenant is capable to stream stats"
    ::= { tenantFeatureFlagsStateEntry 3 }

--
-- tenant instances table
--
tenantInstancesStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantInstancesStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "List the tenant instance(s)"
    ::= { tenantInstancesState 1 }

tenantInstancesStateEntry OBJECT-TYPE
    SYNTAX       TenantInstancesStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "List the tenant instance(s)"
    INDEX   { tenantName, tenantNode, tenantPodName }
    ::= { tenantInstancesStateTable 1 }

TenantInstancesStateEntry ::=
    SEQUENCE {
        tenantPodName               DisplayString,
        tenantInstanceId            Integer32,
        tenantInstanceSlot          Integer32,
        tenantInstancePhase         DisplayString,
        tenantInstanceCreationTime  DisplayString,
        tenantInstanceReadyTime     DisplayString,
        tenantInstanceStatus        DisplayString,
        tenantInstanceMgmtMac       PhysAddress
    }

tenantPodName OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's pod name"
    ::= { tenantInstancesStateEntry 3 }

tenantInstanceId OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's instance id"
    ::= { tenantInstancesStateEntry 4 }

tenantInstanceSlot OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's slot id"
    ::= { tenantInstancesStateEntry 5 }

tenantInstancePhase OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's instance phase"
    ::= { tenantInstancesStateEntry 6 }

tenantInstanceCreationTime OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's instance creation time"
    ::= { tenantInstancesStateEntry 7 }

tenantInstanceReadyTime OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's instance ready time"
    ::= { tenantInstancesStateEntry 8 }

tenantInstanceStatus OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's instance status"
    ::= { tenantInstancesStateEntry 9 }

tenantInstanceMgmtMac OBJECT-TYPE
    SYNTAX         PhysAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Provide tenant's mgmt MAC"
    ::= { tenantInstancesStateEntry 10 }

--
-- tenant MAC table
--
tenantMacBlockStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantMacBlockStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant MAC"
    ::= { tenantMacBlockState 1 }

tenantMacBlockStateEntry OBJECT-TYPE
    SYNTAX       TenantMacBlockStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant MAC"
    INDEX   { tenantName, tenantMAC }
    ::= { tenantMacBlockStateTable 1 }

TenantMacBlockStateEntry ::=
    SEQUENCE {
        tenantMAC         DisplayString
    }

tenantMAC OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "MAC address per tenant"
    ::= { tenantMacBlockStateEntry 2 }

--
-- tenant sub modules table
--
tenantSubModulesStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantSubModulesStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant sub modules"
    ::= { tenantSubModulesState 1 }

tenantSubModulesStateEntry OBJECT-TYPE
    SYNTAX       TenantSubModulesStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant sub modules"
    INDEX   { tenantName, tenantSubModuleId }
    ::= { tenantSubModulesStateTable 1 }

TenantSubModulesStateEntry ::=
    SEQUENCE {
        tenantSubModuleId                Integer32,
        tenantSubModuleMAC               PhysAddress,
        tenantSubModuleDefaultServiceId  Integer32,
        tenantSubModuleName              DisplayString,
        tenantSubModuleIpAddr            IpAddress,
        tenantSubModuleFloatingIpAddr    IpAddress,
        tenantSubModulePrefixLength      Integer32
    }

tenantSubModuleId OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Unique ID per sub-module of the tenant"
    ::= { tenantSubModulesStateEntry 2 }

tenantSubModuleMAC OBJECT-TYPE
    SYNTAX         PhysAddress
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Mac address allocated to the sub-module"
    ::= { tenantSubModulesStateEntry 3 }

tenantSubModuleDefaultServiceId OBJECT-TYPE
    SYNTAX         Integer32 
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Service ID allocated to the sub-module"
    ::= { tenantSubModulesStateEntry 4 }

tenantSubModuleName OBJECT-TYPE
    SYNTAX         DisplayString 
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Name of the sub-module"
    ::= { tenantSubModulesStateEntry 5 }

tenantSubModuleIpAddr OBJECT-TYPE
    SYNTAX         IpAddress 
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "IP Address for the sub-module"
    ::= { tenantSubModulesStateEntry 6 }

tenantSubModuleFloatingIpAddr OBJECT-TYPE
    SYNTAX         IpAddress 
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Floating IP Address for the sub-module"
    ::= { tenantSubModulesStateEntry 7 }

tenantSubModulePrefixLength OBJECT-TYPE
    SYNTAX         Integer32 (1..32) 
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Subnet prefix-length for the sub-module ipaddr"
    ::= { tenantSubModulesStateEntry 8 }

--
-- tenant sub module vlans table
--
tenantSubModuleVlansStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantSubModuleVlansStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant sub module vlans"
    ::= { tenantSubModuleVlansState 1 }

tenantSubModuleVlansStateEntry OBJECT-TYPE
    SYNTAX       TenantSubModuleVlansStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant sub module vlans"
    INDEX   { tenantName, tenantSubModuleId, tenantSubModuleVlan }
    ::= { tenantSubModuleVlansStateTable 1 }

TenantSubModuleVlansStateEntry ::=
    SEQUENCE {
        tenantSubModuleVlan        Integer32
    }

tenantSubModuleVlan OBJECT-TYPE
    SYNTAX         Integer32 (1..4096)
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "List of vlans set on the sub-module"
    ::= { tenantSubModuleVlansStateEntry 3 }

--
-- tenant sub module hugepage table
--
tenantSubModuleHugepagesStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantSubModuleHugepagesStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant sub module hugepages"
    ::= { tenantSubModuleHugepagesState 1 }

tenantSubModuleHugepagesStateEntry OBJECT-TYPE
    SYNTAX       TenantSubModuleHugepagesStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant sub module hugepages"
    INDEX   { tenantName, tenantSubModuleId, tenantSubModuleHugepageSlot }
    ::= { tenantSubModuleHugepagesStateTable 1 }

TenantSubModuleHugepagesStateEntry ::=
    SEQUENCE {
        tenantSubModuleHugepageSlot        Integer32,
        tenantSubModuleHugepagePath        DisplayString
    }

tenantSubModuleHugepageSlot OBJECT-TYPE
    SYNTAX         Integer32 (1..32)
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Slot id associated with hugepage path"
    ::= { tenantSubModuleHugepagesStateEntry 3 }

tenantSubModuleHugepagePath OBJECT-TYPE
    SYNTAX         DisplayString
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Hugepage path for the sub-module"
    ::= { tenantSubModuleHugepagesStateEntry 4 }

--
-- tenant upgrade events table
--
tenantUpgradeEventsStateTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF TenantUpgradeEventsStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant upgrade events"
    ::= { tenantUpgradeEventsState 1 }

tenantUpgradeEventsStateEntry OBJECT-TYPE
    SYNTAX       TenantUpgradeEventsStateEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Information about the tenant upgrade events"
    INDEX   { tenantName, tenantUpgradeEventIndex }
    ::= { tenantUpgradeEventsStateTable 1 }

TenantUpgradeEventsStateEntry ::=
    SEQUENCE {
        tenantUpgradeEventIndex        Integer32,
        tenantUpgradeEventStatus       String
    }

tenantUpgradeEventIndex OBJECT-TYPE
    SYNTAX         Integer32
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Arbitrary index for tenant upgrade event"
    ::= { tenantUpgradeEventsStateEntry 2 }

tenantUpgradeEventStatus OBJECT-TYPE
    SYNTAX         String
    MAX-ACCESS     read-only
    STATUS         current
    DESCRIPTION    "Tenant upgrade status"
    ::= { tenantUpgradeEventsStateEntry 3 }

--
-- Platform Groups
--
platformConformance OBJECT IDENTIFIER ::= { f5TenantStats 2 }

platformGroups      OBJECT IDENTIFIER ::= { platformConformance 1 }
platformCompliances OBJECT IDENTIFIER ::= { platformConformance 2 }

platformCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for SNMP entities which have
            tenant statistics."

    MODULE
        MANDATORY-GROUPS { tenantStateGroup, tenantVirtualWiresGroup, tenantVlansGroup, tenantNodesGroup,
                           tenantCPUAllocationsStateGroup, tenantFeatureFlagsStateGroup,
                           tenantInstancesStateGroup, tenantMacBlockStateGroup,
                           tenantSubModulesStateGroup, tenantSubModuleVlansStateGroup,
                           tenantSubModuleHugepagesStateGroup }
::= { platformCompliances 1 }

tenantStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantType,
              tenantImage,
              tenantDeploymentFile,
              tenantMgmtIP,
              tenantPrefixLength,
              tenantDagIPv6PrefixLength, 
              tenantGateway,
              tenantCryptos,
              tenantVcpuCoresPerNode,
              tenantMemory,
              tenantStorageSize,
              tenantRunningState,
              tenantMacDataSize, 
              tenantApplianceMode,
              tenantUnitKeyHash,
              tenantFloatingAddress,
              tenantHAState,
              tenantNameSpace,
              tenantPrimarySlot,
              tenantQatVFCount,
              tenantImageVersion,
              tenantStatus,
              tenantTargetDeploymentFile,
              tenantTargetImage,
              tenantUpgradeStatus,
              tenantBaseMac,
              tenantMgmtMac
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant's state data."
    ::= { platformGroups 1 }

tenantVirtualWiresGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantVirtualWire
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant virtual wires configurations."
    ::= { platformGroups 2 }

tenantVlansGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantVlan
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant vlan configurations."
    ::= { platformGroups 3 }

tenantNodesGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantNode
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant node configurations."
    ::= { platformGroups 4 }

tenantCPUAllocationsStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantNode,
              tenantCPU
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant node CPU allocations."
    ::= { platformGroups 5 }

tenantFeatureFlagsStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantClusteringAsServiceFlag,
              tenantStatsStreamCapableFlag
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant feature flags."
    ::= { platformGroups 6 }

tenantInstancesStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantNode,
              tenantPodName,
              tenantInstanceId,
              tenantInstanceSlot,
              tenantInstancePhase,
              tenantInstanceCreationTime,
              tenantInstanceReadyTime,
              tenantInstanceStatus,
              tenantInstanceMgmtMac
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant instances."
    ::= { platformGroups 7 }

tenantMacBlockStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantMAC
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant MAC address pool."
    ::= { platformGroups 8 }

tenantSubModulesStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantSubModuleId,
              tenantSubModuleMAC,
              tenantSubModuleDefaultServiceId,
              tenantSubModuleName,
              tenantSubModuleIpAddr,
              tenantSubModuleFloatingIpAddr,
              tenantSubModulePrefixLength
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant sub-modules."
    ::= { platformGroups 9 }

tenantSubModuleVlansStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantSubModuleId,
              tenantSubModuleVlan
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant sub-module vlans."
    ::= { platformGroups 10 }

tenantSubModuleHugepagesStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantSubModuleId,
              tenantSubModuleHugepageSlot,
              tenantSubModuleHugepagePath
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant sub-module hugepages."
    ::= { platformGroups 11 }

tenantUpgradeEventsStateGroup    OBJECT-GROUP
    OBJECTS { tenantName,
              tenantUpgradeEventIndex,
              tenantUpgradeEventStatus
            }
    STATUS  current
    DESCRIPTION
            "A collection of objects providing information about tenant upgrade events."
    ::= { platformGroups 12 }

END
