***************************************************************************
*
* README.win32
*
***************************************************************************

This guide describes building with Microsoft Visual C++ 6.0 and higher, with
the gcc compiler from MinGW / MSYS, and with the gcc compiler from Cygwin.
As developers build with other Win32 environments, their notes will be 
included here.

The remainder of this guide has the following sections :

Status as of 14-Oct-2006 for Win32 platforms
Interactions with Other Vendor's Products
Running Net-SNMP as a replacement for the Microsoft SNMP service
Co-existence with Microsoft SNMP services
Installing Platform SDK
Microsoft Visual C++ - Overview
Microsoft Visual C++ - Configure / nmake - Building
Microsoft Visual C++ - Workspace - Building
Microsoft Visual C++ - Workspace - Building the DLL
Microsoft Visual C++ - Workspace - Building the Perl SNMP modules
Microsoft Visual C++ - Workspace - Installing
Microsoft Visual C++ - Building with OpenSSL
Microsoft Visual C++ - Building with IPv6
Microsoft Visual C++ - Building your own applications with snmplib
Microsoft Visual C++ - Extending the Agent
GCC on Windows
Cygwin - Building
MinGW - Building
MinGW - Building with OpenSSL
Configuring Net-SNMP
How to Register the Net-SNMP Agent and Trap Daemon as Windows services
Notes on SET support for WIN32 ports
Notes on preprocessor defines for MSVC, MinGW and Cygwin
Acknowledgements


***************************************************************************
*
* Status as of 14-Oct-2006 for Win32 platforms
*
***************************************************************************

All applications build with Microsoft Visual C++ 6.0, Microsoft Development
Environment 2003 (MSVC 7.0/7.1), gcc under Cygwin, and gcc under MinGW.  

  -  All of the applications work
     (snmpwalk, snmpget, snmpset, snmptrap, etc...).
  -  The system, snmp, ip, tcp, udp, icmp mibgroups function
         (when agent is built using the snmpdsdk project).
  -  The Net-SNMP agent runs as an AgentX master agent or as subagent.
  -  smux is working.
  -  The target, notification, disman/mte groups compile but are not tested.
  -  The TCP/IPv6 and UDP/IPv6 transports compile but are not tested.
         
  -  Extending the agent to support enterprise-specific MIBs works.
  -  Running the agent on a non-standard UDP or TCP port works.
  -  Snmpd can be registered as a Windows NT/2000/XP service.
  -  Snmptrapd can be registered as a Windows NT/2000/XP service.
  -  Some build environments allow long pathnames that contain
     embedded spaces.  As this is not true for Cygwin "configure",
     the documented example scripts will refer to "c:/usr"
     as the base directory for installed Net-SNMP software.
  -  When using the winExtDLL extension agent, the Net-SNMP agent will
     load the Windows SNMP Service extension DLLs

The next subsection relates to items that are built using Visual Studio

  -  All Visual Studio project (.dsp) files are cleaned, and 
     a) Generate code to use Multi-Threaded DLL (/MD) "C" run-time library;
     b) Provide the same preprocessor defines (WIN32,_CONSOLE,_MBCS);
     c) Remove unnecessary references to GDI, ODBC, and "C" libraries;
     d) Debug versions build source browsing and debugging information;
     e) Provide consistent include search paths.

  -  All Debug and Release targets linked with libsnmp project targets
     build without errors, and are fully functional.

  -  Both the Workspace graphical environment and command line nmake is 
     supported for building under MSVC.


***************************************************************************
*
* Interactions with Other Vendor's Products
*
***************************************************************************

  -  Install scripts etc are written assuming Windows NT / 2000 or higher

  -  Running the Net-SNMP Agent or trap receiver on Windows 95 or Win3.1
     is not supported.

  -  Running the Net-SNMP Agent or trap receiver as a service on Windows 95
     or Windows 98 is not supported.

  -  The Net-SNMP agent and trap receiver will fail to start if either 
     cannot bind to their connect port (161 for agent, 162 for trap receiver).
     Check the Services panel to be sure no other SNMP program conflicts. See
     the section titled 'Co-existence with Microsoft SNMP services' below.

  -  Running the Net-SNMP agent instead of the MS supplied one works
     (at the loss of most of the functionality).   See the section titled 
     'Co-existence with Microsoft SNMP services' below.

  -  The Net-SNMP agent does not use the MS SNMP.dll, therefore it cannot 
     run as an extensible part of the MS agent.  It is possible to use a third
     party proxy agent for the MS agent to 'proxy' requests to the Net-SNMP
     agent listening on a different UDP port on the same machine.

  -  Snmptrapd does not "share" nor multiplex traps with SNMPTRAP.EXE,
     a program that is available from Microsoft or ACE#COMM.


***************************************************************************
*
* Running Net-SNMP as a replacement for the Microsoft SNMP service
*
***************************************************************************

As of Net-SNMP 5.4, the Net-SNMP agent is able to load the Windows SNMP
service extension DLLs by using the Net-SNMP winExtDLL extension.

The Windows SNMP service must be installed, but the service must be disabled.  
This is required so that the extension DLLs are available for loading, and 
also because this extension and the existing Windows extensions use the 
Windows SNMP API from snmpapi.dll.

An alternative to winExtDLL is to proxy requests from Net-SNMP to the Windows
SNMP service.  See the section 'Co-existence with Microsoft SNMP services'.


Limitations
-----------

- When using HP Insight Agents, some parts of the enterprises.232 tree are not
  accessible.  The cause of this is not known.

- When using winExtDLL, there is an offset of up to one second between the
  value of the sysUpTime varbind included in the traps generated by SNMP
  extension DLLs (e.g. linkUp and linkDown) and the value of the sysUpTime
  varbind included in traps generated by Net-SNMP itself (e.g. coldStart).
 
- When using winExtDLL, hrSystemUptime.0 reports the system uptime in thousands
  of a second instead of hundreds of a second. This is well known behavior of
  the Microsoft DLL that implements this MIB object. For more information,
  see also https://connect.microsoft.com/onecare/feedback/ViewFeedback.aspx?FeedbackID=504908.


Enabling the Windows SNMP extension agents
------------------------------------------

When installing Net-SNMP using the binary available from the web site, select 
'With Windows Extension DLL support' for the 'Net-SNMP Agent Service'.

The recommended way to start snmpd is with the following command line:

 snmpd.exe -I-udp,udpTable,tcp,tcpTable,icmp,ip,interfaces,system_mib,sysORTable

The above command will exclude all the Net-SNMP extensions that overlap with 
the default Windows (2003) extensions included with Windows.  Other Net-SNMP 
modules take precedence over the modules loaded by winExtDLL.

The binary install of Net-SNMP includes shortcuts in the Start menu for registering 
and unregistering snmpd and snmptrapd as a service with the correct command line 
options.

A simple test to see if winExtDLL is working is to get the sysDescr string.

 snmpget -v 1 -c public localhost sysDescr.0

If you see something similar to:

 Hardware: x86 Family 15 Model 12 Stepping 0 AT/AT COMPATIBLE - Software:
 Windows 2000 Version 5.0 (Build 2195 Uniprocessor Free)

instead of the usual Net-SNMP:

 Windows host1 5.0.2195 Service Pack 4 2000 Server x86 Family 15 Model 12
 Stepping 0

then it's using the Windows DLLs.  You may also notice that your floppy 
drive is accessed when starting the service.  This is from one of the 
Windows extensions.

To see what Windows modules are being loaded, you can shut down the 
service and then run snmpd.exe from the command line with winExtDLL 
debugging enabled using (all on one line):

 snmpd.exe -Lo -I-udp,udpTable,tcp,tcpTable,icmp,ip,interfaces,system_mib,
 sysORTable -DwinExtDLL

The Windows DLL snmpmib.dll (SNMPMIB) contains SNMP traffic statistics
(.1.3.6.1.2.1.11).  As we are using Net-SNMP and not the Windows SNMP Service,
no values will be returned from the Windows extension.  To allow SNMP 
statistics to be received, the Net-SNMP module snmp_mib is permitted to load 
by not excluding it in the above command line.  As stated above, this module 
will take precedence over the Windows module.


Registry Information
--------------------

Warning:  Improper use of the registry editor can damage to your operating
          system and should only be used by experienced users.

The following registry keys are used by the Windows SNMP Service to determine
what extension DLLs to load:

HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents
       
Each REG_SZ value contains the registry path to an extension agent which 
contains the path to the DLL.  For example:

Name    Type    Value
1       REG_SZ  SOFTWARE\Microsoft\LANManagerMIB2Agent\CurrentVersion

To prevent winExtDLL from loading the above extension, change the registry
path to an invalid path such as:

Name    Type    Value
1       REG_SZ  SOFTWARE\Microsoft\LANManagerMIB2Agent\CurrentVersion!!!


Service dependencies
--------------------

Services that depend on the SNMP Service will have to be modified to depend on
Net-SNMP instead of SNMP by modifying the registry.  See Microsoft article 
193888 for more information.


Compiling Net-SNMP with the winExtDLL extension (MSVC)
------------------------------------------------------

When building with MSVC 6, the Microsoft Platform SDK is required.

Configure / nmake:

-add --with-winextdll to the Configure command line.

Workspace:

-in file win32\net-snmp\net-snmp-config.h modify
 /* #undef USING_WINEXTDLL_MODULE */ into the following:
 #define USING_WINEXTDLL_MODULE 1


***************************************************************************
*
* Co-existence with Microsoft SNMP services
*
***************************************************************************

If the Microsoft SNMP agent service (SNMP Service) is running, the Net-SNMP 
agent (snmpd) will fail to start as it will not be able to bind to the default
TCP/IP port of 161.

If the Microsoft SNMP Trap Receiver service is running, the Net-SNMP trap 
receiver (snmptrapd) will fail to start as it will not be able to bind to the 
default TCP/IP port of 162.

It is not a requirement to install the Net-SNMP agent (snmpd) or trap receiver
(snmptrapd).  All the command line utilities such as snmpget.exe, snmpset.exe 
and the Perl modules will work without the Net-SNMP services.  All the 
utilities will work against any SNMP agent.

The main benefit of running the Microsoft SNMP agent instead of the Net-SNMP 
agent is that many Windows applications such as Microsoft SQL Server, 
Microsoft Exchange etc, extend the Microsoft agent.  Net-SNMP is NOT a drop 
in replacement for the Microsoft agent unless the winExtDLL Net-SNMP extension
is used (see the section 'Running Net-SNMP as a replacement for the Microsoft 
SNMP service').  Running Net-SNMP in place of the Microsoft agent (without
winExtDLL) will prevent the other applications from working with SNMP.  Also,
the Net-SNMP agent does not contain as many MIBs as the Microsoft agent.  For
example, as of August 2005, the HOST-RESOURCES (host) MIB is not yet 
implemented in Net-SNMP.

There are many benefits of running the Net-SNMP agent instead of the Microsoft
such as you can extend the agent using various features found in snmpd.conf 
such as pass and pass_persist (support for others are being added), you can
use SNMP v3, and there is more granular access control.

To allow both the Microsoft and Net-SNMP agent / trap receiver to run at the 
same time, the default TCP/IP port must be changed on either the Microsoft or 
Net-SNMP version of the application.

The Net-SNMP ports for snmpd and snmptrapd can be modified via snmpd.conf and 
snmptrapd.conf or by using a command line option with each program.  See the 
Net-SNMP Help file for instructions on changing the port number.

The Microsoft services use the 'snmp' and 'snmptrap' entries in the SERVICES 
file (%SystemRoot%\system32\drivers\etc\services) to determine the port to bind
the service to when the service starts.  Simply modify the entries and restart 
the affected services.

Note:  Changing the default port the service listens on will prevent it from 
       accepting requests or receiving traps from standard SNMP devices and 
       management stations unless they have also been reconfigured to use the 
       new port numbers.

It is possible to configure Net-SNMP agent to listen on the default UDP port
(161), have the Microsoft agent listen on another port such as 1161, and have
Net-SNMP proxy (forward) requests to the Microsoft agent.  This will allow you
to use the advanced features of Net-SNMP while still being able to query
the Microsoft agent and subagents.  To this, follow these steps:

 1.  Change the port that the Microsoft agent listens on.

 2.  Configure the Microsoft agent to only accept requests from localhost.  
     This can be set in the Security tab for the SNMP service in Windows 2000+.
     This is recommended to prevent users from querying the Microsoft agent
     directly.
 
 3.  Add a r/c community string to the Microsoft agent.  This can be set in 
     the Security tab for the SNMP service in Windows 2000+.  This will give 
     Net-SNMP full SNMP access.  User access can be restricted by Net-SNMP
     as explained below.
 
 4.  Restart the Microsoft SNMP service.

 5.  Configure Net-SNMP to proxy requests to the Microsoft agent.  To have it
     forward ALL requests to the Microsoft agent, add the following line to 
     snmpd.conf:
 
       proxy  -v 1 -c public localhost:1161 .1.3
 
     To only forward a section of the MIB tree such as the host section, use:
 
       proxy  -v 1 -c public localhost:1161 host
 
 6.  Start the Net-SNMP agent.
 
     Notes: If Net-SNMP has built in support for an OID and the proxy statement
            is not for a specific OID, then it will respond instead of proxying
            the request.  For example, if you proxy the 'system' tree and issue
            an snmpget for sysDescr.0, Net-SNMP will respond with it's own 
            version of sysDescr.0 instead of forwarding it.  To prevent Net-SNMP
            from doing this, you must prevent the system MIB from being 
            initialized when snmpd.exe is started by specifying what MIBS to 
            initialize using the -I switch.
  
            If you are forwarding everything to the Microsoft agent (.1.3), 
            start snmpd.exe using:
 
              snmpd.exe -Ivacm_conf,proxy,pass,pass_persist
 
            The above will enable proxy, pass and pass_persist support.  See the
            snmpd man page for more information on the -I switch.
 
            If you are forwarding a section of the tree that is not implemented
            in Net-SNMP such as 'host', you do not need to use the -I switch as
            Net-SNMP will forward the request.  This may cause issues in the 
            future if newer versions of Net-SNMP implement the section of the
            tree you are forwarding, such as the HOST-RESOURCES MIB.
 
            The pass and pass_persist commands will work even if the entire 
            tree is proxied to the Microsoft Agent.
 
 7.  Test the agent.  If you have forwarded the entire tree, issue an snmpget
     for sysDescr.0.  For example:
 
       snmpget -v 1 -c public localhost sysDescr.0
 
     The Microsoft agent will respond in a format similar to:
 
       Hardware: x86 Family 15 Model 12 Stepping 0 AT/AT COMPATIBLE - Software: 
        Windows 2000 Version 5.0 (Build 2195 Uniprocessor Free)
  
     The Net-SNMP agent would normally respond in a format similar to:
 
       Windows host1 5.0.2195 Service Pack 4 2000 Server x86 Family 15 Model 12
        Stepping 0

