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 ) 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 Eg: ::= ".iso.org.dod.internet.private.enterprises.\ microsoft.software.InternetServer.GopherServer.\ GopherStatistics.{variable_name}.0" or ::= ".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.