-- Linux-HA: SNMP Subagent
-- 
-- Copyright (C) 2002 Yixiong Zou (yixiong.zou@intel.com)
--
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation; either version 2
-- of the License, or (at your option) any later version.
-- 
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
-- 
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
--

LINUX-HA-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, enterprises,
    Counter32, INTEGER, Integer32, Unsigned32, IpAddress
	FROM SNMPv2-SMI

    TEXTUAL-CONVENTION, DisplayString, 
    TimeStamp, TruthValue, DateAndTime			    
	FROM SNMPv2-TC

    MODULE-COMPLIANCE, OBJECT-GROUP		    
	FROM SNMPv2-CONF;

LinuxHA	MODULE-IDENTITY
    LAST-UPDATED "200711260000Z"	-- Nov. 26, 2007
    ORGANIZATION "High-Availability Linux Project"
    CONTACT-INFO
	"Alan Robertson
	Postal:	Linux-HA Project
		13750 Bayberry Drive
		Broomfield, CO 80020-6163
	Phone:	303-466-7405
	FAX:	n/a
	Email:	alanr@unix.sh

	Yixiong Zou
	Postal: Intel Corp.  
		CO5-162
		15400 NW Greenbrier Parkway
		Beaverton, OR 97006
		USA
	Phone:	503-677-4988
	Fax:	503-677-6670
	Email:	yixiong.zou@intel.com

	In addition, the Linux-HA mailing list is where all the 
	discussion about this MIB happens. To join the mailing list, 
	send a request message to linux-ha-subscribe@muc.de.  
	The mailing list address is
	linux-ha-dev@lists.community.tummy.com."
    DESCRIPTION
	"This MIB can be used to manage a Linux-HA cluster. The
	initial plan is to make the heartbeat, resource managment,
	and memberships accessible through SNMP. Hopefully more
	things can be added as Linux-HA matures."

    REVISION "200711260000Z"	-- Nov. 26, 2007
    DESCRIPTION
	"The original version of this MIB."
    ::= { enterprises 4682 }

-- Current LinuxHA core MIB entries
--  LHAClusterInfo 	      OBJECT IDENTIFIER ::= { LinuxHA 1 }
--  LHANodeTable	      OBJECT IDENTIFIER ::= { LinuxHA 2 }
--  LHAIFStatusTable	      OBJECT IDENTIFIER ::= { LinuxHA 3 }
--  LHAResourceGroupTable     OBJECT IDENTIFIER ::= { LinuxHA 4 }
--  LHAMembershipTable	      OBJECT IDENTIFIER ::= { LinuxHA 6 }
--  LHAHeartbeatConfigInfo    OBJECT IDENTIFIER ::= { LinuxHA 7 }
--  LHAResourceTable          OBJECT IDENTIFIER ::= { LinuxHA 8 }
--  LHATrapTable	      OBJECT IDENTIFIER ::= { LinuxHA 900 }

LHAUUIDString ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "4x-2x-2x-2x-4x2x"
    STATUS       current
    DESCRIPTION
    	"A string that represents a UUID"
    SYNTAX       OCTET STRING (SIZE (16))

LHAClusterInfo		OBJECT IDENTIFIER ::= { LinuxHA 1 }

LHATotalNodeCount OBJECT-TYPE
    SYNTAX	Counter32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The number of nodes that are currently configured for this
	cluster."
    ::= { LHAClusterInfo 1 }

LHALiveNodeCount OBJECT-TYPE
    SYNTAX	Counter32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The number of nodes that are currently active in this
	cluster."
    ::= { LHAClusterInfo 2 }

LHACurrentNodeID OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The nodes id of the host that this agent currently
	represents.  This value is the same as the LHANodeIndex value
	of this node."
    ::= { LHAClusterInfo 3 }

LHAResourceGroupCount OBJECT-TYPE
    SYNTAX	Counter32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The total number of Resource Groups that have been
	configured for this cluster."
    ::= { LHAClusterInfo 4 }

LHANodeTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF lhaNodeEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table contains information about all the nodes in the
	cluster."
    ::= { LinuxHA 2 }

