UCD-SNMP-MIB DEFINITIONS ::= BEGIN

-- Design notes:
--
-- The design of this mib may seem unusual in parts, as it was
-- designed for ease of numerical management routines.
-- 
-- In that light, most sub-sections of this mib have four common
-- numerical oid consistencies:
--
-- 2021.ID.1   : an integer index value.  In scalers, this is always
--               of value 1.  In tables it is a row index.
-- 2021.ID.2   : a name of the script, process, etc. that this row represents.
-- 2021.ID.100 : An error flag indicating if an error is present on
--               that row (a threshold value was crossed, etc).
-- 2021.ID.101 : An error string describing why the error flag is non-0.
--
-- These conventions enable managers to easy examine portions of the
-- mib by setting the ID to the sub-section they are interested in
-- monitoring, and then scanning the .100 value to check for an
-- error(s), and get a more specific error message from .101 for the
-- named check found in .2.
--
-- Row numbers between 2 and 100 are sub-section specific.
--
-- Mib sections utilizing the above conventions:
--   Tables:  	procTable, execTable, diskTable, loadTable
--   Scalers: 	memory, snmperrs


IMPORTS
    OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY,
    Integer32, Opaque, enterprises, Counter32, Unsigned32
        FROM SNMPv2-SMI

    TEXTUAL-CONVENTION, DisplayString, TruthValue
	FROM SNMPv2-TC;

ucdavis MODULE-IDENTITY
    LAST-UPDATED "200901190000Z"
    ORGANIZATION "University of California, Davis"
    CONTACT-INFO    
	"This mib is no longer being maintained by the University of
	 California and is now in life-support-mode and being
	 maintained by the net-snmp project.  The best place to write
	 for public questions about the net-snmp-coders mailing list
	 at net-snmp-coders@lists.sourceforge.net.

         postal:   Wes Hardaker
                   P.O. Box 382
                   Davis CA  95617

         email:    net-snmp-coders@lists.sourceforge.net
        "
    DESCRIPTION
	"This file defines the private UCD SNMP MIB extensions."

    REVISION	 "200901190000Z"
    DESCRIPTION
	"New 64-bit objects for monitoring large disk usage"

    REVISION	 "200611220000Z"
    DESCRIPTION
	"Clarify behaviour of objects in the memory & systemStats groups
         (including updated versions of malnamed mem*Text objects).
         Define suitable TCs to describe error reporting/fix behaviour."

    REVISION	 "200404070000Z"
    DESCRIPTION
	"Added ssCpuRawSoftIRQ for Linux (2.6) and forgotten raw swap counters."

    REVISION	 "200209050000Z"
    DESCRIPTION
	"Deprecate the non-raw objects."

    REVISION	 "200109200000Z"
    DESCRIPTION
	"Group to monitor log files"

    REVISION	 "200101170000Z"
    DESCRIPTION
	"Added raw CPU and IO counters."

    REVISION	 "9912090000Z"
    DESCRIPTION
	"SMIv2 version converted from older MIB definitions."
    ::= { enterprises 2021 }

-- Current UCD core mib table entries:
--   prTable          OBJECT IDENTIFIER ::= { ucdavis   2 }
--   memory           OBJECT IDENTIFIER ::= { ucdavis   4 }
--   extTable         OBJECT IDENTIFIER ::= { ucdavis   8 }
--   diskTable        OBJECT IDENTIFIER ::= { ucdavis   9 }
--   loadTable        OBJECT IDENTIFIER ::= { ucdavis  10 }
--   systemStats      OBJECT IDENTIFIER ::= { ucdavis  11 }
--   ucdDemoMIB       OBJECT IDENTIFIER ::= { ucdavis  14 } - UCD-DEMO-MIB
--   fileTable        OBJECT IDENTIFIER ::= { ucdavis  15 }
--   logMatch         OBJECT IDENTIFIER ::= { ucdavis  16 }
--   version          OBJECT IDENTIFIER ::= { ucdavis 100 }
--   snmperrs         OBJECT IDENTIFIER ::= { ucdavis 101 }
--   mibRegistryTable OBJECT IDENTIFIER ::= { ucdavis 102 }

-- Older mib table entries that were changed to new locations above:
--   processes        OBJECT IDENTIFIER ::= { ucdavis   1 }
--   exec             OBJECT IDENTIFIER ::= { ucdavis   3 }
--   disk             OBJECT IDENTIFIER ::= { ucdavis   6 }
--   load             OBJECT IDENTIFIER ::= { ucdavis   7 }

