<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                從前面的章節也知道,ARP是動態處理的,現在總結一下:ARP表項的生存時間是5分鐘,而ARP請求的等待時間是5秒鐘,當這些時間到達后,就會更新ARP表項,如果在物理鏈路層無法連通則會刪除表項。這就需要ARP層有一個超時處理函數對ARP進行管理,這些操作都是根據ARP表項的ctime字段進行的,它記錄著對應表項的生存時間,而超時處理函數是etharp\_tmr(),它是一個周期性的超時處理函數,每隔1秒就調用一次,當ctime的值大于指定的時間,就會刪除對應的表項,具體見代碼清單 10?5。 ``` 1 void 2 etharp_tmr(void) 3 { 4 int i; 5 6 LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); 7 /* 遍歷ARP表,從ARP表中刪除過期的表項 */ 8 for (i = 0; i < ARP_TABLE_SIZE; ++i) (1) 9 { 10 u8_t state = arp_table[i].state; 11 if (state != ETHARP_STATE_EMPTY 12 #if ETHARP_SUPPORT_STATIC_ENTRIES 13 && (state != ETHARP_STATE_STATIC) 14 #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ 15 ) 16 { 17 arp_table[i].ctime++; (2) 18 if ((arp_table[i].ctime >= ARP_MAXAGE) || 19 ((arp_table[i].state == ETHARP_STATE_PENDING) && 20 (arp_table[i].ctime >= ARP_MAXPENDING))) (3) 21 { 22 /* 等待表項穩定或者表項已經過期*/ 23 LWIP_DEBUGF(ETHARP_DEBUG,("etharp_timer: expired %s entry %d.\n", 24 arp_table[i].state >= ETHARP_STATE_STABLE ? "stable" : "pending", i)); 25 /*從ARP表中刪除過期的表項 */ 26 etharp_free_entry(i); (4) 27 } 28 else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_1) 29 { 30 /* 過渡 */ 31 arp_table[i].state = ETHARP_STATE_STABLE_REREQUESTING_2; 32 } 33 else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_2) 34 { 35 /* 進入ETHARP_STATE_STABLE狀態 */ 36 37 arp_table[i].state = ETHARP_STATE_STABLE; 38 } 39 else if (arp_table[i].state == ETHARP_STATE_PENDING) 40 { 41 /*仍然掛起,重新發送ARP請求 */ 42 etharp_request(arp_table[i].netif, &arp_table[i].ipaddr); 43 } 44 } 45 } 46 } ``` (1):由于LwIP的ARP表是比較小的,直接遍歷表即可,更新ARP表的內容。 (2):如果ARP表項不是空的,那么就記錄表項的時間。 (3)(4):當表項的時間大于表項的生存時間(5分鐘),或者表項狀態是ETHARP_STATE_PENDING處于等待目標主機回應ARP請求包,并且等待的時間超過ARP_MAXPENDING(5秒),那么LwIP就認為這些表項是無效了,就調用etharp_free_entry()函數刪除表項。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看