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

📄 ne2000.h

📁 基于单片机的一款可裁减的tcpip协议
💻 H
字号:
#define  uint   unsigned int
#define  uchar  unsigned char
#define  ulong  unsigned long
union 	u {	 unsigned int 	word;
        	 struct{unsigned char 	high;unsigned char 	low;}bytes;//字节顺序为高位在前的2byte结构
		  };

union   w {  ulong 	dwords;
             struct {uint 	high ;uint 	 low;}words;
	  	     struct {uchar 	byte3;uchar  byte2;uchar 	byte1;uchar 	byte0;}bytes;
          };
union   Ethernet_Address_Type{
                      			uint 	words[3];
	              				uchar 	bytes[6];
                      		 };
union 	Ip_Address_Type{
                      	ulong 	dwords;
                      	uint 	words[2];
		      		  	uchar 	bytes[4];
                       };

/******************以太网帧**********************/
struct  ethernet {  uchar 	RecStatus;   		/*接收状态*/
                    uchar 	NextPage;        	/*下一个页*/
                    uint 	length;           	/*以太网长度,以字节为单位,*/
                    uint 	DestMacId[3];    	/*目的网卡地址*/
                    uint 	SourceMacId[3];   	/*源网卡地址*/
                    uint 	NextProtocal;       /*下一层协议*/
                    uchar 	packet[1518];     	/*包的内容*/
                   } ;
struct  retransmit {uchar 	RtStatus;  		    /*重发缓冲区状态*/
                    uchar 	timeout;        	/*超时时间值,单位为10毫秒,最大2.55秒*/
                    uint 	length;           	/*以太网长度,以字节为单位,*/
                    uint 	DestMacId[3];    	/*目的网卡地址*/
                    uint 	SourceMacId[3];	    /*源网卡地址*/
                    uint 	NextProtocal;       /*下一层协议 */
                    uchar 	packet[1518];       /*包的内容*/
                   }  ;

/*******************IP包,仅当IHL=5时用,当不=5时作转换*********/
struct ip { uint 	EtherHead[9];   /*以太网包头*/
            uchar 	VerandIphLen;   /*版本与头长度*/
            uchar 	ServerType;     /*服务类型*/
            uint 	TotalLen;       /*总长度*/
            uint 	FrameIndex;     /*IP帧序号*/
            uint 	Segment;        /*分段标志*/
            uchar 	ttl;            /*生存时间*/
            uchar 	NextProtocal;   /*下一层协议*/
            uint 	Crc;            /*校验和*/
            uint 	SourceIp[2];    /*源IP*/
            uint 	DestId[2];      /*目的IP*/
            uchar 	packet[1498];   /*IP包的内容*/
          };
struct IpPacket  { uint 	EtherHead[9]; 	/*以太网包头*/
                   uint 	IpPacket[720]; 	/*IP包的内容*/
                 };
struct arp     { uint 	EtherHead[9];       /*以太网头*//* arp报文的内容总长28字节*/
                                       
                 uint 	HardwareType;  	    /*以太网为0x0001*/
                 uint 	ProtocalType;   	/*ip 为0X0800*/
                 uchar 	HardwareLen;        /*=0X06*/
                 uchar 	ProtocalLen;        /*=0X04*/
                 uint 	Operation;         	/*操作  0X0001为请求   0X0002为应答  */
                                           	/*0X0003为反向地址请求 0X0004为反向地址应答*/
                 uint 	SourceMacId[3];   	/*源网卡地址*/
                 uint 	SourceIp[2];       	/*源IP地址*/
                 uint 	DestMacId[3];     	/*目的网卡地址*/
                 uint 	DestId[2];         	/*目的IP地址*/
                };

struct icmp {/*包含在IP包中,是IP的上层为0X01的应用*/
                uint 	EtherHead[9];       /*以太网头*/
                uint 	IpHead[10];  	   	/*IP头*/
                uchar 	type;  		       	/*0X08 PING请求 0X00 PING应答*/
                uchar 	option; 		   	/*0X00 PING*/
                uint 	Crc;
                uint 	id;
                uint 	seq;
                uchar 	icmpdata[1478];
              };

struct tcp {   uint 	EtherHead[9];
               uint 	IpHead[10];
               uint 	SourcePort;  	   	/*源端口*/
               uint 	DestPort;    	   	/*目的端口*/
               ulong 	SeqNum;  	   		/*顺序号*/
               ulong 	AckNum;  	   		/*确认号*/
               uchar 	offset;     	   	/*数据偏移量*/
               uchar 	control;    	   	/*连接控制*/
               uint 	window;      	   	/*流控*/
               uint 	Crc;         	   	/*校验和 ,包括伪头部,TCP头部,数据*/
               uint 	urg;               	/*紧急指针*/
               uchar 	tcpdata[1478];     	/*TCP数据*/
             };

struct udp {   uint 	EtherHead[9];
               uint 	IpHead[10];
               uint 	SourcePort; 	   /*源端口*/
               uint 	DestPort;    	   /*目的端口*/
               uint 	length;
               uint 	Crc;        	   /*校验和,包括伪头部,udp头部,数据*/
               uchar 	udpdata[1478];     /*udp数据*/
             };

     /*所有协议的共用体*/
