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

📄 icmp.c

📁 单片机结合ENC28J60的以太网,源代码
💻 C
字号:
/*==============================================*/
//	ICMP协议程序
//	FOR AVR DEV 1.0
//	版本:		1.0
//	作者:		HAN		3366524@QQ.COM
//	日期:		2005年1月6日
//	test ok, 2005/1/8
/*==============================================*/

#include	"j60.h"

extern union netcard rxdnetbuf;
extern union netcard txdnetbuf;
extern union NetNode myNode;

extern unsigned int chksum(unsigned char *check,unsigned int size);
extern unsigned int Swap16U(unsigned int data16u);

/*==============================================*/
//	函数名称:	PING应答
/*==============================================*/
void ping_answer(void)
{
	unsigned int	i;
	unsigned int	size;
	unsigned int	tosize;

	union ethernet_address_type answeraddress;
	
//	size = rxdnetbuf.etherframe.length;
//	if(size == 60)
	{
		tosize = Swap16U(rxdnetbuf.ipframe.totallength) - 28;	//	real icmp data
		size = tosize + 42;
	}

	if(rxdnetbuf.icmpframe.type == 0x08)
	{				//	表示是ping请求
	    	for (i = 16; i < (size+4); i++)	//	ADD form protocal
	    	{			//	将数据复制到发送缓冲区	   
	 	    	txdnetbuf.bytedata.bytebuf[i] = rxdnetbuf.bytedata.bytebuf[i];
	    	}
	 	for(i = 0; i < 6; i++)
	 	{			//	源地址为目标地址
	    		answeraddress.bytes[i] = rxdnetbuf.etherframe.sourcenodeid[i];
	 	}
		txdnetbuf.ipframe.ttl = txdnetbuf.ipframe.ttl - 1;
	    	txdnetbuf.ipframe.crc = 0;
		for(i = 0; i < 4; i++)
		{
			txdnetbuf.ipframe.destip[i] = rxdnetbuf.ipframe.sourceip[i];
			txdnetbuf.ipframe.sourceip[i] = myNode.nodebytes.ipbytes[i];
		}
		txdnetbuf.ipframe.crc = 0xFFFF - chksum((txdnetbuf.bytedata.bytebuf + 18),20);  
	    txdnetbuf.icmpframe.type = 0x00;		// is icmp answer;
		txdnetbuf.icmpframe.crc = 0;
		txdnetbuf.icmpframe.crc = 0xFFFF - chksum((txdnetbuf.bytedata.bytebuf + 38),(size -34)); 
	    encPacketSend(&answeraddress,&txdnetbuf,size,IP_PACKET);		
	}  
}

⌨️ 快捷键说明

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