linux内核网络源码分析--功能专用字段‘每日读书’

linux内核模块允许选择包含什么以及省略什么因此只有当内核编译支持特定功能时候防火墙或者Qos某些字段才会包含在sk_buff数据结构

unsigned long nfmark

__u32 nfcache

__u32 nfctinfo

struct nf_conntrack *nfct

unsigned int nfdebug

struct nf_bridge_info *nf_bridge

这些参数netfileter 使用明确就是内核选项Device Drivers->Networking support->Networkiong options ->Networking packet filtering

以及两个子选项Network packet filtering debuggingBridged IP/ARP packets filteriing 所用

uinon {...} private

这个联合HIPPI(High Performance Parallel interface 高性能并行接口)使用

先关联内核选项Device Drivers->Networking support->Networkong device support

__u32 tc_index

__u32 tc_verd

__u32 tc_classid

这些参数流量控制功能使用明确就是内核选项Device Drivers->Networking support->Networking options->Qos and /or fair queueing 以及其他选项Packet classifier API使用

struct sec_path *sp

IPsec协议组使用以及记录转换信息

管理函数

内核通常提供许多很短很简单函数用以操作sk_buff元素或者元素列表2-4协助描述其中最重要几个函数

首先我们来看用于分配释放缓冲区函数然后用于头部或者预留空间操作指针函数skb->data

如果你查看一下include/linux/skbuff.hNet/core/skbuff.c文件就会注意到几乎所有的函数两个版本名称类似do_something__do_something 通常来讲第一个包裹函数增加了额外合理性检查或者调用第二个函数前后加入上锁机制内部所用__do_somethng 形式通常不会直接调用违反规则通常写得很差函数最终都会修正

sk->data

sk->len

sk->tail

skb_put. skb_push, skb_pull skb_reserve

内存分配alloc_skbdev_alloc_skb

定义在net/core/skbuff.c alloc_skb 是分配缓冲区主要函数我们已经知道数据缓冲区报头sk_buff 数据结构是两种不同实力也就说是建立一个缓冲区涉及两次分配内存一个是分配缓冲区一个分配sk_buff结构

然后嗲用kmalloc 取得一个数据缓冲区代码如下

skb = kmem_cache_alloc(skbuff_head_cache, gfp_mask & &__GFP_DMA)

size = SKB_DATA_ALLIGN(size);

data = kmalloc();size + sizeof(struct skb_shared_info), gfp_mask

调用kmalloc之前size参数SKB_DATA_ALIGN进行调整强制对齐返回之前函数结构中一些参数初始化产生最后结果如图2-5所示

2-5 右侧内存区块低端可以发现引入了填充区域强制对齐skb_shared_info主要用于处理一些IP片段本章稍后予以描述左侧字段已经先前说明

填充区域 size SKB_DATA_ALIGN(size)

struct skb_shared_info

len = 0

head

data

tail

end

dev_alloc_skb 是由设备驱动程序使用缓冲区分配函数而且应该是中断模式中执行此函数是一个包裹alloc_skb函数为了优化原因申请大小之上16字节而且因为函数中断事件处理函数调用所以要求原子操作

GFP_ATOMIC

static inline struct sk_buff *dev_alloc_skb(unsigned int 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 (likyly(skb))

skb_reserve(skb, 16);

return skb;

}

没有体系结构说明定义__dev_alloc_skb 定义就是默认

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xss.pwnfunction-Ugandan Knuckles

这个是把<>过滤掉了所以只能用js的事件 ?weya"onfocus"alert(1337)" autofocus"

基于springboot的社区医疗服务系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

数据结构面试题报错调试方法记录

栈和队列报错调试 1.用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 此题解题思路如下&#xff1a; 先将数据放在pushst栈里面&#xff0c;popst栈为空再把pushst栈里面的数据放进popst栈里面去&#xff0c;不为空则不执行。不为空时候直接拿取栈…

基于C语言实现 SQL数据库和链表的相互转换

使用的函数介绍 这里sqlite3_open、sqlite3_close就不介绍了 sqlite3_prepare_v2()&#xff1a; 函数原型&#xff1a;int sqlite3_prepare_v2(sqlite3* db, const char* zSql, int nByte, sqlite3_stmt** ppStmt, const char** pzTail);作用&#xff1a;准备 SQL 语句以供执…

WSL2迁移后默认登陆用户为root的解决方案

第一步&#xff0c;在wsl的root用户下面用vim打开/etc/wsl.conf文件 vim /etc/wsl.conf第二步&#xff0c;在文件中添加以下代码, 仅需把user_name替换成你原来wsl的用户名即可 [user] defaultuser_name如 [user] defaultpengyuyan重启wsl,在powershell下输入 wsl --shutdo…

【GDB】GDB解CORE文件

目录 一 GDB解析CORE文件(Linux) 二 GDB解析CORE文件(QNX) 在 Linux 系统中,当一个进程发生崩溃或异常时,它会生成一个所谓的 core dump 文件,其中包含了该进程的内存映像和一些调试信息。这个文件可以用于分析和解决崩溃问题,以便了解进程崩溃时的状态和原因

