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

📄 etherif.lst.svn-base

📁 数字广播系统的开发源码
💻 SVN-BASE
字号:
C51 COMPILER V7.06   ETHERIF                                                               07/24/2007 16:32:45 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE ETHERIF
OBJECT MODULE PLACED IN E:\NETBRO~1\TRUNK\NETBRO~1\VW\ETHERIF.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\NETBRO~1\TRUNK\NETBRO~1\VW\ETHERIF.C DB SB OE

stmt level    source

   1          /*
   2           */
   3          
   4          #include "GloblDef.h"
   5          #include "TCPIPmem.h"
   6          #include "IP.h"
   7          #include "etherif.h"
   8          #include "ARP.h"
   9          #include "Netif.h"
  10          
  11          
  12          /* call output to put a packet from IP layer to device. After
  13                  Ip layer selected a device, it use output to send this packet.
  14                  MemHead contain a packet and Netif tell dirver which netif it
  15                  is. NOTE:MemHead->pStart point to pIPHead
  16          return:
  17                  TRUE: send successfuly.*/
  18          unsigned char EtherOutput(struct SMemHead xdata *MemHead,struct SNetIf xdata* NetIf,
  19                          IP_ADDR DestIP) reentrant
  20          {
  21   1              unsigned short NextIP;  /* next host to receive the packet in rout */
  22   1              struct SEtherHead xdata * pEtherHead;
  23   1              struct SMemHead xdata *p;
  24   1      
  25   1              pEtherHead = (struct SEtherHead xdata *)(MemHead->pStart - sizeof(struct SEtherHead));
  26   1      
  27   1              /* if DestIP in this subnet ... */
  28   1              if((NetIf->NetMask & NetIf->IPAddr) == (NetIf->NetMask & DestIP))
  29   1                      NextIP = DestIP;
  30   1              else
  31   1                      NextIP = NetIf->GateWay;
  32   1      
  33   1              /* find Ether addr of NextIP */
  34   1              if(ARPFind(pEtherHead->DestAddr,NextIP) == FALSE)
  35   1              {
  36   2                      /* send a arp query */
  37   2                      if((p = ARPQuery(NetIf,NextIP)) != NULL)
  38   2                      {
  39   3                              ((struct SEtherDevice xdata *)(NetIf->Info))->send(
  40   3                                      p->pStart,sizeof(struct SARPPacket) +
  41   3                                      sizeof(struct SEtherHead));
  42   3      
  43   3                              MemFree(p);
  44   3                      }
  45   2              }
  46   1              else
  47   1              {
  48   2                      /* fill ehter header, DestAddr already filled in ARPFind */
  49   2                      MemCopy(pEtherHead->ScrAddr,
  50   2                              ((struct SEtherDevice xdata *)(NetIf->Info))->Addr,ETHER_ADDR_LEN);
  51   2      
  52   2                      pEtherHead->type = htons(ETHER_TYPE_IP);
  53   2      
  54   2                      /* send the packet. packet lenth is less than MemHead size */
  55   2                      return ((struct SEtherDevice xdata *)(NetIf->Info))->send(
C51 COMPILER V7.06   ETHERIF                                                               07/24/2007 16:32:45 PAGE 2   

  56   2                              pEtherHead,(WORD)(MemHead->pEnd - (BYTE xdata *)pEtherHead));
  57   2              }
  58   1              return FALSE;
  59   1              /* free MemHead when it is acked in tcp model */
  60   1      }
  61          
  62          /* this function is called periodically.Get a packet from specific
  63          device. If there is a packet, call NetIf->Input to do more */
  64          void EtherInput(struct SNetIf xdata * NetIf) reentrant
  65          {
  66   1              struct SMemHead xdata *MemHead;
  67   1              struct SEtherHead xdata *pEtherHead;
  68   1              struct SMemHead xdata *p;
  69   1      
  70   1              /* if there is a packet to deal with */
  71   1              while((MemHead = ((struct SEtherDevice xdata *)(NetIf->Info))->recv())
  72   1                      != NULL)
  73   1              {
  74   2                      /* Note, pStart point to EtherHead */
  75   2                      pEtherHead = (struct SEtherHead xdata *)(MemHead->pStart);
  76   2      
  77   2                      /* which packet type */
  78   2                      switch(ntohs(pEtherHead->type))
  79   2                      {
  80   3                      case ETHER_TYPE_IP:
  81   3                              /* before pass to IP layer, let MemHead->pStart point
  82   3                              to IP header */
  83   3                              MemHead->pStart += sizeof(struct SEtherHead);
  84   3      
  85   3                              /* pass to IP layer for more dealing */
  86   3                              IPInput(MemHead);
  87   3                              break;
  88   3      
  89   3                      case ETHER_TYPE_ARP:
  90   3                              if((p = ARPInput(MemHead,NetIf)) != NULL)
  91   3                              {
  92   4                                      /* a arp reply need to be send */
  93   4                                      ((struct SEtherDevice xdata *)(NetIf->Info))->send(
  94   4                                              p->pStart,sizeof(struct SARPPacket)
  95   4                                              + sizeof(struct SEtherHead));
  96   4      
  97   4                                      MemFree(p);
  98   4                              }
  99   3                              /* 'MemHead' is freed in ARPInput() */
 100   3                              break;
 101   3                      default:
 102   3      
 103   3                              /* unknown packet type free */
 104   3                              MemFree(MemHead);
 105   3                      }
 106   2              }
 107   1      }
 108          /* ethernet device init */
 109          void EtherDevInit(struct SEtherDevice xdata * pDevice, BYTE EtherAddr[],
 110                                            unsigned char (DT_CODE * send)(void xdata *buf, WORD size)  reentrant,
 111                                            struct SMemHead xdata *(DT_CODE * recv)()  reentrant) reentrant
 112          {
 113   1              MemCopy(pDevice->Addr,EtherAddr,ETHER_ADDR_LEN);
 114   1              pDevice->recv = recv;
 115   1              pDevice->send = send;
 116   1      }
 117          
C51 COMPILER V7.06   ETHERIF                                                               07/24/2007 16:32:45 PAGE 3   

 118          
 119          
C51 COMPILER V7.06   ETHERIF                                                               07/24/2007 16:32:45 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


DWORD. . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
_?ARPFind. . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
SARPPacket . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  28
  HardwareType . . . . . . . . . . . .  MEMBER   -----  U_INT    0000H  2
  ProtocolType . . . . . . . . . . . .  MEMBER   -----  U_INT    0002H  2
  HardWareAddrLen. . . . . . . . . . .  MEMBER   -----  U_CHAR   0004H  1
  ProtocolAddrLen. . . . . . . . . . .  MEMBER   -----  U_CHAR   0005H  1
  type . . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0006H  2
  EtherScrAddr . . . . . . . . . . . .  MEMBER   -----  ARRAY    0008H  6
  IPScrAddr. . . . . . . . . . . . . .  MEMBER   -----  U_LONG   000EH  4
  EtherDestAddr. . . . . . . . . . . .  MEMBER   -----  ARRAY    0012H  6
  IPDestAddr . . . . . . . . . . . . .  MEMBER   -----  U_LONG   0018H  4
_?ARPInput . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_?ARPQuery . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
SEtherDevice . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  10
  Addr . . . . . . . . . . . . . . . .  MEMBER   -----  ARRAY    0000H  6
  send . . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0006H  2
  recv . . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0008H  2
SNetIf . . . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  20
  pNext. . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0000H  2
  IPAddr . . . . . . . . . . . . . . .  MEMBER   -----  U_LONG   0002H  4
  NetMask. . . . . . . . . . . . . . .  MEMBER   -----  U_LONG   0006H  4
  GateWay. . . . . . . . . . . . . . .  MEMBER   -----  U_LONG   000AH  4
  input. . . . . . . . . . . . . . . .  MEMBER   -----  PTR      000EH  2
  output . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0010H  2
  Info . . . . . . . . . . . . . . . .  MEMBER   -----  VOID_PTR 0012H  2
BOOL . . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_CHAR   -----  1
_?EtherInput . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  NetIf. . . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0006H  2
  MemHead. . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0000H  2
  pEtherHead . . . . . . . . . . . . .  AUTO     IDATA  PTR      0002H  2
  p. . . . . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0004H  2
_?EtherOutput. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  MemHead. . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0006H  2
  NetIf. . . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0008H  2
  DestIP . . . . . . . . . . . . . . .  AUTO     IDATA  U_LONG   000AH  4
  NextIP . . . . . . . . . . . . . . .  AUTO     IDATA  U_INT    0000H  2
  pEtherHead . . . . . . . . . . . . .  AUTO     IDATA  PTR      0002H  2
  p. . . . . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0004H  2
BYTE . . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_CHAR   -----  1
WORD . . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
SEtherHead . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  14
  DestAddr . . . . . . . . . . . . . .  MEMBER   -----  ARRAY    0000H  6
  ScrAddr. . . . . . . . . . . . . . .  MEMBER   -----  ARRAY    0006H  6
  type . . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    000CH  2
_?MemFree. . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_?IPInput. . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
SARPEntry. . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  12
  IPAddr . . . . . . . . . . . . . . .  MEMBER   -----  U_LONG   0000H  4
  EtherAddr. . . . . . . . . . . . . .  MEMBER   -----  ARRAY    0004H  6
  time . . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    000AH  2
_?EtherDevInit . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  pDevice. . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0000H  2
  EtherAddr. . . . . . . . . . . . . .  AUTO     IDATA  PTR      0002H  3
  send . . . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0005H  2
  recv . . . . . . . . . . . . . . . .  AUTO     IDATA  PTR      0007H  2
_?MemCopy. . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
C51 COMPILER V7.06   ETHERIF                                                               07/24/2007 16:32:45 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


SIPHead. . . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  20
  Ver_HeadLen. . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1
  ServeType. . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1
  TotalLen . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0002H  2
  FragmentID . . . . . . . . . . . . .  MEMBER   -----  U_INT    0004H  2
  FragmentFlag_Offset. . . . . . . . .  MEMBER   -----  U_INT    0006H  2
  LifeLength . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0008H  1
  Protocol . . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0009H  1
  CheckSum . . . . . . . . . . . . . .  MEMBER   -----  U_INT    000AH  2
  IPScr. . . . . . . . . . . . . . . .  MEMBER   -----  U_LONG   000CH  4
  IPDest . . . . . . . . . . . . . . .  MEMBER   -----  U_LONG   0010H  4
SMemHead . . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  9
  pNext. . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0000H  2
  pPre . . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0002H  2
  used . . . . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0004H  1
  pStart . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0005H  2
  pEnd . . . . . . . . . . . . . . . .  MEMBER   -----  PTR      0007H  2


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1017    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   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 + -