Class IpAddressBadLengthBugAware

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, java.lang.Comparable<org.snmp4j.smi.Variable>, org.snmp4j.asn1.BERSerializable, org.snmp4j.smi.Address, org.snmp4j.smi.AssignableFromByteArray, org.snmp4j.smi.AssignableFromString, org.snmp4j.smi.Variable

    public class IpAddressBadLengthBugAware
    extends org.snmp4j.smi.IpAddress
    Author:
    Jeff Gehlbach <jeffg@opennms.org> This class was created to work around a bug in the Net-SNMP BER library that causes Net-SNMP agents prior to version 5.4.1 on 64-bit platforms to encode IPv4 addresses as 8 bytes rather than 4 bytes. SNMP4J correctly discards these representations by default. It has since been extended to substitute an IPv4 address of 0.0.0.0 when presented with a zero-length IpAddress value. This behavior has been seen from DrayTek Vigor2820 series routers. This class will be used in place of org.snmp4j.smi.IpAddress only if we call org.snmp4j.SNMP4JSettings.setExtensibilityEnabled(true) AND set the system property org.snmp4j.smisyntaxes to refer to a classpath properties resource (relative to class org.snmp4j.smi.AbstractVariable) that overrides the default mapping for BER type 64 (nominally IpAddress). See the file opennms-snmp4j-smisyntaxes.properties. The workaround for 8-bit long IPv4 addresses will be enabled only if the system property org.opennms.netmgt.snmp.workarounds.allow64BitIpAddress is set to "true". The workaround for 0-byte IPv4 addresses will be enabled only if the system property org.opennms.snmp.workarounds.allowZeroLengthIpAddress is set to "true".
    See Also:
    Serialized Form
    • Field Summary

      • Fields inherited from class org.snmp4j.smi.IpAddress

        ANY_IPADDRESS
      • Fields inherited from class org.snmp4j.smi.AbstractVariable

        SMISYNTAXES_PROPERTIES
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void decodeBER​(org.snmp4j.asn1.BERInputStream inputStream)  
      • Methods inherited from class org.snmp4j.smi.IpAddress

        clone, compareTo, encodeBER, equals, fromSubIndex, getBERLength, getInetAddress, getSyntax, hashCode, isValid, parse, parseAddress, setAddress, setInetAddress, setValue, setValue, toByteArray, toInt, toLong, toString, toSubIndex
      • Methods inherited from class org.snmp4j.smi.AbstractVariable

        createFromBER, createFromSyntax, equal, getBERPayloadLength, getSyntaxFromString, getSyntaxString, getSyntaxString, isDynamic, isException
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • IpAddressBadLengthBugAware

        public IpAddressBadLengthBugAware()
      • IpAddressBadLengthBugAware

        public IpAddressBadLengthBugAware​(java.net.InetAddress address)
      • IpAddressBadLengthBugAware

        public IpAddressBadLengthBugAware​(java.lang.String address)
    • Method Detail

      • decodeBER

        public void decodeBER​(org.snmp4j.asn1.BERInputStream inputStream)
                       throws java.io.IOException
        Specified by:
        decodeBER in interface org.snmp4j.asn1.BERSerializable
        Overrides:
        decodeBER in class org.snmp4j.smi.IpAddress
        Throws:
        java.io.IOException