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

📄 ne2000.h

📁 力天电子 dsp源码
💻 H
字号:
#ifndef	_ne2000_h_
#define	_ne2000_h_

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

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

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

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

#define IP4_ADDR(a,b,c,d) ((INT64U)(a & 0xff) << 48) | ((INT64U)(b & 0xff) << 32) | \
                          ((INT64U)(c & 0xff) << 16) | (INT64U)(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地址,以太网地址
};

//以太网帧                  
struct ethernet{
	//INT8U	status;				//接收状态
	//INT8U	nextpage;			//下一个页
	//INT16U	length;			//以太网长度,以字节为单位
	INT8U	destnodeid[6];		//目的网卡地址
	INT8U	sourcenodeid[6];	//源网卡地址
	INT8U	protocal_H;			//下一层协议
	INT8U	protocal_L;			//下一层协议
	INT8U	packet[300];		//包的内容
};

//IP包   仅当IHL=5时用 当不=5时作转换
struct ip{
	INT8U	head[14];			//以太网包头
	INT8U	verandihl;			//版本与头长度
	INT8U	typeofserver;		//服务类型
	INT8U	totallength_H;		//总长度
	INT8U	totallength_L;
	INT8U	frameindex_H;		//IP帧序号
	INT8U	frameindex_L;
	INT8U	segment_H;			//分段标志
	INT8U	segment_L;
	INT8U	ttl;				//生存时间
	INT8U	protocal;			//上层协议
	INT8U	crc_H;				//校验和
	INT8U	crc_L;
	INT8U	sourceip[4];		//源IP
	INT8U	destip[4];			//目的IP
	INT8U	packet[280];		//IP包的内容
};

struct ippacket{
	INT8U	head[14];			//以太网包头
	INT8U	ippacket[300];		//IP包的内容
};
                
struct arp{
	INT8U	head[14];  			//以太网头
	//arp报文的内容总长28字节
	INT8U	harewaretype_H;		//以太网为0x0001
	INT8U	harewaretype_L;
	INT8U	protocaltype_H;		//ip 为0X0800
	INT8U	protocaltype_L;
	INT8U	halength;			//=0X06
	INT8U	palength;			//=0X04
	INT8U	operation_H;		//操作  0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
	INT8U	operation_L;
	INT8U	sourcenodeid[6];	//源网卡地址
	INT8U	sourceip[4];		//源IP地址
	INT8U	destnodeid[6];		//目的网卡地址
	INT8U	destip[4];			//目的IP地址
}; 

struct icmp{					//包含在IP包中,是IP的上层为0X01的应用
	INT8U	head[14];			//以太网头
	INT8U	iphead[20];			//IP头
	INT8U	type;				//0X08 PING请求 0X00 PING应答
	INT8U	option;				//0X00 PING
	INT8U	crc_H;   
	INT8U	crc_L;    
	INT8U	id_H;
	INT8U	id_L;
	INT8U	seq_H;
	INT8U	seq_L;
	INT8U	icmpdata[276];
};

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

struct udp{
	INT8U	head[14];
	INT8U	iphead[10];
	INT8U	sourceport;			//源端口
	INT8U	destport;			//目的端口
	INT8U	length;    
	INT8U	crc;				//校验和 ,包括伪头部,udp头部,数据
	INT8U	udpdata[272];		//udp数据
};

struct tftprw{
	INT16U	head[9];
	INT16U	iphead[10];
	INT16U	udphead[4];
	INT16U	opencode;			//	读写代码标志
	INT8U	fileandmode[270];	//	文件名和操作类型
};

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

struct bytes{
	INT8U	bytebuf[336];
};
             
//所有协议的共用体
union netcard{
	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;
};

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;

#define IP_PACKET           0x0800
#define ARP_PACKET          0x0806
#define RARP_PACKET			0x8035

#define ARP_Request			0x0001
#define ARP_Answer			0x0002
#define RARP_Request		0x0003
#define RARP_Answer			0x0004

#define	MaxLenARPtable		0x02

#endif

⌨️ 快捷键说明

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