summaryrefslogtreecommitdiffstats
path: root/private/ntos/tdi/isn/fwd/send.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/ntos/tdi/isn/fwd/send.h220
1 files changed, 220 insertions, 0 deletions
diff --git a/private/ntos/tdi/isn/fwd/send.h b/private/ntos/tdi/isn/fwd/send.h
new file mode 100644
index 000000000..e46651e13
--- /dev/null
+++ b/private/ntos/tdi/isn/fwd/send.h
@@ -0,0 +1,220 @@
+/*++
+
+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 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