312 lines
6.7 KiB
C
312 lines
6.7 KiB
C
|
/*++
|
||
|
|
||
|
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__
|