New Pie Engineer
4 years ago in C
新派工程師宣稱: ”網路設備都有其吞吐量限制, 超過流量本來就會直接當機”
好吧, 就依據新派工程師奉為圭臬的 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*/);
}
}
}