亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uip_arp.lst

?? 運行環境是keil。這是一個實現嵌入式TCP/IP的程序
?? LST
字號:
C51 COMPILER V7.06   UIP_ARP                                                               04/05/2006 12:13:01 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UIP_ARP
OBJECT MODULE PLACED IN .\DEBUG\uip_arp.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uip\uip_arp.c LARGE OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\DEB
                    -UG\uip_arp.lst) OBJECT(.\DEBUG\uip_arp.obj)

stmt level    source

   1          
   2          #include "uip_arp.h"
   3          
   4          struct arp_hdr {
   5            struct uip_eth_hdr ethhdr;
   6            u16_t hwtype;
   7            u16_t protocol;
   8            u8_t hwlen;
   9            u8_t protolen;
  10            u16_t opcode;
  11            struct uip_eth_addr shwaddr;
  12            u16_t sipaddr[2];
  13            struct uip_eth_addr dhwaddr;
  14            u16_t dipaddr[2]; 
  15          };
  16          
  17          struct ethip_hdr {
  18            struct uip_eth_hdr ethhdr;
  19            /* IP header. */
  20            u8_t vhl,
  21              tos,          
  22              len[2],       
  23              ipid[2],        
  24              ipoffset[2],  
  25              ttl,          
  26              proto;     
  27            u16_t ipchksum;
  28            u16_t srcipaddr[2], 
  29              destipaddr[2];
  30          };
  31          
  32          #define ARP_REQUEST 1
  33          #define ARP_REPLY   2
  34          
  35          #define ARP_HWTYPE_ETH 1
  36          
  37          struct arp_entry {
  38            u16_t ipaddr[2];
  39            struct uip_eth_addr ethaddr;
  40            u8_t time;
  41          };
  42          
  43          static const struct uip_eth_addr ethaddr = {{UIP_ETHADDR0,
  44                                                       UIP_ETHADDR1,
  45                                                       UIP_ETHADDR2,
  46                                                       UIP_ETHADDR3,
  47                                                       UIP_ETHADDR4,
  48                                                       UIP_ETHADDR5}};
  49          
  50          static struct arp_entry arp_table[UIP_ARPTAB_SIZE];
  51          static u16_t ipaddr[2];
  52          static u8_t i, c;
  53          
  54          static u8_t time;
C51 COMPILER V7.06   UIP_ARP                                                               04/05/2006 12:13:01 PAGE 2   

  55          static u8_t tmpage;
  56          
  57          #define BUF   ((struct arp_hdr *)&uip_buf[0])
  58          #define IPBUF ((struct ethip_hdr *)&uip_buf[0])
  59          /*-----------------------------------------------------------------------------------*/
  60          void
  61          uip_arp_init(void)
  62          {
  63   1        for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
  64   2          arp_table[i].ipaddr[0] =
  65   2            arp_table[i].ipaddr[1] = 0;
  66   2        }
  67   1      }
  68          /*-----------------------------------------------------------------------------------*/
  69          void
  70          uip_arp_timer(void)
  71          {
  72   1        ++time;
  73   1        for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
  74   2          if((arp_table[i].ipaddr[0] | arp_table[i].ipaddr[1]) != 0 &&
  75   2             time - arp_table[i].time >= UIP_ARP_MAXAGE) {
  76   3            arp_table[i].ipaddr[0] =
  77   3              arp_table[i].ipaddr[1] = 0;
  78   3          }
  79   2        }
  80   1      
  81   1      }
  82          /*-----------------------------------------------------------------------------------*/
  83          static void
  84          uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
  85          {
  86   1        /* Walk through the ARP mapping table and try to find an entry to
  87   1           update. If none is found, the IP -> MAC address mapping is
  88   1           inserted in the ARP table. */
  89   1        for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
  90   2          
  91   2          /* Only check those entries that are actually in use. */
  92   2          if(arp_table[i].ipaddr[0] != 0 &&
  93   2             arp_table[i].ipaddr[1] != 0) {
  94   3      
  95   3            /* Check if the source IP address of the incoming packet matches
  96   3               the IP address in this ARP table entry. */
  97   3            if(ipaddr[0] == arp_table[i].ipaddr[0] &&
  98   3               ipaddr[1] == arp_table[i].ipaddr[1]) {
  99   4               
 100   4              /* An old entry found, update this and return. */
 101   4              for(c = 0; c < 6; ++c) {
 102   5                arp_table[i].ethaddr.addr[c] = ethaddr->addr[c];
 103   5              }
 104   4              arp_table[i].time = time;
 105   4              return;
 106   4            }
 107   3          }
 108   2        }
 109   1      
 110   1        /* If we get here, no existing ARP table entry was found, so we
 111   1           create one. */
 112   1      
 113   1        /* First, we try to find an unused entry in the ARP table. */
 114   1        for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
 115   2          if(arp_table[i].ipaddr[0] == 0 &&
 116   2             arp_table[i].ipaddr[1] == 0)
