⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdafx.h

📁 pppoe client
💻 H
📖 第 1 页 / 共 3 页
字号:

//**************************************************************************************
//	日期:	23:2:2004   
//	创建:	tiamo	
//	描述:	stdafx
//**************************************************************************************

#pragma once

extern "C"
{
	#define NDIS_TAPI_CURRENT_VERSION 0x00020000
	#include "ndis.h"
	#include "ndiswan.h"
	#include "ndistapi.h"
}

// driver name
#define DRIVER_NAME_IM "tiamo_pppoe"
#define PROTOCOL_NAME L"TCPPPOE"

// FSM state
#define FSM_IDLE									0x0
#define FSM_CLIENT_SEND_PADI						0x1
#define FSM_CLIENT_WAIT_FOR_PADO					0x2
#define FSM_CLIENT_SEND_PADR						0x3
#define FSM_CLIENT_WAIT_FOR_PADS					0x4

#define FSM_SERVER_SEND_PADS						0x5
#define FSM_SERVER_WAIT_FOR_ANSWER					0x6
#define FSM_SERVER_ANSWER_OK						0x7

#define FSM_SESSION									0x8
#define FSM_DEAD									0x9

// .....
#define PPPOE_MIN_ETH_FRAME_SIZE					14
#define PPPOE_MAX_ETH_FRAME_SIZE					1514
#define PPP_HEADER_LEN								6
#define PPPOE_MAX_FRAME_SIZE						1500
#define PPPOE_WAN_MAX_FRAME_SIZE					(PPPOE_MAX_ETH_FRAME_SIZE - 32)
#define PPPOE_HEADER_LEN							(PPP_HEADER_LEN + PPPOE_MIN_ETH_FRAME_SIZE)
#define PPPOE_MAX_DATA_SIZE							(PPPOE_MAX_FRAME_SIZE - PPP_HEADER_LEN)
#define PPPOE_MAX_PADI_DATA_SIZE					(PPPOE_MAX_FRAME_SIZE - PPP_HEADER_LEN - 0x10)

// for tag !!!already swapped
#define PPPOE_TAG_SERVICE							0x0101
#define PPPOE_TAG_AC								0x0201
#define PPPOE_TAG_HOST_UNIQUE						0x0301
#define PPPOE_TAG_AC_COOKIE							0x0401
#define PPPOE_TAG_RELAY_SESSION_ID					0x1001
#define PPPOE_TAG_SERVICE_NAME_ERROR				0x0102
#define PPPOE_TAG_AC_SYSTEM_ERROR					0x0202
#define PPPOE_TAG_GEN_ERROR							0x0302
#define PPPOE_TAG_AC_COOKIE_ERROR					0x0402

// for code
#define PPPOE_CODE_PAY_LOAD							0x00
#define PPPOE_CODE_PADT								0xa7
#define PPPOE_CODE_PADI								0x09
#define PPPOE_CODE_PADO								0x07
#define PPPOE_CODE_PADR								0x19
#define PPPOE_CODE_PADS								0x65

// for VER TYPE
#define PPPOE_VER									0x01
#define PPPOE_TYPE									0x01

// for ethernet type !!!already swapped
#define PPPOE_DISCOVERY								0x6388
#define PPPOE_SESSION								0x6488

#define htons(h)									(((h & 0xff) << 8 )|((h & 0xff00) >> 8))
#define htonl(h)									(((h & 0xff) << 24)|((h & 0xff00) << 8)|((h & 0xff0000) >> 8)|((h & 0xff000000) >> 24))

#define ntohs(n)									(((n & 0xff) << 8 )|((n & 0xff00) >> 8))
#define ntohl(n)									(((n & 0xff) << 24)|((n & 0xff00) << 8)|((n & 0xff0000) >> 8)|((n & 0xff000000) >> 24))

