📄 icmp.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 + -