-- Never implemented and removed from the mib:
--   lockd            OBJECT IDENTIFIER ::= { ucdavis   5 }

-- Branches for registering other UCD MIB modules:
ucdInternal           OBJECT IDENTIFIER ::= { ucdavis 12 }
ucdExperimental       OBJECT IDENTIFIER ::= { ucdavis 13 }

-- OID values assigned in the ucdExperimental branch:
--   ucdIpFwAccMIB    OBJECT IDENTIFIER ::= { ucdExperimental  1 } - UCD-IPFWACC-MIB
--   ucdIpFilter      OBJECT IDENTIFIER ::= { ucdExperimental  2 } - UCD-IPFILTER-MIB
--   wavelan          OBJECT IDENTIFIER ::= { ucdExperimental  3 } - WL-MIB
--   ucdDlmodMIB      OBJECT IDENTIFIER ::= { ucdExperimental 14 } - UCD-DLMOD-MIB
--   ucdDiskIOMIB     OBJECT IDENTIFIER ::= { ucdExperimental 15 } - UCD-DISKIO-MIB
--   lmSensors        OBJECT IDENTIFIER ::= { ucdExperimental 16 } - LM-SENSORS-MIB


-- These are the old returned values of the agent type.
-- originally returned to:  .iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0 
-- Current versions of the agent return an equivalent OID from the netSnmpAgentOIDs
-- tree (defined in NET-SNMP-TC), which includes values for some additional O/Ss

ucdSnmpAgent      OBJECT IDENTIFIER ::= { ucdavis 250 }
hpux9             OBJECT IDENTIFIER ::= { ucdSnmpAgent 1 }
sunos4            OBJECT IDENTIFIER ::= { ucdSnmpAgent 2 }
solaris           OBJECT IDENTIFIER ::= { ucdSnmpAgent 3 }
osf               OBJECT IDENTIFIER ::= { ucdSnmpAgent 4 }
ultrix            OBJECT IDENTIFIER ::= { ucdSnmpAgent 5 }
hpux10            OBJECT IDENTIFIER ::= { ucdSnmpAgent 6 }
netbsd1           OBJECT IDENTIFIER ::= { ucdSnmpAgent 7 }
freebsd           OBJECT IDENTIFIER ::= { ucdSnmpAgent 8 }
irix              OBJECT IDENTIFIER ::= { ucdSnmpAgent 9 }
linux             OBJECT IDENTIFIER ::= { ucdSnmpAgent 10 }
bsdi              OBJECT IDENTIFIER ::= { ucdSnmpAgent 11 }
openbsd           OBJECT IDENTIFIER ::= { ucdSnmpAgent 12 }
win32		  OBJECT IDENTIFIER ::= { ucdSnmpAgent 13 } -- unlucky
hpux11            OBJECT IDENTIFIER ::= { ucdSnmpAgent 14 }
aix               OBJECT IDENTIFIER ::= { ucdSnmpAgent 15 }
macosx            OBJECT IDENTIFIER ::= { ucdSnmpAgent 16 }
dragonfly         OBJECT IDENTIFIER ::= { ucdSnmpAgent 17 }
unknown           OBJECT IDENTIFIER ::= { ucdSnmpAgent 255 }


--
-- Define the Float Textual Convention
--   This definition was written by David Perkins.
--

