|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
wanarp\adapter.h
Abstract:
Header for adapter.c
Revision History:
AmritanR
--*/
#ifndef __WANARP_ADAPTER_H__
#define __WANARP_ADAPTER_H__
//
// Reader writer locks to protect the lists of interfaces and adapters
//
RW_LOCK g_rwlIfLock; RW_LOCK g_rwlAdapterLock;
//
// List of interfaces. Protected by g_rwlIfLock
//
LIST_ENTRY g_leIfList;
//
// List of adapters that are bound to wanarp but not added to IP.
// Protected by g_rwlAdapterLock. Adapters are put on this list when
// they are created (with a state of AS_FREE) and again when on an APC they
// are deleted from IP.
//
LIST_ENTRY g_leFreeAdapterList; ULONG g_ulNumFreeAdapters;
//
// List of adapters added to IP but not mapped. Protected by g_rwlAdapterLock.
// Adapters are put on this list when they are unmapped
// Adapters are removed from this list by the CloseAdapter callback which
// is invoked when we delete the adapter from IP on an APC
// Adapters on this list have a state of AS_ADDED
//
LIST_ENTRY g_leAddedAdapterList; ULONG g_ulNumAddedAdapters;
//
// List of adapters added to IP and mapped to an interface. Protected
// by g_rwlAdapterLock.
// Adapters are put on this list when they are mapped to an interface.
// This happens for DU_CALLOUT on LinkUp in which case they can be moved
// directly from the free list when there are no added adapters present.
// For DU_ROUTER this can happen on LinkUp or on DemandDialRequest.
// Since DemandDialRequest can occur at DPC, we can only map added
// adapters in that call.
// Adapters are removed when they are unmapped (on LinkDown or
// ProcessConnectionFailure). An adapter on this list can not be deleted
// Adapters on this list have a state of AS_MAPPED or AS_MAPPING
//
LIST_ENTRY g_leMappedAdapterList; ULONG g_ulNumMappedAdapters; ULONG g_ulNumDialOutInterfaces;
//
// List of adapters whose state is changing. Protected by g_rwlAdapterLock.
//
LIST_ENTRY g_leChangeAdapterList;
//
// The total number of adapters. Only changed via Interlocked operations.
//
ULONG g_ulNumAdapters;
//
// Stuff needed to maintain state. Only modified via InterlockedXxx
//
LONG g_lBindRcvd;
//
// NdisWan binding related info. All are read-only after initialization
//
UNICODE_STRING g_usNdiswanBindName;
#if DBG
ANSI_STRING g_asNdiswanDebugBindName;
#endif
NDIS_STRING g_nsSystemSpecific1;
NDIS_HANDLE g_nhNdiswanBinding;
//
// The description string for our interfaces
//
#define VENDOR_DESCRIPTION_STRING "WAN (PPP/SLIP) Interface"
#define VENDOR_DESCRIPTION_STRING_LEN (strlen(VENDOR_DESCRIPTION_STRING))
INT WanIpBindAdapter( IN PNDIS_STATUS pnsRetStatus, IN NDIS_HANDLE nhBindContext, IN PNDIS_STRING pnsAdapterName, IN PVOID pvSS1, IN PVOID pvSS2 );
NDIS_STATUS WanpOpenNdisWan( PNDIS_STRING pnsAdapterName, PNDIS_STRING pnsSystemSpecific1 );
VOID WanNdisOpenAdapterComplete( NDIS_HANDLE nhHandle, NDIS_STATUS nsStatus, NDIS_STATUS nsErrorStatus );
VOID WanpSetProtocolTypeComplete( NDIS_HANDLE nhHandle, struct _WANARP_NDIS_REQUEST_CONTEXT *pRequestContext, NDIS_STATUS nsStatus );
VOID WanpSetLookaheadComplete( NDIS_HANDLE nhHandle, struct _WANARP_NDIS_REQUEST_CONTEXT *pRequestContext, NDIS_STATUS nsStatus );
VOID WanpSetPacketFilterComplete( NDIS_HANDLE nhHandle, struct _WANARP_NDIS_REQUEST_CONTEXT *pRequestContext, NDIS_STATUS nsStatus );
VOID WanpLastOidComplete( NDIS_HANDLE nhHandle, struct _WANARP_NDIS_REQUEST_CONTEXT *pRequestContext, NDIS_STATUS nsStatus );
NTSTATUS WanpInitializeAdapters( PVOID pvContext );
NTSTATUS WanpCreateAdapter( IN GUID *pAdapterGuid, IN PUNICODE_STRING pusConfigName, IN PUNICODE_STRING pusDeviceName, OUT ADAPTER **ppNewAdapter );
PADAPTER WanpFindAdapterToMap( IN DIAL_USAGE duUsage, OUT PKIRQL pkiIrql, IN DWORD dwAdapterIndex, OPTIONAL IN PUNICODE_STRING pusNewIfName OPTIONAL );
NTSTATUS WanpAddAdapterToIp( IN PADAPTER pAdapter, IN BOOLEAN bServerAdapter, IN DWORD dwAdapterIndex, OPTIONAL IN PUNICODE_STRING pusNewIfName, OPTIONAL IN DWORD dwMediaType, IN BYTE byAccessType, IN BYTE byConnectionType );
VOID WanpUnmapAdapter( PADAPTER pAdapter );
VOID WanIpOpenAdapter( IN PVOID pvContext );
VOID WanIpCloseAdapter( IN PVOID pvContext );
VOID WanNdisCloseAdapterComplete( NDIS_HANDLE nhBindHandle, NDIS_STATUS nsStatus );
VOID WanpFreeBindResourcesAndReleaseLock( VOID );
INT WanIpDynamicRegister( IN PNDIS_STRING InterfaceName, IN PVOID pvIpInterfaceContext, IN struct _IP_HANDLERS * IpHandlers, IN struct LLIPBindInfo * ARPBindInfo, IN UINT uiInterfaceNumber );
NDIS_STATUS WanpDoNdisRequest( IN NDIS_REQUEST_TYPE RequestType, IN NDIS_OID Oid, IN PVOID pvInfo, IN UINT uiInBufferLen, IN PWANARP_NDIS_REQUEST_CONTEXT pRequestContext, IN PFNWANARP_REQUEST_COMPLETION_HANDLER pfnCompletionHandler OPTIONAL );
VOID WanNdisRequestComplete( IN NDIS_HANDLE nhHandle, IN PNDIS_REQUEST pRequest, IN NDIS_STATUS nsStatus );
PUMODE_INTERFACE WanpFindInterfaceGivenIndex( DWORD dwIfIndex );
VOID WanpRemoveSomeAddedAdaptersFromIp( PVOID pvContext );
VOID WanpRemoveAllAdaptersFromIp( VOID );
VOID WanpRemoveAllAdapters( VOID );
VOID WanpDeleteAdapter( IN PADAPTER pAdapter );
NDIS_STATUS WanNdisPnPEvent( NDIS_HANDLE nhProtocolBindingContext, PNET_PNP_EVENT pNetPnPEvent );
VOID WanNdisResetComplete( NDIS_HANDLE nhHandle, NDIS_STATUS nsStatus );
VOID WanNdisBindAdapter( PNDIS_STATUS pnsRetStatus, NDIS_HANDLE nhBindContext, PNDIS_STRING nsAdapterName, PVOID pvSystemSpecific1, PVOID pvSystemSpecific2 );
VOID WanNdisUnbindAdapter( PNDIS_STATUS pnsRetStatus, NDIS_HANDLE nhProtocolContext, NDIS_HANDLE nhUnbindContext );
VOID WanpCloseNdisWan( PVOID pvContext );
#endif // __WANARP_ADAPTER_H__
|