Leaked source code of windows server 2003
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:
routing\ip\wanarp\conn.h
Abstract:
Header for conn.c
Revision History:
AmritanR
--*/
//
// Pointer to the connection table. Protected by g_rlConnTableLock
//
PULONG_PTR g_puipConnTable;
//
// The current size of the connection table. Protected by g_rlConnTableLock
//
ULONG g_ulConnTableSize;
//
// Current count of various connections. Also protected by the g_rlConnTableLock
//
ULONG g_rgulConns[DU_ROUTER + 1];
//
// Initial size of the connection table
//
#define WAN_INIT_CONN_TABLE_SIZE 16
#define WAN_CONN_TABLE_INCREMENT 32
#define WANARP_CONN_LOOKASIDE_DEPTH 16
//
// Hint to the next free slot. Protected by g_rlConnTableLock
//
ULONG g_ulNextConnIndex;
//
// The lock protecting all the above
//
RT_LOCK g_rlConnTableLock;
//
// The dial in interface and adapter. The server adapter is the first
// adapter we find in the TCP/IP Parameters. The pointer is initialized
// at bind time and then is unchanged. The g_pServerInterface is protected
// by the g_rwlIfListLock
//
PUMODE_INTERFACE g_pServerInterface; PADAPTER g_pServerAdapter;
#include <packon.h>
//
// To remove the contexts, we will cast the Ethernet header to the following
// structure
//
typedef struct _ENET_CONTEXT_HALF_HDR { BYTE bUnused[2];
ULONG ulSlot;
}ENET_CONTEXT_HALF_HDR, *PENET_CONTEXT_HALF_HDR;
#include <packoff.h>
//++
//
// VOID
// InsertConnIndexInAddr(
// PBYTE pbyAddr,
// ULONG ulIndex
// )
//
// Inserts the index into the given ethernet address field
//
//--
#define InsertConnIndexInAddr(a,i) \
((PENET_CONTEXT_HALF_HDR)(a))->ulSlot = (i)
//++
//
// ULONG
// GetConnIndexFromAddr(
// PBYTE pbyAddr
// )
//
// Retrieves the index from the given ethernet address field
//
//--
#define GetConnIndexFromAddr(a) \
((PENET_CONTEXT_HALF_HDR)(a))->ulSlot
//++
//
// PCONN_ENTRY
// GetConnEntryGivenIndex(
// ULONG ulIndex
// )
//
// Retrieves the connection entry given the connection index
// The connection table must be locked for this call
// If an entry is found for the index, it is referenced and also
// locked (if it is a DU_CALLIN connection)
//
//--
#define GetConnEntryGivenIndex(i) \
(PCONN_ENTRY)(g_puipConnTable[(i)]); \ { \ PCONN_ENTRY __pTemp; \ __pTemp = (PCONN_ENTRY)g_puipConnTable[(i)]; \ if(__pTemp != NULL) \ { \ ReferenceConnEntry(__pTemp); \ } \ }
//
// The lookaside list for connection entries
//
extern NPAGED_LOOKASIDE_LIST g_llConnBlocks;
//++
//
// PCONN_ENTRY
// AllocateConnection(
// VOID
// )
//
// Allocate a connection entry from g_llConnBlocks
//
//--
#define AllocateConnection() \
ExAllocateFromNPagedLookasideList(&g_llConnBlocks)
//++
//
// VOID
// FreeConnection(
// PCONN_ENTRY pEntry
// )
//
// Free a connection entry to g_llConnBlocks
//
//--
#define FreeConnection(n) \
ExFreeToNPagedLookasideList(&g_llConnBlocks, (n))
VOID WanNdisStatus( NDIS_HANDLE nhHandle, NDIS_STATUS nsNdisStatus, PVOID pvStatusInfo, UINT uiStatusInfoSize );
VOID WanNdisStatusComplete( NDIS_HANDLE nhHandle );
NDIS_STATUS WanpLinkUpIndication( PNDIS_WAN_LINE_UP pInfoBuffer );
NDIS_STATUS WanpLinkDownIndication( PNDIS_WAN_LINE_DOWN buffer );
UINT WanDemandDialRequest( ROUTE_CONTEXT Context, IPAddr dwDest, IPAddr dwSource, BYTE byProtocol, PBYTE pbyBuffer, UINT uiLength, IPAddr dwHdrSrc );
PCONN_ENTRY WanpCreateConnEntry( DIAL_USAGE duUsage );
VOID WanIpCloseLink( PVOID pvAdapterContext, PVOID pvLinkContext );
VOID WanpDeleteConnEntry( PCONN_ENTRY pConnEntry );
VOID WanpNotifyRouterManager( PPENDING_NOTIFICATION pMsg, PUMODE_INTERFACE pInterface, PADAPTER pAdapter, PCONN_ENTRY pConnEntry, BOOLEAN bConnected );
VOID WanpFreePacketAndBuffers( PNDIS_PACKET pnpPacket );
PCONN_ENTRY WanpGetConnEntryGivenAddress( DWORD dwAddress );
ULONG WanpRemoveAllConnections( VOID );
BOOLEAN WanpIsConnectionTableEmpty( VOID );
|