Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
ntos\tdi\isn\fwd\send.c
Abstract: Send routines
Author:
Vadim Eydelman
Revision History:
--*/ #ifndef IPXFWD_SEND
#define IPXFWD_SEND
typedef struct _INTERNAL_PACKET_TAG { LIST_ENTRY IPT_QueueLink; PNDIS_PACKET IPT_Packet; PUCHAR IPT_DataPtr; ULONG IPT_Length; PINTERFACE_CB IPT_InterfaceReference; IPX_LOCAL_TARGET IPT_Target; } INTERNAL_PACKET_TAG, *PINTERNAL_PACKET_TAG;
#define DEF_SPOOFING_TIMEOUT (120*60) // Seconds
extern ULONG SpoofingTimeout; extern LIST_ENTRY SpoofingQueue; extern KSPIN_LOCK SpoofingQueueLock; extern WORK_QUEUE_ITEM SpoofingWorker; extern BOOLEAN SpoofingWorkerActive; extern ULONG DontSuppressNonAgentSapAdvertisements; VOID Spoofer ( PVOID Context ); #define InitializeSendQueue() { \
InitializeListHead (&SpoofingQueue); \ KeInitializeSpinLock (&SpoofingQueueLock); \ ExInitializeWorkItem (&SpoofingWorker, Spoofer, NULL); \ SpoofingWorkerActive = FALSE; \ }
#define DeleteSendQueue() { \
while (!IsListEmpty (&SpoofingQueue)) { \ PPACKET_TAG pktTag = CONTAINING_RECORD (SpoofingQueue.Flink, \ PACKET_TAG, \ PT_QueueLink); \ RemoveEntryList (&pktTag->PT_QueueLink); \ if (pktTag->PT_InterfaceReference!=NULL) \ ReleaseInterfaceReference (pktTag->PT_InterfaceReference); \ FreePacket (pktTag); \ } \ }
/*++
******************************************************************* S e n d P a c k e t
Routine Description: Enqueues packets to be sent by IPX stack Arguments: dstIf - over which interface to send pktTag - packet to send Return Value: None
******************************************************************* --*/ VOID SendPacket ( PINTERFACE_CB dstIf, PPACKET_TAG pktTag );
/*++
******************************************************************* F w S e n d C o m p l e t e
Routine Description: Called by IPX stack when send completes asynchronously Arguments: pktDscr - descriptor of the completed packet status - result of send operation Return Value: None
******************************************************************* --*/ VOID IpxFwdSendComplete ( PNDIS_PACKET pktDscr, NDIS_STATUS NdisStatus );
/*++
******************************************************************* F w I n t e r n a l S e n d
Routine Description: Filter and routes packets sent by IPX stack Arguments: LocalTarget - the NicId and next hop router MAC address Context - preferred interface on which to send Packet - packet to be sent ipxHdr - pointer to ipx header inside the packet PacketLength - length of the packet fIterate - a flag to indicate if this is a packet for the iteration of which the Fwd takes responsibility - typically type 20 NetBIOS frames
Return Value:
STATUS_SUCCESS - if the preferred NIC was OK and packet passed filtering STATUS_NETWORK_UNREACHABLE - if the preferred was not OK or packet failed filtering STATUS_PENDING - packet was queued until connection is established ******************************************************************* --*/ NTSTATUS IpxFwdInternalSend ( IN OUT PIPX_LOCAL_TARGET LocalTarget, IN ULONG_PTR Context, IN PNDIS_PACKET pktDscr, IN PUCHAR ipxHdr, IN PUCHAR data, IN ULONG PacketLength, IN BOOLEAN fIterate );
/*++
*******************************************************************
P r o c e s s I n t e r n a l Q u e u e
Routine Description: Processes packets in the interface internal queue. Called when connection request completes Arguments: dstIf - interface to process Return Value: None ******************************************************************* --*/ VOID ProcessInternalQueue ( PINTERFACE_CB dstIf );
/*++
*******************************************************************
P r o c e s s E x t e r n a l Q u e u e
Routine Description: Processes packets in the interface external queue. Called when connection request completes Arguments: dstIf - interface to process Return Value: None ******************************************************************* --*/ VOID ProcessExternalQueue ( PINTERFACE_CB dstIf ); /*++
******************************************************************* D o S e n d
Routine Description: Prepares and sends packet. Interface lock must be help while callin this routine Arguments: dstIf - over which interface to send pktTag - packet to send Return Value: result returned by IPX
******************************************************************* --*/ NDIS_STATUS DoSend ( PINTERFACE_CB dstIf, PPACKET_TAG pktTag, KIRQL oldIRQL );
/*++
******************************************************************* P r o c e s s S e n t P a c k e t
Routine Description: Process completed sent packets Arguments: dstIf - interface over which packet was sent pktTag - completed packet status - result of send operation Return Value: None
******************************************************************* --*/ VOID ProcessSentPacket ( PINTERFACE_CB dstIf, PPACKET_TAG pktTag, NDIS_STATUS status ); #endif
|