If you had previously configured the Microsoft agent with multiple community 
strings to restrict who can read and write to the OID tree, the security
settings should be transferred to snmpd.conf.  For example, if the Microsoft
agent was configured with:

 Community              Rights
 ---------------------------------
 public                 read
 S3cur39876             read/write
 Sn0wb0ard345           read/create

Add the following to snmpd.conf:

 rocommunity  public
 rwcommunity  S3cur39876
 rwcommunity  Sn0wb0ard345

It is possible to add more granular security using Net-SNMP.  For example, to 
restrict the public community string to only read the system tree, use:

 rocommunity  public 0.0.0.0 system

See the snmpd.conf man page for more information on configuring security.


***************************************************************************
*
* Installing Platform SDK
*
***************************************************************************

If you are compiling using Microsoft Visual C++ 6.0, it is recommended that
you install the Core Platform SDK (PSDK).  Without the PSDK, some functionality
will be disabled such as the core elements of the mibII group of the agent 
which use the "IP Helper API" (IPHLPAPI).

To determine what code is disabled when the PSDK is not used, search the
source code for HAVE_WIN32_PLATFORM_SDK.

The PSDK can be downloaded from the MSDN site.  Go to http://msdn.microsoft.com 
and do a search for 'psdk download' (without the quotes).  You should find both
a web install and a full install.  

When installing the SDK, all that is required is the 'Core'.

Once this package has installed, from the Start Menu run 
  "Programs ->Microsoft Platform SDK... -> 
   Visual Studio Registration ->
   Register PSDK Directories with Visual Studio"

If you are compiling using any of the following systems, the PSDK download
is not necessary, as the required parts of the PSDK are included with the 
installation of the compiler:

    - Microsoft Development Environment 2002 (MSVC 7.0)
    - Microsoft Development Environment 2003 (MSVC 7.1)
    - Cygwin (gcc)
    - MinGW (gcc)

In order for the process part of the host resources MIB to work under Windows
NT you will need to obtain PSAPI.DLL. This is available under the download 
section of www.microsoft.com.  The DLL is included with Windows 2000 and XP, 
and is also part of the VC++ distribution.  

If you are building Net-SNMP using Cygwin, go now to "Cygwin - Building".
If you are building Net-SNMP using MinGW, go now to "MinGW - Building".
Otherwise, see the Building section below.


***************************************************************************
*
* Microsoft Visual C++ - Overview
*
***************************************************************************

There are two ways to build Net-SNMP using Microsoft Visual C++.  The first
and easiest method is using Configure and nmake on the command line, and the 
second is using the Workspace files with the graphical interface.

To use nmake on the command line, the Configure script is run first to create
the various make files.  Once they are created, nmake is used to build the 
applications.  Perl is required to use this method, as the Configure script
is written in Perl.  ActiveState ActivePerl is available at:

        http://www.activestate.com/Products/ActivePerl/

The make file system is based on and uses the directory structure of the 
projects contained in the Workspace files which are described below.  It is
recommended that you read and understand how the workspaces are configured
even if you will only be using the command line Configure / nmake system.

For the graphical interface, there are two main Win32 workspaces 
('win32.dsw' and 'win32sdk.dsw'), containing more or less the same set 
of projects, plus 'libdll.dsw' which contains a minimal set of projects 
for use with the Perl module only.  

Win32.dsw is for developers who have not installed the Platform SDK from 
Microsoft's MSDN SDK Update site when using Microsoft Visual Studio 6.0.
Win32sdk.dsw is for those who have or who are using the Microsoft Development 
Environment 2002/2003 (MSVC 7.0/7.1), Cygwin (gcc) or MinGW (gcc).

Libdll.dsw compiles a DLL version of snmplib (netsnmp.dll).

There is one core development library ('libsnmp'), together with a number 
of utility projects for the individual executable commands ('snmpget', 
'snmpwalk', etc...).  All of these projects require the .lib created by 
the libsnmp project.

The agent requires the core library plus the other three library projects 
('libagent', libhelpers' and either 'netsnmpmibs' or 'netsnmpmibssdk' 
depending on which workspace is being used) together with the main agent 
project (either 'snmpd' or 'snmpdsdk').

The final application project is the trap handler 'snmptrapd'.  This also
requires the agent libraries ('libagent', 'libhelpers' and 'netsnmpmibs')
as well as the core development library.

There is a Debug version and Release version for each subproject.
This is so the Debug and Release versions of an application can be built and 
tested separately.

Both VC++ 6.0 and 7.1 have been tested.  Building with earlier Microsoft
compiler versions is no longer supported.

Note:  Compiling Net-SNMP using MSVC 2003 .NET (MSVC 7.1) will add a 
       dependency of MSVCR71.DLL for NETSNMP.DLL and all applications.
       Search msdn.microsoft.com for msvcr71.dll for more information
       on distributing applications compiled with MSVC 2003 .Net.

OpenSSL is required to support the encryption capabilities in SNMPv3,
or SHA authentication.

Since the MSVC build environment does not natively use "configure" nor "make"
to generate the various pathnames that the programs require, the header files 
need to be manually modified when using the graphical build system, and an 
install script is provided.  When using the Perl Configure / nmake system, 
the header files are automatically modified and require no manual editing.

The projects are arranged so that ALL of the usable products, the .exe files,
are written to the win32\bin directory.  The win32\lib directory is used only 
to build the the files in the win32\bin directory.  Once building is 
completed, there is no further use for the files in the win32\lib directory.

Debug Information
-----------------

Note that VC++ 6.0 has options for debugging information - the 'Program 
Database'.  This option is set in the Project settings, C/C++ tab, 'General' 
category, and is turned on by default during the conversion of the project 
files. This option is not for use with a library, as it embeds debug 
information into the library that references an external file that will 
not be available to the linking application. If you get an error message 
along the lines of 'debugging information not available in file vc60.pdb, 
make sure the library debug option is set to 'Program Database' or "/Zi".


***************************************************************************
*
* Microsoft Visual C++ - Configure / nmake - Building
*
***************************************************************************

There are two ways to build Net-SNMP using the Configure / nmake system.  
The first and easiest method is by running the win32\build.bat script.  The
second is manually running Configure and nmake.

Note:  Perl is required to use this method as the Configure script is 
       written in Perl.  ActiveState ActivePerl is available at:

        http://www.activestate.com/Products/ActivePerl/


Win32\build.bat script
======================

The build.bat script is an easy menu driven system that allows you to select
how Net-SNMP should be built, and where it should be installed.  Follow these
steps to build using build.bat:

1.  Open a command prompt

2.  Initialize the Visual Studio build environment by running VCVARS32.bat
    which can be found in the bin folder of your Visual Studio install folder.

3.  Run win32\build.bat

4.  The following screen will appear:

    Net-SNMP build and install options
    ==================================

    1.  OpenSSL support:                disabled
    2.  Platform SDK support:           disabled

    3.  Install path:                   c:/usr
    4.  Install after build:            enabled

    5.  Perl modules:                   disabled
    6.  Install perl modules:           disabled

    7.  Quiet build (logged):           enabled
    8.  Debug mode:                     disabled

    9.  IPv6 transports (requires SDK): disabled
    10. winExtDLL agent (requires SDK): disabled

    11. Link type:                      static

    12. Install development files       disabled

    F.  Finished - start build
    Q.  Quit - abort build

    Select option to set / toggle:  

