--*******************************************************
--Nokia IPSO Load Balancing Cluster MIB
--May 14 2001, Kripa Karlekar
--
--*******************************************************

NOKIA-IPSO-LBCLUSTER-MIB DEFINITIONS ::= BEGIN
IMPORTS
  IpAddress, OBJECT-TYPE FROM RFC1155-SMI
  ipsoProducts FROM NOKIA-IPSO-REGISTRATION-MIB
  NOTIFICATION-TYPE, MODULE-IDENTITY
    FROM SNMPv2-SMI
  MacAddress, TimeStamp
    FROM SNMPv2-TC
	 InterfaceIndex FROM IF-MIB;

ipsoLBClusterMIB MODULE-IDENTITY
  LAST-UPDATED "0105140000Z"
  ORGANIZATION "Nokia IPRG"
  CONTACT-INFO
       " Nokia IPRG
         Customer Service"

  DESCRIPTION
  "The MIB Module for the management of Load Balancing IPSO systems.
   A load balancing IPSO cluster comprises a number of nodes with
   a single master node and multiple member nodes.
   A master or member can be a part of single cluster or multiple 
   clusters. 

   The master is responsible for calculating the worksets and assigning
   it to all the members and to itself.

   The information provided by this MIB implementation will vary depending
   on if this node is a master or member."
   
   REVISION "0105140000Z"
   DESCRIPTION "Initial Version of the MIB -- Kripa Karlekar"
   ::= { ipsoProducts 5 }

-- MIB Contains 5 tables

ipsoLBClusterInfo    OBJECT IDENTIFIER ::= { ipsoLBClusterMIB 1}
ipsoLBClusterNodeSpecificInfo OBJECT IDENTIFIER ::= { ipsoLBClusterMIB 2}
ipsoLBClusterNotificationGroup OBJECT IDENTIFIER ::= { ipsoLBClusterMIB 3}

ipsoLBNumClusters OBJECT-TYPE
  SYNTAX 	INTEGER
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "Number of clusters in which this node is either a master
		 or a member"
  ::= {ipsoLBClusterInfo 1}

ipsoLBClusterInfoTable OBJECT-TYPE
  SYNTAX  	SEQUENCE OF IpsoLBClusterInfoEntry
  MAX-ACCESS  	not-accessible
  STATUS	current
  DESCRIPTION  	"This table contains a row for each cluster to which
		 this system belongs."
  INDEX {ClusterIndex }
  ::= {ipsoLBClusterInfo 2}

ipsoLBClusterInfoEntry  OBJECT-TYPE
  SYNTAX 	IpsoLBClusterInfoEntry
  MAX-ACCESS 	not-accessible
  STATUS	current
  DESCRIPTION	"An entry containing cluster management information for
		 each cluster this system belongs."
  ::= {ipsoLBClusterInfoTable 1}

IpsoLBClusterInfoEntry ::= 
  SEQUENCE {
     clusterIndex INTEGER,
     clusterID	INTEGER,
     clusterNumMembers INTEGER,
     clusterNumInterfaces INTEGER,
     clusterUpTimeAtJoin TimeStamp,
     systemUpTimeAtJoin TimeStamp,
     clusterTotalBuckets INTEGER,
     clusterBucketsAssigned INTEGER
  }

clusterIndex OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The Cluster Index"
  ::= { ipsoLBClusterInfoEntry 1}

clusterID OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The Identity for the cluster"
  ::= { ipsoLBClusterInfoEntry 2}

clusterNumMembers OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "Number of members for this cluster"
  ::= { ipsoLBClusterInfoEntry 3}

clusterNumInterfaces OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "Number of interfaces participating in this cluster"
  ::= { ipsoLBClusterInfoEntry 4}

clusterUpTimeAtJoin OBJECT-TYPE
  SYNTAX	TimeStamp
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "Time since the cluster started when this member joined the cluster"
  ::= { ipsoLBClusterInfoEntry 5}

systemUpTimeAtJoin OBJECT-TYPE
  SYNTAX	TimeStamp
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "The system up time when this member joined the cluster"
  ::= { ipsoLBClusterInfoEntry 6}

clusterTotalBuckets OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "Overall number of buckets that will be distributed among
		 cluster members for this cluster"
  ::= { ipsoLBClusterInfoEntry 7}

clusterBucketsAssigned OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS	read-only
  STATUS        current
  DESCRIPTION   "Total number of buckets assigned to each individual
		 cluster members on this cluster"
  ::= { ipsoLBClusterInfoEntry 8}

ipsoLBClusterAddressTable OBJECT-TYPE
  SYNTAX  	SEQUENCE OF IpsoLBClusterAddressEntry
  MAX-ACCESS  	not-accessible
  STATUS	current
  DESCRIPTION  	"This table contains a row for each cluster to which
		 this system belongs. This table provides cluster 
		 interface address for this cluster."
  INDEX {ClusterIndex, ClusterAddress}
  ::= {ipsoLBClusterInfo 3}

ipsoLBClusterAddressEntry  OBJECT-TYPE
  SYNTAX 	IpsoLBClusterAddressEntry
  MAX-ACCESS 	not-accessible
  STATUS	current
  DESCRIPTION	"An entry containing cluster interface address 
		 information of each cluster this node is participating."
  ::= {ipsoLBClusterAddressTable 1}

IpsoLBClusterAddressEntry ::= 
  SEQUENCE {
     clusterIndex	INTEGER,
     clusterAddress     IpAddress,
     clusterMACAddress  MacAddress
  }

clusterIndex2 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The cluster index"
  ::= { ipsoLBClusterAddressEntry 1}

clusterAddress OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The cluster interface address" 
  ::= { ipsoLBClusterAddressEntry 2}

clusterMACAddress OBJECT-TYPE
  SYNTAX	MacAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The cluster MAC Address"
  ::= { ipsoLBClusterAddressEntry 3}

ipsoLBClusterMemberTable OBJECT-TYPE
  SYNTAX  	SEQUENCE OF IpsoLBClusterMemberEntry
  MAX-ACCESS  	not-accessible
  STATUS	current
  DESCRIPTION  	"This table has information about all the members 
                 in each cluster this node participates. The information
		 in this table varies depending on if this mode is a member
		 or master in each cluster. If this node is a master in a
		 cluster it furnishes more information"
  INDEX { ClusterIndex, MemberID}
  ::= {ipsoLBClusterInfo 4}

ipsoLBClusterMemberEntry  OBJECT-TYPE
  SYNTAX 	IpsoLBClusterMemberEntry
  MAX-ACCESS 	not-accessible
  STATUS	current
  DESCRIPTION	"An entry containing member information."
  ::= {ipsoLBClusterMemberTable 1}

IpsoLBClusterMemberEntry ::= 
  SEQUENCE {
     clusterIndex	INTEGER,
     memberID	INTEGER,
     memberPercentageBucketsAssigned     INTEGER,
     memberRating 	OCTET STRING,
     memberPrimaryAddress    IpAddress
  }

clusterIndex3 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The index of the cluster"
  ::= { ipsoLBClusterMemberEntry 1}

memberID OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The member id in the cluster"
  ::= { ipsoLBClusterMemberEntry 2}

memberPercentageBucketsAssigned OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "A percentage of how many buckets this member is processing
	         for each cluster"
  ::= { ipsoLBClusterMemberEntry 3}

memberRating OBJECT-TYPE
  SYNTAX       OCTET STRING
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The Rating of this member for this cluster, only available on Master."
  ::= { ipsoLBClusterMemberEntry 4}

memberPrimaryAddress OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Members's primary interface address"
  ::= { ipsoLBClusterMemberEntry 5}


ipsoLBClusterNodeSpecificTable OBJECT-TYPE
  SYNTAX  	SEQUENCE OF IpsoLBClusterNodeSpecificEntry
  MAX-ACCESS  	not-accessible
  STATUS	current
  DESCRIPTION  	"This table contains a row for each cluster to which
		 this system belongs. This table provides specific 
		 cluster related information about this node"
  INDEX { ClusterIndex }
  ::= {ipsoLBClusterNodeSpecificInfo 1}

ipsoLBClusterNodeSpecificEntry  OBJECT-TYPE
  SYNTAX 	IpsoLBClusterNodeSpecificEntry
  MAX-ACCESS 	not-accessible
  STATUS	current
  DESCRIPTION	"An entry containing management information for
		 this node in each cluster."
  ::= {ipsoLBClusterNodeSpecificTable 1}

