| *************************************************************************** |
| * |
| * 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. |
| |