Leaked source code of windows server 2003
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.
 
 
 
 
 
 

218 lines
5.9 KiB

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
nbflog.c
Abstract:
This module contains code which performs various logging activities:
o NbfLogRcvPacket
o NbfLogSndPacket
Author:
Chaitanya Kodeboyina 27-April-1998
Environment:
Kernel mode
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#if PKT_LOG
VOID
NbfLogRcvPacket(
PTP_CONNECTION Connection,
PTP_LINK Link,
PUCHAR Header,
UINT TotalLength,
UINT AvailLength
)
{
PKT_LOG_QUE *PktLogQueue;
PKT_LOG_ELM *PktLogItem;
ULONG BytesSaved;
LARGE_INTEGER TickCounts;
if (Connection == NULL) {
PktLogQueue = &Link->LastNRecvs;
IF_NBFDBG (NBF_DEBUG_PKTLOG) {
DbgPrint("Logging Recv Packet on LNK %08x: Hdr: %08x, TLen: %5d, ILen: %5d\n",
Link,
Header, TotalLength, AvailLength);
}
}
else {
PktLogQueue = &Connection->LastNRecvs;
IF_NBFDBG (NBF_DEBUG_PKTLOG) {
DbgPrint("Logging Recv Packet on CON %08x: Hdr: %08x, TLen: %5d, ILen: %5d\n",
Connection,
Header, TotalLength, AvailLength);
}
}
PktLogItem = &PktLogQueue->PktQue[PktLogQueue->PktNext++];
PktLogQueue->PktNext %= PKT_QUE_SIZE;
KeQueryTickCount(&TickCounts);
PktLogItem->TimeLogged = (USHORT) TickCounts.LowPart;
PktLogItem->BytesTotal = (USHORT) TotalLength;
PktLogItem->BytesSaved = (USHORT) AvailLength;
BytesSaved = AvailLength > PKT_LOG_SIZE ?
PKT_LOG_SIZE :
AvailLength;
RtlCopyMemory (PktLogItem->PacketData,
Header,
BytesSaved);
}
VOID
NbfLogSndPacket(
PTP_LINK Link,
PTP_PACKET Packet
)
{
PKT_LOG_QUE *PktLogQueue;
PKT_LOG_ELM *PktLogItem;
LARGE_INTEGER TickCounts;
PTP_CONNECTION Connection;
ULONG BytesSaved;
// Check if this is a packet on a connection
switch (Packet->Action) {
case PACKET_ACTION_CONNECTION:
case PACKET_ACTION_END:
ASSERT(Packet->Owner != NULL);
Connection = Packet->Owner;
break;
case PACKET_ACTION_IRP_SP:
ASSERT(Packet->Owner != NULL);
Connection = IRP_SEND_CONNECTION((PIO_STACK_LOCATION)(Packet->Owner));
break;
case PACKET_ACTION_NULL:
case PACKET_ACTION_RR:
Connection = NULL;
break;
default:
Connection = NULL;
IF_NBFDBG (NBF_DEBUG_PKTLOG) {
PVOID Caller1, Caller2;
RtlGetCallersAddress(&Caller1, &Caller2);
DbgPrint("Callers: @1: %08x, @2: %08x\n",
Caller1, Caller2);
}
ASSERT(FALSE);
}
if (Connection == NULL) {
PktLogQueue = &Link->LastNSends;
BytesSaved = sizeof(DLC_S_FRAME);
IF_NBFDBG (NBF_DEBUG_PKTLOG) {
DbgPrint("Logging Send Packet on LNK %08x: Hdr: %08x, TLen: %5d, ILen: %5d\n",
Link, &Packet->Header, Packet->NdisIFrameLength, BytesSaved);
}
}
else {
// Make sure connection is on this link
ASSERT(Connection->Link == Link);
PktLogQueue = &Connection->LastNSends;
BytesSaved = sizeof(DLC_I_FRAME) + sizeof(NBF_HDR_CONNECTION);
IF_NBFDBG (NBF_DEBUG_PKTLOG) {
DbgPrint("Logging Send Packet on CON %08x: Hdr: %08x, TLen: %5d, ILen: %5d\n",
Connection, &Packet->Header, Packet->NdisIFrameLength, BytesSaved);
}
}
PktLogItem = &PktLogQueue->PktQue[PktLogQueue->PktNext++];
PktLogQueue->PktNext %= PKT_QUE_SIZE;
PktLogItem->BytesTotal = (USHORT) Packet->NdisIFrameLength;
RtlCopyMemory (PktLogItem->PacketData,
&Packet->Header[Link->HeaderLength],
BytesSaved);
PktLogItem->BytesSaved = (USHORT) BytesSaved;
KeQueryTickCount(&TickCounts);
PktLogItem->TimeLogged = (USHORT) TickCounts.LowPart;
}
VOID
NbfLogIndPacket(
PTP_CONNECTION Connection,
PUCHAR Header,
UINT TotalLength,
UINT AvailLength,
UINT TakenLength,
ULONG Status
)
{
PKT_IND_QUE *PktIndQueue;
PKT_IND_ELM *PktIndItem;
ULONG BytesSaved;
LARGE_INTEGER TickCounts;
PktIndQueue = &Connection->LastNIndcs;
IF_NBFDBG (NBF_DEBUG_PKTLOG) {
DbgPrint("Indicate the client on CON %08x: Hdr: %08x, TLen: %5d, ILen: %5d, PLen: %5d, ST: %08x\n",
Connection, Header, TotalLength, AvailLength, TakenLength, Status);
}
PktIndItem = &PktIndQueue->PktQue[PktIndQueue->PktNext++];
PktIndQueue->PktNext %= PKT_QUE_SIZE;
KeQueryTickCount(&TickCounts);
PktIndItem->TimeLogged = (USHORT) TickCounts.LowPart;
PktIndItem->BytesTotal = (USHORT) TotalLength;
PktIndItem->BytesIndic = (USHORT) AvailLength;
PktIndItem->BytesTaken = (USHORT) TakenLength;
PktIndItem->IndcnStatus = Status;
BytesSaved = AvailLength > PKT_IND_SIZE ?
PKT_IND_SIZE :
AvailLength;
RtlCopyMemory (PktIndItem->PacketData,
Header,
BytesSaved);
}
#endif // PKT_LOG