From c12b7981c5b90668988e3eaedcccaa1ae2309263 Mon Sep 17 00:00:00 2001
From: fguigues <fguigues@localhost>
Date: Tue, 18 Mar 2008 17:22:25 +0000
Subject: [PATCH] * Fix for Issue 218 : Monitor Information Available via SNMP * Update the nbproject to include the snmp source code
---
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandlerDefinitions.java | 90
opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java | 65
opendj-sdk/opends/src/snmp/resource/security/opends-snmp.security | 6
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java | 190 +
opendj-sdk/opends/src/messages/messages/protocol.properties | 25
opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/OpendsRMIJRMPServerImpl.java | 5
opendj-sdk/opends/build.properties | 2
opendj-sdk/opends/src/snmp/resource/mib/rfc2788.txt | 619 +++
opendj-sdk/opends/nbproject/ide-file-targets.xml | 54
opendj-sdk/opends/src/snmp/resource/mib/rfc2021.txt | 25
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPConnectionManager.java | 251 +
opendj-sdk/opends/nbproject/project.xml | 29
opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/Credential.java | 16
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java | 10
opendj-sdk/opends/src/snmp/resource/config/config.snmp.ldif | 11
opendj-sdk/opends/resource/admin/abbreviations.xsl | 2
opendj-sdk/opends/src/snmp/resource/mib/rfc2605.txt | 792 ++++
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsMIBImpl.java | 355 ++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPTrapManagerTest.java | 149
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsEntry.java | 43
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPUserAcl.java | 158
opendj-sdk/opends/src/snmp/resource/mib/rfc1213.txt | 3059 +++++++++++++++++
opendj-sdk/opends/build.xml | 227 +
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java | 312 +
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DIRECTORY_SERVER_MIBImpl.java | 138
opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/SNMPConnectionHandlerConfiguration.xml | 435 ++
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java | 360 ++
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java | 362 ++
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsApplIfOpsEntryImpl.java | 302 +
opendj-sdk/opends/src/snmp/resource/mib/mib_core.txt | 1375 +++++++
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPInetAddressAcl.java | 210 +
opendj-sdk/opends/src/snmp/resource/mib/SNMPV2-SMI.txt | 346 +
opendj-sdk/opends/resource/schema/02-config.ldif | 98
opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java | 296 +
34 files changed, 10,326 insertions(+), 91 deletions(-)
diff --git a/opendj-sdk/opends/build.properties b/opendj-sdk/opends/build.properties
new file mode 100644
index 0000000..1c30b84
--- /dev/null
+++ b/opendj-sdk/opends/build.properties
@@ -0,0 +1,2 @@
+opendmk.lib.dir=
+
diff --git a/opendj-sdk/opends/build.xml b/opendj-sdk/opends/build.xml
index 826ce66..f4494f0 100644
--- a/opendj-sdk/opends/build.xml
+++ b/opendj-sdk/opends/build.xml
@@ -33,6 +33,9 @@
<!-- Build JVM properties -->
<property name="MEM" value="256M"/>
+
+ <!-- Build OpenDMK properties -->
+ <property file="build.properties"/>
<!-- General server-wide properties -->
<property name="src.dir" location="src/server" />
@@ -142,23 +145,32 @@
<property name="msg.package.dir" location="${classes.dir}/messages" />
<property name="msg.src.dir" location="src/messages/src" />
-
+ <!-- Properties for SNMP extension. -->
+ <property name="snmp.mib.dir" location="src/snmp/resource/mib" />
+ <property name="snmp.security.dir" location="src/snmp/resource/security" />
+ <property name="snmp.config.dir" location="src/snmp/resource/config" />
+ <property name="snmp.gen.dir" location="src/snmp/generated" />
+ <property name="snmp.src.dir" location="src/snmp/src" />
+
+ <property name="snmp.classes.dir"
+ location="${classes.dir}/org/opends/server/snmp" />
+
<!-- Create a package bundle containing the DSML library. -->
<target name="dsml" depends="predsml,package"
description="Build a Directory Server package bundle with DSML.">
</target>
-
-
-
-
+
+
+
+
<!-- The build target that should be used before committing code. -->
<target name="precommit" depends="checkstyle,clean,checkprecommit,dsml,testwithcoverage"
description="Perform all processing needed before committing code.">
</target>
-
-
+
+
<!-- The build target that should be used for nightly builds. -->
<target name="nightly"
depends="checkstyle,dsml,srczip,javadoc,docgen,coverage,testallwithcoverage"
@@ -174,8 +186,8 @@
</target>
-
-
+
+
<!-- The build target that should be used to build everything. -->
<target name="all"
depends="checkstyle,clean,checkprecommit,dsml,srczip,javadoc,docgen,testallwithcoverage"
@@ -261,7 +273,7 @@
<!-- Remove all dynamically-generated build files. -->
- <target name="clean" depends="cleanadmin,cleanmessages"
+ <target name="clean" depends="cleanadmin,cleanmessages,cleansnmp"
description="Clean up any files generated during the build process">
<delete dir="${build.dir}" />
@@ -320,7 +332,7 @@
<path id="quickSetup.classpath">
<pathelement location="${quicksetup.classes.dir}" />
</path>
-
+
<tstamp>
<format property="timestamp" pattern="yyyyMMddHHmmss'Z'"
timezone="UTC" />
@@ -356,6 +368,20 @@
<isset property="JVM_VENDOR" />
</not>
</condition>
+
+ <condition property="isopendmkpresent">
+ <or>
+ <and>
+ <available file="${opendmk.lib.dir}/jdmkrt.jar"/>
+ <available file="${opendmk.lib.dir}/jdmktk.jar"/>
+ </and>
+ <and>
+ <available file="${ext.dir}/jdmkrt.jar"/>
+ <available file="${ext.dir}/jdmktk.jar"/>
+ </and>
+ </or>
+ </condition>
+
</target>
@@ -689,7 +715,7 @@
</fileset>
</classpath>
</javac>
-
+
<copy todir="${classes.dir}">
<fileset dir="${src.dir}" includes="**/*.properties" />
<fileset dir="${quicksetup.src.dir}" includes="**/*.properties, **/*.gif, **/*.png" />
@@ -822,6 +848,7 @@
<mkdir dir="${pdir}/config/schema" />
<mkdir dir="${pdir}/config/messages" />
<mkdir dir="${pdir}/config/MakeLDIF" />
+ <mkdir dir="${pdir}/config/snmp/security" />
<mkdir dir="${pdir}/db" />
<mkdir dir="${pdir}/import-tmp" />
<mkdir dir="${pdir}/changelogDb" />
@@ -854,11 +881,11 @@
<!-- copy the message descriptor registry file -->
<copy todir="${classes.dir}/org/opends/messages"
file="${msg.javagen.dir}/org/opends/messages/descriptors.reg" />
-
+
<jar jarfile="${pdir}/lib/${SHORT_NAME}.jar"
basedir="${classes.dir}"
- excludes="${ads.classes.dir}, ${quicksetup.globalcompile.classes.dir}"
- compress="true" index="true" />
+ excludes="${ads.classes.dir}, ${quicksetup.globalcompile.classes.dir},
+ org/opends/server/snmp/**" compress="true" index="true" />
<jar jarfile="${pdir}/lib/quicksetup.jar"
basedir="${quicksetup.classes.dir}" compress="true" index="true" />
@@ -866,13 +893,11 @@
<copy todir="${pdir}/lib">
<fileset file="${lib.dir}/*.jar" />
</copy>
-
+
<copy todir="${pdir}/lib">
<fileset file="${lib.dir}/*.exe" />
</copy>
-
- <antcall target="example-plugin" />
-
+
<fixcrlf srcDir="${scripts.dir}" destDir="${pdir}/bin" excludes="*.bat,_client-script.sh,_server-script.sh,_mixed-script.sh,_script-util.sh" eol="lf" />
<fixcrlf srcDir="${scripts.dir}" destDir="${pdir}/lib" includes="_client-script.sh,_server-script.sh,_mixed-script.sh,_script-util.sh" eol="lf" />
<fixcrlf srcDir="${scripts.dir}" destDir="${pdir}/bin" includes="README_WINDOWS.txt" eol="crlf" />
@@ -882,7 +907,9 @@
<copy todir="${pdir}/config">
<fileset file="${config.dir}/*" />
</copy>
-
+
+ <antcall target="package-snmp" />
+
<copy file="${pdir}/config/config.ldif"
tofile="${pdir}/config/upgrade/config.ldif.${REVISION_NUMBER}" />
@@ -1320,7 +1347,7 @@
</target>
-
+
<!-- Prepare to execute the Directory Server TestNG unit tests. -->
<target name="test.OpenDS.package.required" depends="dynamicconstants">
<condition property="test.OpenDS.package.required">
@@ -1380,7 +1407,7 @@
<javac srcdir="${unittest.testng.src.dir}" destdir="${unittest.classes.dir}"
debug="on" debuglevel="${build.debuglevel}" source="1.5"
target="1.5" deprecation="true" fork="true" memoryInitialSize="${MEM}"
- memoryMaximumSize="${MEM}">
+ memoryMaximumSize="${MEM}" excludes="org/opends/server/snmp/**">
<compilerarg value="-Xlint:all" />
<classpath>
@@ -1402,6 +1429,9 @@
includes="**/*.properties" />
</copy>
+ <!-- Compile SNMP Tests if needed -->
+ <antcall target="testsnmpinit"/>
+
<!-- Prep the TestNG XML file -->
<condition property="test.groups" value="exclude=slow">
@@ -1871,6 +1901,11 @@
<fileset dir="${testng.lib.dir}">
<include name="*.jar" />
</fileset>
+
+ <fileset dir="${opendmk.lib.dir}">
+ <include name="*.jar"/>
+ </fileset>
+
</classpath>
<jvmarg value="-Demma.coverage.out.file=${coverage.data.dir}/unit.emma" />
<jvmarg value="-Demma.coverage.out.merge=false" />
@@ -1970,8 +2005,8 @@
</target>
-
-
+
+
<target name="buildtools" depends="init"
description="Builds the build tools">
@@ -2044,8 +2079,8 @@
</exec>
</target>
-
-
+
+
<target name="compileadminsubtask">
<!-- Generate introspection API for core administration components. -->
<xslt basedir="${admin.defn.dir}" destdir="${admin.src.dir}" includes="**/*Configuration.xml" style="${admin.rules.dir}/metaMO.xsl">
@@ -2098,7 +2133,7 @@
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/meta/\2CfgDefn.properties" />
<param name="base-dir" expression="${admin.defn.dir}" />
</xslt>
-
+
<!-- Generate manifest file for core administration components. -->
<tempfile property="admin.temp.dir" destDir="${build.dir}" prefix="tmp" />
<mkdir dir="${admin.temp.dir}" />
@@ -2152,8 +2187,8 @@
</zip>
</target>
-
-
+
+
<!-- Generate example plugin package. -->
<target name="example-plugin" if="pdir">
<!-- Create folder hierarchy in temporary directory. -->
@@ -2187,4 +2222,138 @@
</zip>
<delete dir="${plugin.temp.dir}" />
</target>
+
+ <target name="snmpmessagebuild" if="isopendmkpresent">
+ <echo message="SNMP extension will be built and included in the delivery."/>
+ <echo message="OpenDMK jar file location is ${opendmk.lib.dir}/jdmkrt.jar"/>
+ </target>
+
+ <target name="snmpmessageNotbuild" unless="isopendmkpresent">
+ <echo message="SNMP extension will NOT be built/included in the delivery."/>
+ <echo message="You have to set the opendmk.lib.dir property in"/>
+ <echo message="${basedir}/build.properties file to indicate"/>
+ <echo message="the location of the OpenDMK jar files."/>
+ <echo message="To get the OpenDMK jar files please, go under"/>
+ <echo message="https://opendmk.dev.java.net/"/>
+ </target>
+
+ <target name="snmpecho" depends="snmpmessageNotbuild,snmpmessagebuild"/>
+
+ <!-- SNMP targets -->
+ <target name="cleansnmp" description="Clean up any SNMP generated source files">
+ <delete includeemptydirs="true" failonerror="false">
+ <fileset dir="${snmp.gen.dir}" includes="**/*" />
+ </delete>
+ </target>
+
+ <target name="mibgeneration" if="isopendmkpresent" description="mibgen invocation">
+ <property name="opendmktk.path" location="${opendmk.lib.dir}/jdmktk.jar"/>
+ <mkdir dir="${snmp.gen.dir}/org/opends/server/snmp" />
+ <exec dir="${snmp.mib.dir}" executable="java">
+ <arg line="-classpath ${opendmktk.path}
+ com.sun.jdmk.tools.MibGen -X:use-display-hint
+ -d ${snmp.gen.dir}/org/opends/server/snmp -mc -desc
+ -tp org.opends.server.snmp ${snmp.mib.dir}/rfc2605.txt
+ ${snmp.mib.dir}/mib_core.txt
+ ${snmp.mib.dir}/rfc2021.txt ${snmp.mib.dir}/rfc2788.txt"/>
+ </exec>
+ </target>
+
+ <target name="compilesnmp"
+ depends="init,checkjavaversion,dynamicconstants,generatemessages,compileadmin,mibgeneration"
+ if="isopendmkpresent"
+ description="Compile the SNMP Connection Handler extension source files.">
+
+ <mkdir dir="${classes.dir}" />
+
+ <javac srcdir="${snmp.gen.dir}"
+ destdir="${classes.dir}" debug="on" debuglevel="${build.debuglevel}"
+ source="1.4" target="1.4" deprecation="true" fork="true" nowarn="on"
+ memoryInitialSize="${MEM}" memoryMaximumSize="${MEM}">
+ <compilerarg value="-Xlint:all" />
+
+ <classpath>
+ <fileset dir="${lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+ <fileset dir="${opendmk.lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </javac>
+
+ <javac srcdir="${snmp.src.dir}"
+ destdir="${classes.dir}" debug="on" debuglevel="${build.debuglevel}"
+ source="1.5" target="1.5" deprecation="true" fork="true"
+ memoryInitialSize="${MEM}" memoryMaximumSize="${MEM}">
+ <compilerarg value="-Xlint:all" />
+
+ <classpath>
+ <fileset dir="${lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+ <fileset dir="${opendmk.lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </javac>
+ </target>
+
+
+ <!-- Package the SNMP Directory Server extension for distribution. -->
+ <target name="package-snmp" if="isopendmkpresent" depends="snmpecho,compilesnmp"
+ description="Package the SNMP Directory Server extension for distribution.">
+ <property name="pdir" location="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}"/>
+ <mkdir dir="${pdir}/lib/extensions" />
+ <mkdir dir="${pdir}/snmp/mib"/>
+ <mkdir dir="${pdir}/config/snmp/security" />
+ <!-- Copy security template files -->
+ <copy todir="${pdir}/config/snmp/security">
+ <fileset dir="${snmp.security.dir}"/>
+ </copy>
+ <!-- Copy the mib -->
+ <copy todir="${pdir}/snmp/mib" file="${snmp.mib.dir}/rfc2605.txt"/>
+
+ <!-- Update the config.ldif file with snmp config -->
+ <concat destfile="${pdir}/config/config.ldif" append="true">
+ <filelist dir="${snmp.config.dir}" files="config.snmp.ldif"/>
+ </concat>
+
+ <!-- Create the jar file -->
+ <jar jarfile="${pdir}/lib/extensions/snmp-mib2605.jar"
+ basedir="${classes.dir}"
+ includes="org/opends/server/snmp/**"
+ compress="true" index="true" />
+ <echo message="SNMP Extension is built"/>
+ <echo message="${pdir}/lib/extensions/snmp-mib2605.jar"/>
+ </target>
+
+ <target name="testsnmpinit" if="isopendmkpresent">
+ <!-- Compile the SNMP test cases -->
+ <mkdir dir="${unittest.classes.dir}" />
+ <javac srcdir="${unittest.testng.src.dir}" destdir="${unittest.classes.dir}"
+ debug="on" debuglevel="${build.debuglevel}" source="1.5"
+ target="1.5" deprecation="true" fork="true" memoryInitialSize="${MEM}"
+ memoryMaximumSize="${MEM}" includes="org/opends/server/snmp/**">
+ <compilerarg value="-Xlint:all" />
+
+ <classpath>
+ <fileset dir="${lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+
+ <fileset dir="${testng.lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+
+ <fileset dir="${opendmk.lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+
+ <path refid="run.classpath" />
+ <path refid="quickSetup.classpath" />
+ </classpath>
+ </javac>
+ </target>
+
</project>
diff --git a/opendj-sdk/opends/nbproject/ide-file-targets.xml b/opendj-sdk/opends/nbproject/ide-file-targets.xml
index 95a30b7..bb8f6a4 100644
--- a/opendj-sdk/opends/nbproject/ide-file-targets.xml
+++ b/opendj-sdk/opends/nbproject/ide-file-targets.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project basedir=".." name="Directory Server-IDE">
-
+
<!-- Import build.xml properties and targets -->
<import file="../build.xml"/>
@@ -11,8 +11,11 @@
<pathelement location="build/quicksetup/classes"/>
<pathelement location="build/unit-tests/classes"/>
<pathelement location="build/dsml/classes"/>
+ <fileset dir="${opendmk.lib.dir}">
+ <include name="*.jar"/>
+ </fileset>
</path>
-
+
<!-- Prepare testng unit tests environment -->
<taskdef resource="testngtasks">
<classpath>
@@ -85,7 +88,7 @@
<fail unless="files">Must set property 'files'</fail>
<echo message="Compiling source (normal): ${files}"/>
<!-- TODO decide on and define some value for ${build.classes.dir} -->
- <mkdir dir="{classes.dir}"/>
+ <mkdir dir="${classes.dir}"/>
<javac destdir="${classes.dir}" includes="${files}" source="1.5" srcdir="src/server">
<classpath refid="opends.path"/>
</javac>
@@ -109,7 +112,7 @@
<!-- -->
<target depends="dynamicconstants" name="run-selected-file-in-server">
<fail unless="run.class">Must set property 'run.class'</fail>
- <property name="pdir" location="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}"/>
+ <property location="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" name="pdir"/>
<ant antfile="build.xml" inheritall="false" target="dynamicconstants"/>
<java classname="${run.class}" failonerror="true" fork="true">
<classpath refid="opends.path"/>
@@ -127,7 +130,7 @@
<!-- -->
<target depends="dynamicconstants" name="debug-selected-file-in-server">
<fail unless="debug.class">Must set property 'debug.class'</fail>
- <property name="pdir" location="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}"/>
+ <property location="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" name="pdir"/>
<ant antfile="build.xml" inheritall="false" target="dynamicconstants"/>
<nbjpdastart addressproperty="jpda.address" name="Directory Server" transport="dt_socket">
<classpath refid="opends.path"/>
@@ -152,8 +155,8 @@
<target name="compile-selected-files-in-ads">
<fail unless="files">Must set property 'files'</fail>
<echo message="Compiling source (normal): ${files}"/>
- <mkdir dir="build/build-tools/classes"/>
- <javac destdir="build/build-tools/classes" includes="${files}" source="1.5" srcdir="src/ads">
+ <mkdir dir="${classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${classes.dir}" includes="${files}" source="1.5" srcdir="src/ads">
<classpath refid="opends.path"/>
</javac>
</target>
@@ -164,8 +167,8 @@
<target name="compile-selected-files-in-build-tools">
<fail unless="files">Must set property 'files'</fail>
<echo message="Compiling source (normal): ${files}"/>
- <mkdir dir="build/build-tools/classes"/>
- <javac destdir="build/build-tools/classes" includes="${files}" source="1.5" srcdir="src/build-tools">
+ <mkdir dir="${buildtools.classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${buildtools.classes.dir}" includes="${files}" source="1.5" srcdir="src/build-tools">
<classpath refid="opends.path"/>
</javac>
</target>
@@ -176,8 +179,8 @@
<target name="compile-selected-files-in-guitools">
<fail unless="files">Must set property 'files'</fail>
<echo message="Compiling source (normal): ${files}"/>
- <mkdir dir="build/build-tools/classes"/>
- <javac destdir="build/build-tools/classes" includes="${files}" source="1.5" srcdir="src/guitools">
+ <mkdir dir="${classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${classes.dir}" includes="${files}" source="1.5" srcdir="src/guitools">
<classpath refid="opends.path"/>
</javac>
</target>
@@ -188,9 +191,9 @@
<target name="compile-selected-files-in-messages-src">
<fail unless="files">Must set property 'files'</fail>
<echo message="Compiling source (normal): ${files}"/>
- <mkdir dir="build/build-tools/classes"/>
- <javac destdir="build/build-tools/classes" includes="${files}" source="1.5" srcdir="src/messages/src">
- <classpath path="build/classes:build/build-tools/classes:lib/activation.jar:lib/aspectjrt.jar:lib/je.jar:lib/mail.jar:build/quicksetup/classes:build/build-tools/build-tools.jar:build/unit-tests/classes:ext/testng/lib/testng-5.7b-jdk15.jar:ext/ant/lib/ant.jar:ext/svnkit/svnkit.jar:ext/emma/lib/emma.jar:build/dsml/classes:resource/dsml/lib/jaxb-api.jar:resource/dsml/lib/jaxb-impl.jar:resource/dsml/lib/jsr173_1.0_api.jar:resource/dsml/lib/saaj-1.3.jar:resource/dsml/lib/saaj-impl-1.3.jar:resource/dsml/lib/j2ee.jar"/>
+ <mkdir dir="${classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${classes.dir}" includes="${files}" source="1.5" srcdir="src/messages/src">
+ <classpath refid="opends.path"/>
</javac>
</target>
@@ -199,9 +202,9 @@
<!-- -->
<target name="compile-selected-files-in-quicksetup">
<fail unless="files">Must set property 'files'</fail>
- <mkdir dir="build/build-tools/classes"/>
- <javac destdir="build/build-tools/classes" includes="${files}" source="1.5" srcdir="src/quicksetup">
- <classpath path="build/classes:build/build-tools/classes:lib/activation.jar:lib/aspectjrt.jar:lib/je.jar:lib/mail.jar:build/quicksetup/classes:build/build-tools/build-tools.jar:build/unit-tests/classes:ext/testng/lib/testng-5.7b-jdk15.jar:ext/ant/lib/ant.jar:ext/svnkit/svnkit.jar:ext/emma/lib/emma.jar:build/dsml/classes:resource/dsml/lib/jaxb-api.jar:resource/dsml/lib/jaxb-impl.jar:resource/dsml/lib/jsr173_1.0_api.jar:resource/dsml/lib/saaj-1.3.jar:resource/dsml/lib/saaj-impl-1.3.jar:resource/dsml/lib/j2ee.jar"/>
+ <mkdir dir="${quicksetup.classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${quicksetup.classes.dir}" includes="${files}" source="1.5" srcdir="src/quicksetup">
+ <classpath refid="opends.path"/>
</javac>
</target>
@@ -211,9 +214,20 @@
<target name="compile-selected-files-in-dsml">
<fail unless="files">Must set property 'files'</fail>
<echo message="Compiling source (normal): ${files}"/>
- <mkdir dir="build/build-tools/classes"/>
- <javac destdir="build/build-tools/classes" includes="${files}" source="1.5" srcdir="src/dsml">
- <classpath path="build/classes:build/build-tools/classes:lib/activation.jar:lib/aspectjrt.jar:lib/je.jar:lib/mail.jar:build/quicksetup/classes:build/build-tools/build-tools.jar:build/unit-tests/classes:ext/testng/lib/testng-5.7b-jdk15.jar:ext/ant/lib/ant.jar:ext/svnkit/svnkit.jar:ext/emma/lib/emma.jar:build/dsml/classes:resource/dsml/lib/jaxb-api.jar:resource/dsml/lib/jaxb-impl.jar:resource/dsml/lib/jsr173_1.0_api.jar:resource/dsml/lib/saaj-1.3.jar:resource/dsml/lib/saaj-impl-1.3.jar:resource/dsml/lib/j2ee.jar"/>
+ <mkdir dir="${dsml.classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${dsml.classes.dir}" includes="${files}" source="1.5" srcdir="src/dsml">
+ <classpath refid="opends.path"/>
+ </javac>
+ </target>
+
+ <!-- -->
+ <!-- Compile a selected file in src/snmp/src folder -->
+ <!-- -->
+ <target name="compile-selected-files-in-snmp">
+ <fail unless="files">Must set property 'files'</fail>
+ <mkdir dir="${classes.dir}"/>
+ <javac debug="on" debuglevel="${build.debuglevel}" destdir="${classes.dir}" includes="${files}" source="1.5" srcdir="src/snmp/src">
+ <classpath refid="opends.path"/>
</javac>
</target>
diff --git a/opendj-sdk/opends/nbproject/project.xml b/opendj-sdk/opends/nbproject/project.xml
index a7737d1..3fa6a21 100644
--- a/opendj-sdk/opends/nbproject/project.xml
+++ b/opendj-sdk/opends/nbproject/project.xml
@@ -127,7 +127,7 @@
<target>package</target>
</action>
<action name="debug">
- <script>nbproject/ide-file-targets.xml</script>
+ <script>nbproject/ide-targets.xml</script>
<target>debug-nb</target>
</action>
<action name="run.single">
@@ -286,35 +286,48 @@
</arity>
</context>
</action>
+ <action name="compile.single">
+ <script>nbproject/ide-file-targets.xml</script>
+ <target>compile-selected-files-in-snmp</target>
+ <context>
+ <property>files</property>
+ <folder>src/snmp/src</folder>
+ <pattern>\.java$</pattern>
+ <format>relative-path</format>
+ <arity>
+ <separated-files>,</separated-files>
+ </arity>
+ </context>
+ </action>
</ide-actions>
<export>
<type>folder</type>
<location>build/build-tools/classes</location>
- <script>nbproject/nbjdk.xml</script>
+ <script>build.xml</script>
<build-target>package</build-target>
</export>
<export>
<type>folder</type>
<location>build/classes</location>
- <script>nbproject/nbjdk.xml</script>
+ <script>build.xml</script>
<build-target>package</build-target>
</export>
<export>
<type>folder</type>
<location>build/quicksetup/classes</location>
- <script>nbproject/nbjdk.xml</script>
+ <script>build.xml</script>
<build-target>package</build-target>
</export>
<export>
<type>folder</type>
<location>build/unit-tests/classes</location>
- <script>nbproject/nbjdk.xml</script>
+ <script>build.xml</script>
<build-target>package</build-target>
</export>
<export>
<type>folder</type>
<location>build/dsml/classes</location>
- <script>nbproject/nbjdk.xml</script>
+ <script>build.xml</script>
<build-target>package</build-target>
</export>
<view>
@@ -389,7 +402,9 @@
<ide-action name="debug"/>
</context-menu>
</view>
- <subprojects/>
+ <subprojects>
+ <project>.</project>
+ </subprojects>
</general-data>
<java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
<compilation-unit>
diff --git a/opendj-sdk/opends/resource/admin/abbreviations.xsl b/opendj-sdk/opends/resource/admin/abbreviations.xsl
index fcf46ad..64d52d2 100644
--- a/opendj-sdk/opends/resource/admin/abbreviations.xsl
+++ b/opendj-sdk/opends/resource/admin/abbreviations.xsl
@@ -52,7 +52,7 @@
or $value = 'md5' or $value = 'sha1' or $value = 'sha256'
or $value = 'sha384' or $value = 'sha512' or $value = 'tls'
or $value = 'des' or $value = 'aes' or $value = 'rc4'
- or $value = 'db'
+ or $value = 'db' or $value = 'snmp'
"/>
</xsl:template>
</xsl:stylesheet>
diff --git a/opendj-sdk/opends/resource/schema/02-config.ldif b/opendj-sdk/opends/resource/schema/02-config.ldif
index a3be337..54810e4 100644
--- a/opendj-sdk/opends/resource/schema/02-config.ldif
+++ b/opendj-sdk/opends/resource/schema/02-config.ldif
@@ -2176,6 +2176,82 @@
NAME 'ds-cfg-num-update-replay-threads'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.448
+ NAME 'ds-cfg-trap-port'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.449
+ NAME 'ds-cfg-version'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.450
+ NAME 'ds-cfg-community'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.451
+ NAME 'ds-cfg-allowed-manager'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.452
+ NAME 'ds-cfg-allowed-user'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.453
+ NAME 'ds-cfg-security-level'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.454
+ NAME 'ds-cfg-traps-community'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.455
+ NAME 'ds-cfg-traps-destination'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.456
+ NAME 'ds-cfg-security-agent-file'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.457
+ NAME 'ds-cfg-registered-mbean'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.458
+ NAME 'ds-cfg-template-username'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.459
+ NAME 'ds-cfg-template-auth-algorithm'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.460
+ NAME 'ds-cfg-template-authkey'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.461
+ NAME 'ds-cfg-template-priv-algorithm'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.462
+ NAME 'ds-cfg-template-privkey'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.463
+ NAME 'ds-cfg-opendmk-jarfile'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
objectClasses: ( 1.3.6.1.4.1.26027.1.2.1
NAME 'ds-cfg-access-control-handler'
SUP top
@@ -3676,3 +3752,25 @@
STRUCTURAL
MUST ( ds-cfg-backend )
X-ORIGIN 'OpenDS Directory Server' )
+objectClasses: ( 1.3.6.1.4.1.26027.1.2.181
+ NAME 'ds-cfg-snmp-connection-handler'
+ SUP ds-cfg-connection-handler
+ STRUCTURAL
+ MUST ( ds-cfg-listen-port $
+ ds-cfg-trap-port )
+ MAY ( ds-cfg-version $
+ ds-cfg-traps-destination $
+ ds-cfg-registered-mbean $
+ ds-cfg-community $
+ ds-cfg-allowed-manager $
+ ds-cfg-allowed-user $
+ ds-cfg-security-level $
+ ds-cfg-traps-community $
+ ds-cfg-security-agent-file $
+ ds-cfg-template-username $
+ ds-cfg-template-auth-algorithm $
+ ds-cfg-template-authkey $
+ ds-cfg-template-priv-algorithm $
+ ds-cfg-template-privkey $
+ ds-cfg-opendmk-jarfile )
+ X-ORIGIN 'OpenDS Directory Server' )
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/SNMPConnectionHandlerConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/SNMPConnectionHandlerConfiguration.xml
new file mode 100644
index 0000000..a360576
--- /dev/null
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/SNMPConnectionHandlerConfiguration.xml
@@ -0,0 +1,435 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! Common Development and Distribution License, Version 1.0 only
+ ! (the "License"). You may not use this file except in compliance
+ ! with the License.
+ !
+ ! You can obtain a copy of the license at
+ ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ ! See the License for the specific language governing permissions
+ ! and limitations under the License.
+ !
+ ! When distributing Covered Code, include this CDDL HEADER in each
+ ! file and include the License file at
+ ! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ ! add the following below this CDDL HEADER, with the fields enclosed
+ ! by brackets "[]" replaced with your own identifying information:
+ ! Portions Copyright [yyyy] [name of copyright owner]
+ !
+ ! CDDL HEADER END
+ !
+ !
+ ! Portions Copyright 2008 Sun Microsystems, Inc.
+! -->
+<adm:managed-object name="snmp-connection-handler"
+ plural-name="snmp-connection-handlers"
+ package="org.opends.server.admin.std"
+ extends="connection-handler"
+ xmlns:adm="http://www.opends.org/admin"
+ xmlns:ldap="http://www.opends.org/admin-ldap" >
+ <adm:synopsis>
+ The
+ <adm:user-friendly-name />
+ can be used to process SNMP requests to retrieve monitoring information
+ described by the MIB 2605.
+ </adm:synopsis>
+ <adm:description>
+ The SNMP connection handler will process SNMP requests sent by SNMP
+ Managers to retrieve information described the MIB 2605. To enable
+ the SNMP Connection Handler, the ds-cfg-opendmk-jarfile parameter
+ has to be set to the OpenDMK jar files location.
+ </adm:description>
+
+ <!-- Connection Handler ldap profile -->
+ <adm:profile name="ldap">
+ <ldap:object-class>
+ <ldap:name>ds-cfg-snmp-connection-handler</ldap:name>
+ <ldap:superior>ds-cfg-connection-handler</ldap:superior>
+ </ldap:object-class>
+ </adm:profile>
+ <!-- Class to instanciate -->
+ <adm:property-override name="java-class" advanced="true">
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>
+ org.opends.server.snmp.SNMPConnectionHandler
+ </adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ </adm:property-override>
+ <!-- SNMP Port -->
+ <adm:property-reference name="listen-port" />
+ <adm:property name="trap-port" mandatory="true">
+ <adm:synopsis>
+ Specifies the port to use to send SNMP Traps.
+ </adm:synopsis>
+ <adm:syntax>
+ <adm:integer />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-trap-port</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- SNMP Version -->
+ <adm:property name="version">
+ <adm:synopsis>
+ Specifies Supported SNMP Version : v1, v2, v3.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>v2</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-version</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- SNMP Community or Context Name -->
+ <adm:property name="community" multi-valued="true">
+ <adm:synopsis>
+ Specifies the v1,v2 community or the v3 context name allowed to
+ access the MIB 2605 monitoring information or the USM MIB.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>OpenDS</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-community</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- SNMP V1/V2 Allowed managers -->
+ <adm:property name="allowed-manager" multi-valued="true">
+ <adm:synopsis>
+ Specifies the hosts of the managers to be granted the access rights.
+ This property is required for SNMP v1 and v2 security configuration.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:alias>
+ <adm:synopsis>
+ If the list is empty, no access control is done.
+ </adm:synopsis>
+ </adm:alias>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-allowed-manager</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- SNMP V3 Allowed users -->
+ <adm:property name="allowed-user" multi-valued="true">
+ <adm:synopsis>
+ Specifies the users to be granted the access rights. This property
+ is required for SNMP v3 security configuration.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:alias>
+ <adm:synopsis>
+ An asterik (*) opens access to all users.
+ </adm:synopsis>
+ </adm:alias>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-allowed-user</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- SNMP V3 Security level -->
+ <adm:property name="security-level">
+ <adm:synopsis>
+ Specifies the type of security level : NoAuthNoPriv : No security
+ mechanisms activated, AuthNoPriv : Authentication activated with no
+ privacy, AuthPriv : Authentication with privacy activated.
+ This property id required for SNMP V3 security configuration.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>authnopriv</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:enumeration>
+ <adm:value name="noauthnopriv">
+ <adm:synopsis>
+ No security mechanisms activated.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="authnopriv">
+ <adm:synopsis>
+ Authentication activated with no privacy.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="authpriv">
+ <adm:synopsis>
+ Authentication with privacy activated.
+ </adm:synopsis>
+ </adm:value>
+ </adm:enumeration>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-security-level</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Trap Community -->
+ <adm:property name="traps-community" >
+ <adm:synopsis>
+ Specifies the community string that must be include in the traps
+ sent to define managers (trap-destinations).
+ This property is used in the context of SNMP v1, v2 and v3.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>OpenDS</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-traps-community</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Traps destinations -->
+ <adm:property name="traps-destination" multi-valued="true">
+ <adm:synopsis>
+ Specifies the hosts to which V1 traps will be sent. V1 Traps are
+ sent to every host listed.
+ </adm:synopsis>
+ <adm:description>
+ If this list is empty, V1 traps are sent to "localhost".
+ Each host in the list must be identifed by its name or complete IP Addess.
+ </adm:description>
+ <adm:default-behavior>
+ <adm:alias>
+ <adm:synopsis>
+ If the list is empty, V1 traps are sent to "localhost".
+ </adm:synopsis>
+ </adm:alias>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-traps-destination</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Agent Engine Security USM Configuration -->
+ <adm:property name="security-agent-file">
+ <adm:synopsis>
+ Specifies the USM security configuration to receive authenticated
+ only SNMP requests.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>
+ config/snmp/security/opends-snmp.security
+ </adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-security-agent-file</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- SNMP Registration or not -->
+ <adm:property name="registered-mbean">
+ <adm:synopsis>
+ Indicates whether the SNMP objects have to be registered in the
+ Directory Server MBeanServer or not allowing to access SNMP Objects
+ with RMI connector if enabled.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>false</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:boolean />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-registered-mbean</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!--User Template definitions -->
+ <!--User Name -->
+ <adm:property name="template-username">
+ <adm:synopsis>
+ Indicates the user name for the template definitions.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>defaultUser</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-template-username</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Authentication Algoritm -->
+ <adm:property name="template-auth-algorithm">
+ <adm:synopsis>
+ Specifies the type of Authentication algorithm that must be used for
+ SNMP V3 request for the specified user.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>usmhmacmd5authprotocol</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:enumeration>
+ <adm:value name="usmhmacmd5authprotocol">
+ <adm:synopsis>
+ usmHMACMD5AuthProtocol Authentication algorithm.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="usmhmacshaauthprotocol">
+ <adm:synopsis>
+ usmHMACSHAAuthProtocol Authentication algorithm.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="usmnoauthprotocol">
+ <adm:synopsis>
+ usmNoAuthProtocol Authentication algorithm.
+ </adm:synopsis>
+ </adm:value>
+ </adm:enumeration>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-template-auth-algorithm</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Authentication key -->
+ <adm:property name="template-authkey">
+ <adm:synopsis>
+ Any text password or any hexadecimal key starting with 0x; for
+ example, 0x0098768905AB67EFAA855A453B665B12, of size: 0 to 32
+ inclusive for HMACMD5 or 0 to 40 inclusive for HMACSHA.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>password</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-template-authkey</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Privacy Algorithm -->
+ <adm:property name="template-priv-algorithm">
+ <adm:synopsis>
+ Specifies the type of Privacy algorithm that must be used for
+ SNMP V3 request for the specified user.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>usmdesprivprotocol</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:enumeration>
+ <adm:value name="usmdesprivprotocol">
+ <adm:synopsis>
+ usmDESPrivProtocol Privacy algorithm.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="usmnoprivprotocol">
+ <adm:synopsis>
+ usmNoPrivProtocol Privacy algorithm.
+ </adm:synopsis>
+ </adm:value>
+ </adm:enumeration>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-template-priv-algorithm</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <!-- Privacy key -->
+ <adm:property name="template-privkey">
+ <adm:synopsis>
+ Any text password or any hexadecimal key starting with 0x;
+ for example, 0x0098768905AB67EFAA855A453B665B12, of size: 0 to 32
+ inclusive for HMACMD5 or 0 to 40 inclusive for HMACSHA.
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>password</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-template-privkey</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="opendmk-jarfile">
+ <adm:synopsis>
+ Indicates the OpenDMK runtime jar file location
+ </adm:synopsis>
+ <adm:default-behavior>
+ <adm:undefined />
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-opendmk-jarfile</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+</adm:managed-object>
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/messages/messages/protocol.properties b/opendj-sdk/opends/src/messages/messages/protocol.properties
index 7b2ef83..29fc529 100644
--- a/opendj-sdk/opends/src/messages/messages/protocol.properties
+++ b/opendj-sdk/opends/src/messages/messages/protocol.properties
@@ -1435,3 +1435,28 @@
SEVERE_ERR_LDIF_CONNHANDLER_CANNOT_DELETE_456=An error occurred while the \
LDIF connection handler was attempting to delete processed file %s: %s
SEVERE_ERR_CONNHANDLER_ADDRESS_INUSE_457=Address already in use
+INFO_SNMP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_1458=SNMP port on \
+ which this connection handler accepts SNMP requests. Changes \
+ to this configuration attribute will not take effect until the connection \
+ handler is disabled and re-enabled, or until the Directory Server is \
+ restarted
+SEVERE_ERR_SNMP_CONNHANDLER_NO_LISTEN_PORT_1459=No listen port was defined \
+ using configuration ds-cfg-listen-port in configuration entry %s. This is a \
+ required attribute
+SEVERE_ERR_SNMP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT_1460=An unexpected \
+ error occurred while processing the ds-cfg-snmp-port attribute in \
+ configuration entry %s, which is used to specify the port on which to listen \
+ for client connections: %s
+SEVERE_ERR_SNMP_CONNHANDLER_CANNOT_BE_STARTED_1461=An unexpected \
+ error occurred when this connection handler started
+SEVERE_ERR_SNMP_CONNHANDLER_NO_CONFIGURATION_1462=No Configuration was defined \
+ for this connection handler. The configuration parameters ds-cfg-listen-port \
+ and ds-cfg-trap-port are required by the connection handler to start
+SEVERE_ERR_SNMP_CONNHANDLER_TRAPS_DESTINATION_1463=Traps Destination %s is \
+ an unknown host
+SEVERE_ERR_SNMP_CONNHANDLER_NO_OPENDMK_JARFILES_1464=You do not have the \
+ appropriated OpenDMK jar files to enable the SNMP Connection Handler. \
+ Please go under http://opendmk.dev.java.net and set the \
+ ds-cfg-opendmk-jarfile configuration parameter to set the full path \
+ of the required jdmkrt.jar file. The SNMP connection Handler didn't started
+
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java b/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java
index 6d588f4..952ae68 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2007-2008 Sun Microsystems, Inc.
*/
package org.opends.server.config;
import org.opends.messages.Message;
@@ -51,6 +51,7 @@
import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.AlertGenerator;
+import org.opends.server.api.ClientConnection;
import org.opends.server.api.DirectoryServerMBean;
import org.opends.server.api.InvokableComponent;
import org.opends.server.api.MonitorProvider;
@@ -73,6 +74,7 @@
import static org.opends.server.util.StaticUtils.*;
import org.opends.server.protocols.jmx.JmxClientConnection;
import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.protocols.internal.InternalClientConnection;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.protocols.internal.InternalSearchOperation ;
import org.opends.server.types.LDAPException;
@@ -488,8 +490,8 @@
{
//
// Get the jmx Client connection
- JmxClientConnection jmxClientConnection = getClientConnection();
- if (jmxClientConnection == null)
+ ClientConnection clientConnection = getClientConnection();
+ if (clientConnection == null)
{
return null;
}
@@ -519,19 +521,25 @@
// Perform the Ldap operation for
// - ACI Check
// - Loggin purpose
- InternalSearchOperation op = jmxClientConnection.processSearch(
- new ASN1OctetString(configEntryDN.toString()),
- SearchScope.BASE_OBJECT, filter);
-
+ InternalSearchOperation op=null;
+ if (clientConnection instanceof JmxClientConnection) {
+ op = ((JmxClientConnection)clientConnection).processSearch(
+ new ASN1OctetString(configEntryDN.toString()),
+ SearchScope.BASE_OBJECT, filter);
+ }
+ else if (clientConnection instanceof InternalClientConnection) {
+ op = ((InternalClientConnection)clientConnection).processSearch(
+ new ASN1OctetString(configEntryDN.toString()),
+ SearchScope.BASE_OBJECT, filter);
+ }
ResultCode rc = op.getResultCode();
- if (rc != ResultCode.SUCCESS)
- {
- jmxClientConnection = null ;
+ if (rc != ResultCode.SUCCESS) {
+ clientConnection = null ;
- Message message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
- get(String.valueOf(attributeName), String.valueOf(configEntryDN),
- String.valueOf(op.getErrorMessage()));
- throw new AttributeNotFoundException(message.toString());
+ Message message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
+ get(String.valueOf(attributeName), String.valueOf(configEntryDN),
+ String.valueOf(op.getErrorMessage()));
+ throw new AttributeNotFoundException(message.toString());
}
try
@@ -584,8 +592,8 @@
//
// Get the jmx Client connection
- JmxClientConnection jmxClientConnection = getClientConnection();
- if (jmxClientConnection == null)
+ ClientConnection clientConnection = getClientConnection();
+ if (clientConnection == null)
{
return null;
}
@@ -606,14 +614,21 @@
// Perform the Ldap operation for
// - ACI Check
// - Loggin purpose
- InternalSearchOperation op = jmxClientConnection.processSearch(
+ InternalSearchOperation op=null;
+ if (clientConnection instanceof JmxClientConnection) {
+ op = ((JmxClientConnection)clientConnection).processSearch(
new ASN1OctetString(configEntryDN.toString()),
SearchScope.BASE_OBJECT, filter);
-
+ }
+ else if (clientConnection instanceof InternalClientConnection) {
+ op = ((InternalClientConnection)clientConnection).processSearch(
+ new ASN1OctetString(configEntryDN.toString()),
+ SearchScope.BASE_OBJECT, filter);
+ }
ResultCode rc = op.getResultCode();
if (rc != ResultCode.SUCCESS)
{
- jmxClientConnection = null ;
+ clientConnection = null ;
return null;
}
@@ -801,8 +816,8 @@
*/
public MBeanInfo getMBeanInfo()
{
- JmxClientConnection jmxClientConnection = getClientConnection();
- if (jmxClientConnection == null)
+ ClientConnection clientConnection = getClientConnection();
+ if (clientConnection == null)
{
return new MBeanInfo(CLASS_NAME, null, null, null, null, null);
}
@@ -871,9 +886,9 @@
*
* @return The JmxClientConnection.
*/
- private JmxClientConnection getClientConnection()
+ private ClientConnection getClientConnection()
{
- JmxClientConnection jmxClientConnection=null;
+ ClientConnection clientConnection=null;
java.security.AccessControlContext acc = java.security.AccessController
.getContext();
try
@@ -882,12 +897,12 @@
.getSubject(acc);
if(subject != null) {
Set privateCreds = subject.getPrivateCredentials(Credential.class);
- jmxClientConnection = ((Credential) privateCreds
+ clientConnection = ((Credential) privateCreds
.iterator().next()).getClientConnection();
}
}
catch (Exception e) {}
- return jmxClientConnection;
+ return clientConnection;
}
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/Credential.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/Credential.java
index 0028049..973b964 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/Credential.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/Credential.java
@@ -26,6 +26,8 @@
*/
package org.opends.server.protocols.jmx;
+import org.opends.server.api.ClientConnection;
+
/**
* Represents a Ldap credential used for JMX connection authentication.
@@ -41,28 +43,28 @@
/**
* The Client connection to be used.
*/
- private JmxClientConnection jmxClientConnection;
+ private ClientConnection clientConnection;
/**
* Default Constructor.
*
- * @param jmxClientConnection
+ * @param clientConnection
* The representation of this credential is a Jmx Client connection
* that will handle incoming requests.
*/
- public Credential(JmxClientConnection jmxClientConnection)
+ public Credential(ClientConnection clientConnection)
{
- this.jmxClientConnection = jmxClientConnection;
+ this.clientConnection = clientConnection;
}
/**
* Returns the associated Client connection.
*
- * @return the associated JmxClientConnection object. Can be null
+ * @return the associated ClientConnection object. Can be null
*/
- public JmxClientConnection getClientConnection()
+ public ClientConnection getClientConnection()
{
- return jmxClientConnection;
+ return clientConnection;
}
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/OpendsRMIJRMPServerImpl.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/OpendsRMIJRMPServerImpl.java
index 97476b9..c4169c0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/OpendsRMIJRMPServerImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/OpendsRMIJRMPServerImpl.java
@@ -80,8 +80,9 @@
{
Set<Credential> privateCreds = subject
.getPrivateCredentials(Credential.class);
- JmxClientConnection jmxClientConnection = privateCreds.iterator()
- .next().getClientConnection();
+ JmxClientConnection jmxClientConnection =
+ (JmxClientConnection)
+ privateCreds.iterator().next().getClientConnection();
jmxClientConnection.jmxConnectionID = connectionId;
}
diff --git a/opendj-sdk/opends/src/snmp/resource/config/config.snmp.ldif b/opendj-sdk/opends/src/snmp/resource/config/config.snmp.ldif
new file mode 100644
index 0000000..6098f10
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/config/config.snmp.ldif
@@ -0,0 +1,11 @@
+
+dn: cn=SNMP Connection Handler,cn=Connection Handlers,cn=config
+objectClass: top
+objectClass: ds-cfg-connection-handler
+objectClass: ds-cfg-snmp-connection-handler
+cn: SNMP Connection Handler
+ds-cfg-java-class: org.opends.server.snmp.SNMPConnectionHandler
+ds-cfg-enabled: false
+ds-cfg-trap-port: 162
+ds-cfg-listen-port: 161
+
diff --git a/opendj-sdk/opends/src/snmp/resource/mib/SNMPV2-SMI.txt b/opendj-sdk/opends/src/snmp/resource/mib/SNMPV2-SMI.txt
new file mode 100644
index 0000000..35cfde0
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/mib/SNMPV2-SMI.txt
@@ -0,0 +1,346 @@
+SNMPv2-SMI DEFINITIONS ::= BEGIN
+
+-- the path to the root
+
+org OBJECT IDENTIFIER ::= { iso 3 } -- "iso" = 1
+dod OBJECT IDENTIFIER ::= { org 6 }
+internet OBJECT IDENTIFIER ::= { dod 1 }
+
+directory OBJECT IDENTIFIER ::= { internet 1 }
+
+mgmt OBJECT IDENTIFIER ::= { internet 2 }
+mib-2 OBJECT IDENTIFIER ::= { mgmt 1 }
+transmission OBJECT IDENTIFIER ::= { mib-2 10 }
+
+experimental OBJECT IDENTIFIER ::= { internet 3 }
+
+private OBJECT IDENTIFIER ::= { internet 4 }
+enterprises OBJECT IDENTIFIER ::= { private 1 }
+
+security OBJECT IDENTIFIER ::= { internet 5 }
+
+snmpV2 OBJECT IDENTIFIER ::= { internet 6 }
+
+-- transport domains
+snmpDomains OBJECT IDENTIFIER ::= { snmpV2 1 }
+
+-- transport proxies
+snmpProxys OBJECT IDENTIFIER ::= { snmpV2 2 }
+
+-- module identities
+snmpModules OBJECT IDENTIFIER ::= { snmpV2 3 }
+
+-- Extended UTCTime, to allow dates with four-digit years
+-- (Note that this definition of ExtUTCTime is not to be IMPORTed
+-- by MIB modules.)
+ExtUTCTime ::= OCTET STRING(SIZE(11 | 13))
+ -- format is YYMMDDHHMMZ or YYYYMMDDHHMMZ
+
+ -- where: YY - last two digits of year (only years
+ -- between 1900-1999)
+ -- YYYY - last four digits of the year (any year)
+ -- MM - month (01 through 12)
+ -- DD - day of month (01 through 31)
+ -- HH - hours (00 through 23)
+ -- MM - minutes (00 through 59)
+ -- Z - denotes GMT (the ASCII character Z)
+ --
+ -- For example, "9502192015Z" and "199502192015Z" represent
+ -- 8:15pm GMT on 19 February 1995. Years after 1999 must use
+ -- the four digit year format. Years 1900-1999 may use the
+ -- two or four digit format.
+
+-- definitions for information modules
+
+MODULE-IDENTITY MACRO ::=
+BEGIN
+ TYPE NOTATION ::=
+ "LAST-UPDATED" value(Update ExtUTCTime)
+ "ORGANIZATION" Text
+ "CONTACT-INFO" Text
+ "DESCRIPTION" Text
+ RevisionPart
+
+ VALUE NOTATION ::=
+ value(VALUE OBJECT IDENTIFIER)
+
+ RevisionPart ::=
+ Revisions
+ | empty
+ Revisions ::=
+ Revision
+ | Revisions Revision
+ Revision ::=
+ "REVISION" value(Update ExtUTCTime)
+ "DESCRIPTION" Text
+
+ -- a character string as defined in section 3.1.1
+ Text ::= value(IA5String)
+END
+
+OBJECT-IDENTITY MACRO ::=
+BEGIN
+ TYPE NOTATION ::=
+ "STATUS" Status
+ "DESCRIPTION" Text
+
+ ReferPart
+
+ VALUE NOTATION ::=
+ value(VALUE OBJECT IDENTIFIER)
+
+ Status ::=
+ "current"
+ | "deprecated"
+ | "obsolete"
+
+ ReferPart ::=
+ "REFERENCE" Text
+ | empty
+
+ -- a character string as defined in section 3.1.1
+ Text ::= value(IA5String)
+END
+
+-- names of objects
+-- (Note that these definitions of ObjectName and NotificationName
+-- are not to be IMPORTed by MIB modules.)
+
+ObjectName ::=
+ OBJECT IDENTIFIER
+
+NotificationName ::=
+ OBJECT IDENTIFIER
+
+-- syntax of objects
+
+-- the "base types" defined here are:
+-- 3 built-in ASN.1 types: INTEGER, OCTET STRING, OBJECT IDENTIFIER
+-- 8 application-defined types: Integer32, IpAddress, Counter32,
+-- Gauge32, Unsigned32, TimeTicks, Opaque, and Counter64
+
+ObjectSyntax ::=
+ CHOICE {
+ simple
+ SimpleSyntax,
+ -- note that SEQUENCEs for conceptual tables and
+ -- rows are not mentioned here...
+
+ application-wide
+ ApplicationSyntax
+ }
+
+-- built-in ASN.1 types
+
+SimpleSyntax ::=
+ CHOICE {
+ -- INTEGERs with a more restrictive range
+ -- may also be used
+ integer-value -- includes Integer32
+ INTEGER (-2147483648..2147483647),
+ -- OCTET STRINGs with a more restrictive size
+ -- may also be used
+ string-value
+ OCTET STRING (SIZE (0..65535)),
+ objectID-value
+ OBJECT IDENTIFIER
+ }
+
+-- indistinguishable from INTEGER, but never needs more than
+-- 32-bits for a two's complement representation
+Integer32 ::=
+ INTEGER (-2147483648..2147483647)
+
+-- application-wide types
+
+ApplicationSyntax ::=
+ CHOICE {
+ ipAddress-value
+ IpAddress,
+ counter-value
+ Counter32,
+ timeticks-value
+ TimeTicks,
+ arbitrary-value
+ Opaque,
+ big-counter-value
+ Counter64,
+ unsigned-integer-value -- includes Gauge32
+ Unsigned32
+ }
+
+-- in network-byte order
+
+-- (this is a tagged type for historical reasons)
+IpAddress ::=
+ [APPLICATION 0]
+ IMPLICIT OCTET STRING (SIZE (4))
+
+-- this wraps
+Counter32 ::=
+ [APPLICATION 1]
+ IMPLICIT INTEGER (0..4294967295)
+
+-- this doesn't wrap
+Gauge32 ::=
+ [APPLICATION 2]
+ IMPLICIT INTEGER (0..4294967295)
+
+-- an unsigned 32-bit quantity
+-- indistinguishable from Gauge32
+Unsigned32 ::=
+ [APPLICATION 2]
+ IMPLICIT INTEGER (0..4294967295)
+
+-- hundredths of seconds since an epoch
+TimeTicks ::=
+ [APPLICATION 3]
+ IMPLICIT INTEGER (0..4294967295)
+
+-- for backward-compatibility only
+Opaque ::=
+ [APPLICATION 4]
+ IMPLICIT OCTET STRING
+
+-- for counters that wrap in less than one hour with only 32 bits
+Counter64 ::=
+ [APPLICATION 6]
+ IMPLICIT INTEGER (0..18446744073709551615)
+
+-- definition for objects
+
+OBJECT-TYPE MACRO ::=
+BEGIN
+ TYPE NOTATION ::=
+ "SYNTAX" Syntax
+ UnitsPart
+ "MAX-ACCESS" Access
+ "STATUS" Status
+ "DESCRIPTION" Text
+ ReferPart
+
+ IndexPart
+ DefValPart
+
+ VALUE NOTATION ::=
+ value(VALUE ObjectName)
+
+ Syntax ::= -- Must be one of the following:
+ -- a base type (or its refinement),
+ -- a textual convention (or its refinement), or
+ -- a BITS pseudo-type
+ type
+ | "BITS" "{" NamedBits "}"
+
+ NamedBits ::= NamedBit
+ | NamedBits "," NamedBit
+
+ NamedBit ::= identifier "(" number ")" -- number is nonnegative
+
+ UnitsPart ::=
+ "UNITS" Text
+ | empty
+
+ Access ::=
+ "not-accessible"
+ | "accessible-for-notify"
+ | "read-only"
+ | "read-write"
+ | "read-create"
+
+ Status ::=
+ "current"
+ | "deprecated"
+ | "obsolete"
+
+ ReferPart ::=
+ "REFERENCE" Text
+ | empty
+
+ IndexPart ::=
+ "INDEX" "{" IndexTypes "}"
+ | "AUGMENTS" "{" Entry "}"
+ | empty
+ IndexTypes ::=
+ IndexType
+ | IndexTypes "," IndexType
+ IndexType ::=
+ "IMPLIED" Index
+ | Index
+
+ Index ::=
+ -- use the SYNTAX value of the
+ -- correspondent OBJECT-TYPE invocation
+ value(ObjectName)
+ Entry ::=
+ -- use the INDEX value of the
+ -- correspondent OBJECT-TYPE invocation
+ value(ObjectName)
+
+ DefValPart ::= "DEFVAL" "{" Defvalue "}"
+ | empty
+
+ Defvalue ::= -- must be valid for the type specified in
+ -- SYNTAX clause of same OBJECT-TYPE macro
+ value(ObjectSyntax)
+ | "{" BitsValue "}"
+
+ BitsValue ::= BitNames
+ | empty
+
+ BitNames ::= BitName
+ | BitNames "," BitName
+
+ BitName ::= identifier
+
+ -- a character string as defined in section 3.1.1
+ Text ::= value(IA5String)
+END
+
+-- definitions for notifications
+
+NOTIFICATION-TYPE MACRO ::=
+BEGIN
+ TYPE NOTATION ::=
+ ObjectsPart
+ "STATUS" Status
+ "DESCRIPTION" Text
+ ReferPart
+
+ VALUE NOTATION ::=
+ value(VALUE NotificationName)
+
+ ObjectsPart ::=
+ "OBJECTS" "{" Objects "}"
+ | empty
+ Objects ::=
+ Object
+
+ | Objects "," Object
+ Object ::=
+ value(ObjectName)
+
+ Status ::=
+ "current"
+ | "deprecated"
+ | "obsolete"
+
+ ReferPart ::=
+ "REFERENCE" Text
+ | empty
+
+ -- a character string as defined in section 3.1.1
+ Text ::= value(IA5String)
+END
+
+-- definitions of administrative identifiers
+
+zeroDotZero OBJECT-IDENTITY
+ STATUS current
+ DESCRIPTION
+ "A value used for null identifiers."
+ ::= { 0 0 }
+
+END
+
+
diff --git a/opendj-sdk/opends/src/snmp/resource/mib/mib_core.txt b/opendj-sdk/opends/src/snmp/resource/mib/mib_core.txt
new file mode 100644
index 0000000..1300723
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/mib/mib_core.txt
@@ -0,0 +1,1375 @@
+--
+-- @(#)file mib_core.txt
+-- @(#)author Sun Microsystems, Inc.
+-- @(#)version 1.4
+-- @(#)date 03/05/30
+--
+-- The file contains all the definitions scattered around many different
+-- RFCs.
+--
+
+ CORE-MIB DEFINITIONS ::= BEGIN
+
+
+ IMPORTS ;
+
+
+--------------
+-- from SMI --
+--------------
+
+ -- the path to the root
+
+ internet OBJECT IDENTIFIER ::= { iso(1) org(3) dod(6) 1 }
+
+ directory OBJECT IDENTIFIER ::= { internet 1 }
+
+ mgmt OBJECT IDENTIFIER ::= { internet 2 }
+
+ experimental OBJECT IDENTIFIER ::= { internet 3 }
+
+ private OBJECT IDENTIFIER ::= { internet 4 }
+ enterprises OBJECT IDENTIFIER ::= { private 1 }
+
+ security OBJECT IDENTIFIER ::= { internet 5 }
+
+ snmpV2 OBJECT IDENTIFIER ::= { internet 6 }
+
+ -- transport domains
+ snmpDomains OBJECT IDENTIFIER ::= { snmpV2 1 }
+
+ -- transport proxies
+ snmpProxys OBJECT IDENTIFIER ::= { snmpV2 2 }
+
+ -- module identities
+ snmpModules OBJECT IDENTIFIER ::= { snmpV2 3 }
+
+
+-----------------
+-- from MIB-II --
+-----------------
+
+
+ mib-2 OBJECT IDENTIFIER ::= { mgmt 1 }
+
+
+-------------------
+-- from RFC 1271 --
+-------------------
+
+ EntryStatus ::= INTEGER
+ { valid(1),
+ createRequest(2),
+ underCreation(3),
+ invalid(4)
+ }
+
+ -- The status of a table entry.
+ --
+ -- Setting this object to the value invalid(4) has the
+ -- effect of invalidating the corresponding entry.
+ -- That is, it effectively disassociates the mapping
+ -- identified with said entry.
+ -- It is an implementation-specific matter as to whether
+ -- the agent removes an invalidated entry from the table.
+ -- Accordingly, management stations must be prepared to
+ -- receive tabular information from agents that corresponds
+ -- to entries currently not in use. Proper
+ -- interpretation of such entries requires examination
+ -- of the relevant EntryStatus object.
+ --
+ -- An existing instance of this object cannot be set to
+ -- createRequest(2). This object may only be set to
+ -- createRequest(2) when this instance is created. When
+ -- this object is created, the agent may wish to create
+ -- supplemental object instances to complete a conceptual
+ -- row in this table. Immediately after completing the
+ -- create operation, the agent must set this object to
+ -- underCreation(3).
+ --
+ -- Entries shall exist in the underCreation(3) state until
+ -- the management station is finished configuring the
+ -- entry and sets this object to valid(1) or aborts,
+ -- setting this object to invalid(4). If the agent
+ -- determines that an entry has been in the
+ -- underCreation(3) state for an abnormally long time,
+ -- it may decide that the management station has
+ -- crashed. If the agent makes this decision,
+ -- it may set this object to invalid(4) to reclaim the
+ -- entry. A prudent agent will understand that the
+ -- management station may need to wait for human input
+ -- and will allow for that possibility in its
+ -- determination of this abnormally long period.
+
+
+-------------------
+-- from RFC 1316 --
+-------------------
+
+
+-------------------
+-- from RFC 1443 --
+-------------------
+
+
+------------------------
+-- from RFC 1065/1442 --
+------------------------
+
+ Gauge32 ::= Gauge
+
+ Counter32 ::= Counter
+
+ Integer32 ::= INTEGER
+
+ -- application-wide types
+
+ NetworkAddress ::=
+ CHOICE {
+ internet
+ IpAddress
+ }
+
+ IpAddress ::=
+ [APPLICATION 0] -- in network-byte order
+ IMPLICIT OCTET STRING (SIZE (4))
+
+ Counter ::=
+ [APPLICATION 1]
+ IMPLICIT INTEGER (0..4294967295)
+
+ Counter64 ::=
+ [APPLICATION 1]
+ IMPLICIT INTEGER (0..18446744073709551615)
+
+ Gauge ::=
+ [APPLICATION 2]
+ IMPLICIT INTEGER (0..4294967295)
+
+ Unsigned32 ::=
+ [APPLICATION 2]
+ IMPLICIT INTEGER (0..4294967295)
+
+ TimeTicks ::=
+ [APPLICATION 3]
+ IMPLICIT INTEGER (0..4294967295)
+
+ Opaque ::=
+ [APPLICATION 4] -- arbitrary ASN.1 value,
+ IMPLICIT OCTET STRING -- "double-wrapped"
+
+
+
+---------------------------------------------------
+-- from RFC 1903: Textual Conventions for SNMPv2 --
+---------------------------------------------------
+
+DisplayString ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "255a"
+ STATUS current
+ DESCRIPTION
+ "Represents textual information taken from the NVT ASCII
+ character set, as defined in pages 4, 10-11 of RFC 854.
+
+ To summarize RFC 854, the NVT ASCII repertoire specifies:
+
+ - the use of character codes 0-127 (decimal)
+
+ - the graphics characters (32-126) are interpreted as
+ US ASCII
+
+ - NUL, LF, CR, BEL, BS, HT, VT and FF have the special
+ meanings specified in RFC 854
+
+ - the other 25 codes have no standard interpretation
+
+ - the sequence 'CR LF' means newline
+
+ - the sequence 'CR NUL' means carriage-return
+
+ - an 'LF' not preceded by a 'CR' means moving to the
+ same column on the next line.
+
+ - the sequence 'CR x' for any x other than LF or NUL is
+ illegal. (Note that this also means that a string may
+ end with either 'CR LF' or 'CR NUL', but not with CR.)
+
+ Any object defined using this syntax may not exceed 255
+ characters in length."
+ SYNTAX OCTET STRING (SIZE (0..255))
+
+
+PhysAddress ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "1x:"
+ STATUS current
+ DESCRIPTION
+ "Represents media- or physical-level addresses."
+ SYNTAX OCTET STRING
+
+
+MacAddress ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "1x:"
+ STATUS current
+ DESCRIPTION
+ "Represents an 802 MAC address represented in the
+ `canonical' order defined by IEEE 802.1a, i.e., as if it
+ were transmitted least significant bit first, even though
+ 802.5 (in contrast to other 802.x protocols) requires MAC
+ addresses to be transmitted most significant bit first."
+ SYNTAX OCTET STRING (SIZE (6))
+
+
+TruthValue ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Represents a boolean value."
+ SYNTAX INTEGER { true(1), false(2) }
+
+TestAndIncr ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Represents integer-valued information used for atomic
+ operations. When the management protocol is used to specify
+ that an object instance having this syntax is to be
+ modified, the new value supplied via the management protocol
+ must precisely match the value presently held by the
+ instance. If not, the management protocol set operation
+ fails with an error of `inconsistentValue'. Otherwise, if
+ the current value is the maximum value of 2^31-1 (2147483647
+ decimal), then the value held by the instance is wrapped to
+ zero; otherwise, the value held by the instance is
+ incremented by one. (Note that regardless of whether the
+ management protocol set operation succeeds, the variable-
+ binding in the request and response PDUs are identical.)
+
+ The value of the ACCESS clause for objects having this
+ syntax is either `read-write' or `read-create'. When an
+ instance of a columnar object having this syntax is created,
+ any value may be supplied via the management protocol.
+
+ When the network management portion of the system is re-
+ initialized, the value of every object instance having this
+ syntax must either be incremented from its value prior to
+ the re-initialization, or (if the value prior to the re-
+ initialization is unknown) be set to a pseudo-randomly
+ generated value."
+ SYNTAX INTEGER (0..2147483647)
+
+
+AutonomousType ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Represents an independently extensible type identification
+ value. It may, for example, indicate a particular sub-tree
+ with further MIB definitions, or define a particular type of
+ protocol or hardware."
+ SYNTAX OBJECT IDENTIFIER
+
+
+InstancePointer ::= TEXTUAL-CONVENTION
+ STATUS obsolete
+ DESCRIPTION
+ "A pointer to either a specific instance of a MIB object or
+ a conceptual row of a MIB table in the managed device. In
+ the latter case, by convention, it is the name of the
+ particular instance of the first accessible columnar object
+ in the conceptual row.
+
+ The two uses of this textual convention are replaced by
+ VariablePointer and RowPointer, respectively."
+ SYNTAX OBJECT IDENTIFIER
+
+
+VariablePointer ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "A pointer to a specific object instance. For example,
+ sysContact.0 or ifInOctets.3."
+ SYNTAX OBJECT IDENTIFIER
+
+
+RowPointer ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Represents a pointer to a conceptual row. The value is the
+ name of the instance of the first accessible columnar object
+ in the conceptual row.
+
+ For example, ifIndex.3 would point to the 3rd row in the
+ ifTable (note that if ifIndex were not-accessible, then
+ ifDescr.3 would be used instead)."
+ SYNTAX OBJECT IDENTIFIER
+
+
+RowStatus ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "The RowStatus textual convention is used to manage the
+ creation and deletion of conceptual rows, and is used as the
+ value of the SYNTAX clause for the status column of a
+ conceptual row (as described in Section 7.7.1 of [2].)
+
+ The status column has six defined values:
+
+ - `active', which indicates that the conceptual row is
+ available for use by the managed device;
+
+ - `notInService', which indicates that the conceptual
+ row exists in the agent, but is unavailable for use by
+ the managed device (see NOTE below);
+
+ - `notReady', which indicates that the conceptual row
+ exists in the agent, but is missing information
+ necessary in order to be available for use by the
+ managed device;
+
+ - `createAndGo', which is supplied by a management
+ station wishing to create a new instance of a
+ conceptual row and to have its status automatically set
+ to active, making it available for use by the managed
+ device;
+
+ - `createAndWait', which is supplied by a management
+ station wishing to create a new instance of a
+ conceptual row (but not make it available for use by
+ the managed device); and,
+
+ - `destroy', which is supplied by a management station
+ wishing to delete all of the instances associated with
+ an existing conceptual row.
+
+ Whereas five of the six values (all except `notReady') may
+ be specified in a management protocol set operation, only
+ three values will be returned in response to a management
+ protocol retrieval operation: `notReady', `notInService' or
+ `active'. That is, when queried, an existing conceptual row
+ has only three states: it is either available for use by
+ the managed device (the status column has value `active');
+ it is not available for use by the managed device, though
+ the agent has sufficient information to make it so (the
+ status column has value `notInService'); or, it is not
+ available for use by the managed device, and an attempt to
+ make it so would fail because the agent has insufficient
+ information (the state column has value `notReady').
+
+
+ NOTE WELL
+
+ This textual convention may be used for a MIB table,
+ irrespective of whether the values of that table's
+ conceptual rows are able to be modified while it is
+ active, or whether its conceptual rows must be taken
+ out of service in order to be modified. That is, it is
+ the responsibility of the DESCRIPTION clause of the
+ status column to specify whether the status column must
+ not be `active' in order for the value of some other
+ column of the same conceptual row to be modified. If
+ such a specification is made, affected columns may be
+ changed by an SNMP set PDU if the RowStatus would not
+ be equal to `active' either immediately before or after
+ processing the PDU. In other words, if the PDU also
+ contained a varbind that would change the RowStatus
+ value, the column in question may be changed if the
+ RowStatus was not equal to `active' as the PDU was
+ received, or if the varbind sets the status to a value
+ other than 'active'.
+
+
+ Also note that whenever any elements of a row exist, the
+ RowStatus column must also exist.
+
+
+ To summarize the effect of having a conceptual row with a
+ status column having a SYNTAX clause value of RowStatus,
+ consider the following state diagram:
+
+
+ STATE
+ +--------------+-----------+-------------+-------------
+ | A | B | C | D
+ | |status col.|status column|
+ |status column | is | is |status column
+ ACTION |does not exist| notReady | notInService| is active
+--------------+--------------+-----------+-------------+-------------
+set status |noError ->D|inconsist- |inconsistent-|inconsistent-
+column to | or | entValue| Value| Value
+createAndGo |inconsistent- | | |
+ | Value| | |
+--------------+--------------+-----------+-------------+-------------
+set status |noError see 1|inconsist- |inconsistent-|inconsistent-
+column to | or | entValue| Value| Value
+createAndWait |wrongValue | | |
+--------------+--------------+-----------+-------------+-------------
+set status |inconsistent- |inconsist- |noError |noError
+column to | Value| entValue| |
+active | | | |
+ | | or | |
+ | | | |
+ | |see 2 ->D| ->D| ->D
+--------------+--------------+-----------+-------------+-------------
+set status |inconsistent- |inconsist- |noError |noError ->C
+column to | Value| entValue| |
+notInService | | | |
+ | | or | | or
+ | | | |
+ | |see 3 ->C| ->C|wrongValue
+--------------+--------------+-----------+-------------+-------------
+set status |noError |noError |noError |noError
+column to | | | |
+destroy | ->A| ->A| ->A| ->A
+--------------+--------------+-----------+-------------+-------------
+set any other |see 4 |noError |noError |see 5
+column to some| | | |
+value | | see 1| ->C| ->D
+--------------+--------------+-----------+-------------+-------------
+
+ (1) goto B or C, depending on information available to the
+ agent.
+
+
+
+
+
+SNMPv2 Working Group Standards Track [Page 9]
+
+RFC 1903 Textual Conventions for SNMPv2 January 1996
+
+
+ (2) if other variable bindings included in the same PDU,
+ provide values for all columns which are missing but
+ required, then return noError and goto D.
+
+ (3) if other variable bindings included in the same PDU,
+ provide values for all columns which are missing but
+ required, then return noError and goto C.
+
+ (4) at the discretion of the agent, the return value may be
+ either:
+
+ inconsistentName: because the agent does not choose to
+ create such an instance when the corresponding
+ RowStatus instance does not exist, or
+
+ inconsistentValue: if the supplied value is
+ inconsistent with the state of some other MIB object's
+ value, or
+
+ noError: because the agent chooses to create the
+ instance.
+
+ If noError is returned, then the instance of the status
+ column must also be created, and the new state is B or C,
+ depending on the information available to the agent. If
+ inconsistentName or inconsistentValue is returned, the row
+ remains in state A.
+
+ (5) depending on the MIB definition for the column/table,
+ either noError or inconsistentValue may be returned.
+
+ NOTE: Other processing of the set request may result in a
+ response other than noError being returned, e.g.,
+ wrongValue, noCreation, etc.
+
+
+ Conceptual Row Creation
+
+ There are four potential interactions when creating a
+ conceptual row: selecting an instance-identifier which is
+ not in use; creating the conceptual row; initializing any
+ objects for which the agent does not supply a default; and,
+ making the conceptual row available for use by the managed
+ device.
+
+ Interaction 1: Selecting an Instance-Identifier
+
+ The algorithm used to select an instance-identifier varies
+ for each conceptual row. In some cases, the instance-
+ identifier is semantically significant, e.g., the
+ destination address of a route, and a management station
+ selects the instance-identifier according to the semantics.
+
+ In other cases, the instance-identifier is used solely to
+ distinguish conceptual rows, and a management station
+ without specific knowledge of the conceptual row might
+ examine the instances present in order to determine an
+ unused instance-identifier. (This approach may be used, but
+ it is often highly sub-optimal; however, it is also a
+ questionable practice for a naive management station to
+ attempt conceptual row creation.)
+
+ Alternately, the MIB module which defines the conceptual row
+ might provide one or more objects which provide assistance
+ in determining an unused instance-identifier. For example,
+ if the conceptual row is indexed by an integer-value, then
+ an object having an integer-valued SYNTAX clause might be
+ defined for such a purpose, allowing a management station to
+ issue a management protocol retrieval operation. In order
+ to avoid unnecessary collisions between competing management
+ stations, `adjacent' retrievals of this object should be
+ different.
+
+ Finally, the management station could select a pseudo-random
+ number to use as the index. In the event that this index
+ was already in use and an inconsistentValue was returned in
+ response to the management protocol set operation, the
+ management station should simply select a new pseudo-random
+ number and retry the operation.
+
+ A MIB designer should choose between the two latter
+ algorithms based on the size of the table (and therefore the
+ efficiency of each algorithm). For tables in which a large
+ number of entries are expected, it is recommended that a MIB
+ object be defined that returns an acceptable index for
+ creation. For tables with small numbers of entries, it is
+ recommended that the latter pseudo-random index mechanism be
+ used.
+
+
+ Interaction 2: Creating the Conceptual Row
+
+ Once an unused instance-identifier has been selected, the
+ management station determines if it wishes to create and
+ activate the conceptual row in one transaction or in a
+ negotiated set of interactions.
+
+ Interaction 2a: Creating and Activating the Conceptual Row
+
+ The management station must first determine the column
+ requirements, i.e., it must determine those columns for
+ which it must or must not provide values. Depending on the
+ complexity of the table and the management station's
+ knowledge of the agent's capabilities, this determination
+ can be made locally by the management station. Alternately,
+ the management station issues a management protocol get
+ operation to examine all columns in the conceptual row that
+ it wishes to create. In response, for each column, there
+ are three possible outcomes:
+
+ - a value is returned, indicating that some other
+ management station has already created this conceptual
+ row. We return to interaction 1.
+
+ - the exception `noSuchInstance' is returned,
+ indicating that the agent implements the object-type
+ associated with this column, and that this column in at
+ least one conceptual row would be accessible in the MIB
+ view used by the retrieval were it to exist. For those
+ columns to which the agent provides read-create access,
+ the `noSuchInstance' exception tells the management
+ station that it should supply a value for this column
+ when the conceptual row is to be created.
+
+ - the exception `noSuchObject' is returned, indicating
+ that the agent does not implement the object-type
+ associated with this column or that there is no
+ conceptual row for which this column would be
+ accessible in the MIB view used by the retrieval. As
+ such, the management station can not issue any
+ management protocol set operations to create an
+ instance of this column.
+
+ Once the column requirements have been determined, a
+ management protocol set operation is accordingly issued.
+ This operation also sets the new instance of the status
+ column to `createAndGo'.
+
+
+ When the agent processes the set operation, it verifies that
+ it has sufficient information to make the conceptual row
+ available for use by the managed device. The information
+ available to the agent is provided by two sources: the
+ management protocol set operation which creates the
+ conceptual row, and, implementation-specific defaults
+ supplied by the agent (note that an agent must provide
+ implementation-specific defaults for at least those objects
+ which it implements as read-only). If there is sufficient
+ information available, then the conceptual row is created, a
+ `noError' response is returned, the status column is set to
+ `active', and no further interactions are necessary (i.e.,
+ interactions 3 and 4 are skipped). If there is insufficient
+ information, then the conceptual row is not created, and the
+ set operation fails with an error of `inconsistentValue'.
+ On this error, the management station can issue a management
+ protocol retrieval operation to determine if this was
+ because it failed to specify a value for a required column,
+ or, because the selected instance of the status column
+ already existed. In the latter case, we return to
+ interaction 1. In the former case, the management station
+ can re-issue the set operation with the additional
+ information, or begin interaction 2 again using
+ `createAndWait' in order to negotiate creation of the
+ conceptual row.
+
+ NOTE WELL
+
+ Regardless of the method used to determine the column
+ requirements, it is possible that the management
+ station might deem a column necessary when, in fact,
+ the agent will not allow that particular columnar
+ instance to be created or written. In this case, the
+ management protocol set operation will fail with an
+ error such as `noCreation' or `notWritable'. In this
+ case, the management station decides whether it needs
+ to be able to set a value for that particular columnar
+ instance. If not, the management station re-issues the
+ management protocol set operation, but without setting
+ a value for that particular columnar instance;
+ otherwise, the management station aborts the row
+ creation algorithm.
+
+ Interaction 2b: Negotiating the Creation of the Conceptual
+ Row
+
+ The management station issues a management protocol set
+ operation which sets the desired instance of the status
+ column to `createAndWait'. If the agent is unwilling to
+ process a request of this sort, the set operation fails with
+ an error of `wrongValue'. (As a consequence, such an agent
+ must be prepared to accept a single management protocol set
+ operation, i.e., interaction 2a above, containing all of the
+ columns indicated by its column requirements.) Otherwise,
+ the conceptual row is created, a `noError' response is
+ returned, and the status column is immediately set to either
+ `notInService' or `notReady', depending on whether it has
+ sufficient information to make the conceptual row available
+ for use by the managed device. If there is sufficient
+ information available, then the status column is set to
+ `notInService'; otherwise, if there is insufficient
+ information, then the status column is set to `notReady'.
+ Regardless, we proceed to interaction 3.
+
+ Interaction 3: Initializing non-defaulted Objects
+
+ The management station must now determine the column
+ requirements. It issues a management protocol get operation
+ to examine all columns in the created conceptual row. In
+ the response, for each column, there are three possible
+ outcomes:
+
+ - a value is returned, indicating that the agent
+ implements the object-type associated with this column
+ and had sufficient information to provide a value. For
+ those columns to which the agent provides read-create
+ access (and for which the agent allows their values to
+ be changed after their creation), a value return tells
+ the management station that it may issue additional
+ management protocol set operations, if it desires, in
+ order to change the value associated with this column.
+
+ - the exception `noSuchInstance' is returned,
+ indicating that the agent implements the object-type
+ associated with this column, and that this column in at
+ least one conceptual row would be accessible in the MIB
+ view used by the retrieval were it to exist. However,
+ the agent does not have sufficient information to
+ provide a value, and until a value is provided, the
+ conceptual row may not be made available for use by the
+ managed device. For those columns to which the agent
+ provides read-create access, the `noSuchInstance'
+ exception tells the management station that it must
+ issue additional management protocol set operations, in
+ order to provide a value associated with this column.
+
+ - the exception `noSuchObject' is returned, indicating
+ that the agent does not implement the object-type
+ associated with this column or that there is no
+ conceptual row for which this column would be
+ accessible in the MIB view used by the retrieval. As
+ such, the management station can not issue any
+ management protocol set operations to create an
+ instance of this column.
+
+ If the value associated with the status column is
+ `notReady', then the management station must first deal with
+ all `noSuchInstance' columns, if any. Having done so, the
+ value of the status column becomes `notInService', and we
+ proceed to interaction 4.
+
+ Interaction 4: Making the Conceptual Row Available
+
+ Once the management station is satisfied with the values
+ associated with the columns of the conceptual row, it issues
+ a management protocol set operation to set the status column
+ to `active'. If the agent has sufficient information to
+ make the conceptual row available for use by the managed
+ device, the management protocol set operation succeeds (a
+ `noError' response is returned). Otherwise, the management
+ protocol set operation fails with an error of
+ `inconsistentValue'.
+
+
+ NOTE WELL
+
+ A conceptual row having a status column with value
+ `notInService' or `notReady' is unavailable to the
+ managed device. As such, it is possible for the
+ managed device to create its own instances during the
+ time between the management protocol set operation
+ which sets the status column to `createAndWait' and the
+ management protocol set operation which sets the status
+ column to `active'. In this case, when the management
+ protocol set operation is issued to set the status
+ column to `active', the values held in the agent
+ supersede those used by the managed device.
+
+ If the management station is prevented from setting the
+ status column to `active' (e.g., due to management station
+ or network failure) the conceptual row will be left in the
+ `notInService' or `notReady' state, consuming resources
+ indefinitely. The agent must detect conceptual rows that
+ have been in either state for an abnormally long period of
+ time and remove them. It is the responsibility of the
+ DESCRIPTION clause of the status column to indicate what an
+ abnormally long period of time would be. This period of
+ time should be long enough to allow for human response time
+ (including `think time') between the creation of the
+ conceptual row and the setting of the status to `active'.
+ In the absense of such information in the DESCRIPTION
+ clause, it is suggested that this period be approximately 5
+ minutes in length. This removal action applies not only to
+ newly-created rows, but also to previously active rows which
+ are set to, and left in, the notInService state for a
+ prolonged period exceeding that which is considered normal
+ for such a conceptual row.
+
+
+ Conceptual Row Suspension
+
+ When a conceptual row is `active', the management station
+ may issue a management protocol set operation which sets the
+ instance of the status column to `notInService'. If the
+ agent is unwilling to do so, the set operation fails with an
+ error of `wrongValue'. Otherwise, the conceptual row is
+ taken out of service, and a `noError' response is returned.
+ It is the responsibility of the DESCRIPTION clause of the
+ status column to indicate under what circumstances the
+ status column should be taken out of service (e.g., in order
+ for the value of some other column of the same conceptual
+ row to be modified).
+
+
+ Conceptual Row Deletion
+
+ For deletion of conceptual rows, a management protocol set
+ operation is issued which sets the instance of the status
+ column to `destroy'. This request may be made regardless of
+ the current value of the status column (e.g., it is possible
+ to delete conceptual rows which are either `notReady',
+ `notInService' or `active'.) If the operation succeeds,
+ then all instances associated with the conceptual row are
+ immediately removed."
+
+
+ SYNTAX INTEGER {
+ -- the following two values are states:
+ -- these values may be read or written
+ active(1),
+ notInService(2),
+
+ -- the following value is a state:
+ -- this value may be read, but not written
+ notReady(3),
+
+ -- the following three values are
+ -- actions: these values may be written,
+ -- but are never read
+ createAndGo(4),
+ createAndWait(5),
+ destroy(6)
+ }
+
+
+TimeStamp ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "The value of the sysUpTime object at which a specific
+ occurrence happened. The specific occurrence must be
+ defined in the description of any object defined using this
+ type."
+ SYNTAX TimeTicks
+
+
+TimeInterval ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "A period of time, measured in units of 0.01 seconds."
+ SYNTAX INTEGER (0..2147483647)
+
+
+DateAndTime ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
+ STATUS current
+ DESCRIPTION
+ "A date-time specification.
+
+ field octets contents range
+ ----- ------ -------- -----
+ 1 1-2 year 0..65536
+ 2 3 month 1..12
+ 3 4 day 1..31
+ 4 5 hour 0..23
+ 5 6 minutes 0..59
+ 6 7 seconds 0..60
+ (use 60 for leap-second)
+ 7 8 deci-seconds 0..9
+ 8 9 direction from UTC '+' / '-'
+ 9 10 hours from UTC 0..11
+ 10 11 minutes from UTC 0..59
+
+ For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be
+ displayed as:
+
+ 1992-5-26,13:30:15.0,-4:0
+
+ Note that if only local time is known, then timezone
+ information (fields 8-10) is not present."
+ SYNTAX OCTET STRING (SIZE (8 | 11))
+
+
+StorageType ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Describes the memory realization of a conceptual row. A
+ row which is volatile(2) is lost upon reboot. A row which
+ is either nonVolatile(3), permanent(4) or readOnly(5), is
+ backed up by stable storage. A row which is permanent(4)
+ can be changed but not deleted. A row which is readOnly(5)
+ cannot be changed nor deleted.
+
+ If the value of an object with this syntax is either
+ permanent(4) or readOnly(5), it cannot be modified.
+ Conversely, if the value is either other(1), volatile(2) or
+ nonVolatile(3), it cannot be modified to be permanent(4) or
+ readOnly(5).
+
+ Every usage of this textual convention is required to
+ specify the columnar objects which a permanent(4) row must
+ at a minimum allow to be writable."
+ SYNTAX INTEGER {
+ other(1), -- eh?
+ volatile(2), -- e.g., in RAM
+ nonVolatile(3), -- e.g., in NVRAM
+ permanent(4), -- e.g., partially in ROM
+ readOnly(5) -- e.g., completely in ROM
+ }
+
+
+TDomain ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Denotes a kind of transport service.
+
+ Some possible values, such as snmpUDPDomain, are defined in
+ 'Transport Mappings for Version 2 of the Simple Network
+ Management Protocol (SNMPv2)'."
+ SYNTAX OBJECT IDENTIFIER
+
+
+TAddress ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "Denotes a transport service address.
+
+ For snmpUDPDomain, a TAddress is 6 octets long, the initial 4
+ octets containing the IP-address in network-byte order and the
+ last 2 containing the UDP port in network-byte order. Consult
+ 'Transport Mappings for Version 2 of the Simple Network
+ Management Protocol (SNMPv2)' for further information on
+ snmpUDPDomain."
+ SYNTAX OCTET STRING (SIZE (1..255))
+
+
+---------------------------------------------------
+-- from RFC 2571: Textual Conventions for SNMPv3 --
+---------------------------------------------------
+
+ SnmpEngineID ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION "An SNMP engine's administratively-unique identifier.
+ Objects of this type are for identification, not for
+ addressing, even though it is possible that an
+ address may have been used in the generation of
+ a specific value.
+
+ The value for this object may not be all zeros or
+ all 'ff'H or the empty (zero length) string.
+
+ The initial value for this object may be configured
+ via an operator console entry or via an algorithmic
+ function. In the latter case, the following
+ example algorithm is recommended.
+
+ In cases where there are multiple engines on the
+ same system, the use of this algorithm is NOT
+ appropriate, as it would result in all of those
+ engines ending up with the same ID value.
+
+ 1) The very first bit is used to indicate how the
+ rest of the data is composed.
+
+ 0 - as defined by enterprise using former methods
+ that existed before SNMPv3. See item 2 below.
+
+ 1 - as defined by this architecture, see item 3
+ below.
+
+
+
+ Note that this allows existing uses of the
+ engineID (also known as AgentID [RFC1910]) to
+ co-exist with any new uses.
+
+ 2) The snmpEngineID has a length of 12 octets.
+
+ The first four octets are set to the binary
+ equivalent of the agent's SNMP management
+ private enterprise number as assigned by the
+ Internet Assigned Numbers Authority (IANA).
+ For example, if Acme Networks has been assigned
+ { enterprises 696 }, the first four octets would
+ be assigned '000002b8'H.
+
+ The remaining eight octets are determined via
+ one or more enterprise-specific methods. Such
+ methods must be designed so as to maximize the
+ possibility that the value of this object will
+ be unique in the agent's administrative domain.
+ For example, it may be the IP address of the SNMP
+ entity, or the MAC address of one of the
+ interfaces, with each address suitably padded
+ with random octets. If multiple methods are
+ defined, then it is recommended that the first
+ octet indicate the method being used and the
+ remaining octets be a function of the method.
+
+ 3) The length of the octet strings varies.
+
+ The first four octets are set to the binary
+ equivalent of the agent's SNMP management
+ private enterprise number as assigned by the
+ Internet Assigned Numbers Authority (IANA).
+ For example, if Acme Networks has been assigned
+ { enterprises 696 }, the first four octets would
+ be assigned '000002b8'H.
+
+ The very first bit is set to 1. For example, the
+ above value for Acme Networks now changes to be
+ '800002b8'H.
+
+ The fifth octet indicates how the rest (6th and
+ following octets) are formatted. The values for
+ the fifth octet are:
+
+ 0 - reserved, unused.
+
+ 1 - IPv4 address (4 octets)
+
+
+ lowest non-special IP address
+
+ 2 - IPv6 address (16 octets)
+ lowest non-special IP address
+
+ 3 - MAC address (6 octets)
+ lowest IEEE MAC address, canonical
+ order
+
+ 4 - Text, administratively assigned
+ Maximum remaining length 27
+
+ 5 - Octets, administratively assigned
+ Maximum remaining length 27
+
+ 6-127 - reserved, unused
+
+ 127-255 - as defined by the enterprise
+ Maximum remaining length 27
+ "
+ SYNTAX OCTET STRING (SIZE(5..32))
+
+ SnmpSecurityModel ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION "An identifier that uniquely identifies a
+ securityModel of the Security Subsystem within the
+ SNMP Management Architecture.
+
+ The values for securityModel are allocated as
+ follows:
+
+ - The zero value is reserved.
+ - Values between 1 and 255, inclusive, are reserved
+ for standards-track Security Models and are
+ managed by the Internet Assigned Numbers Authority
+ (IANA).
+ - Values greater than 255 are allocated to
+ enterprise-specific Security Models. An
+ enterprise-specific securityModel value is defined
+ to be:
+
+ enterpriseID * 256 + security model within
+ enterprise
+
+ For example, the fourth Security Model defined by
+ the enterprise whose enterpriseID is 1 would be
+ 260.
+
+
+
+ This scheme for allocation of securityModel
+ values allows for a maximum of 255 standards-
+ based Security Models, and for a maximum of
+ 255 Security Models per enterprise.
+
+ It is believed that the assignment of new
+ securityModel values will be rare in practice
+ because the larger the number of simultaneously
+ utilized Security Models, the larger the
+ chance that interoperability will suffer.
+ Consequently, it is believed that such a range
+ will be sufficient. In the unlikely event that
+ the standards committee finds this number to be
+ insufficient over time, an enterprise number
+ can be allocated to obtain an additional 255
+ possible values.
+
+ Note that the most significant bit must be zero;
+ hence, there are 23 bits allocated for various
+ organizations to design and define non-standard
+ securityModels. This limits the ability to
+ define new proprietary implementations of Security
+ Models to the first 8,388,608 enterprises.
+
+ It is worthwhile to note that, in its encoded
+ form, the securityModel value will normally
+ require only a single byte since, in practice,
+ the leftmost bits will be zero for most messages
+ and sign extension is suppressed by the encoding
+ rules.
+
+ As of this writing, there are several values
+ of securityModel defined for use with SNMP or
+ reserved for use with supporting MIB objects.
+ They are as follows:
+
+ 0 reserved for 'any'
+ 1 reserved for SNMPv1
+ 2 reserved for SNMPv2c
+ 3 User-Based Security Model (USM)
+ "
+ SYNTAX INTEGER(0 .. 2147483647)
+
+ SnmpMessageProcessingModel ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION "An identifier that uniquely identifies a Message
+ Processing Model of the Message Processing
+ Subsystem within a SNMP Management Architecture.
+
+
+
+
+ The values for messageProcessingModel are
+ allocated as follows:
+
+ - Values between 0 and 255, inclusive, are
+ reserved for standards-track Message Processing
+ Models and are managed by the Internet Assigned
+ Numbers Authority (IANA).
+
+ - Values greater than 255 are allocated to
+ enterprise-specific Message Processing Models.
+ An enterprise messageProcessingModel value is
+ defined to be:
+
+ enterpriseID * 256 +
+ messageProcessingModel within enterprise
+
+ For example, the fourth Message Processing Model
+ defined by the enterprise whose enterpriseID
+ is 1 would be 260.
+
+ This scheme for allocating messageProcessingModel
+ values allows for a maximum of 255 standards-
+ based Message Processing Models, and for a
+ maximum of 255 Message Processing Models per
+ enterprise.
+
+ It is believed that the assignment of new
+ messageProcessingModel values will be rare
+ in practice because the larger the number of
+ simultaneously utilized Message Processing Models,
+ the larger the chance that interoperability
+ will suffer. It is believed that such a range
+ will be sufficient. In the unlikely event that
+ the standards committee finds this number to be
+ insufficient over time, an enterprise number
+ can be allocated to obtain an additional 256
+ possible values.
+
+ Note that the most significant bit must be zero;
+ hence, there are 23 bits allocated for various
+ organizations to design and define non-standard
+ messageProcessingModels. This limits the ability
+ to define new proprietary implementations of
+ Message Processing Models to the first 8,388,608
+ enterprises.
+
+ It is worthwhile to note that, in its encoded
+ form, the messageProcessingModel value will
+
+
+ normally require only a single byte since, in
+ practice, the leftmost bits will be zero for
+ most messages and sign extension is suppressed
+ by the encoding rules.
+
+ As of this writing, there are several values of
+ messageProcessingModel defined for use with SNMP.
+ They are as follows:
+
+ 0 reserved for SNMPv1
+ 1 reserved for SNMPv2c
+ 2 reserved for SNMPv2u and SNMPv2*
+ 3 reserved for SNMPv3
+ "
+ SYNTAX INTEGER(0 .. 2147483647)
+
+ SnmpSecurityLevel ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION "A Level of Security at which SNMP messages can be
+ sent or with which operations are being processed;
+ in particular, one of:
+
+ noAuthNoPriv - without authentication and
+ without privacy,
+ authNoPriv - with authentication but
+ without privacy,
+ authPriv - with authentication and
+ with privacy.
+
+ These three values are ordered such that
+ noAuthNoPriv is less than authNoPriv and
+ authNoPriv is less than authPriv.
+ "
+ SYNTAX INTEGER { noAuthNoPriv(1),
+ authNoPriv(2),
+ authPriv(3)
+ }
+
+ SnmpAdminString ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "255a"
+ STATUS current
+ DESCRIPTION "An octet string containing administrative
+ information, preferably in human-readable form.
+
+ To facilitate internationalization, this
+ information is represented using the ISO/IEC
+ IS 10646-1 character set, encoded as an octet
+ string using the UTF-8 transformation format
+
+
+
+
+ described in [RFC2279].
+
+ Since additional code points are added by
+ amendments to the 10646 standard from time
+ to time, implementations must be prepared to
+ encounter any code point from 0x00000000 to
+ 0x7fffffff. Byte sequences that do not
+ correspond to the valid UTF-8 encoding of a
+ code point or are outside this range are
+ prohibited.
+
+ The use of control codes should be avoided.
+
+ When it is necessary to represent a newline,
+ the control code sequence CR LF should be used.
+
+ The use of leading or trailing white space should
+ be avoided.
+
+ For code points not directly supported by user
+ interface hardware or software, an alternative
+ means of entry and display, such as hexadecimal,
+ may be provided.
+
+ For information encoded in 7-bit US-ASCII,
+ the UTF-8 encoding is identical to the
+ US-ASCII encoding.
+
+ UTF-8 may require multiple bytes to represent a
+ single character / code point; thus the length
+ of this object in octets may be different from
+ the number of characters encoded. Similarly,
+ size constraints refer to the number of encoded
+ octets, not the number of characters represented
+ by an encoding.
+
+ Note that when this TC is used for an object that
+ is used or envisioned to be used as an index, then
+ a SIZE restriction MUST be specified so that the
+ number of sub-identifiers for any object instance
+ does not exceed the limit of 128, as defined by
+ [RFC1905].
+
+ Note that the size of an SnmpAdminString object is
+ measured in octets, not characters.
+ "
+ SYNTAX DisplayString (SIZE (0..255))
+
+---------------------------------------------------
+-- from RFC 2574: Textual Conventions for SNMPv3 --
+---------------------------------------------------
+
+KeyChange ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+
+
+
+ "Every definition of an object with this syntax must identify
+ a protocol P, a secret key K, and a hash algorithm H
+ that produces output of L octets.
+
+ The object's value is a manager-generated, partially-random
+ value which, when modified, causes the value of the secret
+ key K, to be modified via a one-way function.
+
+ The value of an instance of this object is the concatenation
+ of two components: first a 'random' component and then a
+ 'delta' component.
+
+ The lengths of the random and delta components
+ are given by the corresponding value of the protocol P;
+ if P requires K to be a fixed length, the length of both the
+ random and delta components is that fixed length; if P
+ allows the length of K to be variable up to a particular
+ maximum length, the length of the random component is that
+ maximum length and the length of the delta component is any
+ length less than or equal to that maximum length.
+ For example, usmHMACMD5AuthProtocol requires K to be a fixed
+ length of 16 octets and L - of 16 octets.
+ usmHMACSHAAuthProtocol requires K to be a fixed length of
+ 20 octets and L - of 20 octets. Other protocols may define
+ other sizes, as deemed appropriate.
+
+ When a requester wants to change the old key K to a new
+ key keyNew on a remote entity, the 'random' component is
+ obtained from either a true random generator, or from a
+ pseudorandom generator, and the 'delta' component is
+ computed as follows:
+
+ - a temporary variable is initialized to the existing value
+ of K;
+ - if the length of the keyNew is greater than L octets,
+ then:
+ - the random component is appended to the value of the
+ temporary variable, and the result is input to the
+ the hash algorithm H to produce a digest value, and
+ the temporary variable is set to this digest value;
+ - the value of the temporary variable is XOR-ed with
+ the first (next) L-octets (16 octets in case of MD5)
+ of the keyNew to produce the first (next) L-octets
+ (16 octets in case of MD5) of the 'delta' component.
+ - the above two steps are repeated until the unused
+ portion of the keyNew component is L octets or less,
+ - the random component is appended to the value of the
+ temporary variable, and the result is input to the
+
+
+
+ hash algorithm H to produce a digest value;
+ - this digest value, truncated if necessary to be the same
+ length as the unused portion of the keyNew, is XOR-ed
+ with the unused portion of the keyNew to produce the
+ (final portion of the) 'delta' component.
+
+ For example, using MD5 as the hash algorithm H:
+
+ iterations = (lenOfDelta - 1)/16; /* integer division */
+ temp = keyOld;
+ for (i = 0; i < iterations; i++) {
+ temp = MD5 (temp || random);
+ delta[i*16 .. (i*16)+15] =
+ temp XOR keyNew[i*16 .. (i*16)+15];
+ }
+ temp = MD5 (temp || random);
+ delta[i*16 .. lenOfDelta-1] =
+ temp XOR keyNew[i*16 .. lenOfDelta-1];
+
+ The 'random' and 'delta' components are then concatenated as
+ described above, and the resulting octet string is sent to
+ the recipient as the new value of an instance of this object.
+
+ At the receiver side, when an instance of this object is set
+ to a new value, then a new value of K is computed as follows:
+
+ - a temporary variable is initialized to the existing value
+ of K;
+ - if the length of the delta component is greater than L
+ octets, then:
+ - the random component is appended to the value of the
+ temporary variable, and the result is input to the
+ hash algorithm H to produce a digest value, and the
+ temporary variable is set to this digest value;
+ - the value of the temporary variable is XOR-ed with
+ the first (next) L-octets (16 octets in case of MD5)
+ of the delta component to produce the first (next)
+ L-octets (16 octets in case of MD5) of the new value
+ of K.
+ - the above two steps are repeated until the unused
+ portion of the delta component is L octets or less,
+ - the random component is appended to the value of the
+ temporary variable, and the result is input to the
+ hash algorithm H to produce a digest value;
+ - this digest value, truncated if necessary to be the same
+ length as the unused portion of the delta component, is
+ XOR-ed with the unused portion of the delta component to
+ produce the (final portion of the) new value of K.
+
+
+
+ For example, using MD5 as the hash algorithm H:
+
+ iterations = (lenOfDelta - 1)/16; /* integer division */
+ temp = keyOld;
+ for (i = 0; i < iterations; i++) {
+ temp = MD5 (temp || random);
+ keyNew[i*16 .. (i*16)+15] =
+ temp XOR delta[i*16 .. (i*16)+15];
+ }
+ temp = MD5 (temp || random);
+ keyNew[i*16 .. lenOfDelta-1] =
+ temp XOR delta[i*16 .. lenOfDelta-1];
+
+ The value of an object with this syntax, whenever it is
+ retrieved by the management protocol, is always the zero
+ length string.
+
+ Note that the keyOld and keyNew are the localized keys.
+
+ Note that it is probably wise that when an SNMP entity sends
+ a SetRequest to change a key, that it keeps a copy of the old
+ key until it has confirmed that the key change actually
+ succeeded.
+ "
+ SYNTAX OCTET STRING
+
+-----------------
+-- entreprises --
+-----------------
+
+ sun OBJECT IDENTIFIER ::= { enterprises 42 }
+ messaging OBJECT IDENTIFIER ::= { sun products(2) 8 }
+
+ agents OBJECT IDENTIFIER ::= { messaging 1 }
+ private-mibs OBJECT IDENTIFIER ::= { messaging 2 }
+
+ snmpx400d OBJECT IDENTIFIER ::= { agents 1 }
+ snmpxapiad OBJECT IDENTIFIER ::= { agents 2 }
+ snmpx500d OBJECT IDENTIFIER ::= { agents 3 }
+ snmpimd OBJECT IDENTIFIER ::= { agents 4 }
+ snmpslapd OBJECT IDENTIFIER ::= { agents 5 }
+
+
+END
diff --git a/opendj-sdk/opends/src/snmp/resource/mib/rfc1213.txt b/opendj-sdk/opends/src/snmp/resource/mib/rfc1213.txt
new file mode 100644
index 0000000..e518449
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/mib/rfc1213.txt
@@ -0,0 +1,3059 @@
+RFC1213-MIB DEFINITIONS ::= BEGIN
+
+ IMPORTS
+ mgmt, NetworkAddress, IpAddress, Counter, Gauge,
+ TimeTicks
+ FROM RFC1155-SMI
+ OBJECT-TYPE
+ FROM RFC-1212;
+
+ -- This MIB module uses the extended OBJECT-TYPE macro as
+ -- defined in [14];
+
+
+ -- MIB-II (same prefix as MIB-I)
+
+ mib-2 OBJECT IDENTIFIER ::= { mgmt 1 }
+
+ -- textual conventions
+
+ DisplayString ::=
+ OCTET STRING
+ -- This data type is used to model textual information taken
+ -- from the NVT ASCII character set. By convention, objects
+ -- with this syntax are declared as having
+
+
+
+SNMP Working Group [Page 12]
+
+RFC 1213 MIB-II March 1991
+
+
+ --
+ -- SIZE (0..255)
+
+ PhysAddress ::=
+ OCTET STRING
+ -- This data type is used to model media addresses. For many
+ -- types of media, this will be in a binary representation.
+ -- For example, an ethernet address would be represented as
+ -- a string of 6 octets.
+
+
+ -- groups in MIB-II
+
+ system OBJECT IDENTIFIER ::= { mib-2 1 }
+
+ interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
+
+ at OBJECT IDENTIFIER ::= { mib-2 3 }
+
+ ip OBJECT IDENTIFIER ::= { mib-2 4 }
+
+ icmp OBJECT IDENTIFIER ::= { mib-2 5 }
+
+ tcp OBJECT IDENTIFIER ::= { mib-2 6 }
+
+ udp OBJECT IDENTIFIER ::= { mib-2 7 }
+
+ egp OBJECT IDENTIFIER ::= { mib-2 8 }
+
+ -- historical (some say hysterical)
+ -- cmot OBJECT IDENTIFIER ::= { mib-2 9 }
+
+ transmission OBJECT IDENTIFIER ::= { mib-2 10 }
+
+ snmp OBJECT IDENTIFIER ::= { mib-2 11 }
+
+
+ -- the System group
+
+ -- Implementation of the System group is mandatory for all
+ -- systems. If an agent is not configured to have a value
+ -- for any of these variables, a string of length 0 is
+ -- returned.
+
+ sysDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 13]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "A textual description of the entity. This value
+ should include the full name and version
+ identification of the system's hardware type,
+ software operating-system, and networking
+ software. It is mandatory that this only contain
+ printable ASCII characters."
+ ::= { system 1 }
+
+ sysObjectID OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The vendor's authoritative identification of the
+ network management subsystem contained in the
+ entity. This value is allocated within the SMI
+ enterprises subtree (1.3.6.1.4.1) and provides an
+ easy and unambiguous means for determining `what
+ kind of box' is being managed. For example, if
+ vendor `Flintstones, Inc.' was assigned the
+ subtree 1.3.6.1.4.1.4242, it could assign the
+ identifier 1.3.6.1.4.1.4242.1.1 to its `Fred
+ Router'."
+ ::= { system 2 }
+
+ sysUpTime OBJECT-TYPE
+ SYNTAX TimeTicks
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The time (in hundredths of a second) since the
+ network management portion of the system was last
+ re-initialized."
+ ::= { system 3 }
+
+ sysContact OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The textual identification of the contact person
+ for this managed node, together with information
+ on how to contact this person."
+ ::= { system 4 }
+
+ sysName OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+
+
+
+SNMP Working Group [Page 14]
+
+RFC 1213 MIB-II March 1991
+
+
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "An administratively-assigned name for this
+ managed node. By convention, this is the node's
+ fully-qualified domain name."
+ ::= { system 5 }
+
+ sysLocation OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The physical location of this node (e.g.,
+ `telephone closet, 3rd floor')."
+ ::= { system 6 }
+
+ sysServices OBJECT-TYPE
+ SYNTAX INTEGER (0..127)
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "A value which indicates the set of services that
+ this entity primarily offers.
+
+ The value is a sum. This sum initially takes the
+ value zero, Then, for each layer, L, in the range
+ 1 through 7, that this node performs transactions
+ for, 2 raised to (L - 1) is added to the sum. For
+ example, a node which performs primarily routing
+ functions would have a value of 4 (2^(3-1)). In
+ contrast, a node which is a host offering
+ application services would have a value of 72
+ (2^(4-1) + 2^(7-1)). Note that in the context of
+ the Internet suite of protocols, values should be
+ calculated accordingly:
+
+ layer functionality
+ 1 physical (e.g., repeaters)
+ 2 datalink/subnetwork (e.g., bridges)
+ 3 internet (e.g., IP gateways)
+ 4 end-to-end (e.g., IP hosts)
+ 7 applications (e.g., mail relays)
+
+ For systems including OSI protocols, layers 5 and
+ 6 may also be counted."
+ ::= { system 7 }
+
+
+
+
+SNMP Working Group [Page 15]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- the Interfaces group
+
+ -- Implementation of the Interfaces group is mandatory for
+ -- all systems.
+
+ ifNumber OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of network interfaces (regardless of
+ their current state) present on this system."
+ ::= { interfaces 1 }
+
+
+ -- the Interfaces table
+
+ -- The Interfaces table contains information on the entity's
+ -- interfaces. Each interface is thought of as being
+ -- attached to a `subnetwork'. Note that this term should
+ -- not be confused with `subnet' which refers to an
+ -- addressing partitioning scheme used in the Internet suite
+ -- of protocols.
+
+ ifTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF IfEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "A list of interface entries. The number of
+ entries is given by the value of ifNumber."
+ ::= { interfaces 2 }
+
+ ifEntry OBJECT-TYPE
+ SYNTAX IfEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "An interface entry containing objects at the
+ subnetwork layer and below for a particular
+ interface."
+ INDEX { ifIndex }
+ ::= { ifTable 1 }
+
+ IfEntry ::=
+ SEQUENCE {
+ ifIndex
+ INTEGER,
+
+
+
+SNMP Working Group [Page 16]
+
+RFC 1213 MIB-II March 1991
+
+
+ ifDescr
+ DisplayString,
+ ifType
+ INTEGER,
+ ifMtu
+ INTEGER,
+ ifSpeed
+ Gauge,
+ ifPhysAddress
+ PhysAddress,
+ ifAdminStatus
+ INTEGER,
+ ifOperStatus
+ INTEGER,
+ ifLastChange
+ TimeTicks,
+ ifInOctets
+ Counter,
+ ifInUcastPkts
+ Counter,
+ ifInNUcastPkts
+ Counter,
+ ifInDiscards
+ Counter,
+ ifInErrors
+ Counter,
+ ifInUnknownProtos
+ Counter,
+ ifOutOctets
+ Counter,
+ ifOutUcastPkts
+ Counter,
+ ifOutNUcastPkts
+ Counter,
+ ifOutDiscards
+ Counter,
+ ifOutErrors
+ Counter,
+ ifOutQLen
+ Gauge,
+ ifSpecific
+ OBJECT IDENTIFIER
+ }
+
+ ifIndex OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 17]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "A unique value for each interface. Its value
+ ranges between 1 and the value of ifNumber. The
+ value for each interface must remain constant at
+ least from one re-initialization of the entity's
+ network management system to the next re-
+ initialization."
+ ::= { ifEntry 1 }
+
+ ifDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "A textual string containing information about the
+ interface. This string should include the name of
+ the manufacturer, the product name and the version
+ of the hardware interface."
+ ::= { ifEntry 2 }
+
+ ifType OBJECT-TYPE
+ SYNTAX INTEGER {
+ other(1), -- none of the following
+ regular1822(2),
+ hdh1822(3),
+ ddn-x25(4),
+ rfc877-x25(5),
+ ethernet-csmacd(6),
+ iso88023-csmacd(7),
+ iso88024-tokenBus(8),
+ iso88025-tokenRing(9),
+ iso88026-man(10),
+ starLan(11),
+ proteon-10Mbit(12),
+ proteon-80Mbit(13),
+ hyperchannel(14),
+ fddi(15),
+ lapb(16),
+ sdlc(17),
+ ds1(18), -- T-1
+ e1(19), -- european equiv. of T-1
+ basicISDN(20),
+ primaryISDN(21), -- proprietary serial
+ propPointToPointSerial(22),
+ ppp(23),
+ softwareLoopback(24),
+ eon(25), -- CLNP over IP [11]
+ ethernet-3Mbit(26),
+
+
+
+SNMP Working Group [Page 18]
+
+RFC 1213 MIB-II March 1991
+
+
+ nsip(27), -- XNS over IP
+ slip(28), -- generic SLIP
+ ultra(29), -- ULTRA technologies
+ ds3(30), -- T-3
+ sip(31), -- SMDS
+ frame-relay(32)
+ }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The type of interface, distinguished according to
+ the physical/link protocol(s) immediately `below'
+ the network layer in the protocol stack."
+ ::= { ifEntry 3 }
+
+ ifMtu OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The size of the largest datagram which can be
+ sent/received on the interface, specified in
+ octets. For interfaces that are used for
+ transmitting network datagrams, this is the size
+ of the largest network datagram that can be sent
+ on the interface."
+ ::= { ifEntry 4 }
+
+ ifSpeed OBJECT-TYPE
+ SYNTAX Gauge
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "An estimate of the interface's current bandwidth
+ in bits per second. For interfaces which do not
+ vary in bandwidth or for those where no accurate
+ estimation can be made, this object should contain
+ the nominal bandwidth."
+ ::= { ifEntry 5 }
+
+ ifPhysAddress OBJECT-TYPE
+ SYNTAX PhysAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The interface's address at the protocol layer
+ immediately `below' the network layer in the
+ protocol stack. For interfaces which do not have
+
+
+
+SNMP Working Group [Page 19]
+
+RFC 1213 MIB-II March 1991
+
+
+ such an address (e.g., a serial line), this object
+ should contain an octet string of zero length."
+ ::= { ifEntry 6 }
+
+ ifAdminStatus OBJECT-TYPE
+ SYNTAX INTEGER {
+ up(1), -- ready to pass packets
+ down(2),
+ testing(3) -- in some test mode
+ }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The desired state of the interface. The
+ testing(3) state indicates that no operational
+ packets can be passed."
+ ::= { ifEntry 7 }
+
+ ifOperStatus OBJECT-TYPE
+ SYNTAX INTEGER {
+ up(1), -- ready to pass packets
+ down(2),
+ testing(3) -- in some test mode
+ }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The current operational state of the interface.
+ The testing(3) state indicates that no operational
+ packets can be passed."
+ ::= { ifEntry 8 }
+
+ ifLastChange OBJECT-TYPE
+ SYNTAX TimeTicks
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The value of sysUpTime at the time the interface
+ entered its current operational state. If the
+ current state was entered prior to the last re-
+ initialization of the local network management
+ subsystem, then this object contains a zero
+ value."
+ ::= { ifEntry 9 }
+
+ ifInOctets OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+
+
+
+SNMP Working Group [Page 20]
+
+RFC 1213 MIB-II March 1991
+
+
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of octets received on the
+ interface, including framing characters."
+ ::= { ifEntry 10 }
+
+ ifInUcastPkts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of subnetwork-unicast packets
+ delivered to a higher-layer protocol."
+ ::= { ifEntry 11 }
+
+ ifInNUcastPkts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of non-unicast (i.e., subnetwork-
+ broadcast or subnetwork-multicast) packets
+ delivered to a higher-layer protocol."
+ ::= { ifEntry 12 }
+
+ ifInDiscards OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of inbound packets which were chosen
+ to be discarded even though no errors had been
+ detected to prevent their being deliverable to a
+ higher-layer protocol. One possible reason for
+ discarding such a packet could be to free up
+ buffer space."
+ ::= { ifEntry 13 }
+
+ ifInErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of inbound packets that contained
+ errors preventing them from being deliverable to a
+ higher-layer protocol."
+ ::= { ifEntry 14 }
+
+
+
+
+SNMP Working Group [Page 21]
+
+RFC 1213 MIB-II March 1991
+
+
+ ifInUnknownProtos OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of packets received via the interface
+ which were discarded because of an unknown or
+ unsupported protocol."
+ ::= { ifEntry 15 }
+
+ ifOutOctets OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of octets transmitted out of the
+ interface, including framing characters."
+ ::= { ifEntry 16 }
+
+ ifOutUcastPkts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of packets that higher-level
+ protocols requested be transmitted to a
+ subnetwork-unicast address, including those that
+ were discarded or not sent."
+ ::= { ifEntry 17 }
+
+ ifOutNUcastPkts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of packets that higher-level
+ protocols requested be transmitted to a non-
+ unicast (i.e., a subnetwork-broadcast or
+ subnetwork-multicast) address, including those
+ that were discarded or not sent."
+ ::= { ifEntry 18 }
+
+ ifOutDiscards OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of outbound packets which were chosen
+
+
+
+SNMP Working Group [Page 22]
+
+RFC 1213 MIB-II March 1991
+
+
+ to be discarded even though no errors had been
+ detected to prevent their being transmitted. One
+ possible reason for discarding such a packet could
+ be to free up buffer space."
+ ::= { ifEntry 19 }
+
+ ifOutErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of outbound packets that could not be
+ transmitted because of errors."
+ ::= { ifEntry 20 }
+
+ ifOutQLen OBJECT-TYPE
+ SYNTAX Gauge
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The length of the output packet queue (in
+ packets)."
+ ::= { ifEntry 21 }
+
+ ifSpecific OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "A reference to MIB definitions specific to the
+ particular media being used to realize the
+ interface. For example, if the interface is
+ realized by an ethernet, then the value of this
+ object refers to a document defining objects
+ specific to ethernet. If this information is not
+ present, its value should be set to the OBJECT
+ IDENTIFIER { 0 0 }, which is a syntatically valid
+ object identifier, and any conformant
+ implementation of ASN.1 and BER must be able to
+ generate and recognize this value."
+ ::= { ifEntry 22 }
+
+
+ -- the Address Translation group
+
+ -- Implementation of the Address Translation group is
+ -- mandatory for all systems. Note however that this group
+ -- is deprecated by MIB-II. That is, it is being included
+
+
+
+SNMP Working Group [Page 23]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- solely for compatibility with MIB-I nodes, and will most
+ -- likely be excluded from MIB-III nodes. From MIB-II and
+ -- onwards, each network protocol group contains its own
+ -- address translation tables.
+
+ -- The Address Translation group contains one table which is
+ -- the union across all interfaces of the translation tables
+ -- for converting a NetworkAddress (e.g., an IP address) into
+ -- a subnetwork-specific address. For lack of a better term,
+ -- this document refers to such a subnetwork-specific address
+ -- as a `physical' address.
+
+ -- Examples of such translation tables are: for broadcast
+ -- media where ARP is in use, the translation table is
+ -- equivalent to the ARP cache; or, on an X.25 network where
+ -- non-algorithmic translation to X.121 addresses is
+ -- required, the translation table contains the
+ -- NetworkAddress to X.121 address equivalences.
+
+ atTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF AtEntry
+ ACCESS not-accessible
+ STATUS deprecated
+ DESCRIPTION
+ "The Address Translation tables contain the
+ NetworkAddress to `physical' address equivalences.
+ Some interfaces do not use translation tables for
+ determining address equivalences (e.g., DDN-X.25
+ has an algorithmic method); if all interfaces are
+ of this type, then the Address Translation table
+ is empty, i.e., has zero entries."
+ ::= { at 1 }
+
+ atEntry OBJECT-TYPE
+ SYNTAX AtEntry
+ ACCESS not-accessible
+ STATUS deprecated
+ DESCRIPTION
+ "Each entry contains one NetworkAddress to
+ `physical' address equivalence."
+ INDEX { atIfIndex,
+ atNetAddress }
+ ::= { atTable 1 }
+
+ AtEntry ::=
+ SEQUENCE {
+ atIfIndex
+ INTEGER,
+
+
+
+SNMP Working Group [Page 24]
+
+RFC 1213 MIB-II March 1991
+
+
+ atPhysAddress
+ PhysAddress,
+ atNetAddress
+ NetworkAddress
+ }
+
+ atIfIndex OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS deprecated
+ DESCRIPTION
+ "The interface on which this entry's equivalence
+ is effective. The interface identified by a
+ particular value of this index is the same
+ interface as identified by the same value of
+ ifIndex."
+ ::= { atEntry 1 }
+
+ atPhysAddress OBJECT-TYPE
+ SYNTAX PhysAddress
+ ACCESS read-write
+ STATUS deprecated
+ DESCRIPTION
+ "The media-dependent `physical' address.
+
+ Setting this object to a null string (one of zero
+ length) has the effect of invaliding the
+ corresponding entry in the atTable object. That
+ is, it effectively dissasociates the interface
+ identified with said entry from the mapping
+ identified with said entry. It is an
+ implementation-specific matter as to whether the
+ agent removes an invalidated entry from the table.
+ Accordingly, management stations must be prepared
+ to receive tabular information from agents that
+ corresponds to entries not currently in use.
+ Proper interpretation of such entries requires
+ examination of the relevant atPhysAddress object."
+ ::= { atEntry 2 }
+
+ atNetAddress OBJECT-TYPE
+ SYNTAX NetworkAddress
+ ACCESS read-write
+ STATUS deprecated
+ DESCRIPTION
+ "The NetworkAddress (e.g., the IP address)
+ corresponding to the media-dependent `physical'
+ address."
+
+
+
+SNMP Working Group [Page 25]
+
+RFC 1213 MIB-II March 1991
+
+
+ ::= { atEntry 3 }
+
+
+ -- the IP group
+
+ -- Implementation of the IP group is mandatory for all
+ -- systems.
+
+ ipForwarding OBJECT-TYPE
+ SYNTAX INTEGER {
+ forwarding(1), -- acting as a gateway
+ not-forwarding(2) -- NOT acting as a gateway
+ }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The indication of whether this entity is acting
+ as an IP gateway in respect to the forwarding of
+ datagrams received by, but not addressed to, this
+ entity. IP gateways forward datagrams. IP hosts
+ do not (except those source-routed via the host).
+
+ Note that for some managed nodes, this object may
+ take on only a subset of the values possible.
+ Accordingly, it is appropriate for an agent to
+ return a `badValue' response if a management
+ station attempts to change this object to an
+ inappropriate value."
+ ::= { ip 1 }
+
+ ipDefaultTTL OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The default value inserted into the Time-To-Live
+ field of the IP header of datagrams originated at
+ this entity, whenever a TTL value is not supplied
+ by the transport layer protocol."
+ ::= { ip 2 }
+
+ ipInReceives OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of input datagrams received from
+ interfaces, including those received in error."
+
+
+
+SNMP Working Group [Page 26]
+
+RFC 1213 MIB-II March 1991
+
+
+ ::= { ip 3 }
+
+ ipInHdrErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of input datagrams discarded due to
+ errors in their IP headers, including bad
+ checksums, version number mismatch, other format
+ errors, time-to-live exceeded, errors discovered
+ in processing their IP options, etc."
+ ::= { ip 4 }
+
+ ipInAddrErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of input datagrams discarded because
+ the IP address in their IP header's destination
+ field was not a valid address to be received at
+ this entity. This count includes invalid
+ addresses (e.g., 0.0.0.0) and addresses of
+ unsupported Classes (e.g., Class E). For entities
+ which are not IP Gateways and therefore do not
+ forward datagrams, this counter includes datagrams
+ discarded because the destination address was not
+ a local address."
+ ::= { ip 5 }
+
+ ipForwDatagrams OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of input datagrams for which this
+ entity was not their final IP destination, as a
+ result of which an attempt was made to find a
+ route to forward them to that final destination.
+ In entities which do not act as IP Gateways, this
+ counter will include only those packets which were
+ Source-Routed via this entity, and the Source-
+ Route option processing was successful."
+ ::= { ip 6 }
+
+ ipInUnknownProtos OBJECT-TYPE
+ SYNTAX Counter
+
+
+
+SNMP Working Group [Page 27]
+
+RFC 1213 MIB-II March 1991
+
+
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of locally-addressed datagrams
+ received successfully but discarded because of an
+ unknown or unsupported protocol."
+ ::= { ip 7 }
+
+ ipInDiscards OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of input IP datagrams for which no
+ problems were encountered to prevent their
+ continued processing, but which were discarded
+ (e.g., for lack of buffer space). Note that this
+ counter does not include any datagrams discarded
+ while awaiting re-assembly."
+ ::= { ip 8 }
+
+ ipInDelivers OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of input datagrams successfully
+ delivered to IP user-protocols (including ICMP)."
+ ::= { ip 9 }
+
+ ipOutRequests OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of IP datagrams which local IP
+ user-protocols (including ICMP) supplied to IP in
+ requests for transmission. Note that this counter
+ does not include any datagrams counted in
+ ipForwDatagrams."
+ ::= { ip 10 }
+
+ ipOutDiscards OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of output IP datagrams for which no
+
+
+
+SNMP Working Group [Page 28]
+
+RFC 1213 MIB-II March 1991
+
+
+ problem was encountered to prevent their
+ transmission to their destination, but which were
+ discarded (e.g., for lack of buffer space). Note
+ that this counter would include datagrams counted
+ in ipForwDatagrams if any such packets met this
+ (discretionary) discard criterion."
+ ::= { ip 11 }
+
+ ipOutNoRoutes OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of IP datagrams discarded because no
+ route could be found to transmit them to their
+ destination. Note that this counter includes any
+ packets counted in ipForwDatagrams which meet this
+ `no-route' criterion. Note that this includes any
+ datagarms which a host cannot route because all of
+ its default gateways are down."
+ ::= { ip 12 }
+
+ ipReasmTimeout OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The maximum number of seconds which received
+ fragments are held while they are awaiting
+ reassembly at this entity."
+ ::= { ip 13 }
+
+ ipReasmReqds OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of IP fragments received which needed
+ to be reassembled at this entity."
+ ::= { ip 14 }
+
+ ipReasmOKs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of IP datagrams successfully re-
+ assembled."
+
+
+
+SNMP Working Group [Page 29]
+
+RFC 1213 MIB-II March 1991
+
+
+ ::= { ip 15 }
+
+ ipReasmFails OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of failures detected by the IP re-
+ assembly algorithm (for whatever reason: timed
+ out, errors, etc). Note that this is not
+ necessarily a count of discarded IP fragments
+ since some algorithms (notably the algorithm in
+ RFC 815) can lose track of the number of fragments
+ by combining them as they are received."
+ ::= { ip 16 }
+
+ ipFragOKs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of IP datagrams that have been
+ successfully fragmented at this entity."
+ ::= { ip 17 }
+
+ ipFragFails OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of IP datagrams that have been
+ discarded because they needed to be fragmented at
+ this entity but could not be, e.g., because their
+ Don't Fragment flag was set."
+ ::= { ip 18 }
+
+ ipFragCreates OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of IP datagram fragments that have
+ been generated as a result of fragmentation at
+ this entity."
+ ::= { ip 19 }
+
+
+
+
+
+
+SNMP Working Group [Page 30]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- the IP address table
+
+ -- The IP address table contains this entity's IP addressing
+ -- information.
+
+ ipAddrTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF IpAddrEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "The table of addressing information relevant to
+ this entity's IP addresses."
+ ::= { ip 20 }
+
+ ipAddrEntry OBJECT-TYPE
+ SYNTAX IpAddrEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "The addressing information for one of this
+ entity's IP addresses."
+ INDEX { ipAdEntAddr }
+ ::= { ipAddrTable 1 }
+
+ IpAddrEntry ::=
+ SEQUENCE {
+ ipAdEntAddr
+ IpAddress,
+ ipAdEntIfIndex
+ INTEGER,
+ ipAdEntNetMask
+ IpAddress,
+ ipAdEntBcastAddr
+ INTEGER,
+ ipAdEntReasmMaxSize
+ INTEGER (0..65535)
+ }
+
+ ipAdEntAddr OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The IP address to which this entry's addressing
+ information pertains."
+ ::= { ipAddrEntry 1 }
+
+
+
+
+
+SNMP Working Group [Page 31]
+
+RFC 1213 MIB-II March 1991
+
+
+ ipAdEntIfIndex OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The index value which uniquely identifies the
+ interface to which this entry is applicable. The
+ interface identified by a particular value of this
+ index is the same interface as identified by the
+ same value of ifIndex."
+ ::= { ipAddrEntry 2 }
+
+ ipAdEntNetMask OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The subnet mask associated with the IP address of
+ this entry. The value of the mask is an IP
+ address with all the network bits set to 1 and all
+ the hosts bits set to 0."
+ ::= { ipAddrEntry 3 }
+
+ ipAdEntBcastAddr OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The value of the least-significant bit in the IP
+ broadcast address used for sending datagrams on
+ the (logical) interface associated with the IP
+ address of this entry. For example, when the
+ Internet standard all-ones broadcast address is
+ used, the value will be 1. This value applies to
+ both the subnet and network broadcasts addresses
+ used by the entity on this (logical) interface."
+ ::= { ipAddrEntry 4 }
+
+ ipAdEntReasmMaxSize OBJECT-TYPE
+ SYNTAX INTEGER (0..65535)
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The size of the largest IP datagram which this
+ entity can re-assemble from incoming IP fragmented
+ datagrams received on this interface."
+ ::= { ipAddrEntry 5 }
+
+
+
+
+SNMP Working Group [Page 32]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- the IP routing table
+
+ -- The IP routing table contains an entry for each route
+ -- presently known to this entity.
+
+ ipRouteTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF IpRouteEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "This entity's IP Routing table."
+ ::= { ip 21 }
+
+ ipRouteEntry OBJECT-TYPE
+ SYNTAX IpRouteEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "A route to a particular destination."
+ INDEX { ipRouteDest }
+ ::= { ipRouteTable 1 }
+
+ IpRouteEntry ::=
+ SEQUENCE {
+ ipRouteDest
+ IpAddress,
+ ipRouteIfIndex
+ INTEGER,
+ ipRouteMetric1
+ INTEGER,
+ ipRouteMetric2
+ INTEGER,
+ ipRouteMetric3
+ INTEGER,
+ ipRouteMetric4
+ INTEGER,
+ ipRouteNextHop
+ IpAddress,
+ ipRouteType
+ INTEGER,
+ ipRouteProto
+ INTEGER,
+ ipRouteAge
+ INTEGER,
+ ipRouteMask
+ IpAddress,
+ ipRouteMetric5
+ INTEGER,
+
+
+
+SNMP Working Group [Page 33]
+
+RFC 1213 MIB-II March 1991
+
+
+ ipRouteInfo
+ OBJECT IDENTIFIER
+ }
+
+ ipRouteDest OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The destination IP address of this route. An
+ entry with a value of 0.0.0.0 is considered a
+ default route. Multiple routes to a single
+ destination can appear in the table, but access to
+ such multiple entries is dependent on the table-
+ access mechanisms defined by the network
+ management protocol in use."
+ ::= { ipRouteEntry 1 }
+
+ ipRouteIfIndex OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The index value which uniquely identifies the
+ local interface through which the next hop of this
+ route should be reached. The interface identified
+ by a particular value of this index is the same
+ interface as identified by the same value of
+ ifIndex."
+ ::= { ipRouteEntry 2 }
+
+ ipRouteMetric1 OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The primary routing metric for this route. The
+ semantics of this metric are determined by the
+ routing-protocol specified in the route's
+ ipRouteProto value. If this metric is not used,
+ its value should be set to -1."
+ ::= { ipRouteEntry 3 }
+
+ ipRouteMetric2 OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+
+
+
+SNMP Working Group [Page 34]
+
+RFC 1213 MIB-II March 1991
+
+
+ "An alternate routing metric for this route. The
+ semantics of this metric are determined by the
+ routing-protocol specified in the route's
+ ipRouteProto value. If this metric is not used,
+ its value should be set to -1."
+ ::= { ipRouteEntry 4 }
+
+ ipRouteMetric3 OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "An alternate routing metric for this route. The
+ semantics of this metric are determined by the
+ routing-protocol specified in the route's
+ ipRouteProto value. If this metric is not used,
+ its value should be set to -1."
+ ::= { ipRouteEntry 5 }
+
+ ipRouteMetric4 OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "An alternate routing metric for this route. The
+ semantics of this metric are determined by the
+ routing-protocol specified in the route's
+ ipRouteProto value. If this metric is not used,
+ its value should be set to -1."
+ ::= { ipRouteEntry 6 }
+
+ ipRouteNextHop OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The IP address of the next hop of this route.
+ (In the case of a route bound to an interface
+ which is realized via a broadcast media, the value
+ of this field is the agent's IP address on that
+ interface.)"
+ ::= { ipRouteEntry 7 }
+
+ ipRouteType OBJECT-TYPE
+ SYNTAX INTEGER {
+ other(1), -- none of the following
+
+ invalid(2), -- an invalidated route
+
+
+
+SNMP Working Group [Page 35]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- route to directly
+ direct(3), -- connected (sub-)network
+
+ -- route to a non-local
+ indirect(4) -- host/network/sub-network
+ }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The type of route. Note that the values
+ direct(3) and indirect(4) refer to the notion of
+ direct and indirect routing in the IP
+ architecture.
+
+ Setting this object to the value invalid(2) has
+ the effect of invalidating the corresponding entry
+ in the ipRouteTable object. That is, it
+ effectively dissasociates the destination
+ identified with said entry from the route
+ identified with said entry. It is an
+ implementation-specific matter as to whether the
+ agent removes an invalidated entry from the table.
+ Accordingly, management stations must be prepared
+ to receive tabular information from agents that
+ corresponds to entries not currently in use.
+ Proper interpretation of such entries requires
+ examination of the relevant ipRouteType object."
+ ::= { ipRouteEntry 8 }
+
+ ipRouteProto OBJECT-TYPE
+ SYNTAX INTEGER {
+ other(1), -- none of the following
+
+ -- non-protocol information,
+ -- e.g., manually configured
+ local(2), -- entries
+
+ -- set via a network
+ netmgmt(3), -- management protocol
+
+ -- obtained via ICMP,
+ icmp(4), -- e.g., Redirect
+
+ -- the remaining values are
+ -- all gateway routing
+ -- protocols
+ egp(5),
+ ggp(6),
+
+
+
+SNMP Working Group [Page 36]
+
+RFC 1213 MIB-II March 1991
+
+
+ hello(7),
+ rip(8),
+ is-is(9),
+ es-is(10),
+ ciscoIgrp(11),
+ bbnSpfIgp(12),
+ ospf(13),
+ bgp(14)
+ }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The routing mechanism via which this route was
+ learned. Inclusion of values for gateway routing
+ protocols is not intended to imply that hosts
+ should support those protocols."
+ ::= { ipRouteEntry 9 }
+
+ ipRouteAge OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The number of seconds since this route was last
+ updated or otherwise determined to be correct.
+ Note that no semantics of `too old' can be implied
+ except through knowledge of the routing protocol
+ by which the route was learned."
+ ::= { ipRouteEntry 10 }
+
+ ipRouteMask OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "Indicate the mask to be logical-ANDed with the
+ destination address before being compared to the
+ value in the ipRouteDest field. For those systems
+ that do not support arbitrary subnet masks, an
+ agent constructs the value of the ipRouteMask by
+ determining whether the value of the correspondent
+ ipRouteDest field belong to a class-A, B, or C
+ network, and then using one of:
+
+ mask network
+ 255.0.0.0 class-A
+ 255.255.0.0 class-B
+ 255.255.255.0 class-C
+
+
+
+SNMP Working Group [Page 37]
+
+RFC 1213 MIB-II March 1991
+
+
+ If the value of the ipRouteDest is 0.0.0.0 (a
+ default route), then the mask value is also
+ 0.0.0.0. It should be noted that all IP routing
+ subsystems implicitly use this mechanism."
+ ::= { ipRouteEntry 11 }
+
+ ipRouteMetric5 OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "An alternate routing metric for this route. The
+ semantics of this metric are determined by the
+ routing-protocol specified in the route's
+ ipRouteProto value. If this metric is not used,
+ its value should be set to -1."
+ ::= { ipRouteEntry 12 }
+
+ ipRouteInfo OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "A reference to MIB definitions specific to the
+ particular routing protocol which is responsible
+ for this route, as determined by the value
+ specified in the route's ipRouteProto value. If
+ this information is not present, its value should
+ be set to the OBJECT IDENTIFIER { 0 0 }, which is
+ a syntatically valid object identifier, and any
+ conformant implementation of ASN.1 and BER must be
+ able to generate and recognize this value."
+ ::= { ipRouteEntry 13 }
+
+
+ -- the IP Address Translation table
+
+ -- The IP address translation table contain the IpAddress to
+ -- `physical' address equivalences. Some interfaces do not
+ -- use translation tables for determining address
+ -- equivalences (e.g., DDN-X.25 has an algorithmic method);
+ -- if all interfaces are of this type, then the Address
+ -- Translation table is empty, i.e., has zero entries.
+
+ ipNetToMediaTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF IpNetToMediaEntry
+ ACCESS not-accessible
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 38]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "The IP Address Translation table used for mapping
+ from IP addresses to physical addresses."
+ ::= { ip 22 }
+
+ ipNetToMediaEntry OBJECT-TYPE
+ SYNTAX IpNetToMediaEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "Each entry contains one IpAddress to `physical'
+ address equivalence."
+ INDEX { ipNetToMediaIfIndex,
+ ipNetToMediaNetAddress }
+ ::= { ipNetToMediaTable 1 }
+
+ IpNetToMediaEntry ::=
+ SEQUENCE {
+ ipNetToMediaIfIndex
+ INTEGER,
+ ipNetToMediaPhysAddress
+ PhysAddress,
+ ipNetToMediaNetAddress
+ IpAddress,
+ ipNetToMediaType
+ INTEGER
+ }
+
+ ipNetToMediaIfIndex OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The interface on which this entry's equivalence
+ is effective. The interface identified by a
+ particular value of this index is the same
+ interface as identified by the same value of
+ ifIndex."
+ ::= { ipNetToMediaEntry 1 }
+
+ ipNetToMediaPhysAddress OBJECT-TYPE
+ SYNTAX PhysAddress
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The media-dependent `physical' address."
+ ::= { ipNetToMediaEntry 2 }
+
+
+
+
+SNMP Working Group [Page 39]
+
+RFC 1213 MIB-II March 1991
+
+
+ ipNetToMediaNetAddress OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The IpAddress corresponding to the media-
+ dependent `physical' address."
+ ::= { ipNetToMediaEntry 3 }
+
+ ipNetToMediaType OBJECT-TYPE
+ SYNTAX INTEGER {
+ other(1), -- none of the following
+ invalid(2), -- an invalidated mapping
+ dynamic(3),
+ static(4)
+ }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The type of mapping.
+
+ Setting this object to the value invalid(2) has
+ the effect of invalidating the corresponding entry
+ in the ipNetToMediaTable. That is, it effectively
+ dissasociates the interface identified with said
+ entry from the mapping identified with said entry.
+ It is an implementation-specific matter as to
+ whether the agent removes an invalidated entry
+ from the table. Accordingly, management stations
+ must be prepared to receive tabular information
+ from agents that corresponds to entries not
+ currently in use. Proper interpretation of such
+ entries requires examination of the relevant
+ ipNetToMediaType object."
+ ::= { ipNetToMediaEntry 4 }
+
+
+ -- additional IP objects
+
+ ipRoutingDiscards OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of routing entries which were chosen
+ to be discarded even though they are valid. One
+ possible reason for discarding such an entry could
+ be to free-up buffer space for other routing
+
+
+
+SNMP Working Group [Page 40]
+
+RFC 1213 MIB-II March 1991
+
+
+ entries."
+ ::= { ip 23 }
+
+
+ -- the ICMP group
+
+ -- Implementation of the ICMP group is mandatory for all
+ -- systems.
+
+ icmpInMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of ICMP messages which the
+ entity received. Note that this counter includes
+ all those counted by icmpInErrors."
+ ::= { icmp 1 }
+
+ icmpInErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP messages which the entity
+ received but determined as having ICMP-specific
+ errors (bad ICMP checksums, bad length, etc.)."
+ ::= { icmp 2 }
+
+ icmpInDestUnreachs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Destination Unreachable
+ messages received."
+ ::= { icmp 3 }
+
+ icmpInTimeExcds OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Time Exceeded messages
+ received."
+ ::= { icmp 4 }
+
+
+
+
+
+SNMP Working Group [Page 41]
+
+RFC 1213 MIB-II March 1991
+
+
+ icmpInParmProbs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Parameter Problem messages
+ received."
+ ::= { icmp 5 }
+
+ icmpInSrcQuenchs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Source Quench messages
+ received."
+ ::= { icmp 6 }
+
+ icmpInRedirects OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Redirect messages received."
+ ::= { icmp 7 }
+
+ icmpInEchos OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Echo (request) messages
+ received."
+ ::= { icmp 8 }
+
+ icmpInEchoReps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Echo Reply messages received."
+ ::= { icmp 9 }
+
+ icmpInTimestamps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+
+
+
+SNMP Working Group [Page 42]
+
+RFC 1213 MIB-II March 1991
+
+
+ "The number of ICMP Timestamp (request) messages
+ received."
+ ::= { icmp 10 }
+
+ icmpInTimestampReps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Timestamp Reply messages
+ received."
+ ::= { icmp 11 }
+
+ icmpInAddrMasks OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Address Mask Request messages
+ received."
+ ::= { icmp 12 }
+
+ icmpInAddrMaskReps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Address Mask Reply messages
+ received."
+ ::= { icmp 13 }
+
+ icmpOutMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of ICMP messages which this
+ entity attempted to send. Note that this counter
+ includes all those counted by icmpOutErrors."
+ ::= { icmp 14 }
+
+ icmpOutErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP messages which this entity did
+ not send due to problems discovered within ICMP
+
+
+
+SNMP Working Group [Page 43]
+
+RFC 1213 MIB-II March 1991
+
+
+ such as a lack of buffers. This value should not
+ include errors discovered outside the ICMP layer
+ such as the inability of IP to route the resultant
+ datagram. In some implementations there may be no
+ types of error which contribute to this counter's
+ value."
+ ::= { icmp 15 }
+
+ icmpOutDestUnreachs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Destination Unreachable
+ messages sent."
+ ::= { icmp 16 }
+
+ icmpOutTimeExcds OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Time Exceeded messages sent."
+ ::= { icmp 17 }
+
+ icmpOutParmProbs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Parameter Problem messages
+ sent."
+ ::= { icmp 18 }
+
+ icmpOutSrcQuenchs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Source Quench messages sent."
+ ::= { icmp 19 }
+
+ icmpOutRedirects OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Redirect messages sent. For a
+
+
+
+SNMP Working Group [Page 44]
+
+RFC 1213 MIB-II March 1991
+
+
+ host, this object will always be zero, since hosts
+ do not send redirects."
+ ::= { icmp 20 }
+
+ icmpOutEchos OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Echo (request) messages sent."
+ ::= { icmp 21 }
+
+ icmpOutEchoReps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Echo Reply messages sent."
+ ::= { icmp 22 }
+
+ icmpOutTimestamps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Timestamp (request) messages
+ sent."
+ ::= { icmp 23 }
+
+ icmpOutTimestampReps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Timestamp Reply messages
+ sent."
+ ::= { icmp 24 }
+
+ icmpOutAddrMasks OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Address Mask Request messages
+ sent."
+ ::= { icmp 25 }
+
+
+
+
+
+SNMP Working Group [Page 45]
+
+RFC 1213 MIB-II March 1991
+
+
+ icmpOutAddrMaskReps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of ICMP Address Mask Reply messages
+ sent."
+ ::= { icmp 26 }
+
+
+ -- the TCP group
+
+ -- Implementation of the TCP group is mandatory for all
+ -- systems that implement the TCP.
+
+ -- Note that instances of object types that represent
+ -- information about a particular TCP connection are
+ -- transient; they persist only as long as the connection
+ -- in question.
+
+ tcpRtoAlgorithm OBJECT-TYPE
+ SYNTAX INTEGER {
+ other(1), -- none of the following
+
+ constant(2), -- a constant rto
+ rsre(3), -- MIL-STD-1778, Appendix B
+ vanj(4) -- Van Jacobson's algorithm [10]
+ }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The algorithm used to determine the timeout value
+ used for retransmitting unacknowledged octets."
+ ::= { tcp 1 }
+
+ tcpRtoMin OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The minimum value permitted by a TCP
+ implementation for the retransmission timeout,
+ measured in milliseconds. More refined semantics
+ for objects of this type depend upon the algorithm
+ used to determine the retransmission timeout. In
+ particular, when the timeout algorithm is rsre(3),
+ an object of this type has the semantics of the
+ LBOUND quantity described in RFC 793."
+
+
+
+SNMP Working Group [Page 46]
+
+RFC 1213 MIB-II March 1991
+
+
+ ::= { tcp 2 }
+
+
+ tcpRtoMax OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The maximum value permitted by a TCP
+ implementation for the retransmission timeout,
+ measured in milliseconds. More refined semantics
+ for objects of this type depend upon the algorithm
+ used to determine the retransmission timeout. In
+ particular, when the timeout algorithm is rsre(3),
+ an object of this type has the semantics of the
+ UBOUND quantity described in RFC 793."
+ ::= { tcp 3 }
+
+ tcpMaxConn OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The limit on the total number of TCP connections
+ the entity can support. In entities where the
+ maximum number of connections is dynamic, this
+ object should contain the value -1."
+ ::= { tcp 4 }
+
+ tcpActiveOpens OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of times TCP connections have made a
+ direct transition to the SYN-SENT state from the
+ CLOSED state."
+ ::= { tcp 5 }
+
+ tcpPassiveOpens OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of times TCP connections have made a
+ direct transition to the SYN-RCVD state from the
+ LISTEN state."
+ ::= { tcp 6 }
+
+
+
+SNMP Working Group [Page 47]
+
+RFC 1213 MIB-II March 1991
+
+
+ tcpAttemptFails OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of times TCP connections have made a
+ direct transition to the CLOSED state from either
+ the SYN-SENT state or the SYN-RCVD state, plus the
+ number of times TCP connections have made a direct
+ transition to the LISTEN state from the SYN-RCVD
+ state."
+ ::= { tcp 7 }
+
+ tcpEstabResets OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of times TCP connections have made a
+ direct transition to the CLOSED state from either
+ the ESTABLISHED state or the CLOSE-WAIT state."
+ ::= { tcp 8 }
+
+ tcpCurrEstab OBJECT-TYPE
+ SYNTAX Gauge
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of TCP connections for which the
+ current state is either ESTABLISHED or CLOSE-
+ WAIT."
+ ::= { tcp 9 }
+
+ tcpInSegs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of segments received, including
+ those received in error. This count includes
+ segments received on currently established
+ connections."
+ ::= { tcp 10 }
+
+ tcpOutSegs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 48]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "The total number of segments sent, including
+ those on current connections but excluding those
+ containing only retransmitted octets."
+ ::= { tcp 11 }
+
+ tcpRetransSegs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of segments retransmitted - that
+ is, the number of TCP segments transmitted
+ containing one or more previously transmitted
+ octets."
+ ::= { tcp 12 }
+
+
+ -- the TCP Connection table
+
+ -- The TCP connection table contains information about this
+ -- entity's existing TCP connections.
+
+ tcpConnTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF TcpConnEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "A table containing TCP connection-specific
+ information."
+ ::= { tcp 13 }
+
+ tcpConnEntry OBJECT-TYPE
+ SYNTAX TcpConnEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "Information about a particular current TCP
+ connection. An object of this type is transient,
+ in that it ceases to exist when (or soon after)
+ the connection makes the transition to the CLOSED
+ state."
+ INDEX { tcpConnLocalAddress,
+ tcpConnLocalPort,
+ tcpConnRemAddress,
+ tcpConnRemPort }
+ ::= { tcpConnTable 1 }
+
+
+
+
+SNMP Working Group [Page 49]
+
+RFC 1213 MIB-II March 1991
+
+
+ TcpConnEntry ::=
+ SEQUENCE {
+ tcpConnState
+ INTEGER,
+ tcpConnLocalAddress
+ IpAddress,
+ tcpConnLocalPort
+ INTEGER (0..65535),
+ tcpConnRemAddress
+ IpAddress,
+ tcpConnRemPort
+ INTEGER (0..65535)
+ }
+
+ tcpConnState OBJECT-TYPE
+ SYNTAX INTEGER {
+ closed(1),
+ listen(2),
+ synSent(3),
+ synReceived(4),
+ established(5),
+ finWait1(6),
+ finWait2(7),
+ closeWait(8),
+ lastAck(9),
+ closing(10),
+ timeWait(11),
+ deleteTCB(12)
+ }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "The state of this TCP connection.
+
+ The only value which may be set by a management
+ station is deleteTCB(12). Accordingly, it is
+ appropriate for an agent to return a `badValue'
+ response if a management station attempts to set
+ this object to any other value.
+
+ If a management station sets this object to the
+ value deleteTCB(12), then this has the effect of
+ deleting the TCB (as defined in RFC 793) of the
+ corresponding connection on the managed node,
+ resulting in immediate termination of the
+ connection.
+
+ As an implementation-specific option, a RST
+
+
+
+SNMP Working Group [Page 50]
+
+RFC 1213 MIB-II March 1991
+
+
+ segment may be sent from the managed node to the
+ other TCP endpoint (note however that RST segments
+ are not sent reliably)."
+ ::= { tcpConnEntry 1 }
+
+ tcpConnLocalAddress OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The local IP address for this TCP connection. In
+ the case of a connection in the listen state which
+ is willing to accept connections for any IP
+ interface associated with the node, the value
+ 0.0.0.0 is used."
+ ::= { tcpConnEntry 2 }
+
+ tcpConnLocalPort OBJECT-TYPE
+ SYNTAX INTEGER (0..65535)
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The local port number for this TCP connection."
+ ::= { tcpConnEntry 3 }
+
+ tcpConnRemAddress OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The remote IP address for this TCP connection."
+ ::= { tcpConnEntry 4 }
+
+ tcpConnRemPort OBJECT-TYPE
+ SYNTAX INTEGER (0..65535)
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The remote port number for this TCP connection."
+ ::= { tcpConnEntry 5 }
+
+
+ -- additional TCP objects
+
+ tcpInErrs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 51]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "The total number of segments received in error
+ (e.g., bad TCP checksums)."
+ ::= { tcp 14 }
+
+ tcpOutRsts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of TCP segments sent containing the
+ RST flag."
+ ::= { tcp 15 }
+
+
+ -- the UDP group
+
+ -- Implementation of the UDP group is mandatory for all
+ -- systems which implement the UDP.
+
+ udpInDatagrams OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of UDP datagrams delivered to
+ UDP users."
+ ::= { udp 1 }
+
+ udpNoPorts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of received UDP datagrams for
+ which there was no application at the destination
+ port."
+ ::= { udp 2 }
+
+ udpInErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of received UDP datagrams that could
+ not be delivered for reasons other than the lack
+ of an application at the destination port."
+ ::= { udp 3 }
+
+
+
+SNMP Working Group [Page 52]
+
+RFC 1213 MIB-II March 1991
+
+
+ udpOutDatagrams OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of UDP datagrams sent from this
+ entity."
+ ::= { udp 4 }
+
+
+ -- the UDP Listener table
+
+ -- The UDP listener table contains information about this
+ -- entity's UDP end-points on which a local application is
+ -- currently accepting datagrams.
+
+ udpTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF UdpEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "A table containing UDP listener information."
+ ::= { udp 5 }
+
+ udpEntry OBJECT-TYPE
+ SYNTAX UdpEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "Information about a particular current UDP
+ listener."
+ INDEX { udpLocalAddress, udpLocalPort }
+ ::= { udpTable 1 }
+
+ UdpEntry ::=
+ SEQUENCE {
+ udpLocalAddress
+ IpAddress,
+ udpLocalPort
+ INTEGER (0..65535)
+ }
+
+ udpLocalAddress OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The local IP address for this UDP listener. In
+
+
+
+SNMP Working Group [Page 53]
+
+RFC 1213 MIB-II March 1991
+
+
+ the case of a UDP listener which is willing to
+ accept datagrams for any IP interface associated
+ with the node, the value 0.0.0.0 is used."
+ ::= { udpEntry 1 }
+
+ udpLocalPort OBJECT-TYPE
+ SYNTAX INTEGER (0..65535)
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The local port number for this UDP listener."
+ ::= { udpEntry 2 }
+
+
+ -- the EGP group
+
+ -- Implementation of the EGP group is mandatory for all
+ -- systems which implement the EGP.
+
+ egpInMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP messages received without
+ error."
+ ::= { egp 1 }
+
+ egpInErrors OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP messages received that proved
+ to be in error."
+ ::= { egp 2 }
+
+ egpOutMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of locally generated EGP
+ messages."
+ ::= { egp 3 }
+
+ egpOutErrors OBJECT-TYPE
+ SYNTAX Counter
+
+
+
+SNMP Working Group [Page 54]
+
+RFC 1213 MIB-II March 1991
+
+
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of locally generated EGP messages not
+ sent due to resource limitations within an EGP
+ entity."
+ ::= { egp 4 }
+
+
+ -- the EGP Neighbor table
+
+ -- The EGP neighbor table contains information about this
+ -- entity's EGP neighbors.
+
+ egpNeighTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF EgpNeighEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "The EGP neighbor table."
+ ::= { egp 5 }
+
+ egpNeighEntry OBJECT-TYPE
+ SYNTAX EgpNeighEntry
+ ACCESS not-accessible
+ STATUS mandatory
+ DESCRIPTION
+ "Information about this entity's relationship with
+ a particular EGP neighbor."
+ INDEX { egpNeighAddr }
+ ::= { egpNeighTable 1 }
+
+ EgpNeighEntry ::=
+ SEQUENCE {
+ egpNeighState
+ INTEGER,
+ egpNeighAddr
+ IpAddress,
+ egpNeighAs
+ INTEGER,
+ egpNeighInMsgs
+ Counter,
+ egpNeighInErrs
+ Counter,
+ egpNeighOutMsgs
+ Counter,
+ egpNeighOutErrs
+ Counter,
+
+
+
+SNMP Working Group [Page 55]
+
+RFC 1213 MIB-II March 1991
+
+
+ egpNeighInErrMsgs
+ Counter,
+ egpNeighOutErrMsgs
+ Counter,
+ egpNeighStateUps
+ Counter,
+ egpNeighStateDowns
+ Counter,
+ egpNeighIntervalHello
+ INTEGER,
+ egpNeighIntervalPoll
+ INTEGER,
+ egpNeighMode
+ INTEGER,
+ egpNeighEventTrigger
+ INTEGER
+ }
+
+ egpNeighState OBJECT-TYPE
+ SYNTAX INTEGER {
+ idle(1),
+ acquisition(2),
+ down(3),
+ up(4),
+ cease(5)
+ }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The EGP state of the local system with respect to
+ this entry's EGP neighbor. Each EGP state is
+ represented by a value that is one greater than
+ the numerical value associated with said state in
+ RFC 904."
+ ::= { egpNeighEntry 1 }
+
+ egpNeighAddr OBJECT-TYPE
+ SYNTAX IpAddress
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The IP address of this entry's EGP neighbor."
+ ::= { egpNeighEntry 2 }
+
+ egpNeighAs OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 56]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "The autonomous system of this EGP peer. Zero
+ should be specified if the autonomous system
+ number of the neighbor is not yet known."
+ ::= { egpNeighEntry 3 }
+
+ egpNeighInMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP messages received without error
+ from this EGP peer."
+ ::= { egpNeighEntry 4 }
+
+ egpNeighInErrs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP messages received from this EGP
+ peer that proved to be in error (e.g., bad EGP
+ checksum)."
+ ::= { egpNeighEntry 5 }
+
+ egpNeighOutMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of locally generated EGP messages to
+ this EGP peer."
+ ::= { egpNeighEntry 6 }
+
+ egpNeighOutErrs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of locally generated EGP messages not
+ sent to this EGP peer due to resource limitations
+ within an EGP entity."
+ ::= { egpNeighEntry 7 }
+
+ egpNeighInErrMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 57]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "The number of EGP-defined error messages received
+ from this EGP peer."
+ ::= { egpNeighEntry 8 }
+
+ egpNeighOutErrMsgs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP-defined error messages sent to
+ this EGP peer."
+ ::= { egpNeighEntry 9 }
+
+ egpNeighStateUps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP state transitions to the UP
+ state with this EGP peer."
+ ::= { egpNeighEntry 10 }
+
+ egpNeighStateDowns OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The number of EGP state transitions from the UP
+ state to any other state with this EGP peer."
+ ::= { egpNeighEntry 11 }
+
+ egpNeighIntervalHello OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The interval between EGP Hello command
+ retransmissions (in hundredths of a second). This
+ represents the t1 timer as defined in RFC 904."
+ ::= { egpNeighEntry 12 }
+
+ egpNeighIntervalPoll OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The interval between EGP poll command
+
+
+
+SNMP Working Group [Page 58]
+
+RFC 1213 MIB-II March 1991
+
+
+ retransmissions (in hundredths of a second). This
+ represents the t3 timer as defined in RFC 904."
+ ::= { egpNeighEntry 13 }
+
+ egpNeighMode OBJECT-TYPE
+ SYNTAX INTEGER { active(1), passive(2) }
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The polling mode of this EGP entity, either
+ passive or active."
+ ::= { egpNeighEntry 14 }
+
+ egpNeighEventTrigger OBJECT-TYPE
+ SYNTAX INTEGER { start(1), stop(2) }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "A control variable used to trigger operator-
+ initiated Start and Stop events. When read, this
+ variable always returns the most recent value that
+ egpNeighEventTrigger was set to. If it has not
+ been set since the last initialization of the
+ network management subsystem on the node, it
+ returns a value of `stop'.
+
+ When set, this variable causes a Start or Stop
+ event on the specified neighbor, as specified on
+ pages 8-10 of RFC 904. Briefly, a Start event
+ causes an Idle peer to begin neighbor acquisition
+ and a non-Idle peer to reinitiate neighbor
+ acquisition. A stop event causes a non-Idle peer
+ to return to the Idle state until a Start event
+ occurs, either via egpNeighEventTrigger or
+ otherwise."
+ ::= { egpNeighEntry 15 }
+
+
+ -- additional EGP objects
+
+ egpAs OBJECT-TYPE
+ SYNTAX INTEGER
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The autonomous system number of this EGP entity."
+ ::= { egp 6 }
+
+
+
+
+SNMP Working Group [Page 59]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- the Transmission group
+
+ -- Based on the transmission media underlying each interface
+ -- on a system, the corresponding portion of the Transmission
+ -- group is mandatory for that system.
+
+ -- When Internet-standard definitions for managing
+ -- transmission media are defined, the transmission group is
+ -- used to provide a prefix for the names of those objects.
+
+ -- Typically, such definitions reside in the experimental
+ -- portion of the MIB until they are "proven", then as a
+ -- part of the Internet standardization process, the
+ -- definitions are accordingly elevated and a new object
+ -- identifier, under the transmission group is defined. By
+ -- convention, the name assigned is:
+ --
+ -- type OBJECT IDENTIFIER ::= { transmission number }
+ --
+ -- where "type" is the symbolic value used for the media in
+ -- the ifType column of the ifTable object, and "number" is
+ -- the actual integer value corresponding to the symbol.
+
+
+ -- the SNMP group
+
+ -- Implementation of the SNMP group is mandatory for all
+ -- systems which support an SNMP protocol entity. Some of
+ -- the objects defined below will be zero-valued in those
+ -- SNMP implementations that are optimized to support only
+ -- those functions specific to either a management agent or
+ -- a management station. In particular, it should be
+ -- observed that the objects below refer to an SNMP entity,
+ -- and there may be several SNMP entities residing on a
+ -- managed node (e.g., if the node is hosting acting as
+ -- a management station).
+
+ snmpInPkts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of Messages delivered to the
+ SNMP entity from the transport service."
+ ::= { snmp 1 }
+
+ snmpOutPkts OBJECT-TYPE
+ SYNTAX Counter
+
+
+
+SNMP Working Group [Page 60]
+
+RFC 1213 MIB-II March 1991
+
+
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Messages which were
+ passed from the SNMP protocol entity to the
+ transport service."
+ ::= { snmp 2 }
+
+ snmpInBadVersions OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Messages which were
+ delivered to the SNMP protocol entity and were for
+ an unsupported SNMP version."
+ ::= { snmp 3 }
+
+ snmpInBadCommunityNames OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Messages delivered to
+ the SNMP protocol entity which used a SNMP
+ community name not known to said entity."
+ ::= { snmp 4 }
+
+ snmpInBadCommunityUses OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Messages delivered to
+ the SNMP protocol entity which represented an SNMP
+ operation which was not allowed by the SNMP
+ community named in the Message."
+ ::= { snmp 5 }
+
+ snmpInASNParseErrs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of ASN.1 or BER errors
+ encountered by the SNMP protocol entity when
+ decoding received SNMP Messages."
+ ::= { snmp 6 }
+
+
+
+SNMP Working Group [Page 61]
+
+RFC 1213 MIB-II March 1991
+
+
+ -- { snmp 7 } is not used
+
+ snmpInTooBigs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ delivered to the SNMP protocol entity and for
+ which the value of the error-status field is
+ `tooBig'."
+ ::= { snmp 8 }
+
+ snmpInNoSuchNames OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ delivered to the SNMP protocol entity and for
+ which the value of the error-status field is
+ `noSuchName'."
+ ::= { snmp 9 }
+
+ snmpInBadValues OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ delivered to the SNMP protocol entity and for
+ which the value of the error-status field is
+ `badValue'."
+ ::= { snmp 10 }
+
+ snmpInReadOnlys OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number valid SNMP PDUs which were
+ delivered to the SNMP protocol entity and for
+ which the value of the error-status field is
+ `readOnly'. It should be noted that it is a
+ protocol error to generate an SNMP PDU which
+ contains the value `readOnly' in the error-status
+ field, as such this object is provided as a means
+ of detecting incorrect implementations of the
+
+
+
+SNMP Working Group [Page 62]
+
+RFC 1213 MIB-II March 1991
+
+
+ SNMP."
+ ::= { snmp 11 }
+
+ snmpInGenErrs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ delivered to the SNMP protocol entity and for
+ which the value of the error-status field is
+ `genErr'."
+ ::= { snmp 12 }
+
+ snmpInTotalReqVars OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of MIB objects which have been
+ retrieved successfully by the SNMP protocol entity
+ as the result of receiving valid SNMP Get-Request
+ and Get-Next PDUs."
+ ::= { snmp 13 }
+
+ snmpInTotalSetVars OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of MIB objects which have been
+ altered successfully by the SNMP protocol entity
+ as the result of receiving valid SNMP Set-Request
+ PDUs."
+ ::= { snmp 14 }
+
+ snmpInGetRequests OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Get-Request PDUs which
+ have been accepted and processed by the SNMP
+ protocol entity."
+ ::= { snmp 15 }
+
+ snmpInGetNexts OBJECT-TYPE
+ SYNTAX Counter
+
+
+
+SNMP Working Group [Page 63]
+
+RFC 1213 MIB-II March 1991
+
+
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Get-Next PDUs which have
+ been accepted and processed by the SNMP protocol
+ entity."
+ ::= { snmp 16 }
+
+ snmpInSetRequests OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Set-Request PDUs which
+ have been accepted and processed by the SNMP
+ protocol entity."
+ ::= { snmp 17 }
+
+ snmpInGetResponses OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Get-Response PDUs which
+ have been accepted and processed by the SNMP
+ protocol entity."
+ ::= { snmp 18 }
+
+ snmpInTraps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Trap PDUs which have
+ been accepted and processed by the SNMP protocol
+ entity."
+ ::= { snmp 19 }
+
+ snmpOutTooBigs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ generated by the SNMP protocol entity and for
+ which the value of the error-status field is
+ `tooBig.'"
+ ::= { snmp 20 }
+
+
+
+SNMP Working Group [Page 64]
+
+RFC 1213 MIB-II March 1991
+
+
+ snmpOutNoSuchNames OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ generated by the SNMP protocol entity and for
+ which the value of the error-status is
+ `noSuchName'."
+ ::= { snmp 21 }
+
+ snmpOutBadValues OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ generated by the SNMP protocol entity and for
+ which the value of the error-status field is
+ `badValue'."
+ ::= { snmp 22 }
+
+ -- { snmp 23 } is not used
+
+ snmpOutGenErrs OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP PDUs which were
+ generated by the SNMP protocol entity and for
+ which the value of the error-status field is
+ `genErr'."
+ ::= { snmp 24 }
+
+ snmpOutGetRequests OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Get-Request PDUs which
+ have been generated by the SNMP protocol entity."
+ ::= { snmp 25 }
+
+ snmpOutGetNexts OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+
+
+
+SNMP Working Group [Page 65]
+
+RFC 1213 MIB-II March 1991
+
+
+ DESCRIPTION
+ "The total number of SNMP Get-Next PDUs which have
+ been generated by the SNMP protocol entity."
+ ::= { snmp 26 }
+
+ snmpOutSetRequests OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Set-Request PDUs which
+ have been generated by the SNMP protocol entity."
+ ::= { snmp 27 }
+
+ snmpOutGetResponses OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Get-Response PDUs which
+ have been generated by the SNMP protocol entity."
+ ::= { snmp 28 }
+
+ snmpOutTraps OBJECT-TYPE
+ SYNTAX Counter
+ ACCESS read-only
+ STATUS mandatory
+ DESCRIPTION
+ "The total number of SNMP Trap PDUs which have
+ been generated by the SNMP protocol entity."
+ ::= { snmp 29 }
+
+ snmpEnableAuthenTraps OBJECT-TYPE
+ SYNTAX INTEGER { enabled(1), disabled(2) }
+ ACCESS read-write
+ STATUS mandatory
+ DESCRIPTION
+ "Indicates whether the SNMP agent process is
+ permitted to generate authentication-failure
+ traps. The value of this object overrides any
+ configuration information; as such, it provides a
+ means whereby all authentication-failure traps may
+ be disabled.
+
+ Note that it is strongly recommended that this
+ object be stored in non-volatile memory so that it
+ remains constant between re-initializations of the
+ network management system."
+
+
+
+SNMP Working Group [Page 66]
+
+RFC 1213 MIB-II March 1991
+
+
+ ::= { snmp 30 }
+
+ END
diff --git a/opendj-sdk/opends/src/snmp/resource/mib/rfc2021.txt b/opendj-sdk/opends/src/snmp/resource/mib/rfc2021.txt
new file mode 100644
index 0000000..0bccb5e
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/mib/rfc2021.txt
@@ -0,0 +1,25 @@
+RMON2-MIB DEFINITIONS ::= BEGIN
+
+-- Textual Conventions
+
+ZeroBasedCounter32 ::= TEXTUAL-CONVENTION
+ STATUS current
+ DESCRIPTION
+ "This TC describes an object which counts events with the
+ following semantics: objects of this type will be set to
+ zero(0) on creation and will thereafter count appropriate
+ events, wrapping back to zero(0) when the value 2^32 is
+ reached.
+
+ Provided that an application discovers the new object within
+ the minimum time to wrap it can use the initial value as a
+ delta since it last polled the table of which this object is
+ part. It is important for a management station to be aware of
+ this minimum time and the actual time between polls, and to
+ discard data if the actual time is too long or there is no
+ defined minimum time.
+
+ Typically this TC is used in tables where the INDEX space is
+ constantly changing and/or the TimeFilter mechanism is in use."
+ SYNTAX Gauge32
+END
diff --git a/opendj-sdk/opends/src/snmp/resource/mib/rfc2605.txt b/opendj-sdk/opends/src/snmp/resource/mib/rfc2605.txt
new file mode 100644
index 0000000..3dfabbc
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/mib/rfc2605.txt
@@ -0,0 +1,792 @@
+ DIRECTORY-SERVER-MIB DEFINITIONS ::= BEGIN
+
+ IMPORTS
+ MODULE-IDENTITY, Counter32, Gauge32, OBJECT-TYPE
+ FROM SNMPv2-SMI
+ mib-2 FROM RFC1213
+ DisplayString, TimeStamp
+ FROM SNMPv2-TC
+ MODULE-COMPLIANCE, OBJECT-GROUP
+ FROM SNMPv2-CONF
+ ZeroBasedCounter32
+ FROM RMON2-MIB
+ applIndex, DistinguishedName, URLString
+
+ FROM NETWORK-SERVICES-MIB;
+
+ dsMIB MODULE-IDENTITY
+ LAST-UPDATED "9906070000Z"
+ ORGANIZATION "IETF Mail and Directory Management Working
+ Group"
+ CONTACT-INFO
+ " Glenn Mansfield
+ Postal: Cyber Solutions Inc.
+ 6-6-3, Minami Yoshinari
+ Aoba-ku, Sendai, Japan 989-3204.
+
+ Tel: +81-22-303-4012
+ Fax: +81-22-303-4015
+ E-mail: glenn@cysols.com
+ Working Group E-mail: ietf-madman@innosoft.com
+ To subscribe: ietf-madman-request@innosoft.com"
+
+ DESCRIPTION
+ " The MIB module for monitoring Directory Services."
+
+ -- revision information
+
+ REVISION "9906070000Z"
+ DESCRIPTION
+ "This revision of this MIB is published in RFC 2605.
+
+ This revision obsoletes RFC 1567. It is incompatible with
+ the original MIB and so it has been renamed from dsaMIB
+ to dsMIB."
+
+ REVISION "9311250000Z" -- 25th November 1993
+ DESCRIPTION
+ "The original version of this MIB was published in RFC 1567."
+ ::= { mib-2 66 }
+
+ dsTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF DsTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+
+ " The table holding information related to the Directory
+ Servers."
+ ::= {dsMIB 1}
+
+ dsTableEntry OBJECT-TYPE
+ SYNTAX DsTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ " Entry containing summary description for a Directory
+ Server."
+ INDEX { applIndex }
+ ::= {dsTable 1}
+
+ -- General description of the Directory Server application will be
+ -- available in the applTable of the NETWORK-SERVICES-MIB indexed by
+ -- applIndex.
+
+ DsTableEntry ::= SEQUENCE {
+ dsServerType
+ BITS,
+ dsServerDescription
+ DisplayString,
+
+ -- Entry statistics/Cache performance
+ dsMasterEntries
+ Gauge32,
+ dsCopyEntries
+ Gauge32,
+ dsCacheEntries
+ Gauge32,
+ dsCacheHits
+ Counter32,
+ dsSlaveHits
+ Counter32
+ }
+
+ dsServerType OBJECT-TYPE
+ SYNTAX BITS {
+ frontEndDirectoryServer(0),
+ backEndDirectoryServer(1)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This object indicates whether the server is
+ a frontend or, a backend or, both. If the server
+ is a frontend, then the frontEndDirectoryServer
+
+ bit will be set. Similarly for the backend."
+ ::= {dsTableEntry 1}
+
+ dsServerDescription OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "A text description of the application. This information
+ is intended to identify and briefly describe the
+ application in a status display."
+ ::= {dsTableEntry 2}
+
+ -- A (C)LDAP frontend to the X.500 Directory will not have
+ -- MasterEntries, CopyEntries; the following counters will
+ -- be inaccessible for LDAP/CLDAP frontends to the X.500
+ -- directory: dsMasterEntries, dsCopyEntries, dsSlaveHits.
+
+ dsMasterEntries OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of entries mastered in the Directory Server."
+ ::= {dsTableEntry 3}
+
+ dsCopyEntries OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of entries for which systematic (slave)
+ copies are maintained in the Directory Server."
+ ::= {dsTableEntry 4}
+
+ dsCacheEntries OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of entries cached (non-systematic copies) in
+ the Directory Server. This will include the entries that
+ are cached partially. The negative cache is not counted."
+ ::= {dsTableEntry 5}
+
+ dsCacheHits OBJECT-TYPE
+ SYNTAX Counter32
+
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of operations that were serviced from
+ the locally held cache."
+ ::= {dsTableEntry 6}
+
+ dsSlaveHits OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of operations that were serviced from
+ the locally held object replications ( copy-
+ entries)."
+ ::= {dsTableEntry 7}
+
+ dsApplIfOpsTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF DsApplIfOpsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ " The table holding information related to the
+ Directory Server operations."
+ ::= {dsMIB 2}
+
+ dsApplIfOpsEntry OBJECT-TYPE
+ SYNTAX DsApplIfOpsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ " Entry containing operations related statistics
+ for a Directory Server."
+ INDEX { applIndex, dsApplIfProtocolIndex }
+ ::= {dsApplIfOpsTable 1}
+ DsApplIfOpsEntry ::= SEQUENCE {
+
+ dsApplIfProtocolIndex
+ INTEGER,
+ dsApplIfProtocol
+ OBJECT IDENTIFIER,
+
+ -- Bindings
+
+ dsApplIfUnauthBinds
+ Counter32,
+ dsApplIfSimpleAuthBinds
+ Counter32,
+
+ dsApplIfStrongAuthBinds
+ Counter32,
+ dsApplIfBindSecurityErrors
+ Counter32,
+
+ -- In-coming operations
+
+ dsApplIfInOps
+ Counter32,
+ dsApplIfReadOps
+ Counter32,
+ dsApplIfCompareOps
+ Counter32,
+ dsApplIfAddEntryOps
+ Counter32,
+ dsApplIfRemoveEntryOps
+ Counter32,
+ dsApplIfModifyEntryOps
+ Counter32,
+ dsApplIfModifyRDNOps
+ Counter32,
+ dsApplIfListOps
+ Counter32,
+ dsApplIfSearchOps
+ Counter32,
+ dsApplIfOneLevelSearchOps
+ Counter32,
+ dsApplIfWholeSubtreeSearchOps
+ Counter32,
+
+ -- Out going operations
+
+ dsApplIfReferrals
+ Counter32,
+ dsApplIfChainings
+ Counter32,
+
+ -- Errors
+
+ dsApplIfSecurityErrors
+ Counter32,
+ dsApplIfErrors
+ Counter32,
+
+ -- replications
+
+ dsApplIfReplicationUpdatesIn
+ Counter32,
+
+ dsApplIfReplicationUpdatesOut
+ Counter32,
+
+ -- Traffic Volume
+
+ dsApplIfInBytes
+ Counter32,
+ dsApplIfOutBytes
+ Counter32
+ }
+
+ -- CLDAP does not use binds; for the CLDAP interface of a Directory
+ -- Server the bind related counters will be inaccessible.
+ --
+ -- CLDAP and LDAP implement "Read" and "List" operations
+ -- indirectly via the "search" operation; the following
+ -- counters will be inaccessible for the CLDAP and LDAP interfaces of
+ -- Directory Servers: dsApplIfReadOps, dsApplIfListOps
+ --
+ -- CLDAP does not implement "Compare", "Add", "Remove",
+ -- "Modify", "ModifyRDN"; the following counters will be
+ -- inaccessible for the CLDAP interfaces of Directory Servers:
+ -- dsApplIfCompareOps, dsApplIfAddEntryOps, dsApplIfRemoveEntryOps,
+ -- dsApplIfModifyEntryOps, dsApplIfModifyRDNOps.
+ --
+ -- CLDAP Directory Servers do not return Referrals
+ -- the following fields will remain inaccessible for
+ -- CLDAP interfaces of Directory Servers: dsApplIfReferrals.
+
+ dsApplIfProtocolIndex OBJECT-TYPE
+ SYNTAX INTEGER (1..2147483647)
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "An index to uniquely identify an entry corresponding to a
+ application-layer protocol interface. This index is used
+ for lexicographic ordering of the table."
+ ::= {dsApplIfOpsEntry 1}
+
+ dsApplIfProtocol OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "An identification of the protocol being used by the application
+ on this interface. For an OSI Application, this will be the
+ Application Context. For Internet applications, the IANA
+ maintains a registry[22] of the OIDs which correspond to
+
+ well-known applications. If the application protocol is
+ not listed in the registry, an OID value of the form
+ {applTCPProtoID port} or {applUDProtoID port} are used for
+ TCP-based and UDP-based protocols, respectively. In either
+ case 'port' corresponds to the primary port number being
+ used by the protocol. The OIDs applTCPProtoID and
+ applUDPProtoID are defined in NETWORK-SERVICES-MIB"
+ ::= {dsApplIfOpsEntry 2}
+
+ dsApplIfUnauthBinds OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of unauthenticated/anonymous bind requests
+ received."
+ ::= {dsApplIfOpsEntry 3}
+
+ dsApplIfSimpleAuthBinds OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of bind requests that were authenticated
+ using simple authentication procedures like password
+ checks. This includes the
+ password authentication using SASL mechanisms like
+ CRAM-MD5."
+ ::= {dsApplIfOpsEntry 4}
+
+ dsApplIfStrongAuthBinds OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of bind requests that were authenticated
+ using TLS and X.500 strong authentication procedures.
+ This includes the binds that were
+ authenticated using external authentication procedures."
+ ::= {dsApplIfOpsEntry 5}
+
+ dsApplIfBindSecurityErrors OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of bind requests that have been rejected
+ due to inappropriate authentication or
+
+ invalid credentials."
+ ::= {dsApplIfOpsEntry 6}
+
+ dsApplIfInOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of requests received from DUAs or other
+ Directory Servers."
+ ::= {dsApplIfOpsEntry 7}
+
+ dsApplIfReadOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of read requests received."
+ ::= {dsApplIfOpsEntry 8}
+
+ dsApplIfCompareOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of compare requests received."
+ ::= {dsApplIfOpsEntry 9}
+
+ dsApplIfAddEntryOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of addEntry requests received."
+ ::= {dsApplIfOpsEntry 10}
+
+ dsApplIfRemoveEntryOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of removeEntry requests received."
+ ::= {dsApplIfOpsEntry 11}
+
+ dsApplIfModifyEntryOps OBJECT-TYPE
+
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of modifyEntry requests received."
+ ::= {dsApplIfOpsEntry 12}
+
+ dsApplIfModifyRDNOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of modifyRDN requests received."
+ ::= {dsApplIfOpsEntry 13}
+
+ dsApplIfListOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of list requests received."
+ ::= {dsApplIfOpsEntry 14}
+
+ dsApplIfSearchOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of search requests- baseObject searches,
+ oneLevel searches and whole subtree searches,
+ received."
+ ::= {dsApplIfOpsEntry 15}
+
+ dsApplIfOneLevelSearchOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of oneLevel search requests received."
+ ::= {dsApplIfOpsEntry 16}
+
+ dsApplIfWholeSubtreeSearchOps OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+
+ " Number of whole subtree search requests received."
+ ::= {dsApplIfOpsEntry 17}
+
+ dsApplIfReferrals OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of referrals returned in response
+ to requests for operations."
+ ::= {dsApplIfOpsEntry 18}
+
+ dsApplIfChainings OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of operations forwarded by this Directory Server
+ to other Directory Servers."
+ ::= {dsApplIfOpsEntry 19}
+
+ dsApplIfSecurityErrors OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of requests received
+ which did not meet the security requirements. "
+ ::= {dsApplIfOpsEntry 20}
+
+ dsApplIfErrors OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of requests that could not be serviced
+ due to errors other than security errors, and
+ referrals.
+ A partially serviced operation will not be counted
+ as an error.
+ The errors include naming-related, update-related,
+ attribute-related and service-related errors."
+ ::= {dsApplIfOpsEntry 21}
+
+ -- Replication operations
+
+ dsApplIfReplicationUpdatesIn OBJECT-TYPE
+
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of replication updates fetched or received from
+ supplier Directory Servers."
+ ::= {dsApplIfOpsEntry 22}
+
+ dsApplIfReplicationUpdatesOut OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Number of replication updates sent to or taken by
+ consumer Directory Servers."
+ ::= {dsApplIfOpsEntry 23}
+
+ dsApplIfInBytes OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Incoming traffic, in bytes, on the interface.
+ This will include requests from DUAs as well
+ as responses from other Directory Servers."
+ ::= {dsApplIfOpsEntry 24}
+
+ dsApplIfOutBytes OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Outgoing traffic in bytes on the interface.
+ This will include responses to DUAs and Directory
+ Servers as well as requests to other Directory Servers."
+ ::= {dsApplIfOpsEntry 25}
+
+ -- The dsIntTable contains statistical data on the peer
+ -- Directory Servers with which the monitored Directory
+ -- Server interacts or, attempts to interact. This table is
+ -- expected to provide a useful insight into the effect of
+ -- neighbours on the Directory Server's performance.
+ -- The table keeps track of the last "N" Directory Servers
+ -- with which the monitored Directory has interacted
+ -- (attempted to interact), where "N" is a locally-defined
+ -- constant.
+ -- For a multiprotocol server, statistics for each protocol
+
+ -- are kept separetely.
+
+ dsIntTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF DsIntEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ " Each row of this table contains some details
+ related to the history of the interaction
+ of the monitored Directory Server with its
+ peer Directory Servers."
+ ::= { dsMIB 3 }
+
+ dsIntEntry OBJECT-TYPE
+ SYNTAX DsIntEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ " Entry containing interaction details of a Directory
+ Server with a peer Directory Server."
+ INDEX { applIndex,dsIntEntIndex, dsApplIfProtocolIndex }
+ ::= { dsIntTable 1 }
+
+ DsIntEntry ::= SEQUENCE {
+ dsIntEntIndex
+ INTEGER,
+ dsIntEntDirectoryName
+ DistinguishedName,
+ dsIntEntTimeOfCreation
+ TimeStamp,
+ dsIntEntTimeOfLastAttempt
+ TimeStamp,
+ dsIntEntTimeOfLastSuccess
+ TimeStamp,
+ dsIntEntFailuresSinceLastSuccess
+ Gauge32,
+ dsIntEntFailures
+ ZeroBasedCounter32,
+ dsIntEntSuccesses
+ ZeroBasedCounter32,
+ dsIntEntURL
+ URLString
+ }
+
+ dsIntEntIndex OBJECT-TYPE
+ SYNTAX INTEGER (1..2147483647)
+ MAX-ACCESS not-accessible
+ STATUS current
+
+ DESCRIPTION
+ " Together with applIndex and dsApplIfProtocolIndex, this
+ object forms the unique key to
+ identify the conceptual row which contains useful info
+ on the (attempted) interaction between the Directory
+ Server (referred to by applIndex) and a peer Directory
+ Server using a particular protocol."
+ ::= {dsIntEntry 1}
+
+ dsIntEntDirectoryName OBJECT-TYPE
+ SYNTAX DistinguishedName
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Distinguished Name of the peer Directory Server to
+ which this entry pertains."
+ ::= {dsIntEntry 2}
+
+ dsIntEntTimeOfCreation OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " The value of sysUpTime when this row was created.
+ If the entry was created before the network management
+ subsystem was initialized, this object will contain
+ a value of zero."
+ ::= {dsIntEntry 3}
+
+ dsIntEntTimeOfLastAttempt OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " The value of sysUpTime when the last attempt was made
+ to contact the peer Directory Server. If the last attempt
+ was made before the network management subsystem was
+ initialized, this object will contain a value of zero."
+ ::= {dsIntEntry 4}
+
+ dsIntEntTimeOfLastSuccess OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " The value of sysUpTime when the last attempt made to
+ contact the peer Directory Server was successful. If there
+ have been no successful attempts this entry will have a value
+
+ of zero. If the last successful attempt was made before
+ the network management subsystem was initialized, this
+ object will contain a value of zero."
+ ::= {dsIntEntry 5}
+
+ dsIntEntFailuresSinceLastSuccess OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " The number of failures since the last time an
+ attempt to contact the peer Directory Server was successful.
+ If there have been no successful attempts, this counter
+ will contain the number of failures since this entry
+ was created."
+ ::= {dsIntEntry 6}
+
+ -- note this gauge has a maximum value of 4294967295 and,
+ -- it does not wrap.[5]
+
+ dsIntEntFailures OBJECT-TYPE
+ SYNTAX ZeroBasedCounter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Cumulative failures in contacting the peer Directory Server
+ since the creation of this entry."
+ ::= {dsIntEntry 7}
+
+ dsIntEntSuccesses OBJECT-TYPE
+ SYNTAX ZeroBasedCounter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " Cumulative successes in contacting the peer Directory Server
+ since the creation of this entry."
+ ::= {dsIntEntry 8}
+
+ dsIntEntURL OBJECT-TYPE
+ SYNTAX URLString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ " URL of the peer Directory Server."
+ ::= {dsIntEntry 9}
+
+ -- Conformance information
+
+ dsConformance OBJECT IDENTIFIER ::= { dsMIB 4 }
+
+ dsGroups OBJECT IDENTIFIER ::= { dsConformance 1 }
+ dsCompliances OBJECT IDENTIFIER ::= { dsConformance 2 }
+
+ -- Compliance statements
+
+ dsEntryCompliance MODULE-COMPLIANCE
+ STATUS current
+ DESCRIPTION
+ "The compliance statement for SNMP entities
+ which implement the DIRECTORY-SERVER-MIB for
+ a summary overview of the Directory Servers ."
+
+ MODULE -- this module
+ MANDATORY-GROUPS { dsEntryGroup }
+
+ ::= { dsCompliances 1 }
+
+ dsOpsCompliance MODULE-COMPLIANCE
+ STATUS current
+ DESCRIPTION
+ "The compliance statement for SNMP entities
+ which implement the DIRECTORY-SERVER-MIB for monitoring
+ Directory Server operations, entry statistics and cache
+ performance."
+
+ MODULE -- this module
+ MANDATORY-GROUPS { dsEntryGroup, dsOpsGroup }
+
+ ::= { dsCompliances 2 }
+
+ dsIntCompliance MODULE-COMPLIANCE
+ STATUS current
+ DESCRIPTION
+ " The compliance statement for SNMP entities
+ which implement the DIRECTORY-SERVER-MIB for
+ monitoring Directory Server operations and the
+ interaction of the Directory Server with peer
+ Directory Servers."
+
+ MODULE -- this module
+ MANDATORY-GROUPS { dsEntryGroup, dsIntGroup }
+
+ ::= { dsCompliances 3 }
+
+ dsOpsIntCompliance MODULE-COMPLIANCE
+ STATUS current
+
+ DESCRIPTION
+ " The compliance statement for SNMP entities
+ which implement the DIRECTORY-SERVER-MIB for monitoring
+ Directory Server operations and the interaction of the
+ Directory Server with peer Directory Servers."
+
+ MODULE -- this module
+ MANDATORY-GROUPS { dsEntryGroup, dsOpsGroup, dsIntGroup }
+
+ ::= { dsCompliances 4 }
+
+ -- Units of conformance
+
+ dsEntryGroup OBJECT-GROUP
+ OBJECTS {dsServerType, dsServerDescription,
+ dsMasterEntries, dsCopyEntries,
+ dsCacheEntries, dsCacheHits,
+ dsSlaveHits}
+ STATUS current
+ DESCRIPTION
+ " A collection of objects for a summary overview of the
+ Directory Servers."
+ ::= { dsGroups 1 }
+
+ dsOpsGroup OBJECT-GROUP
+ OBJECTS {
+ dsApplIfProtocolIndex, dsApplIfProtocol,
+ dsApplIfUnauthBinds, dsApplIfSimpleAuthBinds,
+ dsApplIfStrongAuthBinds, dsApplIfBindSecurityErrors,
+ dsApplIfInOps, dsApplIfReadOps,
+ dsApplIfCompareOps, dsApplIfAddEntryOps,
+ dsApplIfRemoveEntryOps, dsApplIfModifyEntryOps,
+ dsApplIfModifyRDNOps, dsApplIfListOps,
+ dsApplIfSearchOps, dsApplIfOneLevelSearchOps,
+ dsApplIfWholeSubtreeSearchOps, dsApplIfReferrals,
+ dsApplIfChainings, dsApplIfSecurityErrors,
+ dsApplIfErrors, dsApplIfReplicationUpdatesIn,
+ dsApplIfReplicationUpdatesOut, dsApplIfInBytes,
+ dsApplIfOutBytes }
+ STATUS current
+ DESCRIPTION
+ " A collection of objects for monitoring the Directory
+ Server operations."
+ ::= { dsGroups 2 }
+
+ dsIntGroup OBJECT-GROUP
+ OBJECTS {
+
+ dsIntEntDirectoryName, dsIntEntTimeOfCreation,
+ dsIntEntTimeOfLastAttempt, dsIntEntTimeOfLastSuccess,
+ dsIntEntFailuresSinceLastSuccess, dsIntEntFailures,
+ dsIntEntSuccesses, dsIntEntURL}
+ STATUS current
+ DESCRIPTION
+ " A collection of objects for monitoring the Directory
+ Server's interaction with peer Directory Servers."
+ ::= { dsGroups 3 }
+
+ END
diff --git a/opendj-sdk/opends/src/snmp/resource/mib/rfc2788.txt b/opendj-sdk/opends/src/snmp/resource/mib/rfc2788.txt
new file mode 100644
index 0000000..b3820fe
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/mib/rfc2788.txt
@@ -0,0 +1,619 @@
+ NETWORK-SERVICES-MIB DEFINITIONS ::= BEGIN
+
+ IMPORTS
+ OBJECT-TYPE, Counter32, Gauge32, MODULE-IDENTITY, mib-2
+ FROM SNMPv2-SMI
+ TimeStamp, TEXTUAL-CONVENTION
+ FROM SNMPv2-TC
+ MODULE-COMPLIANCE, OBJECT-GROUP
+ FROM SNMPv2-CONF
+ SnmpAdminString
+ FROM SNMP-FRAMEWORK-MIB;
+
+ application MODULE-IDENTITY
+ LAST-UPDATED "200003030000Z"
+ ORGANIZATION "IETF Mail and Directory Management Working Group"
+ CONTACT-INFO
+ " Ned Freed
+
+ Postal: Innosoft International, Inc.
+ 1050 Lakes Drive
+ West Covina, CA 91790
+ US
+
+ Tel: +1 626 919 3600
+ Fax: +1 626 919 3614
+
+ E-Mail: ned.freed@innosoft.com"
+ DESCRIPTION
+ "The MIB module describing network service applications"
+ REVISION "200003030000Z"
+ DESCRIPTION
+ "This revision, published in RFC 2788, changes a number of
+ DisplayStrings to SnmpAdminStrings. Note that this change
+ is not strictly supported by SMIv2. However, the alternative
+ of deprecating the old objects and defining new objects
+ would have a more adverse impact on backward compatibility
+ and interoperability, given the particular semantics of
+ these objects. The defining reference for distinguished
+ names has also been updated from RFC 1779 to RFC 2253."
+ REVISION "199905120000Z"
+ DESCRIPTION
+ "This revision fixes a few small technical problems found
+ in previous versions, mostly in regards to the conformance
+ groups for different versions of this MIB. No changes have
+ been made to the objects this MIB defines since RFC 2248."
+ REVISION "199708170000Z"
+ DESCRIPTION
+ "This revision, published in RFC 2248, adds the
+ applDescription and applURL objects, adds the quiescing
+ state to the applOperStatus object and renames the MIB
+ from the APPLICATION-MIB to the NETWORK-SERVICE-MIB."
+ REVISION "199311280000Z"
+ DESCRIPTION
+ "The original version of this MIB was published in RFC 1565"
+ ::= {mib-2 27}
+
+ -- Textual conventions
+
+ -- DistinguishedName is used to refer to objects in the
+ -- directory.
+
+ DistinguishedName ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "255a"
+ STATUS current
+ DESCRIPTION
+ "A Distinguished Name represented in accordance with
+ RFC 2253, presented in the UTF-8 charset defined in
+ RFC 2279."
+ SYNTAX OCTET STRING (SIZE (0..255))
+
+ -- Uniform Resource Locators are stored in URLStrings.
+
+ URLString ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "255a"
+ STATUS current
+ DESCRIPTION
+ "A Uniform Resource Locator represented in accordance
+ with RFCs 1738 and 2368, presented in the NVT ASCII
+ charset defined in RFC 854."
+ SYNTAX OCTET STRING (SIZE (0..255))
+
+ -- The basic applTable contains a list of the application
+ -- entities.
+
+ applTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF ApplEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "The table holding objects which apply to all different
+ kinds of applications providing network services.
+ Each network service application capable of being
+ monitored should have a single entry in this table."
+ ::= {application 1}
+
+ applEntry OBJECT-TYPE
+ SYNTAX ApplEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "An entry associated with a single network service
+ application."
+ INDEX {applIndex}
+ ::= {applTable 1}
+
+ ApplEntry ::= SEQUENCE {
+ applIndex
+ INTEGER,
+ applName
+ SnmpAdminString,
+ applDirectoryName
+ DistinguishedName,
+ applVersion
+ SnmpAdminString,
+ applUptime
+ TimeStamp,
+ applOperStatus
+ INTEGER,
+ applLastChange
+ TimeStamp,
+ applInboundAssociations
+ Gauge32,
+ applOutboundAssociations
+ Gauge32,
+ applAccumulatedInboundAssociations
+ Counter32,
+ applAccumulatedOutboundAssociations
+ Counter32,
+ applLastInboundActivity
+ TimeStamp,
+ applLastOutboundActivity
+ TimeStamp,
+ applRejectedInboundAssociations
+ Counter32,
+ applFailedOutboundAssociations
+ Counter32,
+ applDescription
+ SnmpAdminString,
+ applURL
+ URLString
+ }
+
+ applIndex OBJECT-TYPE
+ SYNTAX INTEGER (1..2147483647)
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "An index to uniquely identify the network service
+ application. This attribute is the index used for
+ lexicographic ordering of the table."
+ ::= {applEntry 1}
+
+ applName OBJECT-TYPE
+ SYNTAX SnmpAdminString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The name the network service application chooses to be
+ known by."
+ ::= {applEntry 2}
+
+ applDirectoryName OBJECT-TYPE
+ SYNTAX DistinguishedName
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The Distinguished Name of the directory entry where
+ static information about this application is stored.
+ An empty string indicates that no information about
+ the application is available in the directory."
+ ::= {applEntry 3}
+
+ applVersion OBJECT-TYPE
+ SYNTAX SnmpAdminString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The version of network service application software.
+ This field is usually defined by the vendor of the
+ network service application software."
+ ::= {applEntry 4}
+ applUptime OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The value of sysUpTime at the time the network service
+ application was last initialized. If the application was
+ last initialized prior to the last initialization of the
+ network management subsystem, then this object contains
+ a zero value."
+ ::= {applEntry 5}
+
+ applOperStatus OBJECT-TYPE
+ SYNTAX INTEGER {
+ up(1),
+ down(2),
+ halted(3),
+ congested(4),
+ restarting(5),
+ quiescing(6)
+ }
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Indicates the operational status of the network service
+ application. 'down' indicates that the network service is
+ not available. 'up' indicates that the network service
+ is operational and available. 'halted' indicates that the
+ service is operational but not available. 'congested'
+ indicates that the service is operational but no additional
+ inbound associations can be accommodated. 'restarting'
+ indicates that the service is currently unavailable but is
+ in the process of restarting and will be available soon.
+ 'quiescing' indicates that service is currently operational
+ but is in the process of shutting down. Additional inbound
+ associations may be rejected by applications in the
+ 'quiescing' state."
+ ::= {applEntry 6}
+
+ applLastChange OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The value of sysUpTime at the time the network service
+ application entered its current operational state. If
+ the current state was entered prior to the last
+ initialization of the local network management subsystem,
+ then this object contains a zero value."
+ ::= {applEntry 7}
+
+ applInboundAssociations OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The number of current associations to the network service
+ application, where it is the responder. An inbound
+ association occurs when another application successfully
+ connects to this one."
+ ::= {applEntry 8}
+
+ applOutboundAssociations OBJECT-TYPE
+ SYNTAX Gauge32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The number of current associations to the network service
+ application, where it is the initiator. An outbound
+ association occurs when this application successfully
+ connects to another one."
+ ::= {applEntry 9}
+
+ applAccumulatedInboundAssociations OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The total number of associations to the application entity
+ since application initialization, where it was the responder."
+ ::= {applEntry 10}
+
+ applAccumulatedOutboundAssociations OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The total number of associations to the application entity
+ since application initialization, where it was the initiator."
+ ::= {applEntry 11}
+
+ applLastInboundActivity OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The value of sysUpTime at the time this application last
+ had an inbound association. If the last association
+ occurred prior to the last initialization of the network
+ subsystem, then this object contains a zero value."
+ ::= {applEntry 12}
+
+ applLastOutboundActivity OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The value of sysUpTime at the time this application last
+ had an outbound association. If the last association
+ occurred prior to the last initialization of the network
+ subsystem, then this object contains a zero value."
+ ::= {applEntry 13}
+
+ applRejectedInboundAssociations OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The total number of inbound associations the application
+ entity has rejected, since application initialization.
+ Rejected associations are not counted in the accumulated
+ association totals. Note that this only counts
+ associations the application entity has rejected itself;
+ it does not count rejections that occur at lower layers
+ of the network. Thus, this counter may not reflect the
+ true number of failed inbound associations."
+ ::= {applEntry 14}
+
+ applFailedOutboundAssociations OBJECT-TYPE
+ SYNTAX Counter32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The total number associations where the application entity
+ is initiator and association establishment has failed,
+ since application initialization. Failed associations are
+ not counted in the accumulated association totals."
+ ::= {applEntry 15}
+
+ applDescription OBJECT-TYPE
+ SYNTAX SnmpAdminString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "A text description of the application. This information
+ is intended to identify and briefly describe the
+ application in a status display."
+ ::= {applEntry 16}
+
+ applURL OBJECT-TYPE
+ SYNTAX URLString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "A URL pointing to a description of the application.
+ This information is intended to identify and describe
+ the application in a status display."
+ ::= {applEntry 17}
+
+ -- The assocTable augments the information in the applTable
+ -- with information about associations. Note that two levels
+ -- of compliance are specified below, depending on whether
+ -- association monitoring is mandated.
+
+ assocTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF AssocEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "The table holding a set of all active application
+ associations."
+ ::= {application 2}
+
+ assocEntry OBJECT-TYPE
+ SYNTAX AssocEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "An entry associated with an association for a network
+ service application."
+ INDEX {applIndex, assocIndex}
+ ::= {assocTable 1}
+
+ AssocEntry ::= SEQUENCE {
+ assocIndex
+ INTEGER,
+ assocRemoteApplication
+ SnmpAdminString,
+ assocApplicationProtocol
+ OBJECT IDENTIFIER,
+ assocApplicationType
+ INTEGER,
+ assocDuration
+ TimeStamp
+ }
+
+ assocIndex OBJECT-TYPE
+ SYNTAX INTEGER (1..2147483647)
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "An index to uniquely identify each association for a network
+ service application. This attribute is the index that is
+ used for lexicographic ordering of the table. Note that the
+ table is also indexed by the applIndex."
+ ::= {assocEntry 1}
+
+ assocRemoteApplication OBJECT-TYPE
+ SYNTAX SnmpAdminString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The name of the system running remote network service
+ application. For an IP-based application this should be
+ either a domain name or IP address. For an OSI application
+ it should be the string encoded distinguished name of the
+ managed object. For X.400(1984) MTAs which do not have a
+ Distinguished Name, the RFC 2156 syntax 'mta in
+ globalid' used in X400-Received: fields can be used. Note,
+ however, that not all connections an MTA makes are
+ necessarily to another MTA."
+ ::= {assocEntry 2}
+
+ assocApplicationProtocol OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "An identification of the protocol being used for the
+ application. For an OSI Application, this will be the
+ Application Context. For Internet applications, OID
+ values of the form {applTCPProtoID port} or {applUDPProtoID
+ port} are used for TCP-based and UDP-based protocols,
+ respectively. In either case 'port' corresponds to the
+ primary port number being used by the protocol. The
+ usual IANA procedures may be used to register ports for
+ new protocols."
+ ::= {assocEntry 3}
+
+ assocApplicationType OBJECT-TYPE
+ SYNTAX INTEGER {
+ uainitiator(1),
+ uaresponder(2),
+ peerinitiator(3),
+ peerresponder(4)}
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This indicates whether the remote application is some type of
+ client making use of this network service (e.g., a Mail User
+ Agent) or a server acting as a peer. Also indicated is whether
+ the remote end initiated an incoming connection to the network
+ service or responded to an outgoing connection made by the
+ local application. MTAs and messaging gateways are
+ considered to be peers for the purposes of this variable."
+ ::= {assocEntry 4}
+
+ assocDuration OBJECT-TYPE
+ SYNTAX TimeStamp
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The value of sysUpTime at the time this association was
+ started. If this association started prior to the last
+ initialization of the network subsystem, then this
+ object contains a zero value."
+ ::= {assocEntry 5}
+
+
+ -- Conformance information
+
+ applConformance OBJECT IDENTIFIER ::= {application 3}
+
+ applGroups OBJECT IDENTIFIER ::= {applConformance 1}
+ applCompliances OBJECT IDENTIFIER ::= {applConformance 2}
+
+ -- Compliance statements
+
+ applCompliance MODULE-COMPLIANCE
+ STATUS obsolete
+ DESCRIPTION
+ "The compliance statement for RFC 1565 implementations
+ which support the Network Services Monitoring MIB
+ for basic monitoring of network service applications.
+ This is the basic compliance statement for RFC 1565."
+ MODULE
+ MANDATORY-GROUPS {applRFC1565Group}
+ ::= {applCompliances 1}
+
+ assocCompliance MODULE-COMPLIANCE
+ STATUS obsolete
+ DESCRIPTION
+ "The compliance statement for RFC 1565 implementations
+ which support the Network Services Monitoring MIB
+ for basic monitoring of network service applications
+ and their associations."
+ MODULE
+ MANDATORY-GROUPS {applRFC1565Group, assocRFC1565Group}
+ ::= {applCompliances 2}
+
+ applRFC2248Compliance MODULE-COMPLIANCE
+ STATUS deprecated
+ DESCRIPTION
+ "The compliance statement for RFC 2248 implementations
+ which support the Network Services Monitoring MIB
+ for basic monitoring of network service applications."
+ MODULE
+ MANDATORY-GROUPS {applRFC2248Group}
+ ::= {applCompliances 3}
+
+ assocRFC2248Compliance MODULE-COMPLIANCE
+ STATUS deprecated
+ DESCRIPTION
+ "The compliance statement for RFC 2248 implementations
+ which support the Network Services Monitoring MIB for
+ basic monitoring of network service applications and
+ their associations."
+ MODULE
+ MANDATORY-GROUPS {applRFC2248Group, assocRFC2248Group}
+ ::= {applCompliances 4}
+
+ applRFC2788Compliance MODULE-COMPLIANCE
+ STATUS current
+ DESCRIPTION
+ "The compliance statement for RFC 2788 implementations
+ which support the Network Services Monitoring MIB
+ for basic monitoring of network service applications."
+ MODULE
+ MANDATORY-GROUPS {applRFC2788Group}
+ ::= {applCompliances 5}
+
+ assocRFC2788Compliance MODULE-COMPLIANCE
+ STATUS current
+ DESCRIPTION
+ "The compliance statement for RFC 2788 implementations
+ which support the Network Services Monitoring MIB for
+ basic monitoring of network service applications and
+ their associations."
+ MODULE
+ MANDATORY-GROUPS {applRFC2788Group, assocRFC2788Group}
+ ::= {applCompliances 6}
+
+
+ -- Units of conformance
+
+ applRFC1565Group OBJECT-GROUP
+ OBJECTS {
+ applName, applVersion, applUptime, applOperStatus,
+ applLastChange, applInboundAssociations,
+ applOutboundAssociations, applAccumulatedInboundAssociations,
+ applAccumulatedOutboundAssociations, applLastInboundActivity,
+ applLastOutboundActivity, applRejectedInboundAssociations,
+ applFailedOutboundAssociations}
+ STATUS obsolete
+ DESCRIPTION
+ "A collection of objects providing basic monitoring of
+ network service applications. This is the original set
+ of such objects defined in RFC 1565."
+ ::= {applGroups 7}
+
+ assocRFC1565Group OBJECT-GROUP
+ OBJECTS {
+ assocRemoteApplication, assocApplicationProtocol,
+ assocApplicationType, assocDuration}
+ STATUS obsolete
+ DESCRIPTION
+ "A collection of objects providing basic monitoring of
+ network service applications' associations. This is the
+ original set of such objects defined in RFC 1565."
+ ::= {applGroups 2}
+
+ applRFC2248Group OBJECT-GROUP
+ OBJECTS {
+ applName, applVersion, applUptime, applOperStatus,
+ applLastChange, applInboundAssociations,
+ applOutboundAssociations, applAccumulatedInboundAssociations,
+ applAccumulatedOutboundAssociations, applLastInboundActivity,
+ applLastOutboundActivity, applRejectedInboundAssociations,
+ applFailedOutboundAssociations, applDescription, applURL}
+ STATUS deprecated
+ DESCRIPTION
+ "A collection of objects providing basic monitoring of
+ network service applications. This group was originally
+ defined in RFC 2248; note that applDirectoryName is
+ missing."
+ ::= {applGroups 3}
+
+ assocRFC2248Group OBJECT-GROUP
+ OBJECTS {
+ assocRemoteApplication, assocApplicationProtocol,
+ assocApplicationType, assocDuration}
+ STATUS deprecated
+ DESCRIPTION
+ "A collection of objects providing basic monitoring of
+ network service applications' associations. This group
+ was originally defined by RFC 2248."
+ ::= {applGroups 4}
+
+ applRFC2788Group OBJECT-GROUP
+ OBJECTS {
+ applName, applDirectoryName, applVersion, applUptime,
+ applOperStatus, applLastChange, applInboundAssociations,
+ applOutboundAssociations, applAccumulatedInboundAssociations,
+ applAccumulatedOutboundAssociations, applLastInboundActivity,
+ applLastOutboundActivity, applRejectedInboundAssociations,
+ applFailedOutboundAssociations, applDescription, applURL}
+ STATUS current
+ DESCRIPTION
+ "A collection of objects providing basic monitoring of
+ network service applications. This is the appropriate
+ group for RFC 2788 -- it adds the applDirectoryName object
+ missing in RFC 2248."
+ ::= {applGroups 5}
+
+ assocRFC2788Group OBJECT-GROUP
+ OBJECTS {
+ assocRemoteApplication, assocApplicationProtocol,
+ assocApplicationType, assocDuration}
+ STATUS current
+ DESCRIPTION
+ "A collection of objects providing basic monitoring of
+ network service applications' associations. This is
+ the appropriate group for RFC 2788."
+ ::= {applGroups 6}
+
+ -- OIDs of the form {applTCPProtoID port} are intended to be used
+ -- for TCP-based protocols that don't have OIDs assigned by other
+ -- means. {applUDPProtoID port} serves the same purpose for
+ -- UDP-based protocols. In either case 'port' corresponds to
+ -- the primary port number being used by the protocol. For example,
+ -- assuming no other OID is assigned for SMTP, an OID of
+ -- {applTCPProtoID 25} could be used, since SMTP is a TCP-based
+ -- protocol that uses port 25 as its primary port.
+
+ applTCPProtoID OBJECT IDENTIFIER ::= {application 4}
+ applUDPProtoID OBJECT IDENTIFIER ::= {application 5}
+
+ END
diff --git a/opendj-sdk/opends/src/snmp/resource/security/opends-snmp.security b/opendj-sdk/opends/src/snmp/resource/security/opends-snmp.security
new file mode 100644
index 0000000..4b3d557
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/resource/security/opends-snmp.security
@@ -0,0 +1,6 @@
+localEngineID=0x8000002a017f000001000000a1
+localEngineBoots=0
+
+userEntry=localEngineID,defaultUser,,usmHMACMD5AuthProtocol,password,,,3,true
+
+
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DIRECTORY_SERVER_MIBImpl.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DIRECTORY_SERVER_MIBImpl.java
new file mode 100644
index 0000000..76eaaeb
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DIRECTORY_SERVER_MIBImpl.java
@@ -0,0 +1,138 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+
+/**
+ * The class is the "DIRECTORY-SERVER-MIB" implementation.
+ */
+public class DIRECTORY_SERVER_MIBImpl extends DIRECTORY_SERVER_MIB {
+
+ /**
+ * The serial version identifier required to satisfy the compiler because
+ * this class implements the <CODE>java.io.Serializable</CODE> interface.
+ * This value was generated using the <CODE>serialver</CODE> command-line
+ * utility included with the Java SDK.
+ */
+ private static final long serialVersionUID = 1420660265781848102L;
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+ /**
+ * Indicates if the SNMP Mbeans have to be registered or not
+ */
+ private boolean registeredSnmpMBean = false;
+ /**
+ * The Current Directory Server MIB
+ */
+ private DsMIBImpl dsMib = null;
+ /**
+ * ObjectName of the Current Direcotry Server MIB
+ */
+ private ObjectName mibObName;
+ /**
+ * ObjectName of the dsMIB group in the Directory Server MIB
+ */
+ private ObjectName groupObjName;
+
+ /**
+ * Creates the Current Directory Server MIB
+ * @param registeredMBean indicates if the SNMP MBean has to register
+ * in the Direcotry Server MBeanServer
+ * @param mibName of the Directory Server MIB
+ */
+ public DIRECTORY_SERVER_MIBImpl(boolean registeredMBean, ObjectName mibName) {
+ super();
+ this.registeredSnmpMBean = registeredMBean;
+ this.mibObName = mibName;
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugVerbose("DIRECTORY_SERVER_MIB=" + this.mibObName +
+ " created with registerMBean=" + this.registeredSnmpMBean);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @throws java.lang.Exception if the DsMib Group couls not be initialized
+ */
+ @Override
+ protected void initDsMIB(MBeanServer server)
+ throws Exception {
+
+ final String oid = getGroupOid("DsMIB", "1.3.6.1.2.1.66");
+ if (server != null) {
+ groupObjName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "type=group,name=DsMib");
+ }
+ final DsMIBMeta meta = createDsMIBMetaNode("DsMIB", oid, groupObjName,
+ server);
+ if (meta != null) {
+ meta.registerTableNodes(this, server);
+
+ // Note that when using standard metadata,
+ // the returned object must implement the "DsMIBMBean"
+ // interface.
+ //
+ final DsMIBMBean group = (DsMIBMBean) createDsMIBMBean("DsMIB", oid,
+ groupObjName, server);
+ meta.setInstance(group);
+ registerGroupNode("DsMIB", oid, groupObjName, meta, group, server);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected Object createDsMIBMBean(String groupName,
+ String groupOid, ObjectName groupObjname, MBeanServer server) {
+ this.dsMib = new DsMIBImpl(this, server, this.registeredSnmpMBean);
+ return this.dsMib;
+ }
+
+ /**
+ * Returns the created dsMIB group
+ * @return the DsMIBImpl
+ */
+ protected DsMIBImpl getMib() {
+ return this.dsMib;
+ }
+
+ /**
+ * Returns the ObjectName of the dsMIB group
+ * @return the ObjectName of the created dsMIB group
+ */
+ protected ObjectName getObjectName() {
+ return this.groupObjName;
+ }
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsApplIfOpsEntryImpl.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsApplIfOpsEntryImpl.java
new file mode 100644
index 0000000..9c754b8
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsApplIfOpsEntryImpl.java
@@ -0,0 +1,302 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.SnmpStatusException;
+import com.sun.management.snmp.agent.SnmpMib;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.DebugLogLevel;
+
+/**
+ * The class is used for representing "DsApplIfOpsEntryImpl" implementation.
+ */
+public class DsApplIfOpsEntryImpl extends DsApplIfOpsEntry implements DsEntry {
+
+ /**
+ * The serial version identifier required to satisfy the compiler because
+ * this class implements the <CODE>java.io.Serializable</CODE> interface.
+ * This value was generated using the <CODE>serialver</CODE> command-line
+ * utility included with the Java SDK.
+ */
+ private static final long serialVersionUID = 3876259684025799091L;
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+ /**
+ * ObjectName of the DsApplIfOpsEntry
+ */
+ private ObjectName entryName;
+ /**
+ * MBeanServer where the cn=monitor Connection Handler MBean are registered
+ */
+ private MBeanServer server;
+ /**
+ * ObjectName of the cn=monitor Connection Handler MBean
+ */
+ private ObjectName connectionHandlerName;
+ /**
+ * SNMPMonitor representing the gateway beetween SNMP MBeans and cn=monitor
+ * MBeans
+ */
+ private SNMPMonitor monitor;
+ /**
+ * ObjectName of the MBeans representing the Statistics of the cn=monitor
+ * ConnectionHandler
+ */
+ private ObjectName stats;
+
+ /**
+ * Created a DsApplIfOpsEntry in the SnmpMib
+ * @param mib where the entry has to be created
+ * @param server where the corresponding cn=monitor MBean are registered
+ * @param connectionHandlerObjectName mapping ObjectName
+ * @param applIndex key in the DsTable
+ * @param connectionHandlerIndex key corresponding to this entry in the
+ * DsApplIfOpsTable
+ */
+ public DsApplIfOpsEntryImpl(SnmpMib mib, MBeanServer server,
+ ObjectName connectionHandlerObjectName, int applIndex,
+ int connectionHandlerIndex) {
+ super(mib);
+ this.server = server;
+ this.connectionHandlerName = connectionHandlerObjectName;
+ this.ApplIndex = new Integer(applIndex);
+ this.DsApplIfProtocolIndex = new Integer(connectionHandlerIndex);
+ this.monitor = SNMPMonitor.getMonitor(server);
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfSearchOps
+ */
+ @Override
+ public Long getDsApplIfSearchOps() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(stats,
+ "searchRequests"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfModifyRDNOps
+ */
+ @Override
+ public Long getDsApplIfModifyRDNOps() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "modifyDNRequests"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfModifyEntryOps
+ */
+ @Override
+ public Long getDsApplIfModifyEntryOps() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "modifyRequests"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfRemoveEntryOps
+ */
+ @Override
+ public Long getDsApplIfRemoveEntryOps() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "deleteRequests"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfAddEntryOps
+ */
+ @Override
+ public Long getDsApplIfAddEntryOps() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "addRequests"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfCompareOps
+ */
+ @Override
+ public Long getDsApplIfCompareOps() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "compareRequests"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfReadOps
+ */
+ @Override
+ public Long getDsApplIfReadOps() {
+ return this.getDsApplIfCompareOps() +
+ this.getDsApplIfAddEntryOps() +
+ this.getDsApplIfRemoveEntryOps() +
+ this.getDsApplIfModifyEntryOps() +
+ this.getDsApplIfModifyRDNOps() +
+ this.getDsApplIfSearchOps();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfOutBytes
+ */
+ @Override
+ public Long getDsApplIfOutBytes() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "bytesWritten"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfInBytes
+ */
+ @Override
+ public Long getDsApplIfInBytes() {
+ if (stats == null) {
+ stats = this.monitor.getConnectionHandlerStatistics(
+ connectionHandlerName);
+ }
+ if (stats != null) {
+ long value = Long.parseLong((String) this.monitor.getAttribute(
+ stats, "bytesRead"));
+ return SNMPMonitor.counter32Value(value);
+ } else {
+ return 0L;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsApplIfProtocolIndex
+ */
+ @Override
+ public Integer getDsApplIfProtocolIndex() {
+ return this.DsApplIfProtocolIndex;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return ApplIndex index of the corresponding DsTable entry
+ */
+ @Override
+ public Integer getApplIndex() {
+ return this.ApplIndex;
+ }
+
+ /**
+ * Returns the ObjectName of the SNMP entry MBean
+ * @return ObjectName of the entry
+ */
+ public ObjectName getObjectName() {
+ if (this.entryName == null) {
+ try {
+ String name = this.connectionHandlerName.getKeyProperty("Rdn2");
+ this.entryName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "type=DsApplIfOpsEntry,name=" + name);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ return null;
+ }
+ return this.entryName;
+ }
+ return this.entryName;
+ }
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsEntry.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsEntry.java
new file mode 100644
index 0000000..e68710c
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsEntry.java
@@ -0,0 +1,43 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import javax.management.ObjectName;
+
+/**
+ * This interface should be implemented by all the DS:OID MBean and
+ * allows to get the ObjectName of a SNMP OID MBean
+ */
+public interface DsEntry {
+
+ /**
+ * Returns the ObjectName of the SNMP Entry
+ * @return the ObjectName of the SNMP Entry
+ */
+ public ObjectName getObjectName();
+
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsMIBImpl.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsMIBImpl.java
new file mode 100644
index 0000000..da0079e5
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsMIBImpl.java
@@ -0,0 +1,355 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+
+import javax.management.MBeanServer;
+import com.sun.management.snmp.agent.SnmpMib;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+import javax.management.MBeanServerNotification;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.DebugLogLevel;
+
+
+/**
+ * The class reprents the "DsMIB" group implementation.
+ * The group is defined with the following oid: 1.3.6.1.2.1.66.
+ */
+public class DsMIBImpl extends DsMIB implements NotificationListener {
+
+ /**
+ * The serial version identifier required to satisfy the compiler because
+ * this class implements the <CODE>java.io.Serializable</CODE> interface.
+ * This value was generated using the <CODE>serialver</CODE> command-line
+ * utility included with the Java SDK.
+ */
+ private static final long serialVersionUID = 6787374593664749374L;
+
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+
+ /**
+ * Directory Server MIB access
+ */
+ private SnmpMib mib;
+
+ /**
+ * Register or not the SNMP MBean
+ */
+ private boolean registeredSnmpMBean = false;
+
+ /**
+ * List of DsTableEntries
+ */
+ private Hashtable<ObjectName, DsEntry> dsTableEntries =
+ new Hashtable<ObjectName, DsEntry>();
+
+ /**
+ * List of DsIntTableEntries
+ */
+ private Hashtable<ObjectName, DsEntry> dsApplIfOpsTableEntries =
+ new Hashtable<ObjectName, DsEntry>();
+
+ /**
+ * List of DsIntTableEntries
+ */
+ private Hashtable<ObjectName, DsEntry> dsIntTableEntries =
+ new Hashtable<ObjectName, DsEntry>();
+
+ /**
+ * Directory Server MBeanServer
+ */
+ private MBeanServer server;
+
+ /**
+ * cn=monitor Mapping Class SNMP->MBean
+ */
+ private SNMPMonitor monitor;
+
+ /**
+ * Start Table indexes
+ */
+ private int applIndex = 1;
+ private int applIfOpsIndex = 1;
+ private int intIndex = 1;
+
+ /**
+ * Constructor for the "DsMIB" group.
+ * If the group contains a table, the entries created through an SNMP SET
+ * will not be registered in Java DMK.
+ * @param myMib snmp mib
+ * @param server where the MBeans are registered
+ * @param registered if the MBeans should be registered in server
+ */
+ public DsMIBImpl(SnmpMib myMib, MBeanServer server, boolean registered) {
+ super(myMib);
+ this.mib = myMib;
+ this.server = server;
+ this.monitor = SNMPMonitor.getMonitor(server);
+ this.registeredSnmpMBean = registered;
+ this.dsTableEntries.clear();
+ this.dsApplIfOpsTableEntries.clear();
+ this.dsIntTableEntries.clear();
+ this.applIndex = 1;
+ this.applIfOpsIndex = 1;
+ this.intIndex = 1;
+ // Initialize the MIB
+ initDsTables();
+
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugVerbose("DsMIB Group Created");
+ }
+ }
+
+ /**
+ * Returns the Set of ObjectName of all the created entries in all the Table
+ * @return Set<ObjectName>
+ */
+ @SuppressWarnings("unchecked")
+ public Set<ObjectName> getEntriesObjectNames() {
+ Set<ObjectName> results = new HashSet<ObjectName>();
+ results.addAll(this.dsTableEntries.keySet());
+ results.addAll(this.dsApplIfOpsTableEntries.keySet());
+ results.addAll(this.dsIntTableEntries.keySet());
+ return results;
+ }
+
+ /**
+ * Returns the list of Created Entries
+ * @return Set<ObjectName> of created entries
+ */
+ @SuppressWarnings("unchecked")
+ public Set<ObjectName> getEntries() {
+ Set results = new HashSet();
+ results.addAll(this.dsTableEntries.values());
+ results.addAll(this.dsApplIfOpsTableEntries.values());
+ results.addAll(this.dsIntTableEntries.values());
+ return results;
+ }
+
+ /**
+ * handleNotification callback called when an MBeansServer Notification is
+ * received
+ * @param notification received
+ * @param handback
+ */
+ public void handleNotification(Notification notification, Object handback) {
+ if (notification instanceof MBeanServerNotification) {
+ MBeanServerNotification notif = (MBeanServerNotification) notification;
+ // Process the ConnectionHandler Registration
+ if (notif.getType().equals(
+ MBeanServerNotification.REGISTRATION_NOTIFICATION)) {
+ ObjectName name = notif.getMBeanName();
+ if ((name.getKeyProperty("Rdn1").equals("cn-monitor")) &&
+ (isAConnectionHandler(name))) {
+ addRowInDsApplIfOpsTable(name);
+ }
+ }
+ // Process the ConnectionHandler unregistration
+ else if (notif.getType().equals(
+ MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) {
+ ObjectName name = notif.getMBeanName();
+ if ((name.getKeyProperty("Rdn1").equals("cn-monitor")) &&
+ (isAConnectionHandler(name))) {
+ removeRowInDsApplIfOpsTable(name);
+ }
+ }
+ }
+ }
+
+ /**
+ * initDsTables in the dsMib Group
+ */
+ private void initDsTables() {
+
+ // Initialize the DSTable with one Entry : Current Directory Server
+ initializeDsTable();
+
+ // Initialize the DsApplIfOpsTable with one entry per Connection Handler
+ initializeDsApplIfOpsTable();
+
+ // Register as listener of the MBeanServer Notification to process
+ // new Connection Handler MBeans
+ try {
+ ObjectName name = new ObjectName(
+ "JMImplementation:type=MBeanServerDelegate");
+ this.server.addNotificationListener(name, this, null, null);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ }
+
+ /**
+ * initializeDsTable with the current Direcotry server instance
+ * Only one entry is created in this table
+ **/
+ private void initializeDsTable() {
+ // Add the Current Directory Server Instance in the DsTable
+ addRowInDsTable();
+ }
+
+ /**
+ * initializeDsApplIfOpsTable with the already registered Connection
+ * Handlers
+ **/
+ private void initializeDsApplIfOpsTable() {
+ // Get the list of ConnectionHandlers MBeans
+ Set connectionHandlers = this.monitor.getConnectionHandlers();
+ for (Iterator iter=connectionHandlers.iterator();iter.hasNext();) {
+ ObjectName name = (ObjectName)iter.next();
+ // Add the ConnectionHandler in the DsApplIfOpsTable
+ addRowInDsApplIfOpsTable(name);
+ }
+ }
+
+ /**
+ * addRowInDsTable
+ * @return true if the entry has been added else false
+ */
+ private boolean addRowInDsTable() {
+
+ try {
+
+ // Create the entry
+ DsTableEntryImpl entry = new DsTableEntryImpl(
+ this.mib, this.server, this.applIndex);
+
+ // if the entry alreday exists nothing to do
+ if ((this.dsTableEntries.containsKey(entry.getObjectName())) ||
+ (entry == null)) {
+ return true;
+ }
+
+ // Add the entry in the table
+ this.DsTable.addEntry(entry, entry.getObjectName());
+ this.dsTableEntries.put(entry.getObjectName(), (DsEntry)entry);
+ if (this.registeredSnmpMBean) {
+ // Register the SNMP OID MBean
+ this.server.registerMBean(entry, entry.getObjectName());
+ }
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * addRowInDsIntTable Not Supported
+ * @return false (Not Supported for this current delivery)
+ */
+ private boolean addRowInDsIntTable() {
+ return false;
+ }
+
+ /**
+ * addRowInDsApplIfOpsTable
+ * @param connectionHandlerName to add
+ * @return true if the entry has been added else false
+ */
+ private boolean addRowInDsApplIfOpsTable(ObjectName connectionHandlerName) {
+ try {
+
+ // Created the entry
+ DsApplIfOpsEntryImpl entry = new DsApplIfOpsEntryImpl(
+ this.mib, this.server, connectionHandlerName,
+ this.applIndex, this.applIfOpsIndex);
+
+ // If the entry already exists then nothing to do
+ if ((this.dsApplIfOpsTableEntries.containsKey(entry.getObjectName())) ||
+ (entry == null)) {
+ return true;
+ }
+ // Add the entry in the Table
+ this.DsApplIfOpsTable.addEntry(entry);
+ this.dsApplIfOpsTableEntries.put(entry.getObjectName(), entry);
+ this.applIfOpsIndex++;
+ if (this.registeredSnmpMBean) {
+ // Register the SNMP OID MBean in the MBeanServer
+ this.server.registerMBean(entry, entry.getObjectName());
+ }
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * removeRowInDsApplIfOpsTable
+ * @param connectionHandlerName
+ * @return true if the entry has been removed else false
+ */
+ private boolean removeRowInDsApplIfOpsTable(ObjectName connectionHandlerName){
+ try {
+ // Check if the entry is known
+ if (!this.dsApplIfOpsTableEntries.containsKey(connectionHandlerName)) {
+ return false;
+ }
+ DsApplIfOpsEntryImpl entry = (DsApplIfOpsEntryImpl)
+ this.dsApplIfOpsTableEntries.get(connectionHandlerName);
+
+ this.DsApplIfOpsTable.removeEntry((DsApplIfOpsEntryMBean) entry);
+ this.dsApplIfOpsTableEntries.remove(connectionHandlerName);
+ this.server.unregisterMBean(entry.getObjectName());
+ return true;
+ } catch (Exception ex) {
+ return false;
+ }
+ }
+
+
+/**
+ * isAConnectionHandler allows to check if the Mbean is a Connection Handler
+ * @param name of the MBean
+ * @return true if the MBean is a Connection Handler else false
+ */
+ private boolean isAConnectionHandler(ObjectName name) {
+ String canonicalName = name.getCanonicalName();
+ if ((canonicalName.contains("Connection_Handler")) &&
+ (!(canonicalName.endsWith("_Statistics")))) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java
new file mode 100644
index 0000000..2982162
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java
@@ -0,0 +1,190 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.agent.SnmpMib;
+import java.util.Iterator;
+import java.util.Set;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.DebugLogLevel;
+
+/**
+ * The class is used for implementing the "DsTableEntry" group implementation.
+ * The group is defined with the following oid: 1.3.6.1.2.1.66.1.1.
+ */
+public class DsTableEntryImpl extends DsTableEntry implements DsEntry {
+
+ /**
+ * The serial version identifier required to satisfy the compiler because
+ * this class implements the <CODE>java.io.Serializable</CODE> interface.
+ * This value was generated using the <CODE>serialver</CODE> command-line
+ * utility included with the Java SDK.
+ */
+ private static final long serialVersionUID = -3346380035687141480L;
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+ /**
+ * Directory Server MBeanServer
+ */
+ private MBeanServer server;
+ /**
+ * Mapping Class
+ */
+ private SNMPMonitor monitor;
+ /**
+ * ObjectName of the entry
+ */
+ private ObjectName entryName;
+ /**
+ * Index of the Directory Server Instance (applIndex)
+ */
+ private Integer applIndex;
+
+ /**
+ * Creates a DsTableEntry
+ * @param mib the SNMP Mib where the entry will be created
+ * @param server where the mapping objects will be found
+ * @param index of the entry in the DsTable
+ */
+ public DsTableEntryImpl(SnmpMib mib,
+ MBeanServer server,
+ int index) {
+ super(mib);
+ this.server = server;
+ this.monitor = SNMPMonitor.getMonitor(server);
+ this.applIndex = new Integer(index);
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsCacheHits as Long
+ */
+ @Override
+ public Long getDsCacheHits() {
+ try {
+ Long value = Long.parseLong((String) this.monitor.getAttribute(
+ SNMPConnectionHandlerDefinitions.MONITOR_ENTRY_CACHES_OBJECTNANE,
+ "entryCacheHits"));
+ return SNMPMonitor.counter32Value(value);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return 0L;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsCacheEntries as Long
+ */
+ @Override
+ public Long getDsCacheEntries() {
+ try {
+ Long value = Long.parseLong((String) this.monitor.getAttribute(
+ SNMPConnectionHandlerDefinitions.MONITOR_ENTRY_CACHES_OBJECTNANE,
+ "currentEntryCacheCount"));
+ return SNMPMonitor.gauge32Value(value);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return 0L;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsMasterEntries as Long
+ */
+ @Override
+ public Long getDsMasterEntries() {
+ Set monitorBackends = null;
+ Long result = 0L;
+ try {
+ monitorBackends = this.server.queryNames(SNMPMonitor.pattern, null);
+ for (Iterator iter = monitorBackends.iterator(); iter.hasNext();) {
+ ObjectName name = (ObjectName) iter.next();
+ Object value = this.monitor.getAttribute(name,
+ "ds-backend-entry-count");
+ if (value != null) {
+ result = result + new Long((String) value);
+ }
+ }
+ return SNMPMonitor.gauge32Value(result);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return 0L;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return DsServerDescription as String
+ */
+ @Override
+ public String getDsServerDescription() {
+ String result = null;
+ try {
+ result = (String) this.monitor.getAttribute(
+ SNMPConnectionHandlerDefinitions.MONITOR_SYSTEM_INFORMATION_OBJECTNAME,
+ "workingDirectory");
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the object of the entry
+ * @return ObjectName of the entry
+ */
+ public ObjectName getObjectName() {
+ if (this.entryName == null) {
+ try {
+ this.entryName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "type=DsTableEntry,name=" +
+ SNMPConnectionHandlerDefinitions.MONITOR_SYSTEM_INFORMATION_OBJECTNAME);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ }
+ return this.entryName;
+ }
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java
new file mode 100644
index 0000000..69b17b2
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java
@@ -0,0 +1,360 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.DebugLogLevel;
+
+import static org.opends.messages.ProtocolMessages.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+
+import com.sun.management.comm.SnmpV3AdaptorServer;
+import com.sun.management.snmp.InetAddressAcl;
+import com.sun.management.snmp.SnmpEngineParameters;
+import com.sun.management.snmp.UserAcl;
+
+import java.net.InetAddress;
+import java.util.Iterator;
+import java.util.Set;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.ResultCode;
+import org.opends.server.util.StaticUtils;
+import org.opends.server.util.Validator;
+
+
+public class SNMPClassLoaderProvider {
+
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+
+ /**
+ * The current configuration state.
+ */
+ private SNMPConnectionHandlerCfg currentConfig;
+
+
+ /**
+ * MBeanServer of OpenDS
+ */
+ private MBeanServer server;
+
+ /**
+ * MIB to manage
+ */
+ private DIRECTORY_SERVER_MIBImpl dsMib;
+
+ /**
+ * ObjectName of the MIB2605
+ */
+ private ObjectName mibObjName;
+
+ /**
+ * ObjectName of the SnmpAdaptor
+ */
+ private ObjectName snmpObjName;
+
+ /**
+ * SNMP Port Number for SNMP requests
+ */
+ private int snmpPort = 161;
+
+ /**
+ * Default SNMP trap port Number for SNMP Traps
+ */
+ private int snmpTrapPort = 162;
+
+ /**
+ * Default SNMP Version
+ */
+ private String snmpVersion = SNMPConnectionHandlerDefinitions.SNMP_VERSION_V3;
+
+ /**
+ * Registration of the SNMP MBeans
+ */
+ private boolean registeredSNMPMBeans = false;
+
+ /**
+ * The unique name for this connection handler
+ */
+ private String connectionHandlerName;
+
+ /**
+ * ObjectName of the UsmMIB
+ */
+ private ObjectName UsmObjName;
+
+ private SnmpV3AdaptorServer snmpAdaptor;
+
+ public SNMPClassLoaderProvider() {
+ }
+
+ public void initializeConnectionHandler(
+ SNMPConnectionHandlerCfg configuration) {
+
+
+ // Keep the connection handler configuration
+ this.currentConfig = configuration;
+
+ // Get the Directory Server JMX MBeanServer
+ this.server = DirectoryServer.getJMXMBeanServer();
+
+ // Initialize he Connection Handler with the givewn configuration
+ this.initializeConnectionHandler();
+
+ }
+
+ public ConfigChangeResult applyConfigurationChange(
+ SNMPConnectionHandlerCfg configuration) {
+
+ try {
+
+ // Register/UnRegister SNMP MBeans
+ if ((this.registeredSNMPMBeans) &&
+ (!configuration.isRegisteredMbean())) {
+ this.unregisterSnmpMBeans();
+ this.registeredSNMPMBeans = configuration.isRegisteredMbean();
+ } else if ((!this.registeredSNMPMBeans) &&
+ (configuration.isRegisteredMbean())) {
+ this.unregisterSnmpMBeans();
+ this.registeredSNMPMBeans = configuration.isRegisteredMbean();
+ }
+
+ // PortNumber/Version
+ if ((this.snmpPort != configuration.getListenPort())) {
+ this.server.unregisterMBean(this.snmpObjName);
+ this.snmpAdaptor.stop();
+ this.snmpPort = configuration.getListenPort();
+ this.snmpAdaptor = this.getSnmpAdaptor(configuration);
+
+
+ // Creates and starts the SNMP Adaptor
+ this.snmpObjName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "class=SnmpAdaptorServer,protocol=snmp,port=" + snmpPort);
+ this.server.registerMBean(this.snmpAdaptor, this.snmpObjName);
+ this.snmpAdaptor.start();
+
+ // Send a coldStart SNMP Trap on the new trap port if required
+ if (this.snmpTrapPort != configuration.getTrapPort()) {
+ this.snmpTrapPort = configuration.getTrapPort();
+ this.snmpAdaptor.setTrapPort(snmpTrapPort);
+ this.snmpAdaptor.snmpV1Trap(0, 0, null);
+ }
+ }
+ } catch (Exception ex) {
+ if (debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+
+ // Check if the security file
+ // If security file have changed, changeConfiguration not
+ // Supported
+
+ return new ConfigChangeResult(ResultCode.SUCCESS, false);
+ }
+
+ /**
+ * Gets the ObjectName of the crated USM MIB MBean
+ * @return
+ */
+ public ObjectName getUsmMIBName() {
+ return this.UsmObjName;
+ }
+
+ // private methods
+ private void initializeConnectionHandler() {
+
+
+ // Compute the connectionHandler name
+ this.connectionHandlerName = "SNMP Connection Handler " +
+ this.currentConfig.getListenPort();
+
+ // Gets the configuration parameters
+ this.snmpPort = this.currentConfig.getListenPort();
+ this.snmpTrapPort = this.currentConfig.getTrapPort();
+ this.registeredSNMPMBeans = this.currentConfig.isRegisteredMbean();
+
+ this.snmpVersion = this.currentConfig.getVersion().trim().toLowerCase();
+ if (!SNMPConnectionHandlerDefinitions.SUPPORTED_SNMP_VERSION.contains(
+ this.snmpVersion)) {
+ this.snmpVersion = SNMPConnectionHandlerDefinitions.SNMP_VERSION_V3;
+ }
+
+ // Creates all the required objects for SNMP MIB 2605 Support
+ try {
+
+ // Creates and starts the SNMP Adaptor
+ this.snmpObjName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "class=SnmpAdaptorServer,protocol=snmp,port=" + snmpPort);
+
+ // Create the SNMP Adaptor with the appropriated parameters
+ this.snmpAdaptor = this.getSnmpAdaptor(this.currentConfig);
+
+ // Create the Usm MIB to allow user management
+ if ((this.registeredSNMPMBeans) && (this.snmpVersion.equals(
+ SNMPConnectionHandlerDefinitions.SNMP_VERSION_V3))) {
+
+ this.UsmObjName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "type=USM_MIB");
+
+ try {
+ this.snmpAdaptor.registerUsmMib(server, this.UsmObjName);
+ }
+ catch (Exception ex) {
+ }
+ }
+
+ this.snmpAdaptor.start();
+
+ // Send a coldStart SNMP Trap.
+ this.snmpAdaptor.setTrapPort(snmpTrapPort);
+ this.snmpAdaptor.snmpV1Trap(0, 0, null);
+
+ // Create an instance of the customized MIB
+ this.mibObjName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "class=DIRECTORY_SERVER_MIB");
+
+ this.dsMib = new DIRECTORY_SERVER_MIBImpl(
+ this.registeredSNMPMBeans, this.mibObjName);
+ this.dsMib.setSnmpAdaptor(snmpAdaptor);
+
+ this.server.registerMBean(this.snmpAdaptor, snmpObjName);
+ this.server.registerMBean(this.dsMib, this.mibObjName);
+
+ } catch (Exception ex) {
+ if (debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ }
+
+ public void finalizeConnectionHandler() {
+
+ try {
+
+ // Send a trap when stop
+ this.snmpAdaptor.snmpV1Trap(0, 0, null);
+
+ String[] names = this.snmpAdaptor.getMibs();
+
+ // Stop the SNMP Adaptor
+ this.snmpAdaptor.stop();
+
+ this.server.unregisterMBean(this.snmpObjName);
+ this.server.unregisterMBean(this.mibObjName );
+ this.server.unregisterMBean(new ObjectName(
+ SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
+ "type=group,name=DsMib"));
+
+ // Unregister the created SNMP MBeans
+ if (this.registeredSNMPMBeans) {
+ this.unregisterSnmpMBeans();
+
+ if (this.snmpVersion.equals(
+ SNMPConnectionHandlerDefinitions.SNMP_VERSION_V3)) {
+ this.server.unregisterMBean(this.UsmObjName);
+ }
+ }
+ } catch (Exception ex) {
+ if (debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ }
+
+ private void unregisterSnmpMBeans() {
+ Set objectNames = this.dsMib.getMib().getEntriesObjectNames();
+ for (Iterator iter = objectNames.iterator(); iter.hasNext();) {
+ ObjectName name = (ObjectName) iter.next();
+ try {
+ this.server.unregisterMBean(name);
+ } catch (Exception ex) {
+ }
+ }
+ }
+
+
+ private SnmpV3AdaptorServer getSnmpAdaptor(SNMPConnectionHandlerCfg configuration) {
+
+ Validator.ensureNotNull(configuration);
+ SnmpV3AdaptorServer adaptor = null;
+ try {
+
+ // Set the USM security file
+ String usmConfigPath = configuration.getSecurityAgentFile();
+ File file = StaticUtils.getFileForPath(usmConfigPath);
+
+ if (configuration.getVersion().toLowerCase().equals(
+ SNMPConnectionHandlerDefinitions.SNMP_VERSION_V3)) {
+ System.setProperty("jdmk.security.file", file.getAbsolutePath());
+ }
+
+ // Create the Security Parameters for the engine
+ SnmpEngineParameters engineParameters = new SnmpEngineParameters();
+
+ // Set V3 Security parameters
+ engineParameters.activateEncryption();
+
+ // Create the UACL controller
+ UserAcl uacls = (UserAcl)new SNMPUserAcl(configuration);
+ engineParameters.setUserAcl(uacls);
+
+ // V1/V2 Security parameters
+ InetAddressAcl acls = (InetAddressAcl)new SNMPInetAddressAcl(configuration);
+
+ adaptor = new SnmpV3AdaptorServer(engineParameters, null, acls,
+ configuration.getListenPort(), InetAddress.getLocalHost());
+
+ // Enable the community to context translation for V1/V2 to V3
+ adaptor.enableCommunityStringAtContext();
+
+ return adaptor;
+ } catch (Exception ex) {
+ TRACER.debugError("Could not instanciate the SNMP Adaptor");
+ return adaptor;
+ }
+ }
+}
+
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
new file mode 100644
index 0000000..71afe97
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
@@ -0,0 +1,296 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import org.opends.messages.Message;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.api.AlertGenerator;
+import org.opends.server.api.ClientConnection;
+import org.opends.server.api.ConnectionHandler;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.DN;
+import org.opends.server.types.HostPort;
+
+import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
+
+import org.opends.server.core.DirectoryServer;
+import static org.opends.messages.ProtocolMessages.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+
+/**
+ * This class defines an SNMP connection handler, which can be used to answer
+ * SNMP Requests on MIB 2605. The MIB 2605 exposes a set of information
+ * on Directory Server instances, protocol handlers. The information
+ * regarding peer Directory Servers are not supported yet.
+ */
+public final class SNMPConnectionHandler
+ extends ConnectionHandler<SNMPConnectionHandlerCfg>
+ implements ConfigurationChangeListener<SNMPConnectionHandlerCfg>,
+ AlertGenerator {
+
+ // Current configuration
+ SNMPConnectionHandlerCfg currentConfig;
+ /**
+ * The list of active client connection
+ */
+ private LinkedList<ClientConnection> connectionList;
+ /**
+ * The set of listeners for this connection handler
+ */
+ private LinkedList<HostPort> listeners = new LinkedList<HostPort>();
+ /**
+ * SNMP Connection Handler delegation class
+ */
+ private SNMPClassLoaderProvider provider;
+ /**
+ * Is the SNMP Connection Handler Operational
+ */
+ private boolean isOperational = false;
+
+ /**
+ * Creates a new instance of this connection handler. All initialization
+ * should be performed in the {@code initializeConnectionHandler} method.
+ */
+ public SNMPConnectionHandler() {
+ super("SNMPConnectionHandler");
+ this.connectionList = new LinkedList<ClientConnection>();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public void initializeConnectionHandler(
+ SNMPConnectionHandlerCfg configuration) {
+
+ if (configuration == null) {
+ Message message = ERR_SNMP_CONNHANDLER_NO_CONFIGURATION.get();
+ logError(message);
+ return;
+ }
+
+ // Keep the connection handler configuration
+ this.currentConfig = configuration;
+
+ String jarLocation = this.currentConfig.getOpendmkJarfile();
+ if ((jarLocation==null) || (jarLocation.length()==0)){
+ Message message = ERR_SNMP_CONNHANDLER_NO_OPENDMK_JARFILES.get();
+ logError(message);
+ return;
+ }
+
+ // Get the jarFile Location and test if exists to be able to
+ // start the SNMP Connection Handler as requested
+ File jarFile = new File(jarLocation);
+ File fullpathFile;
+
+ if (!jarFile.isAbsolute()) {
+ fullpathFile = new File(DirectoryServer.getServerRoot(),
+ this.currentConfig.getOpendmkJarfile());
+ } else {
+ fullpathFile = new File(this.currentConfig.getOpendmkJarfile());
+ }
+
+ if (!fullpathFile.exists()) {
+ Message message = ERR_SNMP_CONNHANDLER_NO_OPENDMK_JARFILES.get();
+ logError(message);
+ return;
+ }
+
+ // Clear the listeners list
+ this.listeners.clear();
+ this.listeners.add(new HostPort("0.0.0.0",
+ this.currentConfig.getListenPort()));
+
+ if (!this.isOperational(fullpathFile)) {
+ Message message = ERR_SNMP_CONNHANDLER_NO_OPENDMK_JARFILES.get();
+ logError(message);
+ return;
+ }
+
+ // Create the SNMPClassLoaderProvider
+ this.provider = new SNMPClassLoaderProvider();
+
+ // Call the delegate class
+ this.provider.initializeConnectionHandler(this.currentConfig);
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public void finalizeConnectionHandler(Message finalizeReason,
+ boolean closeConnections) {
+ if (this.provider!=null) {
+ this.provider.finalizeConnectionHandler();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public String getConnectionHandlerName() {
+ return "SNMP Connection Handler";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public String getProtocol() {
+ return "SNMP";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public Collection<HostPort> getListeners() {
+ // There are no listeners for this connection handler.
+ return Collections.<HostPort>emptySet();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public Collection<ClientConnection> getClientConnections() {
+ // There are no client connections for this connection handler.
+ return Collections.<ClientConnection>emptySet();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public void run() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override()
+ public void toString(StringBuilder buffer) {
+ buffer.append("SNMPConnectionHandler");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isConfigurationChangeAcceptable(
+ SNMPConnectionHandlerCfg configuration,
+ List<Message> unacceptableReasons) {
+ // The configuration should always be acceptable.
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ConfigChangeResult applyConfigurationChange(
+ SNMPConnectionHandlerCfg configuration) {
+ if ((this.isOperational) && (this.provider!=null)){
+ return this.provider.applyConfigurationChange(configuration);
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public DN getComponentEntryDN() {
+ return this.currentConfig.dn();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getClassName() {
+ return SNMPConnectionHandler.class.getName();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public LinkedHashMap<String, String> getAlerts() {
+ LinkedHashMap<String, String> alerts = new LinkedHashMap<String, String>();
+ return alerts;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void addFile(File file) {
+ try {
+ URL u = new URL("jar:file://"+ file.toString()+"!/");
+ Class[] parameters = new Class[]{URL.class};
+ URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
+ Class sysclass = URLClassLoader.class;
+ Method method = sysclass.getDeclaredMethod("addURL",new Class[]{URL.class});
+ method.setAccessible(true);
+ method.invoke(sysloader,new Object[]{ u });
+ }
+ catch (Throwable t) {
+ }
+ }//end method
+
+ private void initSnmpClasses() {
+ try {
+ URLClassLoader opendsLoader = (URLClassLoader)DirectoryServer.getClassLoader();
+ Class.forName("com.sun.management.comm.SnmpV3AdaptorServer", true, opendsLoader);
+ Class.forName("com.sun.management.snmp.InetAddressAcl",true, opendsLoader);
+ Class.forName("com.sun.management.snmp.SnmpEngineParameters",true, opendsLoader);
+ Class.forName("com.sun.management.snmp.UserAcl",true, opendsLoader);
+ this.isOperational = true;
+ } catch (ClassNotFoundException ex) {
+ this.isOperational = false;
+ }
+ }
+
+ public boolean isOperational(File file) {
+ this.addFile(file);
+ this.initSnmpClasses();
+ return this.isOperational;
+ }
+
+ public boolean isOperational() {
+ return this.isOperational;
+ }
+}
+
+
+
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandlerDefinitions.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandlerDefinitions.java
new file mode 100644
index 0000000..d242765
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandlerDefinitions.java
@@ -0,0 +1,90 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * SNMP definitions.
+ */
+public class SNMPConnectionHandlerDefinitions {
+
+ // SNMP Version supported
+ public static String SNMP_VERSION_V1 = "v1";
+ public static String SNMP_VERSION_V2 = "v2";
+ public static String SNMP_VERSION_V3 = "v3";
+
+ /**
+ * List of Supported SNMP Version
+ */
+ public static Set<String> SUPPORTED_SNMP_VERSION=new HashSet<String>();
+ static {
+ SUPPORTED_SNMP_VERSION.add(SNMP_VERSION_V1);
+ SUPPORTED_SNMP_VERSION.add(SNMP_VERSION_V2);
+ SUPPORTED_SNMP_VERSION.add(SNMP_VERSION_V3);
+ }
+
+ // Domain for SNMP MBeans
+ public static final String SNMP_DOMAIN =
+ "org.opends.server.snmp:";
+ // Domain for Monitor MBeans
+ public static final String JMX_DOMAIN =
+ "org.opends.server:";
+
+ // Name of monitor Mbeans
+ public static final String MONITOR_CLIENT_CONNECTIONS_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-Client_Connections";
+ public static final String MONITOR_ENTRY_CACHES_OBJECTNANE =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-Entry_Caches";
+ public static final String MONITOR_JVM_MEMORY_USAGE_OBJECTNAME =
+ "RootDSE,Rdn1=cn-monitor,Rdn2=cn-JVM_Memory_Usage";
+ public static final String MONITOR_JVM_STACK_TRACE_OBJECTNAME = "" +
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-JVM_Stack_Trace";
+ public static final String MONITOR_SYSTEM_INFORMATION_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-System_Information";
+ public static final String MONITOR_VERSION_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-Version";
+ public static final String MONITOR_WORK_QUEUE_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-Work_Queue";
+ public static final String MONITOR_ADMIN_ROOT_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-adminRoot_Backend";
+ public static final String MONITOR_ADSTRUSTSTORE_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-adstruststore_Backend";
+ public static final String MONITOR_BACKUP_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-backup_Backend";
+ public static final String MONITOR_MONITOR_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-monitor_Backend";
+ public static final String MONITOR_SCHEMA_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-schema_Backend";
+ public static final String MONITOR_TASKS_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-tasks_Backend";
+ public static final String MONITOR_USERROOT_BACKEND_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-userRoot_Backend";
+ public static final String MONITOR_USERROOT_DATABASE_ENVIRONMENT_OBJECTNAME =
+ "rootDSE,Rdn1=cn-monitor,Rdn2=cn-userRoot_Database_Environment";
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPInetAddressAcl.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPInetAddressAcl.java
new file mode 100644
index 0000000..83c1748
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPInetAddressAcl.java
@@ -0,0 +1,210 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.InetAddressAcl;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.Vector;
+import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+
+/**
+ * This class allows to manage the IP-ACL based access rights
+ * for SNMP v1/v2c.
+ */
+public class SNMPInetAddressAcl implements InetAddressAcl {
+
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+ /**
+ * Current Security Configuration for the SNMP Connection Handler.
+ */
+ private SNMPConnectionHandlerCfg currentConfig;
+
+ private TreeSet<InetAddress> hostsList;
+ private boolean allManagers = false;
+
+ private SortedSet<String> trapsDestinations;
+ private String trapsCommunity;
+
+ private SortedSet<String> communitiesList;
+
+
+ /**
+ * Creates an IP-Based ACL controller
+ * @param configuration of the Configuration
+ */
+ public SNMPInetAddressAcl(SNMPConnectionHandlerCfg configuration) {
+ super();
+ this.currentConfig = configuration;
+
+ // hostsList
+ SortedSet tmp = this.currentConfig.getAllowedManager();
+ if (tmp.isEmpty()) {
+ this.allManagers=true;
+ }
+ this.hostsList = new TreeSet<InetAddress>();
+ // Transform the String list into InetAddress List
+ for (Iterator iter = tmp.iterator(); iter.hasNext();) {
+ try {
+ String dest = (String) iter.next();
+ this.hostsList.add(InetAddress.getByName(dest));
+ } catch (UnknownHostException ex) {
+ }
+ }
+
+ this.trapsDestinations = this.currentConfig.getTrapsDestination();
+ this.communitiesList = this.currentConfig.getCommunity();
+ this.trapsCommunity = this.currentConfig.getTrapsCommunity();
+
+ }
+
+ /**
+ * Gets the name of the acl
+ * @return the name of the acl as a String
+ */
+ public String getName() {
+ return "OpenDS";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkReadPermission(InetAddress address) {
+
+ if (this.allManagers) {
+ return true;
+ }
+
+ if ((this.hostsList==null) || (this.hostsList.isEmpty())) {
+ return false;
+ }
+
+ // check the address is in the configured allowed managers
+ boolean found = false;
+ for (Iterator iter = this.hostsList.iterator(); iter.hasNext();) {
+ InetAddress host = (InetAddress)iter.next();
+ if (host.equals(address)) {
+ found = true;
+ break;
+ }
+ }
+ return found;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkReadPermission(InetAddress address, String community) {
+ if ((this.checkReadPermission(address)) &&
+ (this.checkCommunity(community))) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkCommunity(String community) {
+ return this.communitiesList.contains(community);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkWritePermission(InetAddress address) {
+ // WRITE Access are always denied
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkWritePermission(InetAddress address, String community) {
+ // WRITE Access are always denied
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return the list<InetAddress> of traps destinations
+ */
+ public Enumeration getTrapDestinations() {
+ Vector<InetAddress> tempDests = new Vector<InetAddress>();
+ for (Iterator iter = this.trapsDestinations.iterator(); iter.hasNext();)
+ {
+ try {
+ String dest = (String) iter.next();
+ InetAddress addr = InetAddress.getByName(dest);
+ tempDests.add(addr);
+ } catch (UnknownHostException ex) {
+ }
+ }
+ return tempDests.elements();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param address
+ * @return
+ */
+ public Enumeration getTrapCommunities(InetAddress address) {
+ Vector<String> trapCommunities = new Vector<String>();
+ trapCommunities.add(this.trapsCommunity);
+ return trapCommunities.elements();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @return an empty enumeration
+ */
+ public Enumeration getInformDestinations() {
+ Vector<String> informDests = new Vector<String>();
+ return informDests.elements();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param address
+ * @return an empty enumeration
+ */
+ public Enumeration getInformCommunities(InetAddress address) {
+ Vector<String> informCommunities = new Vector<String>();
+ return informCommunities.elements();
+ }
+
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java
new file mode 100644
index 0000000..1913c74
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java
@@ -0,0 +1,362 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.SnmpStatusException;
+import java.security.PrivilegedAction;
+
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Set;
+
+import javax.management.Attribute;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.security.auth.Subject;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.protocols.internal.InternalClientConnection;
+import org.opends.server.protocols.jmx.Credential;
+import org.opends.server.protocols.jmx.OpendsJmxPrincipal;
+import org.opends.server.types.DebugLogLevel;
+
+/**
+ * The SNMPMonitor Class allows to get a singleton SNMPMonitor object allowing
+ * to access the JMX cn=monitor MBean.
+ */
+public class SNMPMonitor {
+
+ /**
+ * Debug Tracer for this class
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+ /**
+ * Singleton SNMPMonitor object
+ */
+ private static SNMPMonitor monitor = null;
+ /**
+ * Monitor MBeanServer server
+ */
+ private MBeanServer server;
+ /**
+ * Subject Auth to use to access the JMX Mbeans cn=monitor
+ */
+ private Subject subject = null;
+ /**
+ * Pattern to use to query the cn=monitor MBeans
+ */
+ public static ObjectName pattern;
+
+ static {
+ try {
+ pattern = new ObjectName(
+ SNMPConnectionHandlerDefinitions.JMX_DOMAIN +
+ "Name=rootDSE,Rdn1=cn-monitor,*");
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ }
+
+ /**
+ * Creates an SNMPMonitor object mapping
+ * @param server to use to the mapping
+ */
+ private SNMPMonitor(MBeanServer server) {
+ this.server = server;
+ this.subject = new Subject();
+ this.subject.getPrincipals().add(new OpendsJmxPrincipal("cn=anonymous"));
+ InternalClientConnection clientConnection =
+ InternalClientConnection.getRootConnection();
+ this.subject.getPrivateCredentials().add(new Credential(clientConnection));
+ }
+
+ /**
+ * Gets the singleton SNMPMonitor object
+ * @param server
+ * @return the SNMPMonitor mapping object
+ */
+ public static SNMPMonitor getMonitor(MBeanServer server) {
+ if (monitor == null) {
+ monitor = new SNMPMonitor(server);
+ }
+ return monitor;
+ }
+
+ /**
+ * Gets the Connection Handlers Statistics MBean
+ * @return the Set<ObjectName> of Connection Handlers Statistics.
+ * If Statistics do not exixist then an empty Set is returned
+ */
+ public Set<ObjectName> getConnectionHandlersStatistics() {
+ Set<ObjectName> results = new HashSet<ObjectName>();
+ try {
+ Set monitorObjects = this.server.queryNames(SNMPMonitor.pattern, null);
+ for (Iterator iter = monitorObjects.iterator(); iter.hasNext();) {
+ ObjectName name = (ObjectName) iter.next();
+ if ((name.getCanonicalName().contains("Connection_Handler")) &&
+ (name.getCanonicalName().endsWith("_Statistics"))) {
+ results.add(name);
+ }
+ }
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return results;
+ }
+
+ /**
+ * Return the ObjectName of the Connection Handler corresponding to
+ * the statistics name
+ * @param statistics ObjectName
+ * @return the Connection Handler ObjectName, null otherwise
+ */
+ public ObjectName getConnectionHandler(ObjectName statistics) {
+
+ // Check parameter
+ if (statistics == null) {
+ return null;
+ }
+
+ try {
+ String value = statistics.getCanonicalName();
+ if (!value.endsWith("_Statistics")) {
+ return null;
+ }
+ int index = value.indexOf("_Statistics");
+ String name = value.substring(0, index);
+ ObjectName connectionHandlerName = new ObjectName(name);
+
+ // Check if the MBean exists
+ Set query = this.server.queryNames(connectionHandlerName, null);
+ if ((query != null) && (!query.isEmpty())) {
+ return connectionHandlerName;
+ }
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Return a Set of Connection Handler ObjectNames
+ * @return the Set of ObjectNames, an empty Set if no connection handlers
+ */
+ public Set<ObjectName> getConnectionHandlers() {
+ Set monitorObjects;
+ Set<ObjectName> results = new HashSet<ObjectName>();
+ try {
+ monitorObjects = this.server.queryNames(SNMPMonitor.pattern, null);
+ for (Iterator iter = monitorObjects.iterator(); iter.hasNext();) {
+ ObjectName name = (ObjectName) iter.next();
+ if ((name.getCanonicalName().contains("Connection_Handler")) &&
+ (!(name.getCanonicalName().endsWith("_Statistics")))) {
+ results.add(name);
+ }
+ }
+ return results;
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ return results;
+ }
+ }
+
+ /**
+ * Returns the ObjectName of the Statistics Connection Handler name
+ * corresponding to the Connection Handler name
+ * @param connectionHandlerName
+ * @return the ObjectName of the statistics ObjectName, null if the statistics
+ * could not be found
+ */
+ public ObjectName getConnectionHandlerStatistics(
+ ObjectName connectionHandlerName) {
+
+ if (connectionHandlerName == null) {
+ return null;
+ }
+ try {
+ String value =
+ connectionHandlerName.getCanonicalName().concat("_Statistics");
+ ObjectName statistics = new ObjectName(value);
+ // Check if the MBean exists
+ Set query = this.server.queryNames(statistics, null);
+ if ((query != null) && (!query.isEmpty())) {
+ return statistics;
+ }
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the value of the attribute
+ * @param name of Mbean as a String
+ * @param attribute to look for
+ * @return the value of the attribute, null if the attribute could not
+ * be found
+ */
+ public Object getAttribute(String name, String attribute) {
+ try {
+ ObjectName objName = new ObjectName(
+ SNMPConnectionHandlerDefinitions.JMX_DOMAIN +
+ "Name=" + name);
+ return getAttribute(objName, attribute);
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Gets the value of an attribute
+ * @param name of the Mbean
+ * @param attribute to look for
+ * @return the value of the attribute, null if the attribute value could not
+ * be found
+ */
+ @SuppressWarnings("unchecked")
+ public Object getAttribute(final ObjectName name, final String attribute) {
+ return Subject.doAs(this.subject, new PrivilegedAction() {
+
+ public Object run() {
+ try {
+ Attribute attr = (Attribute) server.getAttribute(name, attribute);
+ if (attr != null) {
+ return attr.getValue();
+ }
+ } catch (Exception ex) {
+ if (DebugLogger.debugEnabled()) {
+ TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+ }
+ }
+ return null;
+ }
+ });
+ }
+
+ /**
+ * Wrapper for SNMP Counter32
+ * @param v value
+ * @return a counter32
+ */
+ public static long counter32Value(long v) {
+ if (v > (pow(2, 32) - 1)) {
+ return (v % pow(2, 32));
+ } else {
+ return v;
+ }
+ }
+
+ /**
+ * Wrapper for SNMP Counter32
+ * @param V Value
+ * @return a Counter32
+ */
+ public static Long counter32Value(Long V) {
+ long v = V.longValue();
+ if (v > (pow(2, 32) - 1)) {
+ return new Long(v % pow(2, 32));
+ } else {
+ return V;
+ }
+ }
+
+ /**
+ * Latcher for SNMP Gauge32
+ * @param v value
+ * @return a gauge32
+ */
+ public static long gauge32Value(long v) {
+ if (v > (pow(2, 32) - 1)) {
+ return (pow(2, 32) - 1);
+ } else {
+ return v;
+ }
+ }
+
+ /**
+ * Latcher for SNMP Gauge32
+ * @param V value
+ * @return a gauge32
+ */
+ public static Long gauge32Value(Long V) {
+ long v = V.longValue();
+ if (v > (pow(2, 32) - 1)) {
+ return new Long(pow(2, 32) - 1);
+ } else {
+ return V;
+ }
+ }
+
+ /**
+ * Checker for SNMP INTEGER
+ * @param V value
+ * @return an Integer
+ * @throws com.sun.management.snmp.SnmpStatusException
+ */
+ public static Integer integerValue(Long V) throws SnmpStatusException {
+ long v = V.longValue();
+ if (v > (pow(2, 31) - 1)) {
+ throw new SnmpStatusException("Returned intrumented value size too big");
+ }
+ Integer ret = new Integer(V.intValue());
+ return ret;
+ }
+
+ /**
+ * pow x^y
+ */
+ private static long pow(long x, long y) {
+ int j = 1;
+ long k = x;
+ if (y == 0) {
+ return 1;
+ }
+ if (y == 1) {
+ return x;
+ }
+ while (j < y) {
+ k = k * x;
+ j++;
+ }
+ return k;
+ }
+}
diff --git a/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPUserAcl.java b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPUserAcl.java
new file mode 100644
index 0000000..db2e267
--- /dev/null
+++ b/opendj-sdk/opends/src/snmp/src/org/opends/server/snmp/SNMPUserAcl.java
@@ -0,0 +1,158 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.UserAcl;
+import java.util.SortedSet;
+import org.opends.server.admin.std.meta.SNMPConnectionHandlerCfgDefn.*;
+import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+
+public class SNMPUserAcl implements UserAcl {
+
+ /**
+ * The debug log tracer for this class.
+ */
+ private static final DebugTracer TRACER = DebugLogger.getTracer();
+ /**
+ * If * then all the users are allowed to access in read
+ */
+ private static final String ALL_USERS_ALLOWED = "*";
+ /**
+ * Current Security Configuration for the SNMP Connection Handler.
+ */
+ private SNMPConnectionHandlerCfg currentConfig;
+ /**
+ * Configured hosts list
+ */
+ private SortedSet usersList;
+ /**
+ * Configured traps destinations
+ */
+ private SortedSet trapDestinations;
+ /**
+ * Configured communities string
+ */
+ private SortedSet communityList;
+ /**
+ * Configured Security level
+ */
+ private SecurityLevel securityLevel;
+ /**
+ * User Name template - the only user getting the write access
+ * on the USM MIB . Allowed to add user clones
+ */
+ private String templateUsername;
+
+ /**
+ * {@inheritDoc}
+ * @param configuration of the SNMP Connection Handler
+ */
+ public SNMPUserAcl(SNMPConnectionHandlerCfg configuration) {
+ // Keep the configuration
+ this.currentConfig = configuration;
+ // Get the community/context string to accept
+ this.communityList = this.currentConfig.getCommunity();
+ // Get the list of allowed users (SNMPV3)
+ this.usersList = this.currentConfig.getAllowedUser();
+ // Get the traps destinations
+ this.trapDestinations = this.currentConfig.getTrapsDestination();
+ // Get the min security level to accept
+ this.securityLevel = this.currentConfig.getSecurityLevel();
+ // Get the user name template allowed to add users in the USM MIB
+ this.templateUsername = this.currentConfig.getTemplateUsername();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getName() {
+ // ACL Name
+ return "OpenDS";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkReadPermission(String user) {
+ if ((this.usersList.contains(ALL_USERS_ALLOWED)) ||
+ (this.usersList.contains(user))) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkReadPermission(String user, String contextName,
+ int securityLevel) {
+
+ // Special check for the defaultUser
+ if ((user.equals(this.templateUsername)) && (contextName.equals("null")) && ((this.securityLevel.ordinal() + 1) >= securityLevel)) {
+ return true;
+ }
+
+ // Else
+ if ((checkReadPermission(user)) &&
+ ((this.securityLevel.ordinal() + 1) >= securityLevel)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkContextName(String contextName) {
+ return this.communityList.contains(contextName);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkWritePermission(String user) {
+ if (user.equals(this.templateUsername)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean checkWritePermission(String user, String contextName,
+ int securityLevel) {
+ if ((checkWritePermission(user)) &&
+ (contextName.equals("null")) &&
+ ((this.securityLevel.ordinal() + 1) >= securityLevel)) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index d51fb48..ae47e64 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -258,6 +258,14 @@
File testClassesDir = new File(testRoot, "classes");
File testLibDir = new File(testRoot, "lib");
File testBinDir = new File(testRoot, "bin");
+
+ // Snmp resource
+ File snmpResourceDir = new File(buildRoot + File.separator + "src" +
+ File.separator + "snmp" + File.separator +
+ "resource");
+
+ File testSnmpResourceDir = new File (testConfigDir + File.separator +
+ "snmp");
if (Boolean.getBoolean(PROPERTY_COPY_CLASSES_TO_TEST_PKG)) {
copyDirectory(serverClassesDir, testClassesDir);
@@ -271,6 +279,8 @@
new File(testConfigDir, "schema"));
copyDirectory(new File(resourceDir, "MakeLDIF"),
new File(testConfigDir, "MakeLDIF"));
+ copyDirectory(new File(snmpResourceDir, "security"),
+ new File(testSnmpResourceDir, "security"));
copyFile(new File(testResourceDir, "server.keystore"),
new File(testConfigDir, "server.keystore"));
copyFile(new File(testResourceDir, "server.truststore"),
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPConnectionManager.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPConnectionManager.java
new file mode 100644
index 0000000..b811614
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPConnectionManager.java
@@ -0,0 +1,251 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.SnmpEngine;
+import com.sun.management.snmp.SnmpOid;
+import com.sun.management.snmp.SnmpOidTableSupport;
+import com.sun.management.snmp.manager.SnmpPeer;
+import com.sun.management.snmp.manager.SnmpSession;
+import com.sun.management.snmp.manager.usm.SnmpUsmPeer;
+import java.net.InetAddress;
+import static org.testng.Assert.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opends.server.DirectoryServerTestCase;
+import org.opends.server.TestCaseUtils;
+import org.opends.server.api.ConnectionHandler;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.ModifyOperationBasis;
+import org.opends.server.protocols.internal.InternalClientConnection;
+import org.opends.server.types.Control;
+import org.opends.server.types.DN;
+import org.opends.server.types.Modification;
+import org.opends.server.types.ModificationType;
+import org.testng.annotations.Test;
+
+/**
+ * An abstract class that all SNMP unit test should extend.
+ */
+@Test(enabled=false, groups = {"precommit", "snmp"}, sequential = true)
+public abstract class SNMPConnectionManager extends DirectoryServerTestCase {
+
+ /**
+ * Snmp Port
+ */
+ private int snmpPort;
+
+ /**
+ * Snmp Trap Port
+ */
+ private int trapSnmpPort;
+
+ /**
+ * Set Up the Directory Server
+ * @throws java.lang.Exception
+ */
+ protected void setUp() throws Exception {
+
+ // Make sure that the server is up and running.
+ TestCaseUtils.restartServer();
+ synchronized (this) {
+ this.wait(500);
+ }
+ SNMPConnectionHandler snmpHandler = getSNMPConnectionHandler();
+ if (snmpHandler == null) {
+ throw new Exception("Unable to get a SNMP connector");
+ }
+ }
+
+ /**
+ * Set Down the Directory Server
+ * @param message
+ * @throws java.lang.Exception
+ */
+ protected void setDown(String message) throws Exception {
+ TestCaseUtils.shutdownServer(message);
+ }
+
+ /**
+ * Gets the Snmp port on which the Connection Handler is listening
+ * @return
+ */
+ protected int getSnmpPort() {
+ return this.snmpPort;
+ }
+
+ /**
+ * Gets the Snmp trap port on which the Connection Handler is listening
+ * @return
+ */
+ protected int getTrapSnmpPort() {
+ return this.trapSnmpPort;
+ }
+
+
+ /**
+ * Gets an SNMP V3 peer agent (proxy)
+ * @param port
+ * @return
+ */
+ protected SnmpUsmPeer getSnmpV3Peer(int port) {
+
+ try {
+ String host = InetAddress.getLocalHost().getCanonicalHostName();
+ SnmpOidTableSupport oidTable =
+ new DIRECTORY_SERVER_MIBOidTable();
+ SnmpOid.setSnmpOidTable(oidTable);
+
+ SnmpSession session = new SnmpSession("SyncManagerV3 session");
+ SnmpEngine engine = session.getEngine();
+ return new SnmpUsmPeer(engine, host, port);
+ } catch (Exception ex) {
+ return null;
+ }
+ }
+
+ /**
+ * Gets an SNMP V2 agent peer (proxy)
+ * @param port
+ * @return
+ */
+ protected SnmpPeer getSnmpV2Peer(int port) {
+
+ try {
+ String host = InetAddress.getLocalHost().getCanonicalHostName();
+ SnmpOidTableSupport oidTable = new DIRECTORY_SERVER_MIBOidTable();
+ SnmpOid.setSnmpOidTable(oidTable);
+ return new SnmpPeer(host, port);
+ } catch (Exception ex) {
+ return null;
+ }
+ }
+
+ /**
+ * Get a reference to the SNMP connection handler.
+ * @return an SNMP Connection handler
+ * @throws an Exception is something went wrong.
+ */
+ public SNMPConnectionHandler getSNMPConnectionHandler() throws Exception {
+ List<ConnectionHandler> handlers =
+ DirectoryServer.getConnectionHandlers();
+ assertNotNull(handlers);
+ SNMPConnectionHandler snmpConnectionHandler = null;
+ for (ConnectionHandler handler : handlers) {
+ if (handler instanceof SNMPConnectionHandler) {
+ snmpConnectionHandler = (SNMPConnectionHandler) handler;
+ break;
+ }
+ }
+
+ if (snmpConnectionHandler == null) {
+ enableSnmp();
+ synchronized (this) {
+ this.wait(500);
+ }
+ for (ConnectionHandler handler : handlers) {
+ if (handler instanceof SNMPConnectionHandler) {
+ snmpConnectionHandler = (SNMPConnectionHandler) handler;
+ break;
+ }
+ }
+ }
+ assertNotNull(snmpConnectionHandler);
+ return snmpConnectionHandler;
+ }
+
+ /**
+ * Enable SNMP with the port chosen in TestCaseUtils.
+ *
+ * @throws Exception
+ * if the handler cannot be enabled.
+ */
+ protected void enableSnmp() throws Exception {
+
+ // Get a free port
+ this.snmpPort = TestCaseUtils.bindFreePort().getLocalPort();
+ this.trapSnmpPort = TestCaseUtils.bindFreePort().getLocalPort();
+
+
+ ArrayList<Modification> mods = new ArrayList<Modification>();
+
+ InternalClientConnection conn =
+ InternalClientConnection.getRootConnection();
+ mods.add(new Modification(ModificationType.REPLACE,
+ new org.opends.server.types.Attribute(
+ "ds-cfg-enabled", "true")));
+
+ mods.add(new Modification(ModificationType.REPLACE,
+ new org.opends.server.types.Attribute(
+ "ds-cfg-listen-port", String.valueOf(this.snmpPort))));
+
+ mods.add(new Modification(ModificationType.REPLACE,
+ new org.opends.server.types.Attribute(
+ "ds-cfg-trap-port", String.valueOf(this.trapSnmpPort))));
+
+ String hosts = InetAddress.getLocalHost().getCanonicalHostName();
+
+ mods.add(new Modification(ModificationType.ADD,
+ new org.opends.server.types.Attribute(
+ "ds-cfg-traps-destination", hosts)));
+
+ ModifyOperationBasis op = new ModifyOperationBasis(
+ conn,
+ conn.nextOperationID(),
+ conn.nextMessageID(),
+ new ArrayList<Control>(),
+ DN.decode("cn=SNMP Connection Handler,cn=Connection Handlers,cn=config"),
+ mods);
+ op.run();
+ }
+
+ /**
+ * Enable JMX with the port chosen in TestCaseUtils.
+ *
+ * @throws Exception
+ * if the handler cannot be enabled.
+ */
+ protected void enableJmx() throws Exception {
+ ArrayList<Modification> mods = new ArrayList<Modification>();
+
+ InternalClientConnection conn = InternalClientConnection.getRootConnection();
+ mods.add(new Modification(ModificationType.REPLACE,
+ new org.opends.server.types.Attribute(
+ "ds-cfg-enabled", "true")));
+
+ ModifyOperationBasis op = new ModifyOperationBasis(
+ conn,
+ conn.nextOperationID(),
+ conn.nextMessageID(),
+ new ArrayList<Control>(),
+ DN.decode("cn=JMX Connection Handler,cn=Connection Handlers,cn=config"),
+ mods);
+ op.run();
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java
new file mode 100644
index 0000000..7bf58f9
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java
@@ -0,0 +1,312 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.management.snmp.SnmpDefinitions;
+import com.sun.management.snmp.SnmpOid;
+import com.sun.management.snmp.SnmpOidTableSupport;
+import com.sun.management.snmp.SnmpVarBindList;
+import com.sun.management.snmp.manager.SnmpParameters;
+import com.sun.management.snmp.manager.SnmpPeer;
+import com.sun.management.snmp.manager.SnmpRequest;
+import com.sun.management.snmp.manager.SnmpSession;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Map.Entry;
+import org.opends.messages.Message;
+import org.opends.server.admin.AbstractManagedObjectDefinition;
+import org.opends.server.admin.server.AdminTestCaseUtils;
+import org.opends.server.admin.std.meta.SNMPConnectionHandlerCfgDefn;
+import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
+import org.opends.server.core.ModifyOperationBasis;
+import org.opends.server.protocols.internal.InternalClientConnection;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.Control;
+import org.opends.server.types.DN;
+import org.opends.server.types.Modification;
+import org.opends.server.types.ModificationType;
+import org.opends.server.types.ResultCode;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+/**
+ * A simple test for : - JMX connection establishment withou using SSL -
+ * JMX get and set - configuration change
+ */
+@Test(enabled=false, groups = {"precommit", "snmp"}, sequential = true)
+public class SNMPSyncManagerV2AccessTest extends SNMPConnectionManager {
+
+ @BeforeClass
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @AfterClass
+ public void afterClass() throws Exception {
+ super.shutdownServer();
+ }
+
+ @DataProvider(name = "listAttributes")
+ Object[][] listAttributes() {
+ return new Object[][]{
+ {"dsServerType"},
+ {"dsServerDescription"},
+ {"dsMasterEntries"},
+ {"dsCopyEntries"},
+ {"dsCacheEntries"},
+ {"dsCacheHits"},
+ {"dsSlaveHits"}};
+ }
+
+ @Test(enabled=false,dataProvider = "listAttributes")
+ public void checkAttribute(String attributeName) {
+
+ // get the SNMP peer agent
+ SnmpPeer agent = this.getSnmpV2Peer(this.getSnmpPort());
+ assertNotNull(agent);
+
+ // Create parameters to associate to the entity to communicate
+ // with.
+ // When creating the parameter object, you can specify the read
+ // and write community to be used when querying the agent.
+
+ final SnmpParameters params =
+ new SnmpParameters();
+
+ // Set to the allowed the community string
+ params.setRdCommunity("OpenDS");
+
+ // The newly created parameter must be associated to the agent.
+ //
+ agent.setParams(params);
+
+ // Build the session. A session creates, controls and
+ // manages one or more requests.
+ //
+ try {
+
+ final SnmpSession session =
+ new SnmpSession("SyncManager session");
+
+ // A default peer (agent) can be associated to a SnmpSession.
+ // When invoking a service provided by the SnmpSession, if the
+ // agent is not specified, the session will perform the service
+ // using the default peer as the target of the service.
+ //
+ session.setDefaultPeer(agent);
+
+ // Build the list of variables you want to query.
+ // For debug purposes, you can associate a name to your list.
+ //
+ final SnmpVarBindList list =
+ new SnmpVarBindList("SyncManager varbind list");
+
+ // We want to read the "dsServerDescription" variable.
+ //
+ // We will thus query "dsServerDescription"
+ //
+ list.addVarBind(attributeName);
+
+ // Make the SNMP get request and wait for the result.
+ //
+ SnmpRequest request = session.snmpGetNextRequest(null, list);
+
+ final boolean completed = request.waitForCompletion(0);
+
+ // Check for a timeout of the request.
+ //
+ if (completed == false) {
+ fail("SyncManager::main: Request timed out." +
+ " Check reachability of agent");
+ return;
+ }
+
+ // Now we have a response. Check if the response contains
+ // an error.
+ //
+ final int errorStatus = request.getErrorStatus();
+ if (errorStatus != SnmpDefinitions.snmpRspNoError) {
+ fail("Error status = " +
+ SnmpRequest.snmpErrorToString(errorStatus));
+ fail("Error index = " + request.getErrorIndex());
+ return;
+ }
+
+ // Now we shall display the content of the result.
+ //
+ final SnmpVarBindList result = request.getResponseVarBindList();
+ assertNotNull(result);
+ assertEquals(result.getVarBindCount(), 1);
+
+
+ // Nicely stop the session
+ //
+ session.destroySession();
+
+ } catch (Exception exception) {
+ fail("CheckAttribute");
+ }
+
+ //
+ // That's all !
+ //
+ return;
+ }
+
+ /**
+ * Build some data for the simpleGet test.
+ */
+ @DataProvider(name = "listCommunities")
+ Object[][] listCommunities() {
+ return new Object[][]{
+ {"public", false},
+ {"private", false},
+ {"OpenDS", true},
+ {"dummy", false},
+ {"", false}};
+ }
+
+ @Test(enabled = false,dataProvider = "listCommunities")
+ public void checkCommunity(String community, boolean expectedResult) {
+
+ try {
+
+ String host = InetAddress.getLocalHost().getCanonicalHostName();
+ // Initialize the SNMP Manager API.
+ // Specify the OidTable containing all the MIB II knowledge.
+ // Use the OidTable generated by mibgen when compiling MIB II.
+ //
+ final SnmpOidTableSupport oidTable = new
+ DIRECTORY_SERVER_MIBOidTable();
+
+ SnmpOid.setSnmpOidTable(oidTable);
+
+ // At any time, it is possible to add knowledge in the OidTable
+ // using the SnmpOidDatabaseSupport.
+ // For instance, we could start the Manager API like that:
+ // SnmpOidDatabaseSupport oidDB =
+ // new SnmpOidDatabaseSupport();
+ // SnmpOid.setSnmpOidTable(oidDB);
+ // Then over time, MIB knowledge can be added as follows:
+ // oidDB.add(oidTable);
+ //
+
+ // Create a SnmpPeer object for representing the entity to
+ // communicate with.
+ //
+ final SnmpPeer agent =
+ new SnmpPeer(host, this.getSnmpPort());
+
+ // Create parameters to associate to the entity to communicate
+ // with.
+ // When creating the parameter object, you can specify the read
+ // and write community to be used when querying the agent.
+ //
+ final SnmpParameters params =
+ new SnmpParameters();
+ params.setRdCommunity(community);
+
+ // The newly created parameter must be associated to the agent.
+ //
+ agent.setParams(params);
+
+ // Build the session. A session creates, controls and
+ // manages one or more requests.
+ //
+ final SnmpSession session =
+ new SnmpSession("SyncManager session");
+
+ // A default peer (agent) can be associated to a SnmpSession.
+ // When invoking a service provided by the SnmpSession, if the
+ // agent is not specified, the session will perform the service
+ // using the default peer as the target of the service.
+ //
+ session.setDefaultPeer(agent);
+
+ // Build the list of variables you want to query.
+ // For debug purposes, you can associate a name to your list.
+ //
+ final SnmpVarBindList list =
+ new SnmpVarBindList("SyncManager varbind list");
+
+ // We want to read the "dsServerDescription" variable.
+ //
+ // We will thus query "dsServerDescription"
+ //
+ list.addVarBind("dsServerDescription");
+
+ // Make the SNMP get request and wait for the result.
+ //
+ SnmpRequest request = session.snmpGetNextRequest(null, list);
+
+ final boolean completed = request.waitForCompletion(0);
+
+ // Check for a timeout of the request.
+ //
+ if (completed == false) {
+ fail("SyncManager::main: Request timed out." +
+ " Check reachability of agent");
+ return;
+ }
+
+ // Now we have a response. Check if the response contains
+ // an error.
+ //
+ final int errorStatus = request.getErrorStatus();
+ if (errorStatus != SnmpDefinitions.snmpRspNoError) {
+ fail("Error status = " +
+ SnmpRequest.snmpErrorToString(errorStatus));
+ fail("Error index = " + request.getErrorIndex());
+ return;
+ }
+
+ // Now we shall display the content of the result.
+ //
+ final SnmpVarBindList result = request.getResponseVarBindList();
+ assertNotNull(result);
+ assertEquals(result.getVarBindCount(), 1);
+ assertEquals(result.getVarBindAt(0).isValidValue(), expectedResult);
+
+
+ // Nicely stop the session
+ //
+ session.destroySession();
+
+ //
+ // That's all !
+ //
+ return;
+
+ } catch (Exception e) {
+ fail("SyncManager::main: " + "Exception occurred:", e);
+ }
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPTrapManagerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPTrapManagerTest.java
new file mode 100644
index 0000000..63d5eaa
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPTrapManagerTest.java
@@ -0,0 +1,149 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ */
+package org.opends.server.snmp;
+
+import com.sun.jdmk.tasks.DaemonTaskServer;
+import com.sun.management.snmp.SnmpPduRequest;
+import com.sun.management.snmp.SnmpPduTrap;
+import com.sun.management.snmp.SnmpScopedPduRequest;
+import com.sun.management.snmp.SnmpEventReportDispatcher;
+import com.sun.management.snmp.manager.SnmpTrapListener;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import org.opends.server.core.ModifyOperationBasis;
+import org.opends.server.protocols.internal.InternalClientConnection;
+import org.opends.server.types.Control;
+import org.opends.server.types.DN;
+import org.opends.server.types.Modification;
+import org.opends.server.types.ModificationType;
+import org.testng.annotations.BeforeClass;
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+/**
+ * The class is a simple example showing how to use the SNMP Manager API.
+ *
+ * <p>When calling the program, you must specify:
+ * <br> - host: hostname of the SNMP agent you want to query.
+ * <br> - port: port number to use.
+ *
+ * <p>As a reminder, if you wish to query the SNMP agent example provided
+ * as part of Java DMK, use port 8085.
+ */
+@Test(enabled=false, groups = {"precommit", "snmp"}, sequential = true)
+public class SNMPTrapManagerTest extends SNMPConnectionManager {
+
+ @BeforeClass
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @Test(enabled = false)
+ public void checkTraps() {
+ try {
+
+ // Create a taskServer for processing traps.
+ // This is an optional step. However using a DaemonTaskServer
+ // to process incomming PDUs makes it possible to empty
+ // the trap socket faster, thus reducing the hazards
+ // of trap loss.
+ // We set the priority of the DaemonTaskServer to
+ // Thread.NORM_PRIORITY so that emptying the socket takes
+ // precedence over trap processing.
+ //
+ final DaemonTaskServer taskServer = new DaemonTaskServer();
+ taskServer.start(Thread.NORM_PRIORITY);
+
+ // Create a listener and dispatcher for SNMP traps
+ // (SnmpEventReportDispatcher).
+ // SnmpEventReportDispatcher is run as a thread and listens
+ // for traps in UDP port = agent port + 1.
+ // Add TrapListenerImpl as SnmpTrapListener.
+ // TrapListenerImpl will receive a callback when a valid trap
+ // PDU is received.
+ //
+ final SnmpEventReportDispatcher trapAgent =
+ new SnmpEventReportDispatcher((this.getTrapSnmpPort()),
+ null, taskServer, null);
+ SNMPTrapListenerImpl trapListener = new SNMPTrapListenerImpl();
+ trapAgent.addTrapListener(trapListener);
+ final Thread trapThread = new Thread(trapAgent);
+ trapThread.setPriority(Thread.MAX_PRIORITY);
+ trapThread.start();
+
+ // One Trap
+ this.setDown(
+ "On demand from org.opends.server.snmp.SNMPTrapManagerTest");
+
+ int trapNumbers = trapListener.getNumberV1Traps();
+
+ // Should received 3 traps
+ assertEquals(trapNumbers, 1);
+
+ // Nicely stop the SnmpEventReportDispatcher.
+ //
+ trapAgent.close();
+ taskServer.terminate();
+
+ return;
+
+ } catch (Exception e) {
+ fail("SyncManager::main: " +
+ "Exception occurred:" + e);
+ }
+ }
+
+ private class SNMPTrapListenerImpl implements SnmpTrapListener {
+
+ private int numberV1Traps=0;
+ private int numberV2Traps=0;
+ private int numberV3Traps=0;
+
+ public void processSnmpTrapV1(SnmpPduTrap trap) {
+ this.numberV1Traps++;
+ }
+
+ public void processSnmpTrapV2(SnmpPduRequest trap) {
+ this.numberV2Traps++;
+ }
+
+ public void processSnmpTrapV3(SnmpScopedPduRequest trap) {
+ this.numberV3Traps++;
+ }
+
+ public int getNumberV1Traps() {
+ return this.numberV1Traps;
+ }
+
+ public int getNumberV2Traps() {
+ return this.numberV3Traps;
+ }
+ }
+
+}
+
--
Gitblit v1.10.0