This file contains a summary of the major changes in released revisions.
Please see the CHANGES file for a more detailed list of specific bugs/patches
that have been fixed/applied, and the ChangeLog file for a comprehensive
listing of all changes made to the code.

*5.7.3*
    Many many bug fixes and minor improvements

    snmpd, snmptrapd and apps:
      - Patch 2525: from Ryan Steinmetz: Fix argument length parsing of the
	host resources mib
      - Make ENV_SEPARATOR_CHAR configurable
      - SECURITY: a denial of service attack vector was discovered on
        the linux implementation of the ICMP-MIB.  This release fixes
        this bug and all users are encouraged to update their SNMP
        agent if they make use of the ICMP-MIB table objects.

    perl:
      - BUG: 2402: Add support for SNMPv3 traps

    Windows:
      - Port batch build infrastructure to Visual Studio 2010 and later
	From Visual Studio 2010 on it is no longer possible to specify
	include or library directories globally - these have to be
	specified per project. Hence two additional menu entries in
	build.bat that allow to specify these directories.
      - Patch from Bart Van Assche to improve cygwin building

*5.7.2*
    snmp:
      - BUG: 3526549: CVE-2012-2141 Array index error leading to crash

    snmpd:
      - BUG: 3532090: Fix high ifIndex values crashing hrDeviceDescr

    building:
      - PATCH: 2091156: correctly declare dependencies in Makefile. 'make
        -j <N>' should work now. Backport this to V5-4 as it is needed for
        correct operation in the single threaded case of make miblib as
        well.

    Many other miscellaneous minor bug fixes

*5.7.1*

  libnetsnmp:
      - Fixed the mib-parsing-bug introduced shortly before 5.7

  agent:
      - fixed rounding errors for disk percentage calculations

  openbsd:
      - better support for recent openbsd releases

  features:
      - bug fixes with minimalist support after additional user feedback

  Many other miscellaneous minor bug fixes

*5.7*

  snmpd:
      - Delivery of data via regularily scheduled notifications.
        (see "Data Delivery via Notfications" in snmpd.conf)
      - Many time-based config options can take (m)ins, (h)ours, ... arguments
        (see the snmpd.conf manual page)
      - The PING and TRACEROUTE MIBs now compile and work-ish on linux
        http://www.net-snmp.org/wiki/index.php/DISMAN
      - Mib handlers can now implement a data_clone function for
        cloning the myvoid structure variable to avoid dangling pointers
      - Fixed persistent storage of VACM MIB configuration
      - Multi-homed agents send UDP responses from the proper IP address
      - The hrStorageTable implementation now supports large filesystems better
      - optimizations for large route tables
      - Added a deliveryByNotify config token for regular data delivery
        (see the snmpd.conf manual page and the NET-SNMP-PERIODIC-NOTIFY-MIB)
      - [PATCH 3141462]: fix agentx subagent issues with multiple-object requests
      - [PATCH 3057093]: linux uses libpci for creating useful ifDescr strings
      - [PATCH 3131397]: huge speedups of the TCP/UDP Tables

  libnetsnmp:
      - Removed the older CMU compatibility support
      - The SSH transport is now configurable

  TLS/DTLS support:
      - The SNMP over DTLS transport now properly supports IPv6
      - Introduced new configuration tokens: localCert/peerCert
        (deprecating serverCert, clientCert, defX509ServerPub, defX509ClientPub)
      - Various fixes for the TLS/DTLS transports

  apps:
      - Added a per-variable timed output support to snmpwalk using -CT
      - snmpinform now correctly uses the local engineID for informs
      - A number of mib2c bug fixes
      - New snmp.conf tokens for timeouts and retries

  building:
      - New flags to reduce the amount of compiled code to bare minimums.
        This is provided by a new generic feature marking/selection mechanism.
        http://www.net-snmp.org/wiki/index.php/Feature_Marking_and_Selection
      - It's now possible to build without SNMPv3/USM
        (e.g., if you only want TLS/DTLS with SNMPv3/TSM)
      - It's possible to build the suite with no SET support
        configure using --enable-read-only
      - It's possible to build the agent as a notify-only agent
        configure using --enable-notify-only
      - Added a script to test memory usage with various config options
        (see the local/minimalist/sizetests script)
      - Net-SNMP can now be built to perform local DNSSEC validation
        (install DNSSEC-Tools' libval and use --with-local-dnssec-validation)

  testing:
      - a number of new API unit-tests have been added to the suite
        (to run the tests: cd testing && ./RUNFULLTESTS -g unit-tests)
      - The unit tests can be more easily run under valgrind
        (See http://bit.ly/jsgRnv for details)

  openbsd:
      - Support for updating the routing table via SNMP

  win32:
      - The testing suite works better under win32 environments
      - Many building fixes for the win32 environment(s)

  solaris:
      - Net-SNMP now supports the SCTP-MIB

  DragonFlyBSD, FreeBSD8:
      - Net-SNMP should now work on DragonFlyBSD and FreeBSD8

  And of course:
      - Many other bug fixes.  See the CHANGES and ChangeLog for details.

*5.6*

    all:
      - Implemented the SNMP over TLS and SNMP over DTLS protocols [RFC-to-be]
        See http://www.net-snmp.org/wiki/index.php/TUT:Using_TLS
      - Implemented the "Transport Security Model" [RFC5591]
      - Generic host-specific configuration .conf files are now read.
	See the HOST-SPECIFIC FILES section of the snmp.conf manual page
        and http://www.net-snmp.org/wiki/index.php/Configuration
      - Include statements can now be used in .conf files.
        See http://www.net-snmp.org/wiki/index.php/Configuration

    snmpd:
      - Fix handling of multiple matching VACM entries. (Use the "best"
	match, rather than the first one). Reported by Adam Lewis. Note
	that this could potentially affect the behaviour of existing access
	control configurations.
      - Agent will no longer call table handlers if a set request for the
	handler has invalid indexes
      - table_data/tdata next handler will not be called during get
	processing if no valid rows are found for the handler
      - [PATCH 2952708]: Added Perl implementation of BRIDGE-MIB
      - moved all functions defined in libnetsnmphelpers to
	libnetsnmpagent. libnetsnmphelpers is now an empty library.
      - Implemented the TSM-MIB and the TLSTM-MIB
      - new API for indicating that persistent store needs to be saved
	after the current request finishes processing
      - [PATCH 2931446]: make the load averages writable.

    apps:
      - A new tool 'net-snmp-cert' that easily creates and manages
        X.509 certificates for use with the SNMP over (D)TLS protocols.
      - Added an 'agentxtrap' command to send notifications via AgentX
        (See http://www.net-snmp.org/wiki/index.php/TUT:agentxtrap for details)
      - -T command line flag can be used to pass configuration
        directly to transports that can accept configuration tokens
      - A new 'snmptls' command for manipulating the agent's TLS configuration

    snmplib:
      - A more modular transport subsystem that allows third party
        extensions and dependencies for code reuse.
      - New transport functions: f_config, f_open, f_copy and f_setup_session
      - Transports can now specify session defaults
        - E.G. dtlsudp: auto-sets the SNMP version and the security model.
      - [PATCH 2942940]: Add a new function, netsnmp_parse_args, that is
	like snmp_parse_args but takes an additional bitmask, flags, to
	affect the behaviour. Also remove the magic handling of some
	application names.
      - A new X.509 certificate API for indexing and reading certificates
      - new experimental row creation API which uses a state machine
        to try really hard to create a row from a given varbind list
      - netsnmp_container enhancements:
        - added a free_item function
        - added a CONTAINER_FREE_ALL macro/function
        - added an interface for duplicating a container (CONTAINER_DUP)
        - added a remove function to container_iterators
	- added an ability to set options on binary_array containers
      - new snmp token logOption allows specifying log destinations
        via configuration conf files
      - A very significant reduction in compiler warning output
      - new experimental simple state machine handling API

    building:
      - Support for a stream-line stripped down version of internal
        OpenSSL support using --with-openssl=internal.
      - Do not require that the UDP transport is included.
      - Building Net-SNMP with dmalloc support enabled is again possible.

    mib2c:
      - mib2c can now optionally run sed on generated code

    testing:
      - A brand new test infrastructure supporting multiple test suites
        See perldoc testing/RUNFULLTESTS for details

    python:
      - walking broken agents won't cause an infinite loop

    win32:
      - IPv6 is only supported under Cygwin 1.7 or later.
      - [BUG 2939168]: byte order of udpLocalPort is now correct.
      - [BUG 2939168]: fixed test infrastructure ("make test"). This has
	been fixed by using the proper environment separator character and
	by adding the path of the netstat executable for Cygwin in
	testing/TESTCONF.sh.
      - building with another OpenSSL package than the Cygwin-provided
	packages openssl and openssl-devel is again possible.
      - running the regression test suite is again possible ('make test').
      - winExtDLL compiles now under MinGW.
      - the snmpd.conf keyword 'extend' is now supported under MinGW
      - the snmptrapd.conf keyword traphandle is now supported under MinGW

    qnx6:
      - [PATCH 2836895]: support for QNX6

*5.5*

    All applications:
      - Added the ability to "alias" transports to a more simple name
         (see the "alias" keyword in the snmp.conf manual page)
      - The -t (timeout) switch will accept floating point numbers (eg: .1)

    snmpd:
      - [BUG 1712988]: default/configurable max # varbinds returned by GETBULK
      - [PATCH 1585146]: Extend range of available error codes
      - [PATCH 1654424]: Handle row deletion issues in dataset tables
      - [PATCH 1666737]: Include IPv6 traffic in various UDP counters
      - [PATCH 1700157]: Fix ordering of exec tokens in MIB output
      - [PATCH 1719253]: fix skipNFSInHostResources for multiple walks
      - [PATCH 1723611]: New implementation of the RMON alarmTable
      - [PATCH 1737439]: automatic link up/down traps on a walk
      - [PATCH 1806501]: Add API for sending traps with a snmpv3 context
      - [PATCH 1882621]: Add LVM support to the partition table
      - [PATCH 1893468]: fixed registration of OIDs with ranges
      - [PATCH 1901764]: Support date-based logwatch files
      - [PATCH 1909813]: fix table_iterator handling of SORTED hint
      - [PATCH 1916840]: new config option to set SNMPv1 trap agent address
      - [PATCH 2103492]: implement RMON-MIB::etherStatsJabbers
      - [PATCH 2449210]: add 64-bit usage statistics to UCD-SNMP-MIB::dskTable
      - Add support for a user provided length variable
	   and C string values to the watcher helper.
      - Automatically reregister sysORTable entries from AgentX subagents.
      - Fix various memory leaks
      - Implement ipAddressSpinLock
      - Implement ipNetToPhysicalLastUpdated
      - Suppress annoying "registration != duplicate" warning for root oids

    snmptrapd:
      - [PATCH 1908288]: Run perl END block on termination
      - Add trap handler for logging traps to a mysql database
      - Withdraw deprecated options.

    snmpnetstat:
      - [PATCH 2564538]: Support GETBULK in v2c+ snmp versions

    snmpusm:
      - [PATCH 1591355]: Allow cloning to arbitrary engineIDs

    snmplib:
      - [BUG 1619827]: Improve handling of link dependencies
      - [PATCH  700681]: limited support for UDPv4 broadcast addresses
      - [PATCH 1882069]: Add token for specifying an exact SNMPv3 engineID
      - Fix assorted memory leaks
      - Implemented RFC5343 contextEngineID probing.
      - Support for the TSM security model for use with tunneling

    misc:
      - Add config reread support to "net-snmp-config --compile-subagent" code
      - Preliminary (alpha) support for SNMP over SSH and DTLS/UDP.
      - Preliminary (alpha) support for the TSM security model
      - Separate user management into new net-snmp-create-v3-user script

    building:
      - Improved cross-compilation support
      - Improved library layering & dependency handling when linking apps
      - Improved RPM spec files, for consistency with vendor-provided packages.
      - Mechanism for selecting build environment based on version
      - New test scripts to test Net-SNMP transport functionality
      - Restructure configure template
      - Update to autoconf 2.63 & libtool 2.2.6

    perl:
      - [BUG 1619827]: improve handling of link dependencies
      - [PATCH 1956193]: beta threadable perl module code for SNMPv1/2c usage.

    python:
      - [PATCH 1716114]: Let python build in source tree (Debian patch #38)

    Linux:
      - [PATCH 1704105]: Add IPv6 support to the inetNetToMediaTable
      - [PATCH 1705594]: Various fixes to ipAddressPrefixTable reporting
      - [PATCH 1708243]: Implement ipDefaultRouteTable
      - [PATCH 1715405]: Implement ipv6ScopeZoneIndexTable
      - [PATCH 1724602]: MfD-based ipDefaultRouterTable implementation
      - [PATCH 1828602]: Support ipDefaultTTL and ipForwarding SETs
      - [PATCH 1927751]: Implement icmpMsgStatsTable
      - [PATCH 2023633]: Implement SCTP-MIB
      - [PATCH 2053273]: Implement EtherLike MIB

    AIX:
      - Add support for AIX 6.x
      - Fix default shared library building instead of forcing static

    FreeBSD:
      - [BUG 1633483]: Support CPU HAL on FreeBSD4.x
      - [PATCH 1623874]: add GNU/kFreeBSD support

    IRIX:
      - [PATCH 1709748]: Optimized IRIX cpu stats
      - [PATCH 1675869]: CPU statistics for IRIX based on PCP

    MacOSX:
      - [PATCH 1600522]: CPU HAL implementation for mach/darwin

    Solaris:
      - [PATCH 1719730]: support for ipSystemStatsTable and ipAddressTable

    Win32:
      - [PATCH 2686248]: Fix several winExtDLL bugs.
      - [PATCH 1706344]: Fix compilation with cygwin
      - Fix AES support


*5.4*

  Important Changes:
    - The default configuration now enables embedded Perl and the Perl
      modules by default when possible unless explicitly disabled. You
      may use the --disable-embedded-perl and --without-perl-modules
      configure options, respectively, to revert to the former default
      configuration.

  New:
    python:
      - Python bindings to the Net-SNMP project are now available in
        the python sub-directory.  See the README file there for details. 

    build:
      - Some preliminary support for automatic building of dynamically
        loadable mib module code.
      - Most net-snmp specific defines are now (also) available under
        a proper NETSNMP_ prefix. The older, potentially conflicting
        names as well as the autoconf variables can now be turned off
        easily within 3rd party code.
      - libtool update to 1.5.22
      - enable-as-needed will try to link built libraries against needed
	libraries at library link time, rather than application link time.
        This is preliminary support for what will likely be better in 5.5.

    snmplib:
      - [PATCH 1282566]: to rework transport creation to allow for
        alternative interpretations of the address and a more flexible
        transport registration system
      - [PATCH 1509943]: responses will get sent from the original dest IP
        address when possible.

    snmpd:
      - new MIB table for managing Net-SNMP access control extensions
        (see NET-SNMP-VACM-MIB).  These extensions to the VACM MIB are
        Net-SNMP specific and are used primarily by snmptrapd at this point.
      - [PATCH 1550725]: A new uint instance helper to match the existing
        int, long and ulong helpers
      - [PATCH 1534877]: to add support for skipping NFS entries in the
        host resources hrStorageTable.	See the skipNFSInHostResources
        token in the snmpd.conf file for details.
      - A "hardware abstraction layer", to localise the O/S-specific
        aspects of retrieving system data.  This first appeared in the
        5.3.x line, but this release now starts to actively use it for
        implementing particular MIB modules.
        This has resulted in some minor changes in behaviour - some index
        values in the hrStorageTable have changed from earlier releases,
        and the (non-raw) memory statistics are now consistent, reporting
        percentage usage calculated over the last minute on _all_ systems.
      - Agent builds default module list from a default_mibs.h rather than
        a hard coded configure list
      - [PATCH 1568150]: Extend pass_persist error messages that can be
	passed back from the script
      - [PATCH 1570982]: Solaris IF-MIB: Support for IPv6-only interfaces

    snmptrapd:
      - the traphandle directive now supports a -t switch to indicate
        matching any OID in the tree below the specified OID

    mib2c:
      - New mib2c.emulation.conf provides a quick way to do simplistic
        emulation of an entire MIB or MIB branch.
      - A new perl module NetSNMP::agent::Support provides easier embedded 
        perl support. (patch 1369996 from Peter Martin)
        Run "mib2c -c mib2c.perl.conf OID" to help you start using it.

    perl:
      - gettable() now supports asynchronous callback functions
      - update default_store module to latest default_store c-binding
	tokens

    snmpusm:
      - performance improvement when changing localized keys
      - new option -Cp to set usmUserPublic value

    snmpvacm:
      - new commands to manipulate Net-SNMP access control extensions

 Ports:
   Linux:
      - add IPv6 aware UDP and TCP mibs to default module list

   Solaris, FreeBSD, OpenBSD:
      - Experimental support for 64bit interface counters (ifXTable). Enable
        via '--with-mib-modules=if-mib --enable-mfd-rewrites'.
      - [PATCH 1569537,1569539]: new UDP-MIB and TCP-MIB implementation
	(enable through --with-mib-modules=udp-mib,tcp-mib)

   Win32:
      - new winExtDLL extension module to allow snmpd to load Windows SNMP
        Service extension DLLs to provide support for HOST-RESOURCES-MIB
        and other MIBs provided with Windows.

   AIX:
      - HOST-RESOURCES-MIB implementation added to default module list

   uCLinux
      - [PATCH 1551948]: Make pass_persist usable on uClinux

  Fixes:
    snmplib:
      - fix OID lookups for fully qualified object names (eg .iso.org)
        (official patch 1421725)
      - UDPIPv6 and TCPIPv6 transports now compile on recent UN*X platforms

    snmpd:
      - fix disman/event monitoring crashes (official patch 1429059)
      - fix re-init of daemons after SIGHUP (official patch 1473289)
      - fix trap processing from SMUX peers (patch 1430824)
      - [BUG 1527930]: fix smux authentication
      - [BUG 1427410]: Set auth engineID for SNMPv3 traps.
      - [BUG 1535903]: Support spaces within security names
      - fix 8 byte IpAddress in at, ip and route MIBs.
      - [PATCH 1562688]: fix ping/reattach agentx code

    snmptrapd:
      - fix bug 1420758/1458815: snmptrapd aborts/loops in select()
        (official patch 1420758)
      - fix re-init of daemons after SIGHUP (official patch 1473289)

    perl:
      - Fixed the perl bulkwalk function
      - gettable() was fairly broken in prior versions 
      - OID handling was fully broken on various 64bit platforms
      - fixes for 64-bit platforms

    misc:
      - Many misc fixes

*5.3.0.1*

  *** Security Fix ***

    - In version 5.3 much of the authorization control was rewritten.
      There was a bug in the new code that resulted in granting write
      access to read-only users or communities which were configured
      using the "rocommunity" or "rouser" snmpd.conf tokens.  5.3.0.1
      fixes this problem.  Users are encouraged to immediately update
      their installations if they use either of these tokens.


*5.3*

 *** Important Notes ***

    Several very significant changes have been made in Net-SNMP for this
    release that warrant special attention.

    - shared library version number no longer matches the release number. We
      now follow the versioning scheme recommended by libtool. For the 5.3
      release this means that the libraries now have a SONAME ending with
      ".so.10", e.g. libnetsnmp.so.10.

    - snmpd has not been truncating log files at startup, as documented in
      the man pages, for a while now. This default behaviour has been restored.
      Please use the '-A' flag if you want to continue appending to your log
      files at startup.

    - snmptrapd will no longer accept all traps by default. It must be
      configured with authorized SNMPv1/v2c community strings and/or SNMPv3
      users. Non-authorized traps/informs will be dropped.

    - Due to a copyright statement that didn't allow modifications, 
      snmpnetstat has been completely rewritten.  The new version now
      accepts the same command-line options as the other tools, which
      has introduced a number of incompatible changes.  However, it
      does now finally support SNMPv3.

 New:
    Building:
      - new option to disable set support in the agent (--disable-set-support)

   snmpd:
     - implement notification logging
     - implement notification filtering
     - AgentX, host resources and disman/event mibs added to default module list
     - updated and new disman mib implementations

   snmptrapd:
     - allow a non-default AgentX socket
     - a brand new authorization scheme that is based on the VACM
       authorization scheme from snmpd.
       - Note: now drops unauthenticated notifications by default
     - registers the snmpEngine MIB group under the "snmptrapd" context

   snmplib:
     - new helper for ascii file based scalar integers (think Linux /proc/)
     - new utilities for dealing with files
     - new utilities for parsing text files
     - granular config/persistent file disablement (noPersistentLoad and
       noPersistentSave snmp.conf tokens)

    mib2c:
      - mib2c.mfd.conf now generates code for persistence row storage
      - many enhancements and bug fixes

    snmpusm:
      - allows to use old and/or new localized key instead of passphrase with
        option -Ck
      - new option -CE to specify usmUserEngineID (necessary to manage
        snmptrapd's usmUserTable)

 Ports:
   Linux:
       - new experimental tables
         - tcpConnectionTable, tcpListenerTable
         - ipAddressPrefixTable
         - udpEndpointTable
         - ipv4InterfaceTable, ipv6InterfaceTable
       - inetCidrRouteTable supports dynamic ipv4 route creation/deletion
       - added ipv6IpForwarding.0 and ipv6IpDefaultHopLimit.0 (read-write)

   Win32:
     - Cygwin compiler fixes
     - MSVC: agent (snmpd) support for pass and pass_persist
     - MinGW: agent (snmpd) support for pass
     - Fix for 'select: No such file or directory' in snmpdelta

 Fixes:
   - Persistent files in directory defined by snmp.conf persistentDir were 
     not being loaded at startup
   - Perl getnext didn't honor explicit reference to MIB file
   - AgentX sub-agent connection delayed til after config files read
   - Build fixes for --disable-agent, --disable-snmpv1 and --disable-snmpv2c
   - Lots of bug fixes


*5.2*
 New:
    For the security paranoid (like Wes):
      - Insecure versions of SNMP may be completely disabled at compile time.
          (configure using one or both of --disable-snmpv1 --disable-snmpv2c)
      - Less secure versions of SNMPv3 authentication and encryption
          algorithms may be completely disabled at compile time.
          (configure using one or both of --disable-des --disable-md5)
          (This requires you have OpenSSL to support SHA1 and AES instead)
      - Diffie-Helman key negotiation (perfect-forward-secrecy - RFC2786)
          has been implemented in both the agent and "snmpusm".
      - Better support for direct use of localized and master keys
        (randomly generated keys have more entropy than passwords). See
        the -3m -3M -3k and -3K options, and the defAuthLocalizedKey,
        defPrivLocalizedKey, defAuthMasterKey, defPrivMasterKey
        snmp.conf tokens)

    library:
      - send and receive buffer sizes for UDP/TCP are configurable
      - .conf file token registration can now search multiple files
        (separate file names to search by a :.  IE, "snmpd:agentx")

    snmptrapd:
      - Embedded perl support for trap handlers (much faster than traphandles).
          (configure --with-embedded-perl ; see 'perldoc NetSNMP::TrapReceiver')
      - the snmptrapd usmUser table can be controlled through SNMP & AgentX
          (the snmptrapd registers MIBs under the "snmptrapd" SNMPv3 context)

    agent:
      - community strings can be mapped to individual SNMPv3 contexts
          (see the snmpd.conf manual on "com2sec").
      - AgentX should work properly with SNMPv3 contexts now.
      - improved version of "exec" extension directive - "extend":
          supports multi-line output, configurable command input, SET
          handling, a valid relocatable MIB output structure, etc
      - more flexibility added to netsnmp_cache helper, including periodic
          refreshing of caches and cache pre-loading.
      - experimental implementation of DisMan Remote Operations MIB groups
        (remote nslookup, ping, traceroute and expressions via SNMP)
      - The proxy supports a new -Cc flag which passes the community
        name through to the other side rather than hard-coding it.
      - The config_require() and other modules can now be placed
        inside of CPP directievs (#if, /* ... */) as header files are
        now passed through CPP processing first.
      - new config_exclude() macro for excluding certain modules
      - new config_belongs_in() macro to specify if a chunk of code
        found by --with-mib-modules belongs in the agent library or
        the mib module library.
      - Uses a smaller function stack.

    commands:
      - snmpusm: A number of key-change improvements
        (EG, changing localized keys supported, diffie-helman support, ...)
      - New -Ln option to completely disable logging.

    mib2c:
      - a number of new or updated configuration templates:
        - mib2c.iterate.conf: the iterator-based table config
            now produces fuller template code than before.
        - mib2c.table_data.conf and mib2c.container.conf:
            two new "internal-row" style configs
        - mib2c.mfd.conf: "MIBs for Dummies" (or MFD) - intended to
            reduce the SNMP knowledge needed to develop MIB modules
            and add flexibility at the same time.  Run "mib2c -S
            mfd_interactive_setup=1 -c mib2c.mfd.conf OID" and follow
            its guided instructions to help you tailor its results to
            meet your needs.
        - mib2c.genhtml.conf: Generates an easier-to-read HTML view of
          a MIB tree structure.  (See http://www.Net-SNMP.org/mibs/
          for example output.)
      - more node tags available for conf file writers
      - additional search directories may be set via MIB2C_DIRS env var.
      - mib2c-update: new utility to help update mib2c generated code
          when conf file changes.
      - a mib2c.conf manual page to describe how to write mib2c .conf files.
      - support for embedded perl code in mib2c.conf files

    documentation:
      - New README.agent-mibs: an attempt to start documenting what
          MIBs are implemented in the agent and on what architectures.

    perl:
      - An improved SNMP::gettable() method.  Uses GETBULK if possible and
        better GETNEXT requests if not, decodes indexes from OIDs,
        requests multiple variables at once, ...  ("perldoc SNMP" for details)
      - A NetSNMP::OID::get_indexes() function to extract index values
        from an OID.

 Ports:
   Linux:
     - new experimental tables/rewrites for Linux, including:
           ifTable, ifXTable, inetCidrRouteTable, ipCidrRouteTable,
           ipAddressTable, ipSystemStatsTable, ipNetToPhysicalTable.
       - Enable these talbles by specifying --enable-mfd-rewrites to configure.
       - Most of these tables have IPv6 support as well.
     - ifIndex no longer changes when interfaces are added/removed, and all
         tables/object will now use the same ifIndex for the same interface.

   Solaris:
     - new experimental support for ucd-snmp/lmSensors MIB module

   Win32:
     - Support for the MinGW compiler
     - Support for snmptrapd running as a service
     - A Win32 specific build and install script
     - Support for a .exe installer
       (we'll make binaries available using it)

 Fixes:
   - AgentX memory leak on sets
   - SNMPv3 not-in-time window after 248 days
   - Agent hang in HOST-RESOURCES MIB
   - double free on duplicate registration
   - OIDs with IP Addresses as indexes now print prettier
   -'Lazy' installation of headers (only install if newer)
   - allow whitespace in rocommunity/rwcommunity
   - many miscellaneous bug reports


*5.1.2*
 New:
   - Minor improvements to snmpdelta (error reporting)
   - Minor improvements to snmpnetstat (IPv6 output)

 Fixes:
   - Misc 64bit processor fixes.
   - Misc perl build and install fixes.

 Ports:
   - Linux 2.6 improvements
   - Win32 support for TCP and UDP over IPv6 via Winsock version 2
   - Win32 fixes in many places.
   - Win32 service support for snmptrapd
   - Win32 support for snmpconf

*5.1.1*
 New:
   - test suite supports testing over other transports (tcp, udp6, unix, ...)
     (see the -P switch to the testing/RUNTESTS script)
   - Solaris supports the use of it's PKCS#11 library for supporting
     cryptographic functions (OpenSSL isn't required if PKCS#11 is available)
     (see configure's --with-pkcs flag)

 Fixes:
   - Improvements on 64 bit architectures.
   - A few minor memory leaks fixed.
   - An extremely large number of minor bug fixes.
   - Many perl module specific bug fixes.
   - snmpd will safely handle more signals.

 Ports:
   - Many many significant Windows improvements.
     - AgentX support is working again under windows.
     - SCM support is built into the agent to allow the agent to be
       started as a windows service.
     - MSDOS names are supported in path names.
     - A win32 build script in win32/build.pl
     - Support for the MinGW compiler
     - (see the README.win32 file for details on new ports)
     - Various helpful win32/*.bat files for installation, etc.
   - Some linux 2.6 support improvements

*5.1*
 New:

    Building:
      - configure is now generated using autoconf 2.57.
      - The make system now supports "make uninstall"
      - configure & make supports a --with-install-prefix option
      - new configure options to disable building of the agent, apps, ...
        ./configure --help for a list of package sections that can be excluded.
      - new configure option to remove specific code pieces (mib reading, ...)
        ./configure --help for a list of code areas that can be excluded.

    snmpd:
      - linkUp and linkDown notifications can be enabled
        (see the linkUpDownNotifications snmpd.conf token documentation)
      - notifications (traps) can be generated for disman/monitor events.
        (see the snmpd.conf documentation on "monitor" and "notificatonEvent")
      - new snmpd.conf tokens:  includeAllDisks
      - the UCD-DISKIO-MIB will now work on linux.
      - com2sec mappings for SNMP over unix sockets.
      - some speed improvements have been made that should increase the
        speed of the agent's processing time.
      - for mib code using the table iterator, an auto-caching mechanism
        which can greatly speed up access at the cost of caching.
        (see "stash_cache" in the injectHandler token docs in snmpd.conf(5))
      - Some of the agent modules were completely rewritten (and
        should be faster and cleaner).
      - A number of new APIs and helper modules are available, but
        there is no major summary to easily list.
      - A number of new Net-SNMP specific MIBs now exist.

    snmptrapd:
      - snmptrapd now supports forwarding of notifications.
        (see the snmptrapd.conf manual for details)
      - snmptrapd's new -t switch can be used to disable syslog.
        (useful for a no-output snmptrapd with only traphandle support)

    apps:
      - snmptable sports 3 new options: fixed width, max-repeaters,
        left-justify.  (see snmptable -h for details)
      - mib2c walks you through instructions to help you generate code
        "just for you".  Including some new forms of output code, like
        notification code generation.  Run mib2c SOMETHING for details.
      - mib2c has about a billion other improvements, including the
        ability to generate trap generation code templates.
      - snmpwalk supports a new -Ct option for timing how long a walk takes.
      - net-snmp-config supports a number of new options.
      - All applications support a consistent -L flag for turning on
        which forms of output logging should be used.

    perl:
      - the SNMP module supports a new get_table() call.

 Fixes:
    - More patches to properly demonize snmpd (close std*, double fork, ...).
    - Version numbers of all packages/perl-modules/etc are better synchronized.
    - more documentation, especially for APIs
    - all perl module version numbers are synchronized with the
      net-snmp package.
    - Many many misc bug fixes, as always.

 Ports:
    - diskio MIB support for Darwin.
    - ifSpeed under Linux should now be correct for most network cards.
    - more windows build fixes

*5.0.9*

 SECURITY:
    - An existing user/community could get access to data in MIB
      objects that were explicitly excluded from their view.

 Fixes:
    - Perl build environment should better under Windows
    - Misc kerberos support fixes.
    - Improvements on various manual pages.
    - A annoying bug with SETs being passed to pass scripts was fixed.
    - The often talked about VACM optimization improvement was fixed again.
    - mib2c handles augmentation tables better now.
    - Various 64 bit issues have been addressed.

*5.0.8*
 New:
    - No new features will be added to the 5.0.x line.

 Ports:
    - Update libtool to version 1.4.3, for the benefit of Darwin
    - diskio support for Darwin
    - Updates for OpenBSD 3. 
    - Updates to solaris README

 Fixes:
    - find libwrap w/nsl on RedHat
    - fix for openssl 0.9.7
    - Fix some AgentX memory leaks
    - use macro for inline function prototypes
    - Attempt to find unused port before running tests
    - Use SNMP_SLEEP environment variable when running tests
    - calculate a proper ifSpeed under linux when possible
    - better daemonization of snmpd
    - close and reopen snmptrapd log files on HUP
    - support for 16 bit reuqest ids
    - Recognize new 't' code in display hints
    - misc other fixes

*5.0.7*
 New:
    - VACM (access control) optimizations which will greatly benefit
      people who wish to exclude large portions of the MIB tree from
      some people.  Previously this was a large resource drain.
    - Add command line option to snmpd to set syslog facility
    - Reverse DISPLAY-HINT processing, i.e. it allows you to input data
      formatted like a DISPLAY-HINT prescribes
    - Support setting of sysDescr and sysObjectID via snmpd.conf
      configuration directives
    - New output option to force display of strings as hex
    - Persistent directory can be specified at runtime
    - Add support for Linux virtual interfaces in the ipAddressTable.
    - implemented the mteEventTable and the mteEventNotificationTable
      form the DISMAN-EVENT-MIB.

 Fixes:
    - AgentX no longer flagged as experimental
    - A few memory leak fixes for the table_iterator agent API.
    - Processed flag cleared before each pass of a set request
    - Remove snmpd pid file on exit
    - Restore default behaviour of building shared libraries
    - misc other fixes

*5.0.6*

 Fixes:
    - prevent denial of service attack from authenticated users
      (really this time).
    - misc other fixes

*5.0.5*

 New:
    - Support for OpenSSL 0.9.7
    - Beginning of support for AES encryption.
      ( Currently only usable with Net-SNMP and OpenSNMP software. )

 Ports:
    - win32 new project files win32sdk.dsw for those with the win32
      platform sdk.
    - win32 builds should work properly again, minus callbacks and thus
      AgentX.

 Fixes:
    - Several AgentX (the subagent protocol) specific bugs have been fixed
    - prevent denial of service attack from authenticated users
    - many many misc fixes
    - The perl agent module plugin should now work.
    - Many other perl module related fixes.
    - net-snmp-config --ldflags properly supplies -L flags
    - misc make test fixes and improvements.

*5.0.4*

   During the testing for release 5.0.4, a release candidate was uploaded
   to Sourceforge and marked as hidden. For various reasons, the release
   was delayed and further changes and fixes were made.  However, the 
   release candidate files still appeared on the public FTP server and our
   mirrors. To avoid the confusion that could occur to users who may have
   downloaded this release candidate, we are bumping the revision number
   to 5.0.5.  If you downloaded net-snmp-5.0.4.tar.gz, please upgrade
   to net-snmp-5.0.5.tar.gz.

*5.0.3*

 New:
    - the "dist" directory contains the beginnings of some init
      scripts and packaging utilities.

 Ports:
    - win32 builds should work properly again.

 Fixes:
    - the 5.0.2 package had a few broken packaging problems.  Opps.
    - a few misc fixes.

 Perl:
    - the perl modules should work with older versions of perl again.

*5.0.2*

 New:
    - mib2c support for the old-4.X style api and for scalars.
    - many improvements to the netsh shell environment.

 Fixes:
    - tcpwrappers support should work significantly better.
    - NFS file systems are better supported in the hrStorageTable
    - the memory reporting no longer accidentally reports -1 integers
    - a few memory leaks fixed in the table_iterator API
    - fixes for Sun's "make"
    - ds_ prefix name-space protection (-> netsnmp_ds_)
      (run configure with --enable-ucd-compatibility for old API)
    - v1/v2c access control fixes for ipv6 addresses
    - many many misc fixes

 Perl:
    - The perl modules have a number of fixes, and the build process
      was fixed (again).
    - all make test suites should pass for people now.
      (there are still some known minor limitations, but we removed the tests)

*5.0.1*

 New:
    - A new flag: -OQ which does quick printing (-Oq), but with an '=' sign.
    - All output should now have type tags in front of them.
      (STRING: and INTEGER: were added)
    - the snmplib/mib.c file has been instrumented with doxygen comments.
    - two new mib2c configuration files for generating column and enum defines.
    - a agent coding example: agent/mibgroup/examples/notification.c

 Perl:
    - the SNMP perl module properly uses snmp.conf values as defaults.
    - --with-perl should work this time.
    - more embedded perl support, but it still isn't complete yet.
      (the NetSNMP::OID module has received many new features)

 Ports:
    - added vmstat and memory support for hpux11
    - other misc improvements for hpux11

 Fixes:
    - the agent should properly handle requests in the right order.
      (e.g., restrict the agent to processing only one SET at a time)
    - net-snmp-config --compile-subagent has been greatly improved.
    - the tools should report the right version number.
    - large /proc/stat files on linux shouldn't crash the agent.
    - the smux module should handle multiple registrations better.
    - various documentation clean ups.
    - 64 bit address clean ups.
    - misc other bug fixes.

*5.0*

 New:

    - Much of the agent internals were completely rewritten and sports
      a new module API to make your life easier.  See the
      agent/mibgroup/examples directory for example code that makes
      use of some of the new functionality.
      (Also see http://www.net-snmp.org/tutorial-5/agent/ which has
      some incomplete documentation)
    - The agent sports embedded perl, see the perl details further below.
    - The agent supports multiple SNMPv3 contexts and mib modules can
      now register themselves under different contexts.  (see the -n
      option in the snmpcmd manual page for details on specifying
      context strings in requests)
    - The proxy code has been completely rewritten and now supports
      the use of SNMPv3 contexts to help select which proxied host you
      wish to talk to.  See the snmpd.conf manual page.
    - All the tools take --configToken=value options now.  (see -H
      output from any command for what configTokens it accepts)
    - All the tools can speak over many different transport layers
      now, including UDP/TCP (ipv4 and ipv6), AAL5pvc, and IPX.  See
      ./configure --help for details on enabling them.
      Note: the -p and -T flags to all the applications have been
      removed.  Use hostname strings like "tcp:localhost:9999"
      instead.  See the snmpcmd manual page for details.
    - snmptrapd now acts as an agentx subagent and implements portions
      of the NOTIFICATION-LOG-MIB to allow captured traps and informs
      to be queried.
    - A "net-snmp-config" script will get installed which can report
      how the various tools were built (which libraries they were
      linked against, etc).  It will also help you do other things as
      well, like setting up snmpv3.  Run net-snmp-config --help for details.
    - kerberos authenticated and encrypted SNMPv3 is now possible.
      See ./configure --help for details on enabling the ksm security module.
    - The AgentX subagent protocol implementation has many new
      features and fixes.
    - mib2c was completely rewritten and has a much improved
      configuration file specification.
    - Much of the code is getting documented with "doxygen" style
      documentation.  Run "make docs" if you have doxygen installed.
    - some RMON support is available.
      (See agent/mibgroup/Rmon/README for details.)
    - The source tree has been reorganized and all the exported header
      files are now in the include subdirectory.  You can now point to
      the includes easily without having to run "make install" first.
    - the agent now requires a configuration file to access any information.
    - The entire code base has had indent run on it to effect a
      consistent coding style.  See the CodingStyle file for details.

 Perl:
    
    - The SNMP perl module now calls init_snmp() like real net-snmp
      applications, which means it will read snmp.conf configuration
      files, etc.
    - new perl specific configure options --with-perl-modules &
      --enable-embedded-perl.  See ./configure --help for details.
    - The beginnings of some new Perl modules (alpha level quality)
      are in the perl directory, including:
      - NetSNMP::agent which allows perl scripts to become net-snmp
        master or subagents
      - AnyData::SNMP is available that implements a perl DBI
        interface to map SQL commands to SNMP.  Included is a "netsh"
        shell where SQL commands can be typed, aliases created, etc.
        See the perl/AnyData_SNMP/INSTALL file for details.
    - Beginning (alpha level quality) support for embedding perl
      subroutines directly within the net-snmp agent.

UCD-SNMP NEWS:

*4.2.6*
 Big fixes:
    - Fixes to the Tunnel mib.
    - Deprecated the non-raw objects in the system stats MIB portion.
    - Testing harness fixes.
    - Network file system improvements fro the hrStorageTable. 
    - fixed snmptable.
    - fixed the memory table (again) locking to 2^31 in value.
    - Misc documentation fixes and clean-ups.
    - Many other misc fixes.

*4.2.5*
 Bug fixes:
    - The perl module actually works.  Sorry about that.
    - don't overwrite the PID of an already-running snmpd with the PID
      of an abortive snmpd.
    - a 64 bit architecture socket fix
    - smux authentication fixed for multiple connected sessions.
    - dynamic module support testing in the configure
    - memory values > 32bits are now reported as a maxed out 32bit number

*4.2.4*
 New:
    - badCommunityNames and badCommunityUses Counters supported.
    - tcp_wrappers support for snmptrapd.

 Bug fixes:
    - A security issue involving the snmpnetstat command accepting
      illegal data from a faked snmp server.
    - RPM library support fixes.
    - shared libraries built by default.
    - many bug fixes for conformance of target, notification, and vacm tables
    - many other fixes.

 Ports:
    - HPUX 11
    - Dynix/PTX 4.4
    - The snmpd demon can properly run as a windows service

*4.2.3*
 New:
    - sysLocation, sysContact, sysName and snmpEnableAuthenTraps are
      persistent after being set remotely.
    - New "ignoredisk" directive to ignore disks in the host resources mib.

 Bug Fixes:
    - The ifTable on Linux no longer reports duplicate interfaces.
    - perl scripts print better error messages if needed modules
      aren't available.
    - trap sinks aren't duplicated after a SIGHUP. 
    - misc other fixes.

 Ports:
    - improved irix support.
    - more mibII support for windows.

*4.2.2*
 Security Bug Fixes:
    - A few security bugs have been found and fixed. No known exploits
      have been released to date. However, users are encouraged to
      upgrade to the 4.2.2 release as soon as possible.
 
 Bug fixes:
    - many misc bug fixes.
    - misc documentation corrections.
    - updated libtool to 1.4.  This fixes a couple of platforms (eg, NetBSD).

 Ports:
    - mibII support for win32
    - It should compile and work on MacOS X (Darwin)
    - udpTable supported on solaris.
    - win32 borland compiler supported (see win32/config.h.borland)

 New:
    - tkmib supports SETs and saving of configuration data.
    - snmpwalk detects out of order OIDs being returned from an agent.
    - snmpset accepts the '=' sign for a datatype if the mib is
      available to extract the datatype from instead.

*4.2.1*
 Administrative:
    - The http://www.net-snmp.org/ web site and domain name is now active.
    - Copyright statement for changes beyond 4.2 is now a true BSD license.
      (see the COPYING file for details)

 Major Bug fixes:
    - AgentX master agent no longer crashes when a subagent disconnects.
    - counter64 encoding fixed.
    - oids with large numbers embedded in them should work properly (again).
    - Fixed behavior of agent_check_and_process() and alarms.
    - mib2c handles more variable types.
    - traps/informs are sent properly from agentx subagents.
    - many many more bug fixes have gone into this release.

 New:
    - The snmpconf configuration file editor can create snmptrapd.conf files.
    - AgentX support is compiled in by default, but must be configured now.
      (Add "master on" to your snmpd.conf file to enable agentx support)

*4.2*

 Administrative:
    - project services moved to http://www.net-snmp.org/project/

 Features:
    - Packets sequences are now shorter when possible, reducing packet sizes.
    - A new configuration file creation tool: snmpconf.
      (try snmpconf -g basic_setup)
    - A new command to remotely list disk space: snmpdf.
    - the agent VACM tables are now writable.
    - a new snmpvacm tool can be used to change the running vacm configuration.
    - dynamicly loadable mib module support for the agent.
      (see snmpd.conf on the dlmod directive)
    - minimal proxy support for snmpd
      (see snmpd.conf on the proxy directive)
    - libtool is now used to compile the package (better shared-library support)
    - the agent now supports the SNMP-NOTIFICATION-MIB.
      (enabled by default).
    - the agent can set trapsink using snmpcmd command line style parameters
      (see the trapsess section of the snmpd.conf manual page)
    - index matching in oids has been improved
      (see the snmpcmd manual page on -Ox, -OE, and -Ob).
    - snmptrapd has new formatting directives.
      (see the snmptrapd manual page on format1 and format2).
    - the agent can listen to multiple ports.
    - the agent can be restricted to listening on only certain interfaces.
    - the agent can be told at run time which mib modules (not) to initialize.
      (see the -I option in the snmpd.conf manual page)
    - the agent can run as a particular user.
    - snmptable takes a -Ci argument to show table indices.
    - snmptable uses GETBULK requests when it can (unless -CB is specified).
    - The "make test" suite contains a lot of new tests.
    - cross-compiling support.
    - snmpset checks types and range values for legality.
    - Significant improvements to the AgentX support.
      (Code is still beta, but probably safe for use on non-critical systems).

 Perl:
    - bulkwalk functionality for the SNMP perl module.
    - entirely numeric OID support.
    - support for best guess mode for OIDs.
    - range and default value access added.
    - build can now be targeted against a non-standard net-snmp install path.

 Fixes:
    - v3 traps/informs handled properly now.
    - Many more misc bug fixes.
    - snmpv3 engineIDs not IP address specific.

*4.1.2*
 Fixes:
    - Host resources fixes for FreeBSD and NetBSD
    - ucd-snmp memory/vmstat fixes for FreeBSD-3
    - configure --enable-ipv6 fixes
    - AIX fix (use knlist)
    - fix init_master_agent calling exit
    - bad free in subagent.c
    - dont let a agentx subagent be a smux master
    - ucd-snmp/loadave fix for AIX
    - fix doing a set on a pass variable
    - snmptable fixes
    - snmpnetstat fixes for v2c exceptions
    - man page fixes

 Features:
    - Some UnixWare 5 configuration support
    - configure --enable-mini-agent --without-openssl
    - snmptrapd -n
    - snmp_log callbacks
    - noTokenWarnings and noRangeCheck in snmp.conf
    - using a counter type in snmpset/snmptrap

*4.1.1*
 Fixes:
    - Better agent handling of unauthorized requests.
    - Better "make test" support.
    - Misc bug fixes.

*4.1*
 New:
    - Many new command line flags have been added for input/output flexibility.
      (see the snmpcmd(1) manual page on the -O flag and -I flag)
    - The tools support regex matching of oids on the command line.
      (see the snmpcmd(1) manual page on the -Ib option)
    - A ucd-snmp usage tutorial has been placed on the main web page.
      (see http://www.net-snmp.org/tutorial/)
    - snmptable is much smarter and handles sparse tables better.
    - tkmib supports snmpv3.
    - New agent libraries to embed SNMP and AgentX agents into other programs.
      (see the snmp_agent_api(3) manual page and the tutorial)
    - SNMP over TCP is supported.
      (-T TCP on the command lines)
    - OpenSSL has replaced KMT for SHA authentication and DES encryption.
      (Get OpenSSL from http://www.openssl.org/).
    - Some easier-to-use access-control snmpd.conf directives for simple setups.
      (see the snmpd.conf(5) manual page)
    - Easier setup of SNMPv3 support for the agent.
      (see the README.snmpv3 file).
    - Command line argument parsing has been reworked for getopt() use.
      (currently backwards compatible; see the snmpcmd(1) manual page)
    - Table rows with embedded strings are dealt with for both input and output.
      (see the snmpcmd(1) manual on the -Ob flag)
    - Many more snmp.conf directives supported.
      (see the snmp.conf(5) manual page)
    - Many AgentX improvements.
    - All of our distributed mibs have been updated to be SMIv2 compliant.
    - Trap support in the agent has been cleaned up and an API created.

 Perl:
    - Joe Marzot's perl module is now included with the ucd-snmp source.
      (this should help people trying to synchronize the two packages)

 Fixes:
    - SMUX support has been reintegrated into the agent in a better way.
    - Many many others.

*4.0.1*
 New:
    - defVersion in snmp.conf supported.
 Fixes:
    - An option was accidentally turned on by default that shouldn't have been.
    - misc minor fixes.

*4.0*
 New:
    - SNMPv3 protocol support!!!
      (See the README.snmpv3, snmpusm(1), snmp.conf(5), snmpd.conf(5))
    - historic v2party support removed.
    - complete re-write of the agent.
    - The extensible AgentX protocol is in alpha-test mode.
      (to use, compile with the mib-module "agentx" or
      "agentx/master" or "agentx/client").
    - syslog support for the agent (and everything else for that matter).
    - Per-process/per-exec-script based fix scripts implemented.
      (see snmpd.conf(5) for details)
    - many more config file options supported.
      (run any command with -H and see appropriate .conf manual pages)
    - The start of a "make test" suite.
    - many other things we've forgotten.
    - code is ANSI C now, and requires a ANSI C compiler.

 API Changes:
    - A small change to the write functions in mib modules.
      (data passed in has already be BER-decoded and is a pointer to a 
      variable of the correct type).
    - The config_load_mib mib-module .h file directive is now
      obsolete.  Use REGISTER_MIB inside your init function instead.

*3.6.2*
 Fixes:
    - An important multi-session bug fix, especially needed for the
      SNMP perl module.
    - Many minor bug fixes.

*3.6.1*
 Fixes:
    - Minor last second fixes mostly.

*3.6*
 New:
    - All of the services for ucd-snmp have moved from the sites in
      ece.ucdavis.edu to ucd-snmp.ucdavis.edu, including http, ftp,
      and the mailing lists.
    - The configure --help output has been greatly improved for better
      readability and has been broken into sections.
    - The agent's SMUX support has been greatly improved and should
      function with applications other than gated now.
    - The snmptrapd has been make extensible so you can call other
      programs and scripts when a trap has been received.
      (see snmptrapd.conf(5))
    - More configuration files have been created and can be used to
      specify defaults and configuration information to the various
      applications.  Run each command with -H to see what it understands.
      (see snmp_config(5), snmpd.conf(5), snmp.conf(5), snmptrapd.conf(5))
    - The configuration file parser looks in ~/.snmp by default as
      well, allowing each user to have his/her own setup files for the
      various applications.
    - The mib parser supports a variety of options dictating how
      strictly it parses mib files.
      (see snmpcmd.1 on "-P")
    - Debugging output with the -D flag now accepts a list of
      debugging information types to print.
      (see snmpcmd.1 on "-D")
    - Minimal multi-thread support using a modified version of the
      session API.
      (see snmp_sess_api(3))
    - persistent storage of information is possible from the agent's
      mib modules now.
      (see read_config(3))
    - The target mib has been implemented as an optional module.
    - More documentation has been written.
    - The recommended mib module API has changed slightly, but is
      backwards compatible as well.  See the AGENT.txt file for new
      documentation on how to write mib modules for the agent.
    
  Fixes:
    - many misc bug fixes, as always.

  Ports:
    - snmpnetstat has been ported to the win32 environment.

*3.5.3*
    - Bug fixes, including row creation sets to mib modules should work again.

*3.5.2*
    - very small last minute bug fixes for win32 and freebsd mostly.

*3.5.1*

 Fixes:
    - Many bug fixes submitted by users and the ucd-snmp-coders.
    - v2party support in the agent has been fixed.
    - The UCD-SNMP-MIB is SMICng compliant and should work under HP OV better.
    - Most sections of the mibII tree are 64bit clean.

 Copyright:
    - Simplification.

*3.5*

 New:
    - agent/mibgroup directory reorganized hierarchically.
      - this may break the agent compilation with some compilers.
    - floats, doubles, counter64s, int64s, uint64s support via opaque types.
    - new modules: misc/ipfwacc.
    - use of dynamicly loadable modules now possible, but not fully supported.
    - New application command line flags:  -s, -S, -m MIBS, -M MIBDIRS.
    - new configure options: --with-cc=CC and --with-cflags=CFLAGS

 Fixes:
    - Solaris core dumps.
    - Fixes for NetBSD 1.3.
    - The apps work again on 64bit machines.
    - misc other bug fixes.

 Ports:
    - host resources module should work on more platforms: NetBSD,
      FreeBSD, SunOS (almost).

*3.4*

 Important:
    - the UCD-SNMP specific mib structure changed.
      - many of the table oids have changed location and have been renamed.
    - the View Based Access Control module was implemented in the agent.
      Therefore, the "community" snmpd.conf parameter no longer
      exists.  See the snmpd.conf file for how to control access via
      community names now.
    - The header file #defines have changed.  You may have to compile
      third party applications with -DCMU_COMPATIBLE (like perl-SNMP <= V1.7).
    - The parser is more strict about unlinked OIDs and end-of-comment
      conditions.  You may see problems in a few broken mibs that used
      to parse ok with the older parser.

 New:
    - dynamic library support:  configure with --enable-shared.
    - the beginnings of a Perl/Tk/SNMP mib browser: tkmib
    - all applications support -R for random oid-name lookups.
    - default mib list changes when you add or remove agent mib-groups.
    - debugging in the agent can be turned on and off using snmpsets.
    - a new mib module displays a list of all loaded mib modules.
    - the internal structure of the agent's mib modules is now hierarchical.
    - the agent looks for .conf files in both the lib/ and share/ directories.
    - more improvements/options to snmptable.
    - new vmstat module to report vmstat related information under linux.
    - a perl based mib2c translator to convert mib sections to C code templates.

 Fixes:
    - The code was run through purify for memory leaks and a few were found.
    - snmptrap sends to the correct default port of 162 again.

 Ports:
    - irix 6.2 support improved.
    - openbsd.
    - the host resources mib compiles on Solaris.

*3.3.1*

 New:
    - "make install" installs the library and header files.

 Fixes:
    - compilation on many architectures (sunos for example).
    - snmptrapd doesn't exit if v2party files don't exist.
    - host resources works a bit better (ie, it compiles) under solaris.
    

*3.3*

  Path changes:
    - the default paths to the installed mibs and snmpd.conf file have
      changed to /usr/local/share/snmp (set differently using --datadir).
    - the default path of the snmpd and snmptrapd have changed to
      /usr/local/sbin (set differently using --sbindir).

  New:
    - basic SNMPV2c support.  
      - Not fully tested (feedback please!), and not RFC compliant.
      - all apps require '-v 2c' for v2c and '-v 2p' for the older party code.
    - basic host-resources mib support for linux, and hpux.
    - All environment variables can be set with a preceding '+' for
        indicating additions to the default values.
    - mib modules cleaned up more and can be added and removed more easily.
    - mib modules have a new macro for callbacks when reading a .conf file.
    - apps command line interfaces have merged together for standardization.
    - the libsnmp library no longer forces printing of errors.
    - 2 new applications: snmpdelta and snmptable.
    - the mib parser caches mib directory scans for speed improvements.
    - snmptrapd is snmp-version multi-lingual.

  Ported:
    - irix should be more complete.
    - aix 4.1.5.
    - fixes for hpux 10.20.
    - linux 2.1.x support.
    - library and apps supported under 32bit windows systems.

  Fixes:
    - too numerous to mention.

*3.2*

  New:
    - Top level of the mib parser has been restructured
      - no longer reads 'mib.txt'
      - no longer reads everything (MIBS/MIBDIRS)
      - reads import clauses to load other required modules
      - new man page: mib_api.3
    - The agent has been completely restructured (modularized) to
      allow for easier extension via C code and requires no
      modification of the ucd-snmp distributed source code to add in
      new C coded mib modules.  See the README file in the
      agent/mibgroup subdirectory for details.  Modules are added and/or
      removed via configure options.
    - agent can send traps to multiple trap destinations.
    - configure can be run outside the default source directory.
    - Optional modules:  SMUX support to talk with a running gated.
    - All configure prompted questions can be set on the command line instead.

  Fixes:
    - Memory leaks.
    - code is now prototyped and many related bugs have been found.
      (an ANSI compiler is still optional.)
    - Many others.

  Ported:
    - linux-2.*
    - mips-sgi-irix6.3  (agent needs 2 mib-modules removed still)

*3.1.3*

  New:
    - FAQ file!
    - bug-report script!
    - Agent can read .conf files from more places:
      - SNMPCONFPATH environment variable.
      - command line options:  -c FILE and -C.
    - Agent can send coldstart and authentication traps.
    - All requests/patches/questions should go to 
        ucd-snmp-coders@ece.ucdavis.edu
    - snmp variables mib implemented.
    - more udp, ip, ipNetToMedia tables implemented.

  Fixes:
    - Memory leaks.
    - Many other system specific fixes.

  Misc:
    - configure script updated to autoconf 2.12.

  Removed:
    - Very ancient tk/tcl code.

*3.1.2*

  New:
    - extensible mib moved to ucdavis enterprise mib:  .1.3.6.1.4.1.2021.
    - PORTING file added.
    - new configure switch:  --without-root-access.

  Ports:
    - BSDi, and possibly irix, and linux is not too far off.
    - massive improvements for netbsd, freebsd, hpux.

  Fixes:
    - Massive parser improvements.  (Niels Baggesen <recnba@mediator.uni-c.dk>)
    - configure script upgraded to autoconf 2.11.

*3.1.1*

  New:
    - init_mib() now reads all files in PREFIX/lib/snmp/mibs as mibs.
    - sysContact and sysLocation settable in snmpd.conf.
    - TC information retained (from Joe Marzot).

  Fixes:
    - snmpset on a pass script works now.
    - pass scripts more throughly tested and debugged.
    - community 5 can be set now.
    - Many others.

*3.1.0.1*

  Ported:
    - FreeBSD 2.?

  Fixes:
    - snmptrap greatly improved!  (Niels Baggesen <recnba@mediator.uni-c.dk>)
    - other small stuff.
    - default logfile location moved to /var/log if exists, else /usr/adm.

  New:
    - snmptrap man page.  (Niels Baggesen <recnba@mediator.uni-c.dk>)

*3.1*

  Features:
    - Pass thru extensibility added!
    - snmpnetstat greatly improved (Niels Baggesen <recnba@mediator.uni-c.dk>)
    - improved solaris info caching (Dan A. Dickey <ddickey@transition.com>)

  Bug fixes:
    - many fixes for solaris (Niels Baggesen <recnba@mediator.uni-c.dk>
      and "Dan A. Dickey" <ddickey@transition.com>)
    - greatly reduced memory usage by mib parser (Niels Baggesen)
    - disk checks fixed for solaris and osf.
    - improved Mib parsing from Mike Perik <mikep@crt.com>
      - TRAP-TYPE/NOTIFICATION-TYPE now handled.
      - IMPORTS definition no longer required.
      - SIZE syntax fixed.
    - sedscript compiles correctly with Solaris's spro compiler.
    - many more small ones.

  Misc:
    - Upgraded to autoconf-2.10

*3.0.7.2*

  Major solaris patches from Niels Baggesen <recnba@mediator.uni-c.dk>. Thanks!
  Other misc patches

*3.0.7.1*

  Bug fixes.

*3.0.7*

  Features:
    - Two new operating systems supported: hppa1.1-hp-hpux10.01, *-netbsd1.1
    - Two new ./configure options:
      --enable-debugging:  includes nlist and other warnings in log-file output.
      --with-defaults:     Assumes you want the defaults for all user prompts.
    
  Bug fixes:
    - make clean in man/ works.
    - Fixed the mib.txt capitalization problem.
    - Fixed a gcc cpp problem (added -x c to the command line options).
    - Added NULL to the second gettimeofday argument.

  Misc:
    - Upgraded to autoconf-2.9
    - snmpcheck upgraded to perl5.002 and Tk-b10
    - totally re-did the routing tables (required by hpux10.01).

*3.0.6*

  Features:
    - snmpV1 community names can be set in the configuration files now!
    - new app:  apps/snmptrap, as requested by many, many people.
    - New man page (rough still):  snmpd.conf.5.
    - Returns new values for system.sysObjectID for each supported OS.
    - Better OpenView support for changing the icons & etc.  See ov/README.

  Bug fixes.
    - -p PORT -l LOGFILE now work as advertised.
    - printed values of timeticks are no longer negative.
    - Correctly finds the Solaris 2.5 kernel.
    - the restart-agent mib entry now sets an 1 second alarm to
      restart so it can return a proper snmp response first.
    - Truncates existing logfiles.
    - nlist warnings removed.
    - more...  (see the ChangeLog)

*3.0.5*

  Bug fixes:
    - 'make' should not call 'autoconf' and associates anymore.
    - Fixed sun4 exit codes.  Really.
    - Changed config.h a bit to fix the mib.txt file's errors when
      some mibs were not defined for usage.

  Misc:
    - Updated configure to autoconf 2.7

*3.0.4*

  Mainly a bug fix release:
    - fixed another 32/64 bit problem:  returned exit codes on alphas
      were incorrect.
    - many system errors (e.g., no mem) were causing the agent to
      return error flags when it really was clueless.  
    - found a memory leak in the CMU routing table implementation.
    - More configure cleanups, mostly for Solaris.
    - snmp_open calls getservbyname only once now, at the request of Gary
      Hayward <gah@dirac.bellcore.com>.  Mainly for Perl users.

  New example file:  EXAMPLE.conf file (created at build time).

  local/snmpcheck has drastically improved, and now requires Tk-b8.

  You can now mung with all sorts of numbers in config.h and the
  mib.txt file will be mostly built from it if you change my defaults.

*3.0.3*

  *** default location for .conf and mib.txt files moved to
      .configure's --prefix location

  Now using GNU's auto-conf for better portability
    - prompts for important config.h information as well

  Port to Sun4/Solaris 2.4

  -h/--help and -v/--version flags added to snmpd

*3.0.2.1*

  Compilation bug fix

*3.0.2*

  Port to dec-alpha/OSF 3.1
    - quite a few more CMU bugs found during port.

  (docs/snmpd.1) Beginnings of documentation/man pages.

  (local/snmpcheck) Many changes/improvements.  Still very (usable) Beta.

  (NEWS) Added this file!

*3.0.1*

  (agent/snmpd) 
    2 Command line options added:
    -l LOGFILE       Outputs stderr/out to LOGFILE (overrides config.h def)
    -L               Do NOT write to a log file (overrides config.h)

  (agent/snmpd)
  New built in mib functions:
    MIB.VERSIONMIBNUM.VERUPDATECONFIG (default: .1.3.6.1.4.10.100.11)
       -- set to 'integer:1' to tell the agent to re-read the config file(s).

    MIB.VERSIONMIBNUM.VERRESTARTAGENT (default: .1.3.6.1.4.10.100.12)
       -- set to 'integer:1' to tell the agent to restart (exec and quits)

  Bug fixes/more CMU clean up

*3.0*

        Initial (public) Release