Float ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "A single precision floating-point number.  The semantics
         and encoding are identical for type 'single' defined in
         IEEE Standard for Binary Floating-Point,
         ANSI/IEEE Std 754-1985.
         The value is restricted to the BER serialization of
         the following ASN.1 type:
             FLOATTYPE ::= [120] IMPLICIT FloatType
         (note: the value 120 is the sum of '30'h and '48'h)
         The BER serialization of the length for values of
         this type must use the definite length, short
         encoding form.

         For example, the BER serialization of value 123
         of type FLOATTYPE is '9f780442f60000'h.  (The tag
         is '9f78'h; the length is '04'h; and the value is
         '42f60000'h.) The BER serialization of value
         '9f780442f60000'h of data type Opaque is
         '44079f780442f60000'h. (The tag is '44'h; the length
         is '07'h; and the value is '9f780442f60000'h."
    SYNTAX Opaque (SIZE (7))

UCDErrorFlag ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "Represents a possible error condition"
    SYNTAX INTEGER  { noError(0),  error(1) }

UCDErrorFix ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "Represents a 'push-button' object, to invoke a suitable
         configured action.  Will always return 0 when read."
    SYNTAX INTEGER  { noError(0),  runFix(1) }

--
-- Process table checks
--

prTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF PrEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table containing information on running
	 programs/daemons configured for monitoring in the
	 snmpd.conf file of the agent.  Processes violating the
	 number of running processes required by the agent's
	 configuration file are flagged with numerical and
	 textual errors."
    ::= { ucdavis 2 }

prEntry OBJECT-TYPE
    SYNTAX	PrEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
        "An entry containing a process and its statistics."
    INDEX	{ prIndex }
    ::= { prTable  1 }

PrEntry ::= SEQUENCE {
    prIndex		Integer32,
    prNames		DisplayString,
    prMin		Integer32,
    prMax		Integer32,
    prCount		Integer32,
    prErrorFlag		UCDErrorFlag,
    prErrMessage	DisplayString,
    prErrFix		UCDErrorFix,
    prErrFixCmd		DisplayString
}

prIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Reference Index for each observed process."
    ::= { prEntry 1 }

prNames OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The process name we're counting/checking on."
    ::= { prEntry 2 }

prMin OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The minimum number of processes that should be
	 running.  An error flag is generated if the number of
	 running processes is < the minimum."
    ::= { prEntry 3 }

prMax OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The maximum number of processes that should be
	 running.  An error flag is generated if the number of
	 running processes is > the maximum."
    ::= { prEntry 4 }

prCount OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The number of current processes running with the name
	 in question."
    ::= { prEntry 5 }

prErrorFlag OBJECT-TYPE
    SYNTAX	UCDErrorFlag
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"A Error flag to indicate trouble with a process.  It
	 goes to 1 if there is an error, 0 if no error."
    ::= { prEntry 100 }

prErrMessage OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"An error message describing the problem (if one exists)."
    ::= { prEntry 101 }

prErrFix OBJECT-TYPE
    SYNTAX	UCDErrorFix
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION
	"Setting this to one will try to fix the problem if
	 the agent has been configured with a script to call
	 to attempt to fix problems automatically using remote
	 snmp operations."
    ::= { prEntry 102 }

prErrFixCmd OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The command that gets run when the prErrFix column is 
	 set to 1."
    ::= { prEntry 103 }



extTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF ExtEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table of extensible commands returning output and
	 result codes.  These commands are configured via the
	 agent's snmpd.conf file."
    ::= { ucdavis 8 }

extEntry OBJECT-TYPE
    SYNTAX     ExtEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
        "An entry containing an extensible script/program and its output."
    INDEX      { extIndex }
    ::= { extTable  1 }

ExtEntry ::= SEQUENCE {
    extIndex		Integer32,
    extNames		DisplayString,
    extCommand		DisplayString,
    extResult		Integer32,
    extOutput		DisplayString,
    extErrFix		UCDErrorFix,
    extErrFixCmd	DisplayString
}

extIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Reference Index for extensible scripts.  Simply an
	 integer row number."
    ::= { extEntry 1 }

extNames OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"A Short, one name description of the extensible command."
    ::= { extEntry 2 }

extCommand OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The command line to be executed."
    ::= { extEntry 3 }

extResult OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The result code (exit status) from the executed command."
    ::= { extEntry 100 }

extOutput OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The first line of output of the executed command."
    ::= { extEntry 101 }

extErrFix OBJECT-TYPE
    SYNTAX	UCDErrorFix
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION
	"Setting this to one will try to fix the problem if
	 the agent has been configured with a script to call
	 to attempt to fix problems automatically using remote
	 snmp operations."
    ::= { extEntry 102 }
	
extErrFixCmd OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The command that gets run when the extErrFix column is 
	 set to 1."
    ::= { extEntry 103 }

--
-- Memory usage/watch reporting.
-- Not supported on all systems!
-- See agent/mibgroup/ucd_snmp.h to see if its loaded for your architecture.
--
memory OBJECT IDENTIFIER ::= { ucdavis 4 }

memIndex OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Bogus Index.  This should always return the integer 0."
    ::= { memory 1 } 

memErrorName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Bogus Name. This should always return the string 'swap'."
    ::= { memory 2 } 

memTotalSwap OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The total amount of swap space configured for this host."
    ::= { memory 3 }

memAvailSwap OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The amount of swap space currently unused or available."
    ::= { memory 4 }

memTotalReal OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The total amount of real/physical memory installed
         on this host."
    ::= { memory 5 }

memAvailReal OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The amount of real/physical memory currently unused
         or available."
    ::= { memory 6 }

memTotalSwapTXT OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The total amount of swap space or virtual memory allocated
         for text pages on this host.

         This object will not be implemented on hosts where the
         underlying operating system does not distinguish text
         pages from other uses of swap space or virtual memory."
    ::= { memory 7 }

memAvailSwapTXT OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION	
	"The amount of swap space or virtual memory currently
         being used by text pages on this host.

         This object will not be implemented on hosts where the
         underlying operating system does not distinguish text
         pages from other uses of swap space or virtual memory.

         Note that (despite the name), this value reports the
         amount used, rather than the amount free or available
         for use.  For clarity, this object is being deprecated
         in favour of 'memUsedSwapTXT(16)."
    ::= { memory 8 }

memTotalRealTXT OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The total amount of real/physical memory allocated
         for text pages on this host.

         This object will not be implemented on hosts where the
         underlying operating system does not distinguish text
         pages from other uses of physical memory."
    ::= { memory 9 }

memAvailRealTXT OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The amount of real/physical memory currently being
         used by text pages on this host.

         This object will not be implemented on hosts where the
         underlying operating system does not distinguish text
         pages from other uses of physical memory.

         Note that (despite the name), this value reports the
         amount used, rather than the amount free or available
         for use.  For clarity, this object is being deprecated
         in favour of 'memUsedRealTXT(17)."
    ::= { memory 10 }

memTotalFree OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
        "The total amount of memory free or available for use on
         this host.  This value typically covers both real memory
         and swap space or virtual memory."
    ::= { memory 11 }

memMinimumSwap OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The minimum amount of swap space expected to be kept
         free or available during normal operation of this host.

         If this value (as reported by 'memAvailSwap(4)') falls
         below the specified level, then 'memSwapError(100)' will
         be set to 1 and an error message made available via
         'memSwapErrorMsg(101)'."
    ::= { memory 12 }

memShared OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
        "The total amount of real or virtual memory currently
         allocated for use as shared memory.

         This object will not be implemented on hosts where the
         underlying operating system does not explicitly identify
         memory as specifically reserved for this purpose."
    ::= { memory 13 }

memBuffer OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
        "The total amount of real or virtual memory currently
         allocated for use as memory buffers.

         This object will not be implemented on hosts where the
         underlying operating system does not explicitly identify
         memory as specifically reserved for this purpose."
    ::= { memory 14 }

memCached OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
        "The total amount of real or virtual memory currently
         allocated for use as cached memory.

         This object will not be implemented on hosts where the
         underlying operating system does not explicitly identify
         memory as specifically reserved for this purpose."
    ::= { memory 15 }

memUsedSwapTXT OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION	
	"The amount of swap space or virtual memory currently
         being used by text pages on this host.

         This object will not be implemented on hosts where the
         underlying operating system does not distinguish text
         pages from other uses of swap space or virtual memory."
    ::= { memory 16 }

memUsedRealTXT OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The amount of real/physical memory currently being
         used by text pages on this host.

         This object will not be implemented on hosts where the
         underlying operating system does not distinguish text
         pages from other uses of physical memory."
    ::= { memory 17 }

memSwapError OBJECT-TYPE
    SYNTAX	UCDErrorFlag
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Indicates whether the amount of available swap space
         (as reported by 'memAvailSwap(4)'), is less than the
         desired minimum (specified by 'memMinimumSwap(12)')."
    ::= { memory 100 }
	
memSwapErrorMsg OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Describes whether the amount of available swap space
         (as reported by 'memAvailSwap(4)'), is less than the
         desired minimum (specified by 'memMinimumSwap(12)')."
    ::= { memory 101 } 


dskTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF DskEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"Disk watching information.  Partions to be watched
	 are configured by the snmpd.conf file of the agent."
    ::= { ucdavis 9 }

dskEntry OBJECT-TYPE
    SYNTAX     DskEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
        "An entry containing a disk and its statistics."
    INDEX      { dskIndex }
    ::= { dskTable  1 }

DskEntry ::= SEQUENCE {
    dskIndex		Integer32,
    dskPath		DisplayString,
    dskDevice		DisplayString,
    dskMinimum		Integer32,
    dskMinPercent	Integer32,
    dskTotal		Integer32,
    dskAvail		Integer32,
    dskUsed		Integer32,
    dskPercent		Integer32,
    dskPercentNode	Integer32,
    dskErrorFlag	UCDErrorFlag,
    dskErrorMsg		DisplayString,
    dskTotalLow		Unsigned32,
    dskTotalHigh	Unsigned32,
    dskAvailLow		Unsigned32,
    dskAvailHigh	Unsigned32,
    dskUsedLow		Unsigned32,
    dskUsedHigh		Unsigned32
}

dskIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..65535)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Integer reference number (row number) for the disk mib."
    ::= { dskEntry 1 }
	
dskPath OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Path where the disk is mounted."
    ::= { dskEntry 2 } 

dskDevice OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Path of the device for the partition"
    ::= { dskEntry 3 } 

dskMinimum OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Minimum space required on the disk (in kBytes) before the
         errors are triggered.  Either this or dskMinPercent is
         configured via the agent's snmpd.conf file."
    ::= { dskEntry 4 } 

dskMinPercent OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Percentage of minimum space required on the disk before the
         errors are triggered.  Either this or dskMinimum is
         configured via the agent's snmpd.conf file."
    ::= { dskEntry 5 } 

dskTotal OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Total size of the disk/partion (kBytes).
	 For large disks (>2Tb), this value will
	 latch at INT32_MAX (2147483647)."
    ::= { dskEntry 6 } 

dskAvail OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Available space on the disk.
	 For large lightly-used disks (>2Tb), this
	 value will latch at INT32_MAX (2147483647)."
    ::= { dskEntry 7 } 

dskUsed OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Used space on the disk.
	 For large heavily-used disks (>2Tb), this
	 value will latch at INT32_MAX (2147483647)."
    ::= { dskEntry 8 } 

dskPercent OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Percentage of space used on disk"
    ::= { dskEntry 9 } 

dskPercentNode OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Percentage of inodes used on disk"
    ::= { dskEntry 10 } 

dskTotalLow OBJECT-TYPE
    SYNTAX	Unsigned32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Total size of the disk/partion (kBytes).
	Together with dskTotalHigh composes 64-bit number."
    ::= { dskEntry 11 }

dskTotalHigh OBJECT-TYPE
    SYNTAX	Unsigned32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Total size of the disk/partion (kBytes).
	Together with dskTotalLow composes 64-bit number."
    ::= { dskEntry 12 }

dskAvailLow OBJECT-TYPE
    SYNTAX	Unsigned32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Available space on the disk (kBytes).
	Together with dskAvailHigh composes 64-bit number."
    ::= { dskEntry 13 }

dskAvailHigh OBJECT-TYPE
    SYNTAX	Unsigned32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Available space on the disk (kBytes).
	Together with dskAvailLow composes 64-bit number."
    ::= { dskEntry 14 }

dskUsedLow OBJECT-TYPE
    SYNTAX	Unsigned32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Used space on the disk (kBytes).
	Together with dskUsedHigh composes 64-bit number."
    ::= { dskEntry 15 }

dskUsedHigh OBJECT-TYPE
    SYNTAX	Unsigned32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Used space on the disk (kBytes).
	Together with dskUsedLow composes 64-bit number."
    ::= { dskEntry 16 }

dskErrorFlag OBJECT-TYPE
    SYNTAX	UCDErrorFlag
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Error flag signaling that the disk or partition is under
	 the minimum required space configured for it."
    ::= { dskEntry 100 } 
     
dskErrorMsg OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"A text description providing a warning and the space left
	 on the disk."
    ::= { dskEntry 101 } 
     
laTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF LaEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"Load average information."
    ::= { ucdavis 10 }

laEntry OBJECT-TYPE
    SYNTAX	LaEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An entry containing a load average and its values."
    INDEX	{ laIndex }
    ::= { laTable  1 }

LaEntry ::= SEQUENCE {
    laIndex		Integer32,
    laNames		DisplayString,
    laLoad		DisplayString,
    laConfig		DisplayString,
    laLoadInt		Integer32,
    laLoadFloat		Float,
    laErrorFlag		UCDErrorFlag,
    laErrMessage	DisplayString
}

laIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..3)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"reference index/row number for each observed loadave."
    ::= { laEntry 1 }

laNames OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The list of loadave names we're watching."
    ::= { laEntry 2 }

laLoad OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The 1,5 and 15 minute load averages (one per row)."
    ::= { laEntry 3 }

