close

netif_rx() 是在封包接收中非常重要的函式

和 net_rx_action() 被我視為是同等重要的地位

在 2.6.23.17 以前

net/core/dev.c 中的 netif_rx() 會把封包排入每 CPU 的 input_pkt_queue

然後呼叫 netif_rx_schedule() 把 NET_RX_SOFTIRQ 這個軟體中斷 mark 起來

當 scheduler 在 do_softirq 時就會發現有軟體中斷被標記

確認是 NET_RX_SOFTIRQ 之後,net_rx_action() 會被呼叫執行



然而,隨著 NPAI 的引進

NAPI 逐漸整合或是取代掉原本很多結構中的 member 或是程式碼中的 function

例如每 CPU 的資料結構(softnet_data)

在 2.6.24 之後

netif_rx_schedule() 被更名為 napi_schedule()

但是其內所做的事情大同小異

最後都會執行到 __raise_softirq_irqoff(NET_RX_SOFTIRQ) 把軟體中斷做標記



結論就是,程式碼隨著時間的進行一直在變

看前人的書(歐萊禮那本超大本的核心碼版本是2.6.11)所學的是大方向、大概念

小孫我在列印 code 時(12/4)的核心版本是 2.6.27.7

昨天(12/18)晚上就已經釋出 2.6.27.10 的版本了

不過大版本(major)還是沒有變,變的是一些小地方修正,所以還好 :)

arrow
arrow
    全站熱搜

    fantasymew 發表在 痞客邦 留言(0) 人氣()