LHANodeEntry OBJECT-TYPE
    SYNTAX	lhaNodeEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION	
	"An entry containing a node and its statistics."
    INDEX	{ LHANodeIndex }
    ::= { LHANodeTable 1 }

lhaNodeEntry ::= SEQUENCE {
    LHANodeIndex	    Integer32,
    LHANodeName	    	    DisplayString,
    LHANodeType		    INTEGER,
    LHANodeStatus           INTEGER,
    LHANodeUUID		    DisplayString,
    LHANodeIFCount	    Counter32,
}

LHANodeIndex OBJECT-TYPE    
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An integer that identifies a node in a cluster for a given
	snmp session."
    ::= { LHANodeEntry 1 }

LHANodeName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"A human readable name that represents that node."
    ::= { LHANodeEntry 2 }

LHANodeType OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    unknown (0),
		    normal (1),
		    ping (2)
	    	}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"There could be many types of nodes in the cluster.  For
	example, a node could be a normal node, or a ping node
	depending on the configuration.  This object shows the
	type of this node as an integer.  
	
	So far only the normal node and ping node are defined.  All
	the rest will fall into the 'unknown' catagory. "
    ::= { LHANodeEntry 3 }

LHANodeStatus OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    unknown (0),
		    init (1),
		    up (2),
		    active (3), 
		    dead (4)
	    	}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The status of the node as an integer. For heartbeat, this
	would normally be init, up, active, or dead.

	So far, only these four states are defined.  All the rest
	falls in 'unknown' catagory."
    ::= { LHANodeEntry 4 }

LHANodeUUID OBJECT-TYPE
    SYNTAX	LHAUUIDString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The UUID of the current node in string representatio.  This
	UUID will be persisted over the heartbeat session.  So it can
	be used as a unique identifier for a node."
    ::= { LHANodeEntry 5 }

LHANodeIFCount OBJECT-TYPE
    SYNTAX	Counter32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The number of interfaces that is used by heartbeat
	for this node."
    ::= { LHANodeEntry 6 }

LHAIFStatusTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF lhaIFEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table describes all the interfaces that are used by the
	heartbeat cluster."
    ::= { LinuxHA 3 }

LHAIFStatusEntry OBJECT-TYPE
    SYNTAX	lhaIFStatusEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An entry containing information about that interface.
	The LHANodeIndex is listed in the LHANodeTable."
    INDEX	{ LHANodeIndex, LHAIFIndex }
    ::= { LHAIFStatusTable 1 }

lhaIFStatusEntry ::= SEQUENCE {
    LHAIFIndex	    	Integer32,
    LHAIFName	    	DisplayString,
    LHAIFStatus		INTEGER
}

LHAIFIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An unique integer identifies this interface."
    ::= { LHAIFStatusEntry 1 }

LHAIFName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"A name for this interface."
    ::= { LHAIFStatusEntry 2 }

LHAIFStatus OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    unknown (0),
		    up (1),
		    down (2)
    		}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The status for this interface as an integer. 
	
	Currently only up and down are defined as the interface
	status.  All the others will fall into the unknown catagory."
    ::= { LHAIFStatusEntry 3 }


LHAResourceGroupTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF lhaResourceGroupEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table containing information of all the resource groups."
    ::= { LinuxHA 4 }

LHAResourceGroupEntry OBJECT-TYPE
    SYNTAX	lhaResourceGroupEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An entry that describes the resource group and its
	information."
    INDEX	{ LHAResourceGroupIndex }
    ::= { LHAResourceGroupTable 1 }

lhaResourceGroupEntry ::= SEQUENCE	{
    LHAResourceGroupIndex	Integer32,
    LHAResourceGroupMaster	DisplayString,
    LHAResourceGroupResources   DisplayString,
    LHAResourceGroupStatus	Integer32
}

LHAResourceGroupIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A unique integer that identifies this resource group."
    ::= { LHAResourceGroupEntry 1 }

LHAResourceGroupMaster OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The master node id of this resource group.  This is 
	the LHANodeIndex for the master node of this resource
	group. "
    ::= { LHAResourceGroupEntry 2 }

