第一范文网 - 专业文章范例文档资料分享平台

SK - BUFF学习笔记

来源:用户分享 时间:2025/5/26 1:54:01 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

这个分片结构体和sk_buff结构的数据区是一体的,所以在各种操作时都把他们两个结构看做是一个来操作。比如:为sk_buff结构的数据区申请和释放空间时,分片结构也会跟着该数据区一起分配和释放。而克隆时,sk_buff的数据区和分片结构都由分片结构中的 dataref 成员字段来标识是否被引用。

下面来看下sk_buff结构的数据区和分片结构的关系图:

从上图也可以看出来分片结构和sk_buff的数据区连在一起,end指针的下个字节就是分片结构的开始位置。那访问分片结构时,可以直接用end指针作为这个分片结构体的开始(记得要强转成分片结构体)或者用内核定义好的宏:

#define skb_shinfo(SKB) ((struct skb_shared_info *)((SKB)->end)) 去访问也可以,其本质也是返回个sk_buff的end指针。

分片结构体的数据区:

在讲分片结构时,谈到其中有个成员字段非常重要:skb_frag_t

frags[MAX_SKB_FRAGS]; 其实这就和分片结构的数据区有关。下面来讲下这个数字中的元素结构体:

typedef struct skb_frag_struct skb_frag_t; struct skb_frag_struct { };

struct page *page; // 指向分片数据区的指针,类似于sk_buff__u32 page_offset; // 偏移量,表示从page指针指向的地方,偏__u32 size; // 数据区的长度,即:sk_buff结构中的data_len 中的data指针 移page_offset

还是请看下面的两幅图:

上面这幅图是用数组存储的分片数据区指针的,这是一种分片数据类型。下面看另外一种用frag_list指针来指向的分片数据类型:

对于sk_buff结构体及相关结构体就分析这些吧,这是对sk_buff结构体的一个全面透彻的分析,后面还会研究下sk_buff结构相关的操作函数。

摘自:http://blog.csdn.net/yuzhihui_no1/article/details/38666589

搜索更多关于: SK - BUFF学习笔记 的文档
SK - BUFF学习笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1c0b03o6cu2p7v440mf6_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top