#if DBG
	#define drvDbgPrint DbgPrint("    "DRIVER_NAME_IM"!  ");DbgPrint

	#define DbgEnterFunction() DbgPrint("Enter function \""__FUNCTION__"\" with irql(0x%x)\n",KeGetCurrentIrql())

	#define DbgLeaveFunction() DbgPrint("Leave function \""__FUNCTION__"\" with irql(0x%x)\n",KeGetCurrentIrql())

	#define DbgLeaveFunctionWithStatus(status) DbgPrint("Leave function \""__FUNCTION__"\" with irql(0x%x),status = 0x%x\n",KeGetCurrentIrql(),status)
#else
	#define drvDbgPrint __noop

	#define DbgEnterFunction() __noop

	#define DbgLeaveFunction() __noop

	#define DbgLeaveFunctionWithStatus(status) __noop
#endif


#pragma pack(push)
#pragma pack(1)

// ppp tag
typedef struct __tagPPPTagHeader
{
	USHORT								m_usType;
	USHORT								m_usLen;
}PPP_TAG,*PPPP_TAG;

// ppp frame
typedef struct __tagPPPFrame
{
	UCHAR								m_ucVer:4;
	UCHAR								m_ucType:4;
	UCHAR								m_ucCode;
	USHORT								m_usSession;
	USHORT								m_usLen;
	UCHAR								m_ucData[1];
}PPP_FRAME,*PPPP_FRAME;

// pppoe frame
typedef struct __tagPPPOEFrame
{
	UCHAR								m_dstMac[6];
	UCHAR								m_srcMac[6];
	USHORT								m_usProtocolType;
	PPP_FRAME							m_pppFrame;
}PPPOE_FRAME,*PPPPOE_FRAME;
#pragma pack(pop)

// packet pool
typedef struct __tagPacketPool
{
	ULONG								m_ulSig;							// sig
	NDIS_SPIN_LOCK						m_lockSelf;							// lock
	ULONG								m_ulProtocolReservedLen;			// protocol reserved len
	ULONG								m_ulPacketsPerBlock;				// packets per block
	ULONG								m_ulTotalPackets;					// total packets
	ULONG								m_ulFreePackets;					// free packets
	ULONG								m_ulMaxFreeGuard;					// max free guard
	LIST_ENTRY							m_ltBlocks;							// blocks list
	LIST_ENTRY							m_ltFreePackets;					// free packets list
}PACKET_POOL,*PPACKET_POOL;

struct __tagPacketBlock;

// packet array item
typedef struct __tagPacketArrayItem
{
	LIST_ENTRY							m_ltFreePacket;						// free packet list
	__tagPacketBlock*					m_pPacketBlock;						// packet block
	PNDIS_PACKET						m_pNdisPacket;						// ndis packet
}PACKET_ARRAY_ITEM,*PPACKET_ARRAY_ITEM;

// packet block
typedef struct __tagPacketBlock
{
	LIST_ENTRY							m_ltBlocks;							// link list
	NDIS_HANDLE							m_hPacketPool;						// ndis packet pool handle
	PPACKET_POOL						m_pPacketPool;						// packet pool pointer
	ULONG								m_ulPackets;						// packets count
	ULONG								m_ulFreePackets;					// free packets
	PACKET_ARRAY_ITEM					m_arrayPacket[1];					// packet array
}PACKET_BLOCK,*PPACKET_BLOCK;

// buffer pool
typedef struct __tagBufferPool
{
	ULONG								m_ulSig;							// sig
	NDIS_SPIN_LOCK						m_lockSelf;							// lock
	ULONG								m_ulBufferSize;						// buffer size
	ULONG								m_ulBuffersPerBlock;				// buffers per block
	ULONG								m_ulTotalBuffers;					// total buffers
	ULONG								m_ulFreeBuffers;					// free buffers
	ULONG								m_ulMaxFreeGuard;					// max free guard
	LIST_ENTRY							m_ltBlocks;							// blocks list
	LIST_ENTRY							m_ltFreeBuffers;					// free packets list
}BUFFER_POOL,*PBUFFER_POOL;