C51 COMPILER V7.06   UIP_ARP                                                               04/05/2006 12:13:01 PAGE 3   

 117   2            break;    
 118   2        }
 119   1      
 120   1        /* If no unused entry is found, we try to find the oldest entry and
 121   1           throw it away. */
 122   1        if(i == UIP_ARPTAB_SIZE) {
 123   2          tmpage = 0;
 124   2          c = 0;
 125   2          for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
 126   3            if(time - arp_table[i].time > tmpage) {
 127   4              tmpage = time - arp_table[i].time;
 128   4              c = i;
 129   4            }
 130   3          }
 131   2          i = c;
 132   2        }
 133   1      
 134   1        /* Now, i is the ARP table entry which we will fill with the new
 135   1           information. */
 136   1        arp_table[i].ipaddr[0] = ipaddr[0];
 137   1        arp_table[i].ipaddr[1] = ipaddr[1];
 138   1        for(c = 0; c < 6; ++c) {
 139   2          arp_table[i].ethaddr.addr[c] = ethaddr->addr[c];
 140   2        }
 141   1        arp_table[i].time = time;
 142   1      }
 143          /*-----------------------------------------------------------------------------------*/
 144          void
 145          uip_arp_ipin(void)
 146          {
 147   1      
 148   1        /* Only insert/update an entry if the source IP address of the
 149   1           incoming IP packet comes from a host on the local network. */
 150   1        if((IPBUF->srcipaddr[0] & htons((UIP_NETMASK0 << 8) | UIP_NETMASK1)) !=
 151   1           (htons((UIP_IPADDR0 << 8) | UIP_IPADDR1)
 152   1            & htons((UIP_NETMASK0 << 8) | UIP_NETMASK1)))
 153   1          return;
 154   1        if((IPBUF->srcipaddr[1] & htons((UIP_NETMASK2 << 8) | UIP_NETMASK3)) !=
 155   1           (htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)
 156   1            & htons((UIP_NETMASK2 << 8) | UIP_NETMASK3)))
 157   1          return;
 158   1      
 159   1        uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src));
 160   1        
 161   1        // uip length fix for ethernet padding and ethernet header
 162   1        uip_len = (IPBUF->len[1]) + ((IPBUF->len[0])<<8) ;
 163   1        
 164   1        return;
 165   1      }
 166          /*-----------------------------------------------------------------------------------*/
 167          void
 168          uip_arp_arpin(void)
 169          {
 170   1      
 171   1        if(uip_len < sizeof(struct arp_hdr)) {
 172   2          uip_len = 0;
 173   2          return;
 174   2        }
 175   1      
 176   1        uip_len = 0;
 177   1        
 178   1        switch(BUF->opcode) {
C51 COMPILER V7.06   UIP_ARP                                                               04/05/2006 12:13:01 PAGE 4   

 179   2        case htons(ARP_REQUEST):
 180   2          /* ARP request. If it asked for our address, we send out a
 181   2             reply. */
 182   2          if(BUF->dipaddr[0] == htons((UIP_IPADDR0 << 8) | UIP_IPADDR1) &&
 183   2             BUF->dipaddr[1] == htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)) {
 184   3            /* The reply opcode is 2. */
 185   3            BUF->opcode = htons(2);
 186   3            BUF->dhwaddr = BUF->shwaddr;
 187   3      
 188   3            for(c = 0; c < 6; ++c) {
 189   4              BUF->shwaddr.addr[c] = 
 190   4                BUF->ethhdr.src.addr[c] = ethaddr.addr[c];
 191   4              BUF->ethhdr.dest.addr[c] = BUF->dhwaddr.addr[c];
 192   4            }
 193   3      
 194   3            BUF->dipaddr[0] = BUF->sipaddr[0];
 195   3            BUF->dipaddr[1] = BUF->sipaddr[1];
 196   3            BUF->sipaddr[0] = htons((UIP_IPADDR0 << 8) | UIP_IPADDR1);
 197   3            BUF->sipaddr[1] = htons((UIP_IPADDR2 << 8) | UIP_IPADDR3);
 198   3      
 199   3            BUF->ethhdr.type = htons(UIP_ETHTYPE_ARP);      
 200   3            uip_len = sizeof(struct arp_hdr);
 201   3          }      
 202   2          break;
 203   2        case htons(ARP_REPLY):
 204   2          /* ARP reply. We insert or update the ARP table if it was meant
 205   2             for us. */
 206   2          if(BUF->dipaddr[0] == htons((UIP_IPADDR0 << 8) | UIP_IPADDR1) &&
 207   2             BUF->dipaddr[1] == htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)) {
 208   3      
 209   3            uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
 210   3          }
 211   2          break;
 212   2        }
 213   1      
 214   1        return;
 215   1      }
 216          /*-----------------------------------------------------------------------------------*/
 217          void
 218          uip_arp_out(void)
 219          {
 220   1        /* Find the destination IP address in the ARP table and construct
 221   1           the Ethernet header. If the destination IP addres isn't on the
 222   1           local network, we use the default router's IP address instead.
 223   1      
 224   1           If not ARP table entry is found, we overwrite the original IP
 225   1           packet with an ARP request for the IP address. */
 226   1      
 227   1        /* Check if the destination address is on the local network. */
 228   1        if((IPBUF->destipaddr[0] & htons((UIP_NETMASK0 << 8) | UIP_NETMASK1)) !=
 229   1           (htons((UIP_IPADDR0 << 8) | UIP_IPADDR1)
 230   1            & htons((UIP_NETMASK0 << 8) | UIP_NETMASK1)) ||
 231   1           (IPBUF->destipaddr[1] & htons((UIP_NETMASK2 << 8) | UIP_NETMASK3)) !=
 232   1           (htons((UIP_IPADDR2 << 8) | UIP_IPADDR3)
 233   1            & htons((UIP_NETMASK2 << 8) | UIP_NETMASK3))) {
 234   2          /* Destination address was not on the local network, so we need to
 235   2             use the default router's IP address instead of the destination
 236   2             address when determining the MAC address. */
 237   2          ipaddr[0] = htons((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1);
 238   2          ipaddr[1] = htons((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3);
 239   2        } else {
 240   2          /* Else, we use the destination IP address. */
C51 COMPILER V7.06   UIP_ARP                                                               04/05/2006 12:13:01 PAGE 5   

 241   2          ipaddr[0] = IPBUF->destipaddr[0];
 242   2          ipaddr[1] = IPBUF->destipaddr[1];
 243   2        }
 244   1            
 245   1        for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
 246   2          if(ipaddr[0] == arp_table[i].ipaddr[0] &&
 247   2             ipaddr[1] == arp_table[i].ipaddr[1])
 248   2            break;
 249   2        }
 250   1      
 251   1        if(i == UIP_ARPTAB_SIZE) {
 252   2          /* The destination address was not in our ARP table, so we
 253   2             overwrite the IP packet with an ARP request. */
 254   2      
 255   2          for(c = 0; c < 6; ++c) {     
 256   3            BUF->ethhdr.dest.addr[c] = 0xff; /* Broadcast ARP request. */
 257   3            BUF->ethhdr.src.addr[c] = 
 258   3              BUF->shwaddr.addr[c] = ethaddr.addr[c];
 259   3            BUF->dhwaddr.addr[c] = 0;
 260   3          }
 261   2          
 262   2          BUF->dipaddr[0] = ipaddr[0];
 263   2          BUF->dipaddr[1] = ipaddr[1];
 264   2          BUF->sipaddr[0] = htons((UIP_IPADDR0 << 8) | UIP_IPADDR1);
 265   2          BUF->sipaddr[1] = htons((UIP_IPADDR2 << 8) | UIP_IPADDR3);
 266   2          BUF->opcode = htons(ARP_REQUEST); /* ARP request. */
 267   2          BUF->hwtype = htons(ARP_HWTYPE_ETH);
 268   2          BUF->protocol = htons(UIP_ETHTYPE_IP);
 269   2          BUF->hwlen = 6;
 270   2          BUF->protolen = 4;
 271   2          BUF->ethhdr.type = htons(UIP_ETHTYPE_ARP);
 272   2      
 273   2          uip_appdata = &uip_buf[40 + UIP_LLH_LEN];
 274   2          
 275   2          uip_len = sizeof(struct arp_hdr);
 276   2          return;
 277   2        }
 278   1      
 279   1        /* Build an ethernet header. */
 280   1        for(c = 0; c < 6; ++c) {
 281   2          IPBUF->ethhdr.dest.addr[c] = arp_table[i].ethaddr.addr[c];
 282   2          IPBUF->ethhdr.src.addr[c] = ethaddr.addr[c];                
 283   2        }
 284   1        IPBUF->ethhdr.type = htons(UIP_ETHTYPE_IP);
 285   1      
 286   1        uip_len += sizeof(struct uip_eth_hdr);
 287   1      }
 288          /*-----------------------------------------------------------------------------------*/
 289          
 290          
 291          
 292          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1618    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     25       6
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V7.06   UIP_ARP                                                               04/05/2006 12:13:01 PAGE 6   

END OF MODULE INFORMATION.


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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视视频在线直接观看在线看网页在线看 | 欧美理论在线播放| 99久久国产综合精品女不卡| 精品一区二区三区蜜桃| 韩国精品久久久| 国内精品嫩模私拍在线| 国产精品一区二区你懂的| 国产一二三精品| 成人看片黄a免费看在线| 成人av动漫在线| 色婷婷久久久亚洲一区二区三区| 色综合中文字幕| 欧美巨大另类极品videosbest| 欧美片在线播放| 欧美精品一区二区蜜臀亚洲| 久久久久99精品一区| 亚洲同性gay激情无套| 亚洲自拍偷拍综合| 欧美bbbbb| 成人激情免费网站| 欧美精选午夜久久久乱码6080| 日韩午夜在线观看视频| 国产亚洲精品超碰| 一区二区三区美女视频| 美女在线一区二区| 成人精品免费视频| 91精选在线观看| 国产偷国产偷亚洲高清人白洁| 亚洲视频在线一区二区| 日本怡春院一区二区| 国产成人免费9x9x人网站视频| 在线视频亚洲一区| 2024国产精品| 午夜视频在线观看一区| 国产主播一区二区| 色婷婷久久综合| 精品国产欧美一区二区| 亚洲欧美偷拍另类a∨色屁股| 免费的国产精品| 日本道在线观看一区二区| 欧美刺激午夜性久久久久久久| 国产精品九色蝌蚪自拍| 麻豆国产精品官网| 99精品1区2区| 精品国产免费久久| 自拍偷拍亚洲欧美日韩| 精品一区中文字幕| 91论坛在线播放| 国产精品天美传媒| 精品一区二区影视| 51精品国自产在线| 亚洲一级二级三级| 91年精品国产| 亚洲国产高清在线观看视频| 理论片日本一区| 欧美伦理影视网| 亚洲一区二区三区小说| 不卡一区在线观看| 国产人伦精品一区二区| 免费人成黄页网站在线一区二区| 在线观看区一区二| 一区二区三区四区乱视频| 不卡av免费在线观看| 久久精品人人爽人人爽| 精品一区免费av| 欧美成人高清电影在线| 视频一区免费在线观看| 欧美中文字幕久久| 亚洲线精品一区二区三区| 色国产综合视频| 伊人夜夜躁av伊人久久| 一本色道亚洲精品aⅴ| 亚洲图片你懂的| 色婷婷综合久色| 亚洲精品videosex极品| 色999日韩国产欧美一区二区| 国产精品久久久久久久久果冻传媒| 国产成人午夜视频| 欧美极品xxx| av在线一区二区三区| 中文字幕一区二区三区在线观看| av网站一区二区三区| 国产精品久久久久久户外露出 | 国产精品一区专区| 国产日韩欧美精品在线| 国产a视频精品免费观看| 国产精品久久久久四虎| 成人免费av在线| 亚洲欧美日韩小说| 欧美美女直播网站| 精品写真视频在线观看| 国产精品网曝门| 欧美性猛交xxxx乱大交退制版| 午夜精品aaa| 久久亚洲二区三区| 91在线视频免费观看| 亚洲电影第三页| 久久综合狠狠综合久久综合88 | 欧美日韩日本视频| 久久99精品国产.久久久久 | 99视频有精品| 日日摸夜夜添夜夜添精品视频| 日韩欧美电影一区| jvid福利写真一区二区三区| 亚洲成人第一页| 久久久久久久av麻豆果冻| 色综合久久综合网欧美综合网 | 久久婷婷国产综合国色天香 | 亚洲成人免费在线| 久久久久一区二区三区四区| 99久久婷婷国产综合精品| 亚洲成人tv网| 国产女人18水真多18精品一级做| 欧美日韩在线播放一区| 国产盗摄女厕一区二区三区| 亚洲综合一区在线| 中文字幕免费观看一区| 欧美一区二区三区四区五区 | 性欧美疯狂xxxxbbbb| 久久久综合激的五月天| 欧美美女网站色| 色诱视频网站一区| 国产成人免费在线观看| 蜜臀va亚洲va欧美va天堂| 亚洲乱码国产乱码精品精98午夜| 精品福利一二区| 欧美情侣在线播放| 色婷婷精品大在线视频| 成人一二三区视频| 国产原创一区二区三区| 日韩va亚洲va欧美va久久| 亚洲欧美日韩国产成人精品影院| 久久久美女艺术照精彩视频福利播放| 欧美另类变人与禽xxxxx| 91国偷自产一区二区开放时间| 国产高清精品久久久久| 国产一区不卡在线| 国模冰冰炮一区二区| 久久国产精品免费| 麻豆精品视频在线观看视频| 亚洲成人免费电影| 亚洲最新视频在线观看| 1000精品久久久久久久久| 国产人久久人人人人爽| 久久这里都是精品| 日韩天堂在线观看| 欧美一区二区三区人| 99精品视频一区| 99久久综合色| 99天天综合性| 色综合中文字幕国产 | 久久久久久久久岛国免费| 日韩欧美一二三四区| 6080国产精品一区二区| 在线观看精品一区| 色天使色偷偷av一区二区| 色狠狠一区二区三区香蕉| 91黄色小视频| 欧美日韩成人综合| 91精品国产综合久久久蜜臀图片 | 国产成人精品三级麻豆| 国产美女精品一区二区三区| 国产一区二区中文字幕| 精品一二线国产| 精久久久久久久久久久| 久99久精品视频免费观看| 国内精品视频一区二区三区八戒 | 亚洲精选视频免费看| 一区二区三区欧美久久| 午夜电影久久久| 精品影院一区二区久久久| 国产精品一区二区你懂的| 国产成人av福利| 91视频在线观看| 欧美日韩国产片| 亚洲精品一区二区在线观看| 国产精品嫩草影院av蜜臀| 亚洲免费av高清| 美女看a上一区| 波多野结衣亚洲一区| 91成人在线精品| 日韩三级视频中文字幕| 国产精品久久久久一区二区三区共| 亚洲欧美日本韩国| 日本不卡免费在线视频| 风间由美一区二区三区在线观看| 91一区二区三区在线观看| 欧美日韩国产首页在线观看| 2023国产一二三区日本精品2022| 亚洲三级电影全部在线观看高清| 亚洲线精品一区二区三区八戒| 久久99久久99小草精品免视看| 成人深夜视频在线观看| 欧美日韩精品欧美日韩精品一| 精品福利在线导航| 亚洲国产成人av好男人在线观看| 久草在线在线精品观看| 色久综合一二码| 国产亚洲精品7777| 日韩精品国产精品|