请教个网卡驱动代码问题

日期 : 2022-11-30 19:16:41作者 : 熊人

V 站高人比较多,请教个问题。我在学习网卡驱动,看的是<<深入理解 linux 网络技术内幕>>这本书.里面用的是 3c59x 网卡的例子( 3c59x.c ).其中在申请 buffer 的时候,先是从寄存器里面读取信息赋值给 rx_status.然后通过 rx_status & 0x1ffff 得到 packet 的大小。但使用 dev_alloc_skb (最新的内核使用 netdev_alloc_skb 函数)分配 buffer 的时候为什么还要加 5 呢?

网上找了找,有个网友说这是一种保护机制。没有细讲,不是很明白。找了 linux 的远古 commit 历史,也没有说明。有懂的 V 友能详细说说吗?


/* The packet length: up to 4.5K!. */

short pkt_len = rx_status & 0x1fff;

struct sk_buff *skb;


skb = dev_alloc_skb(pkt_len + 5);

要不是为了 buffer alignment ,要不是加上了某个 header 的最小长度是个魔法数,换句话说 dev_alloc_skb(0)也没有实际意义吧。

标签 :