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

📄 icmp.c

📁 力天电子 dsp源码
💻 C
字号:
/******************************************************************/
/*Copyright (C), 2008-2009, 力天电子,LiTian Tech.Co.Ltd.		  */
/*  Module Name   : ENC28J60          							  */
/*  File Name     : icmp.c		   								  */        
/*  Author   	  : 侯长波                                        */     
/*  Create Date   : 2009/10/1                                     */      
/*  Version   	  : 1.0                                           */          
/*  Function      :                         					  */                       
/*  Description   :                                               */            
/*  Support       : www.LT430.com				                  */             
/******************************************************************/ 
#include "Ne2000.h"
#include "Netcomm.h"

extern void encPacketSend(union ethernet_address_type *pDestAddr, union netcard *txdnet,
                   unsigned int buffer_length, unsigned int packet_type);

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

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

	union ethernet_address_type answeraddress;
	temp=(rxdnetbuf.ipframe.totallength_H<<8) | rxdnetbuf.ipframe.totallength_L;
	tosize = temp - 20;	//real icmp data
	size = tosize + 34; //整个以太网帧长
	if(rxdnetbuf.icmpframe.type == 0x08)
	{				//表示是ping请求
	    for (i = 14; i < size; i++)	
	    {	//将数据复制到发送缓冲区	   
	 	    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;
		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_L = 0;
	    txdnetbuf.ipframe.crc_H = 0;
		temp=0xFFFF - chksum((txdnetbuf.bytedata.bytebuf + 14),20);
		txdnetbuf.ipframe.crc_L = temp;
	    txdnetbuf.ipframe.crc_H = (temp>>8);
	      
	    txdnetbuf.icmpframe.type = 0x00;

		txdnetbuf.icmpframe.crc_L = 0;
		txdnetbuf.icmpframe.crc_H = 0;
		temp=0xFFFF - chksum((txdnetbuf.bytedata.bytebuf + 34),(size -34));
		txdnetbuf.icmpframe.crc_L = temp;
	    txdnetbuf.icmpframe.crc_H = (temp>>8); 
	    encPacketSend(&answeraddress,&txdnetbuf,size,IP_PACKET);		
	}  
}

⌨️ 快捷键说明

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