| The Perl5 'SNMP' Extension Module v4.2.0 |
| for the Net-SNMP Library |
| G.S. Marzot (gmarzot@nortelnetworks.com) |
| |
| Contents: |
| Introduction: |
| Availability: |
| Contact: |
| Supported Platforms: |
| Release Notes: |
| Installation: |
| Operational Description: |
| Trouble Shooting: |
| Acknowledgments: |
| History: |
| Copyright: |
| |
| Introduction: |
| |
| This is the Perl5 'SNMP' extension module. The SNMP module provides a |
| full featured, tri-lingual SNMP (SNMPv3, SNMPv2c, SNMPv1) API. The |
| SNMP module also provides an interface to the SMI MIB parse-tree for |
| run-time access to parsed MIB data. The SNMP module internals rely on |
| the Net-SNMP toolkit library (previously known as ucd-snmp). For |
| information on the Net-SNMP library see the documentation provided |
| with the Net-SNMP distribution or the project web page available on |
| 'Source Forge': |
| |
| http://sourceforge.net/projects/net-snmp |
| |
| Availability: |
| |
| The most recent release of the Perl5 SNMP module can be found bundled |
| with the latest Net-SNMP distibution available from: |
| http://sourceforge.net/projects/net-snmp |
| |
| (Note: The perl SNMP distribution obtained this way has the highest |
| chance of being up to date and compatible with the Net-SNMP version |
| with which it is bundled.) |
| |
| A seperately bundled package of the SNMP module can be obtained from CPAN. |
| |
| Development and older releases may be found at the following FTP site: |
| ftp://ftp-east.baynetworks.com/netman/snmp/perl5 |
| |
| (Note: In previous releases this module was compatible with the CMU |
| SNMP library. Starting with Perl5/SNMP-1.7 this module will *only* |
| work with the Net-SNMP (aka ucd-snmp) library due to dependence on new |
| features) |
| |
| Contact: |
| the following forums may be helpful: |
| |
| comp.lang.perl.modules |
| net-snmp-coders@lists.sourceforge.net mail list |
| (see http://sourceforge.net/projects/net-snmp to subscribe) |
| gmarzot@nortelnetworks.com (last resort) |
| |
| Supported Platforms: |
| Linux 1.2.x, 2.x |
| Solaris 2.x |
| Many other UNIX variants |
| Win9x/NT |
| |
| Release Notes: |
| |
| SNMP module version 4.2.0 is being developed against NET-SNMP-4.2.0 |
| see http://sourceforge.net/projects/net-snmp for details. |
| |
| Compatibility with earlier or later versions of Net-SNMP or UCD-SNMP |
| is not guaranteed due to the dynamic nature of open software |
| development :). |
| |
| the previous stable release is SNMP-3.1.0 and ucd-snmp-4.1.2. |
| |
| Yes, I skipped some versions, do not be alarmed. |
| |
| KNOWN BUGS: |
| |
| (none?) |
| |
| Installation: |
| |
| Build and install the Net-SNMP package - see Net-SNMP README and |
| INSTALL docs. |
| |
| (Note: To ensure that any previous Net-SNMP, ucd-snmp or cmu snmp |
| installation's library or headers are not used by mistake, use the |
| -NET-SNMP-PATH directive to explicitly set the default path) |
| |
| Unix: |
| |
| perl Makefile.PL [-NET-SNMP-PATH=/usr/local] |
| make |
| make test |
| make install |
| |
| Win32: |
| |
| This package only builds on NT as far as I know. Thes directions are |
| fo VC++ 5.0-6.0 (I will be interested to hear of success with cygwin). |
| |
| First run vcvars32.bat |
| |
| for ActiveState Perl (tested with AS Perl5.005_03 (515)) |
| |
| perl Makefile.PL CAPI=TRUE [-NET-SNMP-PATH=/usr] |
| nmake |
| nmake test |
| nmake install |
| |
| OpenSSL note: see the net-snmp/README.win32 to compile libsnmp with |
| libeay32 and see that libeay.lib is in usr\lib |
| |
| for the older perl5.004_02 distribution by gsarathy |
| |
| perl Makefile.PL |
| nmake |
| nmake test |
| nmake install |
| |
| |
| Win32 Testing Note: |
| |
| 'nmake test' requires that an agent(snmpd) and trap receiver (snmptrapd) |
| are running. Before running 'nmake test' start these servers using the |
| config file provided (t/snmpd.conf). You will be asked for the test host |
| and port numbers by Makefile.PL |
| |
| Operational Description: |
| |
| The basic operations of the SNMP protocol are provided by this module |
| through an object oriented interface for modularity and ease of use. |
| The primary class is SNMP::Session which encapsulates the persistent |
| aspects of a connection between the management application and the |
| managed agent. Internally the class is implemented as a blessed hash |
| reference. This class supplies 'get', 'getnext', 'set', 'fget', and |
| 'fgetnext' and other method calls. The methods take a variety of input |
| argument formats and support both synchronous and asynchronous |
| operation through a polymorphic API (i.e., method behaviour varies |
| dependent on args passed - see below). |
| |
| A description of the fields which can be specified when an |
| SNMP::Session object is created follows: |
| |
| SNMP::Session |
| public: |
| DestHost - default 'localhost', hostname or ip addr of SNMP agent |
| Community - default 'public', SNMP community string (used for both R/W) |
| Version - default '1', [2 (same as 2c), 2c, 3] |
| RemotePort - default '161', allow remote UDP port to be overridden |
| Timeout - default '1000000', micro-seconds before retry |
| Retries - default '5', retries before failure |
| RetryNoSuch - default '0', if enabled NOSUCH errors in 'get' pdus will |
| be repaired, removing the varbind in error, and resent - |
| undef will be returned for all NOSUCH varbinds, when set |
| to '0' this feature is disabled and the entire get request |
| will fail on any NOSUCH error (applies to v1 only) |
| SecName - default 'initial', security name (v3) |
| SecLevel - default 'noAuthNoPriv', security level [noAuthNoPriv, |
| authNoPriv, authPriv] (v3) |
| SecEngineId - default <none>, security engineID, will be probed if not |
| supplied (v3) |
| ContextEngineId - default <SecEngineId>, context engineID, will be |
| probed if not supplied (v3) |
| Context - default '', context name (v3) |
| AuthProto - default 'MD5', authentication protocol [MD5, SHA] (v3) |
| AuthPass - default <none>, authentication passphrase |
| PrivProto - default 'DES', privacy protocol [DES] (v3) |
| PrivPass - default <none>, privacy passphrase (v3) |
| VarFormats - default 'undef', used by 'fget[next]', holds an hash |
| reference of output value formatters, (e.g., {<obj> => |
| <sub-ref>, ... }, <obj> must match the <obj> and format |
| used in the get operation. A special <obj>, '*', may be |
| used to apply all <obj>s, the supplied sub is called to |
| translate the value to a new format. The sub is called |
| passing the Varbind as the arg |
| TypeFormats - default 'undef', used by 'fget[next]', holds an hash |
| reference of output value formatters, (e.g., {<type> => |
| <sub-ref>, ... }, the supplied sub is called to translate |
| the value to a new format, unless a VarFormat mathces first |
| (e.g., $session->{TypeFormats}{INTEGER} = \&mapEnum(); |
| although this can be done more efficiently by enabling |
| $SNMP::use_enums or session creation param 'UseEnums') |
| UseLongNames - defaults to the value of SNMP::use_long_names at time |
| of session creation. set to non-zero to have <tags> |
| for 'getnext' methods generated preferring longer Mib name |
| convention (e.g., system.sysDescr vs just sysDescr) |
| UseSprintValue - defaults to the value of SNMP::use_sprint_value at time |
| of session creation. set to non-zero to have return values |
| for 'get' and 'getnext' methods formatted with the libraries |
| sprint_value function. This will result in certain data types |
| being returned in non-canonical format Note: values returned |
| with this option set may not be appropriate for 'set' operations |
| (see discussion of value formats in <vars> description section) |
| UseEnums - defaults to the value of SNMP::use_enums at time of session |
| creation. set to non-zero to have integer return values |
| converted to enumeration identifiers if possible, these values |
| will also be acceptable when supplied to 'set' operations |
| UseNumeric - defaults to the value of SNMP::use_numeric at time of session |
| creation. set to non-zero to have <tags> returned by the 'get' |
| methods untranslated (i.e. dotted-decimal). Setting the |
| UseLongNames value for the session is highly recommended. |
| ErrorStr - read-only, holds the error message assoc. w/ last request |
| ErrorNum - read-only, holds the snmp_err or status of last request |
| ErrorInd - read-only, holds the snmp_err_index when appropriate |
| |
| private: |
| DestAddr - internal field used to hold the translated DestHost field |
| SessPtr - internal field used to cache a created session structure |
| |
| methods: |
| new(<fields>) - Constructs a new SNMP::Session object. The fields are |
| passed to the constructor as a hash list |
| (e.g., $session = new SNMP::Session(DestHost => 'foo', |
| Community => 'private');), returns an object reference |
| or undef in case of error. |
| update(<fields>)- Updates the SNMP::Session object with the values fields |
| passed in as a hash list (similar to new(<fields>)) |
| (WARNING! not fully implemented) |
| get(<vars>[,<callback>]) |
| - do SNMP GET, multiple <vars> formats accepted. |
| for synchronous operation <vars> will be updated |
| with value(s) and type(s) and will also return |
| retrieved value(s). If <callback> supplied method |
| will operate asynchronously |
| fget(<vars>[,<callback>]) |
| - do SNMP GET like 'get' and format the values according |
| the handlers specified in $sess->{VarFormats} and |
| $sess->{TypeFormats}. Async *not supported* |
| getnext(<vars>[,<callback>]) |
| - do SNMP GETNEXT, multiple <vars> formats accepted, |
| returns retrieved value(s), <vars> passed as arguments are |
| updated to indicate next lexicographical <obj>,<iid>,<val>, |
| and <type> Note: simple string <vars>,(e.g., 'sysDescr.0') |
| form is not updated. If <callback> supplied method |
| will operate asynchronously |
| fgetnext(<vars>[,<callback>]) |
| - do SNMP GETNEXT like getnext and format the values according |
| the handlers specified in $sess->{VarFormats} and |
| $sess->{TypeFormats}. Async *not supported* |
| set(<vars>[,<callback>]) |
| - do SNMP SET, multiple <vars> formats accepted. |
| the value field in all <vars> formats must be in a canonical |
| format (i.e., well known format) to ensure unambiguous |
| translation to SNMP MIB data value (see discussion of |
| canonical value format <vars> description section), |
| returns true on success or undef on error. If <callback> |
| supplied method will operate asynchronously |
| getbulk(<non-repeaters>, <max-repeaters>, <vars> [, <callback>]) |
| - do an SNMP GETBULK, from the list of Varbinds, the single |
| next lexico instance is fetched for the first n Varbinds |
| as defined by <non-repeaters>. For remaining Varbinds, |
| the m lexico instances are retrieved each of the remaining |
| Varbinds, where m is <max-repeaters>. |
| bulkwalk(<non-repeaters>, <max-repeaters>, <vars> [, <callback>]) |
| - do an "SNMP bulkwalk" on the given variables. Bulkwalk is |
| implemented by sending an SNMP GETBULK request to fetch the |
| variables. Objects are copied to the return list until the |
| sub-tree is exited. If the request is not completed at the |
| end of a packet, a new request is created, starting where |
| the previous packet left off. This implementation is able |
| to handle multiple repeated vars, as well as non-repeaters. |
| Returns a list (or, in scalar context, a reference to a |
| list) of arrays of VarBinds. The VarBinds consist of the |
| responses for each requested variable. bulkwalk() leaves |
| the original Varbinds list intact to facilitate querying |
| of multiple devices. |
| |
| SNMP::TrapSession - supports all applicable fields from SNMP::Session |
| (see above) |
| methods: |
| new(<fields>) - Constructs a new SNMP::TrapSession object. The fields are |
| passed to the constructor as a hash list |
| (e.g., $trapsess = new SNMP::Session(DestHost => 'foo', |
| Community => 'private');), returns an object reference |
| or undef in case of error. |
| trap(enterprise, agent, generic, specific, uptime, <vars>) |
| $sess->trap(enterprise=>'.1.3.6.1.4.1.2021', # or 'ucdavis' [default] |
| agent => '127.0.0.1', # or 'localhost',[dflt 1st intf on host] |
| generic => specific, # can be omitted if 'specific' supplied |
| specific => 5, # can be omitted if 'generic' supplied |
| uptime => 1234, # dflt to localhost uptime (0 on win32) |
| [[ifIndex, 1, 1],[sysLocation, 0, "here"]]); # optional vars |
| # always last |
| or v2 format |
| trap(oid, uptime, <vars>) |
| $sess->trap(oid => 'snmpRisingAlarm', |
| uptime => 1234, |
| [[ifIndex, 1, 1],[sysLocation, 0, "here"]]); # optional vars |
| # always last |
| |
| |
| Acceptable variable formats: |
| <vars> may be one of the following forms: |
| |
| SNMP::VarList: - represents an array of MIB objects to get or set, |
| implemented as a blessed reference to an array of |
| SNMP::Varbinds, (e.g., [<varbind1>, <varbind2>, ...]) |
| |
| SNMP::Varbind: - represents a single MIB object to get or set, implemented as |
| a blessed reference to a 4 element array; |
| [<obj>, <iid>, <val>, <type>]. |
| <obj> - one of the following forms: |
| 1) leaf identifier (e.g., 'sysDescr') assumed to be |
| unique for practical purposes |
| 2) fully qualified identifier (e.g., |
| '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr') |
| 3) fully qualified, dotted-decimal, numeric OID (e.g., |
| '.1.3.6.1.2.1.1.1') |
| <iid> - the dotted-decimal, instance identifier. for |
| scalar MIB objects use '0' |
| <val> - the SNMP data value retrieved from or being set |
| to the agents MIB. for (f)get(next) operations |
| <val> may have a variety of formats as determined by |
| session and package settings. However for set |
| operations the <val> format must be canonical to |
| ensure unambiguous translation. The canonical forms |
| are as follows: |
| OBJECTID => dotted-decimal (e.g., .1.3.6.1.2.1.1.1) |
| OCTETSTR => perl scalar containing octets, |
| INTEGER => decimal signed integer (or enum), |
| NETADDR => dotted-decimal, |
| IPADDR => dotted-decimal, |
| COUNTER => decimal unsigned integer, |
| COUNTER64 => decimal unsigned integer, |
| GAUGE, => decimal unsigned integer, |
| UINTEGER, => decimal unsigned integer, |
| TICKS, => decimal unsigned integer, |
| OPAQUE => perl scalar containing octets, |
| NULL, => perl scalar containing nothing, |
| |
| |
| <type> - SNMP data type (see list above), this field is |
| populated by 'get' and 'getnext' operations. In |
| some cases the programmer needs to populate this |
| field when passing to a 'set' operation. this |
| field need not be supplied when the attribute |
| indicated by <tag> is already described by loaded |
| Mib modules. for 'set's, if a numeric OID is used |
| and the object is not currently in the loaded Mib, |
| the <type> field must be supplied |
| |
| simple string - light weight form of <var> used to 'set' or 'get' a |
| single attribute without constructing an SNMP::Varbind. |
| stored in a perl scalar, has the form '<tag>.<iid>', |
| (e.g., 'sysDescr.0'). for 'set' operations the value |
| is passed as a second arg. Note: This argument form is |
| not updated in get[next] operations as are the other forms. |
| |
| Acceptable callback formats: |
| <callback> may be one of the following forms: |
| |
| without arguments: |
| \&subname |
| sub { ... } |
| or with arguments: |
| [ \&subname, $arg1, ... ] |
| [ sub { ... }, $arg1, ... ] |
| [ "method", $obj, $arg1, ... ] |
| |
| callback will be called when response is received or timeout |
| occurs. the last argument passed to callback will be a |
| SNMP::VarList reference. In case of timeout the last argument |
| will be undef. |
| |
| SNMP package variables and functions: |
| |
| $SNMP::VERSION - the current version specifier (e.g., 3.1.0) |
| |
| $SNMP::auto_init_mib - default '1', set to 0 to disable automatic reading |
| of the MIB upon session creation. set to non-zero |
| to call initMib at session creation which will result |
| in MIB loading according to Net-SNMP env. variables |
| (see man mib_api) |
| |
| $SNMP::verbose - default '0', controls warning/info output of |
| SNMP module, 0 => no output, 1 => enables warning/info |
| output from SNMP module itself (is also controlled |
| by SNMP::debugging - see below) |
| |
| $SNMP::use_long_names - default '0', set to non-zero to enable the use of |
| longer Mib identifiers. see translateObj. will also |
| influence the formatting of <tag> in varbinds returned |
| from 'getnext' operations. Can be set on a per session |
| basis (UseLongNames) |
| |
| $SNMP::use_sprint_value - default '0', set to non-zero to enable formatting of |
| response values using the snmp libraries sprint_value |
| function. can also be set on a per session basis (see |
| UseSprintValue) Note: returned values may not be |
| suitable for 'set' operations |
| |
| $SNMP::use_enums - default '0',set non-zero to return values as enums and |
| allow sets using enums where appropriate. integer data |
| will still be accepted for set operations. can also be |
| set on a per session basis (see UseEnums) |
| |
| $SNMP::use_numeric - default '0', set to non-zero to return tags as numeric |
| OID's, instead of translating them. Also setting |
| $SNMP::use_long_names to non-zero is highly recommended. |
| |
| $SNMP::save_descriptions - default '0',set non-zero to have mib parser save |
| attribute descriptions. must be set prior to mib |
| initialization |
| |
| $SNMP::debugging - default '0', controls debugging output level |
| within SNMP module and libsnmp |
| 1 => enables 'SNMP::verbose' (see above) |
| 2 => level 1 plus snmp_set_do_debugging(1), |
| 3 => level 2 plus snmp_set_dump_packet(1) |
| |
| $SNMP::dump_packet - default '0', set [non-]zero to independently set |
| snmp_set_dump_packet() |
| |
| %SNMP::MIB - a tied hash to access parsed MIB information. After |
| the MIB has been loaded this hash allows access to |
| to the parsed in MIB meta-data(the structure of the |
| MIB (i.e., schema)). The hash returns blessed |
| references to SNMP::MIB::NODE objects which represent |
| a single MIB attribute. The nodes can be fetched with |
| multiple 'key' formats - the leaf name (e.g.,sysDescr) |
| or fully/partially qualified name (e.g., |
| system.sysDescr) or fully qualified numeric OID. The |
| returned node object supports the following fields: |
| |
| objectID - dotted decimal fully qualified OID |
| label - leaf textual identifier (e.g., 'sysDescr') |
| subID - leaf numeric OID component of objectID (e.g., '1') |
| moduleID - textual identifier for module (e.g., 'RFC1213-MIB') |
| parent - parent node |
| children - array reference of children nodes |
| nextNode - next lexico node (BUG!does not return in lexico order) |
| type - returns application type (see getType for values) |
| access - returns ACCESS (ReadOnly, ReadWrite, WriteOnly, |
| NoAccess, Notify, Create) |
| status - returns STATUS (Mandatory, Optional, Obsolete, |
| Deprecated, Current) |
| syntax - returns 'textualConvention' if defined else 'type' |
| textualConvention - returns TEXTUAL-CONVENTION |
| units - returns UNITS |
| hint - returns HINT |
| enums - returns hash ref {tag => num, ...} |
| ranges - returns array ref of hash ref [{low=>num, high=>num}] |
| defaultValue - returns default value |
| description - returns DESCRIPTION ($SNMP::save_descriptions must |
| be set prior to MIB initialization/parsing) |
| |
| |
| &SNMP::setMib(<file>) - allows dynamic parsing of the mib and explicit |
| specification of mib file independent of environment |
| variables. called with no args acts like initMib, |
| loading MIBs indicated by environment variables (see |
| Net-SNMP mib_api docs). passing non-zero second arg |
| forces previous mib to be freed and replaced |
| (Note: second arg not working since freeing previous |
| Mib is more involved than before). |
| |
| &SNMP::initMib() - calls library init_mib function if Mib not already |
| loaded - does nothing if Mib already loaded. will |
| parse directories and load modules according to |
| environment variables described in Net-SNMP |
| documentations. |
| (see man mib_api, MIBDIRS, MIBS, MIBFILE(S), etc.) |
| |
| &SNMP::addMibDirs(<dir>,...) - calls library add_mibdir for each directory |
| supplied. will cause directory(s) to be added to |
| internal list and made available for searching in |
| subsequent loadModules calls |
| |
| &SNMP::addMibFiles(<file>,...) - calls library read_mib function. The file(s) |
| supplied will be read and all Mib module definitions |
| contained therein will be added to internal mib tree |
| structure |
| |
| &SNMP::loadModules(<mod>,...) - calls library read_module function. The |
| module(s) supplied will be searched for in the |
| current mibdirs and and added to internal mib tree |
| structure. Passing special <mod>, 'ALL', will cause |
| all known modules to be loaded. |
| |
| &SNMP::unloadModules(<mod>,...) - *Not Implemented* |
| |
| &SNMP::translateObj(<var>[,arg]) - will convert a text obj tag to an OID and |
| vice-versa. any iid suffix is retained numerically. |
| default behaviour when converting a numeric OID |
| to text form is to return leaf identifier only |
| (e.g.,'sysDescr') but when $SNMP::use_long_names |
| is non-zero or a non-zero second arg is supplied |
| will return longer textual identifier. If no Mib |
| is loaded when called and $SNMP::auto_init_mib is |
| enabled then the Mib will be loaded. Will return |
| 'undef' upon failure. |
| |
| &SNMP::getType(<var>) - return SNMP data type for given textual identifier |
| OBJECTID, OCTETSTR, INTEGER, NETADDR, IPADDR, COUNTER |
| GAUGE, TIMETICKS, OPAQUE, or undef |
| |
| &SNMP::mapEnum(<var>) - converts integer value to enumeration tag defined |
| in Mib or converts tag to integer depending on |
| input. the function will return the corresponding |
| integer value *or* tag for a given MIB attribute |
| and value. The function will sense which direction |
| to perform the conversion. Various arg formats are |
| supported |
| $val = SNMP::mapEnum($varbind); |
| # where $varbind is SNMP::Varbind or equiv |
| # note: $varbind will be updated |
| $val = SNMP::mapEnum('ipForwarding', 'forwarding'); |
| $val = SNMP::mapEnum('ipForwarding', 1); |
| |
| &SNMP::MainLoop([<timeout>, [<callback>]]) |
| - to be used with async SNMP::Session |
| calls. MainLoop must be called after initial async calls |
| so return packets from the agent will not be processed. |
| If no args supplied this function enters an infinite loop |
| so program must be exited in a callback or externally |
| interrupted. If <timeout |
| |
| &SNMP::finish() |
| - This function, when called from an SNMP::MainLoop() |
| callback function, will cause the current SNMP::MainLoop |
| to return after the callback is completed. finish() can |
| be used to terminate an otherwise-infinite MainLoop. A |
| new MainLoop() instance can then be started to handle |
| further requests. |
| |
| Exported SNMP utility functions |
| &snmp_get() - takes args of SNMP::Session::new followed by those of |
| SNMP::Session::get |
| |
| &snmp_getnext() - takes args of SNMP::Session::new followed by those of |
| SNMP::Session::getnext |
| |
| &snmp_set() - takes args of SNMP::Session::new followed by those of |
| SNMP::Session::set |
| |
| &snmp_trap() - takes args of SNMP::TrapSession::new followed by those of |
| SNMP::TrapSession::trap |
| |
| Note: utility functions do not support async operation yet. |
| |
| Trouble Shooting: |
| |
| If problems occur there are number areas to look at to narrow down the |
| possibilities. |
| |
| The first step should be to test the Net-SNMP installation |
| independently from the Perl5 SNMP interface. |
| |
| Try running the apps from the Net-SNMP distribution. |
| |
| Make sure your agent (snmpd) is running and properly configured with |
| read-write access for the community you are using. |
| |
| Ensure that your MIBs are installed and environment variables are set |
| appropriately (see man mib_api) |
| |
| Be sure to ensure headers and libraries from old CMU installations are |
| not being used by mistake (see -NET-SNMP-PATH). |
| |
| If the problem occurs during compilation/linking check that the snmp |
| library being linked is actually the Net-SNMP library (there have been |
| name conflicts with existing snmp libs). |
| |
| Also check that the header files are correct and up to date. |
| |
| Sometimes compiling the Net-SNMP library with |
| 'position-independent-code' enabled is required (HPUX specifically). |
| |
| If you cannot resolve the problem you can post to |
| comp.lang.perl.modules or email net-snmp-coders@lists.sourceforge.net. |
| |
| please give sufficient information to analyze the problem (OS type, |
| versions for OS/Perl/net-SNMP/compiler, complete error output, etc.) |
| |
| Acknowledgments: |
| |
| Many thanks to all those who supplied patches, suggestions and |
| feedback. |
| |
| Wes Hardaker and the net-snmp-coders |
| Dave Perkins |
| Marcel Wiget |
| David Blackburn |
| John Stofell |
| Gary Hayward |
| Claire Harrison |
| Achim Bohnet |
| Doug Kingston |
| Jacques Vidrine |
| Carl Jacobsen |
| Wayne Marquette |
| Scott Schumate |
| Michael Slifcak |
| Srivathsan Srinivasagopalan |
| Bill Fenner |
| Jef Peeraer |
| Daniel Hagerty |
| Karl "Rat" Schilke and Electric Lightwave, Inc. |
| Perl5 Porters |
| |
| Apologies to any/all who's patch/feature/request was not mentioned or |
| included - most likely it was lost when paying work intruded on my |
| fun. Please try again if you do not see a desired feature. This may |
| actually turn out to be a decent package with such excellent help and |
| the fact that I have more time to work on it than in the past. |
| |
| ------ |
| History: |
| |
| Bugs fixed and changes in 3.1.0 |
| 1) update to ucd-snmp-4.1.0 |
| |
| 2) support much of SNMPv3 |
| |
| 3) add support for getbulk - Thanks Daniel |
| |
| 4) further regularize error return codes - will return undef on error |
| for most cases except where values are expected from a varbind (will |
| themselves be undef) |
| |
| 5) fix bug where session deletion inadvertently occurred with async calls |
| if calling Session went out of scope - a reference is saved which will |
| not destruct until after async callback completes |
| |
| 6) pass protocol errors to callbacks |
| |
| 7) added lower level async API so SNMP events can be integrated with |
| arbitrary event loop (Event.pm?) - thanks Jef |
| |
| 8) Major enhancement to 'make test' - thanks Sri |
| |
| 9) POD documentation - thanks Bill |
| |
| 10) fix OBJECTID translations (unsigned long) |
| |
| 11) display Mib info on 'status' and 'indexes' |
| |
| |
| Bugs fixed and changes in 1.8.2 |
| 1) minor bug fix |
| |
| Bugs fixed and changes in 1.8.1 |
| |
| 1) updated docs |
| |
| 2) fixed #defines from MAX_NAME_LEN to MAX_OID_LEN (mslifcak) |
| |
| 3) reverted __tag2oid to use read_objid rather than get_node. this |
| gives full name resolution provided by libsnmp and no longer creates |
| problems on failure since 3.6.2 removes the call to 'exit' in |
| read_objid |
| |
| 4) fixed Makefile.PL to use win32 'type' vs. 'cat' |
| |
| Bugs fixed and changes in 1.8 |
| |
| 1) added async API (async api should be considered beta - |
| potential changes are most likely in the event loop integration |
| area - would like to integrate with Event.pm) |
| |
| 2) added trap generation API (implemented v1 traps only for now) |
| |
| 3) added and exported non-OO utility API (snmp_get, snmp_set, etc.) |
| |
| 4) added $SNMP::debugging to dynamically control libsnmp debugging output |
| |
| 5) added $SNMP::save_descriptions to control libsnmp parsing/saving |
| of MIB descriptions |
| |
| 6) added $SNMP::dump_packet to control libsnmp packet dumping |
| |
| 7) implemented the SNMP::mapEnum function (thanks to Wayne Marquette) |
| |
| 8) officially added(documented) tied %SNMP::MIB hash to allow access |
| to parsed MIB meta-data (new support for textualConvention and syntax) |
| |
| 9) fixed bug related to AUTOLOAD recursion |
| |
| 10) fixed bug with SNMP::use_enums so 'set' (and trap) should now accept |
| enums as input values |
| |
| 11) fixed bug with fget[next] - formatted values are supplied as return |
| values as well as within args passed |
| |
| 12) fixed Makefile to link with -kstat on solaris |
| |
| 13) fixed bug when handling noSuchName returns for getnext calls with |
| varbinds w/ no iid supplied (__get_label_iid should not use the |
| FAIL_ON_NULL_IID flag) |
| |
| 14) fixed bug with uninitialized sprintval_flag |
| |
| 15) fixed bug when no val is passed to SNMP::Session::set - now |
| will not core or complain about uninitialized data |
| |
| 16) fixed bug with __translate_appl_type in case of NULL or empty string |
| |
| 17) eliminated the use of strtoul for portability - use sscanf(,"%lu",) |
| |
| 18) getType() supports all tag formats now |
| |
| 19) fixed bug when setting values of type OBJID (thanks Scott Schumate) |
| |
| 20) *WARNING* RetryNoSuch in session creation had a bug which prevented |
| it from being disabled. It now defaults to being disabled - this may |
| break code *WARNING* |
| |
| |
| Bugs fixed and changes in 1.7 |
| |
| 1) fixed seg fault on use of unknown/unparsed attribute in Varbind or |
| passed to translateObj |
| |
| 2) fixed truncation of last char of attribute name in translateObj |
| |
| 3) handles variable args to setMib without complaint |
| |
| 4) added SNMP::getType to query data type of a given attribute and |
| extended Varbind structure to return type wherever possible |
| |
| 5) added RemotePort to SNMP::Session initialization list to allow override |
| of port 161 |
| |
| 6) removed noisy announcement of mib parse success unless verbose is set |
| |
| *WARNING* *this may break existing scripts* |
| 7) changed return format for IpAddress and ObjID data types - these are |
| now always returned as dotted decimal strings as opposed to the |
| packed binary forms in 1.6 |
| *WARNING* *this may break existing scripts* |
| |
| 8) Session now sets ErrorInd (e.g., $session->{ErrorInd}) where appropriate |
| |
| 9) Support for ucd-snmp-3.2 (and greater) style of Mib loading |
| |
| 10) Fully qualified attribute names and numeric OIDs are now valid <obj> |
| definitions. |
| |
| 11) Numeric OIDs can be used even if they have not been parsed in the |
| current Mib - Mib loading is now optional |
| |
| 12) Support for Win32 perl |
| |
| 13) Updated docs and examples |
| |
| 14) Reworked/extended the test harness to use the perl t/* facility |
| (thanks to jfs@fluent.com) |
| |
| 15) fixed up error handling to be more consistent with library and more |
| useful in general. Now returns both library API errors and snmp |
| protocol error numbers and strings. |
| |
| 16) added per object and per type formatting of returned values - more |
| control of value formatting with UseEnums and UseSprintValue |
| |
| Copyright: |
| |
| Copyright (c) 1995-2000 G. S. Marzot. All rights reserved. |
| This program is free software; you can redistribute it and/or |
| modify it under the same terms as Perl itself. |