没有合适的资源?快使用搜索试试~ 我知道了~
linux内核IMQ源码实现分析.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 37 浏览量
2021-11-05
08:48:05
上传
评论
收藏 89KB PDF 举报
温馨提示
试读
9页
linux内核IMQ源码实现分析.pdf
资源推荐
资源详情
资源评论
linux-2.6.35 内核 IMQ 源码实现分析 2011-8-23
1 /
9
本文档的 Copyleft 归 wwwlkk 所有,使用 GPL 发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁
用于任何商业用途。
E-mail: wwwlkk@126.com
来源 : http://passport.baidu.com/?business&aid=6&un=wwwlkk#7
linux2.6.35 内核 IMQ 源码实现分析
(1)数据包截留并重新注入协议栈技术 ................................................................................................. 1
(2)及时处理数据包技术 ......................................................................................................................... 2
(3)IMQ 设备数据包重新注入协议栈流程 ............................................................................................ 4
(4)IMQ 截留数据包流程 ........................................................................................................................ 4
(5)IMQ 在软中断中及时将数据包重新注入协议栈 ............................................................................ 7
(6)结束语 ................................................................................................................................................. 9
前言: IMQ 用于入口流量整形和全局的流量控制, IMQ 的配置是很简单的,但很少人分析过
IMQ 的内核实现,网络上也没有 IMQ 的源码分析文档,为了搞清楚 IMQ 的性能,稳定性,以及
借鉴 IMQ 的技术,本文分析了 IMQ 的内核实现机制。
首先揭示 IMQ 的核心技术:
1. 如何从协议栈中截留数据包,并能把数据包重新注入协议栈。
2. 如何做到及时的将数据包重新注入协议栈。
实际上 linux 的标准内核已经解决了以上 2 个技术难点,第 1 个技术可以在 NF_QUEUE 机制
中看到,第二个技术可以在发包软中断中看到。下面先介绍这 2 个技术。
(1)数据包截留并重新注入协议栈技术
okfn 参数:
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device
*orig_dev){
。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。
return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING , skb, dev, NULL,
ip_rcv_finish);//下一流程是进入函数 ip_rcv_finish。
}
static inline int
NF_HOOK(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *)) //将 ip_rcv_finish地址作为参数传入。
{
return NF_HOOK_THRESH (pf, hook, skb, in, out, okfn, INT_MIN);
}
static inline int
NF_HOOK_THRESH(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *), int thresh)
{
int ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, thresh);
if (ret == 1)
ret = okfn(skb);//根据函数地址进入之前的 ip_rcv_finish函数。
资源评论
筱筱笎琞
- 粉丝: 8
- 资源: 15万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于STM32F103C8T6单片机蓄电池在线监测系统主板硬件(原理图+PCB)工程文件.zip
- mysql大纲资料.txt
- c++大纲资料.txt
- 效率工具bat脚本实现日志提取
- MyBatis 中动态 SQL 的示例
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功