mirror of https://github.com/tongzx/nt5src
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.
80 lines
2.5 KiB
80 lines
2.5 KiB
/********************************************************************/
|
|
/** Microsoft LAN Manager **/
|
|
/** Copyright(c) Microsoft Corp., 1990-2000 **/
|
|
/********************************************************************/
|
|
/* :ts=4 */
|
|
|
|
#pragma once
|
|
|
|
extern CACHE_ALIGN IPSNMPInfo IPSInfo;
|
|
extern ICMPStats ICMPInStats;
|
|
extern ICMPStats ICMPOutStats;
|
|
|
|
typedef struct CACHE_ALIGN IPInternalPerCpuStats {
|
|
ulong ics_inreceives;
|
|
ulong ics_indelivers;
|
|
} IPInternalPerCpuStats;
|
|
|
|
#define IPS_MAX_PROCESSOR_BUCKETS 8
|
|
extern IPInternalPerCpuStats IPPerCpuStats[IPS_MAX_PROCESSOR_BUCKETS];
|
|
|
|
__forceinline
|
|
void IPSIncrementInReceiveCount(void)
|
|
{
|
|
#if !MILLEN
|
|
const ulong Index = KeGetCurrentProcessorNumber() % IPS_MAX_PROCESSOR_BUCKETS;
|
|
IPPerCpuStats[Index].ics_inreceives++;
|
|
#else
|
|
IPSInfo.ipsi_inreceives++;
|
|
#endif
|
|
}
|
|
|
|
__forceinline
|
|
void IPSIncrementInDeliverCount(void)
|
|
{
|
|
#if !MILLEN
|
|
const ulong Index = KeGetCurrentProcessorNumber() % IPS_MAX_PROCESSOR_BUCKETS;
|
|
IPPerCpuStats[Index].ics_indelivers++;
|
|
#else
|
|
IPSInfo.ipsi_indelivers++;
|
|
#endif
|
|
}
|
|
|
|
__inline
|
|
void IPSGetTotalCounts(IPInternalPerCpuStats* Stats)
|
|
{
|
|
ulong Index;
|
|
const ulong MaxIndex = MIN(KeNumberProcessors, IPS_MAX_PROCESSOR_BUCKETS);
|
|
|
|
RtlZeroMemory(Stats, sizeof(IPInternalPerCpuStats));
|
|
|
|
for (Index = 0; Index < MaxIndex; Index++) {
|
|
Stats->ics_inreceives += IPPerCpuStats[Index].ics_inreceives;
|
|
Stats->ics_indelivers += IPPerCpuStats[Index].ics_indelivers;
|
|
}
|
|
}
|
|
|
|
|
|
typedef struct RouteEntryContext {
|
|
uint rec_index;
|
|
struct RouteTableEntry *rec_rte;
|
|
} RouteEntryContext;
|
|
|
|
extern long IPQueryInfo(struct TDIObjectID *ID, PNDIS_BUFFER Buffer,
|
|
uint *Size, void *Context);
|
|
extern long IPSetInfo(struct TDIObjectID *ID, void *Buffer, uint Size);
|
|
extern long IPGetEList(struct TDIEntityID *Buffer, uint *Count);
|
|
|
|
extern ulong IPSetNdisRequest(IPAddr Addr, NDIS_OID OID, uint On,
|
|
uint IfIndex);
|
|
|
|
extern ulong IPAbsorbRtrAlert(IPAddr Addr, uchar Protocol, uint IfIndex);
|
|
|
|
extern BOOLEAN IsRtrAlertPacket(IPHeader UNALIGNED *Header);
|
|
|
|
extern NTSTATUS IPWakeupPattern(uint InterfaceContext,
|
|
PNET_PM_WAKEUP_PATTERN_DESC PtrnDesc,
|
|
BOOLEAN AddPattern);
|
|
|
|
extern long IPGetInterfaceFriendlyName(uint InterfaceContext,
|
|
PWCHAR Name, uint Size);
|