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

📄 icmp.c

📁 很好的网络编程协议源码
💻 C
字号:
/*
+FHDR------------------------------------------------------------------
Copyright (c),
Tony Yang –51,AVR,ARM firmware developer  
Contact:qq 292942278  e-mail:tony_yang123@sina.com.cn

Abstract:
$Id: icmp.c,v 1.2 2006/12/31 16:05:13 tony Exp $
-FHDR-------------------------------------------------------------------
*/ 

#include "config.h"
#include "tcp_ip_cfg.h"
#include "hardware.h"
#include "ethernet.h"
#include "ip.h"
#include  "uart0\uart0.h"
 struct _pkst _TxdData;
 /****************************************************************************
* 名称:Rec_IP_Packed
* 功能:计算IP首部校验和
* 入口:pkt--IP数据包的首地址
* 出口: 无
****************************************************************************/
uint16 CheckSumUdp(uint8 *check,uint16 length)
{
uint32 sum=0;
uint16 i;
if(length % 2)
   check[length++] = 0;

	for (i=0;i<(length)/2;i++)
	{
		sum = sum + ((uint32)check[2*i]<<8)+(uint32)check[2*i+1];
	}
	if(length&0x0001)//长度为奇数个时,要进行该操作
	{
		sum = sum + ((uint32)check[2*i]<<8);
	}
	sum = (sum&0xffff) + ((sum>>16)&0xffff);//高16位和低16位相加
	if(sum & 0xffff0000)
	{//表示有进位
		sum++;  
	}
	return ( (uint16)(~((sum)&0xffff))  );
}


void Rcv_ICMP_PKT(u8 *pkt,u16 len,u8 *IP)
{


 switch(*pkt)
 {
    /*ICMP 请求类型*/ 
    case 8:{
       if(pkt[1] == 0) //请求回显,PING请求(第七章)
         {  u16 checksum;
            pkt[0] = 0;
            pkt[2] = 0;//CLR checksum
            pkt[3] = 0;
            checksum = CheckSumUdp(pkt,len);
            pkt[2] = checksum >> 8;
            pkt[3] = checksum & 0xff;  
            checksum = CheckSumUdp(pkt,len);  
            //UART0_SendByte(0x33);
            //UART0_SendByte(0x33);
            //UART0_SendByte(0x33);
            //UART0_SendByte(0x33);
            //UART0_SendByte(checksum & 0xff);
            //UART0_SendByte(checksum >> 8);
            
            _TxdData.DAPTR = pkt;  
            _TxdData.length = len;
            _TxdData.STPTR = NULL;
            //UART0_SendByte(0x55);UART0_SendByte(0x55);
            //UART0_SendByte(0x55);UART0_SendByte(0x55);
            Send_IP_PKT(&_TxdData,IP,ICMP);
            break;     
         
         }
    }
 
 }



}

/*
+FFTR--------------------------------------------------------------------
$Log: icmp.c,v $
Revision 1.2  2006/12/31 16:05:13  tony
增加FTP代码,SOCKET_status字段


-FFTR--------------------------------------------------------------------
*/

⌨️ 快捷键说明

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