【发布时间】:2014-08-23 04:33:43
【问题描述】:
谁能帮我解决以下问题:
我计划向现有 Linux 内核添加新协议。我的疑问是如何在使用 skb_alloc() 调用分配内存之前找出 sk_buff 结构的大小
【问题讨论】:
标签: linux linux-kernel kernel linux-device-driver
谁能帮我解决以下问题:
我计划向现有 Linux 内核添加新协议。我的疑问是如何在使用 skb_alloc() 调用分配内存之前找出 sk_buff 结构的大小
【问题讨论】:
标签: linux linux-kernel kernel linux-device-driver
没有 skb_alloc 这样的东西。我假设您实际上是要调用 alloc_skb 或 dev_alloc_skb。给 alloc_skb 的 size 参数是您要与其一起分配的 缓冲区 大小。你不需要计算 sk_buff 结构的大小,alloc_skb 已经知道了。换句话说,如果您计划接收最大以太网帧(1518 字节),您可能需要这样的内容:
skb = alloc_skb(1536, GFP_KERNEL);
这会分配一个 sk_buff 结构和一个 1536 字节的关联缓冲区。实际缓冲区在“skb->data”。
【讨论】:
sizeof(struct sk_buff)
或者如果你使用指向 sk_buff 的指针
sizeof(struct sk_buff)
【讨论】: