/*
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* 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.
*/
package com.sun.jmx.snmp.agent;
// java imports
//
import java.io.Serializable;
import java.util.Vector;
import java.util.Enumeration;
// jmx imports
//
import javax.management.MBeanServer;
import javax.management.MBeanRegistration;
import javax.management.ObjectName;
import javax.management.InstanceNotFoundException;
import javax.management.ServiceNotFoundException;
import javax.management.ReflectionException;
import javax.management.MBeanException;
import com.sun.jmx.snmp.SnmpVarBind;
import com.sun.jmx.snmp.SnmpDefinitions;
import com.sun.jmx.snmp.SnmpStatusException;
import com.sun.jmx.snmp.SnmpPdu;
import com.sun.jmx.snmp.SnmpOid;
import com.sun.jmx.snmp.SnmpEngine;
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.
This API is a Sun Microsystems internal API and is subject
to change without notice.
/**
* 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
implements SnmpMibAgentMBean, MBeanRegistration, Serializable {
Default constructor.
/**
* Default constructor.
*/
public SnmpMibAgent() {
}
// ---------------------------------------------------------------------
// PUBLIC METHODS
//----------------------------------------------------------------------
Initializes the MIB (with no registration of the MBeans into the
MBean server).
Throws: - IllegalAccessException – The MIB can not be initialized.
/**
* Initializes the MIB (with no registration of the MBeans into the
* MBean server).
*
* @exception IllegalAccessException The MIB can not be initialized.
*/
public abstract void init() throws IllegalAccessException;
Initializes the MIB but each single MBean representing the MIB
is inserted into the MBean server.
Params: - server – The MBean server to register the service with.
- name – The object name.
Throws: Returns: The name of the SNMP MIB registered.
/**
* 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
*/
@Override
public abstract ObjectName preRegister(MBeanServer server,
ObjectName name)
throws java.lang.Exception;
Not used in this context.
/**
* Not used in this context.
*/
@Override
public void postRegister (Boolean registrationDone) {
}
Not used in this context.
/**
* Not used in this context.
*/
@Override
public void preDeregister() throws java.lang.Exception {
}
Not used in this context.
/**
* Not used in this context.
*/
@Override
public void postDeregister() {
}
Processes a get
operation.
This method must update the SnmpVarBinds contained in the
SnmpMibRequest
req parameter.
Params: - req – The SnmpMibRequest object holding the list of variable to
be retrieved. This list is composed of
SnmpVarBind
objects.
Throws: - SnmpStatusException – An error occurred during the operation.
/**
* 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 occurred during the operation.
*/
@Override
public abstract void get(SnmpMibRequest req)
throws SnmpStatusException;
Processes a getNext
operation.
This method must update the SnmpVarBinds contained in the
SnmpMibRequest
req parameter.
Params: - req – The SnmpMibRequest object holding the list of
OIDs from which the next variables should be retrieved.
This list is composed of
SnmpVarBind
objects.
Throws: - SnmpStatusException – An error occurred during the operation.
/**
* 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 occurred during the operation.
*/
@Override
public abstract void getNext(SnmpMibRequest req)
throws SnmpStatusException;
Processes a getBulk
operation.
This method must update the SnmpVarBinds contained in the
SnmpMibRequest
req parameter.
Params: - req – The SnmpMibRequest object holding the list of variable to
be retrieved. This list is composed of
SnmpVarBind
objects. - nonRepeat – The number of variables, starting with the first
variable in the variable-bindings, for which a single
lexicographic successor is requested.
- 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.
Throws: - SnmpStatusException – An error occurred during the operation.
/**
* 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 occurred during the operation.
*/
@Override
public abstract void getBulk(SnmpMibRequest req, int nonRepeat,
int maxRepeat)
throws SnmpStatusException;
Processes a set
operation.
This method must update the SnmpVarBinds contained in the
SnmpMibRequest
req parameter.
This method is called during the second phase of the SET two-phase
commit.
Params: - req – The SnmpMibRequest object holding the list of variable to
be set. This list is composed of
SnmpVarBind
objects.
Throws: - SnmpStatusException – An error occurred 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
check(SnmpMibRequest)
method instead.
/**
* 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 occurred 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.
*/
@Override
public abstract void set(SnmpMibRequest req)
throws SnmpStatusException;
Checks if a set
operation can be performed.
If the operation can not be performed, the method should throw an
SnmpStatusException
.
This method is called during the first phase of the SET two-phase
commit.
Params: - req – The SnmpMibRequest object holding the list of variable to
be set. This list is composed of
SnmpVarBind
objects.
Throws: - SnmpStatusException – The
set
operation
cannot be performed.
/**
* 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.
*/
@Override
public abstract void check(SnmpMibRequest req)
throws SnmpStatusException;
Gets the root object identifier of the MIB.
The root object identifier is the object identifier uniquely
identifying the MIB.
Returns: The root object identifier.
/**
* 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.
Returns: The MBean server or null if the MIB is not registered in any
MBean server.
/**
* 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.
*/
@Override
public MBeanServer getMBeanServer() {
return server;
}
Gets the reference to the SNMP protocol adaptor to which the MIB is
bound.
Returns: The SNMP MIB handler.
/**
* Gets the reference to the SNMP protocol adaptor to which the MIB is
* bound.
*
* @return The SNMP MIB handler.
*/
@Override
public SnmpMibHandler getSnmpAdaptor() {
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.
Params: - 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.
*
* @param stack The SNMP MIB handler.
*/
@Override
public void setSnmpAdaptor(SnmpMibHandler stack) {
if (adaptor != null) {
adaptor.removeMib(this);
}
adaptor = stack;
if (adaptor != null) {
adaptor.addMib(this);
}
}
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.
Params: - stack – The SNMP MIB handler.
- 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 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
*/
@Override
public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids) {
if (adaptor != null) {
adaptor.removeMib(this);
}
adaptor = stack;
if (adaptor != null) {
adaptor.addMib(this, oids);
}
}
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.
Params: - stack – The SNMP MIB handler.
- contextName – The MIB context name. If null is passed, will be registered in the default context.
Throws: - 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.
*
* @exception IllegalArgumentException If the parameter is null.
*
* @since 1.5
*/
@Override
public void setSnmpAdaptor(SnmpMibHandler stack, String contextName) {
if (adaptor != null) {
adaptor.removeMib(this, contextName);
}
adaptor = stack;
if (adaptor != null) {
adaptor.addMib(this, contextName);
}
}
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.
Params: - stack – The SNMP MIB handler.
- contextName – The MIB context name. If null is passed, will be registered in the default context.
- oids – The set of OIDs this agent implements.
Throws: - 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
*/
@Override
public void setSnmpAdaptor(SnmpMibHandler stack,
String contextName,
SnmpOid[] oids) {
if (adaptor != null) {
adaptor.removeMib(this, contextName);
}
adaptor = stack;
if (adaptor != null) {
adaptor.addMib(this, contextName, oids);
}
}
Gets the object name of the SNMP protocol adaptor to which the MIB
is bound.
Returns: The name of the SNMP protocol adaptor.
/**
* Gets the object name of the SNMP protocol adaptor to which the MIB
* is bound.
*
* @return The name of the SNMP protocol adaptor.
*/
@Override
public ObjectName getSnmpAdaptorName() {
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 name
.
Params: - name – The name of the SNMP protocol adaptor.
Throws: - InstanceNotFoundException – The SNMP protocol adaptor does
not exist in the MBean server.
- ServiceNotFoundException – This SNMP MIB is not registered
in the MBean server or the requested service is not supported.
/**
* 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.
*/
@Override
public void setSnmpAdaptorName(ObjectName name)
throws InstanceNotFoundException, ServiceNotFoundException {
if (server == null) {
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
}
// First remove the reference on the old adaptor server.
//
if (adaptor != null) {
adaptor.removeMib(this);
}
// Then update the reference to the new adaptor server.
//
Object[] params = {this};
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent"};
try {
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
signature));
} catch (InstanceNotFoundException e) {
throw new InstanceNotFoundException(name.toString());
} catch (ReflectionException e) {
throw new ServiceNotFoundException(name.toString());
} 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 name
.
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.
Params: - name – The name of the SNMP protocol adaptor.
- oids – The set of OIDs this agent implements.
Throws: - InstanceNotFoundException – The SNMP protocol adaptor does
not exist in the MBean server.
- ServiceNotFoundException – This SNMP MIB is not registered
in the MBean server or the requested service is not supported.
Since: 1.5
/**
* 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
*/
@Override
public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
throws InstanceNotFoundException, ServiceNotFoundException {
if (server == null) {
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
}
// First remove the reference on the old adaptor server.
//
if (adaptor != null) {
adaptor.removeMib(this);
}
// Then update the reference to the new adaptor server.
//
Object[] params = {this, oids};
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent",
oids.getClass().getName()};
try {
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
signature));
} catch (InstanceNotFoundException e) {
throw new InstanceNotFoundException(name.toString());
} catch (ReflectionException e) {
throw new ServiceNotFoundException(name.toString());
} 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 name
.
Params: - name – The name of the SNMP protocol adaptor.
- contextName – The MIB context name. If null is passed, will be registered in the default context.
Throws: - InstanceNotFoundException – The SNMP protocol adaptor does
not exist in the MBean server.
- ServiceNotFoundException – This SNMP MIB is not registered
in the MBean server or the requested service is not supported.
Since: 1.5
/**
* 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
*/
@Override
public void setSnmpAdaptorName(ObjectName name, String contextName)
throws InstanceNotFoundException, ServiceNotFoundException {
if (server == null) {
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
}
// First remove the reference on the old adaptor server.
//
if (adaptor != null) {
adaptor.removeMib(this, contextName);
}
// Then update the reference to the new adaptor server.
//
Object[] params = {this, contextName};
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String"};
try {
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
signature));
} catch (InstanceNotFoundException e) {
throw new InstanceNotFoundException(name.toString());
} catch (ReflectionException e) {
throw new ServiceNotFoundException(name.toString());
} 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 name
.
Params: - name – The name of the SNMP protocol adaptor.
- contextName – The MIB context name. If null is passed, will be registered in the default context.
- oids – The set of OIDs this agent implements.
Throws: - InstanceNotFoundException – The SNMP protocol adaptor does
not exist in the MBean server.
- ServiceNotFoundException – This SNMP MIB is not registered
in the MBean server or the requested service is not supported.
Since: 1.5
/**
* 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
*/
@Override
public void setSnmpAdaptorName(ObjectName name,
String contextName, SnmpOid[] oids)
throws InstanceNotFoundException, ServiceNotFoundException {
if (server == null) {
throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
}
// First remove the reference on the old adaptor server.
//
if (adaptor != null) {
adaptor.removeMib(this, contextName);
}
// Then update the reference to the new adaptor server.
//
Object[] params = {this, contextName, oids};
String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String", oids.getClass().getName()};
try {
adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
signature));
} catch (InstanceNotFoundException e) {
throw new InstanceNotFoundException(name.toString());
} catch (ReflectionException e) {
throw new ServiceNotFoundException(name.toString());
} 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.
Returns: true
if the MIB module is bound,
false
otherwise.
/**
* 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.
*/
@Override
public boolean getBindingState() {
if (adaptor == null)
return false;
else
return true;
}
Gets the MIB name.
Returns: The MIB name.
/**
* Gets the MIB name.
*
* @return The MIB name.
*/
@Override
public String getMibName() {
return mibName;
}
This is a factory method for creating new SnmpMibRequest objects.
Params: - reqPdu – The received PDU.
- vblist – The vector of SnmpVarBind objects in which the
MIB concerned by this request is involved.
- version – The protocol version of the SNMP request.
- userData – User allocated contextual data.
Returns: A new SnmpMibRequest object. Since: 1.5
/**
* 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
**/
public static SnmpMibRequest newMibRequest(SnmpPdu reqPdu,
Vector<SnmpVarBind> vblist,
int version,
Object userData)
{
return new SnmpMibRequestImpl(null,
reqPdu,
vblist,
version,
userData,
null,
SnmpDefinitions.noAuthNoPriv,
getSecurityModel(version),
null,null);
}
This is a factory method for creating new SnmpMibRequest objects.
Params: - engine – The local engine.
- reqPdu – The received pdu.
- vblist – The vector of SnmpVarBind objects in which the
MIB concerned by this request is involved.
- version – The protocol version of the SNMP request.
- userData – User allocated contextual data.
Returns: A new SnmpMibRequest object. Since: 1.5
/**
* 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
**/
public static SnmpMibRequest newMibRequest(SnmpEngine engine,
SnmpPdu reqPdu,
Vector<SnmpVarBind> vblist,
int version,
Object userData,
String principal,
int securityLevel,
int securityModel,
byte[] contextName,
byte[] accessContextName) {
return new SnmpMibRequestImpl(engine,
reqPdu,
vblist,
version,
userData,
principal,
securityLevel,
securityModel,
contextName,
accessContextName);
}
// ---------------------------------------------------------------------
// PACKAGE METHODS
// ---------------------------------------------------------------------
Processes a getBulk
operation using call to
getNext
.
The method implements the getBulk
operation by calling
appropriately the getNext
method.
Params: - req – The SnmpMibRequest containing the variable list to be
retrieved.
- nonRepeat – The number of variables, starting with the first
variable in the variable-bindings, for which a single lexicographic
successor is requested.
- 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.
Throws: - SnmpStatusException – An error occurred during the operation.
Returns: The variable list containing returned values.
/**
* 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 occurred during the operation.
*/
void getBulkWithGetNext(SnmpMibRequest req, int nonRepeat, int maxRepeat)
throws SnmpStatusException {
final Vector<SnmpVarBind> list = req.getSubList();
// RFC 1905, Section 4.2.3, p14
final int L = list.size() ;
final int N = Math.max(Math.min(nonRepeat, L), 0) ;
final int M = Math.max(maxRepeat, 0) ;
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
//
getNext(req);
// Now the remaining repeaters
//
Vector<SnmpVarBind> repeaters= splitFrom(list, N);
SnmpMibRequestImpl repeatedReq =
new SnmpMibRequestImpl(req.getEngine(),
req.getPdu(),
repeaters,
SnmpDefinitions.snmpVersionTwo,
req.getUserData(),
req.getPrincipal(),
req.getSecurityLevel(),
req.getSecurityModel(),
req.getContextName(),
req.getAccessContextName());
for (int i = 2 ; i <= M ; i++) {
getNext(repeatedReq);
concatVector(req, repeaters);
}
}
}
// ---------------------------------------------------------------------
// PRIVATE METHODS
// ---------------------------------------------------------------------
This method creates a new Vector which does not contain the first
element up to the specified limit.
Params: - original – The original vector.
- limit – The limit.
/**
* 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.
*/
private Vector<SnmpVarBind> splitFrom(Vector<SnmpVarBind> original, int limit) {
int max= original.size();
Vector<SnmpVarBind> result= new Vector<>(max - 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 ...
//
for(Enumeration<SnmpVarBind> e= original.elements(); e.hasMoreElements(); --i) {
SnmpVarBind var= e.nextElement();
if (i >0)
continue;
result.addElement(new SnmpVarBind(var.oid, var.value));
}
return result;
}
private void concatVector(SnmpMibRequest req, Vector<SnmpVarBind> source) {
for(Enumeration<SnmpVarBind> e= source.elements(); e.hasMoreElements(); ) {
SnmpVarBind var= e.nextElement();
// We need to duplicate the SnmpVarBind otherwise it is going
// to be overloaded by the next get Next ...
req.addVarBind(new SnmpVarBind(var.oid, var.value));
}
}
private static int getSecurityModel(int version) {
switch(version) {
case SnmpDefinitions.snmpVersionOne:
return SnmpDefinitions.snmpV1SecurityModel;
default:
return SnmpDefinitions.snmpV2SecurityModel;
}
}
// ---------------------------------------------------------------------
// PROTECTED VARIABLES
// ---------------------------------------------------------------------
The object name of the MIB.
@serial
/**
* The object name of the MIB.
* @serial
*/
protected String mibName;
The reference to the MBean server.
@serial
/**
* The reference to the MBean server.
* @serial
*/
protected MBeanServer server;
// ---------------------------------------------------------------------
// PRIVATE VARIABLES
// ---------------------------------------------------------------------
The object name of the SNMP protocol adaptor.
@serial
/**
* The object name of the SNMP protocol adaptor.
* @serial
*/
private ObjectName adaptorName;
The reference to the SNMP stack.
/**
* The reference to the SNMP stack.
*/
private transient SnmpMibHandler adaptor;
}