alloc_skb与dev_alloc_skb异同
来源:互联网 发布:一级建造师网络培训 编辑:程序博客网 时间:2024/04/30 08:53
(1) alloc_skb函数
<linux-2.6.28/include/linux/skbuff.h>
static inline struct sk_buff *alloc_skb(unsigned intsize,gfp_t priority)
{
return__alloc_skb(size, priority, 0, -1);
}
__alloc_skb函数定义于文件<linux-2.6.28/net/core/skbuff.c>,它分配sk_buff结构及数据缓存块:(a)通过kmem_cache_alloc函数从缓存里分配sk_buff数据结构;(b)通过kmalloc分配数据缓冲区。
skb = kmem_cache_alloc(skbuff_head_cache, gfp_mask & ~_ _GFP_DMA);
... ... ...
size = SKB_DATA_ALIGN(size); //对申请的数据区大小进行对界处理
data = kmalloc(size + sizeof(structskb_shared_info), gfp_mask);
alloc_skb分配出来的结构示意图
(2) dev_alloc_skb函数
主要用于设备驱动中,并在中断上下文中使用。它包装了skb_alloc函数并且在分配空间上多分了16字节空间,由于该函数主要在中断里使用,其在分配空间要求置上原子标志位GFP_ATOMIC。
<linux-2.6.28/net/core/skbuff.c>
static inline struct sk_buff *dev_alloc_skb(unsignedint length)
{
return _ _dev_alloc_skb(length,GFP_ATOMIC);
}
static inline struct sk_buff *__dev_alloc_skb(unsigned int length, int gfp_mask)
{
struct sk_buff *skb = alloc_skb(length+ 16, gfp_mask);
if (likely(skb))
skb_reserve(skb, 16);
return skb;
}
skb_reserve分配出来的结构示意图
注意:
这里通常有个疑问就是为什么dev_alloc_skb要多分配16字节的空间呢?
<linux-2.6.28/include/linux/skbuff.h>
Thenetworking layer reserves some headroom in skb data (via dev_alloc_skb). Thisis used to avoid having to reallocate skb data when the header has to grow. Inthe default case, if the header has to grow 16 bytes or less we avoid thereallocation.
由此可知当skb数据头需要增加而又长度又小于16字节时,这样就可利用skb_reserve出来的空间,避免了重新分配。
- alloc_skb与dev_alloc_skb异同
- alloc_skb()
- alloc_skb申请函数分析
- JSF与structs异同
- JavaSript与Java异同
- GetKeyState() 与 GetAsyncKeyState() 异同
- iocp与epoll异同
- Reactor与proActor异同
- C# 与 Java 异同
- addr 与 offset 异同
- $*与$@的异同
- C#与Java异同
- jquery 与JS异同
- mingW与cygwin 异同
- synchronized与volatile异同
- HTML与XML异同
- const与define异同
- Spark 与Storm 异同
- 《『若水新闻』客户端开发教程》——13.代码编写(5)
- VC++ 链接库(四)MFC动态链接库
- 《『若水新闻』客户端开发教程》——14.代码编写(6)
- 最后陪我走下去的会是什么
- android widget 自动删除
- alloc_skb与dev_alloc_skb异同
- cmd下切换中文输入法
- 温文尔雅的伤感空间日志:你心里的痛,是我永远的殇
- Matlab中利用null函数解齐次线性方程组
- uva_10420List of Conquests
- DEDE网站模板被偷,你的友链文件泄了密!
- 年假假统计
- Gson操作json字符串和json对象数组
- Java多态性详解——父类引用子类对象-理解-1