LHAResourceGroupResources OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The resources contained in this resource group."
    ::= { LHAResourceGroupEntry 3 }

LHAResourceGroupStatus OBJECT-TYPE
    SYNTAX	Unsigned32 (0..255)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The status of this resource group.

	 0       program is running 
	 1       program is dead and /var/run pid file exists
	 2       program is dead and /var/lock lock file exists
	 3       program is stopped
	 4-100   reserved for future LSB use
	 100-149 reserved for distribution use
	 150-199 reserved for application use
	 200-254 reserved
	 "
    ::= { LHAResourceGroupEntry 4 }

LHAMembershipTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF lhaMembershipEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table containing membership information for the cluster.
	A successful membership has to have qurom.  
	
				NOTE WELL

	If this table does not contain any entries, that means the 
	node is not part of the cluster membership."
    ::= { LinuxHA 6 }

LHAMembershipEntry OBJECT-TYPE
    SYNTAX	lhaMembershipEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An entry containing a member and its status."
    INDEX	{ LHAMemberIndex }
    ::= { LHAMembershipTable 1 }

lhaMembershipEntry ::= SEQUENCE {
    LHAMemberIndex   		Integer32,
    LHAMemberName    		DisplayString,
    LHAMemberAddress 		DisplayString,
    LHAMemberClusterName	DisplayString,
    LHAMemberIsMember		TruthValue,
    LHAMemberLastChange 	INTEGER,
    LHAMemberBootTime 		TimeStamp,
}

LHAMemberIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A unique integer that identifies this member."
    ::= { LHAMembershipEntry 1 }

LHAMemberName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The name of the cluster member."
    ::= { LHAMembershipEntry 2 }

LHAMemberAddress OBJECT-TYPE
    SYNTAX	OCTET STRING (SIZE (64))
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The address of the cluster member."
    ::= { LHAMembershipEntry 3 }

LHAMemberClusterName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The name of this cluster."
    ::= { LHAMembershipEntry 4 }

LHAMemberIsMember OBJECT-TYPE
    SYNTAX	TruthValue
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"If this node is part of the membership or not."
    ::= { LHAMembershipEntry 5 }

LHAMemberLastChange OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    undefined (0),
		    nochange (1),
		    joined (2),
		    left (3)
		}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"If this node is part of the membership or not."
    ::= { LHAMembershipEntry 6 }

LHAMemberBootTime OBJECT-TYPE
    SYNTAX	TimeStamp
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The time when this cluster member last started."
    ::= { LHAMembershipEntry 7 }

LHAHeartbeatConfigInfo		OBJECT IDENTIFIER ::= { LinuxHA 7 }

LHAHBVersion OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The heartbeat version."
    ::= { LHAHeartbeatConfigInfo 1 }

LHAKeepAlive OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The heartbeat interval."
    ::= { LHAHeartbeatConfigInfo 3 }

LHADeadTime OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The time it waits before declaring a node to be dead."
    ::= { LHAHeartbeatConfigInfo 4 }

LHADeadPing OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The time it waits before declaring a ping node to be dead."
    ::= { LHAHeartbeatConfigInfo 5 }

LHAWarnTime OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The time it waits before issuing a 'late heartbeat' warning."
    ::= { LHAHeartbeatConfigInfo 6 }

LHAInitDead OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Very first dead time.  Should be twice the normal dead time."
    ::= { LHAHeartbeatConfigInfo 7 }

LHABaudRate OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Baud rate for serial ports."
    ::= { LHAHeartbeatConfigInfo 9 }

LHAAutoFailBack OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    undefined (0),
		    on (1),
		    off (2),
		    legacy (3),
    		}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Determins whether a resource will automatically fail back to
	its primary node, or remain on whatever the node is serving.
	
	Possible values are: on, off, legacy."
    ::= { LHAHeartbeatConfigInfo 12 }

LHAStonith OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The STONITH device configured for this cluster."
    ::= { LHAHeartbeatConfigInfo 13 }

LHAStonithHost OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The STONITH host configured for this cluster."
    ::= { LHAHeartbeatConfigInfo 14 }

