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

📄 inettype.h

📁 基于51单片机和RTL8019以太网控制器的嵌入式以太网控制程序。
💻 H
字号:
union sw
{
	unsigned int word;
	unsigned char bytes[2];
};
union w{
	unsigned long dwords;
	struct {unsigned int high;unsigned int low;}words;
	struct {unsigned char byte3;unsigned char byte2;unsigned char byte1;unsigned char byte0;}bytes;
};

union Ethernet_address{
	unsigned int words[3];
	unsigned char bytes[6];
};

union IP_address{
	unsigned long dwords;
	unsigned int words[2];
	unsigned char bytes[4];
};

union arp_table_type{
	unsigned char bytes[12];
	unsigned int words[6];
	struct{
		unsigned char status;
		unsigned char ttl;
		union IP_address ip_address;
		union Ethernet_address ethernet_address;
	}arp;							//状态,生存时间,ip地址,以太网地址
};
//------------------------------------------------------------------------
//以太网包结构
//------------------------------------------------------------------------
struct Ethernet{
	unsigned char	uStatus;		//接收状态
	unsigned char	uNextpage;		//下一个页
	unsigned int	uLength;		//以太网包长度
	unsigned int	uDestID[3];		//目的地址
	unsigned int	uSourceID[3];	//源地址
	unsigned int	protocal;		//协议/长度
	unsigned char	uPacket[1500];	//数据
};									//包最大大小:1518字节

//IP包   仅当IHL=5时用 当不=5时作转换
struct ip{
	unsigned int head[9];			//以太网包头,18字节
	unsigned char verandihl;		//版本与头长度,1
	unsigned char typeofserver;		//服务类型,1
	unsigned int totallength;		//总长度,2
	unsigned int frameindex;		//IP帧序号,2
	unsigned int segment;			//分段标志,2
	unsigned char ttl;				//生存时间,1
	unsigned char protocal;			//下一层协议,1
	unsigned int crc;				//校验和,2
	unsigned int sourceip[2];		//源IP,4
	unsigned int destip[2];			//目的IP,4
	unsigned char packet[1480];		//IP包的内容,1480
};									//包最大大小:1518字节

struct ippacket{
	unsigned int head[9];			//以太网包头
	unsigned int ippacket[750];		//IP包的内容
};									//包最大大小:1518字节

struct arp{
	unsigned int head[9];  			//以太网头
//arp报文的内容总长28字节
	unsigned int harewaretype;		//以太网为0x0001
    unsigned int protocaltype;		//ip 为0X0800
    unsigned char halength;			//=0X06
    unsigned char palength;			//=0X04
    unsigned int operation;			//操作  0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
    unsigned int sourcenodeid[3];	//源网卡地址
	unsigned int sourceip[2];		//源IP地址
    unsigned int destnodeid[3];		//目的网卡地址
	unsigned int destip[2];			//目的IP地址
};

struct icmp{						//包含在IP包中,是IP的上层为0X01的应用
	unsigned int head[9];			//以太网头
    unsigned int iphead[10];		//IP头
    unsigned char type;				//0X08 PING请求 0X00 PING应答
    unsigned char option;			//0X00 PING
    unsigned int crc;
    unsigned int id;
    unsigned int seq;
    unsigned char icmpdata[1472];
};									//包最大大小:1518字节

struct tcp{
	unsigned int head[9];			//以太网头    18
    unsigned int iphead[10];       //             20
    unsigned int sourceport;		//源端口       2
    unsigned int destport;			//目的端口     2
    unsigned long seqnumber;		//顺序号       4
	unsigned long acknumber;		//确认号       4
    unsigned char offset;			//数据偏移量   1
    unsigned char control;			//连接控制     1
    unsigned int window;			//流控         2
    unsigned int crc;				//校验和 ,包括伪头部,TCP头部,数据    2
    unsigned int urg;				//紧急指针                              2
    unsigned char tcpdata[1460];	//TCP数据                               1460
};									//包最大大小:1518字节

struct udp{
	unsigned int head[9];			//以太网头,18
    unsigned int iphead[10];		//20
    unsigned int sourceport;		//源端口,2
    unsigned int destport;			//目的端口,2
    unsigned int length;			//2
    unsigned int crc;				//校验和 ,包括伪头部,udp头部,数据
    unsigned char udpdata[1472];	//udp数据
};									//包最大大小:1518

//所有协议的共用体
union netcard{
	struct {unsigned char  bytebuf[1518];}bytes;	//原代码中1518的值为1536,理解如下,因为发送爷共12页,12*256=3072,除以2即为1536,正好两个包
    struct{ unsigned int wordbuf[759];}words;
    struct Ethernet etherframe;
    struct arp arpframe;
    struct icmp icmpframe;
    struct tcp tcpframe;
    struct ip ipframe;
	struct udp udpframe;
    struct ippacket ippacket;
};
struct  ping_table_type
{
	unsigned char status;		//状态
	unsigned char times;		//时间
	union netcard xdata * pack;		//包的地址
	union  IP_address ip;		//ping的ip地址
};

struct  wait
{

	union netcard xdata  * buf;
	union IP_address ipaddr;
	unsigned char proto_id;
	unsigned int  len;
	unsigned char timer;
	unsigned char wait_arp;
};

//-----------TCP发送缓冲区结构------------//

typedef struct
{
	unsigned char bUsed;
	unsigned char xdata *  pBuf;		//待发送数据缓冲区首地址
	unsigned char index_con;		//标志连接的序号
	unsigned int  iLen;				//数据长度
	unsigned long his_ack;				//如果该包已经被发送,则填写对方发回的
									//ACK到这里,在sTATE_ESTABLISHED的接收
									//ACK的代码里检查是否某个数据包已经收到
									//,以此来判断该包是否被收到,并决定
									//bReceived是否为真
	unsigned long  my_seq;				//序号
	unsigned long  new_seq;			//new_seq=my_seq+iLen
	unsigned char bAcked;			//表明该包是否被ACKED	
} TCPBUF;
typedef struct
{
  unsigned char bUsed;					//标志是否被使用
  union			IP_address ip;
  unsigned int  port;
  unsigned int  localport;
  unsigned long his_sequence;
  unsigned long my_sequence;
  unsigned int  iLen;		
  unsigned long his_ack;
  unsigned char timer;
  unsigned int iPreTimer;
  unsigned char retries;
  
  //于保活定时器相
  unsigned char Minutes;
  unsigned char aty_timer;
  unsigned char aty_arp_timer;			
  unsigned char aty_stat;
  unsigned char state;
  unsigned char socket_type;
  unsigned int  my_wnd;					//自己窗口大小
  TCPBUF   xdata * pUnAcked;
  TCPBUF   xdata * pWaitForSend;
  TCPBUF   xdata * pRecBuf;
  /* call back functions */
  void ( * recv)(unsigned char xdata *buf ,unsigned int size);//收到数据时的回调函数
  void ( * close)();			//套接字关闭的回调函数
  void ( * accept)();			//有连接请求的回调函数
  void ( * connect)();			//进入连接状态的回调函数	
  char  query[20];
} CONNECTION;

						  

⌨️ 快捷键说明

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