📄 icmp.lst
字号:
C51 COMPILER V8.18 ICMP 04/26/2010 19:37:31 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE ICMP
OBJECT MODULE PLACED IN ICMP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ICMP.C LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "icmp.h"
2 #include "main.h"
3 #include "ip.h"
4 #include "tcp.h"
5 /*********************************************************************
6 函数名: void IcmpReceive(UWORK16 usTotalLen)
7 功能: Icmp处理,因为是接收一帧处理一帧,不用返回成功失败
8 输入: IP包数据长度
9 输出: 处理Icmp分组
10 返回: None
11 日期: 2004/12/21
12 *********************************************************************/
13 void IcmpReceive(UWORK16 usTotalLen)
14 {
15 1 ST_ICMP_HEAD_FORMAT *pIcmpHead;
16 1 ST_IP_HEAD_FORMAT *pIpHeadBuff;
17 1 UWORK16 usLoop,usRes,usCheckSum;
18 1 UWORK8 ucNum;
19 1
20 1 if(FALSE == gbHaveFragment)
21 1 {
22 2 pIcmpHead = (ST_ICMP_HEAD_FORMAT *)&gstaRevEthernet.ucaPacket[20]; // 指向ICMP头
23 2 usCheckSum = CheckSum((UWORK16 *)&gstaRevEthernet.ucaPacket[20],usTotalLen);
24 2 pIpHeadBuff = (ST_IP_HEAD_FORMAT *)&gstaRevEthernet.ucaPacket[0];
25 2 }
26 1 else
27 1 {
28 2 pIcmpHead = (ST_ICMP_HEAD_FORMAT *)&gucaSegTemp[20];
29 2 usCheckSum = CheckSum((UWORK16 *)&gucaSegTemp[20],usTotalLen);
30 2 pIpHeadBuff = (ST_IP_HEAD_FORMAT *)&gucaSegTemp[0];
31 2 }
32 1 if(0x0000 != usCheckSum)
33 1 {
34 2 return; // 校验和错误,返回
35 2 }
36 1
37 1 switch(pIcmpHead->ucType)
38 1 {
39 2 case ICMP_ECHO: // 目的端的回送请求
40 2
41 2 // 组帧应答
42 2 pIcmpHead->ucType = ICMP_ECHO_REPLY; // 应答
43 2 pIcmpHead->usCheckSum = 0x00;
44 2 // IP头
45 2 gstIphead.usID = ++LocalIpID;
46 2 gstIphead.ucprotocol = 0x01; // ICMP协议
47 2 memcpy(&gstIphead.ucSourceIP[0],&IPLocalAddress_buf[0],IP_LEN); // 原IP地址
48 2 memcpy(&gstIphead.ucDestIP[0],&pIpHeadBuff->ucSourceIP[0],IP_LEN); // 目的IP地址
49 2 memcpy(&MAC_Remote_buf[0],&gstaRevEthernet.ucaSourceNodID[0],NOD_ID_LENGTH); // 目的MAC地址
50 2
51 2 if(FALSE == gbHaveFragment) // 没有分片的数据
52 2 { // 计算ICMP校验和
53 3 pIcmpHead->usCheckSum = CheckSum((UWORK16 *)&gstaRevEthernet.ucaPacket[20],usTotalLen);
54 3 gstIphead.usSegOffset = 0;
55 3 gstIphead.usTotalLen = 20 + usTotalLen;
C51 COMPILER V8.18 ICMP 04/26/2010 19:37:31 PAGE 2
56 3 memcpy(&NetSend_buf[20],&gstaRevEthernet.ucaPacket[20],usTotalLen); // 拷贝数据到发送缓
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -