/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
// java imports
//
// jmx imports
//
/**
* Abstract class for representing an SNMP agent.
*
* The class is used by the SNMP protocol adaptor as the entry point in
* the SNMP agent to query.
*
* <p><b>This API is a Sun Microsystems internal API and is subject
* to change without notice.</b></p>
*/
public abstract class SnmpMibAgent
/**
* Default constructor.
*/
public SnmpMibAgent() {
}
// ---------------------------------------------------------------------
// PUBLIC METHODS
//----------------------------------------------------------------------
/**
* Initializes the MIB (with no registration of the MBeans into the
* MBean server).
*
* @exception IllegalAccessException The MIB can not be initialized.
*/
/**
* Initializes the MIB but each single MBean representing the MIB
* is inserted into the MBean server.
*
* @param server The MBean server to register the service with.
* @param name The object name.
*
* @return The name of the SNMP MIB registered.
*
* @exception java.lang.Exception
*/
/**
* Not used in this context.
*/
}
/**
* Not used in this context.
*/
}
/**
* Not used in this context.
*/
public void postDeregister() {
}
/**
* Processes a <CODE>get</CODE> operation.
* This method must update the SnmpVarBinds contained in the
* <var>{@link SnmpMibRequest} req</var> parameter.
*
* @param req The SnmpMibRequest object holding the list of variable to
* be retrieved. This list is composed of
* <CODE>SnmpVarBind</CODE> objects.
*
* @exception SnmpStatusException An error occured during the operation.
*/
throws SnmpStatusException;
/**
* Processes a <CODE>getNext</CODE> operation.
* This method must update the SnmpVarBinds contained in the
* <var>{@link SnmpMibRequest} req</var> parameter.
*
* @param req The SnmpMibRequest object holding the list of
* OIDs from which the next variables should be retrieved.
* This list is composed of <CODE>SnmpVarBind</CODE> objects.
*
* @exception SnmpStatusException An error occured during the operation.
*/
throws SnmpStatusException;
/**
* Processes a <CODE>getBulk</CODE> operation.
* This method must update the SnmpVarBinds contained in the
* <var>{@link SnmpMibRequest} req</var> parameter.
*
* @param req The SnmpMibRequest object holding the list of variable to
* be retrieved. This list is composed of
* <CODE>SnmpVarBind</CODE> objects.
*
* @param nonRepeat The number of variables, starting with the first
* variable in the variable-bindings, for which a single
* lexicographic successor is requested.
*
* @param maxRepeat The number of lexicographic successors requested
* for each of the last R variables. R is the number of variables
* following the first <CODE>nonRepeat</CODE> variables for which
* multiple lexicographic successors are requested.
*
* @exception SnmpStatusException An error occured during the operation.
*/
int maxRepeat)
throws SnmpStatusException;
/**
* Processes a <CODE>set</CODE> operation.
* This method must update the SnmpVarBinds contained in the
* <var>{@link SnmpMibRequest} req</var> parameter.
* This method is called during the second phase of the SET two-phase
* commit.
*
* @param req The SnmpMibRequest object holding the list of variable to
* be set. This list is composed of
* <CODE>SnmpVarBind</CODE> objects.
*
* @exception SnmpStatusException An error occured during the operation.
* Throwing an exception in this method will break the
* atomicity of the SET operation. Care must be taken so that
* the exception is thrown in the {@link #check(SnmpMibRequest)}
* method instead.
*/
throws SnmpStatusException;
/**
* Checks if a <CODE>set</CODE> operation can be performed.
* If the operation can not be performed, the method should throw an
* <CODE>SnmpStatusException</CODE>.
* This method is called during the first phase of the SET two-phase
* commit.
*
* @param req The SnmpMibRequest object holding the list of variable to
* be set. This list is composed of
* <CODE>SnmpVarBind</CODE> objects.
*
* @exception SnmpStatusException The <CODE>set</CODE> operation
* cannot be performed.
*/
throws SnmpStatusException;
/**
* Gets the root object identifier of the MIB.
* <P>The root object identifier is the object identifier uniquely
* identifying the MIB.
*
* @return The root object identifier.
*/
public abstract long[] getRootOid();
// ---------------------------------------------------------------------
// GETTERS AND SETTERS
// ---------------------------------------------------------------------
/**
* Gets the reference to the MBean server in which the SNMP MIB is
* registered.
*
* @return The MBean server or null if the MIB is not registered in any
* MBean server.
*/
return server;
}
/**
* Gets the reference to the SNMP protocol adaptor to which the MIB is
* bound.
*
* @return The SNMP MIB handler.
*/
return adaptor;
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and add this new MIB in the SNMP MIB handler.
*
* @param stack The SNMP MIB handler.
*/
}
}
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and add this new MIB in the SNMP MIB handler.
* This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
* Some OID can be implemented in more than one MIB. In this case, the OID nearest the agent will be used on SNMP operations.
* @param stack The SNMP MIB handler.
* @param oids The set of OIDs this agent implements.
*
* @since 1.5
*/
}
}
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
* Adds a new contextualized MIB in the SNMP MIB handler.
*
* @param stack The SNMP MIB handler.
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
*
* @exception IllegalArgumentException If the parameter is null.
*
* @since 1.5
*/
}
}
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
* Adds a new contextualized MIB in the SNMP MIB handler.
*
* @param stack The SNMP MIB handler.
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
* @param oids The set of OIDs this agent implements.
* @exception IllegalArgumentException If the parameter is null.
*
* @since 1.5
*/
}
}
}
/**
* Gets the object name of the SNMP protocol adaptor to which the MIB
* is bound.
*
* @return The name of the SNMP protocol adaptor.
*/
return adaptorName;
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
* associated to the specified <CODE>name</CODE>.
*
* @param name The name of the SNMP protocol adaptor.
*
* @exception InstanceNotFoundException The SNMP protocol adaptor does
* not exist in the MBean server.
*
* @exception ServiceNotFoundException This SNMP MIB is not registered
* in the MBean server or the requested service is not supported.
*/
}
// First remove the reference on the old adaptor server.
//
}
// Then update the reference to the new adaptor server.
//
try {
signature));
} catch (InstanceNotFoundException e) {
} catch (ReflectionException e) {
} catch (MBeanException e) {
// Should never occur...
}
adaptorName = name;
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
* associated to the specified <CODE>name</CODE>.
* This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
* Some OID can be implemented in more than one MIB. In this case, the OID nearer agent will be used on SNMP operations.
* @param name The name of the SNMP protocol adaptor.
* @param oids The set of OIDs this agent implements.
* @exception InstanceNotFoundException The SNMP protocol adaptor does
* not exist in the MBean server.
*
* @exception ServiceNotFoundException This SNMP MIB is not registered
* in the MBean server or the requested service is not supported.
*
* @since 1.5
*/
}
// First remove the reference on the old adaptor server.
//
}
// Then update the reference to the new adaptor server.
//
try {
signature));
} catch (InstanceNotFoundException e) {
} catch (ReflectionException e) {
} catch (MBeanException e) {
// Should never occur...
}
adaptorName = name;
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
* associated to the specified <CODE>name</CODE>.
*
* @param name The name of the SNMP protocol adaptor.
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
* @exception InstanceNotFoundException The SNMP protocol adaptor does
* not exist in the MBean server.
*
* @exception ServiceNotFoundException This SNMP MIB is not registered
* in the MBean server or the requested service is not supported.
*
* @since 1.5
*/
}
// First remove the reference on the old adaptor server.
//
}
// Then update the reference to the new adaptor server.
//
try {
signature));
} catch (InstanceNotFoundException e) {
} catch (ReflectionException e) {
} catch (MBeanException e) {
// Should never occur...
}
adaptorName = name;
}
/**
* Sets the reference to the SNMP protocol adaptor through which the MIB
* will be SNMP accessible and add this new MIB in the SNMP MIB handler
* associated to the specified <CODE>name</CODE>.
*
* @param name The name of the SNMP protocol adaptor.
* @param contextName The MIB context name. If null is passed, will be registered in the default context.
* @param oids The set of OIDs this agent implements.
* @exception InstanceNotFoundException The SNMP protocol adaptor does
* not exist in the MBean server.
*
* @exception ServiceNotFoundException This SNMP MIB is not registered
* in the MBean server or the requested service is not supported.
*
* @since 1.5
*/
}
// First remove the reference on the old adaptor server.
//
}
// Then update the reference to the new adaptor server.
//
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String", oids.getClass().getName()};
try {
signature));
} catch (InstanceNotFoundException e) {
} catch (ReflectionException e) {
} catch (MBeanException e) {
// Should never occur...
}
adaptorName = name;
}
/**
* Indicates whether or not the MIB module is bound to a SNMP protocol
* adaptor.
* As a reminder, only bound MIBs can be accessed through SNMP protocol
* adaptor.
*
* @return <CODE>true</CODE> if the MIB module is bound,
* <CODE>false</CODE> otherwise.
*/
public boolean getBindingState() {
return false;
else
return true;
}
/**
* Gets the MIB name.
*
* @return The MIB name.
*/
return mibName;
}
/**
* This is a factory method for creating new SnmpMibRequest objects.
* @param reqPdu The received PDU.
* @param vblist The vector of SnmpVarBind objects in which the
* MIB concerned by this request is involved.
* @param version The protocol version of the SNMP request.
* @param userData User allocated contextual data.
*
* @return A new SnmpMibRequest object.
*
* @since 1.5
**/
int version,
{
return new SnmpMibRequestImpl(null,
null,
}
/**
* This is a factory method for creating new SnmpMibRequest objects.
* @param engine The local engine.
* @param reqPdu The received pdu.
* @param vblist The vector of SnmpVarBind objects in which the
* MIB concerned by this request is involved.
* @param version The protocol version of the SNMP request.
* @param userData User allocated contextual data.
*
* @return A new SnmpMibRequest object.
*
* @since 1.5
**/
int version,
int securityLevel,
int securityModel,
byte[] contextName,
byte[] accessContextName) {
return new SnmpMibRequestImpl(engine,
}
// ---------------------------------------------------------------------
// PACKAGE METHODS
// ---------------------------------------------------------------------
/**
* Processes a <CODE>getBulk</CODE> operation using call to
* <CODE>getNext</CODE>.
* The method implements the <CODE>getBulk</CODE> operation by calling
* appropriately the <CODE>getNext</CODE> method.
*
* @param req The SnmpMibRequest containing the variable list to be
* retrieved.
*
* @param nonRepeat The number of variables, starting with the first
* variable in the variable-bindings, for which a single lexicographic
* successor is requested.
*
* @param maxRepeat The number of lexicographic successors
* requested for each of the last R variables. R is the number of
* variables following the first nonRepeat variables for which
* multiple lexicographic successors are requested.
*
* @return The variable list containing returned values.
*
* @exception SnmpStatusException An error occured during the operation.
*/
throws SnmpStatusException {
// RFC 1905, Section 4.2.3, p14
final int R = L - N ;
// Let's build the varBindList for the response pdu
//
// int errorStatus = SnmpDefinitions.snmpRspNoError ;
// int errorIndex = 0 ;
if (L != 0) {
// Non-repeaters and first row of repeaters
//
// Now the remaining repeaters
//
req.getUserData(),
req.getPrincipal(),
for (int i = 2 ; i <= M ; i++) {
}
}
}
// ---------------------------------------------------------------------
// PRIVATE METHODS
// ---------------------------------------------------------------------
/**
* This method creates a new Vector which does not contain the first
* element up to the specified limit.
*
* @param original The original vector.
* @param limit The limit.
*/
int i= limit;
// Ok the loop looks a bit strange. But in order to improve the
// perf, we try to avoid reference to the limit variable from
// within the loop ...
//
if (i >0)
continue;
}
return result;
}
// We need to duplicate the SnmpVarBind otherwise it is going
// to be overloaded by the next get Next ...
}
}
// We need to duplicate the SnmpVarBind otherwise it is going
// to be overloaded by the next get Next ...
}
}
switch(version) {
return SnmpDefinitions.snmpV1SecurityModel;
default:
return SnmpDefinitions.snmpV2SecurityModel;
}
}
// ---------------------------------------------------------------------
// PROTECTED VARIABLES
// ---------------------------------------------------------------------
/**
* The object name of the MIB.
* @serial
*/
/**
* The reference to the MBean server.
* @serial
*/
// ---------------------------------------------------------------------
// PRIVATE VARIABLES
// ---------------------------------------------------------------------
/**
* The object name of the SNMP protocol adaptor.
* @serial
*/
/**
* The reference to the SNMP stack.
*/
}