新派工程師宣稱: ”網路設備都有其吞吐量限制, 超過流量本來就會直接當機” 好吧, 就依據新派工程師奉為圭臬的 Talk is cheap show me the code 來幹吧 看看 lwIP TCP Stack 的 Code, 超過流量會不會直接當機 (CS8900 Ethernet Controller) CS8900 收到一個完整的 Ethernet Frame, 發出 Interrupt, 控制權交到 irq_handler() irq_handler() 會先看看 Queue 中還沒有空間可以儲存新進的 Packet (紅色斜體標示), 如果 Queue 已經滿了, 就當作沒看到, 直接 DROP PACKET. 以這一份 Code, 左看右看, 就算 CPU 慢, 來不急應付新進來的 Ethernet Frame, 也就直接 丟了根本不處理, 實在搞不懂為何 lwIP 收到過多的 Packet 會直接當機? 有沒有哪位新派工程師出來指導一下這樣幹為何會當季? 莫非說新派工程師不屑檢查 Queue 空間夠不夠, 這樣才會直接當機? /** * CS8900A interrupt handler, pulls incoming data from chip into FIFO */ static void irq_handler(void) { while (ISQ != 0) { /* (ISQ & 0x3F) will always be 4 here (RX event) */ int16_t len; /* Discard first word: status */ len = RXTXREG; len = RXTXREG; if ((head - tail) < (FIFO_WORDS - 1 - ((len + 1) / 2))) { /* Got space for packet in FIFO */ pull_data(len); } else { /* Drop packet */ PACKETPP = CS_PP_RXCFG; PPDATA = (0x0003U | 0x0100U/*RxOKiE*/ | 0x0040U/*Skip_1*/); } } }