IpsoLBClusterNodeSpecificEntry ::= 
  SEQUENCE {
     clusterIndex	INTEGER,
     memberID		INTEGER,
     percentageBucketsAssigned    INTEGER,
     memberMode 	INTEGER,
     memberRating   INTEGER,
     memberPrimaryAddress IpAddress
  }

clusterIndex4 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The cluster index for which this node is a member"
  ::= { ipsoLBClusterNodeSpecificEntry 1}

memberID2 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "This member's id in the cluster"
  ::= { ipsoLBClusterNodeSpecificEntry 2}

percentageBucketsAssigned OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Percentage of buckets assigned to this member in this cluster"
  ::= { ipsoLBClusterNodeSpecificEntry 3}

memberMode OBJECT-TYPE
  SYNTAX	INTEGER {
		  uninitialized(1),
		  initialized(2),
		  joining(3),
		  becomingmaster(4),
		  master(5),
	      member(6),
		  unknown(7)
		}
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The member's mode in this cluster"
  ::= { ipsoLBClusterNodeSpecificEntry 4}
 
memberRating2 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Member's rating in this cluster"
  ::= { ipsoLBClusterNodeSpecificEntry 5}

memberPrimaryAddress2 OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Members's primary interface address"
  ::= { ipsoLBClusterNodeSpecificEntry 6}


ipsoLBClusterNodeSpecificInterfaceTable OBJECT-TYPE
  SYNTAX  	SEQUENCE OF IpsoLBClusterNodeSpecificInterfaceEntry
  MAX-ACCESS  	not-accessible
  STATUS	current
  DESCRIPTION  	"This table contains information about each interface
		 that participates in the cluster.
		 The interfaces in this node can be a part of multiple
		 cluster in which case there will be a row for each
		 interface in each cluster."
  INDEX { ClusterIndex, ifIndex}
  ::= {ipsoLBClusterNodeSpecificInfo 2}

ipsoLBClusterNodeSpecificInterfaceEntry  OBJECT-TYPE
  SYNTAX 	IpsoLBClusterNodeSpecificInterfaceEntry
  MAX-ACCESS 	not-accessible
  STATUS	current
  DESCRIPTION	"An entry containing management information for
		 each interface in this member for each cluster."
  ::= {ipsoLBClusterNodeSpecificInterfaceTable 1}

IpsoLBClusterNodeSpecificInterfaceEntry ::= 
  SEQUENCE {
     clusterIndex	INTEGER,
     memberID 		INTEGER,
     ifIndex     	InterfaceIndex,
     clusterIPAddress   IpAddress,
     clusterNetMask     IpAddress,
     clusterBroadcastAddress   IpAddress,
     realIPAddress      IpAddress,
     masterIPAddress	IpAddress
  }

clusterIndex5 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The cluster index for which this node is a member"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 1}

memberID3 OBJECT-TYPE
  SYNTAX	INTEGER
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "This member's ID"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 2}

ifIndex OBJECT-TYPE
  SYNTAX	InterfaceIndex
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The interface index in the interface table"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 3}

clusterIPAddress OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Cluster's IP address for this interface"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 4}

clusterNetMask OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Cluster Netmask "
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 5}

clusterBroadcastAddress OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The Broadcast address"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 6}

realIPAddress OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The real IP Address of the interface, if there
		 are multiple IP address then this will the first
		 IP address configured"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 7}

masterIPAddress OBJECT-TYPE
  SYNTAX	IpAddress
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "Master's IP address assosiated with this interface"
  ::= { ipsoLBClusterNodeSpecificInterfaceEntry 8}

-- Following are the cluster related notifcation traps

ipsoLBMemberJoinRejectReason OBJECT-TYPE
  SYNTAX INTEGER {
	fewinterface (1),
	illegallicence(2)
  }
  MAX-ACCESS accessible-for-notify
  STATUS	current
  DESCRIPTION
	"Reason why a node was rejected from joining a cluster."
  ::= { ipsoLBClusterNotificationGroup 0 }

