14 Star 9 Fork 0

zhangruoxu/demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
icmp_pktprocess.c 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
zhangruoxu 提交于 2023-11-23 17:14 . 头文件守卫
#include "basetype.h"
#include "common.h"
#include "debug_lib.h"
#include "ethernet_lib.h"
#include "ipv4_lib.h"
#include "icmp_lib.h"
#include "addr_lib.h"
#include "device_data.h"
#include "timer_data.h"
#include "routing_process.h"
/*
* description:收到icmp请求或回应报文后的操作
*
* input:
* usDeviceId 源设备ID
* pustEthernetHeader 报文以太头
* pustIpv4Header 报文IP头
* pstIcmpHeader 报文icmp部分
* BufferLen 报文长度
*
* output:
* aucBufferAnswer 装载回应报文
* return: NULL
* tip: IN是空宏,表示改参数是输入
*/
UINT32 pktprocess_RecvICMP(UINT16 usDeviceId, ETHERNET_S* pustEthernetHeader,
IPV4HEAD_S* pustIpv4Header, ICMP_S* pstIcmpHeader, UINT32 BufferLen)
{
UINT16 Delay_Time = 20, usPacketAnswerLen = 0;
ICMP_TASK_S* pstIcmp_task;
UINT32 auiPara[4] = { 0 };
UINT8 aucBufferAnswer[PACKET_MAX_SIZE]; // PACKET_MAX_SIZE 报文最大长度
memset(aucBufferAnswer, 0, sizeof(aucBufferAnswer)); // 初始化 应答buffer 内存空间
if (ICMPoptype_Ask_Echoreply == pstIcmpHeader->ucOptype ||
pustIpv4Header->uiDstIPv4Addr == pustIpv4Header->uiSrcIPv4Addr) // 如果收到ICMP回应或 ping 自己
{
pstIcmp_task = DeviceData_GetIcmpTask(usDeviceId);
pstIcmp_task->ausSuccess[pstIcmp_task->usSeq] = 1;
TimerData_Del(pstIcmp_task->uiTimerId);
if (++pstIcmp_task->usSeq == 5)
{
IcmpTask_print(usDeviceId);
}
else
{
Ping(usDeviceId, pstIcmp_task->uiDstIP, pstIcmp_task->usSeq);
auiPara[0] = usDeviceId;
pstIcmp_task->uiTimerId = TimerData_Add(10, TIMER_ID_INVALID, auiPara, IcmpTask_Timeout);
}
return 0;
}
if (ICMPoptype_Ask_Echorequest == pstIcmpHeader->ucOptype) // 如果收到ICMP请求
{
usPacketAnswerLen += IcmpLib_EncodeIcmp(aucBufferAnswer, ICMPoptype_Ask_Echoreply, ICMPcode_Echorequest_Request, pstIcmpHeader->usSeqnum);
send3(usDeviceId, pustIpv4Header->uiSrcIPv4Addr, pustIpv4Header->uiDstIPv4Addr, aucBufferAnswer, usPacketAnswerLen, 0xFF, Protocol_ICMP); // 调用send3发送回复报文
return usPacketAnswerLen;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhangruoxudada/demo.git
git@gitee.com:zhangruoxudada/demo.git
zhangruoxudada
demo
demo
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385