diff -bur opennms-1.2.0-1/source/src/services/org/opennms/netmgt/poller/monitors/SnmpMonitor.java opennms-1.2.0-1-ww1/source/src/services/org/opennms/netmgt/poller/monitors/SnmpMonitor.java --- opennms-1.2.0-1/source/src/services/org/opennms/netmgt/poller/monitors/SnmpMonitor.java 2005-02-12 04:16:16.000000000 +0100 +++ opennms-1.2.0-1-ww1/source/src/services/org/opennms/netmgt/poller/monitors/SnmpMonitor.java 2005-02-23 15:11:44.761824008 +0100 @@ -41,6 +41,8 @@ package org.opennms.netmgt.poller.monitors; import java.io.IOException; +import java.lang.Class; +import java.lang.reflect.Field; import java.lang.reflect.UndeclaredThrowableException; import java.math.BigInteger; import java.net.InetAddress; @@ -96,6 +98,11 @@ private static int DEFAULT_PORT = 161; /** + * Default pdutype to use in requests + */ + private static String DEFAULT_PDUTYPE = "GETNEXT"; + + /** * Default object to collect if "oid" property not available. */ private static final String DEFAULT_OBJECT_IDENTIFIER = ".1.3.6.1.2.1.1.2"; // MIB-II @@ -265,6 +272,7 @@ String oid = ParameterMap.getKeyedString(parameters, "oid", DEFAULT_OBJECT_IDENTIFIER); String operator = ParameterMap.getKeyedString(parameters, "operator", null); String operand = ParameterMap.getKeyedString(parameters, "operand", null); + String pdutype = ParameterMap.getKeyedString(parameters, "pdutype", DEFAULT_PDUTYPE); // set timeout and retries on SNMP peer object // @@ -272,7 +280,7 @@ peer.setRetries(retries); if (log.isDebugEnabled()) - log.debug("poll: service= SNMP address= " + ipaddr.getHostAddress() + " port= " + port + " oid=" + oid + " timeout= " + timeout + " retries= " + retries + " operator = " + operator + " operand = " + operand); + log.debug("poll: service= SNMP address= " + ipaddr.getHostAddress() + " port= " + port + " oid=" + oid + " timeout= " + timeout + " retries= " + retries + " operator = " + operator + " operand = " + operand + " pdutype=" + pdutype); // Establish SNMP session with interface // @@ -302,11 +310,21 @@ // retrieval is completed...wrapping in a try/finally block // try { - // Create SNMP response handler, send SNMP GetNext request and + // Create SNMP response handler, send SNMP pdutype request and // block waiting for response. // SnmpResponseHandler handler = new SnmpResponseHandler(); - SnmpPduPacket out = new SnmpPduRequest(SnmpPduPacket.GETNEXT, new SnmpVarBind[] { new SnmpVarBind(new SnmpObjectId(oid)) }); + Class c = Class.forName("org.opennms.protocols.snmp.SnmpPduPacket"); + Field SnmpField = null; + try { + SnmpField = c.getField(pdutype); + } catch (NoSuchFieldException e) { + if (log.isEnabledFor(Priority.ERROR)) { + log.error("poll: an error occured using the pdutype " + pdutype + e.getMessage()); + } + status = SERVICE_UNAVAILABLE; + } + SnmpPduPacket out = new SnmpPduRequest(SnmpField.getInt(c), new SnmpVarBind[] { new SnmpVarBind(new SnmpObjectId(oid)) }); synchronized (handler) { session.send(out, handler);