This file contains major changes in released revisions.  Please read
the ChangeLog file for a more detailed listing of changes/bug fixes.

*3.1.3*

  New:
    - FAQ file!
    - bug-report script!
    - Agent can read .conf files from more places:
      - SNMPCONFPATH enviornment 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