laConfig OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The watch point for load-averages to signal an
	 error.  If the load averages rises above this value,
	 the laErrorFlag below is set."
    ::= { laEntry 4 }

laLoadInt OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The 1,5 and 15 minute load averages as an integer.
	 This is computed by taking the floating point
	 loadaverage value and multiplying by 100, then
	 converting the value to an integer."
    ::= { laEntry 5 }

laLoadFloat OBJECT-TYPE
    SYNTAX	Float
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The 1,5 and 15 minute load averages as an opaquely
	 wrapped floating point number."
    ::= { laEntry 6 }

laErrorFlag OBJECT-TYPE
    SYNTAX	UCDErrorFlag
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"A Error flag to indicate the load-average has crossed
	 its threshold value defined in the snmpd.conf file.
	 It is set to 1 if the threshold is crossed, 0 otherwise."
    ::= { laEntry 100 }

laErrMessage OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"An error message describing the load-average and its
	 surpased watch-point value."
    ::= { laEntry 101 }


version	OBJECT IDENTIFIER ::= { ucdavis 100 }

versionIndex OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Index to mib (always 0)"
    ::= { version 1 } 

versionTag OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"CVS tag keyword"
    ::= { version 2 } 
     
versionDate OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Date string from RCS keyword"
    ::= { version 3 } 

versionCDate OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Date string from ctime() "
    ::= { version 4 } 

versionIdent OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Id string from RCS keyword"
    ::= { version 5 } 

versionConfigureOptions OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION  
	"Options passed to the configure script when this agent was built."
    ::= { version 6 } 

versionClearCache OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION  
	"Set to 1 to clear the exec cache, if enabled"
    ::= { version 10 } 

versionUpdateConfig OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION  
	"Set to 1 to read-read the config file(s)."
    ::= { version 11 } 

versionRestartAgent OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION  
	"Set to 1 to restart the agent."
    ::= { version 12 } 

versionSavePersistentData OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION  
	"Set to 1 to force the agent to save it's persistent data immediately."
    ::= { version 13 } 

versionDoDebugging OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-write
    STATUS	current
    DESCRIPTION  
	"Set to 1 to turn debugging statements on in the agent or 0
	 to turn it off."
    ::= { version 20 } 


snmperrs OBJECT IDENTIFIER ::= { ucdavis 101 }

snmperrIndex OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Bogus Index for snmperrs (always 0)."
    ::= { snmperrs 1 }

snmperrNames OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"snmp"
    ::= { snmperrs 2 }

snmperrErrorFlag OBJECT-TYPE
    SYNTAX	UCDErrorFlag
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"A Error flag to indicate trouble with the agent.  It
	 goes to 1 if there is an error, 0 if no error."
    ::= { snmperrs 100 }

snmperrErrMessage OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"An error message describing the problem (if one exists)."
    ::= { snmperrs 101 }


mrTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF MrEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"A table displaying all the oid's registered by mib modules in
	 the agent.  Since the agent is modular in nature, this lists
	 each module's OID it is responsible for and the name of the module"
    ::= { ucdavis 102 }

mrEntry OBJECT-TYPE
    SYNTAX	MrEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"An entry containing a registered mib oid."
    INDEX	{ IMPLIED mrIndex }
    ::= { mrTable 1 }

MrEntry ::= SEQUENCE {
    mrIndex		OBJECT IDENTIFIER,
    mrModuleName	DisplayString
}

mrIndex OBJECT-TYPE
    SYNTAX	OBJECT IDENTIFIER
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The registry slot of a mibmodule."
    ::= { mrEntry  1 }

mrModuleName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The module name that registered this OID."
    ::= { mrEntry  2 }

systemStats OBJECT IDENTIFIER ::= { ucdavis 11 }

ssIndex OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Bogus Index.  This should always return the integer 1."
    ::= { systemStats 1 }

ssErrorName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Bogus Name. This should always return the string 'systemStats'."
    ::= { systemStats 2 }

ssSwapIn OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The average amount of memory swapped in from disk,
         calculated over the last minute."
    ::= { systemStats 3 }

ssSwapOut OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"The average amount of memory swapped out to disk,
         calculated over the last minute."
    ::= { systemStats 4 }

ssIOSent OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "blocks/s"
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The average amount of data written to disk or other
         block device, calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssIORawSent(57)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 5 }