struct __tagBufferBlock;

// buffer array item
typedef struct __tagBufferArrayItem
{
	LIST_ENTRY							m_ltFreeBuffer;						// free packet list
	__tagBufferBlock*					m_pBufferBlock;						// packet block
	PNDIS_BUFFER						m_pNdisBuffer;						// ndis packet
	UCHAR								m_pFrame[1];						// buffer
}BUFFER_ARRAY_ITEM,*PBUFFER_ARRAY_ITEM;

// buffer block
typedef struct __tagBufferBlock
{
	LIST_ENTRY							m_ltBlocks;							// link list
	NDIS_HANDLE							m_hBufferPool;						// ndis buffer pool handle
	PBUFFER_POOL						m_pBufferPool;						// packet pool pointer
	ULONG								m_ulBuffers;						// buffers count
	ULONG								m_ulFreeBuffers;					// free buffer
	BUFFER_ARRAY_ITEM					m_arrayBuffer[1];					// buffer array
}BUFFER_BLOCK,*PBUFFER_BLOCK;

#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_ltBinds;							// 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[6];					// lower adapter's mac address
	USHORT								m_bProcessingRecvPacket;			// 

	LIST_ENTRY							m_ltRecvPacket;						// received packet
	LONG								m_lPacketNeedReturn;				// packet need return
}BIND_CONTEXT,*PBIND_CONTEXT;

// packet flags
#define	PPPOE_PACKET_BUFFER_FROM_NDIS						0x00000001
#define	PPPOE_PACKET_BUFFER_FROM_POOL						0x00000002
#define	PPPOE_PACKET_FROM_POOL								0x00000004
#define	PPPOE_PACKET_BUFFER_CHAINED							0x00000008
#define	PPPOE_PACKET_NEED_RETURN_PACKET						0x00000010
#define	PPPOE_PACKET_NEED_CALL_SEND_COMPLETE				0x00000020
#define	PPPOE_PACKET_ERROR_TAG_RECV							0x00000040
#define	PPPOE_PACKET_BUFFER_REVERSED						0x00000080


// pppoe packet
typedef struct __tagPPPOEPacket
{
	LIST_ENTRY							m_ltPackets;						// link list
	LONG								m_lRefCount;						// ref count
	ULONG								m_ulFlags;							// flags

	PUCHAR								m_pServiceName;						// service name
	PUCHAR								m_pACName;							// ac name
	PUCHAR								m_pHostUnique;						// host unique
	PUCHAR								m_pACCookie;						// ac cookie
	PUCHAR								m_pRelaySessionId;					// relay session id
	PUCHAR								m_pError;							// error

	USHORT								m_usServiceName;
	USHORT								m_usACName;
	USHORT								m_usHostUnique;
	USHORT								m_usACCookie;
	USHORT								m_usRelaySessionId;
	USHORT								m_usError;

	ULONG								m_ulErrorTag;

	union
	{
		PPPPOE_FRAME					m_pFrame;							// frame buffer
		PUCHAR							m_pucFrame;
		PVOID							m_pRealBuffer;
	};
	union
	{
		PPPP_FRAME						m_pDataBuffer;						// data buffer
		PUCHAR							m_pucDataBuffer;
		PVOID							m_pBuffer;
	};
	
	PNDIS_PACKET						m_pNdisPacket;						// ndis packet
	PNDIS_BUFFER						m_pNdisBuffer;						// ndis buffer
	PPACKET_ARRAY_ITEM					m_pPacketItem;						// packet item
	PBIND_CONTEXT						m_pBindContext;						// bind context
	NDIS_STATUS							m_status;							// status
}PPPOE_PACKET,*PPPPOE_PACKET;

// timer item
typedef struct __tagPPPOETimerItem
{
	LIST_ENTRY							m_ltItem;							// list

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -