|
|
/*++
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
|