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

📄 icmp.lst

📁 mc51单片机对rtl8019编程,实现ethernet的收发控制.
💻 LST
字号:
C51 COMPILER V6.23a  ICMP                                                                  05/11/2004 18:03:26 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE ICMP
OBJECT MODULE PLACED IN icmp.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE icmp.c LARGE ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "icmp.h"
   2          #include "ethernet.h"
   3          #include "ip.h"
   4          
   5          extern   Net_inf_struc  net_inf;
   6          //-----------------------------------------------------------------
   7          // send an ICMP echo response using the received request data
   8          Bool icmp_send( Uint8 *pBuffer,Uint8 *pIP,Uint8 *picmp_pkt,Uint8 nsize)
   9          {
  10   1              Ip_struc* ipPkt;
  11   1              Icmphdr_struc* icmpPkt;
  12   1              
  13   1              nsize=Max(nsize,64-sizeof(Ether_header_struc) - sizeof(Ip_struc));
  14   1              // data fill common icmp header components
  15   1              icmpPkt = ( Icmphdr_struc *) (pBuffer + sizeof(Ether_header_struc) + sizeof(Ip_struc));
  16   1              memcpy(icmpPkt,picmp_pkt,nsize);
  17   1              icmpPkt->checksum = 0;
  18   1              icmpPkt->checksum = cpu_checksum(( Uint16 *) icmpPkt, nsize);
  19   1              //ip layer process
  20   1              ipPkt = ( Ip_struc *) (pBuffer + sizeof(Ether_header_struc));
  21   1              memcpy(ipPkt->ip_dst, pIP, INADDR_LEN);
  22   1              memcpy(ipPkt->ip_src, net_inf.ip_local, INADDR_LEN);
  23   1              nsize += sizeof(Ip_struc);
  24   1              ipPkt->ip_len = nsize*2;
  25   1              ipPkt->ip_p = IPPROTO_ICMP;
  26   1              ipPkt->ip_id = 0;
  27   1              ipPkt->ip_ttl = 64;
  28   1              ipPkt->ip_hl_v = 0x45;
  29   1              ipPkt->ip_tos = 0;
  30   1              ipPkt->ip_off = 0;
  31   1              ip_send(pBuffer);
  32   1              return TRUE;
  33   1      }
  34          
  35          //-----------------------------------------------------------------
  36          // ICMP packet receive & action
  37          Bool    icmp_receive(Uint8* pBuffer)
  38          {
  39   1              Ip_struc* ipPkt;
  40   1              Icmphdr_struc* icmpPkt;
  41   1              ipPkt = ( Ip_struc *) (pBuffer + sizeof(Ether_header_struc));
  42   1              icmpPkt = ( Icmphdr_struc*) (pBuffer + sizeof(Ether_header_struc) + sizeof(Ip_struc));
  43   1              if (cpu_checksum(( Uint16 *) icmpPkt, ipPkt->ip_len/2 -sizeof(Ip_struc)) == 0){
  44   2                      switch(icmpPkt->type){
  45   3                              case ICMP_ECHO:
  46   3                                      icmpPkt->type = ICMP_ECHOREPLY;
  47   3                                      icmpPkt->subcode = 0;
  48   3                                      icmp_send(pBuffer,ipPkt->ip_src,(Uint8 *)icmpPkt,20);
  49   3                                      break;
  50   3                      }
  51   2              }
  52   1              return TRUE;
  53   1      }
  54          

C51 COMPILER V6.23a  ICMP                                                                  05/11/2004 18:03:26 PAGE 2   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    561    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      25
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -