       README file for win32 binary release of Net-SNMP

DISCLAIMER

  The Authors assume no responsibility for damage or loss of system
  performance as a direct or indirect result of the use of this
  software.  This software is provided "as is" without express or
  implied warranty.


TABLE OF CONTENTS

  Disclaimer
  Table Of Contents
  Introduction
* Installation
* Co-existence with Microsoft SNMP services
  Installation - Perl module
* Configuration
  Build Information

  * = Required Reading.


INTRODUCTION

  This package contains a compiled binary release of Net-SNMP for Windows NT/2000/XP.
  The binaries run unmodified on Windows 98.  The "snmpd" and "snmptrapd" program can 
  not run as services on Windows 98, as Windows 98 does not provide a Service Control 
  Manager (SCM).

  Documentation for using the applications is available in the Windows help file
  (Net-SNMP.chm) located in the docs directory of the installed package.  Help is also
  available from the web site at http://www.net-snmp.org/docs/.


INSTALLATION

  The Net-SNMP Windows installer package performs the following tasks:

  - Installs the Net-SNMP binaries, MIB files and ActiveState 5.8.x Perl PPM 
    package into the installation folder (defaults to c:\usr). 
  - Adds (install folder)\bin to the system PATH. 
  - Adds the following registry keys:
    - HKEY_LOCAL_MACHINE\Software\Net-SNMP\SNMPCONFPATH=(install folder)/etc/snmp;
      (install folder)/snmp/persist
    - HKEY_LOCAL_MACHINE\Software\Net-SNMP\SNMPSHAREPATH=(install folder)/share/snmp
  - Creates an snmp.conf file in SNMPCONFPATH which defines: 
    - mibdirs (install folder)/share/snmp/mibs 
    - persistentDir (install folder)/snmp/persist 
    - tempFilePattern (install folder)/temp/snmpdXXXXXX 

  After installing using the setup wizard, perform a quick test to verify that 
  Net-SNMP was installed correctly.  Run the following from a command prompt:

    snmptranslate -IR -Td IF-MIB::linkDown

  The above command should generate:

    IF-MIB::linkDown
    linkDown NOTIFICATION-TYPE
      -- FROM       IF-MIB
      OBJECTS       { ifIndex, ifAdminStatus, ifOperStatus }
      DESCRIPTION   "A linkDown trap signifies that the SNMP entity, acting in
                an agent role, has detected that the ifOperStatus object for
                one of its communication links is about to enter the down
                state from some other state (but not from the notPresent
                state).  This other state is indicated by the included value
                of ifOperStatus."
    ::= { iso(1) org(3) dod(6) internet(1) snmpV2(6) snmpModules(3) snmpMIB(1) 
          snmpMIBObjects(1) snmpTraps(5) 3 }

  If snmptranslate can not be found, then verify that the Net-SNMP bin folder is in 
  your system path.

  If you get Module not found errors such as 'IP-MIB: Module not found', the application
  was not able to locate the mibs folder.  Verify that SNMPCONFPATH is set to the location
  of the configuration folder and the persistent storage folder 
  (c:/usr/etc/snmp;c:/usr/snmp/persist for example).  Also verify that there is an 
  snmp.conf file that contains configuration values for mibdirs, persistentDir and 
  tempFilePattern.  For example:

    mibdirs c:/usr/share/snmp/mibs
    persistentDir c:/usr/snmp/persist
    tempFilePattern C:/usr/temp/snmpdXXXXXX

  For detailed information on using environment variables and the registry to configure
  Net-SNMP, see 'Overview' document in the Configuration section of the Net-SNMP help file.

  For information on running snmpd.exe and snmptrapd.exe as a Windows service, see 
  'How to Register the Net-SNMP Agent and Trap Daemon as Windows services' in README.win32.


CO-EXISTENCE WITH MICROSOFT SNMP SERVICES

Please see the section 'Co-existence with Microsoft SNMP services' in README.win32


INSTALLATION - PERL MODULE

  Included in the (install folder)\Perl folder is an ActiveState Perl 
  5.8.x. PPM package.  Note:  In previous version of Net-SNMP, the PPM
  package was called Net-SNMP.ppd.  The package has been renamed to
  NetSNMP.ppd to prevent conflicts with the Net::SNMP package available
  from ActiveState.

  The Perl modules require the Win32 REGEX (Regular Expression) package which 
  is available from:

    http://people.delphiforums.com/gjc/gnu_regex.html

  Download gnu_regex.exe, copy it to a temporary file and execute it to 
  extract the files.

  Copy the extracted gnu_regex.dll to your %windir%\system32 folder.

  Remove any existing Net-SNMP Perl modules:

    ppm remove NetSNMP

  Install the Perl modules:

    cd (install folder)\Perl
    ppm install NetSNMP.ppd

  Perform a basic test using:

    net-snmp-perl-test.pl


CONFIGURATION

  All configuration files should be placed in the %SNMPCONFPATH% folder.

  Note: All paths in configuration files should use forward slashes (Unix style), 
  NOT back slashes.  Example: c:/usr

  Included is a Perl script called snmpconf which can be used to create 
  configuration files.  

  Documentation for using the snmpconf is available in the Windows help file
  (Net-SNMP.chm) located in the docs directory of the installed package.  Help is also
  available from the web site at http://www.net-snmp.org/docs/.

  To run snmpconf, use the following command line:

     snmpconf -i


BUILD INFORMATION

  Name:			net-snmp-x.x.x-1.win32.exe
  URL:			http://www.net-snmp.org
  Build date:		
  Built by:		
  Installer Package by: 
  
  OS:			Windows 2000 SP4
  Compiler:		MSVC++ 6.0 SP5
  Platform SDK:		February 2003
  Perl:			ActivePerl 5.8.2 build 808
  REGEX:		gnu_regex.exe (0.12) - http://people.delphiforums.com/gjc/gnu_regex.html

  Source: 		net-snmp-x.x.x.tar.gz
  Destination:  	c:\usr
  Project:		win32sdk.dsw / libdll.dsw
  Library:		netsnmp for applications, netsnmp.dll for Perl modules
  OpenSSL:		n/a


  The following are the default paths are used by the applications:

  ----------------------------------------------------------------------------
  net-snmp-config.h define   | value                    | optional environment
                             |                          | variable
  ----------------------------------------------------------------------------
  DEFAULT_MIBDIRS            | c:/usr/share/snmp/mibs   | MIBDIRS
  SNMPDLMODPATH              | c:/usr/lib/dlmod         | SNMPDLMODPATH
  SNMPLIBPATH                | c:/usr/lib               | SNMPLIBPATH
  SNMPSHAREPATH              | c:/usr/share/snmp        | SNMPSHAREPATH
  SNMPCONFPATH               | c:/usr/etc/snmp          | SNMPCONFPATH
  PERSISTENT_DIRECTORY       | c:/usr/snmp/persist      | SNMP_PERSISTENT_DIR
  NETSNMP_TEMP_FILE_PATTERN  | c:/usr/temp/snmpdXXXXXX  | 

