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__
|