5.  Toggle the options on and off as desired by typing the line number 
    followed by <enter>.  

    To compile with OpenSSL, the OpenSSL library and header files must 
    already be installed.  See the section 'Microsoft Visual C++ - Building 
    with OpenSSL' for details.

    To compile with the Platform SDK, the Platform SDK must already be 
    installed.  See the section 'Installing Platform SDK' for details.

    To use the IPv6 transports, you must be using Windows 98 or later.

    See the section 'Running Net-SNMP as a replacement for the Microsoft 
    SNMP service' for important information on using the winExtDLL agent.

    If Quiet mode is enabled, all build activity is stored in various *.out 
    files inside of the win32 folder.

    When you are ready to build, type f <enter>

6.  Building will begin.  Following is a sample screen shot of a quiet build:

    Building...
    
    Deleting old log files...
    Running Configure...
    Cleaning...
    Building main package...
    Installing main package...
    Running Configure for DLL...
    Cleaning libraries...
    Building DLL libraries...
    Installing DLL libraries...
    Cleaning Perl....
    Building Perl modules...
    Testing Perl modules...
    Installing Perl modules...
    
    See perlmake.out for Perl test results
    
    Done!

7.  If the folder that Net-SNMP was installed to is ever changed, modify the 
    system environment variables or registry keys as explained in the 
    'Configuration_Overview.html' file located in win32/dist/htmlhelp.


Manual build using Configure / nmake
====================================

To build using nmake on the command line, the make files need to be generated
first by the Configure script.  Following are sample steps to:

  -enable Platform SDK support
  -enable OpenSSL support
  -enable debug mode
  -build Net-SNMP
  -install to 'c:\usr'
  -compile the Perl modules
  -test the Perl modules
  -install the Perl modules

1.  Open a command prompt

2.  Initialize the Visual Studio build environment by running VCVARS32.bat
    which can be found in the bin folder of your Visual Studio install folder.

3.  Type (all on one line):

      perl Configure --with-sdk --with-ssl --config=debug
           --prefix="c:/usr"

4.  The make files will be generated, and a configuration summary will appear:

    ---------------------------------------------------------
                Net-SNMP configuration summary:
    ---------------------------------------------------------
    
      Config type:                debug
      SDK:                        enabled
      Link type:                  static
      Prefix / Destdir:           c:/usr
      OpenSSL:                    enabled

5.  Type:

      nmake clean
      nmake
      nmake install

      perl Configure --with-sdk --with-ssl --config=debug --linktype=dynamic
           --prefix="c:/usr"

      nmake libs_clean
      nmake libs
      nmake install

      nmake perl_clean
      nmake perl
      nmake perl_test
      nmake perl_install

For a complete list of Configure options, run:

  perl Configure --help

For a complete list of possible build targets, after generating the make files
using Configure, run:

  nmake help
      
Note:  The Configure option --linktype=static (or not specifying a linktype)
       will result in libsnmp being compiled and all other components being 
       statically linked to it.

       The Configure option --linktype=dynamic will result in libsnmp_dll 
       (netsnmp.dll) being compiled and all other components being dynamically 
       linked to it.


***************************************************************************
*
* Microsoft Visual C++ - Workspace - Building
*
***************************************************************************

The win32sdk.dsw workspace will build the agent that provides mib-II objects
for network interface layers, and the IP, ICMP, TCP and UDP tables.  This
workspace requires the Platform SDK to be installed.  Use the win32.dsw 
workspace if you don't have or don't need these features.  Note:  Other 
features may be disabled if the Platform SDK is not used.  See the section
'Installing Platform SDK' for more information.

1. If SNMPv3 encryption capabilities or SHA authentication is required,
   install the OpenSSL DLL and library file as described in the section 
   'Microsoft Visual C++ - Building with OpenSSL" and then continue with 
   step 2.

2. The default installation path is c:\usr.  This folder will contain all
   the binaries, MIB files, configuration files etc.  To change the location,
   the win32\net-snmp\net-snmp-config.h file needs to be modified by changing
   the INSTALL_BASE variable. 

   Note:
  
     All paths in net-snmp-config.h use the "/" UNIX pathname delimiter.
     If a drive letter is not specified, the current drive letter is assumed.

     For example: #define INSTALL_BASE "c:/usr".  

3. If you are using win32sdk, the Platform SDK must be enabled.  Edit the 
   the win32\net-snmp\net-snmp-config.h file and *change*:

        /* #undef HAVE_WIN32_PLATFORM_SDK */

   to:

        #define HAVE_WIN32_PLATFORM_SDK 1

4. Build the applications

   Static build (does not use NetSNMP.DLL)
   =======================================

   MS VC++ 6.0:
   ------------
   a. Open win32.dsw or win32sdk.dsw.
   b. Click "Build->Batch Build..."  
   c. Set Release and/or Debug in 'Project configurations' to suit.
   d. Click "ReBuild All".
   e. When building is done, View the Output window, clip and
      save to a text file if there is some information to share.
   f. Click "File->Close Workspace".

   MS VC++ 7.0+:
   -------------
   a.  Open win32.dsw or win32sdk.dsw.
   b.  Click "Yes to All" to convert the workspace
   c.  Click "Build->Configuration Manager" and select either Release or Debug for 
       'Active Solution Configuration' and click "Close"
   d.  Right-click the "libagent" project, and select "Rebuild"
   e.  Right-click the "libhelpers" project, and select "Rebuild"
   f.  Right-click the "libnetsnmptrapd" project, and select "Rebuild"
   g.  Right-click the "snmplib" project, and select "Rebuild"
   h.  Right-click the "netsnmpmibs(sdk)" project, and select "Rebuild"
   i.  Click "Build->Batch Build..." 
   j.  Set Release and/or Debug in 'Project configurations' to suit making
       sure libagent, libhelpers, libnetsnmptrapd, snmplib and netsnmpmibs are 
       NOT selected.
   k.  Click "Rebuild".
   l.  When building is done, View the Output window, clip and
       save to a text file if there is some information to share.
   m.  Click "File->Close Solution".

   Dynamic build (uses NetSNMP.DLL)
   ================================

   Complete the section 'Microsoft Visual C++ - Workspace - Building the DLL'.
   This will create the Net-SNMP library DLL which is needed by the 
   applications and will enable DLL support in net-snmp-config.h.

   MS VC++ 6.0:
   ------------
   a. Open win32.dsw or win32sdk.dsw.
   b. Click "Build->Batch Build..."  
   c. Set Release and/or Debug in 'Project configurations' to suit for the 
      applications.  Make sure the following are NOT selected:

      libagent
      libhelpers
      libsnmp
      netsnmpmib(sdk)
      libnetsnmptrapd

   d. Click "ReBuild All".
   e. When building is done, View the Output window, clip and
      save to a text file if there is some information to share.
   f. Click "File->Close Workspace".

   MS VC++ 7.0+:
   -------------
   a. Open win32.dsw or win32sdk.dsw.
   b. Click "Yes to All" to convert the workspace
   c. Click "Build->Configuration Manager" and select either Release or Debug for 
      'Active Solution Configuration' and click "Close"
   d. Click "Build->Batch Build..." 
   e. Set Release and/or Debug in 'Project configurations' to suit for the 
      applications.  Make sure the following are NOT selected:

      libagent
      libhelpers
      libsnmp
      netsnmpmib(sdk)
      libnetsnmptrapd

   f. Click "Rebuild".
   g. When building is done, View the Output window, clip and
      save to a text file if there is some information to share.
   h. Click "File->Close Solution".
  
5.  If the Perl modules are required, continue with the next section:
    'Microsoft Visual C++ - Building the Perl SNMP modules'.

    Otherwise, continue with the section: 
    'Microsoft Visual C++ - Installing'


***************************************************************************
*
* Microsoft Visual C++ - Workspace - Building the DLL
*
***************************************************************************

