You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
883 lines
29 KiB
883 lines
29 KiB
/*
|
|
* HrSystem.c v0.10
|
|
* Generated in conjunction with Management Factory scripts:
|
|
* script version: SNMPv1, 0.16, Apr 25, 1996
|
|
* project: D:\TEMP\EXAMPLE\HOSTMIB
|
|
****************************************************************************
|
|
* *
|
|
* (C) Copyright 1995 DIGITAL EQUIPMENT CORPORATION *
|
|
* *
|
|
* This software is an unpublished work protected under the *
|
|
* the copyright laws of the United States of America, all *
|
|
* rights reserved. *
|
|
* *
|
|
* In the event this software is licensed for use by the United *
|
|
* States Government, all use, duplication or disclosure by the *
|
|
* United States Government is subject to restrictions as set *
|
|
* forth in either subparagraph (c)(1)(ii) of the Rights in *
|
|
* Technical Data And Computer Software Clause at DFARS *
|
|
* 252.227-7013, or the Commercial Computer Software Restricted *
|
|
* Rights Clause at FAR 52.221-19, whichever is applicable. *
|
|
* *
|
|
****************************************************************************
|
|
*
|
|
* Facility:
|
|
*
|
|
* Windows NT SNMP Extension Agent
|
|
*
|
|
* Abstract:
|
|
*
|
|
* This module contains the code for dealing with the get, set, and
|
|
* instance name routines for the HrSystem. Actual instrumentation code is
|
|
* supplied by the developer.
|
|
*
|
|
* Functions:
|
|
*
|
|
* A get and set routine for each attribute in the class.
|
|
*
|
|
* The routines for instances within the class.
|
|
*
|
|
* Author:
|
|
*
|
|
* D. D. Burns @ Webenable Inc
|
|
*
|
|
* Revision History:
|
|
*
|
|
* V1.00 - 04/17/97 D. D. Burns Genned: Thu Nov 07 16:39:21 1996
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
#include <windows.h>
|
|
#include <malloc.h>
|
|
|
|
#include <snmp.h>
|
|
|
|
#include <lmcons.h> /* for NET_API_STATUS */
|
|
#include <lmwksta.h> /* For NetWkStaGetInfo() */
|
|
#include <lmapibuf.h> /* For NetApiBufferFree()*/
|
|
#include <lmerr.h> /* For NERR_Success */
|
|
#include <winsock.h> /* For htons() */
|
|
|
|
#include "mib.h"
|
|
#include "smint.h"
|
|
#include "hostmsmi.h"
|
|
#include "user.h" /* Developer supplied include file */
|
|
#include "HMCACHE.H" /* For "hrSystemInitialLoadDevice" */
|
|
|
|
|
|
/*
|
|
* GetHrSystemUptime
|
|
* The amount of time since this host was last initialized.
|
|
*
|
|
* Gets the value for HrSystemUptime.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
| =============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemUptime
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-only TimeTicks
|
|
|
|
|
| "The amount of time since this host was last initialized. Note that this is
|
|
| different from sysUpTime in MIB-II [3] because sysUpTime is the uptime of
|
|
| the network management portion of the system."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| Win32 API function "GetTickCount" is used to obtain the value returned for a
|
|
| GET on this variable.
|
|
|
|
|
|============================================================================
|
|
| 1.3.6.1.2.1.25.1.1.0
|
|
| | |
|
|
| | *-hrSystemUptime
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemUptime(
|
|
OUT TimeTicks *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
|
|
*outvalue = GetTickCount();
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemUptime() */
|
|
|
|
|
|
/*
|
|
* GetHrSystemDate
|
|
* The host's notion of the local date and time of day.
|
|
*
|
|
* Gets the value for HrSystemDate.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
| =============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemDate
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-write DateAndTime
|
|
|
|
|
| "The host's notion of the local date and time of day."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| Win32 API function "GetLocalTime" is used to obtain the value returned for a
|
|
| GET on this variable.
|
|
|
|
|
| Since this variable is "read-write", this implies that the system time can
|
|
| be set by a SET request. This is done with a Win32 API function
|
|
| "SetLocalTime".
|
|
|
|
|
| <POA-1> Issuing "SetLocalTime" requires that the issuing process have the
|
|
| "SE_SYSTEMTIME_NAME" privilege which is not the default. Are there any
|
|
| security concerns about issuing the necessary Win32 API function call
|
|
| "AdjustTokenPrivileges" from inside the SNMP agent to enable setting of
|
|
| the system time? Any other problems?
|
|
|
|
|
| RESOLVED >>>>>>>
|
|
| <POA-1> Let's leave this read-only.
|
|
| RESOLVED >>>>>>>
|
|
|
|
|
|========================== From RFC1514 ====================================
|
|
|
|
|
| DateAndTime ::= OCTET STRING (SIZE (8 | 11))
|
|
| -- A date-time specification for the local time of day.
|
|
| -- This data type is intended to provide a consistent
|
|
| -- method of reporting date information.
|
|
| --
|
|
| -- field octets contents range
|
|
| -- _____ ______ ________ _____
|
|
| -- 1 1-2 year 0..65536
|
|
| -- (in network byte order)
|
|
| -- 2 3 month 1..12
|
|
| -- 3 4 day 1..31
|
|
| -- 4 5 hour 0..23
|
|
| -- 5 6 minutes 0..59
|
|
| -- 6 7 seconds 0..60
|
|
| -- (use 60 for leap-second)
|
|
| -- 7 8 deci-seconds 0..9
|
|
| -- 8 9 direction from UTC "+" / "-"
|
|
| -- (in ascii notation)
|
|
| -- 9 10 hours from UTC 0..11
|
|
| -- 10 11 minutes from UTC 0..59
|
|
| --
|
|
| -- Note that if only local time is known, then
|
|
| -- timezone information (fields 8-10) is not present.
|
|
|
|
|
|============================================================================
|
|
| 1.3.6.1.2.1.25.1.2.0
|
|
| | |
|
|
| | *-hrSystemDate
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemDate(
|
|
OUT DateAndTime *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
SYSTEMTIME localtime; // Where we retrieve current local time
|
|
USHORT year_networkbyteorder; // Network byte order of year
|
|
static
|
|
char octet_time[8]; // OCTET STRING format of "time"
|
|
|
|
GetLocalTime(&localtime);
|
|
|
|
year_networkbyteorder = htons(localtime.wYear);
|
|
|
|
//
|
|
// Format "dateandtime" according to RFC1514
|
|
//
|
|
octet_time[0] = (year_networkbyteorder & 0xFF);
|
|
octet_time[1] = (year_networkbyteorder >> 8);
|
|
octet_time[2] = (char) localtime.wMonth;
|
|
octet_time[3] = (char) localtime.wDay;
|
|
octet_time[4] = (char) localtime.wHour;
|
|
octet_time[5] = (char) localtime.wMinute;
|
|
octet_time[6] = (char) localtime.wSecond;
|
|
octet_time[7] = localtime.wMilliseconds / 100;
|
|
|
|
outvalue->length = 8;
|
|
outvalue->string = octet_time;
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemDate() */
|
|
|
|
|
|
/*
|
|
* GetHrSystemInitialLoadDevice
|
|
* The index of the hrDeviceEntry for the device from which this host is
|
|
* configured to load its initial operating system configurat
|
|
*
|
|
* Gets the value for HrSystemInitialLoadDevice.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
| =============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemInitialLoadDevice
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-write INTEGER (1..2147483647)
|
|
|
|
|
| "The index of the hrDeviceEntry for the device from which this host is
|
|
| configured to load its initial operating system configuration."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| <POA-2> It seems that RFC1514 is attempting to allow the setting and resetting
|
|
| of the default operating system to be booted thru the combination of this
|
|
| attribute and "hrSystemInitialLoadParameters" (below).
|
|
|
|
|
| While generic PC hardware typically boots from a hard disk partition that is
|
|
| going to wind up being labelled as drive "C:", these two variables speak to a
|
|
| more general situation in which a hardware bootstrap loader can be set to
|
|
| point to almost any system image on a "permanent file system" (to use the unix
|
|
| phrase). It is apparent that we must attempt to approximate this in some way.
|
|
|
|
|
| I note that a system file named "Boot.ini" resides on the bootable partition
|
|
| of an Intel NT system. The one on my system looks like:
|
|
|
|
|
| >>>>>>>>
|
|
| [boot loader]
|
|
| timeout=30
|
|
| default=multi(0)disk(0)rdisk(0)partition(1)\WINNT35
|
|
| [operating systems]
|
|
| multi(0)disk(0)rdisk(0)partition(1)\WINNT35="Windows NT Server Version 3.51"
|
|
| multi(0)disk(0)rdisk(0)partition(1)\WINNT35="Windows NT Server Version 3.51 [VGA mode]" /basevideo /sos
|
|
| <<<<<<<<
|
|
|
|
|
| The contents of this file seems to be the source of the menu that appears
|
|
| during the NT boot process. Programming a selection from this menu is a close
|
|
| approximation to the flexibility hinted at thru the combination of these
|
|
| two SNMP attributes, "hrSystemInitialLoadDevice" and
|
|
| "hrSystemInitialLoadParameters".
|
|
|
|
|
| For the purposes of "GET", given the "default" shown in the "Boot.ini" file
|
|
| above, it would seem that the string "multi(0)disk(0)rdisk(0)partition(1)"
|
|
| constitutes a passing resemblance to "hrSystemInitialLoadDevice" while the
|
|
| string "\WINNT35" seems to be a good candidate for the value of
|
|
| "hrSystemInitialLoadParameters" (where both of these are drawn from the value
|
|
| specified for "default" under "[boot loader]").
|
|
|
|
|
| For the purposes of "SET", we would be required to modify this file according
|
|
| to the values received. I note that the file on my system is write-protected
|
|
| and clearly this poses a problem if we allow the SNMP agent to attempt to
|
|
| modify it. Additionally, there is the problem of error-checking any value
|
|
| provided from an SNMP SET request (I do not know the exact semantic
|
|
| significance of "multi(0)disk(0)rdisk(0)partition(1)" and I do not know how
|
|
| to error-check a received value).
|
|
|
|
|
| RESOLVED >>>>>>>
|
|
| <POA-2> Call GetWindowsDirectory and work backwards from that (get the
|
|
| device name, e.g. D, then do a QueryDosDevice to get the underlying
|
|
| partition information). Much more accurate than trying to parse boot.ini,
|
|
| and portable to Alpha. Leave read-only.
|
|
| RESOLVED >>>>>>>
|
|
|============================================================================
|
|
| 1.3.6.1.2.1.25.1.3.0
|
|
| | |
|
|
| | *-hrSystemInitialLoadDevice
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemInitialLoadDevice(
|
|
OUT Integer *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
/*
|
|
| Fetch this magic index from static storage in "HRDEVENT.C".
|
|
*/
|
|
*outvalue = InitLoadDev_index;
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemInitialLoadDevice() */
|
|
|
|
|
|
|
|
/*
|
|
* SetHrSystemInitialLoadDevice
|
|
* The index of the hrDeviceEntry for the device from which this host is
|
|
* configured to load its initial operating system configurat
|
|
*
|
|
* Sets the HrSystemInitialLoadDevice value.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* invalue address of value to set the variable
|
|
* outvalue address to return the set variable value
|
|
* access Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_BADVALUE Set value not in range
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtset.ntc v0.10
|
|
*/
|
|
|
|
UINT
|
|
SetHrSystemInitialLoadDevice(
|
|
IN Integer *invalue ,
|
|
OUT Integer *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
|
|
return SNMP_ERRORSTATUS_NOSUCHNAME ;
|
|
|
|
} /* end of SetHrSystemInitialLoadDevice() */
|
|
|
|
|
|
/*
|
|
* GetHrSystemInitialLoadParameters
|
|
* This object contains the paramets (e.g. a pathname and parameter)
|
|
* supplied to the load device when requesting the initial operat
|
|
*
|
|
* Gets the value for HrSystemInitialLoadParameters.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
| =============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemInitialLoadParameters
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-write InternationalDisplayString (SIZE (0..128))
|
|
|
|
|
| "This object contains the parameters (e.g. a pathname and parameter) supplied
|
|
| to the load device when requesting the initial operating system configuration
|
|
| from that device."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| (See discussion for "hrSystemInitialLoadDevice" above).
|
|
|
|
|
| For initial version, we return a zero length string, and it is not SETable.
|
|
|
|
|
|============================================================================
|
|
| 1.3.6.1.2.1.25.1.4.0
|
|
| | |
|
|
| | *-hrSystemInitialLoadParameters
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemInitialLoadParameters(
|
|
OUT InternationalDisplayString *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
// (No parameter-string returned for initial release)
|
|
outvalue->length = 0;
|
|
outvalue->string = NULL;
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemInitialLoadParameters() */
|
|
|
|
|
|
/*
|
|
* SetHrSystemInitialLoadParameters
|
|
* This object contains the paramets (e.g. a pathname and parameter)
|
|
* supplied to the load device when requesting the initial operat
|
|
*
|
|
* Sets the HrSystemInitialLoadParameters value.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* invalue address of value to set the variable
|
|
* outvalue address to return the set variable value
|
|
* access Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_BADVALUE Set value not in range
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtset.ntc v0.10
|
|
*/
|
|
|
|
UINT
|
|
SetHrSystemInitialLoadParameters(
|
|
IN InternationalDisplayString *invalue ,
|
|
OUT InternationalDisplayString *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
return SNMP_ERRORSTATUS_NOSUCHNAME ;
|
|
|
|
} /* end of SetHrSystemInitialLoadParameters() */
|
|
|
|
/*
|
|
* GetHrSystemNumUsers
|
|
* The number of user sessions for which this host is storing state
|
|
* information.
|
|
*
|
|
* Gets the value for HrSystemNumUsers.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
| =============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemNumUsers
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-only Gauge
|
|
|
|
|
| "The number of user sessions for which this host is storing state information.
|
|
| A session is a collection of processes requiring a single act of user
|
|
| authentication and possibly subject to collective job control."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| <POA-3> This metric does not seem to be directly available thru a standard
|
|
| Win32 API function. I note that what appears to be logon information seems to
|
|
| be stored in the registry under:
|
|
|
|
|
| "HKEY_LOCAL_MACHINE\microsoft\windows nt\winlogon".
|
|
|
|
|
| + Should I use this as a source for this SNMP attribute?
|
|
| + If this registry entry is the proper place to acquire this information, what
|
|
| is the full and proper way to parse this entry? (By this I mean if more
|
|
| than one user is logged on, how does this single registry entry reflect
|
|
| multiple users?)
|
|
| + Does it reflect other users logged in via a network connection?
|
|
|
|
|
| RESOLVED >>>>>>>
|
|
| <POA-3> There is going to be either one interactive user or none. Use
|
|
| NetWkstaGetInfo to try to determine the name of the currently logged on
|
|
| interactive user and if this succeeds then it is the former.
|
|
| RESOLVED >>>>>>>
|
|
|
|
|
|=============================================================================
|
|
| 1.3.6.1.2.1.25.1.5.0
|
|
| | |
|
|
| | *-hrSystemNumUsers
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemNumUsers(
|
|
OUT Gauge *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
LPBYTE info; /* Where we get logged-on information */
|
|
|
|
|
|
// Attempt to get the number of logged-on users . . .
|
|
if (NetWkstaGetInfo(NULL, /* "Local" computer */
|
|
102, /* Info Level 102 */
|
|
&info) != NERR_Success) {
|
|
|
|
return SNMP_ERRORSTATUS_GENERR ;
|
|
}
|
|
|
|
|
|
/* Just return it */
|
|
*outvalue = ((LPWKSTA_INFO_102) info)->wki102_logged_on_users;
|
|
|
|
/* Free the Net API Buffer */
|
|
NetApiBufferFree(info);
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemNumUsers() */
|
|
|
|
|
|
/*
|
|
* GetHrSystemProcesses
|
|
* The number of process contexts currently loaded or running on this system.
|
|
*
|
|
* Gets the value for HrSystemProcesses.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
|=============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemProcesses
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-only Gauge
|
|
|
|
|
| "The number of process contexts currently loaded or running on this system."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| The sample-code "Process Viewer" (PVIEWER.EXE) that is part of the Win32 SDK
|
|
| infers a list of active processes from performance information that is stored
|
|
| in the registry. We use this approach (and borrowed code) to obtaining a
|
|
| count of active processes.
|
|
|
|
|
|-- (The foregoing approach is abandoned for a direct "beyond-the-veil" call
|
|
|-- to NtQuerySystemInfo()).
|
|
|=============================================================================
|
|
| 1.3.6.1.2.1.25.1.6.0
|
|
| | |
|
|
| | *-hrSystemNumUsers
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemProcesses(
|
|
OUT Gauge *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
ULONG process_count;
|
|
|
|
// If we failed to get the Process Count successfully . . .
|
|
if ((process_count = Spt_GetProcessCount()) == 0) {
|
|
return SNMP_ERRORSTATUS_GENERR ;
|
|
}
|
|
|
|
// Return the value
|
|
*outvalue = process_count;
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemProcesses() */
|
|
|
|
|
|
/*
|
|
* GetHrSystemMaxProcesses
|
|
* The maximum number of process contexts this system can support. If there
|
|
* is no fixed maximum, the value should be zero.
|
|
*
|
|
* Gets the value for HrSystemMaxProcesses.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* outvalue address to return variable value
|
|
* accesss Reserved for future security use
|
|
* instance address of instance name as ordered native
|
|
* data type(s)
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* Standard PDU error codes.
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Successful get
|
|
* SNMP_ERRORSTATUS_GENERR Catch-all failure code
|
|
* mibtget.c v0.10
|
|
*
|
|
|=============== From WebEnable Design Spec Rev 3 04/11/97==================
|
|
| hrSystemMaxProcesses
|
|
|
|
|
| ACCESS SYNTAX
|
|
| read-only INTEGER (0..2147483647)
|
|
|
|
|
| "The maximum number of process contexts this system can support. If there is
|
|
| no fixed maximum, the value should be zero. On systems that have a fixed
|
|
| maximum, this object can help diagnose failures that occur when this maximum
|
|
| is reached."
|
|
|
|
|
| DISCUSSION:
|
|
|
|
|
| My understanding is there is no fixed maximum, as the effective maximum is
|
|
| main-memory dependent. We return 0 for the value of this attribute.
|
|
|
|
|
|=============================================================================
|
|
| 1.3.6.1.2.1.25.1.7.0
|
|
| | |
|
|
| | *-hrSystemNumUsers
|
|
| *---hrSystem
|
|
*/
|
|
|
|
UINT
|
|
GetHrSystemMaxProcesses(
|
|
OUT Integer *outvalue ,
|
|
IN Access_Credential *access ,
|
|
IN InstanceName *instance )
|
|
|
|
{
|
|
*outvalue = 0;
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of GetHrSystemMaxProcesses() */
|
|
|
|
|
|
/*
|
|
* HrSystemFindInstance
|
|
*
|
|
* This routine is used to verify that the specified instance is
|
|
* valid.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* FullOid Address for the full oid - group, variable,
|
|
* and instance information
|
|
* instance Address for instance specification as an oid
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Instance found and valid
|
|
* SNMP_ERRORSTATUS_NOSUCHNAME Invalid instance
|
|
*
|
|
*/
|
|
|
|
UINT
|
|
HrSystemFindInstance( IN ObjectIdentifier *FullOid ,
|
|
IN OUT ObjectIdentifier *instance )
|
|
{
|
|
UINT tmp_instance ;
|
|
|
|
//
|
|
// Developer instrumentation code to find appropriate instance goes here.
|
|
// For non-tables, it is not necessary to modify this routine. However,
|
|
// if there is any context that needs to be set, it can be done here.
|
|
//
|
|
|
|
if ( FullOid->idLength <= HRSYSTEM_VAR_INDEX )
|
|
// No instance was specified
|
|
return SNMP_ERRORSTATUS_NOSUCHNAME ;
|
|
else if ( FullOid->idLength != HRSYSTEM_VAR_INDEX + 1 )
|
|
// Instance length is more than 1
|
|
return SNMP_ERRORSTATUS_NOSUCHNAME ;
|
|
else
|
|
// The only valid instance for a non-table are instance 0. If this
|
|
// is a non-table, the following code validates the instances. If this
|
|
// is a table, developer modification is necessary below.
|
|
|
|
tmp_instance = FullOid->ids[ HRSYSTEM_VAR_INDEX ] ;
|
|
if ( tmp_instance )
|
|
return SNMP_ERRORSTATUS_NOSUCHNAME ;
|
|
else
|
|
{
|
|
// the instance is valid. Create the instance portion of the OID
|
|
// to be returned from this call.
|
|
instance->ids[ 0 ] = tmp_instance ;
|
|
instance->idLength = 1 ;
|
|
}
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of HrSystemFindInstance() */
|
|
|
|
|
|
|
|
/*
|
|
* HrSystemFindNextInstance
|
|
*
|
|
* This routine is called to get the next instance. If no instance
|
|
* was passed than return the first instance (1).
|
|
*
|
|
* Arguments:
|
|
*
|
|
* FullOid Address for the full oid - group, variable,
|
|
* and instance information
|
|
* instance Address for instance specification as an oid
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* SNMP_ERRORSTATUS_NOERROR Instance found and valid
|
|
* SNMP_ERRORSTATUS_NOSUCHNAME Invalid instance
|
|
*
|
|
*/
|
|
|
|
UINT
|
|
HrSystemFindNextInstance( IN ObjectIdentifier *FullOid ,
|
|
IN OUT ObjectIdentifier *instance )
|
|
{
|
|
//
|
|
// Developer supplied code to find the next instance of class goes here.
|
|
// If this is a class with cardinality 1, no modification of this routine
|
|
// is necessary unless additional context needs to be set.
|
|
// If the FullOid does not specify an instance, then the only instance
|
|
// of the class is returned. If this is a table, the first row of the
|
|
// table is returned.
|
|
//
|
|
// If an instance is specified and this is a non-table class, then NOSUCHNAME
|
|
// is returned so that correct MIB rollover processing occurs. If this is
|
|
// a table, then the next instance is the one following the current instance.
|
|
// If there are no more instances in the table, return NOSUCHNAME.
|
|
//
|
|
|
|
if ( FullOid->idLength <= HRSYSTEM_VAR_INDEX )
|
|
{
|
|
instance->ids[ 0 ] = 0 ;
|
|
instance->idLength = 1 ;
|
|
}
|
|
else
|
|
return SNMP_ERRORSTATUS_NOSUCHNAME ;
|
|
|
|
return SNMP_ERRORSTATUS_NOERROR ;
|
|
|
|
} /* end of HrSystemFindNextInstance() */
|
|
|
|
|
|
|
|
/*
|
|
* HrSystemConvertInstance
|
|
*
|
|
* This routine is used to convert the object id specification of an
|
|
* instance into an ordered native representation. The object id format
|
|
* is that object identifier that is returned from the Find Instance
|
|
* or Find Next Instance routines. It is NOT the full object identifier
|
|
* that contains the group and variable object ids as well. The native
|
|
* representation is an argc/argv-like structure that contains the
|
|
* ordered variables that define the instance. This is specified by
|
|
* the MIB's INDEX clause. See RFC 1212 for information about the INDEX
|
|
* clause.
|
|
*
|
|
*
|
|
* Arguments:
|
|
*
|
|
* oid_spec Address of the object id instance specification
|
|
* native_spec Address to return the ordered native instance
|
|
* specification
|
|
*
|
|
* Return Codes:
|
|
*
|
|
* SUCCESS Conversion complete successfully
|
|
* FAILURE Unable to convert object id into native format
|
|
*
|
|
*/
|
|
|
|
UINT
|
|
HrSystemConvertInstance( IN ObjectIdentifier *oid_spec ,
|
|
IN OUT InstanceName *native_spec )
|
|
{
|
|
//
|
|
// Developer supplied code to convert instance identifer to native
|
|
// specification of instance names goes here.
|
|
//
|
|
|
|
return SUCCESS ;
|
|
|
|
} /* end of HrSystemConvertInstance() */
|
|
|
|
|
|
|
|
|
|
/*
|
|
* HrSystemFreeInstance
|
|
*
|
|
* This routine is used to free an ordered native representation of an
|
|
* instance name.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* instance Address to return the ordered native instance
|
|
* specification
|
|
*
|
|
* Return Codes:
|
|
*
|
|
*
|
|
*/
|
|
|
|
void
|
|
HrSystemFreeInstance( IN OUT InstanceName *instance )
|
|
{
|
|
|
|
//
|
|
// Developer supplied code to free native representation of instance name goes here.
|
|
//
|
|
|
|
} /* end of HrSystemFreeInstance() */
|
|
|