[SNMP4J] java.nio.BufferOverflowException on 64-bit Windows 2008

Frank Fock fock at agentpp.com
Wed Nov 21 23:32:17 CET 2012


Hi,

I have no information about the Oracle JDK internals.
There is no recommended Java version.

Increasing the buffer would not generally help
(especially not on the sending side and with latest
operating systems). It might help in some special
cases, but also depends on the usage pattern and
the type of bug in the Java runtime or operating system.

Best regards,
Frank



Am 21.11.2012 12:59, schrieb Baskar Bharadwaj J:
> Hi Frank,
> First of all many thanks for the direction provided by you. We were
> using JDK 7 u1 where we had the issue, & after updating to JDK
> 7 u9 we do not see the issue (or at-least the application has been
> running stable for 8 hours). We are using single instance of 'Snmp'
> where again the issue gets reproduced in JDK 7 u1.(but not in u9)
>
>  From Java release notes, I'am trying to trace which of the Java issues
> between u1 & u9 that causes this problem, but could not find anything
> very relevant. Kindly share if you are already in possesion of the
> issue number/the root cause JVM bug. (Again, this happens only on
> multi-threaded application, 64-bit processor/OS)
> Also, do you have any suggestions on the recommended Java version
> considering SNMP4j library? (i.e., works stable across 32-bit, 64-bit,
> different OS'). Though we observed in JDK 7, could the older versions
> 5/6 also be vulnerable?
>
> Alternately, will increasing the socket buffer size avoid the problem
> totally irrespective of the JDK version? Since NIO channels are being
> used inside SNMP4j, how is it recommended to increase the send buffer
> size on windows? what value may be good enough (Application may use
> upto 15 threads to send SNMP Get sub tree at a time)
>
> Thanks in advance.
>
>> Message: 5
>> Date: Tue, 20 Nov 2012 11:18:03 +0530
>> From: Baskar Bharadwaj J <baskar.jayadevan at gmail.com>
>> Subject: [SNMP4J] java.nio.BufferOverflowException on 64-bit Windows
>>          2008
>> To: snmp4j at agentpp.org
>> Message-ID:
>>          <CAFuQYgn-ueupb01TSfXHSE0=tTZvm9xZQbEgqWyzHCPPP4EOFw at mail.gmail.com>
>> Content-Type: text/plain; charset=ISO-8859-1
>>
>> Hi,
>> We get an exception in our multi-threaded application that uses SNMP4j
>> 2.0.3. Application sends get requests periodically to different agents
>> using SNMP4j, & suddenly the below exception arises (mostly between 30
>> min to 1 hr of starting the application). Once the below exception is
>> seen no further SNMP requests are getting processed (all requests fail
>> with the below exception).
>>
>> Below exception is peculiarly observed only in Windows 2008 64-bit
>> platform. Same runs well for days on Windows 7 32-bit platform.
>>
>> java.nio.BufferOverflowException
>>          at java.nio.Buffer.nextPutIndex(Unknown Source)
>>          at java.nio.HeapByteBuffer.put(Unknown Source)
>>          at org.snmp4j.asn1.BEROutputStream.write(BEROutputStream.java:63)
>>          at org.snmp4j.asn1.BER.encodeHeader(BER.java:118)
>>          at org.snmp4j.smi.Null.encodeBER(Null.java:95)
>>          at org.snmp4j.smi.VariableBinding.encodeBER(VariableBinding.java:180)
>>          at org.snmp4j.PDU.encodeBER(PDU.java:573)
>>          at org.snmp4j.mp.MPv1.prepareOutgoingMessage(MPv1.java:128)
>>          at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:472)
>>          at org.snmp4j.Snmp.sendMessage(Snmp.java:1005)
>>          at org.snmp4j.Snmp.send(Snmp.java:898)
>>          at org.snmp4j.Snmp.send(Snmp.java:878)
>>          at org.snmp4j.Snmp.send(Snmp.java:843)
>>          at org.snmp4j.Snmp.get(Snmp.java:555)
>>
>> Has anybody else come across this problem?
>>
>> Please share any pointers regarding the root cause of the observed
>> exception & possible way to resolve. Could this be an issue in
>> SNMP4j? or with the usage?
>>
>> Just to reproduce the problem, have isolated the SNMP4j usage from our
>> application & created a dummy multi-threaded application, which when
>> executed creates the problem with 30 min. Below is the source code of
>> the dummy application (always fails while encoding in Null.java,
>> line:95),
>>
>> package trial;
>> import java.io.IOException;
>> import java.util.Date;
>> import java.util.List;
>> import org.snmp4j.CommunityTarget;
>> import org.snmp4j.Snmp;
>> import org.snmp4j.mp.SnmpConstants;
>> import org.snmp4j.smi.Address;
>> import org.snmp4j.smi.GenericAddress;
>> import org.snmp4j.smi.OID;
>> import org.snmp4j.smi.OctetString;
>> import org.snmp4j.smi.VariableBinding;
>> import org.snmp4j.transport.DefaultUdpTransportMapping;
>> import org.snmp4j.util.DefaultPDUFactory;
>> import org.snmp4j.util.TreeEvent;
>> import org.snmp4j.util.TreeUtils;
>>
>> public class Trial1 {
>> public void snmpGetSubTreeMap(String strAddress, String community,
>> String strOID) {
>>
>> System.out.println("--------TIME:::::" + new Date() + " THREAD:"
>> + Thread.currentThread().getName());
>> Snmp snmp = null;
>>
>> try {
>> snmp = new Snmp(new DefaultUdpTransportMapping());
>> snmp.listen();
>> }
>> catch (IOException e) {
>> // TODO Auto-generated catch block
>> e.printStackTrace();
>> }
>>
>> try {
>> strAddress = strAddress + "/" + "161";
>> Address targetAddress = GenericAddress.parse(strAddress);
>> OctetString communityString = new OctetString(community);
>> CommunityTarget target = new CommunityTarget();
>> target.setCommunity(new OctetString(communityString));
>> target.setAddress(targetAddress);
>> target.setRetries(1);
>> target.setTimeout(1000);
>> target.setVersion(SnmpConstants.version1);
>>
>> TreeUtils tu = new TreeUtils(snmp, new DefaultPDUFactory());
>> String str = "";
>> //tu.setMaxRepetitions(10);
>>
>> List<TreeEvent> l = tu.getSubtree(target, new OID(strOID));
>> System.out.println("*_*_*_*_*_*_ TREE SIZE:" + l.size());
>>
>> if (l != null) {
>> for (TreeEvent treeEvent : l) {
>> if (treeEvent.getVariableBindings() != null) {
>> System.out.println("*_*_*_*_ TREE EVT:"+treeEvent);
>>
>> for (int i = 0; i < treeEvent.getVariableBindings().length; i++) {
>> VariableBinding vb = treeEvent.getVariableBindings()[i];
>> }
>> }
>> }
>> }
>> }
>> catch (Exception e) {
>> System.out.println("*_*_*_*_*_* EXCEPTION:::" + e);
>> e.printStackTrace();
>> }
>>
>> System.out.println("--------TIME:::::" + new Date() + " THREAD:" +
>> Thread.currentThread().getName());
>> }
>>
>> public static void main(String a[]) {
>> // new Task().start();
>> // new Task().start();
>> // new Task().start();
>> // new Task().start();
>> // new Task().start();
>> // new Task().start();
>> // new Task().start();
>> new Task().start();
>> new Task().start();
>> new Task().start();
>> new Task().start();
>> new Task().start();
>> }
>>
>> private static class Task extends Thread {
>> public void run() {
>> while (true) {
>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.10");
>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.16");
>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.5");
>>
>> try {
>> Thread.sleep(5000);
>> }
>> catch (InterruptedException e) {
>> // TODO Auto-generated catch block
>> e.printStackTrace();
>> }
>> }
>> }
>> }
>> }
>>
>> Best Regards,
>> Baskar
>>
>>
>> ------------------------------
>>
>> Message: 6
>> Date: Tue, 20 Nov 2012 08:28:46 +0100
>> From: Frank Fock <fock at agentpp.com>
>> Subject: Re: [SNMP4J] java.nio.BufferOverflowException on 64-bit
>>          Windows 2008
>> To: snmp4j at agentpp.org
>> Message-ID: <50AB312E.2000107 at agentpp.com>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> Hi,
>>
>> This seems to be a Java bug rather than related to SNMP4J.
>> What exact version are you using on the Windows 2008 64bit?
>>
>> One option might be to increase the UDP buffer on the OS level.
>> It might also be that the Windows stops processing the buffer,
>> but I guess the Java Runtime is throwing the exception
>> although the full buffer error is no longer present (they forget
>> to clear a error_no variable or something like that).
>>
>> Best regards,
>> Frank
>>
>> Am 20.11.2012 06:48, schrieb Baskar Bharadwaj J:
>>> Hi,
>>> We get an exception in our multi-threaded application that uses SNMP4j
>>> 2.0.3. Application sends get requests periodically to different agents
>>> using SNMP4j, & suddenly the below exception arises (mostly between 30
>>> min to 1 hr of starting the application). Once the below exception is
>>> seen no further SNMP requests are getting processed (all requests fail
>>> with the below exception).
>>>
>>> Below exception is peculiarly observed only in Windows 2008 64-bit
>>> platform. Same runs well for days on Windows 7 32-bit platform.
>>>
>>> java.nio.BufferOverflowException
>>>           at java.nio.Buffer.nextPutIndex(Unknown Source)
>>>           at java.nio.HeapByteBuffer.put(Unknown Source)
>>>           at org.snmp4j.asn1.BEROutputStream.write(BEROutputStream.java:63)
>>>           at org.snmp4j.asn1.BER.encodeHeader(BER.java:118)
>>>           at org.snmp4j.smi.Null.encodeBER(Null.java:95)
>>>           at org.snmp4j.smi.VariableBinding.encodeBER(VariableBinding.java:180)
>>>           at org.snmp4j.PDU.encodeBER(PDU.java:573)
>>>           at org.snmp4j.mp.MPv1.prepareOutgoingMessage(MPv1.java:128)
>>>           at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:472)
>>>           at org.snmp4j.Snmp.sendMessage(Snmp.java:1005)
>>>           at org.snmp4j.Snmp.send(Snmp.java:898)
>>>           at org.snmp4j.Snmp.send(Snmp.java:878)
>>>           at org.snmp4j.Snmp.send(Snmp.java:843)
>>>           at org.snmp4j.Snmp.get(Snmp.java:555)
>>>
>>> Has anybody else come across this problem?
>>>
>>> Please share any pointers regarding the root cause of the observed
>>> exception & possible way to resolve. Could this be an issue in
>>> OpenNMS? or with the usage?
>>>
>>> Just to reproduce the problem, have isolated the SNMP4j usage from our
>>> application & created a dummy multi-threaded application, which when
>>> executed creates the problem with 30 min. Below is the source code of
>>> the dummy application (always fails while encoding in Null.java,
>>> line:95),
>>>
>>> package trial;
>>> import java.io.IOException;
>>> import java.util.Date;
>>> import java.util.List;
>>> import org.snmp4j.CommunityTarget;
>>> import org.snmp4j.Snmp;
>>> import org.snmp4j.mp.SnmpConstants;
>>> import org.snmp4j.smi.Address;
>>> import org.snmp4j.smi.GenericAddress;
>>> import org.snmp4j.smi.OID;
>>> import org.snmp4j.smi.OctetString;
>>> import org.snmp4j.smi.VariableBinding;
>>> import org.snmp4j.transport.DefaultUdpTransportMapping;
>>> import org.snmp4j.util.DefaultPDUFactory;
>>> import org.snmp4j.util.TreeEvent;
>>> import org.snmp4j.util.TreeUtils;
>>>
>>> public class Trial1 {
>>> public void snmpGetSubTreeMap(String strAddress, String community,
>>> String strOID) {
>>>
>>> System.out.println("--------TIME:::::" + new Date() + " THREAD:"
>>> + Thread.currentThread().getName());
>>> Snmp snmp = null;
>>>
>>> try {
>>> snmp = new Snmp(new DefaultUdpTransportMapping());
>>> snmp.listen();
>>> }
>>> catch (IOException e) {
>>> // TODO Auto-generated catch block
>>> e.printStackTrace();
>>> }
>>>
>>> try {
>>> strAddress = strAddress + "/" + "161";
>>> Address targetAddress = GenericAddress.parse(strAddress);
>>> OctetString communityString = new OctetString(community);
>>> CommunityTarget target = new CommunityTarget();
>>> target.setCommunity(new OctetString(communityString));
>>> target.setAddress(targetAddress);
>>> target.setRetries(1);
>>> target.setTimeout(1000);
>>> target.setVersion(SnmpConstants.version1);
>>>
>>> TreeUtils tu = new TreeUtils(snmp, new DefaultPDUFactory());
>>> String str = "";
>>> //tu.setMaxRepetitions(10);
>>>
>>> List<TreeEvent> l = tu.getSubtree(target, new OID(strOID));
>>> System.out.println("*_*_*_*_*_*_ TREE SIZE:" + l.size());
>>>
>>> if (l != null) {
>>> for (TreeEvent treeEvent : l) {
>>> if (treeEvent.getVariableBindings() != null) {
>>> System.out.println("*_*_*_*_ TREE EVT:"+treeEvent);
>>>
>>> for (int i = 0; i < treeEvent.getVariableBindings().length; i++) {
>>> VariableBinding vb = treeEvent.getVariableBindings()[i];
>>> }
>>> }
>>> }
>>> }
>>> }
>>> catch (Exception e) {
>>> System.out.println("*_*_*_*_*_* EXCEPTION:::" + e);
>>> e.printStackTrace();
>>> }
>>>
>>> System.out.println("--------TIME:::::" + new Date() + " THREAD:" +
>>> Thread.currentThread().getName());
>>> }
>>>
>>> public static void main(String a[]) {
>>> // new Task().start();
>>> // new Task().start();
>>> // new Task().start();
>>> // new Task().start();
>>> // new Task().start();
>>> // new Task().start();
>>> // new Task().start();
>>> new Task().start();
>>> new Task().start();
>>> new Task().start();
>>> new Task().start();
>>> new Task().start();
>>> }
>>>
>>> private static class Task extends Thread {
>>> public void run() {
>>> while (true) {
>>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.10");
>>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.16");
>>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.5");
>>>
>>> try {
>>> Thread.sleep(5000);
>>> }
>>> catch (InterruptedException e) {
>>> // TODO Auto-generated catch block
>>> e.printStackTrace();
>>> }
>>> }
>>> }
>>> }
>>> }
>>>
>>> Best Regards,
>>> Baskar
>>> _______________________________________________
>>> SNMP4J mailing list
>>> SNMP4J at agentpp.org
>>> http://lists.agentpp.org/mailman/listinfo/snmp4j
>> --
>> ---
>> AGENT++
>> Maximilian-Kolbe-Str. 10
>> 73257 Koengen, Germany
>> https://agentpp.com
>> Phone: +49 7024 8688230
>> Fax:   +49 7024 8688231
>>
>>
>>
>> ------------------------------
>>
>> Message: 7
>> Date: Tue, 20 Nov 2012 08:42:45 +0100
>> From: Frank Fock <fock at agentpp.com>
>> Subject: Re: [SNMP4J] java.nio.BufferOverflowException on 64-bit
>>          Windows 2008
>> To: snmp4j at agentpp.org
>> Message-ID: <50AB3475.4080304 at agentpp.com>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> Hi,
>>
>> Another tipp:
>>
>> Use only a single Snmp instance. Otherwise you waste operating system
>> resources, because you allocate n-ports instead of one. Those ports
>> need to share the UDP buffer. As the buffer is fragmented by that, its
>> effective size will decrease significantly.
>>
>> Best regards,
>> Frank
>>
>>
>> Am 20.11.2012 08:28, schrieb Frank Fock:
>>> Hi,
>>>
>>> This seems to be a Java bug rather than related to SNMP4J.
>>> What exact version are you using on the Windows 2008 64bit?
>>>
>>> One option might be to increase the UDP buffer on the OS level.
>>> It might also be that the Windows stops processing the buffer,
>>> but I guess the Java Runtime is throwing the exception
>>> although the full buffer error is no longer present (they forget
>>> to clear a error_no variable or something like that).
>>>
>>> Best regards,
>>> Frank
>>>
>>> Am 20.11.2012 06:48, schrieb Baskar Bharadwaj J:
>>>> Hi,
>>>> We get an exception in our multi-threaded application that uses SNMP4j
>>>> 2.0.3. Application sends get requests periodically to different agents
>>>> using SNMP4j, & suddenly the below exception arises (mostly between 30
>>>> min to 1 hr of starting the application). Once the below exception is
>>>> seen no further SNMP requests are getting processed (all requests fail
>>>> with the below exception).
>>>>
>>>> Below exception is peculiarly observed only in Windows 2008 64-bit
>>>> platform. Same runs well for days on Windows 7 32-bit platform.
>>>>
>>>> java.nio.BufferOverflowException
>>>>            at java.nio.Buffer.nextPutIndex(Unknown Source)
>>>>            at java.nio.HeapByteBuffer.put(Unknown Source)
>>>>            at org.snmp4j.asn1.BEROutputStream.write(BEROutputStream.java:63)
>>>>            at org.snmp4j.asn1.BER.encodeHeader(BER.java:118)
>>>>            at org.snmp4j.smi.Null.encodeBER(Null.java:95)
>>>>            at org.snmp4j.smi.VariableBinding.encodeBER(VariableBinding.java:180)
>>>>            at org.snmp4j.PDU.encodeBER(PDU.java:573)
>>>>            at org.snmp4j.mp.MPv1.prepareOutgoingMessage(MPv1.java:128)
>>>>            at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:472)
>>>>            at org.snmp4j.Snmp.sendMessage(Snmp.java:1005)
>>>>            at org.snmp4j.Snmp.send(Snmp.java:898)
>>>>            at org.snmp4j.Snmp.send(Snmp.java:878)
>>>>            at org.snmp4j.Snmp.send(Snmp.java:843)
>>>>            at org.snmp4j.Snmp.get(Snmp.java:555)
>>>>
>>>> Has anybody else come across this problem?
>>>>
>>>> Please share any pointers regarding the root cause of the observed
>>>> exception & possible way to resolve. Could this be an issue in
>>>> OpenNMS? or with the usage?
>>>>
>>>> Just to reproduce the problem, have isolated the SNMP4j usage from our
>>>> application & created a dummy multi-threaded application, which when
>>>> executed creates the problem with 30 min. Below is the source code of
>>>> the dummy application (always fails while encoding in Null.java,
>>>> line:95),
>>>>
>>>> package trial;
>>>> import java.io.IOException;
>>>> import java.util.Date;
>>>> import java.util.List;
>>>> import org.snmp4j.CommunityTarget;
>>>> import org.snmp4j.Snmp;
>>>> import org.snmp4j.mp.SnmpConstants;
>>>> import org.snmp4j.smi.Address;
>>>> import org.snmp4j.smi.GenericAddress;
>>>> import org.snmp4j.smi.OID;
>>>> import org.snmp4j.smi.OctetString;
>>>> import org.snmp4j.smi.VariableBinding;
>>>> import org.snmp4j.transport.DefaultUdpTransportMapping;
>>>> import org.snmp4j.util.DefaultPDUFactory;
>>>> import org.snmp4j.util.TreeEvent;
>>>> import org.snmp4j.util.TreeUtils;
>>>>
>>>> public class Trial1 {
>>>> public void snmpGetSubTreeMap(String strAddress, String community,
>>>> String strOID) {
>>>>
>>>> System.out.println("--------TIME:::::" + new Date() + " THREAD:"
>>>> + Thread.currentThread().getName());
>>>> Snmp snmp = null;
>>>>
>>>> try {
>>>> snmp = new Snmp(new DefaultUdpTransportMapping());
>>>> snmp.listen();
>>>> }
>>>> catch (IOException e) {
>>>> // TODO Auto-generated catch block
>>>> e.printStackTrace();
>>>> }
>>>>
>>>> try {
>>>> strAddress = strAddress + "/" + "161";
>>>> Address targetAddress = GenericAddress.parse(strAddress);
>>>> OctetString communityString = new OctetString(community);
>>>> CommunityTarget target = new CommunityTarget();
>>>> target.setCommunity(new OctetString(communityString));
>>>> target.setAddress(targetAddress);
>>>> target.setRetries(1);
>>>> target.setTimeout(1000);
>>>> target.setVersion(SnmpConstants.version1);
>>>>
>>>> TreeUtils tu = new TreeUtils(snmp, new DefaultPDUFactory());
>>>> String str = "";
>>>> //tu.setMaxRepetitions(10);
>>>>
>>>> List<TreeEvent> l = tu.getSubtree(target, new OID(strOID));
>>>> System.out.println("*_*_*_*_*_*_ TREE SIZE:" + l.size());
>>>>
>>>> if (l != null) {
>>>> for (TreeEvent treeEvent : l) {
>>>> if (treeEvent.getVariableBindings() != null) {
>>>> System.out.println("*_*_*_*_ TREE EVT:"+treeEvent);
>>>>
>>>> for (int i = 0; i < treeEvent.getVariableBindings().length; i++) {
>>>> VariableBinding vb = treeEvent.getVariableBindings()[i];
>>>> }
>>>> }
>>>> }
>>>> }
>>>> }
>>>> catch (Exception e) {
>>>> System.out.println("*_*_*_*_*_* EXCEPTION:::" + e);
>>>> e.printStackTrace();
>>>> }
>>>>
>>>> System.out.println("--------TIME:::::" + new Date() + " THREAD:" +
>>>> Thread.currentThread().getName());
>>>> }
>>>>
>>>> public static void main(String a[]) {
>>>> // new Task().start();
>>>> // new Task().start();
>>>> // new Task().start();
>>>> // new Task().start();
>>>> // new Task().start();
>>>> // new Task().start();
>>>> // new Task().start();
>>>> new Task().start();
>>>> new Task().start();
>>>> new Task().start();
>>>> new Task().start();
>>>> new Task().start();
>>>> }
>>>>
>>>> private static class Task extends Thread {
>>>> public void run() {
>>>> while (true) {
>>>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.10");
>>>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.16");
>>>> new Trial1().snmpGetSubTreeMap("10.20.4.3", "public", ".1.3.6.1.2.1.2.2.1.5");
>>>>
>>>> try {
>>>> Thread.sleep(5000);
>>>> }
>>>> catch (InterruptedException e) {
>>>> // TODO Auto-generated catch block
>>>> e.printStackTrace();
>>>> }
>>>> }
>>>> }
>>>> }
>>>> }
>>>>
>>>> Best Regards,
>>>> Baskar
>>>> _______________________________________________
>>>> SNMP4J mailing list
>>>> SNMP4J at agentpp.org
>>>> http://lists.agentpp.org/mailman/listinfo/snmp4j
>> --
>> ---
>> AGENT++
>> Maximilian-Kolbe-Str. 10
>> 73257 Koengen, Germany
>> https://agentpp.com
>> Phone: +49 7024 8688230
>> Fax:   +49 7024 8688231
>>
>>
>>
>> ------------------------------
>>
>> _______________________________________________
>> SNMP4J mailing list
>> SNMP4J at agentpp.org
>> http://lists.agentpp.org/mailman/listinfo/snmp4j
>>
>>
>> End of SNMP4J Digest, Vol 104, Issue 3
>> **************************************
> _______________________________________________
> SNMP4J mailing list
> SNMP4J at agentpp.org
> http://lists.agentpp.org/mailman/listinfo/snmp4j

-- 
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax:   +49 7024 8688231




More information about the SNMP4J mailing list