1.  Optional: Make a backup of the existing net-snmp-config.h which contains 
    settings for a static build of Net-SNMP:

    Copy win32\net-snmp\net-snmp-config.h to 
    win32\net-snmp\static-config.h.

2.  Open win32\net-snmp\net-snmp-config.h using a text editor.

3.  *Change* the following line which is located near the top of the file:

        /* #undef NETSNMP_USE_DLL */

    *to*

        #define NETSNMP_USE_DLL 1

4.  Optional: Make a backup of the new net-snmp-config.h which contains 
    settings for a DLL build of Net-SNMP:

    Copy win32\net-snmp\net-snmp-config.h to 
    win32\net-snmp\dll-config.h.

5. Build the DLL

   MS VC++ 6.0:
   ------------
   a. Open libsdll.dsw.
   b. Click "Build->Batch Build..."  
   c. Set Release and/or Debug in 'Project configurations' to suit.
   d. Click "Clean".  ** Do NOT skip this step. **
   e. Click "Build->Batch Build..."  
   f. Click "ReBuild All".
   g. When building is done, View the Output window, clip and
      save to a text file if there is some information to share.
   h. Click "File->Close Workspace".

   MS VC++ 7.0+:
   -------------
   a. Open libsdll.dsw.
   b. Click "Yes to All" to convert the workspace
   c. Click "Build->Batch Build..." 
   d. Set Release and/or Debug in 'Project configurations' to suit.
   e. Click "Clean".  ** Do NOT skip this step. **
   f. Click "Build->Batch Build..." 
   g. Click "Rebuild".
   h. When building is done, View the Output window, clip and
      save to a text file if there is some information to share.
   i. Click "File->Close Solution".


***************************************************************************
*
* Microsoft Visual C++ - Workspace - Building the Perl SNMP modules
*
***************************************************************************

The Perl modules should be compiled against the DLL version of snmplib.
Compiling against a static version is possible, but each module will
load it's own copy of the MIB, and sharing data between modules will
not be possible.  For example, the conf module tests will fail.

1.  Complete the section 'Microsoft Visual C++ - Building'.  This will build
    the applications.  

    Note:  SNMPD.EXE and SNMPTRAPD.EXE are required for running the tests 
           against the SNMP Perl module.

2.  Complete the section 'Microsoft Visual C++ - Workspace - Building the DLL'.
    This will create the Net-SNMP library DLL which is needed for the Perl 
    modules.  Note:  This step can be skipped if the DLL was already created
    in step 1.

3.  Install Net-SNMP as described in the 'Microsoft Visual C++ - Installing'
    section to install the applications, the DLL and the .lib files.

4.  Continue with the Win32 section of the Perl README file located in 
    perl\SNMP\README.


***************************************************************************
*
* Microsoft Visual C++ - Workspace - Installing
*
***************************************************************************

The install script "win32\install-net-snmp.bat" should be run after a
build is successful.  It copies the programs, MIB files, and development
components to an install directory named in the INSTALL_BASE variable.

1.  Complete the section 'Microsoft Visual C++ - Building'. 

2.  Open win32\install-net-snmp.bat using a text editor.

    The INSTALL_BASE variable must match the INSTALL_BASE compile constant
    defined in "win32\net-snmp\net-snmp-config.h", using these rules:

    a.  All paths in install-net-snmp.bat use the "\" DOS pathname delimiter.

        Example: set INSTALL_BASE="c:\usr".  

    b.  All paths in net-snmp-config.h use the "/" UNIX pathname delimiter.
        If a drive letter is not specified, the current drive letter is 
        assumed.

        Example: #define INSTALL_BASE "c:/usr".  

    Note: You may also modify "install-net-snmp.bat" in order to not install 
          the linking libraries, or the header files.

3.  Open a command prompt window.

4.  Cd to the base directory where this file README.win32 is located.

5.  Run win32\install-net-snmp.bat to install the programs.

    ## sample output from install-net-snmp.bat
    
    NOTE: Directory already exist messages are normal. If you are
          not building with OpenSSL, then DLL not found messages
          are normal.
    
    C:\net-snmp-5.1.1>    win32\install-net-snmp
    Remember to run this script from the base of the source directory.
    Creating "c:\usr" sub-directories
    A subdirectory or file c:\usr already exists.
    A subdirectory or file c:\usr\bin already exists.
    A subdirectory or file c:\usr\etc\snmp already exists.
    A subdirectory or file c:\usr\share\snmp\snmpconf-data
         already exists
    A subdirectory or file c:\usr\share\snmp\snmpconf-data\
         snmp-data already exists.
    A subdirectory or file c:\usr\share\snmp\snmpconf-data\
         snmpd-data already exists.
    A subdirectory or file c:\usr\share\snmp\snmpconf-data\
         snmptrapd-data already exists.
    A subdirectory or file c:\usr\lib already exists.
    A subdirectory or file c:\usr\mibs already exists.
    A subdirectory or file c:\usr\include already exists.
    A subdirectory or file c:\usr\include\net-snmp already 
         exists
    .
    A subdirectory or file c:\usr\include\ucd-snmp already 
         exists
    .
    Copying MIB files to "c:\usr"\mibs
    Copying compiled programs to "c:\usr"\bin
    Copying snmpconf files to "c:\usr"\share\snmp\snmpconf-
         data\snmp-data
    Copying link libraries to "c:\usr"\lib
    Copying header files to "c:\usr"\include
    Deleting debugging files from "c:\usr"
    Copying DLL files to "c:\usr"
    The system cannot find the file specified.
    Done copying files to "c:\usr"
    C:\net-snmp-5.1.1>
    
    ## END sample output from install-net-snmp.bat

6.  Add the bin folder (c:\usr\bin in the above example) to
    your system path.

7.  Test the installation.  For a simple test to see if Net-SNMP is working, 
    open a _new_ command prompt window, and type:

    snmptranslate -IR -Td linkDown

8.  If the folder that Net-SNMP was installed to is ever changed, modify the 
    system environment variables or registry keys as explained in the 
    'Configuration_Overview.html' file located in win32/dist/htmlhelp.


***************************************************************************
*
* Microsoft Visual C++ - Building with OpenSSL
*
***************************************************************************

OpenSSL is required to support the encryption capabilities in SNMPv3
(or SHA authentication).  The win32 version of OpenSSL can be built
from the sources or you can download a pre-compiled version.

Building from source:
=====================

 1. Install an assembler.  If you do not have the M$ assembler installed (MASM)
    you can get a free one(NASM) from:

	http://www.kernel.org/pub/software/devel/nasm


 2. Obtain the OpenSSL source from the link below. Follow instructions in 
    INSTALL.W32

	ftp://ftp.openssl.org/source/


 3. Once the OpenSSL libraries are built, you must copy them to the the MSVC 
    directory:

    a.  Copy folder inc32\openssl to the include folder of MSVC++

        Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
                  Vc7\include\openssl\*.h"
        Example: "C:\Program Files\Microsoft Visual Studio\
                  VC98\include\openssl\*.h"

    b.  Copy file out32dll\libeay32.lib to the lib folder of MSVC++

        Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
                  Vc7\lib\libeay32.lib"
        Example: "C:\Program Files\Microsoft Visual Studio\
                  VC98\lib\libeay32.lib"

    c.  Copy file out32dll\libeay32.dll to your %windir%\system32 folder

        Example: "C:\winnt\system32\libeay32.dll"

