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

📄 ne2000.h.bak

📁 CP2201和51单片机实现ARP ICMP IP UDP协议
💻 BAK
字号:


/*==============================================*/
//	CP220X net packet define
/*==============================================*/

#ifndef	_ne2000_h_
#define	_ne2000_h_

typedef unsigned char  INT8U;
typedef unsigned int	INT16U;
typedef unsigned long   INT32U;

struct net_node						//	本机节点信息
{
	INT32U	ip;						//	IP地址
	INT32U	mask;					//	子网掩码
	INT32U	gate;					//	网关
	INT16U	port;					//	端口号
	INT8U	mac[6];   				//	以太网地址
};

struct net_nodebytes
{
	INT8U	ipbytes[4];
	INT8U	maskbytes[4];
	INT8U	gatebytes[4];
	INT8U	portbytes[2];
	INT16U	macwords[3];
};

union NetNode{
	struct net_node node;
	struct net_nodebytes nodebytes;
};
	

#define IP4_ADDR(a,b,c,d) ((INT32U)(a & 0xff) << 24) | ((INT32U)(b & 0xff) << 16) | \
                          ((INT32U)(c & 0xff) << 8) | (INT32U)(d & 0xff)

union ethernet_address_type{
	INT16U	words[3];
	INT8U	bytes[6];
};

union ip_address_type{
	INT32U	dwords;
	INT16U	words[2];
	INT8U	bytes[4];
};

union arp_table_type{
	INT8U	bytes[12];
	INT16U	words[6];
	struct{
		INT8U	status;
		INT8U	ttl;
		union ip_address_type ip_address;
		union ethernet_address_type ethernet_address;
	}arp;							//状态,生存时间,ip地址,以太网地址
}; //12

//以太网帧                  
struct ethernet{
	//INT8U	status;				//接收状态 0
	//INT8U	nextpage;			//下一个页1
	//INT16U	length;				//以太网长度,以字节为单位   2-3
	INT8U	destnodeid[6];		//目的网卡地址4-9
	INT8U	sourcenodeid[6];		//源网卡地址10-15
	INT16U	protocal;			//下一层协议 16-17
	INT8U	packet[300];		//包的内容  18-318
}; //318
typedef struct{
	//INT8U	status;				//接收状态 0
	//INT8U	nextpage;			//下一个页1
	//INT16U	length;				//以太网长度,以字节为单位   2-3
	INT8U	destnodeid[6];		//目的网卡地址4-9
	INT8U	sourcenodeid[6];		//源网卡地址10-15
	INT16U	protocal;			//下一层协议 16-17
	//INT8U	packet[300];		//包的内容  18-318
}ethernet_head; //318

struct ip{
	INT16U	head[7];			//以太网包头  18  0-17
	INT8U	verandihl;			//版本与头长度 1
	INT8U	typeofserver;		        //服务类型 1
	INT16U	totallength;			//总长度 2
	INT16U	frameindex;		        //IP帧序号 2
	INT16U	segment;			//分段标志 2 
	INT8U	ttl;				//生存时间 1
	INT8U	protocal;			//下一层协议 1
	INT16U	crc;				//校验和 2
	INT8U	sourceip[4];			//源IP 4
	INT8U	destip[4];			//目的IP 4
	INT8U	packet[280];		//IP包的内容 280
}; //318

typedef struct{
	//INT16U	head[7];			//以太网包头  18  0-17
	INT8U	verandihl;			//版本与头长度 1
	INT8U	typeofserver;		        //服务类型 1
	INT16U	totallength;			//总长度 2
	INT16U	frameindex;		        //IP帧序号 2
	INT16U	segment;			//分段标志 2 
	INT8U	ttl;				//生存时间 1
	INT8U	protocal;			//下一层协议 1
	INT16U	crc;				//校验和 2
	INT8U	sourceip[4];			//源IP 4
	INT8U	destip[4];			//目的IP 4
	//INT8U	packet[280];		//IP包的内容 280
}ip_head;
struct ippacket{
	INT16U	head[7];			//以太网包头
	INT8U	ippacket[300];		//IP包的内容
};
                
struct arp{                                 //arp报文的内容总长28字节
	INT16U	head[7];  			//以太网头   0-13
	INT16U	harewaretype;		//以太网为0x0001   14-15
	INT16U	protocaltype;		//ip 为0X0800     16-17
	INT8U	halength;			//=0X06      18
	INT8U	palength;			//=0X041   19
	INT16U	operation;			//操作          20-21       2 0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
	INT8U	sourcenodeid[6];		//源网卡地址    22-27
	INT8U	sourceip[4];			//源IP地址4     28-31
	INT8U	destnodeid[6];		//目的网卡地址6         32-37
	INT8U	destip[4];			//目的IP地址4   38-41
}; 
typedef struct{                                 //arp报文的内容总长28字节
	//INT16U	head[7];  			//以太网头 18
	INT16U	harewaretype;		//以太网为0x0001  0-1
	INT16U	protocaltype;		//ip 为0X0800  2-3
	INT8U	halength;			//=0X06   4
	INT8U	palength;			//=0X041   5
	INT16U	operation;			//操作 2 0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答 6-7
	INT8U	sourcenodeid[6];		//源网卡地址6  8-13
	INT8U	sourceip[4];			//源IP地址4  14-17
	INT8U	destnodeid[6];		//目的网卡地址6    18-23
	INT8U	destip[4];			//目的IP地址4  24-27
}arp_head; 
struct icmp{						//包含在IP包中,是IP的上层为0X01的应用
	INT16U	head[7];			//以太网头0-13
	INT16U	iphead[10];			//IP头14-33
	INT8U	type;				//0X08 PING请求 0X00 PING应答42   34
	INT8U	option;				//0X00 PING   35
	INT16U	crc;                        //36-37
	INT16U	id;      //38-39
	INT16U	seq;    //40-41
	INT8U	icmpdata[272];
}; //318
typedef struct{						//包含在IP包中,是IP的上层为0X01的应用
	//INT16U	head[7];			//以太网头0-13
	//INT16U	iphead[10];			//IP头14-41
	INT8U	type;				//0X08 PING请求 0X00 PING应答42  0
	INT8U	option;				//0X00 PING  1
	INT16U	crc;      //2-3
	INT16U	id;        //4-5
	INT16U	seq;      //6-7
	//INT8U	icmpdata[272];
}icmp_head; //318

struct tcp{
	INT16U	head[7]; //18
	INT16U	iphead[10];//20
	INT16U	sourceport; //2			//源端口
	INT16U	destport;  //2			//目的端口
	INT16U	seqnumberH; //2		//顺序号
	INT16U	seqnumberL; //2
	INT16U	acknumberH; //2
	INT16U	acknumberL;  //2		//确认号
	INT8U	offset;	 //1			//数据偏移量
	INT8U	control; //1				//连接控制
	INT16U	window;	 //2		//流控
	INT16U	crc;	//2			//校验和 ,包括伪头部,TCP头部,数据
	INT16U	urg;	//2			//紧急指针
	INT8U	tcpdata[260];		//TCP数据
}; //318

struct udp{
	INT16U	head[7];  //18   以太网头  0-17
	INT16U	iphead[10]; //20 IP报头 18-37
	INT16U	sourceport;	//2	//源端口38-39
	INT16U	destport;	//2		//目的端口4
	INT16U	length;    //2
	INT16U	crc;		//2		//校验和 ,包括伪头部,udp头部,数据
	INT8U	udpdata[272];	//udp数据
}; //318
typedef struct{
	//INT16U	head[7];  //18   以太网头  0-17
	//INT16U	iphead[10]; //20 IP报头 18-37
	INT16U	sourceport;	//2	//源端口38-39
	INT16U	destport;	//2		//目的端口4
	INT16U	length;    //2
	INT16U	crc;		//2		//校验和 ,包括伪头部,udp头部,数据
	//INT8U	udpdata[272];	//udp数据
}udp_head; //318
struct tftprw{
	INT16U	head[9]; //18
	INT16U	iphead[10];  //20
	INT16U	udphead[4]; //8
	INT16U	opencode;  //2		//	读写代码标志
	INT8U	fileandmode[270];	//	文件名和操作类型
};// 318

struct tftpd{
	INT16U	head[7];    //18
	INT16U	iphead[10]; //20
	INT16U	udphead[4]; //8
	INT16U	opencode;		//2	读写代码标志
	INT16U	number;			//2	块编号或者差错码
	INT8U	tftpdata[268];	//	数据或者差错信息
}; //318

struct bytes{
	INT8U	bytebuf[336];
}; //336
             
//所有协议的共用体
typedef union {
	struct bytes bytedata;
	struct ethernet etherframe;	
	struct arp arpframe;
	struct icmp icmpframe;
	struct tcp tcpframe;  
	struct ip ipframe;
	struct udp udpframe;
	struct ippacket ippacket;
	struct tftprw tftprwframe;
	struct tftpd tftpdataframe;
} netcard;

typedef struct
{
	union ip_address_type	ipaddr;
	union ip_address_type	his_sequence;
	union ip_address_type	my_sequence;
	union ip_address_type	old_sequence;
	union ip_address_type	his_ack;
	INT16U	port;
	INT8U	timer;
	INT8U	inactivity;	 
	INT8U	state;
	INT8U	query[23];
}tcpconnection;
typedef struct
{
	INT8U xdata * buf;
	INT32U ipaddr;
	INT8U proto_id;
	INT16U  len;
} WAIT;


#define IP_PACKET        0x0800  // 0x0008
#define ARP_PACKET       0x0806   //0x0608
#define RARP_PACKET	      0x8035      //0x3580
#define	MaxLenARPtable	     0x02

#endif

⌨️ 快捷键说明

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