Notifying the Kernel of Frame Reception: NAPI and netif_rx
In version 2.5 (then backported to a late revision of 2.4 as well), a new API for handling ingress frames was introduced into the Linux kernel, known (for lack of a better name) as NAPI. Since few devices have been upgraded to NAPI, there are two ways a Linux driver can notify the kernel about a new frame:
-
By means of the old function
netif_rx This is the approach used by those devices that follow the technique described in the section "Processing Multiple Frames During an Interrupt" in Chapter 9. Most Linux device drivers still use this approach.
- By means of the NAPI mechanism
This is the approach used by those devices that follow the technique described in the variation introduced at the end of the section "Processing Multiple Frames During an Interrupt" in Chapter 9. This is new in the Linux kernel, and only a few drivers use it. drivers/net/tg3.c was the first one to be converted to NAPI.
A few device drivers allow you to choose between the two types of interfaces when you configure the kernel options with tools such as make xconfig.
The following piece of code comes from vortex_rx,
which still uses the old function netif_rx, and you can
expect most of the network device drivers not yet using NAPI to do something similar:
skb = dev_alloc_skb(pkt_len + 5); ... ... ... if (skb != NULL) { skb->dev = dev; skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ ... ... ... /* copy the DATA into the sk_buff structure */ ... ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access