Using a pre-compiled version
============================

 1. Obtain the latest OpenSSL binary from the link below. 

	http://www.slproweb.com/products/Win32OpenSSL.html

 2. Install the package to c:\OpenSSL.

 3. Copy the header and library files to the the MSVC directory:

    a.  Copy folder c:\OpenSSL\include\openssl to the include folder of 
        MSVC++.

        Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
                  Vc7\include\openssl\*.h"
        Example: "C:\Program Files\Microsoft Visual Studio\
                  VC98\include\openssl\*.h"

    b.  Copy file c:\OpenSSL\lib\VC\libeay32.lib to the lib folder of MSVC++.

        Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
                  Vc7\lib\libeay32.lib"
        Example: "C:\Program Files\Microsoft Visual Studio\
                  VC98\lib\libeay32.lib"


Project changes
===============

 1. Edit the win32\net-snmp\net-snmp-config.h header file.  Add:

	#define NETSNMP_USE_OPENSSL 1

 2. Open Visual Studio, add the link line to the Project Settings
    for all the applications, and especially for the libsnmp_dll project,
    for as you know, a .DLL is an application.
    You MUST do this for libsdll.dsw, and either win32.dsw or win32sdk.dsw,
    whichever you use.

   MS VC++ 6.0:
   ------------
   a.  Click Project->Settings.  
   b.  Highlight the names of all projects except libsnmp, libagent, libhelpers,
       libnetsnmptrapd, netsnmpmibs, netsnmpmibssdk.
   c.  Select the Link section.
   d.  Add the next line to the 'Object/Library Modules' list for Debug and 
       Release versions:

         libeay32.lib 

   MS VC++ 7.0+:
   -------------
   a.  For each project (except libsnmp, libagent, libhelpers, libnetsnmptrapd,
       netsnmpmibs, netsnmpmibssdk), click Project->Properties. 
   b.  For Configuration, select 'Release'
   c.  Click Linker and then Input
   d.  Add to the 'Additional Dependencies' section:

         libeay32.lib 

   e.  For Configuration, select 'Debug'
   f.  Click Linker and then Input
   g.  Add to the 'Additional Dependencies' section:

         libeay32.lib 

 3. Continue with the section 'Microsoft Visual C++ - Building"


***************************************************************************
*
* Microsoft Visual C++ - Building with IPv6
*
***************************************************************************

The default build configuration supports SNMP over IPv4-based transports.
However, Windows XP and Windows 2000 include an IPv6-capable stack, which
can be used to provide SNMP over IPv6.  To enable IPv6, the Microsoft PSDK 
is required and the following changes to the Net-SNMP win32 Visual C++ 
configuration are needed:

Project changes
===============

 1. Edit the win32\net-snmp\net-snmp-config.h header file.  Change
    the single INET6 line from:

        /* #undef NETSNMP_ENABLE_IPV6 */

    to:

       	#define NETSNMP_ENABLE_IPV6 1

 2. Edit the win32\libsnmp_dll\libsnmp.def file.  All the IPv6 functions will
    be commented out and will need to be enabled by removing ';IPv6' from the
    beginning of each line.  

    For example, change:


        ;IPv6        netsnmp_udp6_parse_security

    to:

                netsnmp_udp6_parse_security

 3. Continue with the section 'Microsoft Visual C++ - Building"


***************************************************************************
*
* Microsoft Visual C++ - Building your own applications with snmplib
*
***************************************************************************

Linking in an snmplib built to use the Multithreaded DLL runtime library to 
an application configured for the Debug Multithreaded DLL runtime library 
results in a link error along the lines of 'defaultlib "MSVCRT" conflicts 
with use of other libs'.   If you receive a similar message, check that the
projects settings between library and application match up.

To successfully build your existing project with Net-SNMP libraries,
change the project settings FOR YOUR APPLICATION ONLY as follows:

   1. In the Link section, Select "Additional Libraries".
      Add netsnmp.lib for Release version.
      Add netsnmp_d.lib for Debug version.

   2. Remove all references to these libraries:
      libsnmp*.lib msvcrt*.lib libc*.lib oldnames.lib

   3. In the C++ section, Select "Code Generation".
      For Release, select /MD or "MultiThreaded DLL".
      For Debug, select /MDd or "Debug MultiThreaded DLL".

   4. Make sure "Ignore all default libraries" is NOT SET.

   5. Make sure "_MBCS" is included in your pre-processor defines.

Note: Some users may have better results compiling other packages that use
      the installed header files by removing the "mode_t" definition from
      net-snmp-config.h file in the installed directories.


***************************************************************************
*
* Microsoft Visual C++ - Extending the Agent
*
***************************************************************************

Assuming that the MIB compiler generated the my.h and my.c files for the
custom MIB "my", the following changes are required to extend the agent
using VC++:

   - Add the my.h and my.c files to your 'netsnmpmibs' project in VC++.
   - Next edit the '<sourcedir>\win32\mib_module_includes.h' file to
     add an include to your .h file.

        #include "mibgroup/my.h"

   - Next edit the '<sourcedir>\win32\mib_module_inits.h' file to add
     code to call your initialize function.

        if (should_init("my")) init_my();

That's all that is needed. Now go ahead and compile the 'netsnmpmibs'
and 'snmpd' project. And things should work just fine.


***************************************************************************
*
* GCC on Windows
*
***************************************************************************

There are two versions of GCC (the GNU Compiler Collection) in common use on
Microsoft Windows operating systems. This section will attempt to point the 
user to the information required to choose the one to best suit their needs.

Cygwin

The Cygwin compiler and toolkit provides a Unix style shell and environment
for Windows based systems. The cygwin1.dll provides a POSIX emulation layer 
that simplifies porting Unix / Linux applications to Windows. The Cygwin dlls
are required if an application is to be distributed. The dependency on the 
Cygwin dlls can be eliminated with the --mno-cygwin compiler flag, which uses
MinGW to compile a native Windows binary, but the benefit of the POSIX emulation
is lost. The Cygwin tool chain and documentation can be found at:

http://sources.redhat.com/cygwin/


MinGW

The MinGW compiler is a Windows native version of gcc. The tool chain links 
against existing Windows dlls found on most systems. Binaries compiled with MinGW
do not require additional libraries to be distributed. The MSyS environment 
provides a shell (Bash) and tools to emulate a Unix style build environment on 
Windows. The MinGW and MSyS tools and documentation can be found at:

http://www.mingw.org


***************************************************************************
*
* Cygwin - Building
*
***************************************************************************

An alternate way to build Net-SNMP for win32 is to use Cygnus's cygwin32
environment.  Information on the Cygnus cygwin32 environment is available
on the web at: http://sources.redhat.com/cygwin/.

Cygwin allows you to compile almost the complete agent and applications.
The following configure options creates a working set of programs:

./configure \
	--with-mib-modules="host agentx disman/event-mib examples/example" \
	--with-out-mib-modules=host/hr_network \
        --disable-embedded-perl --without-perl-modules \

If you want to use SNMPv3 auth and privacy features, add:
	--with-openssl="/usr" \

If you want to use IPv6 transports, add:
	--enable-ipv6 --with-transports="TCPIPv6 UDPIPv6"

Note:  The source code should *not* be in a folder that contains a space.  For
       example, compiling in your 'My Documents' or your Desktop (usually
       c:\Documents and Settings\xxxx\Desktop) is not supported.
        
This has been tested for Windows 98 and Windows NT 4.0.  In order for
the process part of the host resources MIB to work under NT you will need
to get hold of the PSAPI.DLL. This available under the download section
of www.microsoft.com.  The DLL is included with Windows 2000 and XP,
and is also part of the VC++ distribution.  The IPHLPAPI library is
part of the "Microsoft Platform SDK", which is also available from
www.microsoft.com.  See the section "Installing Platform SDK" for details.