ssIOReceive OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "blocks/s"
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The average amount of data read from disk or other
         block device, calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssIORawReceived(58)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 6 }

ssSysInterrupts OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "interrupts/s"
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The average rate of interrupts processed (including
         the clock) calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssRawInterrupts(59)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 7 }

ssSysContext OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "switches/s"
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The average rate of context switches,
         calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssRawContext(60)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 8 }

ssCpuUser OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The percentage of CPU time spent processing
         user-level code, calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssCpuRawUser(50)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 9 }

ssCpuSystem OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The percentage of CPU time spent processing
         system-level code, calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssCpuRawSystem(52)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 10 }

ssCpuIdle OBJECT-TYPE
    SYNTAX	Integer32
    MAX-ACCESS	read-only
    STATUS	deprecated
    DESCRIPTION
	"The percentage of processor time spent idle,
         calculated over the last minute.
       
	 This object has been deprecated in favour of
         'ssCpuRawIdle(53)', which can be used to calculate
         the same metric, but over any desired time period."
    ::= { systemStats 11 }

-- The agent only implements those of the following counters that the
-- kernel supports! Don't expect all to be present.

ssCpuRawUser OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         processing user-level code.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 50 }

ssCpuRawNice OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         processing reduced-priority code.

         This object will not be implemented on hosts where
         the underlying operating system does not measure
         this particular CPU metric.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 51 }

ssCpuRawSystem OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         processing system-level code.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors).

         This object may sometimes be implemented as the
         combination of the 'ssCpuRawWait(54)' and
         'ssCpuRawKernel(55)' counters, so care must be
         taken when summing the overall raw counters."
    ::= { systemStats 52 }

ssCpuRawIdle OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         idle.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 53 }

ssCpuRawWait OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         waiting for IO.

         This object will not be implemented on hosts where
         the underlying operating system does not measure
         this particular CPU metric.  This time may also be
         included within the 'ssCpuRawSystem(52)' counter.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 54 }

ssCpuRawKernel OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         processing kernel-level code.

         This object will not be implemented on hosts where
         the underlying operating system does not measure
         this particular CPU metric.  This time may also be
         included within the 'ssCpuRawSystem(52)' counter.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 55 }

ssCpuRawInterrupt OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         processing hardware interrupts.

         This object will not be implemented on hosts where
         the underlying operating system does not measure
         this particular CPU metric.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 56 }

ssIORawSent OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Number of blocks sent to a block device"
    ::= { systemStats 57 }

ssIORawReceived OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Number of blocks received from a block device"
    ::= { systemStats 58 }

ssRawInterrupts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Number of interrupts processed"
    ::= { systemStats 59 }

ssRawContexts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Number of context switches"
    ::= { systemStats 60 }

ssCpuRawSoftIRQ OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         processing software interrupts.

         This object will not be implemented on hosts where
         the underlying operating system does not measure
         this particular CPU metric.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 61 }

ssRawSwapIn OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Number of blocks swapped in"
    ::= { systemStats 62 }

ssRawSwapOut OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Number of blocks swapped out"
    ::= { systemStats 63 }

-- possibly used in the future:
--
-- ssErrorFlag OBJECT-TYPE
--     SYNTAX	   UCDErrorFlag
--     MAX-ACCESS  read-only
--     STATUS      current
--     DESCRIPTION
--         "Error flag."
--     ::= { systemStats 100 }
-- 
-- ssErrMessage OBJECT-TYPE
--     SYNTAX      DisplayString
--     MAX-ACCESS  read-only
--     STATUS      current
--     DESCRIPTION  
--         "Error message describing the errorflag condition."
--     ::= { systemStats 101 } 


ucdTraps OBJECT IDENTIFIER ::= { ucdavis 251 }

ucdStart NOTIFICATION-TYPE
    STATUS	current
    DESCRIPTION
	"This trap could in principle be sent when the agent start"
    ::= { ucdTraps 1 }
    
ucdShutdown	NOTIFICATION-TYPE
    STATUS current
    DESCRIPTION
	"This trap is sent when the agent terminates"
    ::= { ucdTraps 2 }

--
-- File Table:  monitor a list of files to check for a maximum size.
-- 

fileTable OBJECT-TYPE
    SYNTAX	SEQUENCE OF FileEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"Table of monitored files."
    ::= { ucdavis 15 }
    
