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

📄 icmp.lst

📁 RTL8019以太网开发板资料
💻 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 + -