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

📄 ip.lst

📁 RTL8019以太网开发板资料
💻 LST
字号:
C51 COMPILER V8.18   IP                                                                    04/26/2010 19:37:30 PAGE 1   


C51 COMPILER V8.18, COMPILATION OF MODULE IP
OBJECT MODULE PLACED IN ip.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ip.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "ip.h"
   2          #include "tcp.h"
   3          #include "ARP.h"
   4          #include "UDP.h"
   5          #include "ICMP.h"
   6          #include "rtl8019.h"
   7          xdata ST_IP_HEAD_FORMAT gstIphead;
   8          
   9          xdata UWORK8 IPLocalAddress_buf[IP_LEN];                    // 本地IP地址 
  10          xdata UWORK8 SubNetMask_buf[IP_LEN];                   // 子网掩码 
  11          xdata UWORK8 GateWay_buf[IP_LEN];                      // 网关 
  12          xdata UWORK8 IPSourceddress_buf[IP_LEN];                    // IP地址
  13          xdata UWORK8 IPDestAddress_buf[IP_LEN];                    /* 目标IP地址 */
  14          UWORK16 SourcePort;                     //源端口号
  15          UWORK16 DesPort;                                //目标端口号
  16          
  17          /*********************************************************************
  18          函数名:       void IpSend(void)
  19          功能:         Ip发送数据
  20          输入:         发送数据的长度 
  21          输出:         将数据打包成IP包
  22          返回:         None
  23          日期:         2004/12/28
  24          *********************************************************************/
  25          void IpSend(void)
  26          {
  27   1          ST_IP_HEAD_FORMAT *pIpHeadBuff;
  28   1          MAC_Remote_buf[12] = 0x08;                                           // IP协议 
  29   1          MAC_Remote_buf[13] = 0x00;
  30   1          pIpHeadBuff = (ST_IP_HEAD_FORMAT *)&NetSend_buf[0];                // IP头 
  31   1          memcpy(&NetSend_buf[0],&gstIphead,20);
  32   1          pIpHeadBuff->usCheckSum = 0;
  33   1          pIpHeadBuff->usCheckSum = CheckSum((UWORK16 *)&NetSend_buf[0],20); // 计算IP头校验和
  34   1          
  35   1      //SerialSendbuf((UWORK8 *)&NetSend_buf[0],gstIphead.usTotalLen);          //读取IP总的数据长度
  36   1              SendEthernetPacket(pIpHeadBuff->usTotalLen);
  37   1      }
  38          /*********************************************************************
  39          函数名:       void IpOrRouter(void)
  40          功能:         IP路由选择
  41          输入:         初始化或者改变IP的时候 
  42          输出:         判断IP还是路由
  43          返回:         None
  44          日期:         2005/01/24
  45          更新:         2006/05/21
  46          *********************************************************************/
  47          void IpOrRouter(void)
  48          {
  49   1          UWORK32 ulLocalIP,ulRemoteIP,ulMask;
  50   1          UWORK8 ucaTemp[4],ucLoop;
  51   1      
  52   1          memcpy((UWORK8 *)&ulLocalIP,&IPLocalAddress_buf[0],IP_LEN); 
  53   1          memcpy((UWORK8 *)&ulMask,&SubNetMask_buf[0],IP_LEN);
  54   1         
  55   1          for(ucLoop = 0; ucLoop < REMOTE_IP_NUM; ucLoop++)                      // 目的IP地址 /
C51 COMPILER V8.18   IP                                                                    04/26/2010 19:37:30 PAGE 2   

  56   1          {
  57   2              memset(&ucaTemp[0],0,4);
  58   2              if(0 == memcmp(&ucaTemp[0],&ArpCache_Buf[ucLoop].ucaIP[0],IP_LEN))
  59   2              {
  60   3                  ArpCache_Buf[ucLoop].ucIPValible = 0;                          // 没有合法的IP,规定0.0.0.0为非
             -法IP 
  61   3              }
  62   2              else
  63   2              {
  64   3                  ArpCache_Buf[ucLoop].ucIPValible = 1;
  65   3      
  66   3                  memcpy((UWORK8 *)&ulRemoteIP,&ArpCache_Buf[ucLoop].ucaIP[0],IP_LEN);
  67   3      
  68   3                  if((ulLocalIP & ulMask) == (ulRemoteIP & ulMask))
  69   3                  {
  70   4                      ArpCache_Buf[ucLoop].ucIpOrRouter = 0;                     // 网络号相同,直接交付 
  71   4                      memcpy(&ArpCache_Buf[ucLoop].ucaArpIp[0],&ArpCache_Buf[ucLoop].ucaIP[0],IP_LEN); 
  72   4                  }
  73   3                  else
  74   3                  {
  75   4                      ArpCache_Buf[ucLoop].ucIpOrRouter = 1;                     // 网络号不相同,使用路由间接交

⌨️ 快捷键说明

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