127 lines
3.5 KiB
C
127 lines
3.5 KiB
C
/********************************************************************/
|
|
/** Microsoft LAN Manager **/
|
|
/** Copyright(c) Microsoft Corp., 1990-2000 **/
|
|
/********************************************************************/
|
|
/* :ts=4 */
|
|
|
|
//** INFO.H - TDI Query/SetInfo and Action definitons.
|
|
//
|
|
// This file contains definitions for the file info.c.
|
|
//
|
|
|
|
#include "tcpinfo.h"
|
|
|
|
#define TL_INSTANCE 0
|
|
|
|
typedef struct CACHE_ALIGN TCPInternalStats {
|
|
ulong ts_inerrs;
|
|
ulong ts_insegs;
|
|
ulong ts_activeopens;
|
|
ulong ts_attemptfails;
|
|
ulong ts_currestab;
|
|
ulong ts_estabresets;
|
|
ulong ts_maxconn;
|
|
ulong ts_numconns;
|
|
ulong ts_passiveopens;
|
|
ulong ts_retranssegs;
|
|
ulong ts_rtoalgorithm;
|
|
ulong ts_rtomax;
|
|
ulong ts_rtomin;
|
|
ulong ts_outrsts;
|
|
ulong ts_outsegs;
|
|
} TCPInternalStats;
|
|
|
|
extern TCPInternalStats TStats;
|
|
|
|
typedef struct CACHE_ALIGN TCPInternalPerCpuStats {
|
|
ulong tcs_insegs;
|
|
ulong tcs_outsegs;
|
|
} TCPInternalPerCpuStats;
|
|
|
|
#define TCPS_MAX_PROCESSOR_BUCKETS 8
|
|
extern TCPInternalPerCpuStats TPerCpuStats[TCPS_MAX_PROCESSOR_BUCKETS];
|
|
|
|
__forceinline
|
|
void TCPSIncrementInSegCount(void)
|
|
{
|
|
#if !MILLEN
|
|
const ulong Index = KeGetCurrentProcessorNumber() % TCPS_MAX_PROCESSOR_BUCKETS;
|
|
TPerCpuStats[Index].tcs_insegs++;
|
|
#else
|
|
TStats.ts_insegs++;
|
|
#endif
|
|
}
|
|
|
|
__forceinline
|
|
void TCPSIncrementOutSegCount(void)
|
|
{
|
|
#if !MILLEN
|
|
const ulong Index = KeGetCurrentProcessorNumber() % TCPS_MAX_PROCESSOR_BUCKETS;
|
|
TPerCpuStats[Index].tcs_outsegs++;
|
|
#else
|
|
TStats.ts_outsegs++;
|
|
#endif
|
|
}
|
|
|
|
__inline
|
|
void TCPSGetTotalCounts(TCPInternalPerCpuStats* Stats)
|
|
{
|
|
ulong Index;
|
|
const ulong MaxIndex = MIN(KeNumberProcessors, TCPS_MAX_PROCESSOR_BUCKETS);
|
|
|
|
RtlZeroMemory(Stats, sizeof(TCPInternalPerCpuStats));
|
|
|
|
for (Index = 0; Index < MaxIndex; Index++) {
|
|
Stats->tcs_insegs += TPerCpuStats[Index].tcs_insegs;
|
|
Stats->tcs_outsegs += TPerCpuStats[Index].tcs_outsegs;
|
|
}
|
|
}
|
|
|
|
|
|
typedef struct TCPConnContext {
|
|
uint tcc_index;
|
|
|
|
// sizeof(TCPConnTableEntry) or sizeof(TCPConnTableEntryEx) used as a
|
|
// mean of knowing which structure we are returning.
|
|
//
|
|
uint tcc_infosize;
|
|
struct TCB *tcc_tcb;
|
|
} TCPConnContext;
|
|
|
|
C_ASSERT(sizeof(TCPConnContext) <= CONTEXT_SIZE);
|
|
|
|
#define TCB_STATE_DELTA 1
|
|
|
|
typedef struct UDPContext {
|
|
uint uc_index;
|
|
|
|
// sizeof(UDPEntry) or sizeof(UDPEntryEx) used as a means of knowing
|
|
// which structure we are returning.
|
|
//
|
|
uint uc_infosize;
|
|
struct AddrObj *uc_ao;
|
|
} UDPContext;
|
|
|
|
C_ASSERT(sizeof(UDPContext) <= CONTEXT_SIZE);
|
|
|
|
extern UDPStats UStats;
|
|
extern struct TDIEntityID *EntityList;
|
|
extern uint EntityCount;
|
|
extern CTELock EntityLock;
|
|
|
|
extern TDI_STATUS TdiQueryInformation(PTDI_REQUEST Request, uint QueryType,
|
|
PNDIS_BUFFER Buffer, uint *BufferSize, uint IsConn);
|
|
|
|
extern TDI_STATUS TdiSetInformation(PTDI_REQUEST Request, uint SetType,
|
|
PNDIS_BUFFER Buffer, uint BufferSize, uint IsConn);
|
|
|
|
extern TDI_STATUS TdiAction(PTDI_REQUEST Request, uint ActionType,
|
|
PNDIS_BUFFER Buffer, uint BufferSize);
|
|
|
|
extern TDI_STATUS TdiQueryInformationEx(PTDI_REQUEST Request,
|
|
struct TDIObjectID *ID, PNDIS_BUFFER Buffer, uint *Size, void *Context);
|
|
|
|
extern TDI_STATUS TdiSetInformationEx(PTDI_REQUEST Request,
|
|
struct TDIObjectID *ID, void *Buffer, uint Size);
|
|
|