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

📄 icmp.lst

📁 基于单片机的一款可裁减的tcpip协议
💻 LST
📖 第 1 页 / 共 4 页
字号:
  80      =2                };
  81      =2  
  82      =2  struct tcp {   uint     EtherHead[9];
  83      =2                 uint     IpHead[10];
C51 COMPILER V7.06   ICMP                                                                  07/10/2003 14:34:41 PAGE 14  

  84      =2                 uint     SourcePort;             /*源端口*/
  85      =2                 uint     DestPort;               /*目的端口*/
  86      =2                 ulong    SeqNum;                         /*顺序号*/
  87      =2                 ulong    AckNum;                         /*确认号*/
  88      =2                 uchar    offset;                 /*数据偏移量*/
  89      =2                 uchar    control;                /*连接控制*/
  90      =2                 uint     window;                 /*流控*/
  91      =2                 uint     Crc;                    /*校验和 ,包括伪头部,TCP头部,数据*/
  92      =2                 uint     urg;                    /*紧急指针*/
  93      =2                 uchar    tcpdata[1478];          /*TCP数据*/
  94      =2               };
  95      =2  
  96      =2  struct udp {   uint     EtherHead[9];
  97      =2                 uint     IpHead[10];
  98      =2                 uint     SourcePort;        /*源端口*/
  99      =2                 uint     DestPort;          /*目的端口*/
 100      =2                 uint     length;
 101      =2                 uint     Crc;               /*校验和,包括伪头部,udp头部,数据*/
 102      =2                 uchar    udpdata[1478];     /*udp数据*/
 103      =2               };
 104      =2  
 105      =2       /*所有协议的共用体*/
 106      =2  union Netcard {struct   {uchar          bytebuf[1536];}bytes;
 107      =2                 struct   {uint           wordbuf[768];}words;
 108      =2                 struct   ethernet    EtherFrame;
 109      =2                     struct       retransmit  ResendFrame;
 110      =2                 struct   arp             ArpFrame;
 111      =2                 struct   icmp            IcmpFrame;
 112      =2                 struct   tcp             TcpFrame;
 113      =2                 struct   ip              IpFrame;
 114      =2                     struct       udp             UdpFrame;
 115      =2                 struct   IpPacket        IpPacket;
 116      =2                };
 117      =2  
 118      =2  struct Socket_Type{
 119      =2                          uint    My_Port;                                //本机端口
 120      =2                                          uint    Dest_Port;                              //对方端口
 121      =2                                          uint    Dest_Ip[2];                             //对方ip
 122      =2                                          uint    Dest_Mac_Id[3];                 //对方的以太网地址
 123      =2                                          ulong   IRS;                                    //初始化顺序号
 124      =2                          ulong   ISS;                                    //我的初始化序列号
 125      =2                          ulong   Rcv_Next;                               //对方的顺序号
 126      =2                                          ulong   Send_Next;                              //我的已经发送顺序号
 127      =2                          ulong   Sent_UnAck;                             //我的还没有确认顺序号
 128      =2                                                                                                          //unsigned long dest_ack_number;
 129      =2                                          uint    Rcv_Window;                             //对方的window大小
 130      =2                          uint    Snd_Window;                     //我的window大小
 131      =2                                  uint    Dest_Max_Seg_Size;              //对方接受的最大的数据包大小MTU
 132      =2                          uint    My_Max_Seg_Size;                //我能接受的最大的数据包大小
 133      =2                                          ulong   My_Wl1;         //seq
 134      =2                                          ulong   My_Wl2;         //ack
 135      =2                          uchar   State;          //连接状态
 136      =2                                          uchar   Open;
 137      =2                    };
 138      =2  
 139      =2  /*tcp state define */
 140      =2  
 141      =2  #define         TCP_STATE_LISTEN        0
 142      =2  #define         TCP_STATE_SYN_RCVD      1
 143      =2  #define         TCP_STATE_SYN_SENT      2
 144      =2  #define         TCP_STATE_ESTABLISHED   3
 145      =2  #define         TCP_STATE_FIN_WAIT1     4
C51 COMPILER V7.06   ICMP                                                                  07/10/2003 14:34:41 PAGE 15  

 146      =2  #define         TCP_STATE_FIN_WAIT2     5
 147      =2  #define         TCP_STATE_CLOSING       6
 148      =2  #define         TCP_STATE_CLOSE_WAIT    7
 149      =2  #define         TCP_STATE_LAST_ACK      8
 150      =2  #define         TCP_STATE_CLOSED        9
 151      =2  #define         TCP_STATE_TIME_WAIT     10
 152      =2  //tcp连接的标志位
 153      =2  #define         TCP_FIN 0x01
 154      =2  #define         TCP_SYN 0x02
 155      =2  #define         TCP_RST 0x04
 156      =2  #define         TCP_PSH 0x08
 157      =2  #define         TCP_ACK 0x10
 158      =2  #define         TCP_URG 0x20
 159      =2  
 160      =2  
 161      =2  /***    RTL8019's address deifne     ***/
 162      =2  #define dp668
 163      =2  #ifdef  dp668   //reg00- 10为isa网卡接口的寄存器地址300-31f
 164      =2  #define     RED_ADDR0   RTL8019AS_BASE_ADDRESS+0x00
 165      =2  #define     RED_ADDR1   RTL8019AS_BASE_ADDRESS+0x01
 166      =2  #define     RED_ADDR2   RTL8019AS_BASE_ADDRESS+0x02
 167      =2  #define     RED_ADDR3   RTL8019AS_BASE_ADDRESS+0x03
 168      =2  #define     RED_ADDR4   RTL8019AS_BASE_ADDRESS+0x04
 169      =2  #define     RED_ADDR5   RTL8019AS_BASE_ADDRESS+0x05
 170      =2  #define     RED_ADDR6   RTL8019AS_BASE_ADDRESS+0x06
 171      =2  #define     RED_ADDR7   RTL8019AS_BASE_ADDRESS+0x07
 172      =2  #define     RED_ADDR8   RTL8019AS_BASE_ADDRESS+0x08
 173      =2  #define     RED_ADDR9   RTL8019AS_BASE_ADDRESS+0x09
 174      =2  #define     RED_ADDRa   RTL8019AS_BASE_ADDRESS+0x0a
 175      =2  #define     RED_ADDRb   RTL8019AS_BASE_ADDRESS+0x0b
 176      =2  #define     RED_ADDRc   RTL8019AS_BASE_ADDRESS+0x0c
 177      =2  #define     RED_ADDRd   RTL8019AS_BASE_ADDRESS+0x0d
 178      =2  #define     RED_ADDRe   RTL8019AS_BASE_ADDRESS+0x0e
 179      =2  #define     RED_ADDRf   RTL8019AS_BASE_ADDRESS+0x0f
 180      =2  #define     RED_ADDR10   RTL8019AS_BASE_ADDRESS+0x10
 181      =2  #define     RED_ADDR18   RTL8019AS_BASE_ADDRESS+0x18
 182      =2                  #define         Reg00   XBYTE[RED_ADDR0]   
 183      =2                  #define         Reg01   XBYTE[RED_ADDR1]
 184      =2                  #define         Reg02   XBYTE[RED_ADDR2]
 185      =2                  #define         Reg03   XBYTE[RED_ADDR3]
 186      =2                  #define         Reg04   XBYTE[RED_ADDR4]
 187      =2                  #define         Reg05   XBYTE[RED_ADDR5]
 188      =2                  #define         Reg06   XBYTE[RED_ADDR6]
 189      =2                  #define         Reg07   XBYTE[RED_ADDR7]
 190      =2                  #define         Reg08   XBYTE[RED_ADDR8]
 191      =2                  #define         Reg09   XBYTE[RED_ADDR9]
 192      =2                  #define         Reg0a   XBYTE[RED_ADDRa]
 193      =2                  #define         Reg0b   XBYTE[RED_ADDRb]
 194      =2                  #define         Reg0c   XBYTE[RED_ADDRc]
 195      =2                  #define         Reg0d   XBYTE[RED_ADDRd]
 196      =2                  #define         Reg0e   XBYTE[RED_ADDRe]
 197      =2                  #define         Reg0f   XBYTE[RED_ADDRf]
 198      =2                  #define         Reg10   XBYTE[RED_ADDR10]
 199      =2                  #define         Reg18   XBYTE[RED_ADDR18]
 200      =2  
 201      =2  #endif
 202      =2  
   3      =1  
   4      =1  #define         COM_RXD_BUFF_SIZE   600 //串口接收缓冲区大小
   5      =1  #define         COM_TXD_BUFF_SIZE   600 //串口发送缓冲区大小
   6      =1  #define         COMMAND_BUFF_SIZE   600
   7      =1  #define         RT_BUFF_NUM 1           //5 was changed to 3,2002/12/19 14:10 
C51 COMPILER V7.06   ICMP                                                                  07/10/2003 14:34:41 PAGE 16  

   8      =1  #define         TCP_MAX_RETXD   8       //tcp包最多重发的次数
   9      =1  //uchar   code    Mac_ID[6];//将RTL8019的物理地址存储在程序空间中
  10      =1  
  11      =1  
  12      =1  #include "arp.h"
   1      =2  #ifdef ARP_GLOBALS
           =2 #define ARP_EXT
           =2 #else
   4      =2  #define ARP_EXT extern 
   5      =2  #endif
   6      =2  
   7      =2  ARP_EXT void Arp_Request(unsigned long ip_address);
   8      =2  ARP_EXT void Arp_Answer();
   9      =2  ARP_EXT void Gateway_Arp_Request();                    //在每分钟的前三秒对网关地址进行解析  
  10      =2  ARP_EXT void Arp_Process();
  13      =1  #include "GLOBAL.h"
   1      =2  #ifdef GLOBAL_GLOBALS
           =2 #define GLOBAL_EXT
           =2 #else
   4      =2  #define GLOBAL_EXT extern 
   5      =2  #endif
   6      =2  GLOBAL_EXT xdata        struct  Socket_Type TCP1024;
   7      =2  GLOBAL_EXT xdata        union   Ip_Address_Type My_Ip_Address ;     //本机IP地址
   8      =2  GLOBAL_EXT xdata        union   Ip_Address_Type Gateway_Ip_Address;     //网关IP地址
   9      =2  GLOBAL_EXT xdata        union   Ip_Address_Type Mask_Ip_Address;        //子网掩码
  10      =2  GLOBAL_EXT xdata        union   Ip_Address_Type Ping_Ip_Address;        //保存PING命令的目的主机的物理地址
  11      =2  GLOBAL_EXT xdata        union   Netcard  RxdNetBuff;                    //数据接收缓冲区
  12      =2  GLOBAL_EXT xdata        union   Netcard  TxdNetBuff;                    //数据发送缓冲区
  13      =2  GLOBAL_EXT xdata        union   Netcard  Resend_Buff;
  14      =2  GLOBAL_EXT xdata        union   Ethernet_Address_Type Gateway_MAC;      //网关的物理地址
  15      =2  GLOBAL_EXT xdata        union   Ethernet_Address_Type Ping_MAC;         //PING的物理地址
  16      =2  GLOBAL_EXT union        u       RemotePort;
  17      =2  
  18      =2  
  19      =2  GLOBAL_EXT bit  BiSecond;                       //两秒时,该标志置1
  20      =2  GLOBAL_EXT bit  Tcp_Timeout;            //TCP超时标志,定时器0中断中将该标志置位
  21      =2  GLOBAL_EXT bit  TcpConnected;
  22      =2  GLOBAL_EXT bit  ComTxdBufempty;
  23      =2  
  24      =2  GLOBAL_EXT uchar        Msec;                           //10毫秒
  25      =2  GLOBAL_EXT uchar        Sec;                            //秒钟
  26      =2  GLOBAL_EXT uchar        Min;                            //分钟
  27      =2  GLOBAL_EXT uchar        Gateway_IP_TTL;
  28      =2  GLOBAL_EXT uchar        Ping_IP_TTL;
  29      =2  GLOBAL_EXT uchar        Ping_Count;             //ping的次数,决定本地回显次数
  30      =2  GLOBAL_EXT uchar        Udp_Count;
  31      =2  GLOBAL_EXT uchar        RtTime;                 //重发时间
  32      =2  GLOBAL_EXT uchar   Tcp_Drop_Count;
  33      =2  GLOBAL_EXT uint         FrameIndex;
  34      =2  
  35      =2  GLOBAL_EXT uint         ComTxdRead;     //串口接收读指针
  36      =2  GLOBAL_EXT uint         ComRxdRead;     //串口发送读指针
  37      =2  GLOBAL_EXT uint         ComRxdWrite;    //串口接收写指针
  38      =2  GLOBAL_EXT uint         ComTxdWrite;    //串口发送写指针
  39      =2  GLOBAL_EXT xdata        uchar   ComRxdBuf[];  //串口的接收缓冲区
  40      =2  GLOBAL_EXT xdata        uchar   ComTxdBuf[];  //串口的发送缓冲区
  41      =2  
  42      =2  GLOBAL_EXT uchar        code    HexTable[];
  43      =2  GLOBAL_EXT xdata        uchar   Command_Buf[COMMAND_BUFF_SIZE];//命令缓冲区
  44      =2  GLOBAL_EXT xdata   unsigned char IpStr[16];
  45      =2  GLOBAL_EXT xdata        unsigned char PortStr[5];
  46      =2  