fileEntry OBJECT-TYPE
    SYNTAX	FileEntry
    MAX-ACCESS	not-accessible
    STATUS	current
    DESCRIPTION
	"Entry of file"
    INDEX	{ fileIndex }
    ::= { fileTable 1 }

FileEntry ::= SEQUENCE {
    fileIndex		Integer32,
    fileName		DisplayString,
    fileSize		Integer32,
    fileMax		Integer32,
    fileErrorFlag	UCDErrorFlag,
    fileErrorMsg	DisplayString
}

fileIndex OBJECT-TYPE
    SYNTAX	Integer32 (0..2147483647)
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Index of file"
    ::= { fileEntry 1 }

fileName OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Filename"
    ::= { fileEntry 2 }

fileSize OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Size of file (kB)"
    ::= { fileEntry 3 }

fileMax	OBJECT-TYPE
    SYNTAX	Integer32
    UNITS       "kB"
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Limit of filesize (kB)"
    ::= { fileEntry 4 }

fileErrorFlag OBJECT-TYPE
    SYNTAX	UCDErrorFlag
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Limit exceeded flag"
    ::= { fileEntry 100 }

fileErrorMsg OBJECT-TYPE
    SYNTAX	DisplayString
    MAX-ACCESS	read-only
    STATUS	current
    DESCRIPTION
	"Filesize error message"
    ::= { fileEntry 101 }

logMatch OBJECT IDENTIFIER ::= { ucdavis 16 }

logMatchMaxEntries OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"The maximum number of logmatch entries
		this snmpd daemon can support."
	::= { logMatch 1 }

logMatchTable OBJECT-TYPE
	SYNTAX SEQUENCE OF LogMatchEntry
	MAX-ACCESS not-accessible
	STATUS current
	DESCRIPTION
		"Table of monitored files."
	::= { logMatch 2 }

logMatchEntry OBJECT-TYPE
	SYNTAX LogMatchEntry
	MAX-ACCESS not-accessible
	STATUS current
	DESCRIPTION
		"Entry of file"
	INDEX { logMatchIndex }
	::= { logMatchTable 1 }

LogMatchEntry ::=
	SEQUENCE { 
		logMatchIndex
			Integer32,
		logMatchName
			DisplayString,
		logMatchFilename
			DisplayString,
		logMatchRegEx
			DisplayString,
		logMatchGlobalCounter
			Counter32,
		logMatchGlobalCount
			Integer32,
		logMatchCurrentCounter
			Counter32,
		logMatchCurrentCount
			Integer32,
		logMatchCounter
			Counter32,
		logMatchCount
			Integer32,
		logMatchCycle
			Integer32,
		logMatchErrorFlag
			UCDErrorFlag,
		logMatchRegExCompilation
			DisplayString
	 }

logMatchIndex OBJECT-TYPE
	SYNTAX Integer32 (1..2147483647)
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Index of logmatch"
	::= { logMatchEntry 1 }

logMatchName OBJECT-TYPE
	SYNTAX DisplayString
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"logmatch instance name"
	::= { logMatchEntry 2 }

logMatchFilename OBJECT-TYPE
	SYNTAX DisplayString
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"filename to be logmatched"
	::= { logMatchEntry 3 }

logMatchRegEx OBJECT-TYPE
	SYNTAX DisplayString
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"regular expression"
	::= { logMatchEntry 4 }

logMatchGlobalCounter OBJECT-TYPE
	SYNTAX Counter32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"global count of matches"
	::= { logMatchEntry 5 }

logMatchGlobalCount OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Description."
	::= { logMatchEntry 6 }

logMatchCurrentCounter OBJECT-TYPE
	SYNTAX Counter32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Regex match counter. This counter will
		be reset with each logfile rotation."
	::= { logMatchEntry 7 }

logMatchCurrentCount OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Description."
	::= { logMatchEntry 8 }

logMatchCounter OBJECT-TYPE
	SYNTAX Counter32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Regex match counter. This counter will
		be reset with each read"
	::= { logMatchEntry 9 }

logMatchCount OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Description."
	::= { logMatchEntry 10 }

logMatchCycle OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"time between updates (if not queried) in seconds"
	::= { logMatchEntry 11 }

logMatchErrorFlag OBJECT-TYPE
	SYNTAX UCDErrorFlag
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"errorflag: is this line configured correctly?"
	::= { logMatchEntry 100 }

logMatchRegExCompilation OBJECT-TYPE
	SYNTAX DisplayString
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"message of regex precompilation"
	::= { logMatchEntry 101 }

END