多模态text-image模型之ITM loss(blip)

主要代码&#xff1a; # forward the positve image-text pair # 正向传播正面的图像文本对 output_pos self.text_encoder.bert(encoder_embedstext_embeds, attention_masktext.attention_mask,encoder_hidden_statesimage_embeds,encoder_attention_maskimage_atts, …

【技术笔记】Ubuntu下VirtualBox不能识别USB解决办法(手把手解决)

环境说明 系统版本&#xff1a;Ubuntu 20.04 VirtualBox版本&#xff1a; 7.0.12 解决过程 扩展下载&#xff0c;进入VirtualBox 官方下载路径。选择本机安装版本&#xff0c;如下图所示&#xff0c;因笔者是7.0.x版本&#xff0c;因此点击第一条链接&#xff1b; 进入版本页…

机器学习(30)

文章目录 摘要一、文献阅读1. 题目2. abstract3. 网络架构3.1 Sequence Generative Adversarial Nets3.2 SeqGAN via Policy Gradient3.3 The Generative Model for Sequences3.4 The Discriminative Model for Sequences(CNN) 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过…

慢SQL问题排查

慢SQL问题排查是一个系统性的过程&#xff0c;它涉及到对数据库性能、查询优化以及系统资源的深入理解。 1. 收集慢查询日志 启用慢查询日志&#xff1a;大多数数据库系统&#xff08;如MySQL、PostgreSQL等&#xff09;都支持慢查询日志功能。启用该功能后&#xff0c;数据库…

关于npm和yarn的使用(自己的问题记录)

目录 一 npm 和 yarn 常用命令 二 package.json中 devDependencies 和 dependencies 的区别。 三 npm安装包时&#xff0c;加 --save和不加的区别 一 npm 和 yarn 常用命令 备注&#xff1a;以下命令以 axios 为例。 未完&#xff1a;待续。。。。 二 ​​​​​​​ …

【Vue3源码学习】— CH2.7 Computed: Vue 3 计算属性深入解析

Computed: Vue 3 计算属性深入解析 1.计算属性的基本用法2. ComputedRefImpl 类深入解析JavaScript 中的 getter 函数 3. 计算属性的创建&#xff1a;computed 方法解析3.1 源码解析3.2 使用示例 4. 计算属性的工作原理5. 手动实现简化的计算属性6. 结语 在 Vue 3 的响应式系统…

【教程】VOC数据集制作

语义分割任务中VOC数据集的制作&#xff0c;任务中只有一种标签&#xff1a;gas 文章目录 1、由黑白图像识别为txt标签2、txt转json3、数据集转VOC格式 1、由黑白图像识别为txt标签 由于使用CycleGAN网络进行风格迁移学习&#xff0c;生成了大量伪标签图像&#xff0c;因此需…

【递归与递推】数的计算|数的划分|耐摔指数

1.数的计算 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a; 1.dfs的变量>每一次递归什么在变&#xff1f; &#xff08;1&#xff09;当前数的大小一直在变&#xff1a;sum &#xff08;2&#xff09;最高位的数&#xff1a;k 2.递归出口&#xff1a;最高位数字为1 3.注意&#…

鱼塘钓鱼(c++实现)

题目 有 N 个鱼塘排成一排&#xff0c;每个鱼塘中有一定数量的鱼&#xff0c;例如&#xff1a;N5 时&#xff0c;如下表&#xff1a; 即&#xff1a;在第 1 个鱼塘中钓鱼第 1 分钟内可钓到 10 条鱼&#xff0c;第 2 分钟内只能钓到 8 条鱼&#xff0c;……&#xff0c;第 5 分…

Codeforces Round 932 (Div. 2) ---- F. Andrey‘s Tree ---- 题解

F. Andreys Tree&#xff1a; 题目描述&#xff1a; 思路解析&#xff1a; 我们假设删除任意一个结点后&#xff0c;我们会将整个树切分为k个联通块&#xff0c;那么可以明确的知道我们只需要连接(k-1)条边就可以将这k个联通块重新连为一棵树。 那么最小代价是啥呢? 图解分…

0基础进入IT行业

0基础如何进入IT行业&#xff1f; 简介&#xff1a;对于没有任何相关背景知识的人来说&#xff0c;如何才能成功进入IT行业&#xff1f;是否有一些特定的方法或技巧可以帮助他们实现这一目标&#xff1f; 方向一&#xff1a;学习路径 对于零基础进入 IT 行业的人来说&#xff…

第十五题:最大距离

题目描述 在数列 a1,a2,⋯ ,an​中&#xff0c;定义两个元素 ai 和 aj​ 的距离为∣i−j∣∣ai−aj∣&#xff0c;即元素下标的距离加上元素值的差的绝对值&#xff0c;其中 ∣x∣ 表示 x 的绝对值。 给定一个数列&#xff0c;请问找出元素之间最大的元素距离。 输入描述 …

【网站项目】校园订餐小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

鱼骨图功能实现

dom: <div class="module-content"><div class="title"><span>[</span><p>鱼骨图</p><span>]</span></div><div class="line-mian"></div><div :ref="module + i&q…