ipsoLBClusterNewMasterReason OBJECT-TYPE
  SYNTAX INTEGER {
	oldMasterHelloTimeout (1),
	iamBetterMaster(2),
	initalizedAsMaster(3),
	unknown(4)
  }
  MAX-ACCESS accessible-for-notify
  STATUS	current
  DESCRIPTION
	"Potential reason why this node became a master."
  ::= { ipsoLBClusterNotificationGroup 1 }

ipsoLBClusterMemberJoin NOTIFICATION-TYPE
  OBJECTS {clusterID, memberID, ipsoMemberIPAddress}
  STATUS  	current
  DESCRIPTION "This trap is sent when a member node joins the cluster by the master"
  ::= { ipsoLBClusterNotificationGroup 2 }

ipsoLBClusterMemberLeft NOTIFICATION-TYPE
  OBJECTS {clusterID, memberID, ipsoMemberIPAddress}
  STATUS  	current
  DESCRIPTION "This trap is sent when a member node leaves the cluster by the master."
  ::= { ipsoLBClusterNotificationGroup 3 }

ipsoLBClusterNewMaster NOTIFICATION-TYPE
  OBJECTS {clusterID, ipsoLBClusterNewMasterReason}
  STATUS   current
  DESCRIPTION "This trap is sent when a cluster is formed and a new master is elected."
  ::= { ipsoLBClusterNotificationGroup 4 }

ipsoLBJoinReject NOTIFICATION-TYPE
  OBJECTS {clusterID, ipsoMemberIPAddress, ipsoMemberRejectErcode, 
  ipsoMemberRejectWrongIntf, ipsoMemberRejectprimaryintf, ipsoMemberRejectCip,
  ipsoMemberRejectHash }
  STATUS  	current
  DESCRIPTION "This trap is sent when a member's request to join the cluster
  is rejected"
  ::= { ipsoLBClusterNotificationGroup 5 }

--ERROR REASONS

--ERROR CODE INTEGER
ipsoMemberRejectErcode OBJECT-TYPE
  SYNTAX INTEGER {
    internalerroronmaster (55),
    numberofmembersclustercansupportexceeded (22),
    nodeunreachableononeoftheselectedinterfaces (65),
    protocolversionmismatch (61),
    configurationmismatch (6)
  }
  MAX-ACCESS accessible-for-notify
  STATUS    current
  DESCRIPTION "Potential reason why this node is rejected."
::= { ipsoLBClusterNotificationGroup 6 }

-- ERROR REASON WRONG NO OF INTERFACES CHOSEN
ipsoMemberRejectWrongIntf OBJECT-TYPE
  SYNTAX       OCTET STRING
  MAX-ACCESS   accessible-for-notify
  STATUS       current
  DESCRIPTION  "Wrong number of Interfaces Selected."
::= { ipsoLBClusterNotificationGroup 7 }

-- ERROR REASON WRONG PRIMARY INTERFACE SELECTED
ipsoMemberRejectprimaryintf OBJECT-TYPE
  SYNTAX        OCTET STRING
  MAX-ACCESS    accessible-for-notify
  STATUS        current
  DESCRIPTION   "Primary addresses didn't match."
::= { ipsoLBClusterNotificationGroup 8 }

-- ERROR REASON WRONG CLUSTER IP ADDRESS ON MORE INTERFACES
ipsoMemberRejectCip OBJECT-TYPE
  SYNTAX        OCTET STRING
  MAX-ACCESS    accessible-for-notify
  STATUS        current
  DESCRIPTION   "Cluster IP address didn't match on one or more interfaces."
::= { ipsoLBClusterNotificationGroup 9 }

-- ERROR REASON WRONG HASH ON OR MORE INTERFACES
ipsoMemberRejectHash OBJECT-TYPE
  SYNTAX         OCTET STRING
  MAX-ACCESS     accessible-for-notify
  STATUS         current
  DESCRIPTION   "Hash Configuration did not match on one or more interfaces."
::= { ipsoLBClusterNotificationGroup 10 }

--IP ADDRESS OF THE MEMBER THAT IS REJECTED or that has JOINED or LEFT.
ipsoMemberIPAddress OBJECT-TYPE
  SYNTAX	    IpAddress
  MAX-ACCESS    accessible-for-notify
  STATUS        current
  DESCRIPTION   "IP address of a member."
::= { ipsoLBClusterNotificationGroup 11 }

END
