175 lines
6.2 KiB
Plaintext
175 lines
6.2 KiB
Plaintext
README.txt
|
||
|
||
Author: Murali R. Krishnan (MuraliK)
|
||
Created: 23 Feb, 1995
|
||
|
||
Revisions:
|
||
Date By Comments
|
||
----------------- -------- -------------------------------------------
|
||
|
||
|
||
Summary :
|
||
This file describes the files in the directory nt\private\net\snmp\gophmib
|
||
and details related to SNMP Extension Agent for Gopher Service
|
||
|
||
|
||
File Description
|
||
----------------------------------------------------------------------
|
||
README.txt This file.
|
||
makefile NT build files
|
||
sources NT build files
|
||
|
||
main.c Defines the standard entry points for SNMP Extensions
|
||
and the Gopher MIB object.
|
||
mib.h Defines types for generic resolve code for passive GET
|
||
and GET_NEXT verbs in MIB query. Also defined are a
|
||
few macros.
|
||
mib.c Functions required for generic MIB resolution.
|
||
|
||
dbgutil.h Header file containing declarations for debugging purposes
|
||
during development. It contains constants and macros.
|
||
pudebug.h Header file detailing debugging structures and
|
||
functions used by dbgutil.h
|
||
pudebug.c Implements functions declared in pudebug.h
|
||
|
||
During a -DDBG ( debug) build, we need pudebug.c to be included.
|
||
For Non-Debug builds, we dont need the pudebug.c and dbgutil.h
|
||
suitably modifies the declarations and macros for smoother compilation.
|
||
|
||
|
||
|
||
Implementation Details
|
||
-----------------------
|
||
|
||
Contents:
|
||
|
||
1. Comments on SNMP Extension APIs.
|
||
2. Structure of MIB For Internet Services
|
||
3. Components For SNMP MIBs and Installation
|
||
4. How To Test the SNMP MIBs?
|
||
5. Why separate mib.c and mib.h ( Implementation perspective).
|
||
|
||
|
||
|
||
1. Comments on SNMP Extension APIs:
|
||
In NT the SNMP Extension DLL should provide three entry points:
|
||
|
||
SnmpExtensionInit()
|
||
SnmpExtensionTrap()
|
||
SnmpExtensionQuery()
|
||
|
||
As to be expected :(, there is no SnmpExtensionCleanup() API, which means
|
||
that there can be no cleanup supplied. And hence for sure we better refrain
|
||
from using any dynamic memory, for cleanup is not possible. Maintaining state
|
||
is only using static variables.
|
||
|
||
Also as to be expected, there is no context information that gets circulated
|
||
in the calls. Hence the state has to be maintained at the DLL level. There is
|
||
no way of identifying the context of the call. Well, let us do it the Great
|
||
OLD Way. Throw in global variables and maintain state! Also note that
|
||
the DllInit function is not called, since the dll is loaded directly
|
||
into memory. This means that we can't also stick init and cleanup
|
||
code in the DllInit function.
|
||
|
||
|
||
2. Structure of MIB for Internet Services.
|
||
|
||
iso(1)
|
||
org(3)
|
||
dod(6)
|
||
internet(1)
|
||
private(4)
|
||
enterprises(1)
|
||
microsoft(311)
|
||
software(1)
|
||
InternetServer(7)
|
||
InetSrvCommon(1)
|
||
InetServStatistics(1)
|
||
FtpServer(2)
|
||
FtpStatistics(1)
|
||
HttpServer(3)
|
||
HttpStatistics(1)
|
||
GopherServer(4)
|
||
GopherStatistics(1)
|
||
|
||
|
||
For details about the counters under GopherServer, Please refer to
|
||
..\mibs\gophmib
|
||
|
||
|
||
3. Components For SNMP MIBs
|
||
|
||
a) A MIB File used to map the OIDs ( Object Identifiers) to human
|
||
readable strings. NT's mibs live in the directory
|
||
\nt\private\net\snmp\mibs. You can find gopherd.mib there.
|
||
|
||
b) A DLL that actually implements the MIBs. This DLL is responsible
|
||
for mapping the request ( Eg: GET <mib oid>) into a real value ( the
|
||
value of the object referenced by oid). This is alternatively called
|
||
as the SNMP Extension agent, called by the Extendible agents. This DLL
|
||
provides the SNMP Extension API entry points for calling. ( See
|
||
section 1 for APIs defined). This directory contains the files for the
|
||
gdmib.dll used as SNMP Extension agent ( Dir:
|
||
\nt\private\net\snmp\gophmib\). This dll should copied to the
|
||
directory specified in the registry entry specified below.
|
||
|
||
c) Registry Entries.
|
||
SNMP.EXE uses the registry entries to find the MIB DLLs. To
|
||
enable SNMP to find the new mib, create a new registry entry value under:
|
||
HKLM\System\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents
|
||
on the local machine. The name of the registry entry value is
|
||
irrelevant. The value of the entry created should point to another
|
||
registry entry containing all the details for the MIB being installed.
|
||
|
||
For Example: For the gdmib.dll, the entry created in above registry
|
||
value may be:
|
||
Server uses
|
||
SOFTWARE\Microsoft\InternetServer\GopherServerMIBAgent\CurrentVersion.
|
||
Under this entry create a REG_EXPAND_SZ value called "PathName" that
|
||
contains the full path to the GDMIB.DLL.
|
||
|
||
** Note that "Pathname" is treated as case sensitive!! **
|
||
|
||
|
||
4. How To Test the SNMP MIBs?
|
||
|
||
Build the SNMP Extension Agent DLL.
|
||
Make entries in the Registry pointing to the location of the DLL.
|
||
Start SNMP service.
|
||
Use SNMPUTIL to query values from the mib.
|
||
Syntax:
|
||
snmputil get localhost public <oid>
|
||
|
||
Eg:
|
||
<oid> ::= ".iso.org.dod.internet.private.enterprises.\
|
||
microsoft.software.InternetServer.GopherServer.\
|
||
GopherStatistics.{variable_name}.0"
|
||
|
||
or
|
||
<oid> ::= ".1.3.6.1.4.1.311.1.7.4.1.{number}.0".
|
||
|
||
Be sure to remember the trailing zero on either form. It's required.
|
||
|
||
|
||
|
||
5. Why separate mib.c and mib.h ( Implementation perspective).
|
||
|
||
The files mib.h and mib.c implement functions useful for resolving
|
||
MIB variable bindings for reading counter values from a standard
|
||
structure. The function support PDU ( Protocol Data Unit) Actions for
|
||
GET and GETNEXT. All other operations are unsupported. now.
|
||
|
||
Initial motivation for rewriting the code is from two facts:
|
||
|
||
1) Avoid usage of global variables in the mib.c module
|
||
( so that some one else who need to implement similar
|
||
functionality can use the same code.)
|
||
2) Eliminate the need and use of goto's. The code that existed
|
||
in ..\ftpmib\mib.c as of 2/24/1995 had a few goto's and long
|
||
winded code. This version hopefully addresses to remove some
|
||
of these and provide a implementation using hungarian naming
|
||
amongst other modifications.
|
||
|
||
|
||
|
||
|