windows-nt/Source/XPSP1/NT/net/tcpip/driver/tcp/info.h

127 lines
3.5 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/********************************************************************/
/** 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);