Earlier releases of Cygwin may need to use the configure flag
	--with-libs="-lregex -libphlpapi"
but this regular expression support has since been incorporated
into the main Cygwin package, and it is no longer necessary to
include it separately.

If the folder that Net-SNMP was installed to is ever changed, modify the 
system environment variables or registry keys as explained in the 
'Configuration_Overview.html' file located in win32/dist/htmlhelp.


***************************************************************************
*
* MinGW - Building
*
***************************************************************************

Currently the tools and agent will compile on win32 platforms using the
MinGW tools with the MSyS environment. MinGW, MSyS and the associated
documentation can be downloaded from: http://www.mingw.org.

Compiling net-snmp with MinGW requires GNU regex. A GNU regex package that
builds under MinGW with MSyS is available at: 

        http://www.boedog.com/net-snmp/gnu_regex/regex-0-12-mingw-r2.tar.gz

Note:  The source code should *not* be in a folder that contains a space.  For
       example, compiling in your 'My Documents' or your Desktop (usually
       c:\Documents and Settings\xxxx\Desktop) is not supported.
       
1.  Build and install GNU regex following the instructions in the 
    regex-0-12-mingw-r2 README.

2.  If SNMPv3 encryption capabilities or SHA authentication is required,
    install the OpenSSL DLL and library file as described in the section 
    'MinGW - Building with OpenSSL" and then continue with step 3.

3.  Determine where you want the programs to be installed.  Currently
    you must use path segments no longer than 8 characters, and no
    embedded spaces are allowed. Due to limitations with Makefiles,
    you must also specify the MIBDIRS default that corresponds to
    a particular subtree from the base directory.

    Note: All paths use the "/" UNIX pathname delimiter.
          Also note that embedded spaces will NOT currently work
          with MinGW configure. Use the DOS 8.3 form of the path,

    For example:  Say that you want to install the programs in
    the directory "C:\usr".  

    Use BASEDIR=c:/usr

4.  Configure net-snmp using the configure flags as shown:

	BASEDIR=c:/usr

	./configure --prefix="$BASEDIR" \
		--with-mibdirs="$BASEDIR/share/snmp/mibs" \
	--with-mib-modules="agentx disman/event-mib examples/example" \
        --disable-embedded-perl --without-perl-modules \

    Note: while the Net-SNMP implementation of the host resources MIB is not
    supported when using MinGW, winExtDLL is supported. Via winExtDLL you can
    use Microsoft's implementation of the host resources MIB.

4.1. If you want to use IPv6 transports, add:
	--enable-ipv6 --with-transports="TCPIPv6 UDPIPv6" \


5.  Type "make" to compile the package. 

6.  Type "make install" to install the package.

7.  If the folder that Net-SNMP was installed to is ever changed, modify the 
    system environment variables or registry keys as explained in the 
    'Configuration_Overview.html' file located in win32/dist/htmlhelp.

       
***************************************************************************
*
* MinGW - Building with OpenSSL
*
***************************************************************************

OpenSSL is required to support the encryption capabilities in SNMPv3
(or SHA authentication).  A pre-compiled MinGW compatible version of
OpenSSL is available on the Internet.

Follow these steps to install OpenSSL:

 1. Obtain the latest OpenSSL binary from the link below. 

	http://www.slproweb.com/products/Win32OpenSSL.html

 2. Install the package to c:\OpenSSL

 3. Copy the header and library files to the the MinGW directory:

    a.  Copy the c:\OpenSSL\include\openssl folder to the include folder in 
        MinGW.

        Example: "C:\MinGW\include\openssl\*.h"

    b.  Copy c:\OpenSSL\lib\MinGW\libeay32.* to the lib folder in Mingw.

        Example: "C:\MinGW\lib\libeay32.a"
        Example: "C:\MinGW\lib\libeay32.def"

 4. Continue with the section 'MinGW - Building"


***************************************************************************
*
* Configuring Net-SNMP
*
***************************************************************************

Online documentation is available from the Net-SNMP home page at:

http://www.net-snmp.org/docs/

All configuration files should be placed in the INSTALL_BASE\etc\snmp folder.
The INSTALL_BASE folder is defined in the win32\net-snmp\net-snmp-config.h
file.  For example, c:\usr\etc\snmp.

Included is a Perl script called snmpconf which can be used to create 
configuration files.  Full documentation on using snmpconf is available from the
Net-SNMP web site at the above link.

To run snmpconf, first modify snmpconf.bat located in the bin folder where 
Net-SNMP is installed.  Modify the set MYPERLPROGRAM= line to contain the full 
path to the snmpconf Perl script.  For example:

  set MYPERLPROGRAM=c:\usr\bin\snmpconf

You can now run snmpconf using the standard command line such as:

  snmpconf -i

For detailed information on using environment variables and the registry to 
configure Net-SNMP, see the 'Configuration_Overview.html' file in 
win32/dist/htmlhelp.


***************************************************************************
*
* How to Register the Net-SNMP Agent and Trap Daemon as Windows services
*
***************************************************************************

The Agent (snmpd.exe) and trap daemon (snmptrapd.exe) can be run as a service
under Windows operating systems that have the Service Control Manager (SCM)
(Services Control Panel).  This includes Windows NT, 2000, XP and 2003.  
Windows 9x/Me do not have the SCM.

To allow snmpd.exe or snmptrapd.exe to run as a service, the programs need
to be registered with the SCM.  This is done by running the program once with
the -register command line switch from a command prompt.

If Net-SNMP was installed using the binary available from the Net-SNMP web site,
there will be shortcuts in the Start menu for registering and unregistering the 
agent and snmptrapd.

The synopsis for registering snmpd as a Windows service is:

  snmpd -register [OPTIONS] [LISTENING ADDRESSES]

The synopsis for registering snmptrapd as a Windows service is:

  snmptrapd -register [OPTIONS] [LISTENING ADDRESSES]

After registration, the services 'Net-SNMP Agent' and 'Net-SNMP Trap Handler'
will be available in the SCM.  The services can be started and stopped using 
the SCM (Services Control Panel) or from the command prompt using:

 net start "Net-SNMP Agent"
 net start "Net-SNMP Trap Handler"

and

 net stop "Net-SNMP Agent"
 net stop "Net-SNMP Trap Handler"

If any command line options are specified after the -register option, they 
will be included when the service starts.  For example, to register the
snmptrapd daemon and enable logging of traps to c:\usr\log\snmptrapd.log, 
enter the following command line:

 snmptrapd -register -Lf c:/usr/log/snmptrapd.log

Note:  Use Unix style slashes (/) for all paths.

For a complete list of command line options, consult the man pages, or use 
the -h switch:

 snmpd -h
 snmptrapd -h

Notes: -H will display all available snmpd.conf, snmptrapd.conf and snmp.conf
       configuration file options, not the command line options.

       Like all Net-SNMP applications, snmpd and snmptrapd will use the 
       SNMPCONFPATH and SNMPSHAREPATH environment variables when run as a 
       service.  The registry is the recommended method for defining these 
       variables due to a limitation in the Windows Service Control Manager 
       (SCM).  When running as a service, if any system environment variables
       are changed, the system will need to be rebooted to allow the services 
       to access the changed environment variables (see Microsoft knowledge 
       base article  821761).  Therefore, when running snmpd or snmptrapd as 
       a service, if SNMPCONFPATH or SNMPSHAREPATH is changed, a reboot will 
       be required after setting the environment variables, otherwise the 
       services may fail to start.  Using the registry to store the environment 
       variables eliminates this problem.  See the 'Configuration_Overview.html'
       file in win32/dist/htmlhelp for more information on using the registry.
    

