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