union Netcard {struct 	{uchar 	 	bytebuf[1536];}bytes;
               struct 	{uint 	 	wordbuf[768];}words;
               struct 	ethernet    EtherFrame;
	       	   struct 	retransmit  ResendFrame;
               struct 	arp   		ArpFrame;
               struct 	icmp  		IcmpFrame;
               struct 	tcp   		TcpFrame;
               struct 	ip   		IpFrame;
	       	   struct 	udp   		UdpFrame;
               struct 	IpPacket 	IpPacket;
              };

struct Socket_Type{
                   	uint   	My_Port; 		 		//本机端口
		   			uint  	Dest_Port;		 		//对方端口
		   			uint  	Dest_Ip[2];	 			//对方ip
		   			uint  	Dest_Mac_Id[3]; 		//对方的以太网地址
		   			ulong 	IRS;			 		//初始化顺序号
                   	ulong 	ISS;			 		//我的初始化序列号
                   	ulong 	Rcv_Next;		 		//对方的顺序号
		   			ulong 	Send_Next;		 		//我的已经发送顺序号
                   	ulong 	Sent_UnAck;		 		//我的还没有确认顺序号
		   									 		//unsigned long dest_ack_number;
		   			uint 	Rcv_Window;		 		//对方的window大小
                   	uint 	Snd_Window; 		 	//我的window大小
        	   		uint 	Dest_Max_Seg_Size;		//对方接受的最大的数据包大小MTU
                   	uint 	My_Max_Seg_Size; 		//我能接受的最大的数据包大小
		   			ulong 	My_Wl1;		//seq
		   			ulong 	My_Wl2;		//ack
                   	uchar 	State;		//连接状态
		   			uchar 	Open;
                  };

/*tcp state define */

#define 	TCP_STATE_LISTEN        0
#define 	TCP_STATE_SYN_RCVD      1
#define 	TCP_STATE_SYN_SENT      2
#define 	TCP_STATE_ESTABLISHED   3
#define 	TCP_STATE_FIN_WAIT1     4
#define 	TCP_STATE_FIN_WAIT2     5
#define 	TCP_STATE_CLOSING       6
#define 	TCP_STATE_CLOSE_WAIT    7
#define 	TCP_STATE_LAST_ACK      8
#define 	TCP_STATE_CLOSED        9
#define 	TCP_STATE_TIME_WAIT     10
//tcp连接的标志位
#define 	TCP_FIN 0x01
#define 	TCP_SYN 0x02
#define 	TCP_RST 0x04
#define 	TCP_PSH 0x08
#define 	TCP_ACK 0x10
#define 	TCP_URG 0x20


/***    RTL8019's address deifne     ***/
#define dp668
#ifdef  dp668   //reg00- 10为isa网卡接口的寄存器地址300-31f
#define     RED_ADDR0   RTL8019AS_BASE_ADDRESS+0x00
#define     RED_ADDR1   RTL8019AS_BASE_ADDRESS+0x01
#define     RED_ADDR2   RTL8019AS_BASE_ADDRESS+0x02
#define     RED_ADDR3   RTL8019AS_BASE_ADDRESS+0x03
#define     RED_ADDR4   RTL8019AS_BASE_ADDRESS+0x04
#define     RED_ADDR5   RTL8019AS_BASE_ADDRESS+0x05
#define     RED_ADDR6   RTL8019AS_BASE_ADDRESS+0x06
#define     RED_ADDR7   RTL8019AS_BASE_ADDRESS+0x07
#define     RED_ADDR8   RTL8019AS_BASE_ADDRESS+0x08
#define     RED_ADDR9   RTL8019AS_BASE_ADDRESS+0x09
#define     RED_ADDRa   RTL8019AS_BASE_ADDRESS+0x0a
#define     RED_ADDRb   RTL8019AS_BASE_ADDRESS+0x0b
#define     RED_ADDRc   RTL8019AS_BASE_ADDRESS+0x0c
#define     RED_ADDRd   RTL8019AS_BASE_ADDRESS+0x0d
#define     RED_ADDRe   RTL8019AS_BASE_ADDRESS+0x0e
#define     RED_ADDRf   RTL8019AS_BASE_ADDRESS+0x0f
#define     RED_ADDR10   RTL8019AS_BASE_ADDRESS+0x10
#define     RED_ADDR18   RTL8019AS_BASE_ADDRESS+0x18
		#define	 	Reg00   XBYTE[RED_ADDR0]   
		#define 	Reg01   XBYTE[RED_ADDR1]
		#define 	Reg02   XBYTE[RED_ADDR2]
		#define 	Reg03   XBYTE[RED_ADDR3]
		#define 	Reg04   XBYTE[RED_ADDR4]
		#define 	Reg05   XBYTE[RED_ADDR5]
		#define 	Reg06   XBYTE[RED_ADDR6]
		#define 	Reg07   XBYTE[RED_ADDR7]
		#define 	Reg08   XBYTE[RED_ADDR8]
		#define 	Reg09   XBYTE[RED_ADDR9]
		#define 	Reg0a   XBYTE[RED_ADDRa]
		#define 	Reg0b   XBYTE[RED_ADDRb]
		#define 	Reg0c   XBYTE[RED_ADDRc]
		#define 	Reg0d   XBYTE[RED_ADDRd]
		#define 	Reg0e   XBYTE[RED_ADDRe]
		#define 	Reg0f   XBYTE[RED_ADDRf]
		#define 	Reg10   XBYTE[RED_ADDR10]
		#define 	Reg18   XBYTE[RED_ADDR18]

#endif

⌨️ 快捷键说明

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