リンクnetworkkernel.pdfで、 Understanding linux networking Internal book と pdf Network packet capture in Linux kernelspaceを読んでいました。
トピック 9.2.2の「Linux ネットワーク内部 の理解」では、次のように説明されています。
入力フレームを処理するコードは 2 つの部分に分割されます。最初に、ドライバーがフレームをカーネルからアクセス可能な入力キューにコピーし、次にカーネルがそれを処理します (通常、次のような関連するプロトコル専用のハンドラーにフレームを渡します)。 IP)。最初の部分は割り込みコンテキストで実行され、2 番目の部分の実行を先取りできます。
クエリは、第 2 部がいつスケジュールされるかです。誰がそれらをスケジュールしますか? 呼び出しは割り込みハンドラで与えられていますか? また、Linux カーネル空間でのネットワーク パケット キャプチャでは、パケット入力フローは次のように説明されています。
When working in interrupt driven model, the nic registers an
interrupt handler;
• This interrupt handler will be called when a frame is received;
• Typically in the handler, we allocate sk buff by calling
dev alloc skb();
• Copies data from nic’s buffer to this struct just created;
• nic call generic reception routine `netif_rx();`
• `netif rx()` put frame in per cpu queue;
• if queue is full, drop!
• net rx action() decision based on skb->protocol;
• This function basically dequeues the frame and delivery a copy
for every protocol handler;
• ptype all and ptype base queues
netif rx(); のタイミングを知りたい および net rx action() が呼び出されますか? 誰がそれらを呼び出すか、誰がそれらをスケジュールするかを意味します。
ガイドしてください。