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