C51 COMPILER V7.06   ICMP                                                                  07/10/2003 14:34:41 PAGE 17  

  47      =2  GLOBAL_EXT void initial_system();
  48      =2  GLOBAL_EXT bit  Rec_NewPacket();
  49      =2  GLOBAL_EXT unsigned char  VerifyIpHeadCrc();
  50      =2  GLOBAL_EXT unsigned char  VerifyTcpCrc();
  51      =2  GLOBAL_EXT uint  CreateIpHeadCrc();
  52      =2  GLOBAL_EXT uint  CreateIcmpCrc();//
  53      =2  GLOBAL_EXT unsigned char  VerifyUdpCrc();
  54      =2  GLOBAL_EXT uint CreateTcpCrc();
  55      =2  GLOBAL_EXT void Create_Ip_Frame(uint length,uint IPH,uint IPL,uchar NextProtocal);
  56      =2  GLOBAL_EXT union Ip_Address_Type *IP_Str2Hex(unsigned char *Str);    //IP字符串转换到IP地址值
  57      =2  GLOBAL_EXT void Delay_MS(uint ms_number);
  58      =2  GLOBAL_EXT void IP_Hex2Str(union Ip_Address_Type ip)    ;
  59      =2  GLOBAL_EXT void Port_Hex2Str(unsigned int portnum);    //IP地址值转换到IP字符串
  60      =2  GLOBAL_EXT void Send_Packet(union Netcard *TxdNetBuff,uint length);
  61      =2  
  62      =2  
  14      =1  #include "ICMP.h"
   1      =2  #ifdef ICMP_GLOBALS
   2      =2  #define ICMP_EXT
   3      =2  #else
           =2 #define ICMP_EXT extern 
           =2 #endif
   6      =2  
   7      =2  ICMP_EXT void Ping_Answer();
   8      =2  ICMP_EXT void Ping_Request();
   9      =2  ICMP_EXT void Ping_Echo();
  10      =2  ICMP_EXT void Process_Ping();
  11      =2  
  15      =1  #include "INPUT.h"
   1      =2  #ifdef INPUT_GLOBALS
           =2 #define INPUT_EXT
           =2 #else
   4      =2  #define INPUT_EXT extern 
   5      =2  #endif 
   6      =2  INPUT_EXT void process_command();
   7      =2  
  16      =1  #include "TCP.h"
   1      =2  #ifdef TCP_GLOBALS
           =2 #define TCP_EXT
           =2 #else
   4      =2  #define TCP_EXT extern 
   5      =2  #endif 
   6      =2  TCP_EXT void TCP1024_Init();
   7      =2  
   8      =2  TCP_EXT void Process_Tcp_Timeout();
   9      =2  TCP_EXT void Process_Tcp();
  10      =2  
  17      =1  #include "UART.h"
   1      =2  #ifdef UART_GLOBALS
           =2 #define UART_EXT
           =2 #else
   4      =2  #define UART_EXT extern 
   5      =2  #endif
   6      =2  UART_EXT unsigned char Get_Char();
   7      =2  
   8      =2  UART_EXT void Printf_Char(uchar ascii);
   9      =2  
  10      =2  UART_EXT void Printf_String(uchar  *string);
  11      =2  UART_EXT void Printf_IPStr(union Ip_Address_Type ip);
  12      =2  UART_EXT void Printf_PortStr(unsigned int portnum);
  13      =2  UART_EXT void Printf_Hex(unsigned char senddata);
  14      =2  
C51 COMPILER V7.06   ICMP                                                                  07/10/2003 14:34:41 PAGE 18  

  18      =1  #include "UDP.h"
   1      =2  #ifdef UDP_GLOBALS
           =2 #define UDP_EXT
           =2 #else
   4      =2  #define UDP_EXT extern 
   5      =2  #endif
   6      =2  
   7      =2  UDP_EXT void Process_Udp();
   8      =2  UDP_EXT void Process_Udp_Command();
  19      =1  
  20      =1  
  21      =1  #define    RTL8019AS_BASE_ADDRESS   0x5000
  22      =1  
  23      =1  #define MY_MAC_ID               {0x52,0x54,0x4c,0x19,0xf8,0x23}//将RTL8019的物理地址存储在程序空间

⌨️ 快捷键说明

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