150 lines
3.1 KiB
C
150 lines
3.1 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ntos\tdi\isn\fwd\ddreqs.h
|
||
|
|
||
|
Abstract:
|
||
|
Management of demand dial request queues
|
||
|
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Vadim Eydelman
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
#ifndef _IPXFWD_DDREQS_
|
||
|
#define _IPXFWD_DDREQS_
|
||
|
|
||
|
// Connection requests to DIM
|
||
|
// Queue of request that need to be satisfied by DIM
|
||
|
extern LIST_ENTRY ConnectionRequestQueue;
|
||
|
// Queue of request IRPs posted by the router manager
|
||
|
extern LIST_ENTRY ConnectionIrpQueue;
|
||
|
|
||
|
/*++
|
||
|
I n i t i a l i z e C o n n e c t i o n Q u e u e s
|
||
|
|
||
|
Routine Description:
|
||
|
Initializes connection request and irp queues
|
||
|
|
||
|
Arguments:
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
//VOID
|
||
|
//InitializeConnectionQueues (
|
||
|
// void
|
||
|
// );
|
||
|
#define InitializeConnectionQueues() { \
|
||
|
InitializeListHead (&ConnectionIrpQueue); \
|
||
|
InitializeListHead (&ConnectionRequestQueue); \
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
F i l l C o n n e c t i o n R e q u e s t
|
||
|
|
||
|
Routine Description:
|
||
|
Fills the provided buffer with index of interface that needs
|
||
|
to be connected and packet that prompted the request
|
||
|
|
||
|
Arguments:
|
||
|
index - if index
|
||
|
packet - packet that prompted the request
|
||
|
data - pointer to IPX data (IPX header) inside of the packet
|
||
|
request - request buffer to fill
|
||
|
reqSize - size of request buffer
|
||
|
bytesCopied - bytesCopied into the request buffer
|
||
|
|
||
|
Return Value:
|
||
|
STATUS_SUCCESS - array was filled successfully
|
||
|
This routine assumes that there it is called only when there
|
||
|
are outstanding requests in the request queue
|
||
|
|
||
|
--*/
|
||
|
VOID
|
||
|
FillConnectionRequest (
|
||
|
IN ULONG index,
|
||
|
IN PNDIS_PACKET packet,
|
||
|
IN PUCHAR data,
|
||
|
IN OUT PFWD_DIAL_REQUEST request,
|
||
|
IN ULONG reqSize,
|
||
|
OUT PULONG bytesCopied
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
F a i l C o n n e c t i o n R e q u e s t s
|
||
|
|
||
|
Routine Description:
|
||
|
Cleans up on connection request failure
|
||
|
|
||
|
Arguments:
|
||
|
InterfaceIndex - index of interface that could not be connected
|
||
|
|
||
|
Return Value:
|
||
|
STATUS_SUCCESS - clean up was successfull
|
||
|
STATUS_UNSUCCESSFUL - interface with this index does not exist
|
||
|
|
||
|
--*/
|
||
|
NTSTATUS
|
||
|
FailConnectionRequest (
|
||
|
IN ULONG InterfaceIndex
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
Q u e u e C o n n e c t i o n R e q u e s t
|
||
|
|
||
|
Routine Description:
|
||
|
Adds request to connected the interface to the queue
|
||
|
|
||
|
Arguments:
|
||
|
ifCB - control block of the interface that needs to be
|
||
|
connected
|
||
|
packet - packet that prompted the connection request
|
||
|
data - pointer to actual data in the packet
|
||
|
oldIRQL - IRQL at which interface lock was acquired
|
||
|
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
Note that interface lock must be acquired before calling this
|
||
|
routine which will release it
|
||
|
|
||
|
--*/
|
||
|
VOID
|
||
|
QueueConnectionRequest (
|
||
|
PINTERFACE_CB ifCB,
|
||
|
PNDIS_PACKET packet,
|
||
|
PUCHAR data,
|
||
|
KIRQL oldIRQL
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
D e q u e u e C o n n e c t i o n R e q u e s t
|
||
|
|
||
|
Routine Description:
|
||
|
Removes conection requset for the interface from the queue
|
||
|
|
||
|
Arguments:
|
||
|
ifCB - control block of the interface that needs to be
|
||
|
removed
|
||
|
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
VOID
|
||
|
DequeueConnectionRequest (
|
||
|
PINTERFACE_CB ifCB
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|