www.pudn.com > PPPOE.rar > protocol.h


 
//******************************************************************** 
//	ÈÕÆÚ:	2004/08/25 - 25:8:2004   15:55 
//	Ãûǰ:	tiamo 
//	ÃèÊö:	protocol 
//********************************************************************* 
 
#pragma once 
 
#define BIND_CONTEXT_SIG						MAKE_SIG('B','I','N','D') 
 
#define	BIND_CONTEXT_LOWER_ADAPTER_OPENED		0x00000001 
#define	BIND_CONTEXT_MAC_ADDRESS_GOT			0x00000002 
#define	BIND_CONTEXT_LINK_SPPED_GOT				0x00000004 
#define	BIND_CONTEXT_MAX_FRAME_SIZE_GOT			0x00000008 
#define	BIND_CONTEXT_BINDED						0x00000010 
#define	BIND_CONTEXT_LOWER_ADAPTER_CLOSED		0x00000020 
#define	BIND_CONTEXT_PACKET_FILTER_SET			0x00000040 
#define	BIND_CONTEXT_PACKET_FILTER_SET_NEEDED	0x00000080 
 
#define BIND_ALLOCATED							0x1 
#define BIND_LOWER_MINIPORT_OPENED				0x2 
#define BIND_LOWER_MINIPORT_CLOSING				0x3 
#define BIND_LOWER_MINIPORT_CLOSED				0x4 
#define BIND_ROMOVING							0x5 
#define BIND_FREEING							0x6 
 
// bind context 
typedef struct __tagBindContext 
{ 
	ULONG								m_ulSig;							// signature 
	LONG								m_lRefCount;						// ref count 
	NDIS_EVENT							m_evRemove;							// remove event 
	NDIS_SPIN_LOCK						m_lockSelf;							// lock  
	LIST_ENTRY							m_ltBindAnchor;						// link list 
	ULONG								m_ulFlags;							// flags 
	ULONG								m_ulBindState;						// bind state 
 
	NDIS_HANDLE							m_pOpenBlock;						// open block 
 
	NDIS_STATUS							m_statusCallback;					// callback status 
	NDIS_EVENT							m_evCallback;						// callback event 
 
	ULONG								m_ulLinkSpeed;						// link speed 
	ULONG								m_ulMaxFrameSize;					// lower miniport max frame size 
	ULONG								m_ulPacketFilter;					// packet filter 
 
	NDIS_REQUEST						m_ndisRequest;						// request 
	UCHAR								m_macAddress[ETH_ADDR_LEN];			// lower adapter's mac address 
	USHORT								m_bProcessingRecvPacket;			//  
 
	LIST_ENTRY							m_ltRecvPacketHead;					// received packet 
	LONG								m_lPacketNeedReturn;				// packet need return 
}BIND_CONTEXT,*PBIND_CONTEXT; 
 
// lock 
extern NDIS_SPIN_LOCK g_lockBind; 
 
// bind time 
extern BOOLEAN g_bIsTimeToBind; 
 
// set filter 
extern BOOLEAN g_bSetFilterAtBind; 
 
// list head 
extern LIST_ENTRY g_ltBindsHead; 
 
// public 
extern "C" 
{ 
	// protocol open adapter complete PASSIVE_LEVEL 
	VOID protocolOpenAdapterComplete(PBIND_CONTEXT pBindContext,NDIS_STATUS status,NDIS_STATUS openErrorStatus); 
 
	// protocol close adapter complete PASSIVE_LEVEL 
	VOID protocolCloseAdapterComplete(PBIND_CONTEXT pBindContext,NDIS_STATUS status); 
 
	// protocol send complete DISPTACH_LEVEL 
	VOID protocolSendComplete(PBIND_CONTEXT pBindContext,PNDIS_PACKET pPacket,NDIS_STATUS status); 
 
	// protocol transfer data complete DISPTACH_LEVEL 
	VOID protocolTransferDataComplete(PBIND_CONTEXT pBindContext,PNDIS_PACKET pPacket,NDIS_STATUS status,UINT uByteTransferred); 
 
	// protocol request complete DISPATCH_LEVEL 
	VOID protocolRequestComplete(PBIND_CONTEXT pBindContext,PNDIS_REQUEST pRequest,NDIS_STATUS status); 
 
	// protocol receive complete DISPATCH_LEVEL 
	VOID protocolReceiveComplete(PBIND_CONTEXT pBindContext); 
 
	// protocol status complete DISPATCH_LEVEL 
	VOID protocolStatusComplete(PBIND_CONTEXT pBindContext); 
 
	// protocol status DISPATCH_LEVEL 
	VOID protocolStatus(PBIND_CONTEXT pBindContext,NDIS_STATUS generalStatus,PVOID pStatusBuffer,UINT uStatusBufferSize); 
 
	// protocol receive DISPATCH_LEVEL 
	NDIS_STATUS protocolReceive(PBIND_CONTEXT pBindContext,NDIS_HANDLE MacReceiveContext,PVOID pHeaderBuffer,UINT uHeaderBufferSize,PVOID pLookAheadBuffer,UINT uLookaheadBufferSize,UINT uPacketSize); 
 
	// protocol receive packet DISPATCH_LEVEL 
	INT protocolReceivePacket(PBIND_CONTEXT pBindContext,PNDIS_PACKET pPacket); 
 
	// protocol bind adapter PASSIVE_LEVEL 
	VOID protocolBindAdapter(PNDIS_STATUS pStatus,NDIS_HANDLE hBindContext,PNDIS_STRING pDeviceName,PVOID pSys1,PVOID pSys2); 
 
	// protocol unbind adapter PASSIVE_LEVEL 
	VOID protocolUnbindAdapter(OUT PNDIS_STATUS pStatus,PBIND_CONTEXT pBindContext,NDIS_HANDLE hUnbindContext); 
 
	// protocol pnp event PASSIVE_LEVEL 
	NDIS_STATUS protocolPnPEvent(PBIND_CONTEXT pBindContext,PNET_PNP_EVENT pNetPnPEvent); 
 
	// init <= DISPATCH_LEVEL 
	VOID InitializeBindSystem(); 
 
	// shut down <= DISPATCH_LEVEL 
	VOID ShutdownBindSystem(); 
 
	// create bind PASSIVE_LEVEL 
	PBIND_CONTEXT CreateBind(); 
 
	// free bind <= DISPATCH_LEVEL 
	VOID FreeBind(PBIND_CONTEXT pBind); 
 
	// reference bind <= DISPATCH_LEVEL 
	VOID ReferenceBind(PBIND_CONTEXT pBind,BOOLEAN bAcquireSpinLock); 
 
	// dereference bind <= DISPATCH_LEVEL 
	VOID DereferenceBind(PBIND_CONTEXT pBind); 
 
	// query xxx PASSIVE_LEVEL 
	VOID QueryLowerMiniportForLinkSpeed(PBIND_CONTEXT pBind); 
 
	VOID QueryLowerMiniportForCurrentAddress(PBIND_CONTEXT pBind); 
 
	VOID QueryLowerMiniportForMaxFrameSize(PBIND_CONTEXT pBind); 
 
	VOID ChangeLowerMiniportPacketFilter(BOOLEAN bSetAtBind); 
 
	// set PASSIVE_LEVEL 
	VOID SetLowerMiniportPacketFilter(PBIND_CONTEXT pBind,BOOLEAN bSet); 
 
	// notify removal DISPATCH_LEVEL 
	VOID NotifyBindingRemoval(PBIND_CONTEXT pBind); 
}