LHARespawn OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The other services that got respawned by heartbeat daemon."
    ::= { LHAHeartbeatConfigInfo 15 }

LHAResourceTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF lhaResourceEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table containing information of all the resource for V2."
    ::= { LinuxHA 8 }

LHAResourceEntry OBJECT-TYPE
    SYNTAX	lhaResourceEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An entry that describes the resource and its status for V2."
    INDEX	{ LHAResourceIndex }
    ::= { LHAResourceTable 1 }

lhaResourceEntry ::= SEQUENCE	{
    LHAResourceIndex	Integer32,
    LHAResourceName	DisplayString,
    LHAResourceType     INTEGER,
    LHAResourceNode	DisplayString,
    LHAResourceStatus	INTEGER,
    LHAResourceIsManaged	INTEGER,
    LHAResourceFailCount	Integer32,
    LHAResourceParent	DisplayString,
}

LHAResourceIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A unique integer that identifies this resource."
    ::= { LHAResourceEntry 1 }

LHAResourceName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The name of this resource."
    ::= { LHAResourceEntry 2 }

LHAResourceType OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    unknown (0),
		    primitive (1),
		    group (2),
		    clone (3),
		    masterSlave (4)
    		}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The type of this resource.
	 0       unknown type
	 1       primitive resource.
	 2       group resource.
	 3       clone resource.
	 4	     master/slave resource.
	 "
    ::= { LHAResourceEntry 3 }

LHAResourceNode OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The node name that this resource resides on."
    ::= { LHAResourceEntry 4 }

LHAResourceStatus OBJECT-TYPE
    SYNTAX	INTEGER {
	    	    unknown (0),
		    stopped (1),
		    started (2),
		    slave (3),
		    master (4)
    		}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The status of this resource.
	 0       unknown status
	 1       program is stopped.
	 2       program is started.
	 3       program is started in slave state.
	 4	 program is started in master state.
	 "
    ::= { LHAResourceEntry 5 }

LHAResourceIsManaged OBJECT-TYPE
    SYNTAX	INTEGER {
		    unmanaged (0),
		    managed (1)
    		}
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The status of this resource.
	 0       resource is not managed.
	 1       resource is managed.
	 "
    ::= { LHAResourceEntry 6 }

LHAResourceFailCount OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The value of this resource's fail-count."
    ::= { LHAResourceEntry 7 }

LHAResourceParent OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The name of this resource's parent resource."
    ::= { LHAResourceEntry 8 }

LHATrapTable                    OBJECT IDENTIFIER ::= { LinuxHA 900 }

LHANodeStatusUpdate NOTIFICATION-TYPE
    OBJECTS { LHANodeName LHANodeStatus }
    STATUS  current
    DESCRIPTION
    	"A node status change event just happened."
    ::= { LHATrapTable 1 }

LHAIFStatusUpdate NOTIFICATION-TYPE
    OBJECTS { LHANodeName LHAIFName LHAIFStatus }
    STATUS  current
    DESCRIPTION
    	"A link status just changed."
    ::= { LHATrapTable 3 }

LHAMembershipChange NOTIFICATION-TYPE
    OBJECTS { LHANodeName LHAMemberLastChange }
    STATUS  current
    DESCRIPTION
    	"A node just changed it membership. "
    ::= { LHATrapTable 5 }

LHAHBAgentOnline NOTIFICATION-TYPE
    OBJECTS { LHANodeName }
    STATUS  current
    DESCRIPTION
    	"The heartbeat agent for this node is online and ready to accept queries. "
    ::= { LHATrapTable 7 }

LHAHBAgentOffline NOTIFICATION-TYPE
    OBJECTS { LHANodeName }
    STATUS  current
    DESCRIPTION
    	"The heartbeat agent for this node is offline. "
    ::= { LHATrapTable 9 }

LHAResourceStatusUpdate NOTIFICATION-TYPE
    OBJECTS { LHAResourceName LHAResourceNode LHAResourceStatus }
    STATUS  current
    DESCRIPTION
    	"A resource status change event just happened."
    ::= { LHATrapTable 11 }

END
