diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/tdi/isn/fwd/netbios.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/private/ntos/tdi/isn/fwd/netbios.h b/private/ntos/tdi/isn/fwd/netbios.h new file mode 100644 index 000000000..ffa6da1c4 --- /dev/null +++ b/private/ntos/tdi/isn/fwd/netbios.h @@ -0,0 +1,134 @@ +/*++ + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + ntos\tdi\isn\fwd\netbios.h + +Abstract: + Netbios packet processing + +Author: + + Vadim Eydelman + +Revision History: + +--*/ + +#ifndef IPXFWD_NETBIOS +#define IPXFWD_NETBIOS + +extern LIST_ENTRY NetbiosQueue; +extern KSPIN_LOCK NetbiosQueueLock; +extern WORK_QUEUE_ITEM NetbiosWorker; +extern BOOLEAN NetbiosWorkerScheduled; +extern ULONG NetbiosPacketsQuota; +extern ULONG MaxNetbiosPacketsQueued; +#define DEF_MAX_NETBIOS_PACKETS_QUEUED 256 + + +/*++ +******************************************************************* + I n i t i a l i z e N e t b i o s Q u e u e + +Routine Description: + Initializes the netbios bradcast queue +Arguments: + None +Return Value: + None + +******************************************************************* +--*/ +//VOID +//InitializeNetbiosQueue ( +// void +// ) +#define InitializeNetbiosQueue() { \ + InitializeListHead (&NetbiosQueue); \ + KeInitializeSpinLock (&NetbiosQueueLock); \ + ExInitializeWorkItem (&NetbiosWorker, &ProcessNetbiosQueue, NULL);\ + NetbiosWorkerScheduled = FALSE; \ + NetbiosPacketsQuota = MaxNetbiosPacketsQueued; \ +} + +/*++ +******************************************************************* + D e l e t e N e t b i o s Q u e u e + +Routine Description: + Deletes the netbios bradcast queue +Arguments: + None +Return Value: + None + +******************************************************************* +--*/ +VOID +DeleteNetbiosQueue ( + void + ); + + +/*++ +******************************************************************* + P r o c e s s N e t b i o s Q u e u e + +Routine Description: + Process packets in the netbios bradcast queue +Arguments: + Context - unused +Return Value: + None + +******************************************************************* +--*/ +VOID +ProcessNetbiosQueue ( + PVOID Context + ); + +/*++ +******************************************************************* + P r o c e s s N e t b i o s P a c k e t + +Routine Description: + Processes received netbios broadcast packet +Arguments: + None +Return Value: + None + +******************************************************************* +--*/ +VOID +ProcessNetbiosPacket ( + PINTERFACE_CB srcIf, + PPACKET_TAG pktTag + ); + + +#define QueueNetbiosPacket(pktTag) { \ + KIRQL oldIRQL; \ + KeAcquireSpinLock (&NetbiosQueueLock, &oldIRQL); \ + InsertTailList (&NetbiosQueue, &pktTag->PT_QueueLink); \ + KeReleaseSpinLock (&NetbiosQueueLock, oldIRQL); \ +} + +#define ScheduleNetbiosWorker() { \ + KIRQL oldIRQL; \ + KeAcquireSpinLock (&NetbiosQueueLock, &oldIRQL); \ + if (!NetbiosWorkerScheduled \ + && !IsListEmpty (&NetbiosQueue) \ + && EnterForwarder ()) { \ + NetbiosWorkerScheduled = TRUE; \ + ExQueueWorkItem (&NetbiosWorker, DelayedWorkQueue); \ + } \ + KeReleaseSpinLock (&NetbiosQueueLock, oldIRQL); \ +} + +#endif + |