windows-nt/Source/XPSP1/NT/net/tcpip/snmp/cache.c
2020-09-26 16:20:57 +08:00

111 lines
2.5 KiB
C

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
Abstract:
File contains the following functions
UpdateCache
Revision History:
Amritansh Raghav 6/8/95 Created
--*/
//
// Include files
//
#include "allinc.h"
PSZ
CacheToA(
DWORD dwCache
);
DWORD
UpdateCache(
DWORD dwCache
)
/*++
Routine Description:
Function used to update a cache. It checks to see if the last time
the cache was updated is greater than the time out (A value of 0
for the last time of update means the cache is invalid), calls the
function that loads the cache and then sets the last update time
Arguments:
dwCache This is one of the Cache Ids defined in
rtrmgr/defs.h. It is used to index into the
table of locks protecting the caches, the table
of function pointers that holds a pointer to a
function that loads the cache andthe table of
last update times
Returns:
NO_ERROR or some error code
--*/
{
DWORD dwResult = NO_ERROR;
LONG dwNeed;
LONG dwSpace;
TRACE1("Trying to update %s Cache",CacheToA(dwCache));
__try
{
EnterWriter(dwCache);
if((g_dwLastUpdateTable[dwCache] isnot 0) and
((GetCurrentTime() - g_dwLastUpdateTable[dwCache]) < g_dwTimeoutTable[dwCache]))
{
dwResult = NO_ERROR;
__leave;
}
TRACE1("%s Cache out of date",CacheToA(dwCache));
dwResult = (*g_pfnLoadFunctionTable[dwCache])();
if(dwResult isnot NO_ERROR)
{
TRACE1("Unable to load %s Cache\n",CacheToA(dwCache));
g_dwLastUpdateTable[dwCache] = 0;
__leave;
}
TRACE1("%s Cache loaded successfully\n",CacheToA(dwCache));
g_dwLastUpdateTable[dwCache] = GetCurrentTime();
dwResult = NO_ERROR;
}
__finally
{
ReleaseLock(dwCache);
}
return(dwResult);
}
PSZ
CacheToA(
DWORD dwCache
)
{
static PSZ cacheName[] = {
"System ",
"Interfaces",
"Ip Address Table",
"Ip Forward Table",
"Ip Net To Media table",
"Tcp Table",
"Udp Table",
"Arp Entity Table",
"Illegal Cache Number - ABORT!!!!"
};
return((((int) dwCache<0) or (dwCache >= NUM_CACHE - 1))?
cacheName[NUM_CACHE-1] : cacheName[dwCache]);
}