Unregistering the services
--------------------------

To un-register the services, use the command line switch -unregister.  For
example:

 snmpd -unregister

 snmptrapd -unregister

Note:  Be sure to have all Service Control Panel windows closed when 
       unregistering, otherwise a reboot may be required to complete
       the removal.


Modifying the services
----------------------

To change the parameters that the SCM passes to snmpd or snmptrapd, the 
service must be unregistered, and then re-registered with the new options.

For example, to change the parameters that SCM passes to snmpd, open a 
command prompt window, CD to the directory where the snmpd program is located
(unless it is already in your PATH), identify the full set of parameters you 
desire, then type these two commands:

 snmpd -unregister
 snmpd -register [OPTIONS] [LISTENING ADDRESSES]

Note:  Be sure to have all Service Control Panel windows closed when 
       unregistering, otherwise a reboot may be required to complete
       the removal.


Registry Information
--------------------

Warning:  Improper use of the registry editor can damage to your operating
          system and should only be used by experienced users.

The following registry keys are used by snmpd and snmptrapd:

HKLM\SYSTEM\CurrentControlSet\Services\Net-SNMP Agent
HKLM\SYSTEM\CurrentControlSet\Services\Net-SNMP Trap Handler
       
Each command line option specified when regsitering the service will be added 
to the Parameters registry subkey for the service as a ParamX REG_SZ value 
where X starts at 1 and increments for each additional command line option.  
For example, '-Lf c:/usr/log/snmptrapd.log' would be:

 HKLM\SYSTEM\CurrentControlSet\Services\
   Net-SNMP Trap Handler\Parameters\Param1 -Lf

 HKLM\SYSTEM\CurrentControlSet\Services\
   Net-SNMP Trap Handler\Parameters\Param2 c:/usr/log/snmptrapd.log

To add additional command line switches or modify the existing ones, it is
recommended to unregister and re-register the services with the new command 
line options.  It is also possible to directly add or modify the ParamX values
in the registry.

Note:  The Parameters key is only created when there is at least one command
       line option specified when registering the service so it may need to be
       manually added if modifying using the registry editor.


***************************************************************************
*
* Notes on SET support for WIN32 ports
*
***************************************************************************

Requirements:

  Windows NT/2000/XP or later: Requires Windows NT 4.0 SP4 or later. 
  Windows 95/98/Me: Requires Windows 98 or later. 

Windows support for SET on following groups:

interfaces:
----------
ifAdminStatus is read-write. Status can be set with either 'up' or
'down'. (IE, 'testing' status is not supported.)


ip group:
--------
Scalar objects: 
ipForwarding:Currently windows supports only ON->OFF (IE,
enable->disable). For any other value, it returns with failure.

ipDefaultTTL: Supports value greater than or equal to 0. 

Table objects:
-------------
1. ipRouteTable:
   ------------
route_write.c implements this.

ipRouteDest: Setting this value, updates row with new ipRouteDest and all other
             entries will be same as old row. 
    EX:
    Consider there is an entry with ipRouteDest = 10.0.0.20
    Request, snmpset localhost private ip.ipRouteTable.ipRouteEntry.ipRouteDest.10.0.0.20 -a 10.0.0.16
    Updates that row with ipRouteDest = 10.0.0.16

ipRouteIfIndex:Write supported.

ipRouteMetric1: Supports value greater than or equal to -1

ipRouteMetric2, ipRouteMetric3, ipRouteMetric4, ipRouteMetric5: Even though
		call returns with success, Windows doesn't change these (as
		these are not used in Windows)

ipRouteNextHop: Write supported.

ipRouteType: Write Supported. If value is 2, IE 'invalid', it deletes the entry.

ipRouteAge: Whenever any row is updated this will be automatically reset.

ipRouteMask: Write Supported.

Creation of ipRouteTable row:
-----------------------------
snmpset request for non existent OID with ipRouteIfIndex, ipRouteMetric1, 
ipRouteNextHop and ipRouteMask varbinds, creates a row.

snmpset with create option is not supported, as row creation requires 
ipRouteIfIndex, ipRouteMetric1, ipRouteNextHop and ipRouteMask  in a single 
request.

Example to create a row:
-----------------------
Consider there is no entry for 10.0.0.18

snmpset localhost private ip.ipRouteTable.ipRouteEntry.ipRouteIfIndex.10.0.0.18 i 2 4.21.1.ipRouteMask.10.0.0.18 a 255.255.255.255 4.21.1.ipRouteNextHop.10.0.0.0 a 10.0.0.0 4.21.1.ipRouteMetric1.10.0.0.18 i 1

If ipRouteIfIndex is valid then creates row with:
ipRouteIfIndex = 2
ipRouteMask = 255.255.255.255
ipRouteNextHop = 10.0.0.0
ipRouteMetric1 = 1

2. ipNetToMediaTable:
--------------------
ipNetToMediaIfIndex: write supported
ipNetToMediaPhysAddress: write supported
ipNetToMediaNetAddress: write supported
ipNetToMediaType: write supported, setting with value 2, deletes the row.

Creation of row:
--------------------
snmpset request for non existent OID with ipNetToMediaPhysAddress varbind
creates a row.

snmpset with create option is not supported, as row creation requires 
ipNetToMediaPhysAddress in a request 
request.

Example to create a row:
-----------------------
Consider there is no entry for 10.0.0.32

snmpset localhost private ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress.2.10.0.0.32 x efcd12130103

If ipNetToMediaIfIndex is valid then creates row with:
ipNetToMediaIfIndex = 2
ipNetToMediaPhysAddress = ef:cd:12:12:01:03
ipNetToMediaNetAddress = 10.0.0.32
ipNetToMediaType = 4

TCP:
---
tcpConnState of tcpConnTable is writable and the only value which may
be set by a management station is deleteTCB(12)


***************************************************************************
*
* Notes on preprocessor defines for MSVC, MinGW and Cygwin
*
***************************************************************************

When adding Windows specific code, one or more of the following defines should
be used:

Define:                  Description:
-------                  ------------
WIN32                    Defined by MSVC & MinGW

_MSC_VER                 Defined by MSVC only (standard MSVC macro)

mingw32                  Defined by MinGW only

cygwin                   Defined by Cygwin only

HAVE_WIN32_PLATFORM_SDK  Should be defined if the Microsoft Platform SDK is
                         installed and registered with MSVC or enabled for
                         MinGW or Cygwin

MinGW and Cygwin do not require the Microsoft Platform SDK as they both should
contain most if not all of the functionality provided by the SDK.  When adding
code that requires the PSDK under MSVC, the following can usually be used:

 #if defined (HAVE_WIN32_PLATFORM_SDK) || defined (mingw32) || defined (cygwin)
                         
As listed above, Cygwin does NOT define WIN32.  When adding generic Windows 
code that will work with MSVC, MinGW and Cygwin, the following should be used:

 #if defined (WIN32) || defined (cygwin)

  
***************************************************************************
*
* Acknowledgements
*
***************************************************************************

These people are known to have contributed to one or more of
the Win32 platform ports.  If you have, and your name is not here,
please accept our apologies, and tell us so we can add your name.

David Perkins, Joe Marzot, Wes Hardaker, Niels Baggesen, Dave Shield,
Robert Story, Suvrit Sra, Mike Slifcak, Latha Prabhu, Nikolai Devereaux,
Alex Burger, Bernhard Penz, Andy Smith and Bart Van Assche.

